本文主要是关于《鸟哥的Linux私房菜:基础篇》中第四章到第十二章的笔记,有些自己已经理解或感觉很少会使用到的东西没有再做记录,笔记的顺序做过一定的整理,不是完全按照书上的顺序,此外还加入了一些在别的地方学到的Linux的常用知识。
在命令行中[]表示可选,<>表示必选,{}表示任选一个。
一、基础知识
Ctrl+Alt+[F1~F6]:在桌面按下可进入编号为1~6的文本模式(又称终端接口、terminal、console),再按下相同的按键返回图形化窗口。command [-options] 参数1 参数2 ...:一般的指令格式command:指令名[]:表示可选-:表示是缩写,如-h--:表示全称,如--help参数:命令的参数在某些特殊情况下选项和参数前面也有可能带有正号
+。
在指令中无论空几格都视为一格。在Linux中大小写字母是不一样的。
Tab:具有命令补全和文件补全的功能- 在一个没打完的命令名后按两次
Tab就可以显示所有以该字符串为前缀的命令名 - 在一个没打完的文件名后按两次
Tab就可以显示所有以该字符串为前缀的文件名 - 在
-或--后面按两次Tab就可以显示改命令所有的可选项
- 在一个没打完的命令名后按两次
Ctrl+其他键Ctrl+c:终止当前进程的运行Ctrl+z:挂起当前进程Ctrl+d:键盘输入结束,即EOF,并且该组合键还可以当作exit命令来使用Ctrl+a:让光标移动到整个指令串的最前面Ctrl+e:让光标移动到整个指令串的最后面Ctrl+?:清除本行指令
文件有好多种,在输入
ls -al显示文件的属性时,第一个字符为-则是一般文件,为d则是目录文件,为l则为快捷方式(连结档)Linux 中的文件实际上没有扩展名,不过仍常根据文件的拓展名来区分文件的类型,如
.sh是shell的脚本文件,.tar, .tar.gz, .zip, .tgz等为压缩文件文件名的第一个字符为
.时表示为一个隐藏文件。根据约定好的标准,linux下不同的目录所存储的文件类型是一样的,以下目录中比较重要的有
/etc, /bin, /dev, /lib, /sbin等。/bin:存储可执行文件/boot:存储开机会用到的文件/dev:存储装置和接口设备/ect:存储配置文件/lib:存储函式库文/media:存储可移除的装置,如软盘、光盘、DVD等/mnt:存储暂时挂载的其他装置/opt:存储第三方协议软件/run:存储开机后产生的各项信息/sbin:存储开机、修复、还原系统所需要的指令/tmp:存储一般用户或正在执行的程序所产生的文件/usr:存储各种软件/var:存储变动性的数据/home:默认的用户家目录/root:root用户的家目录
目录符号
.:本层目录..:上层目录-:前一个目录~:当前用户的家目录~用户名:该用户的家目录/root:root 用户的家目录/home/用户名:普通用户的家目录/:根目录,即所有目录最顶层的目录
vim是进阶版的vi,可以用不同颜色显示文字内容,并且具有程序编写的功能,可以根据程序的类型来进行显示。vi有三种模式:- 一般指令模式:用vi打开文件后默认进入一般指令模式
30↓:往下移动30行Ctrl+f或PageDown:下一页Ctrl+b或PageUp:上一页n+Space:光标右移n个字符,n表示数字0或home:移动到这一行的最前面字符$或end:移动到这一行的最后一个字符Shift+g:移动到文件的最后一行gg:移动到文件的第一行n+Enter:光标往下移动n行/字符串:从光标处开始往下寻找字符串?字符串:从光标处开始往上寻找字符串n:向下重复前一个搜寻操作:n1,n2s/word1/word2/g:在第n1行和n2行之间搜寻word1并将其替换为word2:1,$s/word1/word2/g:从第一行到最后一行寻找word1,并将其地换为word2dd:删除光标所在的一整行yy:复制游标所在的那一行p:在光标的下一行粘贴u:复原上一个动作.:重做上一个动作
- 编辑模式:按下
i,I,o,O,a,A,r,R中的任意一个字母后进入编辑模式,按下ESC键退出 - 指令行命令模式:输入
:,?后进入指令行命令模式:set nu:显示行号:set nonu:取消行号
- 一般指令模式:用vi打开文件后默认进入一般指令模式
在输入命令时,如果想输入多行,可以先输入
\,然后立刻输入回车键,就可以在下一行继续写了。vi 文件名当文件名存在时直接打开,不存在时新建。一般输入i进入编辑模式,输入ESC键退出编辑模式,输入:进入指令行命令模式,:wq!中w是写入保存,q是退出,!是强制执行如果输入
alias显示 vi=’vim’,则说明在执行vi指令时,默认使用的是vim可以用vim 后面接多个文件来同时对多个文件进行编辑,在指令行模式下,
:n是编辑下一个文件,:N是编辑上一个文件,:files是列出目前这个vim所开启的所有文件。在指令行模式下输入:sq [文件名]可以同时浏览多个文件,当加文件名时则在一个新窗口打开该文件,当不加文件名时,在同一个窗口内打开。Ctrl+w+↑切换到上面的窗口,Ctrl+w+↓切换到下面的窗口,Ctrl+w+q退出当前窗口。linux下默认的shell是bash
/etc/profile:保存系统整体的设定的文件,在用户登录系统时,会自动调用/etc/profile然后该文件又会自动调用其他配置文件~/.bash_profile或~/.bash_login或~/.profile:当前用户的设定文件source 配置文件名:不需注销即可把配置文件里的内容加载进来,source的作用同.通配符
*:0到无穷多个任意字符?:一个任意字符[abcd]:取[]中的任意一个字符-:在编码顺序内的所有字符,如[0-9]表示0-9共10个数字^:反向选择,如[^abc]表示除了abc之外的其他一个字符
特殊字符
#:注释符号\:转义字符|:管线,分割两个管线命令的界定;:连续性命令的节点$:取用变数的前导符&:工作控制,将指令变为背景下工作!:逻辑非():中间为子shell的起始和终止{}:中间为命令区块的组合。
>和>>是输出重定向,即将本来要输出到屏幕的内容输出到其他位置,如某个文件中,前者是覆盖写入,后者是追加写入,如ls -a / >~/rootfile将目录/下的所有文件名以覆盖的形式写入到~/rootfile中,文件不存在时会自动建立。1>和1>>是标准输出的重定向,即将指令正常运行时的信息重定向输出,2>和2>>是标准错误输出的重定向,即将指令运行错误时的信息重定向输出。&>可以将正确和错误信息输出到同一个文件中,并且顺序不会乱<和<<是输入重定向,即将本来要从键盘输入的内容改为由其他方式(如文件)输入,后者由文件输入之后必须通过键盘输入EOF之后才结束cmd;cmd:不考虑指令相关性的连续指令下达cmd1 && cmd2:若cmd1正确执行完毕,则继续执行cmd2,反之不执行cmd2cmd1 || cmd2:若cmd1正确执行完毕,则不执行cmd2,反之执行cmd2管线命令
|和连续下达命令;是不同的,它可以让第一个命令的正确输出信息作为第二个命令的输入,有多个命令时以此类推。不是所有的指令都可以当作后面的指令,它必须要有接收标准输入的能力在管线中当某些指令需要用到文件名来进行处理时,该标准输入和标准输出可以利用
-来代替&可以让命令在后台运行,如cp -r /usr/* test &将/usr目录下的所有文件和目录复制到test目录下,该过程在后台完成
二、常用命令
exit:在命令行里输入可以实现当前用户的注销(退出当前命令行,非关机)man readline:查看bash中的默认快捷键date:显示日期和时间cal [month] [year]:显示日历bc:简单好用的计算器+ - * / ^ %:支持加、减、乘、除、指数、取余等,默认输出只支持整数;- 输入
quit退出。
command --help:查看指令的帮助信息,即怎样使用who:查看当前有哪些用户在线shutdown|poweroff|halt:关机,常用第一个shutdown [-krhc] [时间] [警告信息]:关机-k:只发出警告信息不关机-r:重新启动-h:立即关机-c:取消正在进行的shutdown指令时间:系统关机的时间,单位是分钟,默认为1分钟
例:
shutdown -h now:立即关机shutdown -h 20:25:下一个20点25分关机
reboot:可以重启su 用户名:切换用户exit:在进入新用户身份后,该指令可返回原用户身份
echo $PATH:查看环境变量,echo有显示、印出的意思,$表示后面接的是变量名alias lm='ls -al':命令别名设定功能,将ls -al这个指令设定一个别名lm不加参数:查看所有有别名的命令unalias lm:取消命令的别名。
history [n]:查看历史命令n:数字,列出最近的n条命令history [-c]:将所有历史命令全部清除history [-raw] histfiles:查看历史命令-a:将历史命令额外保存在histfiles文件中-r:将histfiles文件中的内容读入到history记忆中-w:将目前的history记忆内容写入到histfiles中。
!number执行history记忆中的第number个命令,!command向前搜索以command为开头的指令并执行,!!执行上一个命令df [-ah] [文件或目录名]:列出文件系统的磁盘使用量-a:列出所有的文件系统-h:自动以KB、MB、GB等合适的格式显示
du [-ah] [文件或目录名]:评估文件系统的使用量-ah:如上,默认以KB为单位显示
例:
du -sh *:查看当前目录下每个文件、文件夹的大小
gcc 文件名:对源代码进行预处理、编译、汇编和链接,默认输出为:可执行文件”a.out”,编译后的文件”sourcename.o”,汇编文件是”sourcename.s”,预处理后的C源代码送往标准输出gcc 文件名 -o 输出文件名:指定输出文件的文件名对于多个文件联合执行的,除.h文件不需要编译外,其他文件都需要编译:
gcc -c example.cgcc -c add.cgcc -c modify.cgcc -c delete.c
编译后生成目标文件
example.o, add.o, modify.o, delete.ogcc example.o add.o modify.o delete.o -o example
链接以上四个文件,生成可执行文件
examplegcc 文件名 -l 路径名:如果头文件不在gcc的搜索路径中,可以用该选项指定额外搜索路径,如gcc helloworld.c -l /usr/include -o helloworld将该目录加入到头文件的搜索路径中wget [-bc] url:从指定URL下载-b:在后台下载-c:断点续传
进入后台下载的任务,可以先找到其下载日志文件,然后用
tail -f wget-log或cat wget-log查看下载情况
##########目录操作命令:cd, pwd, mkdir, rmdir, ls##########
cd:变换目录(change directory),cd后不加任何目录表示回到家目录pwd [-P]:显示当前目录(print working directory)-p:显示确实的路径,而不是用链接路径
mkdir [-mp] 目录名:创建一个新的目录-m:配置文件的权限,例:mkdir -m 777-p:直接将所需的目录(包括上层目录)递归的建立起来
rmdir [-p] 目录名:删除空目录-p:连同上层的空目录一起删除,若目录中有内容则无法删除,例:rmdir -p a/b/c。
ls [-ahl] 文件名或目录名:显示文件或目录信息-a:显示所有文件(包括以.开头的隐藏文件)-h:将文件的容量以人类易读的方式显示-l:长数据串行出,包含文件的属性与权限等数据
##########文件操作命令:cp, rm, mv, sort, uniq, wc##########
cp [-adfirsu] 源文件名 目标文件名:复制文件或目录-a:相当于-dr --preserve=all-d:若源文件为链接文件的属性,则复制链接文件属性而非文件本身-f:强制的意思-i:若目标文件已经存在,则在覆盖时会先进行询问-r:递归持续复制,用于目录的复制行为-s:复制为符号链接文件,即快捷方式文件-u:当源文件比目标文件新或目标文件不存在时才进行更新或复制--preserve=all:连同文件的各种属性也复制过去
rm [-fir] 文件名或目录名:移除文件或目录-f:强制执行,可以忽略不存在的文件,不出现警告信息-i:互动模式,删除前会先询问-r:递归删除
例:
rm -i bashrc*:删除以bashrc开头的文件或目录,其中*表示0到无穷任意多个字符rm ./-aaa:删除名为-aaa的文件,不能直接运行rm -aaa,因为-会被当作选项。
mv [-fiu] 源文件名或目录名 目标文件名或目录名:移动文件或目录,或更名-f:强制覆盖目标文件-i:覆盖前先询问-u:若源文件比目标文件新时才更新
例:
mv 旧文件名 新文件名:实际是更名的效果mv 文件名1 文件名2 目录名:当有多个文件或目录名是,最后一个一定是目录,其作用是将所有文件都移动到目录中rm *:删除当前目录下的所有文件rm *.txt:删除当前目录下的所有文本文档
sort [-fbnru] 文件名:排序-f:忽略大小写-b:忽略最前面的空格-n:以纯数字(而不是字符)的方式排序-r:反向排序-u:对于相同的数据只显示一行
uniq [-ic] 文件名:对文本文件中的行去重,通常与sort命令配合-i:忽略大小写-c:在第一列显示重复次数
wc [-lwm] 文件名:统计文件信息-l:仅列出行数-w:仅列出多少字-m:多少字符
##########读写文件命令:echo, vi, cat, tac, nl, head, tail, od, more, less##########
echo 内容 > 文件名:创建文件并写入文本内容例:
echo "love you" > zza.txt:将文本写入到zza.txt中
echo 内容 >> 文件名:向文件里追加内容,若文件不存在则新建vi 文件名:打开或创建一个文本文件,并可以在vi界面输入内容cat > 文件名:创建文件并在下一行写入文本内容,输入Ctrl+C表示输入结束cat >> 文件名:在文件中追加内容cat [-nv] 文件名:由第一行开始显示文件内容,cat是concatenate(连续)的缩写-n:打印出行号,空白行也有行号-v:列出一些看不出来的特殊字符
tac 文件名:从最后一行开始显示(是cat倒着写)nl [-bnw] 文件名:显示的时候输出行号,cat和nl都不可以用PageDown或PageUp进行翻页-b a:无论是否为空行,都显示行号-n ln:在屏幕的最左方显示行号
head [-n number] 文件名:从头开始显示指定行数的文件内容tail [-f] [-n number] 文件名:从末尾开始显示指定行数的文件内容-f:持续侦测文件内容,当文件正在写入时使用
例:
tail -n +100 /etc/man_db.conf:显示第100行往后的内容
od 文件名:以二进制的方式读取文件内容more 文件名:显示文件内容Space:往下翻页b:往上翻页Enter:往下翻一行/字符串:在当前显示内容中往下搜索字符串:f:显示文件名和当前显示的行数q:退出
less 文件名:除了more有的操作,还有PageDown:往下翻页PageUp]:往上翻页?字符串:向上搜索字符串n:重复前一个搜索g:跑到文件的第一行Shift+g:跑到文件的最后一行
od [-t TYPE] 文件名:显示文件内容-t a:用默认字符来输出-t c:用ASCII字符来输出、-t d:用十进制来输出-t f:用浮点数来输出-t o:用八进制来输出-t x:用十六进制来输出
##########修改文件属性命令:touch, umask, chattr, lsattr##########
touch [-am] 文件名:修改文件或目录的时间属性-a:仅修改access time-m:仅修改modification time
umask [-S]:查看或指定当前用户在建立文件或目录时的权限默认值。不加参数:显示四个数字,分别表示root用户、当前用户、用户组和其他用户的权限,其中读权限r为4分,写权限w为2分,执行权限x为1分-S:以人能读懂的方式显示当前用户、用户组和其他用户的权限,如drwxr-xr-x中的第一个d表示为目录,若为-表示为普通文件,当没有相应的权限时用-占位
例:
umask 022:指定当前用户、用户组和其他用户的权限
chattr [+-=][ai] 文件名或目录名:配置文件隐藏属性+:增加一个特殊参数-:删除一个特殊参数=:设定一定,且仅有后面的参数-a:设定文件只能增加数据,不能删除和修改-i:设定文件不能删除、改名或增加数据等。-ai只有root用户才能设定。
lsattr [-adR] 文件名或目录名:显示文件隐藏属性-a:将隐藏文件的属性也显示出来-d:如果是目录则只列出目录本身的属性而非目录内文件的属性-R:连同子目录的数据也一并列出来
##########寻找文件命令:which, whereis, locate, find, grep##########
which [-a] command:寻找可执行文件/命令的路径-a:将所有PATH目录中可以找到的指令均列出,默认是只列出第一个
whereis 文件或目录名:在一些特定的目录中寻找文件locate [-i] 关键词:利用数据库来寻找文件,数据库一般是一天更新一次,可以用updatedb来更新数据库-i忽略大小写
find [PATH] [option] [action]:在硬盘上寻找文件option:-name filename:指定文件名-size [+-]SIZE:搜索比SIZE大还是小的文件,c表示byte,k表示KB,m表示MB-type TYPE:指定文件类型,f是一般文件,d是目录,l是连接档。
path:默认是全名,也可以带有*等action:有执行和打印等,如find / -size +1M -exec ls -l {} \;,从-exec到;为find命令额外执行的动作,{}表示由find找到的内容,;是结束的标志。即先找到size小于1M的文件,然后用ls命令列出来
grep [-acinv] [--color=auto] '搜索字符串' 文件名:分析一行讯息,若有所需信息则取出来-a:将二进制文件以文本文件的方式搜索-c:计算找到‘搜索字符串’的次数-i:忽略大小写-n:顺便输出行号-v:反向选择,即显示没有出现’搜索字符串’的那一行
##########压缩命令:gzip, bzip2, xz, tar##########
- 压缩文件的拓展名大多是
*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz,其中.tar的文件只是打包过,没有经过压缩 gzip [-dtv#] 文件名:压缩/解压缩命令不加参数:压缩成扩展名为.gz的文件-d:解压,解压后会删除源文件,可对扩展名为.Z, .zip, .gz的文件进行解压-t:检验压缩文件的一致性,检验文件是否出错-v:显示压缩比等信息(压缩时用)#:为数字的意思,代表压缩等级,-1最快但压缩比大,-9最慢但压缩比小
bzip2 [-dkv#] 文件名:压缩时生成的文件后缀名为.bz2,该命令的压缩率比gzip高,但速度慢些-k:保留源文件而不删除-dv#:和gzip相同
xz [-dlk#] 文件名:压缩时生成的文件后缀名为.xz,压缩率更高-l:列出压缩文件的相关信息,如压缩前后的大小和压缩率等-dk#和bzip2相同
以上三个指令只能对单一的文件进行压缩,如果是多个文件则需要先进行打包,再进行压缩
zcat/zmore/zless:用来读取纯文本文档被压缩后的压缩文件tar [-z|-j|-J] [-cv] [-f 待建立的新文件名] 要打包或压缩的文件名列表:打包或压缩tar [-z|-j|-J] [-tv] [-f 已有的文件名]:查看打包文件包括哪些文件tar [-z|-j|-J] [-xv] [-f 已有的文件名] [-C 目录名]:解打包或解压缩,C为大写-c, -t, -x不可同时出现在同一指令中-z:用gzip进行压缩/解压缩-j:用bzip2进行压缩/解压缩-J:用xz进行压缩/解压缩
-z, -j, -J不可同时出现在同一指令中-v:在压缩/解压缩过程中将正在处理的文件名显示出来-f 文件名:指定要处理的文件-C 目录:指定要解压到的目录
例:
tar -jxv -f filename.tar.bz2 -C 目录名:用bzip2将该压缩文件解压到指定目录中tar -jcv -f /root/system.tar.bz2 --exclude=file1 --exclude=file2:不打包目录中的某几个文件
如果不加
[-z|-j|-J]则是进行打包,此时文件名要指定为*.tar,若添加[-z|-j|-J]进行压缩时文件名要指定为\*.tar.gz|\*.tar.bz2|\*.tar.xz,通过tar命令打包的文件被称为tarfile,通过tar命令压缩的文件被称为tarball
##########进程相关命令:ps, top, kill, jobs, fg, bg##########
ps [-alru]:(process state)查看进程状态,结果并不动态连续-l:以表格形式输出-u:按用户名启动时间的顺序来显示进程-a:显示所有用户的所有进程-r:显示运行中的进程
top [-bcdinpqsS]:动态件事系统任务,输出结果是连续的-b:以批量模式运行,但不能接受命令行输入-c:显示命令行,而不仅仅是命令名-d 秒数:设置两次刷新时间的间隔-i:禁止显示空闲进程或僵尸进程-n 次数:设置更新次数,显示完后退出。-p PID:仅件事指定进程的ID,PID是个数值-q:不经任何延时就刷新-s:安全模式运行,禁用一些效互指令-S:累计模式,输出每个进程的总CPU时间
kill 进程号:删除进程kill -9 PID:杀死正在占用显存的进程fg 任务号:恢复到前台运行bg 任务号:恢复到后台运行jobs:查看被挂起的进程
##########用户管理命令:useradd, usermod, userdel, passwd, su, id, whoami, w##########
useradd [-degsu] 用户名:新建用户帐号(超级用户可用)-d 目录名 用户名:指定用户登入时的主目录-e 日期 用户名:帐号终止日期-g 群组 用户名:指定账户所属的用户组-s shell 用户名:指定账户登录后所使用的shell-u uid 用户名:指定用户ID
usermod [-degsul] 用户名:修改用户属性(超级用户可用)- `-d 目录名 用户名指定用户登入时的主目录
-e 日期 用户名:帐号终止日期-g 群组 用户名:指定账户所属的用户组-s shell 用户名:指定账户登录后所使用的shell-u uid 用户名:指定用户ID-l 新用户名 旧用户名:修改用户名
userdel [-rf] 用户名:删除指定的用户帐号(超级用户可用)-r 用户名:不仅删除帐号,还删除所属文件-f 用户名:删除用户登入目录及目录中的所有文件
passwd [-dlus]:设置或修改用户口令及其属性-d 用户名:删除用户的口令l用户名:暂时锁定指定的用户帐号-u 用户名:结束指定用户帐号的锁定-s 用户名:显示指定用户帐号的状态
su 用户名:切换用户身份,超级用户可切换为普通用户,而不输入口令,普通用户则需要输入口令。使用exit可以返回原来的用户sudo passwd root:然后输入两遍密码,即可更新root用户的密码id 用户名:查看用户的UID、GID和用户所属组的信息,默认为当前用户whoami:查看当前用户名w:查看当前登录系统用户和详细信息
##########用户组管理类命令:groupadd, groupmod, groupdel##########
groupadd [-go] 用户组名:新建组群(超级用户可用)-g:指定用户组ID-o:允许组ID不唯一
groupmod [-gno] 用户组名:修改指定用户组的属性(超级用户可用)-g:指定新的用户组ID-n:指定新的用户组名字-o:允许组ID不唯一
groupdel 用户组名:删除指定的用户组(超级用户可用)
##########文件权限管理命令:chmod, chown, chgrp##########
chmod 对象 操作符 权限:修改文件的访问权限- 对象
u:文件所有者g:同组用户o:其他用户
- 操作符
+:增加-:删除=:赋予
- 权限
r:读w:写x:执行s:设置用户ID
例:
chmod g-w file:取消同组用户对file文件的写入权限chmod 755 pict:将pict目录的访问权限设置为775
- 对象
chown [-cR] 所有者/组 文件名:将指定文件的拥有者改为指定的用户或用户组-c:显示更改的部分的信息-R:处理指定目录以及其子目录下的所有文件
chgrp [-cR] 组名 文件名:改变文件的所属用户组-c:显示更改的部分的信息-R:处理指定目录以及其子目录下的所有文件
三、不常用命令
man command:查看指令如何使用,进入man指令的功能后Space:往下翻页q:退出/:后加字符串,可以向下搜索该字符串?:向上搜索字符串n:搜索下一个
info:和man指令的作用差不多,它把文件数据拆成一个个独立页面(节点),并用超链接来跳转到不同的页面,每个节点前有*符号U:跳到上一个节点处N:跳到下一个节点处↑|↓:移动到某个节点Enter:进入节点Tab:在节点之间快速移动q:退出info page
sync:让内存中尚未更新保存的数据写入到磁盘中basename /etc/sysconfig/network:取最后的文件名,即networkdirname /etc/sysconfig/network:取目录名,即/etc/sysconfigln [-sf] 源文件 目标文件:制作连接档-s:软连接,即快捷方式,默认是硬连接-f:强制执行,若目标文件存在则将其删除后再建立
linux中的变量的设定
name="my name is $NAME",如果变量内容有空格符,需要用单引号或双引号将其括起来,在双引号中$符后面的被当做是变量名,单引号中的特殊字符被当作纯文本。若为变量扩增内容时,可使用:
PATH="$PATH":/home/bin或PATH=${PATH}:/home/bin或PATH=$PATH:/home/binunset 变量名:取消变量的设定env:查看所有的环境变量export [变量名]:将自定义变量转成环境变量,若不加变量名则默认全部环境变量read [-pt] 变量名:从键盘输入变量-p:后面接提示字符-t:后面接等待的秒数
declare [-aixr] 变量名:宣告变量的类型-a:将后面的变量定义为数组类型-i:将后面的变量定义为整数类型-x:将后面的变量变成环境变量-r:将后面的变量设定为只读类型
一个变量有多个不同的内容时,内容之间由:隔开。
${variable#/*local/bin:}:可以删除结尾是local/bin的变量内容,并且从左往右开始删除第一个#:从最前面开始删除且只删除第一个##:把匹配到的全删除%和%%:与#和##类似,只不过是从后面开始删除
${variable/old/new}:用新的值取代旧的值,若为//old/new则所有符合的内容都要取代new_var=${old_var-content}:如果旧变量存在则将其值赋给新变量,否则新变量的值为为contentnew_var=${old_var:content}:和前者类似,只是当旧变量为空时,新变量的值也取contentstty [-a]:设定终端机的输入按键代表的含义,stty 是 setting tty 的缩写-a:将目前所有的syyt参数列出来。列出的内容中intr=^C中intr表示终止当前运行的程序,^表示Ctrl键,类似的kill表示删除当前指令行的所有内容,?表示退格键。stty erase ^h设置向后删除字符的快捷键为Ctrl+h
cut -d '分隔字符' -f fields:从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出-d:后面跟分隔字符,与-f一同使用-f:依据-d后面的分隔字符将一段讯息分为数段,用-f取出第几段-c:以字符为单位取出固定字符区间,后面跟数字范围,如12-或12-20。如echo ${PATH} | cut -d ':' -f 3,5将PATH信息以字符:分隔后,取出第3,5段
tee [-a] 文件名:读取标准输入的数据,并将其内容输出到文件和屏幕-a以追加的方式写入到文件中
col [-x]:过滤控制字符-x:将Tab键转换为对等的空格键
join [-ti12] 文件名1 文件名2:对比两个文件,将具有相同数据的行合并-t:分隔符,默认是空格-i:忽略大小写-12:分别表示第1、2个文件要用哪个字段来分析,即用第1个文件的第几列和第2个文件的第几列相匹配
如第一个文件中有”name:root”,第二文件中有”name:zuzhiang”,则以“:”为分隔符,合并后的结果是”name:root:zuzhiang”
paste [-d] 文件名1 文件名2:将两个文件对应的两行放到同一行,中间以Tab键隔开-d:分割字符,默认是Tab键-:如果file部分写成-,表示来自标准输入的意思
expand [-t] 文件名:将Tab键转成空格键-t:后面接数字,表示一个Tab键由几个空格代替
split [-bl] 文件名 前缀:将大文件分区成为小文件-b:后面接想要分区后的文件大小,可加单位b,k,m等-l:以行数来进行分区前缀:前导符的意思,可作为分区文件的前导文字
xargs [-0epn] 命令:读入标准输入的数据,并以分隔符为界,将其分隔成为不同的参数,xargs后面没有接任何指令时,默认以echo来进行输出-0:可将,,\,Space等字符还原成一般字符-n:接参数的个数
例:
xargs ls -al:然后输入两个文件夹的名称,则会用ls -al命令列出两个文件夹包含的文件信息
四、未整理
第十一章 正则表达式
正则表达式和通配符是完全不一样的东西
[:alnum:]表示英文大小写字符和数字,[:alpha:]表示任何英文大小写字符,[:blank:]表示空格键和Tab键,[:cntrl:]表示控制键,包括CR/LF/Tab/Del等,[:digit:]表示数字,[:graph:]除了空格键和Tab键之外的所有按键,[:lower:]表示小写字符,[:print:]表示任意可以被打印出来的字符,[:punct:]表示标点符号#$也是,[:upper:]表示大写字符,[:space:]表示任何会产生空白的字符,如空格键、Tab键、CR键等,[:xdigit:]表示十六进制的数字,包括0-9,a-f,A-F。
grep [-A] [-B] [--color=auto] '搜索字符串' filename,-A后面可加数组,为after的意思,除了列出该行外,后续的n行也列出来,-B后面可加数字,为befor的意思,除了列出该行外,前面的n行也列出来。
[]表示搜索字符的集合,只表示一个字符,[^]表示反向选择,^表示定位在行首,$表示定位在行尾,.任意一个字符,*任意0到无穷多个字符,{number[,number]}表示重复字符数,如o\{2\}表示两个o,o\{2,5\}表示2到5个o,o\{2,\}表示2到 无穷个o。
^word待搜索字符串在行首,word$待搜索字符串在行尾,.任意一个字符,*任意0到无穷多个字符,[list]字符集合,从中任取一个,[n1-n2]字符范围,[^list]不是该字符结合的任意一个字符,\{n,m\}。
sed [-nefr] [动作]分析标准输入,-n使用安静模式,标准输入只有在经过sed处理的那一行才会被显示在屏幕上,-e直接在指令行模式上进行sed的动作编辑,-f直接将sed的动作卸载一个文件内,-f filename可以执行filename中的sed动作,-rsed的动作支持的是延伸型正则表达式语法,-i直接修改读取的文件内容,而不是由屏幕输出。
[n1[,n2]]functionn1,n2表示进行动作的行数,function可以是a新增,c取代,d删除,i插入,p打印,s取代,通常搭配正则表达式。如sed 's/old_str/new_str/g'取代
+一个或多个字符,?0个或1个字符,|用or的方式找出数个字符串,()找出群组字符串,其中的字符串是有顺序的一个整体,()+多个重复的群组。
diff [-bBi] from-file to-file对比两个文件的差异,-b忽略一行当中仅有多个空白的差异,-B忽略空白行的差异,-i忽略大小写的不同。
cmp [-l] file1 file2以字节为单位对比两个文件,-l将所有的不同点的字节都列出来,预设是只会输出第一个不同的点。
patch -pN < path_file更新文件,-p表示取消几层目录的意思,patch -R -pN < patch_file还原文件,-R表示还原。
第十二章 Shell脚本
如果读取到一个回车符(CR)就尝试执行该行命令;如果一行的内容太多,可以用\Enter来延伸至下一行;#可作为注释符号。
脚本文件的扩展名为.sh,可以通过bash shell.sh或sh shell.sh来执行
用exit 0表示退出脚本程序,var=$((运算内容)),
1 | read -p "Please input your name:" name |
test -efd filename测试,-e该文件名是否存在,-f文件名是否存在并且为文件,-d文件名是否存在且为目录。
test -rwxs filename,-rwx该文件名是否存在且具有可读、可写、可执行权限,-s该文件名是否存在且为非空白文件。
test file1 -nt|ot|ef file2,-nt判断file1是否比file2新,-ot判断file1是否比file2旧,-ef判断file1和file2是否指向同一文件。
test n1 -eq n2关于两个整数之间的判定,-eq两数值相等,-ne两数值不等,-gtn1大于n2,-ltn1小于n2,-gen1大于等于n2,-len1小于等于n2
test -z string判断字符串是否为空串,若是则返回True,test -n string判断字符串是否为非空串,若是则返回True,test str1==str2判断str1是否等于str2,若相等则返回True,test str1!=str2判断str1是否不等于str2,若不相等则返回True
test -r filename -a|o -x filename多重条件判定,-a表示and,-o表示or,test ! -x file中!表示取反。
[] 也可以起到判断的作用,但是其中的每个部分之间必须有空格来分割,如[ "${home}" == "${mail}" ]判断home与mail变量是否相等,变量最好用双引号括起来,不然可能会出错。
$#代表后面接的参数个数,$@代表”$1”、”$2”等,每个变量是独立的,需要用双引号括起来,$*代表”$1c$2c$3”,其中c为分割字符,一般为空格。从0开始。shift [number]可以拿掉最前面的几个参数,默认是1个。
比如在test.sh文件中写
1 | echo "Total parameter number is: $#" #参数个数 |
1 | if [条件判断式1]; then #在条件判断时,$$表示and,||表示or |
1 | case $变量名 in |
1 | function fname(){ |
1 | while [条件] |
sh [-nvx] scripts.sh执行或debug脚本文件,-n不执行脚本,仅查询语法问题,-v在执行脚本之前先将其内容输出到屏幕上,-x将使用到的脚本内容输出的屏幕上。
- 本文作者: 俎志昂
- 本文链接: zuzhiang.cn/2020/04/02/VBird-Linux/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!