博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell 介绍及命令历史、命令补全和别名
阅读量:6818 次
发布时间:2019-06-26

本文共 2360 字,大约阅读时间需要 7 分钟。

hot3.png

1、什么是 shell ?

 

8c05a0ab50468e07175a92f008030177d82.jpg

 

打开系统,输入 zs ,按下 Tab 键,出现下图命令 zsoelim ,

843ad720919dabef3f85d2d13ebaae0646c.jpg

说明没有 zsh 命令,这时候可以安装一下,先输入命令 yum list |grep zsh ,回车,搜索一下,

829fbe200f55430ebbd44e7628c2858c765.jpg

可以看出有 zsh 命令,也有 ksh 命令,这边我们就不安装了。

 

2、命令历史

 

3de1c3be9ad8841ba723ce04ae99dae235a.jpg

 

我们执行过的命令,实际上是有保存到一个文件的。按向上的方向键,可以查看之前的命令,那么这些命令在哪边被保存的呢?有一个文件在用户的加目录下,root 用户见下图,

00bca23a5a9c71d36e6bf85cd8a8e1a6332.jpg

可以 cat 查看,命令非常多,截取一部分,见下图,

924c643f22829987c8f5eaf737a3bf550d3.jpg

要想知道之前执行过的命令有多少条,可以用 history 命令查看,输入 history ,回车,截取一部分图品,见下图,

 6bd5bfc17a8ad224df94345b1f96ca45600.jpg

可以看到之前的历史是 672 条,那么这个文件 .bash_history 最大可以存储 1000 条命令。这一点可以通过环境变量 HISTSIZE 查询,见下图,

221a56f536b366729d5520a639328403629.jpg

还有一个命令 history -c ,可以把当前的历史命令清空,见下图,

7956ba6d5d6d89944cf643d759e51580525.jpg

那么该命令可以清空配置文件吗?输入命令 cat .bash_history ,回车,见下图,

f223f1486e950fc99f21028954fa17359a3.jpg

可以看到配置文件的内容,没有被清空,说明 history -c 命令仅仅是把内存当中的命令历史清空而已,此时使用向上方向键,也查看不到之前的历史命令,只有刚刚的几条命令。

4e5b862fecb96ff34ad8ae59e652989e8e1.jpg

那么我们执行过的命令,什么时候会保存到这个文件里去呢?举个例子,

3f53c6f58c7f2d1ee7cbf3b6d63e549f290.jpg

现在执行三次 ls 命令,然后再输入命令 cat .bash_history ,回车,

e6c26cb9729ab7d46788c9d85277145ee94.jpg

可以看到,这些命令的最后几行,并没有 ls ,再次使用 history 查看,见下图,

06e3bd0481000190507ad2a8857b462b89b.jpg

此时就可以看到 ls 命令,说明刚刚执行过的命令,目前只存在与内存中,只有退出终端之后,这些命令才可以保存到配置文件 .bash_history 中。

 

环境变量 HISTSIZE 去哪里定义呢?在 /etc/profile 中,使用 vi /etc/profile 命令进入,搜索一下HIST,

000361d98a1e4372fbf8e7facc824ae407f.jpg

HISTSIZE 默认的量是1000 。

d936d95cad1d33c85bcc65a5ae082a3b7de.jpg

觉得太少的话,可以改成5000 。按字母 i 进入编辑,完成之后,按 Esc 退出编辑,输入 :wq ,保存后退出。

371d59fe53c928cc1ecab56c54301206662.jpg

更改完数值之后,不会马上变成5000,需要执行一下 source 命令,才可以生效,见下图,

cd9dcb0df19e8b852ae0c6e8b68f7f26dd8.jpg

 

现在来看一下 history 命令,

8abbd923ff03bcc5f49d07338808a5e8032.jpg

上图中,只显示了 ID 号和具体的命令,能不能将对应的命令的运行时间记录下来,这就需要对 HISTSIZE 重新赋值,见下图,

9e90d72241ce78c9e55779781fb2401db73.jpg

这边需要注意一下,这次更改的赋值,仅对当前的终端操作有效,再次打开终端以后,就会失效。也就是说,系统默认环境变量是不存在的,不要去定义。这时候,再执行 history 命令,

efe01525fa3a0d946cbd399485c0e4c04a9.jpg

就会看到,命令历史的格式发生了改变,会记录命令的运行日期和时间。以上改变就是环境变量作用的结果。要让改变生效,可以编辑 /etc/profile 文件,输入命令 vim /etc/profile ,回车,见下图,

df0bf9593c54ac47eed6cfb8e39adeb5796.jpg

搜索 HIST ,见下图,

d9081f38d380ea4be3ce59dd1a82ad52a29.jpg

增加一行上图红色框框的内容,保存后退出,执行命令 source ,

fb06461b0b85a7827ac352836e4ec1b762e.jpg

退出 Putty ,再重新登录,执行 history 命令,见下图,

7b4d5c7cb0e61ef924629b657951f5688b1.jpg

可以看到,日期和时间永久生效了。

 

接着做实验,见下图,

cb6d771db86715154a27305d4820176a88e.jpg

执行上图这条命令以后,这个文件就只能追加,不能删除。

终端没有正常退出时,history 里面就不会保存本次执行过的命令或者保存的命令不全。

 

另外再讲一下,!! ,!n(n表示数字) ,!word(word表示命令单词) ,详见下图,

ac229689804e776f536ea4a973fe90a4c0f.jpg

 

3、命令补全和别名

da7c8f665d087e633dcf2b2bb891dcf6164.jpg

 

1、Tab 键 命令补全

 

敲一下 Tab 键,不仅可以补全命令,还可以补全文件路径。

当遇到开头一样的多个文件或命令的时候,敲一下就不会有反应了,要敲两下,然后就会出现这些开头一样的文件和命令,再从中找出自己需要的文件或命令。

CentOS 7 系统中默认是不支持补全参数的,需要安装一个包,见下图,

9a3b30ada68851b89c71e00da12f2de1e75.jpg

安装完成之后,还不能立即生效,需要重启系统才可以。举个例子,现在输入命令 systemctl res ,然后敲 Tab 键,不管敲几下都会发现毫无反应。接着输入命令 reboot ,回车,重启系统。

ba335f661d3eb9484f2041fd7431abc9c96.jpg

重启成功之后,再输入命令 rpm -qa bash-completion ,回车,

4d5eacfa33a69bde6a0ecaed9e87e265173.jpg

可以看到,包已经安装好了,接着试一下,输入 systemctl res ,然后敲两下 Tab 键,就会出现3个参数。

ed1eb30ff404dbb3da8fa0c58839d0e7f41.jpg

Tab 键的用法心领神会就好了,文字说不清楚,就到这吧。

 

2、alias 命令

 

举个例子 ,systemctl restart network.service 这个命令有点长,虽然可以使用 Tab 键来补全命令,还是觉得有点麻烦,这时就可以使用 alias 来命名一个别名。具体操作见下图,

b86c52a8e77a767fefd7013fbba5f03e6ce.jpg

这样子就可以直接运行 restartnet 这个命令了,直接输入 alias ,回车,可以看到系统里面所有的alias ,包括自定义的,见下图,

f7c34be8315908f0ecb85169c50b0b1b720.jpg

接着查看这些alias存在于哪里,首先输入命令 vi .bashrc ,回车,见下图,

c3cf33df8670850abd88341bfe0943c0e82.jpg

这边只有3个 alias ,在用户的家目录下,其他的在哪里呢?输入 :q ,回车,退出上图界面,接着见下图,

be8b956ee0ba40dde77839c5dd8a3ef1c09.jpg

其他的 alias 都在这些文件里面,现在进入 colorls.sh ,见下图,

690296737069f61e396496a4b31e2ad90c5.jpg

这边有2个 alias ,输入 :q ,回车退出,接着输入命令 vim colorgrep.sh ,回车,见下图,

a1e594917ab8dda2213b2d162b395b58b05.jpg

以上就是这些 alias 所在的文件。

那么,怎么取消自定义的别名呢?用 unalias 就可以了,见下图,

 

 

转载于:https://my.oschina.net/u/3867265/blog/1836204

你可能感兴趣的文章
四则运算使用说明
查看>>
字符数组中查找字符串或字符数组
查看>>
JAVA自己理解的几种设计模式
查看>>
Android 不显示光标或者光标颜色为白色的解决方法
查看>>
C#网络编程之---TCP协议的同步通信(二)
查看>>
thinkphp-许愿墙-3
查看>>
linux awk时间计算脚本
查看>>
CodeBlocks卸载后重装 编译c文件提示错误信息“No such file or directory”
查看>>
jQuery查找子元素与后代元素
查看>>
springboot更换日志系统
查看>>
Python中if __name__ == "__main__"是什么作用
查看>>
实验一
查看>>
【数据库_Mysql】<foreach>标签在Mysql中的使用
查看>>
Linux实战教学笔记50:Zabbix监控平台3.2.4(二)深入理解zabbix
查看>>
勇敢否定自己
查看>>
poj1548--Robots
查看>>
杭电3635--Dragon Balls(并查集)
查看>>
npm install报错Unhandled rejection RangeError: Maximum call stack size exceededill install
查看>>
使用MSMQ 远程队列
查看>>
理解OAuth 2.0
查看>>