Linux和Unix系统上的命令历史提供了比您可能知道的更多的重新运行命令的方法。
Linux命令行允许您的系统在HISTSIZE变量设置的限制内记住您使用的命令。由于每个用户的HISTSIZE通常设置为1000,这意味着Linux可以记住您输入的最后1000个命令,并且可以很容易地重用它们,而无需重新键入它们。
除非以不同方式配置历史记录设置,否则所有命令都将被记住。如果你愿意,你可以对这种行为加以限制。例如,您可能不想保存每次用于阅读手册页的命令,或者每次键入pwd询问您当前在文件系统中的位置时。如何限制记住的和没有记住的命令。
重复使用以前输入的命令的最简单方法是键入“!!“在命令行上。这将重复您上次使用的任何命令。或者,您可以根据需要多次按键盘上的向上箭头键以返回到历史缓冲区中要再次运行的某个命令,或者如果备份过多,则按向下箭头键。在命令提示下显示要重用的命令时,按enter键。
另一方面,如果您要重用的命令是您之前输入的500个命令,则备份到该命令以避免重新键入,如果该命令是您确实不想再次键入或不记得的命令,则可能是一个好主意。
不过,还有更好的办法。它包括使用命令历史记录| more开始显示命令历史记录中的所有命令,按enter键直到在列出的命令中看到要重用的命令,然后输入Ctrl+C停止历史记录命令。那就打字吧!后跟要重用的命令左边的数字(例如!123).
如果您知道该命令是您最近使用的命令,那么您可以使用history | tail-20这样的命令来查看最近输入的命令,并找到您想要更快地重用的命令,从而避免很多繁琐的工作。
这里有一些额外的方法可以让您利用Linux为您记住的东西。
通过键入命令的一部分来重用命令
重用以前输入的命令(仍在命令历史记录中的命令)的一种简单方法是键入命令的开头。如果历史缓冲区的底部是这样的,您可以通过键入just!重新运行ps命令,该命令用于对系统进程进行计数!第。
$ history | tail -7
1002 21/02/21 18:24:25 alias
1003 21/02/21 18:25:37 history | more
1004 21/02/21 18:33:45 ps -ef | grep systemd | wc -l
1005 21/02/21 18:33:54 ls
1006 21/02/21 18:34:16 echo “What’s next?”
您还可以通过输入包含在其中任何位置的字符串来重新运行命令。例如,您可以通过键入!?系统?问号充当字符串分隔符。
$ !?sys?
ps -ef | grep systemd | wc -l
5
您可以通过键入以下命令重新运行上面列表中显示的命令!1004但是如果您不查看最近命令的列表,这将是更麻烦的。
运行以前的命令并进行更改
在上面显示的ps命令之后,您可以通过键入^systemd^kworker^来计数kworker进程,而不是systemd进程。这将用另一个进程名称替换一个进程名称,并运行修改后的命令。正如您在下面的命令中所看到的,这个字符串替换允许您在命令只有一点不同时重用它们。
$ ps -ef | grep systemd | awk ‘{ print $2 }’ | wc -l
5
$ ^systemd^smbd^
ps -ef | grep smbd | awk ‘{ print $2 }’ | wc -l
5
$ ^smbd^kworker^
ps -ef | grep kworker | awk ‘{ print $2 }’ | wc -l
13
如果错误键入命令或文件名,字符串替换也很有用。
什么样的小企业需要远程高效地工作
当涉及到使员工能够以高性能远程工作,同时保护公司数据和业务连续性时,小企业应该考虑什么?
$ sudo ls -l /var/log/samba/corse
ls: cannot access ‘/var/log/samba/corse’: No such file or directory
$ ^se^es^
sudo ls -l /var/log/samba/cores
total 8
drwx———. 2 root root 4096 Feb 16 10:50 nmbd
drwx———. 2 root root 4096 Feb 16 10:50 smbd
回溯历史
您还可以将命令与字符串一起重用,例如,该字符串要求重新运行您先前输入的一些命令。套房!-11将重新运行您先前键入的11个命令。在下面的输出中!-3重新运行先前显示的三个命令中的第一个。
$ ps -ef | wc -l
132
$ who
shs pts/0 2021-02-21 18:19 (192.168.0.2)
$ date
Sun 21 Feb 2021 06:59:09 PM EST
$ !-3
ps -ef | wc -l
133
重用命令参数
使用命令历史记录可以做的另一件事是重用提供给各种命令的参数。例如,字符序列!:1表示提供给最近运行的命令的第一个参数!:2秒!:3第三个,依此类推!:$表示最终参数。在本例中,参数在第二个echo命令中反转。
$ echo be the light
be the light
$ echo !:3 !:2 !:1
echo light the be
light the be
$ echo !:3 !:$
echo light light
light light
如果要使用同一参数运行一系列命令,可以执行以下操作:
$ echo nemo
nemo
$ id !:1
id nemo
uid=1001(nemo) gid=1001(nemo) groups=1001(nemo),16(fish),27(sudo)
$ df -k /home/!:$
df -k /homeemo
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb1 446885824 83472864 340642736 20% /home
当然,如果参数是一个长而复杂的字符串,那么使用这种技术实际上可能会节省一些时间和麻烦。请记住这只是一个例子!
总结
简单的历史命令技巧可以让您重用而不是重新键入以前输入的命令,从而通常可以为您节省很多麻烦。但是,请记住,使用字符串来标识命令只能回忆该字符串的最新用法,并且只有当命令保存在历史缓冲区中时,才能以这种方式重新运行命令。