Linux新手求助:如何创建所有已执行命令的日志文件?
如何记录所有已执行的Linux命令到日志文件?
嘿,作为Linux新手遇到这个需求完全不用慌,我来一步步给你讲清楚两种常用的实现方式,从临时测试到永久生效都有:
一、临时记录当前会话的所有命令(含输出)
这是最快上手的方法,适合你临时记录某次操作的完整过程:
- 打开终端后,直接输入命令:
script my_command_log.log - 回车后你会看到类似
Script started, file is my_command_log.log的提示,接下来你执行的所有命令、命令的输出都会被自动写入这个日志文件 - 想要停止记录的话,输入
exit回车,终端会提示Script done, file is my_command_log.log,此时日志就保存好了 - 可以用
cat my_command_log.log查看记录的内容
二、永久自动记录所有执行的命令(带时间/用户/路径)
如果需要每次登录终端都自动记录命令,甚至要带上时间、执行用户、当前目录这些信息,就需要修改bash的配置文件:
针对当前用户生效
- 打开用户目录下的bash配置文件:
nano ~/.bashrc - 滚动到文件末尾,添加下面这行代码:
简单解释下这行的作用:PROMPT_COMMAND='history -a; history -c; history -r; echo "$(date "+%Y-%m-%d %H:%M:%S") $(whoami) $(pwd) $(history 1 | sed "s/^[ ]*[0-9]*[ ]*//")" >> ~/permanent_command_log.log'PROMPT_COMMAND:每次显示命令提示符前都会执行的命令history -a/-c/-r:确保不同会话的命令历史能同步- 最后一部分会把时间、当前用户名、工作目录、执行的命令追加到
~/permanent_command_log.log文件中(sed是用来去掉history输出里的行号)
- 保存并退出nano(按
Ctrl+O回车,再按Ctrl+X) - 让配置立即生效:
source ~/.bashrc - 之后你执行的每一条命令都会自动记录到
~/permanent_command_log.log里,就算重启终端也会继续生效
针对所有系统用户生效(需要管理员权限)
如果要让所有用户的命令都被记录,就修改全局配置:
- 打开全局bash配置文件:
sudo nano /etc/bashrc - 同样在末尾添加上面的代码,但把日志路径改成全局可写的位置,比如
/var/log/all_users_commands.log - 先创建这个日志文件并设置权限:
sudo touch /var/log/all_users_commands.log sudo chmod 666 /var/log/all_users_commands.log # 让所有用户都能写入,也可以设置更严格的权限比如仅root可读 - 保存退出后,执行
sudo source /etc/bashrc生效
一些额外注意事项
- 如果不想让某些敏感命令被记录,可以在输入命令前加一个空格(前提是你的
HISTCONTROL设置了ignorespace,大部分Linux发行版默认已经开启),这样这条命令不会被加入历史记录,自然也不会被写入日志 - 可以通过修改
HISTSIZE和HISTFILESIZE来调整历史记录的条数,比如在.bashrc里添加HISTSIZE=10000和HISTFILESIZE=100000,让系统能保存更多历史命令
内容的提问来源于stack exchange,提问作者jbarry
相关产品推荐
相关产品推荐

