[dmtsai@study ~]$ history [n]
[dmtsai@study ~]$ history [-c]
[dmtsai@study ~]$ history [-raw] histfiles
选项与参数:
n:数字,意思是【要列出最近的n笔命令行表】的意思!
-c:将目前shell中所有history内容全部消除。(只是情况当前终端窗口,终端标签页的history内容。~/.bash_history文件内容不做更改)
-a:将目前新增的history指令新增如histfiles中,若没有加histfiles,则预设写入~/.bash_history
(~/.bash_history记录的是上次最后注销bash窗口的命令。这次登录后,此bash窗口的history命令集,
未更新到~/.bash_history文件。
运行例如 #history -a tset.h 命令,则把此次bash窗口的命令写入指定文件(test.h).
备注:多次运行#history -a命令,向指定文件追加新增的history命令集)。
-r:将histfiles的内容读到目前这个shell的history记忆中;
-w:将目前的history记忆内容写入histfiles中。
(把运行该history -w命令的bash窗口内的history命令记忆内容新增到 ~/.bash_history文件中)
范例一:列出目前内存内的所有 history 记忆
[dmtsai@study ~]$ history
# 前面省略
1017 man bash
1018 ll
1019 history
1020 history
# 列出的信息当中,共分两栏,第一栏为该指令在这个 shell 当中的代码,
# 另一个则是指令本身的内容喔!至于会秀出几笔指令记录,则与 HISTSIZE 有关!
范例二:列出目前最近的 3 笔资料
[dmtsai@study ~]$ history 3
1019 history
1020 history
1021 history 3
范例三:立刻将目前的资料写入 histfile 当中
[dmtsai@study ~]$ history -w
# 在默认的情况下,会将历史纪录写入 ~/.bash_history 当中!
[dmtsai@study ~]$ echo ${HISTSIZE}
1000
备注:
同一个bash窗口多次分批执行该#history -w命令:
histfile文件原有内容上,增加新增的history资料。
切换bash窗口执行该#history -w命令:
histfile原有的内容清空,然后写入当前窗口终端的history资料
在正常的情况下,历史命令的读取与记录是这样的:
当我们以 bash 登入 Linux 主机之后,系统会主动的由家目录的 ~/.bash_history 读取以前曾经下过的指令,那么 ~/.bash_history 会记录几笔数据呢?这就与你 bash的HISTFILESIZE 这个变量设定值有关了!
假设我这次登入主机后,共下达过 100 次指令,『等我注销时, 系统就会将 101~1100 这总共 1000 笔历史命令更新到 ~/.bash_history 当中。』 也就是说,历史命令在我注销时,会将最近的 HISTFILESIZE 笔记录到我的纪录文件当中啦!
当然,也可以用 history -w 强制立刻写入的!那为何用『更新』两个字呢? 因为 ~/.bash_history 记录的笔数永远都是 HISTFILESIZE 那么多,旧的讯息会被主动的拿掉! 仅保留最新的!一.~/.bash_history文件原有1000条历史命令(bash登入linux后,系统读入的命令数): |--| <== 1 |--| |--| ... |--| |--| <==1000 二.截止注销前,新增了100条命令(系统内共有1100条命令): [--]<==1 [--] ... [--]<==1000 [--]-----| ... |==>最后这段为此次登入linux后新运行的100条命令记录 [--]-----| 三.系统注销前会自动更新~/.bash_history文件。将最新的100条记录写入到文件,同时拿掉最开头的100条历史命令记录 [--]<===1 ... (从1到100,这最开头的100条命令记录被拿掉) [--]<===100 [--]<===101 ------| ... -----|--> 这段记录为最终记录到~/.bash_history文件中的命令 [--]<===1100 -----|
同一账号同时多次登入的 history 写入问题
有些朋友在练习 linux 的时候喜欢同时开好几个 bash 接口,这些 bash 的身份都是 root 。 这样会
有 ~/.bash_history 的写入问题吗?想一想,因为这些 bash 在同时以 root 的身份登入, 因此所有
的 bash 都有自己的 1000 笔记录在内存中。因为等到注销时才会更新记录文件,所以啰, 最后注
销的那个 bash 才会是最后写入的数据。唔!如此一来其他 bash 的指令操作就不会被记录下来了 (其实有被记录,只是被后来的最后一个 bash 所覆盖更新了) 。
【如果在一个终端窗口下同时开很多tab(File-->New Tab)。则所有tab(窗口下不同标签页)内的命令历史记录归为同一个bash窗口,都写入~/.bash_history文件。】
由于多重登入有这样的问题,所以很多朋友都习惯单一 bash 登入,再用工作控制 (job control, 第四篇会介绍) 来切换不同工作! 这样才能够将所有曾经下达过的指令记录下来,也才方便未来系统管理员进行指令的 debug 啊!
无法记录时间
历史命令还有一个问题,那就是无法记录指令下达的时间。由于这 1000 笔历史命令是依序记录的,但是并没有记录时间,所以在查询方面会有一些不方便。如果读者们有兴趣,其实可以透过
~/.bash_logout 来进行 history 的记录,并加上 date 来增加时间参数,也是一个可以应用的方向喔!有兴趣的朋友可以先看看情境模拟题一吧!
使用 history -c; history -w 可以来强迫更新纪录文件了! 提供给您参考!