我使用 Linux 已有 6 个多月了,但从未过多使用过 CLI(命令行界面或终端或 shell)
现在,当我在这里提问、获得答案或从其他网站获得帮助时,我学习了新的命令......
我怎样才能将每条新命令存储在文本文件中?只有新的/独特的命令,而不是重复相同的命令。
以下是一个例子:
- 在终端中,我输入如下命令-
$ command1
$ command2
$ command3
$ command4
$ command1
- 现在,这些命令应该保存在文本文件中,
commandrec
如下所示
command1
command2
command3
command4
笔记: 终端中的最后一条命令command1
不会再次记录/保存在文本文件中。
下次我打开终端并输入新命令时command 5
,它应该被附加到列表中commandrec
(但如果该命令在其他日期之前使用过,则仍应忽略。例如,command 1
再次进入command 5
在新的一天/时间,但是command1
未记录为已使用)
- 该
commandrec
文件看起来应该是这样的
31/05/12 12:00:00
command1
command2
command3
command4
01/06/12 13:00:00
command 5
(如果可能的话,有时间和日期就更好了,但是没有也没关系)
这样,我就可以记录迄今为止我使用过的所有命令。
如何才能做到这一点?
答案1
如何成功地尝试改变这些设置.bashrc
- 实验之前:使用 将当前内容保存
.bash_history
到另一个文件cp
。 - 在实验过程中有效的方法是:
rm ~/.bash_history
在您更改.bashrc
历史控制参数后,否则新旧条目的组合可能会给您带来奇怪的结果。- 例如,启用时间戳之前的所有条目将显示相同的当前日期/时间!
一旦你找到可行的方法,不要
rm
再这样了!!.bashrc
还要注意,只有当您退出并实例化新的终端/shell 时,才会反映任何更改。
增加历史记录大小并消除重复项
将这些行添加到您的
~/.bashrc
:导出 HISTCONTROL=erasedups 导出 HISTSIZE=10000
历史记录大小设置为 10000,重复项会被自动删除,因此有足够的空间:)
时间戳
- 可以通过添加另一行表格来轻松设置时间
export HISTTIMEFORMAT="%F %T"
,这将在使用时在每行之前显示时间/日期history
- 例子:
izx@preciseunity:~$ 历史 1 2012-06-01 07:16:22 rm ~/.bash_history 2 2012-06-01 07:16:23 退出 3 2012-06-01 07:16:27 ls 4 2012-06-01 07:16:31 测试 5 2012-06-01 07:16:34 ls /etc 6 2012-06-01 07:16:36 下 7 2012-06-01 07:16:37 上 8 2012-06-01 07:16:40 hustory 9 2012-06-01 07:16:48 历史
- 请注意,由于消除了重复项,因此显示的命令时间是最新的(最新)上次执行的时间。
- 您可以
HISTTIMEFORMAT
根据自己的选择/语言环境自定义strftime
- 例子:
答案2
你的目标是学习新命令?我建议使用CLI 伴侣:
CLI Companion 是一款用于从 GUI 存储和运行终端命令的工具。不熟悉终端的人会发现 CLI Companion 是熟悉终端并发挥其潜力的有用方法。经验丰富的用户可以使用 CLI Companion 将大量命令存储在可搜索的列表中。
你可以通过运行来获得它:
sudo add-apt-repository ppa:clicompanion-devs/clicompanion-nightlies
sudo apt-get update
sudo apt-get install clicompanion
如果你不想添加 PPA,请尝试这个文件适用于 12.04(最新版本 1.1-6,发布于 2012-04-14 - 检查这一页以获得较新的版本。) - 或者在使用 安装后删除 PPA sudo add-apt-repository -r ppa:clicompanion-devs/clicompanion-nightlies
。
附言:我发现这个问题这也可能有帮助。
答案3
根据 Dirk 的建议.bash_history
和 Chris 的使用命令的建议sort
,您可能想要做的是:
cat ~/.bash_history | sed 's/sudo //g' | sort -u +0 -0 | cut -d\ -f1 > commandrec.txt
管道中的第二个命令将删除出现的“sudo”,因此当您排序时,您将对仅在调用后才可能输入的命令进行排序sudo
。
Bash 历史记录不会跟踪命令的使用时间/日期,但我脑海中浮现的念头是,您可以编写一个脚本,在退出终端时调用该脚本。该脚本将调用上述命令(但保存到 commandrec-$DATE.txt,其中有类似 DATE = `date "+%Y-%m-%dT%H:%M:%S"` 的内容)。然后,您可以与 commandrec-$DATE.txt.bash-history
中的新命令进行差异处理并仅保留新命令。因此,您将拥有一组此类日期化的 commandrec 文件。实际上,由于数量有限(我认为我的系统上的默认值是 500),您可能应该与通过-ing 所有 commandrec*.txt 文件和.bash_history
获得的文件进行差异处理。 cat
.bash_history
然后,无论何时您想要查看迄今为止的所有命令,您都可以将所有文件放到一个文件中。
答案4
在你的主目录中检查.bash_history
文件,它会保存你输入的每个命令