我藏了半年的Linux私货:5个不用背命令、能少加班的冷技巧
今天不聊什么企业架构、内核调优就唠点我平时藏着的、能实实在在少加班的Linux小技巧。没有晦涩术语全是系统自带除了一个要装的小工具不用记复杂参数复制就能用学会了哪怕被喊去排查问题也能装得像个老油条。第一个拯救强迫症的column再也不用写awk对齐了我刚工作的时候为了把mount的输出对齐硬啃了半页awk语法写了十几行脚本后来才知道有column这个神器尴尬得我想把服务器砸了。它的作用只有一个把乱糟糟的列输出自动对齐成表格。比如你敲cat /etc/passwd出来的内容是挤在一起的root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin加个column -t -s:瞬间变整齐cat /etc/passwd | column -t -s: root x 0 0 root /root /bin/bash bin x 1 1 bin /bin /sbin/nologin daemon x 2 2 daemon /sbin /sbin/nologin-s:是指定分隔符为冒号-t是自动对齐。我平时最常用的两个场景看磁盘挂载mount | column -t比直接看mount的输出清楚10倍看进程信息ps aux | column -tPID、CPU、MEM列再也不会错位。哦对了上次小周查日志我让他把grep 404 access.log | column -t原来挤在一行的请求时间、URL、状态码直接对齐他扫了一眼就找到了异常的接口——这玩意儿看任何列输出都好用我愿称之为“Linux排版神器”。第二个摸鱼必备的pv再也不用盯着cp的光标发呆你们有没有过这种经历拷一个大文件比如200G的数据库备份敲完cp之后光标就一直闪你不知道是卡了、还是正常拷贝也不敢动生怕打断之后前功尽弃只能干坐着摸鱼都不敢放开。pvPipe Viewer就是干这个的它能给管道加个进度条告诉你当前拷贝了多少、速度多快、还有多久完成。大部分系统没预装装一下只要几秒钟# CentOS/RHEL yum install -y pv # Debian/Ubuntu apt install -y pv用法特别简单把原来的cp src dst换成pv src dst就行pv bigfile.iso /mnt/backup/bigfile.iso # 输出1.2GiB 0:00:15 [82.3MiB/s] [ ] 32% ETA 0:00:31甚至你用tar压缩文件的时候也能插进去看进度tar cf - /data | pv -s $(du -sb /data | awk {print $1}) | gzip data.tar.gz-s后面跟的是总大小这样pv能算出准确的ETA。我上次拷一个500G的备份看着进度条从0%涨到100%算好还有10分钟结束刚好够我去楼下买杯咖啡——这才是摸鱼的正确姿势。第三个甩锅神器strace程序耍花招一查一个准如果说前面的都是提升体验的那strace就是能帮你少背锅的神器。你可以把它当成程序的“窃听器”它能听到程序在后台和内核说的每一句话比如“我要读这个配置文件”“我要连那个端口”“我找不到这个文件”程序耍什么花招都瞒不过它。最常见的场景你改了Nginx的配置reload之后不生效翻文档翻了半小时也不知道哪里错了用strace一跑就清楚strace -f -e traceopen,read nginx -t-f是跟踪子进程-e traceopen,read是只跟踪“打开文件”和“读取文件”的系统调用。跑完之后你会看到Nginx到底读了哪个配置文件——我之前遇到过运维同事把nginx.conf改了结果程序读的是/usr/local/nginx/conf/nginx.conf路径搞混了strace一跑直接定位。还有个更实用的用法查程序启动慢的原因。比如你有个Java服务启动要2分钟不知道卡在哪用strace -tt -T -o trace.log java -jar app.jar-tt是打印微秒级时间戳-T是打印每个系统调用的耗时打开trace.log一看哪个调用卡了几秒一目了然——上次我查一个服务启动慢发现是它在启动时偷偷连了一个已经下线的Redis卡了30秒strace直接帮我锤死了问题不用背锅。第四个临时救急的expect不用写复杂脚本也能自动输密码有时候你需要批量ssh到几台机器执行同一个命令比如查所有机器的磁盘使用情况写完整的expect脚本太麻烦这时候用expect的一行命令就够了。比如你要ssh到192.168.1.100执行df -h密码是YourPass123!直接敲expect -c spawn ssh user192.168.1.100 df -h; expect password: {send YourPass123!\r}; interact-c后面跟的是命令字符串spawn启动ssh进程expect password:是等待出现密码提示send发送密码\r是回车interact是把控制权交给你如果需要后续操作的话。我平时用它最多的场景临时批量重启服务、查日志、同步文件不用写十几行的expect脚本一行搞定。不过提醒一句别把这玩意儿写进脚本放生产环境密码明文太危险临时用用就好。第五个xargs的两个隐藏用法效率翻4倍xargs大家都用过比如find . -name *.log | xargs rm但很多人不知道它有两个特别好用的参数第一个-print0和-0配对处理带空格的文件名。比如你有个文件叫my log.txt直接find . -name *.txt | xargs rm会报错因为xargs会把空格当成分隔符把my log.txt当成my和log.txt两个文件。这时候用find . -name *.txt -print0 | xargs -0 rm-print0会让find输出的文件名用null字符分隔-0告诉xargs用null字符分割完美处理带空格的文件名。第二个-P参数并行执行。比如你有100个log文件要压缩单进程跑要10分钟用-P 4开4个进程并行跑只要2分半find . -name *.log -print0 | xargs -0 -P 4 gzip-P 4就是同时跑4个gzip进程根据你的CPU核心数调整就行我8核的机器一般用-P 8压缩速度直接翻8倍。上次我要处理几千个日志文件用这个参数原本要跑半小时的任务3分钟就搞完了剩下的时间全用来摸鱼。最后送个彩蛋man命令其实能看例子很多人遇到问题第一反应是百度其实系统自带的man手册里就有现成的例子。比如你想知道tar怎么压缩文件敲man tar翻到最后面的EXAMPLES部分全是能直接抄的例子# 压缩文件 tar -czf archive.tar.gz dir/ # 解压文件 tar -xzf archive.tar.gz比网上那些抄来抄去的博客靠谱100倍还没有广告。我刚工作的时候不知道这个百度了半天tar的参数被师傅骂了一顿现在想想都脸红。这些技巧我藏了大半年本来打算年底评优的时候露一手现在分享给你们。要是你们老板问你怎么突然效率变高了别说是我教的。哦对了最后一个提醒strace别乱跑生产进程我上次不小心strace了线上MySQL的主进程差点被DBA追着打。你们还有什么私藏的Linux冷技巧评论区唠唠我去偷师啊觉得有用的话点个赞再走呗