什么是shell
- shell是一个命令解释器,提供用户和机器之间的交互
- 支持特定语法,比如逻辑判断、循环
- 每个用户都可以有自己特定的shell
- CentOS7默认shell为bash(Bourne Agin Shell)
- 还有zsh、ksh等
1.10 命令历史
怎么查看历史命令?如下:
# cat /root/.bash_history
在自己的家目录下,存放的历史命令。
1.11 命令能存多少条呢?可以查看历史命令
# history
这是之前存放的命令,默认最大能存1000条,怎么查看?如下:
# echo $HISTSIZE
1000
注:当你敲的命令只是存在内存当中,退出终端才保存到自己的家目录下。清空内存中的历史命令。如下:
# history -c
1.12 更改历史命令最大保存1000,编辑配置文件:
# vim /etc/profile
找到
HISTSIZE=1000
更改为你想要的最大历史保存数量
HISTSIZE=5000
这样更改不是马上生效,是要退出终端从新连接才生效。如何做不退出终端生效?如下:
# source /etc/profile
不相信可以echo查看下
# echo $HISTSIZE
5000
1.13 把对应的命令用时间记录下来,怎样才能达到效果?如下:
vim /etc/profile
找到
HISTSIZE=5000
在下面一行添加如下:
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
马上生效
# source /etc/profile
# history
1 2019/09/22 14:35:05 vim /etc/profile
2 2019/09/22 14:37:12 source /etc/profile
这时候就定义格式。
1.14 怎么永久保存不让别人删除
# chattr +a ~/.bash_history
[root@linux1 ~]# rm -f .bash_history
rm: 无法删除".bash_history": 不允许的操作
1.15 怎么去执行历史命令?
# !!
history
!!是执行历史命令的最后一条
!n(n是数字)执行n的命令
# !10
chattr +a ~/.bash_history
!vim是指执行最后一次用到vim的命令
# !vim
vim /etc/profile
2.10 命令补全和别名
- tab键,敲一下自动补全命令,敲两下查看文件
- 参数补全,安装bash-completion
- alias别名给命令重新起个名字
- 各用户都有自己配置别名的文件 ~/.bashrc
- ls /etc/profile.d/
- 自定义的alias放到~/.bashrc
2.11 参数补全,安装bash-completion
# yum install -y bash-completion
需要重启机器生效。
2.12 alias别名给命令重新起个名字,假如输入一个命令很长,可以做个别名偷懒。如下:
# alias aaa=‘vim /etc/sysconfig/network-scripts/ifcfg-ens36‘
这时候输入aaa就能编辑网卡配置文件,查看全部别名。
# alias
各用户都有自己配置别名的文件 ~/.bashrc,可以cat查看下:
# cat .bashrc
还有在/etc/profile.d/文件里面,自定义别名放到~/.bashrc下。如何取消别名:
# unalias aaa
3.10 通配符
把文件txt的文件全匹配出来
# ls *.txt
1.txt 2.txt 3.txt
3.11 ?号是匹配任意一个字符
# ls ?.txt
1.txt 2.txt 3.txt a.txt
3.12 []方括号写的是范围,你要搜索的范围
# ls [0-3].txt
1.txt 2.txt 3.txt
# ls [13].txt
1.txt 3.txt
# ls [0-9a-z].txt
1.txt 2.txt 3.txt a.txt
4.10 输出重定向
>一个大于号把前面查看的内容的输出输入到后面的文件,会删除后面文件里面的内容
# cat 1.txt > 2.txt
>>两个大于号是把前面输出的内容追加到后面的文件。不会删除后面文件里面的内容
# cat 1.txt >> 2.txt
4.11 >正确的输出 >>追加 2>错误的输入 2>>追加错误的 如何把正确输出和错误输出输入到一个文件里面去 &结合正确和错误的:
# ls [12].txt aaaa.txt &> a.txt
# cat a.txt
ls: 无法访问aaaa.txt: 没有那个文件或目录
1.txt
2.txt
把正确的输出和错误的输出放到a.txt里还可以追加
# ls [12].txt aaaa.txt &>> a.txt
可以把正确的输出保存到1.txt 错误的保存到a.txt
# ls [12].txt aaaa.txt > 1.txt 2> a.txt
# cat 1.txt
1.txt
2.txt
# cat a.txt
ls: 无法访问aaaa.txt: 没有那个文件或目录
5.10管道符和作业控制
管道符把一个输出的结果传给后面的命令
# cat 1.txt | wc -l
5.11 作业控制,当你在vi或者vim编辑一个文件时,想看看磁盘负载一般模式ctrl+z退出查看
# vim 1.txt
[1]+ 已停止 vim 1.txt
它还在编辑配置文件,回到配置文件按fg命令即可
# fg
jobs可以把停止编辑的文件列出来
# jobs
也可以调到后台去执行
# bg 1
sleep暂停,暂停5秒
# sleep 5
6.10 shell变量
获取系统的变量,系统的变量都是大写开头
# env
还有另外一种查看变量,也可以查看用户自定义的变量
# set
可以自定义变量
# a=111
# echo $a
111
# set |grep 111
_=111
a=111
变量名规则:字母、数字下划线,首位不能为数字
变量值有特殊符号时需要用单引号括起来
# a="a$bc"
# echo $a
a
# a=‘a$b c‘
# echo $a
a$b c
为什么要单引号,上图可以清晰看出。双引号达不到想要的效果。
上图要取中间值或者要加上””双引号引起来