当前位置: 首页 > 科技观察

揭秘Linux命令Bash历史

时间:2023-03-21 10:39:28 科技观察

你可能知道如何使用上下箭头键滚动浏览Bash历史,但你是否知道Bash历史不仅仅是重复命令,还有许多其他功能,或者说还有很多吗?history命令是一个晦涩难懂的命令,但至少它是强大和方便的。本文将揭开Bash历史的神秘面纱,使其成为更友好的系统管理工具。背景在Bash中,命令历史记录存储在主目录中的(.bash_history)文件中。点(.)前缀表示该文件是隐藏文件。要查看它,请发出ls-a命令。linuxmi@linuxmi:~$ls-a您现在可以像操作任何其他文本文件一样操作.bash_history文件。您需要了解的三个相关环境变量是HISTFILE、HISTFILESIZE和HISTSIZE。HISTFILE--/home/linuxmi/.bash_historyHISTFILESIZE--2000HISTSIZE--1000HISTFILE该变量保存Bash历史文件的名称和位置。HISTFILESIZE是.bash_history文件中可以存储多少条命令。HISTSIZE是缓存命令的数量。一旦达到1000个命令,最旧的命令将被丢弃,新的命令将被保存。linuxmi@linuxmi:~$echo$HISTSIZE1000linuxmi@linuxmi:~$echo$HISTFILESIZE2000linuxmi@linuxmi:~$echo$HISTFILE/home/linuxmi/.bash_history每个用户(包括root)默认分配了这些变量和大小。如果要更改这些变量,请编辑主目录中的.bashrc文件。例如,如果要将大小变量更改为800个命令,请编辑.bashrc文件并使用以下条目:exportHISTSIZE=800exportHISTFILESIZE=800要在不注销并重新登录的情况下使用新值,请执行.bashrc文件命令。linuxmi@linuxmi:~$.~/.bashrc您的值现在对当前shell和任何子shell都有效。如果您不希望您的历史记录保留重复的命令,您可以通过将以下内容添加到您的.被写入.bash_history文件。这使得无法使用history命令编写脚本。例如,假设您正在向您的班级教授Linux,并且您想要检查学生是否运行了特定命令以将他们的文件复制到已安装的外部驱动器。如果学生保持登录状态,您将无法判断复制是否已执行,因为您的脚本使用其历史文件(/home/linuxmi/.bash_history)来检查命令是否已运行。解决方案要解决此功能,请使用history命令的写入选项。作为课堂教学的一部分,您希望让学生运行此命令以保存他们的历史记录,即使他们尚未注销也是如此。linuxmi@linuxmi:~/www.linuxmi.com$history-w现在启动所有当前会话命令历史记录将写入HISTFILE。现在您的检查脚本可以很容易地查明该命令是否已运行。您还必须信任学生运行历史命令。另一个问题由于HISTSIZE和HISTFILESIZE比较大(1000条命令或2000条命令),因此学生有可能之前运行过该命令。您可以将exportHISTCONTROL=ignoredups条目添加到他们的.bashrc中,但是如果学生几天前运行了类似的命令,这将无济于事,因为该文件将只显示一个命令。此问题的解决方案要解决此问题,您应该在登录后清除学生的历史记录。再次编辑.bashrc文件并向其中添加以下命令。history-c此命令在每次登录时清除其历史记录并消除选择以前运行的命令的问题。您不必担心从以前的会话中获取命令,因为如果您在/etc/profile中设置空闲时间限制,系统将在指定的时间段后注销空闲用户。编辑/etc/profile文件并添加以下条目。TMOUT=180TMOUT变量使用几秒的空闲时间。在这种情况下,180秒等于3分钟。您可以将此值设置为任意秒数。该值将在所有用户下次登录时生效。要设置单独的超时值,请使用.bashrc,但请注意用户可以自由更改此文件。总结Bash历史是一个方便的工具,但如果您不熟悉它的选项和怪癖,它可能会令人沮丧。历史上还有更多的选择。您可以查看手册页以获取更多信息。请记住,您键入的每条命令都是正在形成的历史。