linux命令历史
发布时间:2017-02-06 来源: 历史回眸 点击:
linux命令历史篇一:Linux基础教程 linux下学习history命令的用法实例
Linux基础教程 linux下学习history命令的用法实例
1.使用 HISTTIMEFORMAT 显示时间戳
当你从命令行执行 history 命令后,通常只会显示已执行命令的序号和命令本身。如果你想要查看命令历史的时间戳,那么可以执行:
复制代码代码如下:
# export HISTTIMEFORMAT='%F %T '
# history | more
1 2008-08-05 19:02:39 service network restart
2 2008-08-05 19:02:39 exit
3 2008-08-05 19:02:39 id
4 2008-08-05 19:02:39 cat /etc/redhat-release
注意:这个功能只能用在当 HISTTIMEFORMAT 这个环境变量被设置之后,之后的那些新执行的 bash 命令才会被打上正确的时间戳。在此之前的所有命令,都将会显示成设置HISTTIMEFORMAT 变量的时间。
2.使用 Ctrl+R 搜索历史
Ctrl+R 是我经常使用的一个快捷键。此快捷键让你对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键。
复制代码代码如下:
# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt](reverse-i-search)`red‘: cat /etc/redhat-release
[Note: Press enter when you see your command, which will execute the command from the history]# cat /etc/redhat-release
Fedora release 9 (Sulphur)
3.快速重复执行上一条命令
有 4 种方法可以重复执行上一条命令:
使用上方向键,并回车执行。
按 !! 并回车执行。
输入 !-1 并回车执行。
按 Ctrl+P 并回车执行。
4.从命令历史中执行一个指定的命令
在下面的例子中,如果你想重复执行第 4 条命令,那么可以执行 !4:
复制代码代码如下:
# history | more
1 service network restart
2 exit
3 id
4 cat /etc/redhat-release
# !4
cat /etc/redhat-release
Fedora release 9 (Sulphur)
5.通过指定关键字来执行以前的命令
在下面的例子,输入 !ps 并回车,将执行以 ps 打头的命令:
复制代码代码如下:
# !ps
ps aux | grep yp
root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind
root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp
6.使用 HISTSIZE 控制历史命令记录的总行数
将下面两行内容追加到 .bash_profile 文件并重新登录 bash shell,命令历史的记录数将变成 450 条:
复制代码代码如下:
# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450
7.使用 HISTFILE 更改历史文件名称
默认情况下,命令历史存储在 ~/.bash_history 文件中。添加下列内容到 .bash_profile 文件并重新登录 bash shell,将使用 .commandline_warrior 来存储命令历史:
复制代码代码如下:
# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior
8.使用 HISTCONTROL 从命令历史中剔除连续重复的条目
在下面的例子中,pwd 命令被连续执行了三次。执行 history 后你会看到三条重复的条目。要剔除这些重复的条目,你可以将 HISTCONTROL 设置为 ignoredups:
复制代码代码如下:
# pwd
# pwd
# pwd
# history | tail -4
44 pwd
45 pwd
46 pwd [Note that there are three pwd commands in history, after executing pwd 3 times as shown above]
47 history | tail -4
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd [Note that there is only one pwd command in the history, even after executing pwd 3 times as shown above]
58 history | tail -4
9.使用 HISTCONTROL 清除整个命令历史中的重复条目
上例中的 ignoredups 只能剔除连续的重复条目。要清除整个命令历史中的重复条目,可以将 HISTCONTROL 设置成 erasedups:
复制代码代码如下:
# export HISTCONTROL=erasedups
# pwd
# servicehttpd stop
# history | tail -3
38 pwd
39 service httpd stop
40 history | tail -3
# ls -ltr
# servicehttpd stop
# history | tail -6
35 export HISTCONTROL=erasedups
36 pwd
37 history | tail -3
38 ls -ltr
39 service httpd stop
[Note that the previous service httpd stop after pwd got erased]
40 history | tail -6
10.使用 HISTCONTROL 强制 history 不记住特定的命令
将 HISTCONTROL 设置为 ignorespace,并在不想被记住的命令前面输入一个空格:
复制代码代码如下:
# export HISTCONTROL=ignorespace
# ls -ltr
# pwd
# servicehttpd stop [Note that there is a space at the beginning of service, to ignore this command from history]
# history | tail -3
67 ls -ltr
68 pwd
69 history | tail -3
11.使用 -c 选项清除所有的命令历史
如果你想清除所有的命令历史,可以执行:
复制代码代码如下:
# history -c
12.命令替换
linux命令历史篇二:Linux基础教程 教你隐藏Linux的命令行历史
Linux基础教程教你隐藏Linux的命令行历史
如果你是 Linux 命令行的用户,有的时候你可能不希望某些命令记录在你的命令行历史中。原因可能很多,例如,你在公司担任某个职位,你有一些不希望被其它人滥用的特权。亦或者有些特别重要的命令,你不希望在你浏览历史列表时误执行。
然而,有方法可以控制哪些命令进入历史列表,哪些不进入吗?或者换句话说,我们在 Linux 终端中可以开启像浏览器一样的无痕模式吗?答案是肯定的,而且根据你想要的具体目标,有很多实现方法。在这篇文章中,将和大家讨论一些行之有效的方法。
注意:文中出现的所有命令都在 Ubuntu 下测试过。
不同的可行方法
前面两种方法已经在之前一篇文章中描述了。如果你已经了解,这部分可以略过。然而,如果你不了解,建议仔细阅读。
1. 在命令前插入空格
是的,没看错。在命令前面插入空格,这条命令会被 shell 忽略,也就意味着它不会出现在历史记录中。但是这种方法有个前提,只有在你的环境变量 HISTCONTROL 设置为 "ignorespace" 或者 "ignoreboth" 才会起作用。在大多数情况下,这个是默认值。
所以,像下面的命令(LCTT 译注:这里[space]表示输入一个空格):
[space]echo "this is a top secret"
如果你之前执行过如下设置环境变量的命令,那么上述命令不会出现在历史记录中。
export HISTCONTROL = ignorespace
下面的截图是这种方式的一个例子。
第四个 "echo" 命令因为前面有空格,它没有被记录到历史中。
2. 禁用当前会话的所有历史记录
如果你想禁用某个会话所有历史,你可以在开始命令行工作前简单地清除环境变量 HISTSIZE 的值即可。执行下面的命令来清除其值:
export HISTSIZE=0
HISTSIZE 表示对于 bash 会话其历史列表中可以保存命令的个数(行数)。默认情况,它设置了一个非零值,例如在我的电脑上,它的值为 1000。
所以上面所提到的命令将其值设置为 0,结果就是直到你关闭终端,没有东西会存储在历史
记录中。记住同样你也不能通过按向上的箭头按键或运行 history 命令来看到之前执行的命令。
3. 工作结束后清除整个历史
这可以看作是前一部分所提方案的另外一种实现。唯一的区别是在你完成所有工作之后执行这个命令。下面是刚说到的命令:
history -cw
刚才已经提到,这个和 HISTSIZE 方法有相同效果。
4. 只针对你的工作关闭历史记录
虽然前面描述的方法(2 和 3)可以实现目的,它们可以清除整个历史,在很多情况下,有些可能不是我们所期望的。有时候你可能想保存直到你开始命令行工作之间的历史记录。对于这样的需求,你开始在工作前执行下述命令:
[space]set +o history
备注:[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录。
上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。
要重新开启历史功能,执行下面的命令:
[Space]set -o history
它将环境恢复原状,也就是你完成了你的工作,执行上述命令之后的命令都会出现在历史中。
5. 从历史记录中删除指定的命令
现在假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办?很简单。直接动手删除它们。通过下面的命令来删除:
history | grep "part of command you want to remove"
上面的命令会输出历史记录中匹配的命令,每一条前面会有个数字。
一旦你找到你想删除的命令,执行下面的命令,从历史记录中删除那个指定的项:
history -d [num]
第二个‘echo’命令被成功的删除了。
同样的,你可以使用向上的箭头一直往回翻看历史记录。当你发现你感兴趣的命令出现在终端上时,按下“Ctrl + U”清除整行,也会从历史记录中删除它。
总结
有多种不同的方法可以操作 Linux 命令行历史来满足你的需求。然而请记住,从历史中隐藏或者删除命令通常不是一个好习惯,尽管本质上这并没有错。但是你必须知道你在做什么,以及可能产生的后果。
linux命令历史篇三:强有力的Linux历史命令
强有力的Linux历史命令 你还记得几个
忘记历史的Linux用户注定要输入很多信息。这也让强有力的历史命令不仅在援引之前执行命令时有用,在调用其它很少用到的命令时也有用。本文就介绍些强有力的Linux历史命令,不知你还能记起几个? AD:
"忘记历史的Linux用户注定要输入很多信息。”
这也让强有力的历史命令(包括Bash shell的历史变体)不仅在援引之前执行命令而不需重新输入它们时有用,在调用其它很少用到的命令时也有用,这省去了必须重新使用它们的麻烦。该命令按时间顺序列出了之前执行命令的清单。
该命令的输出示例如下: $ history
...
62 rm 092210.sql
63 mysqldump
64 mysqldump -u root -p dev_gamenomad_com > 092210.sql 65 more 092210.sql
66 rm 092210.sql
...
9991 mkdir chapter05
9992 cd chapter05
9993 dir
9994 npm install websocket-server
9995 node hello.js
9996 exit
9997 history
与每条命令相关的顺序号服务于重要目的,允许用户通过提供直接跟着感叹号的顺序号来重新执行相关命令,如下: $ !10000
sudo /etc/init.d/apache2 start
* Starting web server apache2
但这并不是全部。Linux历史命令能做到更多,本文后续部分也将提及。
掌控历史扩展
敲击向上箭头键会显示之前执行的命令,敲击Enter键会再次执行该命令。但是还可以使用另一个可能更快的包括历史扩展功能的选择:
$ !!
如果你重复执行同样两条或三条命令的不同排列组合,你还可以选择通过识别其位移负指数来执行出现在上一命令出现处的命令。例如,执行之前命令的前一命令(回退两条命令),运用以下序列:
$ !-2
执行早期命令的另一方式是输入紧跟着感叹号的命令序列号的开头。符合字符对象的第一条命令会执行。举例来说,假设最后三条命令如下: $ history
... 9876 build-book /home/wjgilmore/easy_php
9877 mkdir chapter05
9878 cd chapter05
9879 touch chapter05.md
你可以只通过运行以下命令来再次执行构书脚本:
$ !b
用两步过程创建一个确认它的新目录和导航和以运用历史扩展缩短。在本例中,我创建了一个叫做
easy_bash的新目录,位置在/home/wjgilmore/books。要确认该目录,运用!$来获得在前一命令中发现在最后“字符”:
$ mkdir /home/wjgilmore/books/easy_bash
$ cd !$
搜索命令历史
虽然可以翻阅命令历史(或使用grep命令),但在使用Ctrl+R开放选择搜索它之后也可以调用该命令的片段,提示的命令行将如下所示:
(reverse-i-search)`':
开始输入命令片段,命令行会实时更新反映出最符合的一条。输入apa后会出现类似于这样的命令: (reverse-i-search)`apa': sudo /etc/init.d/apache2 start
当你看到想要的命令,敲击Enter执行它,或者敲击向上箭头键在重新执行前修改它。
调整历史行为
你可以做很多有趣的设置更改来控制命令历史的行为方式。例如,Bash shell设置的默认历史大小是500条记录,这个限制很快就达到了,即使是很小的命令行相互作用。你可以通过设置在Bash配置文件(.bash
HISTSIZE=10000
你在命名为HISTCONTROL的.bashrc中通常还会遇到另一个与历史有关的变量。该变量帮助明确规定历史文件中的存放内容(位于.bash_history,也可见于主目录中)。例如,你也许在检查最新的日志文件附件时重复执行了尾命令,就在运行tail的几分钟里。通过重复来集群历史文件不太实际,通过设置它为ignoredups来让HISTCONTROL变量忽视复制行。
HISTCONTROL=ignoredups
可疑效用的另一个HISTCONTROL设置是忽略空格。该HISTCONTROL设置的结果是所有前面有空格的执行命令都从历史文件中删除。这对于不跟踪每条命令似乎起了反作用,但是如果你除了ignoredups之外还想实现该功能,你可以将两者设置成:
HISTCONTROL=ignoreboth
我最后要谈及的一个功能是命令替换。假设你想基于一个虚拟主机配置文件模板快速配置一群虚拟主机。这些命令序列可能非常长,就像下面所示: $ cp vhost.template /etc/apache2/sites-available/dev.example.com
$ cp vhost.template /etc/apache2/sites-available/forum.example.com
$ cp vhost.template /etc/apache2/sites-available/staging.example.com
通常你执行该一列命令的方法会是首先输入和执行,接着向上滚动、删除尾行片段(dev.example.com),然后输入下一片段(forum.example.com),然后重新执行。另一种方法,你可以运用命令替换来快速地用一行字符串替换另一相关字符串,如下所示:
$ !!:s/dev/forum
该命令行在指向-点击界面中已为用户带来了大量好处,让任务执行和操作系统导航可以快速且优雅地完成。最大程度上地利用历史命令只能增加这些功能,促进生产力会走得更远。
相关热词搜索:命令 历史 linux linux查看历史命令 linux清除历史命令
热点文章阅读