Shell 基础
shell 介绍
Shell 是一个命令解释器,提供用户与机器的交互,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
我们所接触学习的是 bash shell,属于 Bourne shell 类型。另外还有其他如 C Shell、Korn Shell 等。
shell 是一种脚本语言
可以使用逻辑判断、循环等语法
可自定义函数
shell 是系统命令的集合
history
在用户的家目录下,.bash_history 保存了用户最近输入过的命令(最多 1000 条,由环境变量而定)。
[root@dl-001 ~]# history //查看使用过的命令历史
。。。。。。。。。。。。。。。。。。。
993 cd /data/wwwroot
994 ls
995 init 0
996 echo $HISTSIZE
997 echo
998 echo $HISTSIZE
999 vim /etc/profile
1000 cal
1001 cla
1002 cal
1003 date %F
1004 date +%F
1005 history
[root@dl-001 ~]# echo $HISTSIZE //查看可以存放命令历史的数量
1000
//说明:如果想要修改此函数的数量可以编辑/etc/profile 修改 HISTSIZE=1000,为想要的数字即可,如2000,完成后需要source /etc/profile。
给命令历史添加时间戳
[root@dl-001 ~]# vim /etc/profile
HISTTIMEFORMAT="%Y%m%d %H:%M:%S " //添加此时间格式配置
[root@dl-001 ~]# source /etc/profile
[root@dl-001 ~]# history //查看
1003 20171227 09:34:19 date %F
1004 20171227 09:34:22 date +%F
1005 20171227 09:37:53 history
1006 20171227 09:43:31 echo $HOSTSIZE
1007 20171227 09:43:42 echo $HISTSIZE
1008 20171227 09:48:17 vim /etc/profile
1009 20171227 09:51:00 source /etc/profile
1010 20171227 09:51:20 history
[root@dl-001 ~]# chattr +a /root/.bash_history //给予.bans_history隐藏权限 +a,其不会受限于1000条的规则,并可以永久保存
小技巧
[root@dl-001 ~]# pwd //查看当前目录
/root
[root@dl-001 ~]# !! //执行上一条命令
pwd
/root
[root@dl-001 ~]# !1002 //执行命令历史中的第1002条命令
cal
十二月 2017
日 一 二 三 四 五 六
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
[root@dl-001 ~]# !echo //执行最近一次带有echo的命令
echo $HISTSIZE
1000
(reverse-i-search)`echo': echo $HISTSIZE //Ctrl+r 可以模糊查询最近的一条命令。
命令补全
在 centos 中支持 tab 键命令补全,在 centos 7 中不仅支持命令补全,还支持参数补全。但需要安装一个依赖包 bash-completion, 安装完成后必须重启才可以生效。
通配符
[root@dl-001 ~]# ls //显示所有文件
1_heard.txt 1_sorft.txt 222 anaconda-ks.cfg dir
1q 1.txt 2.txt dd root@192.168.111.127
[root@dl-001 ~]# ls 1*.txt //显示以1开头并且以.txt结尾的文件
1_heard.txt 1_sorft.txt 1.txt
[root@dl-001 ~]# ls [0-9].txt //显示以0-9开头并且以.txt结尾的文件
1.txt 2.txt
[root@dl-001 ~]# ls {1,12}.txt //显示开头是1或者12并且结尾是.txt的文件。
ls: 无法访问12.txt: 没有那个文件或目录 //由于本目录下没有12.txt,所以报错.
1.txt
输入输出重定向
> : 重定向
>>: 追加重定向
2>: 错误重定向
2>> :错误追加重定向
<:输入重定向[root@dl-001 dd]# ls 1.txt 2.txt 3.txt
[root@dl-001 dd]# cat 1.txt 2.txt // 查看 1.txt 文件和 2.txt 文件
hello , I am the 1 file
hello , I am the 2 file
[root@dl-001 dd]# cat 1.txt > 2.txt && cat 2.txt // 将 1.txt 文件重定向 (相当于替换) 到 2.txt 文件中,并且查看 2.txt 文件。
hello , I am the 1 file
[root@dl-001 dd]# cat 1.txt >>2.txt && cat 2.txt // 将 1.txt 文件追加 (在原本文件数据的基础上添加数据) 到 2.txt 文件中,并且查看 2.txt 文件。
hello , I am the 1 file
hello , I am the 1 file
[root@dl-001 dd]# dsfgsd 2>> 3.txt // 将错误信息追加重定向到 3.txt 文件中。
[root@dl-001 dd]# cat 3.txt
-bash: dsfgsd: 未找到命令
[root@dl-001 dd]# ls 1.txt z.txt >1.txt 2>y.txt // 把错误信息和正确信息全部重定向到文件
[root@dl-001 dd]# cat 1.txt
1.txt
[root@dl-001 dd]# cat y.txt
ls: 无法访问 z.txt: 没有那个文件或目录
[root@dl-001 dd]# ls 1.txt 6.txt > 1.txt 2>&1 // 把错误信息和正确信息全部重定向到文件
[root@dl-001 dd]# cat 1.txt
ls: 无法访问 6.txt: 没有那个文件或目录
1.txt
----------