目录

服务器无法通过ctrl-r搜索命令

概述

Linux 环境下 ctrl-r 可以查询之前打过的命令,非常好用,虽然以前一直在用,但是从来没有考虑过是怎么实现的,最近因为一台机器无法正常使用这个功能,于是才有机会接触到实现的逻辑。

实现逻辑

最近来了一批新的机器,交给运维同学重装之后,发现每次登录都没法通过 ctrl-r 来检索历史命令,因此每次操作都非常蛋疼。

于是简单了解了一下 ctrl-r 是通过 .bash_history 文件来记录历史命令的,所以遇到类似情况,可以考虑一下是不是这个文件超过了预定义的大小或者命令超出行数了,但在我这里都不是这个问题,主要还是这个文件的属性,导致 root 在操作的时候,都无法记录命令到这个文件,相关的处理可以看看下面的命令。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# ll -h /root/.bash_history
-rw------- 1 root root 785 2月  10 16:15 /root/.bash_history
# chmod 644 .bash_history
chmod: changing permissions of '.bash_history': Operation not permitted
# lsattr .bash_history
----ia--------e----- .bash_history
# 执行下面的的命令,然后再检查一下,最后再修改一下文件的权限即可
# chattr -ia .bash_history
# lsattr .bash_history
--------------e----- .bash_history

最后,总结一下,通过下面的命令就可以解决问题。

1
2
3
sudo su -
chattr -ia ~/.bash_history
chmod 644 ~/.bash_history

命令历史个数

因为一些操作系统初始化的时候,只会给到比较少的历史命令的行数,可以说是安全或者是基于其他考虑来设计的,但是如果希望多放一些的话可以通过下面的修改来实现。

1
2
 export HISTSIZE=5000
 export HISTFILESIZE=10000

参考资料

  1. lsattr
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。