本笔记由51码儿(www.51mar.com)提供


8.1shell介绍 shell是一个命令解释器,提供人机交互。 支持特定语法。 每个用户都可以有自己特定的shell(bash)。 CentOS7默认bash(Bourne Agin Shell)。 其他还有zsh、ksh等。


8.2命令历史 命令历史存放于~/.bash_history文件下。 history 查看之前用过的命令,默认保存最近1000条,由变量HISTSIZE设定条数,HISTSIZE可以到配置文件/etc/profile中去配置,配置后需要source才会生效。 history -c 清空当前内存中的命令历史,不能清除~/.bash_history中的命令。 当前的命令,存放于内存中,在退出终端的时候,才会保存到.bash_history文件中。 HISTTIMEFORMAT=”%Y/%m/%d %H:%M:%S” 设定显示时间格式,可在/etc/profile中配置永久生效。配置后,history将显示命令执行的时间。 chattr +a ~/.bashhistory 加a权限,只能追加,不能删除,使命令历史永久保存。 若不正常退出终端,命令历史保存将存在差错。 !! 执行上一条命令。 !n n为数字,执行命令历史中的第n条命令。 !word 执行最近的以word开头的命令。


8.3命令补全和别名 Tab键,敲一下(唯一自动补全),敲两下(多个列出列表)。 CentOS7支持自动补全命令参数。需安装相关包:yum install -y bash-completion,然后reboot重启系统才生效。 命令别名alias command=’comand blablabla’ alias 可查看系统中的命令别名。 ~/.bashrc和/etc/profile.d/目录下的文件中,可以配置命令别名。 unalias command 取消自定义的command命令别名。


8.4通配符

  • 匹配任意多个任意字符。 ? 匹配一个任意字符。 [0-3]或[0123] 匹配方括号中的任意一个字符。[0-9a-zA-Z] {1,2,3,a} 匹配花括号中的任意一个。

8.5输入输出重定向 > 输出重定向。 command >FILE 将command的正确输出,写到FILE中。 command >>FILE 将command的正确输出,追加到FILE中。 command 2>FILE 将command运行输出的错误信息,写到FILE中。 command 2>>FILE 将command运行输出的错误信息,追加到FILE中。 正确+错误:>+2>用&>表示。 command &>FILE 将command运行输出的正确和错误信息,写到FILE中,同样支持追加command &>>FILEcommand >FILE1 2>FILE2 可将正确和错误的信息分开保存,多用于写Shell脚本中。如: ls 1.txt 2.txt >t.txt 2>e.txt < 输入重定向(几乎用不到)。 command <FILE 将FILE文件内容,输入到command命令中。如: wc -l <1.txt 查看1.txt中内容的行数。 wc -l >1.txt 是把wc -l得到的正确输出,写到1.txt中。


8.6管道符和作业控制 | 管道符。 command1 |command2command1输出的内容,交给command2。 作业控制: Ctrl+Z 暂停一个任务。 fg 将后台的任务调到前台。如果后台有多个任务,可用跟编号fg 1,fg 2……来将相应任务调到前台,若多个后台任务,不加编号时,调出最后一个。 bg 将前台任务调到后台。 对于fgbg命令,一个终端查不到另一个终端的任务,但是可以ps aux查到进程,如:ps aux |grep sleep 查看sleep任务的进程。 jobs 列出所有停止的任务,可查看到命令编号。 vmstate t(间隔时间) n(刷新次数) 监控系统状态。 sleep N 系统暂停N秒,什么也不做。 命令后加&符号,直接将命令丢到后台执行。如:*sleep 100 &*。


8.7shell变量(上) env 查看系统变量。变量名通常为大写。 set 查看变量,包括用户自定义变量。 自定义变量: 变量名=变量值 设置变量。 echo $变量名 显示变量。 变量名规则:字母、数字、下划线,首位不能为数字。 变量值有特殊符号时需要用单引号括起来,单引号可以对特殊符号脱义。双引号不能脱义。


8.8shell变量(下) 全局变量(向下生效,pstree可查看): export 变量名=变量值 设置全局变量。 unset 变量名 取消变量。


8.9环境变量配置文件 系统层次:/etc/profile、/etc/bashrc 一般不更改其内容。 用户层次:~/.bashrc、~/.bash_profile、~/.bash_history、~/.bash_logout(定义退出系统时的操作) profile在用户登录时自动加载;bashrc不需要登录,在执行shell的时候自动调用。 变量PS1可设定命令前的显示。PS2设定进入另一个命令中的显示。


8.10shell特殊符_cut命令 * 匹配任意个任意字符。 ? 匹配任意一个字符。 # 注释字符。 \ 脱义字符(设置变量时,对特殊字符,可用\取代单引号)。 | 管道符。 cut 分割内容。 -d 指定分割符。 -f 指定段号。 -c 指定第几个字符。 应用示例:cat /etc/passwd |head -5 |cut -d “:” -f 1,2 读取/etc/passwd,显示前5行,以“:”为分割符,截取1,2段。


8.11sort_wc_uniq命令 sort FILENAME 对文件内容排序(按ASCⅡ码)。 -n 以数字排序(字母全都认为是0)。 -r 反序。 -t 分隔符 -kn1/-kn1,n2。 wc 统计。 -l 统计行数。 -m 统计字符数,包括每行后面隐藏的换行符($)。 -w 统计词。 uniq 去重(只会对相邻行去重,所以需要先排序再去重)。 -c 统计行数(每行重复的次数)。


8.12teetrsplit命令 tee与输出重定向*>*类似,重定向的同时还在屏幕显示,前面需要加管道符|。 >FILENAME 可清空文件内容。 tr 替换字符, tr ‘a’ ‘b’ 将a替换为b。 tr ‘[ab]’ ‘[AB]’ 小a替换为A,小b替换为B。 tr ‘[a-z]’ ‘[A-Z]’ 大小写替换。 split 切割, -b 指定大小(默认单位为字节),可加单位:K,M等。 -l 指定行数。


8.13shell特殊符号(下) $ 变量前缀。 !$ 正则里面表示行尾。 ; 多条命令写到一行,用分号;分隔。 ~ 用户家目录,正则表达式中表示匹配符。 & 放到命令末尾,将命令丢到后台运行。 > 输出重定向; >> 追加重定向。 2>错误输出重定向; 2>> 错误追加重定向。 &> 正确+错误输出重定向。 &>> 正确+错误追加重定向。 [] 指定字符中的一个,[0-9],[a-z,A-Z],[abc]。 || 正则中表示或,用于命令之间。 COMMAND1 || COMMNAD2 表示若第一条命令执行不成功,则执行第二条命令;若第一条命令执行成功,则不再执行第二条命令。 && 正则中表示与,用于命令之间。 COMMAND1 && COMMNAD2 表示只有第一条命令执行成功之后,才执行第二条命令。