history和.bash_history文件

系统所输入的命令历史记录:
(1)history查看bash历史记录
(2).bash_history文件
.bash_history文件会让你 重用你 使用过的命令 (!+命令数字)
(1)每个用户的主目录下都定义了一个.bash_history文件
(2)许多发行版会记录用户前次输入的1000条命令
(3)可以使用cat ~/.bash_history 来查看历史记录
(4)shell能记住的命令的数目是定义在HISTSIZE变量中的。
“/etc/profile”文件中的“HISTFILESIZE”和“HISTSIZE”行确定所有用户的“.bash_history”文件中可以保 存的旧命令条数。强烈建议把把“/etc/profile”文件中的“HISTFILESIZE”和“HISTSIZE”行的值设为一个较小的数,比如 30。编辑profile文件(vi /etc/profile),把下面这行改为:
HISTFILESIZE=30
HISTSIZE=30
这表示每个用户的“.bash_history”文件只可以保存30条旧命令。 
网管还应该在"/etc/skel/.bash_logout" 文件中添加下面这行"rm -f $HOME/.bash_history" 。这样,当用户每次注销时,“.bash_history”文件都会被删除. 
history查看bash历史记录(把所有历史记录打印出来):
查看方法:
(1)!! (连续两个”!”),表示执行上一条命令; 扩展:sudo !!
	!- :执行上一条命令
	ctrl+P:执行上一条命令
(2)!n(n是数字),表示执行命令历史中第n条命令,例如”!10”表示执行历史命令中的第10条命令;
(3)!字符串(字符串大于等于1),例如!ta,表示执行历史命令中最近一次以ta为开头的命令。
(4)结合grep找历史命令 history|grep you_search
(5)结合tail查看最近运行的命令 history|tail -5
(6)!:运行上一个命令 	扩展:!-2:运行您运行的第二个到最后一个命令
(7)! 文本:(! pi)找到之前以pi开头的运行过的命令,立即运行
(8)命令 !$:运行一个新命令,但是使用上一个命令的最后一个参数
例如:假设你运行了这个命令
touch /home/chris/some_long_file_name_you_dont_want_to_type_again。
你现在想要运行命令
nano /home/chris/some_long_file_name_you_dont_want_to_type_again。
而不是从头开始打字,你可以运行:

nano !$
(9)命令 !^:运行一个新命令,但是使用上一个命令的第一个参数
如果你运行ping google.com -c 4
然后运行ping !$,这将扩展到“ ping 4”。


要解决这种情况,您可以使用以下技巧来展开第一个参数,而不是最后一个:

命令!^


所以,如果你跑了ping google.com -c 4 ,然后跑ping !^,
bash会把它扩展到“ ping google.com"
(10)命令 !*:要填写上一个命令中使用的所有参数,而不是单个参数,您可以使用以下命令:
命令 !*
所以,如果你运行ping !* ,bash会自动填写你在上一个命令中使用的所有参数
(11)命令 !abc:#
例如,我们sudo hostname ubuntu以前运行命令。
如果我们运行以下命令,bash将通过历史记录向后搜索,以从我们键入的字母开始找到最后一个命令,并填写我们指定的参数。
运行echo !su:2,bash将会搜索到以“ su” 开始的最后一个命令,并填写第二个参数,即“ ubuntu”。
(12)命令!abc:*
使用星号(称为通配符)替换数字会导致bash从命令中填入所有参数
(13)^ ^ ABC XYZ
重新运行上一个命令并修改它
Bash还允许您重新运行上一个命令并指定应该更改的内容。这可以用于纠正命令中的打字错误。例如,以下命令将重新运行上一个命令,将文本“ abc” 替换为文本“ xyz”。
例如,如果你不小心跑了ping gogle.com,你可以运行^gog^goog,bash会运行命令ping google.com。
(14)history -c :删除文件里的内容(因为操作过的命令都被保存,密码易泄露)
默认情况下,bash shell将您在用户帐户的历史记录文件中运行的命令的历史记录存储在〜/ .bash_history。例如,如果你的用户名是bob,你会在/home/bob/.bash_history找到这个文件。
由于您的历史记录存储在文件中,因此会在会话之间持续存在。您可以运行一些命令,退出,第二天回来,这些命令仍然可以在您的历史文件中准备查看和使用。每个用户帐户都有自己的具有单独命令历史的历史文件。
要清除您的bash历史记录,可以运行以下命令。这将擦除用户帐户的.bash_history文件的内容:
history-c
(15)Bash仅默认记住有限数量的命令,从而防止历史文件增长太大。历史条目bash记忆的数量由HISTSIZE变量控制。默认值通常为500或1000个条目。您可以运行以下命令来查看系统上bash历史记录的大小。
echo $ HISTSIZE
要将历史记录设置为零,请运行以下命令。
HISTSIZE = 0
对于当前会话,bash将不会存储任何历史记录条目,除非您运行命令HISTSIZE=1000将其设置回一定数量的条目
(16)操作的命令不显示在历史文件的办法:
Bash允许您忽略以空格开头的历史记录条目,
如果将HISTCONTROL变量设置为ignorespace.
HISTCONTROL = ignorespace
在命令行前输入一个空格,然后在bash shell中运行命令,命令将正常运行,但如果启用了此变量,则不会显示在历史记录中。这样可以让您的历史保持一点清洁,选择在没有出现在您的历史记录中的情况下运行命令。
(17)使得历史命令不存到.bash_profile文件里面
使用 HISTFILE 更改历史文件名称
默认情况下,命令历史存储在 ~/.bash_history 文件中。
添加下列内容到 .bash_profile 文件并重新登录 bash shell,
将使用 .commandline_warrior 来存储命令历史:

# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior
(18)Bash还允许您忽略可能会混淆您的历史记录的重复命令。
要这样做,设置HISTCONTROL 为ignoredups.
HISTCONTROL = ignoredups
例子:
#cd
#HISTCONTROL = ignoredups
#cd
#cd
#cd
#history|tail -4
cd 
HISTCONTROL = ignoredups
cd
history|tail -4
要使用ignorespace 和ignoredups 功能,请将HISTCONTROL变量设置为ignoreboth.
HISTCONTROL = ignoreboth
请注意,您设置的bash变量只会持续存在于当前会话中。您需要将这些添加到用户帐户的.bashrc文件,以便在您启动的每个bash会话中自动设置这些值,如果您愿意的话。

(19)使用 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 变量的时间。

(20)禁用history
使用 HISTSIZE 禁用 history
如果你想禁用 history,可以将 HISTSIZE 设置为 0:

# export HISTSIZE=0
# history
# [Note that history did not display anything]

(21)使用 HISTIGNORE 忽略历史中的特定命令
下面的例子,将忽略 pwd、ls、ls -ltr 等命令:

# export HISTIGNORE=”pwd:ls:ls -ltr:”
# pwd
# ls
# ls -ltr
# service httpd stop
# history | tail -3
79 export HISTIGNORE=”pwd:ls:ls -ltr:”
80 service httpd stop
81 history
[Note that history did not record pwd, ls and ls -ltr]
如果你经常使用Linux命令,那么使用history命令无疑会提升你的工作效率。
History命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 。
1>History命令语法:
[test@linux]# history [n]
[test@linux]# history [-c]
[test@linux]# history [-raw] histfiles
参数:
n   :数字,要列出最近的 n 笔命令列表
-c  :将目前的shell中的所有 history 内容全部消除
-a  :将目前新增的history 指令新增入 histfiles 中,若没有加 histfiles ,
则预设写入 ~/.bash_history
-r  :将 histfiles 的内容读到目前这个 shell 的 history 记忆中
-w  :将目前的 history 记忆内容写入 histfiles
Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,你也可以更改这个值。
如果你键入 history, history会向你显示你所使用的前1000个历史命令,并且给它们编了号,你会看到一个用数字编号的列表快速从屏幕上卷过。你可能不需要查看1000个命令中的所有项目, 当然你也可以加入数字来列出最近的 n 笔命令列表。
linux中history命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。
2>运行特定的历史命令
history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.
语法说明:
[test@linux]# [!number]  [!command] [!!]
参数说明:
number   :第几个指令的意思;
command  :指令的开头几个字母
!        :上一个指令的意思!
3>History命令实战
列出所有的历史记录:
[test@linux] # history
只列出最近10条记录:
[test@linux] # history 10 (注,history和10中间有空格)
使用命令记录号码执行命令,执行历史清单中的第99条命令
[test@linux] #!99 (!和99中间没有空格)
重复执行上一个命令
[test@linux] #!!
执行最后一次以rpm开头的命令(!?  ?代表的是字符串,这个String可以随便输,Shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。)
[test@linux] #!rpm
逐屏列出所有的历史记录:
[test@linux]# history | more
立即清空history当前所有历史命令的记录
[test@linux] #history -c
除了使用history命令,在 shell 或 GUI 终端提示下,你也可以使用上下方向键来翻阅命令历史(向下箭头会向前翻阅),直到你找到所需命令为止。这可以让我们很方便地编辑前面的某一条命令,而不用重复输入类似的命令。
History命令的用途确实很大!但需要小心安全的问题!尤其是 root 的历史纪录档案,这是黑客们的最爱!因为不小心的 root 会将很多的重要资料在执行的过程中会被纪录在 ~/.bash_history 当中,如果这个档案被解析的话,后果不堪设想!
快捷键来查看bash历史记录:
ctrl+P:转到历史记录中上一个命令
ctrl+N:转到历史记录中下一个命令
Alt+R:如果在当前行进行了编辑,将任何更改 还原为 从历史记录中提取的命令
bash 的召回模式:
Ctrl+R:调用与您提供的字符匹配的最后一个命令(按此快捷键,输入字符)
Ctrl+O:运行 Ctrl+R召回的命令
Ctrl+G:保留历史搜索模式,不运行命令
发布了34 篇原创文章 · 获赞 19 · 访问量 75万+

猜你喜欢

转载自blog.csdn.net/yongzhen150/article/details/103887287