CentOS6查看最近30条命令历史并导出CSV
在CentOS6里,**history**默认只给1000条,想抠出最近30条还得再倒腾成Excel能打开的CSV,不少人第一反应是复制粘贴,结果换行全乱。下面这套办法一行指令就能搞定,**不装新包、不改配置、不挑终端**,老系统也能直接跑。

为什么只看30条就够
日志一多眼就花,**30条刚好覆盖半天操作**,排错时足够定位,文件体积也小,邮箱随手就能发出去。
一条命令完成提取
打开终端,直接粘下面这条:
history 30 | sed 's/^[[:space:]]*[0-9]*[[:space:]]*/"/;s/$/"/' > ~/last30.csv
解释:history 30先掐出最近30行;sed把行首序号删掉,再给每条命令套上双引号,**秒变标准CSV**;最后写到主目录下的last30.csv,**中文空格都不会炸列**。

验证文件对不对
cat ~/last30.csv看看有没有引号包裹,再执行file ~/last30.csv,只要输出带“ASCII text”就没问题。拖到Windows上用Excel打开,**分隔符自动识别,不会挤在一格**。
想带时间戳怎么办
CentOS6默认历史不记时间,**临时用可以export HISTTIMEFORMAT="%F %T "**,再执行一次history 30,时间就会插在命令前面,**CSV里多一列,排错更直观**。注意这条变量只影响当前会话,**重启终端就消失**,不会污染老环境。
定时自动导出
把下面内容写进crontab -e,每天9点整把30条命令发到指定目录,**文件名带日期,方便回溯**:

0 9 * * * history 30 | sed 's/^[[:space:]]*[0-9]*[[:space:]]*/"/;s/$/"/' > /var/log/cmd_$(date +\%Y\%m\%d).csv
多用户机器怎么各收各的
上面路径换成$HOME/last30.csv,crontab用各自账号建任务,**权限互不干扰**,导出文件直接落在自己家目录,**root也看不到普通用户细节**。
CSV后续还能怎么玩
last30.csv扔进LibreOffice,用过滤器筛scp、rm、dd等高危命令,**十分钟就能拉出一张风险报表**;再配合sendEmail,**附件一键发给运维组**,手机也能审。
常见坑速查
1. 引号漏写导致逗号被截断——**sed里第二个s/$/"/千万别省**。
2. Windows记事本打开没换行——**用Excel或Notepad++,选UTF-8换行符**。
3. history条数不够30——**检查HISTSIZE变量,临时提高到100即可**。
懒人总结
记住一句话:history 30 | sed 's/^[[:space:]]*[0-9]*[[:space:]]*/"/;s/$/"/' > last30.csv,**导出、打开、发邮件三分钟收工**,CentOS6再老也能玩得溜。
