当前位置: 首页 > Linux

bash中的历史记录机制

时间:2023-04-07 00:59:09 Linux

基本用法displayhistoryrecord使用history可以查看当前用户最近执行的HISTSIZE命令。这些记录保存在HISTFILE文件中,bash启动时会自动加载到历史记录缓冲队列中。简单的使用方法如下:>history#显示所有历史记录1ipa2exit3ls-la4history>history2#显示最近两条历史记录4history5history2搜索和批量查询可以通过输入按Ctrl+R历史搜索模式,根据用户输入的字符,搜索结果会按照最近最相似的原则打印到命令提示符后面,回车直接执行即可。另一种方法是使用grep批量搜索:>history|grepffmpeg|grep动图|grepyuv444p119ffmpeg-y-fgif-i79557166.gif-c:vlibx264-vf格式=yuv444pyuv444p.mp4120ffmpeg-y-fgif-i79557166.gif-c:vlibx264-vf格式=yuv444pyuv444p.mkv立即执行(危险)使用!!可以立即执行历史上最后一条命令,即重复上一条命令;使用![number]根据编号执行对应编号的历史命令;使用![string]根据字符串按照最近最相似的原则执行历史命令。这类命令最人性化的是它会在执行前打印要执行的命令(让你知道系统是怎么挂的)。>日期星期日2020年2月23日下午06:18:16CST>!!#unsafedateSun23Feb202006:18:18PMCST>!907#dangerousmakemake:\*\*\*没有指定目标,也没有找到makefile。Stop.>!shut#非常危险shutdownnow直接通过命令开头的命令执行相应的历史记录是非常危险的,尤其是在高权限用户环境下,所以建议查看相应的命令在执行前按如下方式:>!!:p#查看记录中最后一条命令>!123:p#查看记录中第123条命令>!sys:p#查看记录中最后一条以sys开头的命令并删除recordusinghistory-d删除指定序号的历史记录。该模式只接受一个参数,其他参数将被忽略。使用此功能,您可以执行未记录在bash中的命令。>echo"secretcommand";history-d$(history1)secretcommand如果想彻底清除当前session中的使用痕迹,可以使用history-c清除historybuffer队列。值得注意的是,该命令不会清除历史日志文件。[warning]注意:除上述方法外,用户还可以通过unsetHISTFILE直接取消历史记录功能,这对于服务器的日常维护来说是非常危险的。当文件操作退出终端时,bash会自动将当前会话中执行的命令写入历史文件,默认写入方式为覆盖。也可以通过-w和-a方式手动将当前session中的命令写入文件:>history-w#Bufferqueueoverwritewritestothefile>history-a#当前session的命令追加到文件中file以20.04LTS为例,默认情况下,与历史相关的环境变量定义在~/.bashrc文件中。添加时间戳可以通过修改HISTTIMEFORMAT变量在历史中添加时间戳,%F代表日期,%T代表时间。>exportHISTTIMEFORMAT='%F%T'>echo'historywithtime'>history110322020-02-2317:01:26history修改记录策略可以通过修改HISTCONTROL变量来控制历史记录策略,如图下表:可选值记录策略ignoredups默认,不记录连续相同的命令ignorespace不记录以空格开头的命令命令之间使用:分隔符:>echo'exportHISTIGNORE="ls:cd"'>>~/.bashrc>source~/.bashrc修改存储文件当前用户的历史存储在~/.bash_history文件中默认值,可以通过修改存储历史记录的HISTFILE变量来更改。>echo'exportHISTFILE=""'>>~/.bashrc>source~/.bashrc修改存储大小变量HISTSIZE决定使用history时显示的记录数,默认值为1000。>echo$HISTSIZE1000>HISTSIZE=200#只对当前会话有效>sed-i's/^HISTSIZE=1000/HISTSIZE=200/'~/.bashrc#永久有效>echo$HISTSIZE200变量HISTFILESIZE定义存储在文件中的值历史命令总数,默认值为2000。历史记录的存储方式类似于队列。bash在初始化时,会把HISTFILE文件中存放的所有历史记录加载到内存中,并以队列的形式存放。用户在使用过程中产生的命令也会加入到队列中。每次用户调用history时,都会显示最近的HISTSIZE记录。修改存储策略会在终端退出时将当前会话(session)中产生的记录写入文件。为了防止同时打开多个终端导致历史记录丢失,建议在~/.bashrc文件中加入shopt-shistappend。让终端在退出时将当前会话产生的历史附加到HISTFILE文件中。[warning]注意:默认情况下,历史写入方式为覆盖,例如:打开终端A->打开终端B->关闭终端A->关闭终端B,这一系列操作会导致终端A生成Allhistoryis丢失的。断电、非法关机等特殊情况会使bash无法正常结束,导致当前会话的历史记录丢失。可以在~/.bashrc文件中添加如下内容,自动追加写入每条命令:(例如:remilia@CT7GK:~$),这个变量的值会作为命令执行,这里我们设置为自动执行history-a,并将历史记录追加到文件中。

最新推荐
猜你喜欢