什么是shell

shell是一个命令解释器,提供用户和机器之间的交互 支持特定语法,比如逻辑判断、循环 每个用户都可以有自己特定的shell CentOS7默认shell为bash(全称:Bourne Agin Shell) 还有zsh、ksh等

查看是否有安装包:yum list | grep zsh

命令历史

用户敲命令存放文件:用户家目录/.bash_history 例:/root/bash_history history命令 最大存放1000条 变量HISTSIZE(查看变量:echo $HISTSIZE,系统内置的环境变量) history -c 可以清空history命令查出来的历史命令,但不能删除.bash_history中的记录 只有退出终端的时候才会保存到.bash_history文件中

history显示命令历史最大修改:/etc/profile中修改 若想使修改生效,命令:source /etc/profile

记录命令执行时间(临时):HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 若想永久都显示,可以配置环境变量:vim /etc/profile 把HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "和HISTSIZE=1000放在一起

永久保存(.bash_history文件只能被追加不能被删除) chattr +a ~/.bash_history !! //执行最后一条命令 !n(n指的是数字) //执行history命令出来的第多少条命令 !word(例:!mkdir)

命令补全及别名

tab键,敲一下,敲两下 //补全 参数补全,安装bash-completion:yum install -y bash-completion 安装完成后需要重启终端生效

alias别名给命令重新起个名字(例:alias restartnet='systemctl restart network.service') systemctl restart network.service是重启网络服务的命令

各用户都有自己配置别名的文件 ~/.bashrc alias参数有两个存放位置ls /etc/profile.d/ 和 ~/.bashrc 自定义的alias放到~/.bashrc 取消自定义的别名:unalias 别名

通配符

ls *.txt //*表示通配 查出目录.txt的所有文档 ls ?.txt //表示显示前缀为一个字符的.txt文件 ls [0-9].txt //可以把前缀0-9范围的.txt文档都显示出来 ls [123].txt //可以把前缀为1、2、3的txt文档显示出来 ls {1,2}.txt //相当于ls [12].txt

输入输出重定向

cat 1.txt >2.txt //把1.txt的内容放到2.txt中去,会把2.txt原来的内容删掉 cat 1.txt >> 2.txt //把1.txt的内容放到2.txt中去,不会删除2.txt原来的内容 ls aaa.txt 2> a.txt //2>会把命令的错误信息放到a.txt中去 ls aaa.txt 2>> a.txt //命令的错误信息追加放到a.txt中去 wc -l < 1.txt //<输入重定向,左边必须是命令

管道符和作业控制

管道符 cat 1.txt |wc -l ; cat 1.txt |grep 'aaa' // |就是管道符,把前面的命令传递到后面 作业控制 ctrl+z //暂停一个任务 fg //把任务从后台调出来 jobs //查看后台的任务 bg //把任务放到后台并运行 bg [id] //把任务调到后台 fg [id] //把任务调到前台 命令后面加&直接丢到后台

shell变量

PATH,HOME,PWD,LOGNAME env //查看系统变量 set命令多了很多变量,并且包括用户自定义的变量 自定义变量:a=1 查看一个变量:echo $a 变量名规则:可以是字母、数字下划线,首位不能为数字 变量值有特殊符号时需要用单引号括起来 变量的累加:a=1,b=2 c=a"$b"c c的变量为:a2c 上面增加的变量都是本地的变量(非全局变量)

全局变量export b=2 //export后面跟自定义变量,会在子shell中生效(向下),不会向上 unset 变量名 //取消变量

环境变量配置文件(理解为主)

两个维度:系统层次和用户层次 /etc/profile 用户环境变量,交互,登录才执行(系统层次) /etc/bashrc 用户不用登录,执行shell就生效(系统层次) ~/.bashrc(用户层次) ~/.bash_profile(用户层次) ~/.bash_history ~/.bash_logout //定义用户退出时需要的操作 "~"是指用户的家目录 PS1='[\033[01;32m]\u@\h[\033[00m]:[\033[01;36m]\w[\033[00m]$ ' //颜色显示 PS1是在/etc/bashrc中,PS1就是指用户登陆进去后,命令终端中最左边显示的内容

shell特殊符号

特殊符号

*    任意个任意字符
?    任意一个字符
#    注释字符
\    脱义字符
|    管道符
$     变量前缀,!$组合,正则里面表示行尾
;    多条命令写到一行,用分号分割
~     用户家目录,后面正则表达式表示匹配符
&     放到命令后面,会把命令丢到后台
>     >> 2> 2>> &>
[ ]     指定字符中的一个,[0-9],[a-zA-Z],[abc]

|| 和 && ,用于命令之间
||   相当于或者的意思。若前面命令执行不成功,会执行后面的命令;若前面命令执行成功,就不会执行后面的命令
&&    当前面的命令执行成功时才会执行后面的命令
例:   [ -d ceshi ] || mkdir ceshi([ -d ceshi ]的意思是判断ceshi目录是否存在)cut命令
cut 分割,-d 分隔符  -f 指定段号   -c 指定第几个字符
例:cat /etc/passwd | head -2 | cut -d ":" -f 2

sort命令
sort     排序, -n 以数字排序(字母和特殊符号默认为0) -r 反序  -t 分隔符 -kn1/-kn1,n2

wc -l 统计行数      -m 统计字符数     -w 统计词
uniq     去重(内容连续重复去重), -c统计行数
tee     和>类似,重定向的同时还在屏幕显示        tee -a 追加
tr     替换字符,tr 'a' 'b',大小写替换tr '[a-z]' '[A-Z]'

split     切割,-b大小(默认单位字节),-l行数
指定切割后文件名称前缀:split -b 100k a.txt abc
abc就是切割后文件名称前缀

几个和管道有关的命令

cut命令 cut 分割,-d 分隔符 -f 指定段号 -c 指定第几个字符 例:cat /etc/passwd | head -2 | cut -d ":" -f 2

sort命令 sort 排序, -n 以数字排序(字母和特殊符号默认为0) -r 反序 -t 分隔符 -kn1/-kn1,n2

wc -l 统计行数 -m 统计字符数 -w 统计词 uniq 去重(内容连续重复去重), -c统计行数 tee 和>类似,重定向的同时还在屏幕显示 tee -a 追加 tr 替换字符,tr 'a' 'b',大小写替换tr '[a-z]' '[A-Z]'

split 切割,-b大小(默认单位字节),-l行数 指定切割后文件名称前缀:split -b 100k a.txt abc abc就是切割后文件名称前缀