shell是操作系统中重要的应用,尤其对linux这种命令行模式的操作系统,shell具有重要的意义。

一、什么是shell

shell是一个命令解释器,提供用户和机器之间的交互。每次我们登录系统后,出现的界面就是shell,相当于我们在界面输入命令,shell把我们输入的内容转换成系统能够理解的内容传递给系统去执行。shell支持特定的语法,有点像c语言,支持逻辑判断,if while语句。 这就是基本的shell。 centos7默认的shell是bash,系统中还支持其他类型的shell,比如zsh、ksh。

二、历史变量(HISTSIZE)介绍及其参数

centos7系统中当前用户输入的命令都储存在用户的家目录下,比如root用户命令就存在/root/.bash_history文件中。 这个文件能储存的命令的数量由HISTSIZE变量决定。这个变量初始值为1000 每次退出终端时,你敲过的命令就会保存在/root/.bash_history文件中。 HISTSIZE变量值的设置在/etc/profile中,这个文件中能够更改很多系统的参数,包括记录命令的数量,记录命令的格式等等。

1、修改系统记录的命令数量 在/etc/profile文件中操作,用vi或者vim打开,定位到46行(顺便复习下vim命令,46j) 更改框中数值为你想要的数值,比如说5000 保存退出,用source命令重载下下 系统的profile使改动生效 看下结果,搞定!

2、修改记录内容,记录每条命令执行的时间 分两种情况,一种是仅对当前终端生效,断开后失效。 命令:HISTTIMEFORMAT="%Y%m%d %H:%M:%S"

永久在/root/.bash_history增加这个内容需要更改/etc/profile文件,操作如下: 跟前面一个例子一样,在/etc/profile文件中操作,用vi或者vim打开,定位到46行(顺便复习下vim命令,46j) 在HISTSIZE行下加入“HISTTIMEFORMAT="%Y%m%d %H:%M:%S"”内容 保存退出,用source命令重载下下 系统的profile使改动生效 断开连接重登下系统,看结果,搞定!

3、永久保存命令的历史纪录 只要给当前用户的家目录中的/root/.bash_history文件加上+a权限即可,即使你设定了HISTSIZE的大小,他仍然会记录你输入的所有命令。 命令:chattr +a ~/.bash_history

4、执行history记录中最后一条命令 命令:!!(两个感叹号)

5、运行第XX条命令 命令:!X(数字)

6、执行历史纪录中最近的一条以条关键字开头的那条历史命令 比如我要执行最近一条init开头的命令,输入!init 他就会执行history记录中最近的那条。可以看到是init 0.

三、命令补全与别名

1、tab补全命令 我们敲命令时可以按Tab键 比如说我们按ls这时按两下Tab键他就会把所有ls开头的命令全部列出来

2、tab补全命令参数 需要安装“bash-completion”包才能支持 yum安装 重启电脑(不然不生效) 检查下安装情况,生效了

3、命令的别名(alias) 别名功能也是系统shell的重要应用 查看系统已定义的alias

4、自定义自己的别名命令 每个用户都有自己的别名配置文件,默认在~/.bashrc文件中,还有一些系统定义的别名,在/etc/peofile.d下。 示例: 1)将重启网络命令做别名 命令:`alias restartnet='systemctl restart network.service' 2)查看用户自定义的alias 在文件~/.bashrc中看 命令:vim ~/.bashrc 3)查看系统定义的一些别名 命令:ls etc/profile.d 我们查看其中一个,比如colorgrep.sh 4)取消自定义的别名

四、通配符、输入输出重定向

(一)通配符 系统中包含了很多通配符,常见的有 *:表示通配,可以代表文字 ?:表示一个任意的字符,但是不能代表数字 [] :任选方括号里的任意一个字符 {}:匹配大括号里的任意字符,只是选项间要加逗号 示例: 在一个文件夹下新建一些文件演示各个通配符的用法 本身文件夹中文件 1、ls *.txt 2、ls ?.txt(注意这里要用英文的问号,中文输入法的问号系统不认) 3、ls [123a].txt 4、ls {1,2,a}.txt

(二)输入输出重定向 重定向主要应用在编写shell脚本时,我们可以把shell执行的结果区分输出到不同的文件中

,输出重定向 <,输入重定向,很少用

,追加重定向(重定向表示不删除前面的内容) <<,追加输入重定向() 2>,标准错误输出重定向 2>>,错误追加重定向 +2>==&>,全部重定向,即把正确错误信息全部输出到1个文件中 &>>全部追加重定向 命令 > 1.txt 2.txt 还可以把正确和错误的信息分别输出到不同的文件

示例 1、把命令执行的结果输入到1.txt中 命令 df -h > 1.txt 2、把命令执行的正确结果和错误结果分别输出 命令 tar -cjvf 1tar.bz2 2.txt 3.txt b.txt >1.txt 2>a.txt