shell介绍

什么是shell

  • shell是体格命令解释器,提供用户和机器的交换

  • 支持特定语言,比如逻辑判断。循环

  • 每个用户可以有自己特定的shell

  • CentOS7默认shell为bash

  • 还有zsh。ksh等

8.2 命令历史

  • history命令 命令记录在.bash_history中

    最大1000条,由变量HISTSIZE 决定

    echo $HISTSIZE

    $HISTSIZE在/etc/profile中修改

    source /etc/profile

  • HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"

    命令历史记录日期和时间

    HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"放入/etc/profile中生效

    source /etc/profile

  • 永久保存 chattr +a ~/.bash_history 文件只能追加不能删除

  • !!最后一条命令

  • !n n为数字 ,运行低n条命令

  • !vim 找最后运行的vi命令

8.3 命令补全和别名

  • tab键,敲一下,敲两下。命令/文件路径补全 -CentOS7安装yum install -y bash-completion 参数补全 reboot重启生效

  • alias 别名 alias 查看系统别名 vim .bashrc vim /etc/profile.d/文件下定义的 unalias redtartnet 取消自定义redtartnet的别名

8.4 通配符

  • ls *.txt *表示通配

  • ls ?.txt ?表示一个任意的字符

  • ls [0-9].txt [0-9]中任选其一,字母也支持

8.5 输入输出重定向

  • cat 1.txt > 2.txt 输出从定向

  • cat 1.txt >> 2.txt 追加输出从定向

  • ls aaa.txt 2>err 2表示错误输出从定向

  • ls aaa.txt 2>>err 错误追加输出从定向

  • aaa.txt &>2.txt 错误正确从定向

  • wc -l <1.txt 输入从定向

  • command >1.txt 2>&1 &1就是1.txt

shell特殊符_cut命令

特殊符号

  • *任意哥任意字符

  • ?任意一个字符

  • #注释字符

  • \脱意字符

  • |管道符

几个和管道符有关的命令

  • cut分割,-d分隔符 -f指定段号 -c指定第几个字符

[root@mingming ~]# cat /etc/passwd |head -2root:x:0:0:root:/root:/bin/bashbinroot:x:1:1:bin:/bin:/sbin/nologin[root@mingming ~]# cat /etc/passwd |head -2 |cut -d":" -f 1,2root:xbin:x[root@mingming ~]# /etc/passwd |head -2 |cut -c 2,3,4ootin:
  • sort排序,-n以数字排序 -r反序-t分隔符 -kn/-kn1,n2

[root@mingming ~]#  head /etc/passwd |sortadm:x:3:4:adm:/var/adm:/sbin/nologinbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinhalt:x:7:0:halt:/sbin:/sbin/haltlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinroot:x:0:0:root:/root:/bin/bashshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownsync:x:5:0:sync:/sbin:/bin/syncuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin[root@mingming ~]# head /etc/passwd |cut -d":" -f 3,4|sort -n0:01:12:23:44:75:06:07:08:1210:14
  • wc -l统计行数 -m统计字符数 - w统计词

[root@mingming ~]# wc  /etc/passwd  24   38 1139 /etc/passwd[root@mingming ~]# wc -l /etc/passwd24 /etc/passwd[root@mingming ~]# wc -w /etc/passwd38 /etc/passwd[root@mingming ~]# wc -m /etc/passwd1139 /etc/passwd
  • uniq 去重 -c统计行数

[root@mingming ~]# head /etc/passwd |cut -d":" -f 4|sort -n000012471214[root@mingming ~]# head /etc/passwd |cut -d":" -f 4|sort -n|uniq -c      4 0      1 1      1 2      1 4      1 7      1 12      1 14
  • tee 和>类似,重定向的同事还在屏幕显示 -a 追加

[root@mingming ~]# head /etc/passwd tee 1.txt==> /etc/passwd <==root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
  • tr 替换字符,tr'a''b',大小写替换tr'[a-z]''[A-Z]'

[root@mingming ~]# echo "aminglinux" |tr '[al' '[AL]'AmingLinux
  • split 切割,-b大小(默认单位字节),-l行数 split -b 100m file 100m一个文件

split -l 1000 file 1000行一个文件

split -b 100m file mingming 100m一个文件 并指定名为mingming

8.13 shell特殊符号(下

  • $变量前缀,!$组合,正规里面表示hangwei

  • ;多余命令写到一行,用分号分割

  • ~用户家目录,后面正规表达式表示匹配符

  • 2> 2>> &>

  • [],指定字符中的一个 [0-9].[a-zA-Z],[abc]

  • ||和&&,用于命令之间 ||:或的意思

&& :与的意思

8.9 环境变量配置文件

#扩展 

管道符·作业控制

  • cat 1.txt|wc -l ;cat 1.txt|grep 'aaa' 把cat 1.txt的内容给wc

  • ctrl z 停止一个任务

  • jobs 查看后台的任务

  • bg[id]把任务调到后台

  • fg[id]把任务调到前天

  • 命令后面加&直接丢到后台

shell变量

  • PATH,HOME,PWD,LOGNAME

  • env命令

  • set命令多了跟多变量,并且包括用户自定义的变量

  • 自定义变量a=1

  • 变量名规则:字母,数字下划线,首位不能为数字

  • 变量值有特殊符号时需要用单引号括起来

  • 变量的累加 a=1; b=2

echo $a$b

  • 全局变量export b=2 只在子shell里生效

  • unset变量、

环境变量配置文件

  • /etc/peofile 用户环境变量,交互,登录才执行

  • /etc/bashrc 用户不用登录,执行shell就生效

  • ~/.bash_profile

  • ~/.bash_history

  • ~/.bash_logout

vim /etc/bashrc

  • ps1='[\u@\h \W]$ ' 带颜色 ps1='[033[01;32m]u@\h[\033[00m]:[\033[01;36m]W[\033[00m]$'

  • ps2 进去另外一种输入状态

几个和管道符有关的命令

  • cut分割,-d分隔符 -f指定段号 -c指定第几个字符

[root@mingming ~]# cat /etc/passwd |head -2root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@mingming ~]# cat /etc/passwd |head -2 |cut -d":" -f 1,2root:xbin:x[root@mingming ~]# /etc/passwd |head -2 |cut -c 2,3,4ootin:
  • sort排序,-n以数字排序 -r反序-t分隔符 -kn/-kn1,n2

[root@mingming ~]#  head /etc/passwd |sortadm:x:3:4:adm:/var/adm:/sbin/nologinbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinhalt:x:7:0:halt:/sbin:/sbin/haltlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinroot:x:0:0:root:/root:/bin/bashshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownsync:x:5:0:sync:/sbin:/bin/syncuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin[root@mingming ~]# head /etc/passwd |cut -d":" -f 3,4|sort -n0:01:12:23:44:75:06:07:08:1210:14
  • wc -l统计行数 -m统计字符数 - w统计词

[root@mingming ~]# wc  /etc/passwd  24   38 1139 /etc/passwd[root@mingming ~]# wc -l /etc/passwd24 /etc/passwd[root@mingming ~]# wc -w /etc/passwd38 /etc/passwd[root@mingming ~]# wc -m /etc/passwd1139 /etc/passwd
  • uniq 去重 -c统计行数

[root@mingming ~]# head /etc/passwd |cut -d":" -f 4|sort -n000012471214[root@mingming ~]# head /etc/passwd |cut -d":" -f 4|sort -n|uniq -c      4 0      1 1      1 2      1 4      1 7      1 12      1 14
  • tee 和>类似,重定向的同事还在屏幕显示 -a 追加

[root@mingming ~]# head /etc/passwd tee 1.txt==> /etc/passwd <==root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
  • tr 替换字符,tr'a''b',大小写替换tr'[a-z]''[A-Z]'

[root@mingming ~]# echo "aminglinux" |tr '[al' '[AL]'AmingLinux
  • split 切割,-b大小(默认单位字节),-l行数 split -b 100m file 100m一个文件

split -l 1000 file 1000行一个文件

split -b 100m file mingming 100m一个文件 并指定名为mingming

8.13 shell特殊符号(下

  • $变量前缀,!$组合,正规里面表示hangwei

  • ;多余命令写到一行,用分号分割

  • ~用户家目录,后面正规表达式表示匹配符

  • 2> 2>> &>

  • [],指定字符中的一个 [0-9].[a-zA-Z],[abc]

  • ||和&&,用于命令之间 ||:或的意思

&& :与的意思