|
|
51CTO旗下网站
|
|
移动端

1.7.4 history命令技巧10例

《跟老韩学Linux运维》第1章Linux应用运维指令概述,本书完全按照实际的Linux应用运维中的工作命令来讲解并加以实践,力求让读者看完此书后,能掌握运维工作中使用频率比较高的实战类型的运维指令。本节为大家介绍history命令技巧10例。

作者:韩艳威来源:人民邮电出版社|2018-11-10 17:26

1.7.4  history命令技巧10例

作为Linux管理员,在出现问题时想查在过去某段时间内哪个用户在什么时间执行过什么命令。如果你经常使用Linux命令行,那么使用history(历史)命令可以有效地提升效率。

Linux操作系统本身会记录操作者执行过的命令,对操作审计、日志备份、系统异常处理等都有着举足轻重的作用。但是往往history往往又会被读者所忽略,因此本节就history命令在实际运维工作的使用做详细介绍。

【实例1-33】让history显示时间戳

如果要让history在显示历史命令时同时显示记录命令的时间,则需要设置如下环境变量:

  1. [root@linux_command ~]#export HISTTIMEFORMAT='%F %T ' 

还可以把配置信息写到配置文件里面,以便永久生效。

  1. [root@linux_command ~]# echo "export HISTTIMEFORMAT='%F %T  '">>/etc/profile  
  2. [root@linux_command ~]# . /etc/profile  
  3. [注:读者也可以设置alias语句来查看最近的历史命令]  
  4. alias h1='history 10' 
  5. alias h2='history 20' 
  6. alias h3='history 30' 
  7. [root@linux_command ~]# h1  
  8.  1007  2017-08-26 12:56:21  . /etc/profile  
  9.  1008  2017-08-26 12:56:24  history   
  10.  1009  2017-08-26 12:56:44  vim history  
  11.  1010  2017-08-26 12:56:48  vim /etc/profile  
  12.  1011  2017-08-26 12:57:05  echo "export HISTTIMEFORMAT='%F %T  '">>/etc/profile  
  13.  1012  2017-08-26 12:57:06  . /etc/profile  
  14.  1013  2017-08-26 12:57:26  alias h1='history 10' 
  15.  1014  2017-08-26 12:57:30  h1  
  16.  1015  2017-08-26 12:57:42  history |tail  
  17.  1016  2017-08-26 12:57:47  h1 

【实例1-34】用<Ctrl+r>组合键搜索历史命令

按下<Ctrl+r>组合键后输入关键字,可以在历史命令中通过关键字来查找历史命名。例如,搜索“f”,则显示以前的命令中含有“f”的命令“ls -lhrt --full-time”。

  1. [root@linux_command ~]# ls -lhrt --full-time |head -2  
  2. total 23M  
  3. -rw-r--r--.  1  root        root        4.3K  2011-10-14 18:45:20.000000000 +0800 nginx-release-centos-6-0.el6.ngx.noarch.rpm  
  4. (reverse-i-search)`f': ls -lhrt --full-time |head -2  
  5. [注: 在命令行提示符下按下<Ctrl+R>,终端将显示如下提示]  
  6. (reverse-i-search)`f': ls -lhrt --full-time |head -2  
  7. [注: 当看到你要的命令后按<Enter>键,就可以重新执行这条命令了] 

【实例1-35】执行历史命令中的特定命令

用history显示历史命令时,在每个命令前边都有一个编号,用“!+编号”可以重新执行该条命令。例如:

  1. [root@linux_command ~]# history |less  
  2.    43  2017-08-26 12:55:13  df -Th  
  3.    44  2017-08-26 12:55:13  cat /etc/logrotate.d/php-fpm   
  4.    45  2017-08-26 12:55:13  ll /data/logs/  
  5.    46  2017-08-26 12:55:13  ll /data/logs/nginx/  
  6.    47  2017-08-26 12:55:13  vim /etc/logrotate.conf   
  7.    48  2017-08-26 12:55:13  cd /etc/logrotate.d/  
  8.  
  9. [root@linux_command ~]# !43  
  10. df -Th  
  11. Filesystem          Type      Size  Used Avail Use% Mounted on  
  12. /dev/mapper/cl-root xfs        36G  4.5G   31G  13% /  
  13. devtmpfs            devtmpfs  990M     0  990M   0% /dev  
  14. tmpfs               tmpfs    1001M     0 1001M   0% /dev/shm  
  15. tmpfs               tmpfs    1001M   73M  928M   8% /run  
  16. tmpfs               tmpfs    1001M     0 1001M   0% /sys/fs/cgroup  
  17. /dev/vdb1           xfs        40G  941M   40G   3% /data  
  18. /dev/vda1           xfs      1014M  121M  894M  12% /boot  
  19. tmpfs               tmpfs     201M     0  201M   0% /run/user/0 

【实例1-36】用HISTSIZE控制历史命令的总数

修改环境变量HISTSIZE和HISTFILESIZE的值,可以控制命令历史记录储存的条数。例如,控制bash的命令历史记录的存储量为6000条。history命令历史记录,默认只记录1000条,可以通过查看环境变量获得。

  1. [root@linux_command ~]# echo $HISTSIZE  
  2. 1000  
  3. [root@linux_command ~]# echo $HISTFILESIZE  
  4. 1000  
  5. [root@linux_command ~]# echo 'HISTSIZE="6000"    #默认保留6000条'>>/etc/profile  
  6. [root@linux_command ~]# . /etc/profile  
  7. [root@linux_command ~]# echo $HISTSIZE  
  8. 6000 

【实例1-37】消除命令历史连续重复条目

设置环境变量HISTCONTROL的值为ignoredups,可以消除重复命令,即连续重复出现的命令只记录一次。

设置环境变量HISTCONTROL的值为erasedups,可以消除整个命令历史中的重复命令,即在历史命令中,每个命令只记录一次。

【实例1-38】强制history忽略某条特定命令

在执行一条命令时,你可以将环境变量HISTCONTROL的值设置为ignorespace,并在该命令前加上一个空格来指示history忽略这条命令。在很多情况下这样做是没有必要的,因为我们通常都希望通过history来记录我们曾经做了哪些操作。

【实例1-39】清除历史命令

通常bash在执行命令时不是马上把命令名称写入history文件的,而是存放在内部的buffer中,等bash退出时会一并写入。

不过,可以调用history -w命令要求bash立即更新history文件。如果要清空本次留在缓存中的历史命令,可以用history -c命令。

如何想要清空history曾经记录的所有命令,可以将文件.bash_history清空,当然这样做比较“暴力”。

【实例1-40】禁止history记录任何命令

如果想要禁用history,不让bash shell记录任何命令,则将环境变量HISTSIZE设为0即可。

  1. export HISTSIZE=0 

【实例1-41】让history在存储时忽略某些特定指令

我们在使用Linux的bash工作时,有些命令会频繁地使用,但其又不是很重要,没有必要被history记住,例如ls。可以通过设置环境变量HISTIGNORE的值来让history忽略一些指定的命令。例如:

  1. export HISTIGNORE="pwd:ls:ls 

会平凡的使用,但其又不是很重要,没在Linux系统中,大部分环境变量的配置可以写在profile文件中,该文件在/etc和~目录下都可能存在,只是在~目录下为带点的隐藏文件。

在~(用户家目录)目录下的.profile隐藏文件通常会包含主目录下的.bashrc隐藏文件,大部分的配置会保存在该文件中。

history命令的用途确实很大,但需要小心安全的问题!尤其是root的历史纪录档案,因为不小心的root会将很多的重要资料在执行过程中被记录在~/.bash_history中。如果这个档案被解析了,后果不堪设想!

【实例1-42】记录用户操作历史

Linux用户操作记录一般通过命令history来查看历史记录,但是如果因为某人误操作而删除了重要的数据,那么history命令就不会有什么作用了。

以下方法可以实现通过记录登录IP地址和所有用户登录所操作的日志记录!

在/etc/profile配置文件的末尾加入以下脚本代码就可以实现。

  1. PS1="$`whoami`@`hostname`:"'[$PWD]-' 
  2. history  
  3. USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`  
  4. if [ "$USER_IP" = "" ]  
  5. then  
  6. USER_IP=`hostname`  
  7. fi  
  8. if [ ! -d /data/history_command ]  
  9. then  
  10. mkdir /data/history_command  
  11. chmod 777 /data/history_command  
  12. fi  
  13. if [ ! -d /data/history_command/${LOGNAME} ]  
  14. then  
  15. mkdir /data/history_command/${LOGNAME}  
  16. chmod 300 /data/history_command/${LOGNAME}  
  17. fi  
  18. export HISTSIZE=4096 
  19. DT=`date +"%Y%m%d_%H%M%S"`  
  20. export HISTFILE="/data/history_command/${LOGNAME}/${USER_IP} history.$DT" 
  21. chmod 600 /data/history_command/${LOGNAME}/*history* >/dev/null 2>&1 

通过上面的代码可以看出,在系统的/data新建一个history目录(这个目录可以自定义),在目录中记录了所有的登录过系统的用户和IP地址,这也是监测系统安全的方法之一。

脚本自动生成的记录文件如下:

  1. @linux_command:[/root]-ls -la /data/history_command/root/  
  2. total 8  
  3. d-wx------. 2 root root 100 Aug 26 16:50 .  
  4. drwxrwxrwx. 3 root root  18 Aug 26 16:50 ..  
  5. -rw-------. 1 root root 383 Aug 26 16:50 221.218.239.142 history.20170826_165029  
  6. -rw-------. 1 root root  23 Aug 26 16:50 221.218.239.142 history.20170826_165038  
  7. @linux_command:[/root]-cat /data/history_command/root/221.218.239.142\ history.20170826_165038   
  8. whoami  
  9. ls -lhrt  
  10. uptime 


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

游戏关卡设计

《半条命》作者倾心写就 暴雪总裁等业内专家强力推荐 盛大公司专业团队翻译 一起来创造引人入胜的游戏体验吧! 任何精彩游戏的核心部分...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊