【Linux】history用法
通过history命令可以查看我们在系统中输入过的命令
history命令的一些常用参数
-c 清空内存中命令历史
-d # 删除指定的历史命令,比如 history -d 100 ,就是删除第100个命令历史
# : 显示最近的#条历史,例如:history 20 ,表示显示最近的20条命令历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-n: 将历史文件中未读过的行加载到内存中的历史列表,方便多个终端同步内存中的命令历史。
-r: 读取历史文件中的所有历史命令到内存中的历史列表,即使内存中的列表中已经存在这条历史。
-w: 保存内存中历史列表到指定的历史文件,history -w ./test 把历史写入到当前目录的test文件中
-p: 官方解释没看懂,我觉得此命令相当于echo的作用,但是使用history -p string输出的信息不被记录到历史中,
就是“不被记录的echo,隐形echo,你可以尝试使用history -p $变量名,这样会不会觉得很像echo?
但是如果你使用history -p string1 string2,会发现它并不像echo打印到一行,会打印成多行。
-s: 伪造命令历史,比如history -s rm -rf /opt,这样写并不会执行删除opt目录的操作,只是把这条没有执行的"命令"加入到了历史中。
history命令的相关文件
当我们输入history命令,history会将命令历史返回给我们,当我们重启机器后,再次执行history命令,还是会返回历史命令,证明历史命令是存在于某个文件中的,这个文件就是
~/.bash_history
每个用户家目录中都有一个隐藏文件,.bash_history ,历史命令最终都存放在此文件中。
我们先使用history命令查看,可以看到当前登录后的一些命令历史,但是我们查看.bash_history却没有发现当前登录后的历史命令,这是因为本次登录后执行的命令历史存放在内存中,当我们退出本次会话,本次会话的命令历史才会从内存写入到.bash_history文件中,使用-a参数可以不退出当前会话,即可将内存中的历史命令追加到历史文件中。
由此也可见,命令历史会在登陆后从历史文件中被加载到内存中,可以理解为有两个地方存放。
/etc/profile
此文件中配置了history命令的相关变量,在此文件中配置的history命令的变量全局生效。
~/.bash_profile
如果在此文件中重复配置/etc/profile中配置过的history的相关变量,那么以此文件中的配置为准,此文件中的命令历史相关配置只对当对应用户有效。
history命令的相关变量
HISTSIZE变量,用于history命令最多显示多少条命令历史。
HISTSIZE=1000,表示内存中最多缓存加载1000条命令历史,也就是说history命令返回最多1000条命令,可是我们使用history命令查看的时候,却可能发现命令已经记录到了1041条,这并不是我们的设置没有生效或者发生错误,而是“最开始的1到41条”已经被挤出了命令历史,序号是从“41”开始的,所以记录到1041条正好是1000条,如果设置 HISTSIZE=0 代表永远不记录历史。
HISTFILESIZE变量,用于配置~/.bash_history中最多保存多少条历史。
centos6中 ,HISTSIZE 和 HISTFILESIZE默认都是1000,但是 HISTFILESIZE 我们可以稍微设置大一点,这样能保存更多的历史,而且~/.bash_history是存放在硬盘中的,所以即使设置的条目数量很大,对于现在的硬盘容量来说,也是比较小的,当然,太大的话读取也会很慢,但是HISTSIZE就不要设置的太大,因为个人觉得HISTSIZE设置过大没有必要,还占用内存资源。
HISTTIMEFORMAT变量,用于配置命令历史的时间格式。
HISTTIMEFORMAT="%F %T " 这样设置HISTTIMEFORMAT变量是设置历史命令的时间格式的,当然,我们也可以灵活运用,加入一些自己想要显示的信息,比如:HISTTIMEFORMAT="`hostname` %F %T ",可以理解为格式化历史命令的显示方式,此例中的格式表示在命令历史前加入 主机名 、日期、时间等信息。
HISTIGNORE变量,指定不记录到历史中的命令。
HISTIGNORE="cmd1:cmd2:…" 表示忽略cmd1,cmd2这些命令,cmd1和cmd2将不被记录在命令历史中,但是如果你对cmd1加选项和参数的话,还是会被记录到历史中,除非你只使用cmd1,不加任何选项和参数。
HISTFILE变量,指定存放历史的文件。
HISTFILE=/root/his.log 指定记录历史的文件,默认存储命令历史的文件为用户家目录下的.bash_history
HISTCONTROL 变量 ,控制历史记录的方式的变量。
通过设置 环境变量:HISTCONTROL 可以控制历史的记录方式,HISTCONTROL 变量可以设置成如下值。
ignoredups 不记录“重复”的命令;连续且相同 方为“重复”
ignorespace 不记录所有以空格开头的命令,此变量值非常实用,我们可以通过临时更改HISTCONTROL 的变量值为ignorespace ,
以便当前会话中的以空格开头不被记录到历史中。
ignoreboth 表示ignoredups:ignorespace ,效果相当于以上两种的组合。
erasedups 删除重复命令
怎样快速执行上一条命令
有 4 种方法可以重复执行上一条命令:
1、使用上方向键,并回车执行。
2、按 !! 并回车执行。
3、输入 !-1 并回车执行。
4、按 Ctrl+P 并回车执行。
调用特定的历史命令的方法
!!重复前一个命令
! 字符重复前一个以“字符”开头的命令
!num按照历史记录的序号执行命令
!?abc重复之前包含abc的命令
!-n执行命令历史列表中的倒数第n条命令,!-1代表上一条命令
调用历史命令的参数的方法
#cmd !^ 或者#cmd !!^ : 利用上一个命令的第一个参数做cmd的参数
#cmd !$ 或者#cmd !!$ : 利用上一个命令的最后一个参数做cmd的参数
#cmd !* 或者#cmd !!* : 利用上一个命令的全部参数做cmd的参数
#cmd !:n或者#cmd !!:n : 利用上一个命令的第n个参数做cmd的参数
#cmd !n:^ 调用第n条命令的第一个参数做cmd的参数
#cmd !n:$ 调用第n条命令的最后一个参数做cmd的参数
#cmd !m:n 调用第m条命令的第n个参数做cmd的参数
#cmd !n:* 调用第n条命令的所有参数做cmd的参数
#cmd !string:^ 从命令历史中搜索以 string 开头的命令,并获取 它的第一个参数,当做cmd的参数
#cmd !string:$ 从命令历史中搜索以 string 开头的命令,并获取它 的最后一个参数,当做cmd的参数
#cmd !string:n 从命令历史中搜索以 string 开头的命令,并获取 它的第n个参数,当做cmd的参数
#cmd !string:* 从命令历史中搜索以 string 开头的命令,并获取 它的所有参数,当做cmd的参数
从上述语法可以看出
调用历史命令的方法 和 调用历史命令参数的方法 是可以互相组合的
一些相关的快捷键
ctrl键 + r 快捷键可以从命令历史中查找(reverse-i-search)
按(按esc后松手,再按.)可以调用上一个命令的最后一个参数。
注意:
历史扩展只能用在交互shell,不能用在shell脚本中
一些小例子
history命令应用的小例子
我们通常会打开多个远程命令行窗口连接到一台主机进行操作,这样更方便,假设我通过ssh远程工具,打开了两个远程窗口,窗A、窗B
加入我们一开始在窗A执行了一些命令,然后切换到窗B,在窗B中又执行了一些不同的命令。
那么这时候我们在窗B中使用history命令查看历史命令,会发现窗A中执行过的命令并没有在窗B中的history中显示。
我们可以通过如下方法,将窗A中的命令历史同步到窗B中
1、在窗A中执行history -a将内存中的命令写入到历史文件中
2、在窗B中执行history -n ,从历史文件中将新增历史命令加载到窗B的内存历史列表中
3、在窗B中执行history命令,已经可以看到窗A中执行过的命令
调用历史命令参数的小例子
mkdir a b c
cd !!:1
cd a
mkdir a b c
cd !!:2
cd b
mkdir a b c
cd !$
cd c
注意:
历史扩展只能用在交互shell,不能用在shell脚本中
!$是引用上一个命令的最后一个参数
$_是引用前一个命令的最后一个参数
一个是前一个命令一个是上一个命令
例如
mkdir -p testdir && cp -r /opt "$_"
转自:http://blog.51cto.com/zz6547/1830928
【Linux】history用法相关推荐
- linux history 用法,Linux之History的使用
History: 1.命令行历史:保存你输入的命令历史,可以用它来重复执行命令:当登陆shell时,系统会读取命令行历史文件中记录下来的命令,保存命令历史记录的文档存放于 ~/.bash_histot ...
- linux history(命令历史)
linux history(命令历史) 1.bash中默认命令记忆可达1000个.这些命令保存在主文件夹内的.bash_history中. 2.~/.bash_history:记录的是前一次登录以前所 ...
- linux history原理,linux history(命令历史)
1.bash中默认命令记忆可达1000个.这些命令保存在主文件夹内的.bash_history中. 2.~/.bash_history:记录的是前一次登录以前所执行过的命令.至于本次登录的命令暂时存储 ...
- linux history存放位置,Linux中history历史命令使用方法详解
当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效率获得极大提升.事实上,一旦你掌握了我在下面给出的15个有关Linux history历史命令 ...
- linux awk语法格式,Awk是什么?一文带运维小白快速掌握Linux Awk用法
原标题:Awk是什么?一文带运维小白快速掌握Linux Awk用法 作者:a8 Awk.sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以 ...
- linux_命令行助手:(manpages supplement)/获取linux命令用法示例的若干辅助命令行工具(cheat/tldr/eg/manly)
文章目录 linux_命令行助手:(manpages supplement)/获取linux命令用法示例的若干辅助命令行工具(cheat/tldr) references 我的推荐(两个)
- linux more 用法
[转]linux more 用法 名称:more 使用权限:所有使用者 使用方式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] ...
- linux expect中文,Linux expect用法介绍
1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...
- linux expect循环用法,Linux expect用法介绍
1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...
- linux history文件路径,Linux、Unix常用命令(文件和目录相关)
mkdir dirname 建立子目录. 注意:用户不能在一个不存在的目录中建立子目录. mkdir data 在当前目录下建立子目录 data mkdir /usr/data 在/usr/目录下建立 ...
最新文章
- 提升码农90%学习效率的10大学习工具
- 零基础入门学习Python (9)-列表(1)
- Python学习—函数
- oepnstack笔记
- webpack打包后引用cdn的js_利用CDN加速react webpack打包后的文件详解
- Confluence 6 管理协同编辑 - 关于 Synchrony
- 40_并发编程-事件
- 金山词霸”屏幕取词技术揭密(讨论稿)
- 没关系,因为你是好人呀
- ICLR 2022 论文列表公布,接收率高达 32%
- for循环使用后contains方法失去效果
- AES加密和解密详解
- 【软考软件评测师】2010年下综合知识历年真题
- 【Shell】awk命令--输出某列,列求和,列求平均值,列最大值,列去重复,取倒列,过滤行,匹配,不匹配,内置变量|定义分隔符|多个分隔符...
- termux安装docker
- 3D数学基础——欧拉角与万向节死锁
- Blood Cousins (dsu on tree + 求第k级祖先)
- 【结对编程】随机小学数学题测试
- P1926 小书童——刷题大军
- 恰如春花秋月人生起伏
热门文章
- 什么是Numpy、Numpy教程
- Android 图片处理以及recycle机制
- win7家庭版如何升级到专业版和旗舰版
- 4816: [Sdoi2017]数字表格
- C语言麻将递归,一个简洁明了的递归函数——判断[麻将]的和牌
- 为什么选择WordPress作为企业CMS?
- 数据采集时总提示未登录_2月1日起,海关进口增值税专用缴款书数据采集规则大变,请知悉!...
- unity5.6.5_5.6现在可用并完成了Unity 5周期
- win7一直显示正在启动_win7旗舰版升级后无法启动电脑的解决方法
- Arch 使用 i3 美化桌面