前两天有个新同事问我:Linux 命令到底应该怎么学?他说自己从网上下了一份《Linux 命令大全》,几百条命令抄了两大页,可真上了服务器,还是搞不清磁盘空间被谁占了、服务为什么启动失败、远程传文件到底该用哪个参数。这个感觉我太熟了。刚入行那几年我也背过命令,后来才慢慢想明白一件事:真正重要的不是“记住多少条命令”,而是知道某类问题该找哪个工具、为什么要用它、出异常时怎么一步步查。这篇内容就按我自己的使用习惯,把 Linux 系统日常操作里最值得吃透的命令串一遍,重点覆盖文件定位、文件操作陷阱、用户与权限、远程网络传输、日志排查,以及拿到一台新机器后的体检方法。想认真做运维、开发,或者刚从 Windows 转 Linux 的朋友,都可以拿这篇当一条比较实在的实践路线。
1. 把“当前在哪、这里有什么”练成肌肉记忆:文件定位命令的使用逻辑
1.1 ls -l 列出的每一个字符,先搞懂再谈别的
很多人刚接触 Linux 时,习惯只敲 ls,看到一堆文件名就觉得完成了。但真正排查问题的时候,ls -l 才是最有用的姿势。它每一行的信息都非常固定:第一个字符表示文件类型,普通文件是 -,目录是 d,软链接是 l;之后每三个字符一组,分别代表所属用户、所属组和其他人的读、写、执行权限;接着是硬链接数量、属主、属组、文件大小和最后修改时间。
建议新人在第一周就养成一个习惯:想看目录内容,默认敲 ls -lh,看详细信息但把文件大小转成人类易读的 K、M、G;如果想看目录自身属性而不是目录里的内容,一定要敲 ls -ld 目录名。我见过很多人在脚本里写 ls -l /etc/nginx/,然后试图判断 nginx 配置目录本身的时间戳,结果看到的全是子文件的信息,这就是少了 -d 导致的。
还有一个小命令容易被忽略:stat。它能输出比 ls -l 更完整的 inode、修改时间、变更时间、访问时间。有时候你发现文件内容没变,但备份程序老认为它变了,这时候 stat 去看 Change 时间往往会发现问题,比如权限被改过、硬链接数变了,都会影响某些增量备份判断。file 命令也值得养习惯:看到一个没有后缀的文件,先 file 文件名 看一眼真实类型,再决定怎么处理。
1.2 你敲的路径真的对吗?用好 pwd、cd - 和通配符
路径问题是新手绕不开的坎。pwd 是最基础的命令,但有一个容易忽略的点:如果你通过软链接进入一个目录,pwd 默认显示的是逻辑路径,也就是你 cd 进去时用的那个软链路径;想看到真实物理路径,可以用 pwd -P。在处理 nginx、supervisor 这类带软链的安装目录时,这两个显示结果可能不一样,我在排查脚本时被这种“看起来在同一目录、实际却在另一个地方”的情况坑过。
cd - 是我每天都会用到的命令,它的作用是回到上一个所在目录。别看它简单,在两个项目目录之间反复切换时,比打一长串绝对路径高效得多。也可以在 Shell 里用 pushd 和 popd 维护一个目录栈,但它对大多数人来说不如 cd - 直觉。
通配符也是提高定位效率的关键。* 匹配任意多个字符,? 只匹配一个字符,[abc] 匹配方括号里的任意一个字符。这里有个多数人不知道的细节:通配符是在 Shell 展开后才把结果传给命令的,所以在执行前可以先敲 echo /etc/nginx/*.conf,看看 Shell 到底会把哪些文件传给后续命令。这种“先展开、再执行”的验证习惯,能避免很多误操作。举个例子,rm /tmp/data/*.log 如果前面的目录是空的,Shell 会原样把字符串传给 rm,rm 就会报“没有那个文件或目录”,而不是安静地什么都不做。
1.3 磁盘快满时:从 df 到 du 再到 lsof 的定位顺序
磁盘告警是 Linux 操作里最高频的故障之一,处理顺序基本是固定的。先敲 df -h 看整体分区使用率,确认到底是哪个挂载点满了;如果发现某个分区满了,再用 du -sh /路径/* 2>/dev/null 去逐层找大文件。du 的常见参数各有用途:-s 只给汇总,-h 显示人类可读单位,--max-depth=1 可以控制递归深度,防止它把整个文件系统扫一遍。
但这里有个经典坑:df 显示分区满了,du 却怎么都找不到大文件。我遇到过好几次这种情况,最后发现是有进程正在写日志,后来日志被删除或轮转掉了,但那个进程仍然持有已经删除的文件句柄,空间自然不会被释放。处理方法是执行 lsof +L1,它会列出所有被删除但仍被进程打开的文件,然后你就能看到是哪个进程占着那个文件。直接重启对应进程,或者 /usr/sbin/nginx -s reopen 这种方式让服务重新打开日志文件,空间才能真正回来。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
