当前位置: 首页 > Linux

谁动了我的Linux?原来历史这么厉害!

时间:2023-04-07 01:24:49 Linux

当我们频繁使用Linux命令行时,有效利用历史记录可以大大提高工作效率。在正常的Linux运行中,很多命令都是重复的,你肯定不想输入很多重复的命令。如果你是系统管理员,可能需要审计用户操作,管理Linux命令历史是非常重要的。今天我们将介绍一些在Linux中使用history来减少重复命令的实用技巧。1基本原理Linux命令的历史记录会被持久化存储,默认位置是当前用户主目录下的.bash_history文件。当Linux系统启动一个shell时,shell会从.bash_history文件中读取历史记录,并存储到相应内存的缓冲区中。我们平时操作的Linux命令都会记录在_buffer_中。历史命令的管理,包括历史命令的执行,都是对_buffer_进行操作,而不是直接操作.bash\_history文件。当我们退出shell时,比如按下Ctrl+D,shell进程会将历史缓冲区的内容写回.bash\_history文件。2使用详解把history的基本原理说清楚了,下面就来详细学习一下如何使用吧。(1)基本用法直接输入history命令,可以看到显示了所有最近操作的命令`$history``1bash``2ls``3vim.bash_history``4cat.bash_history``5history``6bash`有时候不需要显示所有的历史命令,只显示最近10条历史记录,可以在命令后加一个数字N`$history10`一般情况下,只有当shell正常退出时,会将缓冲区内容保存到文件中。如果想主动保存buffer的历史,可以执行-w选项`$history-w`当然,如果你执行过一些敏感的命令操作,可以执行-c直接删除buffer的内容`$history-c`(2)重复命令如果你想重复执行一些命令,可以使用!快速执行重复的命令。例如要重复执行第1024条历史命令,可以执行如下命令`$!1024`。1024这个数字可以通过历史查看。Repeatthelastcommand`$!!`重复倒数第6条历史命令,可以通过_负数_表示,-6表示倒数第6条记录`$!-6`(3)搜索历史命令有时,这是必要的在某个字符串的开头重复上一条命令,也可以用!操作,然后回车执行即,比如刚刚执行了一个很长的命令,只记录命令的开头是curl,那么你可以使用!curl来快速执行命令`$!curl`这种用法非常高效,但是存在不安全因素,因为有可能执行的命令不是你想要执行的,这是一件坏事.可以使用:p安全地执行。`$!curl:p``curlwww.sina.com.cn`添加:p后,它只是打印出搜索到的命令。如果要执行它,请按向上键并按回车键。如果只知道某条命令包含x信息,不以x开头,也可以用?执行包含字符串`$!?sina`的命令(4)交互式搜索历史命令在Linux中,您也可以通过交互式搜索的方式搜索历史命令,高效直接。在命令行输入Ctrl+R后,进入交互界面,输入要搜索的关键字。如果匹配到多个命令,可以多次按Ctrl+R切换到上一个匹配的命令。``(reverse-i-search)`sina':echosina``可以看到我输入sina后会自动匹配上次匹配sina的命令,然后回车执行命令。(5)重复执行上一条命令这里有几种重复上一条命令的方法,你可以选择一个你喜欢的!!!-1Ctrl+pUpCtrl+R(6)显示时间戳有时需要审计Linux系统,在历史记录和显示中添加时间戳是非常有用的。`$exportHISTTIMEFORMAT='%F%T'``$history3``462021-04-1815:21:33curlbaidu.com``472021-04-1815:21:35pwd``482021-04-1815:21:39history3`可以看到history已经显示了时间戳。其实这些对于审计需求是不够的,可以补充更详细的信息:``$exportHISTTIMEFORMAT="%F%T`who-uami2>/dev/null|awk'{print$NF}'|sed\-e's/[()]//g'``whoami`"```62021-04-1816:07:48113.200.44.237rootls``72021-04-1816:07:59113.200.44.237rootpwd``82021-04-1816:08:14113.200.44.237roothistory`(7)控制历史记录总数默认情况下,Linux系统最多可以存储1000条历史记录,可以通过HISTSIZE环境来设置查看变量`$echo$HISTSIZE``1000`对于需要审计的场景,1000条历史记录可能太少了,我们可以修改为合适的值`$exportHISTSIZE=10000`注意HISTSIZE变量只能控制buffering区的历史记录条数。如果需要控制.bash_history文件中存储的最大记录数,可以通过HISTFILESIZE来控制。以上命令行修改仅在当前Shell环境下生效。如果需要永久生效,需要写配置文件`$echo"exportHISTSIZE=10000">>~/.bash_profile``$echo"exportHISTFILESIZE=200000">>~/.bash_profile``$source~/.bash_profile`(8)更改历史文件名有时为了方便管理和备份,需要更改历史文件的路径和名称。简单,也可以通过环境变量HISTFILE更改其文件名`$echo"exportHISTFILE=/data/backup/chopin.bash_history">>~/.bash_profile``$source~/.bash_profile`(9)禁用历史记录在特殊环境下,我们需要禁用历史`$echo"exportHISTSIZE=0">>~/.bash_profile``$echo"exportHISTFILESIZE=0">>~/.bash_profile``$source~/.bash_profile`呵呵,把上面两个变量的值设为0就可以实现禁用历史记录的功能了(10)黑客必知的一个小技巧最后分享一个黑客必知的不为人知的技巧。在命令前多加一个_空格_,这样的命令就不会被记录到历史中了,是不是很酷?如果这个技巧在你的系统中不起作用,请检查环境变量HISTCONTROL中是否包含ignorespace,好像centos系统默认没有设置这个值。3总结时间在Linux系统中,history命令可以很方便的帮助我们管理历史命令。通常我们的命令会先记录在_buffer_中,等Shell退出的时候再记录在文件中。history命令提供了非常方便的管理功能。合理的配置和管理历史可以让你的Linux系统更加健壮和安全。好了,老规矩,有心人肖兄给大家总结一下history命令的常用方法historyn:只显示最近的n条历史记录history-c:清空缓冲区history中的历史记录history-w:清空缓冲区中的历史记录缓冲区保存到文件history-dN:删除第N条历史记录重复执行命令的几种方式:!!,!-1,!N,!string等交互式历史命令搜索,请使用Ctrl+R快捷键为了正确使用几个相关的环境变量让你的Linux系统更安全:HISTSIZE:控制历史记录缓冲区的最大数量HISTFILESIZE:控制历史文件的最大数量HISTIGNORE:设置哪些命令不记录在历史中HISTTIMEFORMAT:设置显示的时间格式通过历史命令HISTCONTROL:扩展控制选项如果在生产环境中,需要将这些环境变量持久化到配置文件~/.bash\_profile`exportHISTCONTROL=ignoreboth``#ignorespace:忽略以空格开头的命令``#ignoredups:忽略连续重复的命令``#ignoreboth:表示设置了以上两个参数``#设置append而不是overwrite``shopt-shistappend``exportHISTSIZE=1000``exportHISTFILESIZE=200000``exportHISTTIMEFORMAT="%F%T"``exportHISTIGNORE="ls:history"`来源于:公众号-编程成就

最新推荐
猜你喜欢