一.什么是shell
shell是一个命令解释器,提供用户和机器之间的交互
支持特定语法,比如逻辑判断、循环
每个用户都可以有自己特定的shell
CentOS7默认shell为bash(Bourne Agin Shell)
还有zsh、ksh等
二.命令历史
概述
history命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。
该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!
执行指定序号的历史命令。例如,要执行第2个历史命令,则输入!2
。
历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量HISTSIZE
进行控制。
语法
history(选项)(参数)
选项
-c:清空当前历史命令; -a:将历史命令缓冲区中命令写入历史命令文件中; -r:将历史命令文件中的命令读入当前历史命令缓冲区; -w:将当前历史命令缓冲区命令写入历史命令文件中。
参数
n:打印最近的n条历史命令。
实例
[root@cc-01 ~]# ls /root/.bash_history #命令路径
/root/.bash_history
[root@cc-01 ~]# echo $HISTSIZE #history的值,环境变量
1000
[root@cc-01 ~]# vi /etc/profile #配置文件
[root@cc-01 ~]# source /etc/profile #生效
[root@cc-01 ~]#HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " #设置环境变量
永久保存 chattr +a ~/.bash_history
!! 运行上一条命令
!n 运行第n条命令
!word 运行某条命令
[root@cc-01 ~]# history #显示近1000条命令
1 yum -y install bash-completion
2 ip
3 ip addr
4 hostnamectl set-hostname cc-o1
5 hostnamectl set-hostname cc-01
6 ping www.baidu.com
7 history
[root@cc-01 ~]# history 3 #显示最近使用3条命令
6 ping www.baidu.com
7 history
8 history 3
三. 命令补全和别名
命令补全:
tab键,敲一下,敲两下
参数补全,安装bash-completion
别名-alias:
概述
给命令重新取个名字,还可以加某些参数,让我们的工作更加方便快捷。
语法
alias(选项)(参数)
选项
-p:打印已经设置的命令别名。
参数
命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’”。
实例
alias 的基本使用方法为:
alias 新的命令='原命令 -选项/参数'
要删除一个别名,可以使用 unalias 命令,如 unalias l。
查看系统别名
设置别名
删除别名
别名路径:
- 各用户都有自己配置别名的文件 ~/.bashrc
- ls /etc/profile.d/ 其他别名配置文件
- 自定义的alias放到~/.bashrc
四.通配符与输出重定向
ls *.txt *匹配所有文件
ls ?.txt ?匹配一个任意字符的文件
ls [0-9].txt [0-9]匹配0-9任意一个数字的文件
ls [a-z].txt [a-z]匹配a-z任意一个字符的文件
ls [12].txt [12]匹配1或者2的文件
ls {1,2}.txt {1,2}匹配1或者2的文件
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>err 错误重定向:ls aaa.txt 错误信息追加到err里面,覆盖。
ls aaa.txt 2>>err 错误追加重定向:ls aaa.txt 错误信息追加到err,直接添加在末尾。
ls [12].txt aaa.txt &>a.txt 正确的错误的都追加到a.txt里面
ls [12].txt aaa.txt >1.txt 2>2.txt 正确的追加到1.txt,错误的追加到2.txt
wc -l < 1.txt 反向重定向:把1.txt内容通过wc -l显示
command >1.txt 2>&1 把command执行的是否正确的东西都输入到1.txt 之打开一次,效率更高
/dev/null 表示空设备文件
0 表示stdin标准输入
1 表示stdout标准输出
2 表示stderr标准错误
五. 管道符和作业控制
概述
管道符:把前面命令的输出结果传递给后面的命令
示例说明
作业控制:
ctrl z 暂停一个任务 回到主窗口
jobs查看后台的任务
bg[id]把任务调到后台
fg[id]把任务调到前台
命令后面加&直接丢到后台
变量:
PATH,HOME,PWD,LOGNAME
env命令 查看常用系统环境变量信息 第一列就是我们系统变量,大写!
set命令多了很多变量,并且包括用户自定义的变量,很多类似shell脚本
系统环境变量
自定义变量
变量名规则:字母、数字下划线,首位不能为数字
变量值有特殊符号时需要用单引号括起来
全局变量 当前终端下任何一个shell都能够识别,只能向下识别。
pstree 以树状图的方式展现进程之间的派生关系,显示效果比较直观
export b=2
unset b 取消变量的值
环境变量配置文件
系统层次 一般不去动(全局需要时才会去编辑)
/etc/profile 用户环境变量,交互,登录才执行
/etc/bashrc 用户不用登录,执行shell就生效
用户层次 只针对用户需要
~/.bashrc
~/.bash_profile
~/.bash_history
~/.bash_logout
/etc/bashrc 下有PS1(Linux系统下的终端命令提示符设置)
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
PS2——再谈提示符
PS3——Shell脚本中使用select时的提示符
PS4——PS4-“set -x"用来修改跟踪输出的前缀
特殊符号
* 任意个任意字符
? 任意一个字符
# 注释字符
\ 脱义字符
| 管道符
几个和管道有关的命令
cut 分割,-d 分隔符 -f 指定段号 -c 指定第几个字符
sort 排序, -n 以数字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2 第几段
默认按ASCII码值进行排序
sort -n 以数字排序(字母或者特殊符号默认是0)
sort -nr 反序
wc -l 统计行数 -m 统计字符数(注意换行符$) -w 统计词
uniq 去重, -c统计行数 (注意得先排序,在去重)
tee 和>类似,重定向的同时还在屏幕显示
tr 替换字符,tr 'a' 'b',大小写替换tr '[a-z]' '[A-Z]' 支持多个
split 切割,-b大小(默认单位字节),-l行数
自定义前缀
-l 以行来切割
特殊符号小结
$ 变量前缀,!$组合,正则里面表示行尾
;多条命令写到一行,用分号分割
~ 用户家目录,后面正则表达式表示匹配符
& 放到命令后面,会把命令丢到后台
> >> 2> 2>> &>
[ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc]
|| 当前面的命令执行不成功的时候,执行后面的命令
&& 当前面的命令执行成功的时候,执行后面的命令
[ -d cc ] 判断是否有cc这目录