linux查询
我第一天用Linux干活就被卡住了。同事让我查一下服务器上某个进程是不是还活着,我下意识想打开任务管理器——然后发现自己站在一个黑乎乎的终端前面,光标一闪一闪,像在嘲笑我。那会儿我才意识到,在Linux世界里,“查询”不是点鼠标,而是敲命令。你输入什么,它就回什么,干脆利落,不带半点废话。
最常用的当然是ps。这命令短得让人记不住全称,但功能实在强大。光敲ps只能看到当前终端里跑的东西,没啥用。真正干活得加参数,比如ps -ef,把系统里所有进程都列出来,每行一个,PID、父进程、CPU占用、启动时间全都有。有一次我怀疑有个Python脚本在后台偷偷吃内存,就用了ps aux --sort=-%mem,按内存占用排序,结果第一名是个叫“chrome”的家伙,占了3.2G——那一刻我明白了,不管什么系统,浏览器永远是资源黑洞。
查文件是另一回事。刚转到Linux时我总记不住文件在哪儿,后来学会find命令才算解脱。比如find /var/log -name "*.log" -mtime -7,能在指定目录里找出最近七天改过的日志文件。这命令有点啰嗦,但胜在精确。有个细节你可能没注意:find的路径参数如果写错了,它不会报错,而是默默返回空结果,让你怀疑人生。所以我现在习惯先敲ls确认目录存在,再跑find——别嫌多此一举,你被坑过一次就懂了。
查日志本身也有一套。Linux的日志不像Windows那样集中在一个事件查看器里,它们散落在/var/log/下面。系统日志叫syslog,认证日志叫auth.log,还有各个服务自己的日志。查的时候用grep过滤关键词,比如grep "error" /var/log/syslog。但grep有个毛病——它把整个文件从头扫到尾,要是日志文件几个G,你得等半天。我吃过这个亏,后来改用tail -n 100先看尾部,或者tail -f实时跟,再配合grep,效率翻倍。
网络查询也躲不开。ping测连通性,netstat看端口,ss是它的现代替代品。说实话,我到现在还分不清netstat和ss输出的细微差别,但我知道一件事:当服务器端口被占用时,ss -tlnp会直接告诉你哪个进程占着它,省得你一个个猜。上个月部署一个Web服务,启动失败,报错说端口被占,我跑了一下ss,发现是个残留的nginx进程在捣乱,kill掉就解决了。整个过程不到两分钟,换在Windows上,我得打开资源管理器,翻进程列表,找到可疑项,右键结束——麻烦得多。
还有个命令我必须提,叫history。它不是查系统状态,而是查你自己敲过什么命令。你可能觉得这没什么,但当你连续工作三小时,忘了之前到底装了哪个包、改了哪个配置时,history就是你的记忆保险。我习惯把它和grep搭配:history | grep apt install,瞬间找回之前装过的软件列表。别提什么笔记软件,命令行本身就是最好的笔记。
说了这么多,你大概发现了,Linux的查询方式其实是一种思维训练。它逼着你明确自己要什么——查进程?查文件?查日志?查网络?每个问题都有对应的工具,没有那种“打开一个面板,所有信息都堆在眼前”的偷懒选项。刚开始觉得繁琐,用久了反而喜欢这种直接感。毕竟,你知道自己敲的每条命令在做什么,就像你知道自己走的每一步要去哪里。
最后说个冷知识:man命令能查所有命令的用法,但很多人从不看。我承认,我自己也常偷懒,遇到不确定的参数就上网搜。但有一次网络断了,我被迫打开man ps,硬着头皮读了十分钟,出来后发现以前好多模糊的概念都通了。那感觉挺奇妙的——原来最原始的手册,才是最好的老师。
