1、什么是 shell ?
打开系统,输入 zs ,按下 Tab 键,出现下图命令 zsoelim ,
说明没有 zsh 命令,这时候可以安装一下,先输入命令 yum list |grep zsh ,回车,搜索一下,
可以看出有 zsh 命令,也有 ksh 命令,这边我们就不安装了。
2、命令历史
我们执行过的命令,实际上是有保存到一个文件的。按向上的方向键,可以查看之前的命令,那么这些命令在哪边被保存的呢?有一个文件在用户的加目录下,root 用户见下图,
可以 cat 查看,命令非常多,截取一部分,见下图,
要想知道之前执行过的命令有多少条,可以用 history 命令查看,输入 history ,回车,截取一部分图品,见下图,
可以看到之前的历史是 672 条,那么这个文件 .bash_history 最大可以存储 1000 条命令。这一点可以通过环境变量 HISTSIZE 查询,见下图,
还有一个命令 history -c ,可以把当前的历史命令清空,见下图,
那么该命令可以清空配置文件吗?输入命令 cat .bash_history ,回车,见下图,
可以看到配置文件的内容,没有被清空,说明 history -c 命令仅仅是把内存当中的命令历史清空而已,此时使用向上方向键,也查看不到之前的历史命令,只有刚刚的几条命令。
那么我们执行过的命令,什么时候会保存到这个文件里去呢?举个例子,
现在执行三次 ls 命令,然后再输入命令 cat .bash_history ,回车,
可以看到,这些命令的最后几行,并没有 ls ,再次使用 history 查看,见下图,
此时就可以看到 ls 命令,说明刚刚执行过的命令,目前只存在与内存中,只有退出终端之后,这些命令才可以保存到配置文件 .bash_history 中。
环境变量 HISTSIZE 去哪里定义呢?在 /etc/profile 中,使用 vi /etc/profile 命令进入,搜索一下HIST,
HISTSIZE 默认的量是1000 。
觉得太少的话,可以改成5000 。按字母 i 进入编辑,完成之后,按 Esc 退出编辑,输入 :wq ,保存后退出。
更改完数值之后,不会马上变成5000,需要执行一下 source 命令,才可以生效,见下图,
现在来看一下 history 命令,
上图中,只显示了 ID 号和具体的命令,能不能将对应的命令的运行时间记录下来,这就需要对 HISTSIZE 重新赋值,见下图,
这边需要注意一下,这次更改的赋值,仅对当前的终端操作有效,再次打开终端以后,就会失效。也就是说,系统默认环境变量是不存在的,不要去定义。这时候,再执行 history 命令,
就会看到,命令历史的格式发生了改变,会记录命令的运行日期和时间。以上改变就是环境变量作用的结果。要让改变生效,可以编辑 /etc/profile 文件,输入命令 vim /etc/profile ,回车,见下图,
搜索 HIST ,见下图,
增加一行上图红色框框的内容,保存后退出,执行命令 source ,
退出 Putty ,再重新登录,执行 history 命令,见下图,
可以看到,日期和时间永久生效了。
接着做实验,见下图,
执行上图这条命令以后,这个文件就只能追加,不能删除。
终端没有正常退出时,history 里面就不会保存本次执行过的命令或者保存的命令不全。
另外再讲一下,!! ,!n(n表示数字) ,!word(word表示命令单词) ,详见下图,
3、命令补全和别名
1、Tab 键 命令补全
敲一下 Tab 键,不仅可以补全命令,还可以补全文件路径。
当遇到开头一样的多个文件或命令的时候,敲一下就不会有反应了,要敲两下,然后就会出现这些开头一样的文件和命令,再从中找出自己需要的文件或命令。
CentOS 7 系统中默认是不支持补全参数的,需要安装一个包,见下图,
安装完成之后,还不能立即生效,需要重启系统才可以。举个例子,现在输入命令 systemctl res ,然后敲 Tab 键,不管敲几下都会发现毫无反应。接着输入命令 reboot ,回车,重启系统。
重启成功之后,再输入命令 rpm -qa bash-completion ,回车,
可以看到,包已经安装好了,接着试一下,输入 systemctl res ,然后敲两下 Tab 键,就会出现3个参数。
Tab 键的用法心领神会就好了,文字说不清楚,就到这吧。
2、alias 命令
举个例子 ,systemctl restart network.service 这个命令有点长,虽然可以使用 Tab 键来补全命令,还是觉得有点麻烦,这时就可以使用 alias 来命名一个别名。具体操作见下图,
这样子就可以直接运行 restartnet 这个命令了,直接输入 alias ,回车,可以看到系统里面所有的alias ,包括自定义的,见下图,
接着查看这些alias存在于哪里,首先输入命令 vi .bashrc ,回车,见下图,
这边只有3个 alias ,在用户的家目录下,其他的在哪里呢?输入 :q ,回车,退出上图界面,接着见下图,
其他的 alias 都在这些文件里面,现在进入 colorls.sh ,见下图,
这边有2个 alias ,输入 :q ,回车退出,接着输入命令 vim colorgrep.sh ,回车,见下图,
以上就是这些 alias 所在的文件。
那么,怎么取消自定义的别名呢?用 unalias 就可以了,见下图,