

你是不是也这样学过 Linux?
照着教程背命令:ls 看目录,cd 切路径,grep 搜内容,find 找文件,rm -rf 删除东西。面试时问常用命令,你能答出来;真到了服务器上,服务起不来、日志找不到、配置不知道在哪,反而不知道该先敲哪条命令。
问题通常不在于命令背得少,而在于你只记住了“怎么敲”,没有搞懂这些命令在操作什么。
Linux 命令不是孤立的口诀,它们只是系统逻辑暴露出来的操作入口。你知道系统怎样组织文件、怎样暴露设备、怎样记录运行状态,命令才会变得有方向。
这篇先讲最基础、也最容易被忽略的一层:Linux 的文件系统逻辑。
很多人刚学 Linux,会先找一份“常用 100 个命令”开始背。今天背 ls -l,明天背 find,后天背 awk。短期看很有成就感,真正排查问题时却容易卡住。
比如要找 Nginx 的配置文件。你知道可以用:
find / -name nginx.conf但命令一跑,屏幕刷出一堆路径。哪个是当前服务真正读取的配置?为什么有的在 /etc/nginx/,有的在 /usr/local/nginx/conf/?为什么日志又跑到了 /var/log/nginx/?
如果只背命令,你会继续搜。可如果你理解 Linux 的目录分工,就会先判断:这是包管理器安装的 Nginx,还是手动编译安装的 Nginx?系统级配置通常看 /etc,手动安装的软件常见于 /usr/local,运行日志优先看 /var/log。这样排查才不会乱。
命令是工具,系统逻辑是地图。没有地图,工具越多越容易乱。
还有一个典型例子是 kill。
很多人以为 kill 就是“杀进程”。其实更准确地说,kill 是给进程发送信号。比如:
kill -TERM <pid>kill -KILL <pid>TERM 通常表示请进程正常退出,进程有机会清理资源;KILL 不能被进程捕获或忽略,属于最后手段。你只背 kill -9,遇到服务卡住就强杀,很可能把临时文件、锁文件、未写完的数据留在系统里。你理解了信号机制,才知道为什么应该先尝试正常退出,再考虑强制结束。
Linux 里有句常见说法:一切皆文件。
这句话很重要,但不能理解得太粗暴。更准确地说,Linux 会把很多资源抽象成文件、文件描述符或类文件接口,让你用相对统一的方式去读写它们。
普通文件很好理解,配置文件、日志文件、脚本文件都在文件系统里。更有意思的是设备和运行状态。
比如 /dev/null 是一个特殊设备文件。你不想看某个命令的输出,可以把输出重定向进去:
./my_script > /dev/null 2>&1这里的意思是:标准输出写到 /dev/null,标准错误也跟着写过去。理解了重定向和设备文件,这个写法就不是死记硬背。
再比如 /dev/sda、/dev/nvme0n1 这类路径,通常对应磁盘设备。它们看起来像文件,但背后是块设备。你当然可以读它们,但不能随便写。很多 Linux 事故不是因为命令太复杂,而是因为操作者不知道自己正在对设备文件做什么。
还有 /proc。
/proc 不是普通磁盘目录,而是内核提供的虚拟文件系统。你读:
cat /proc/cpuinfocat /proc/meminfo看到的是内核暴露出来的 CPU 和内存信息。你看:
ls /proc/<pid>能看到某个进程的状态、打开的文件、命令行参数等信息。很多排障命令,本质上也是在读取这些内核暴露出来的数据,只是替你做了格式化。
理解到这里,你再看 Linux,就不会觉得它只是一堆命令。它把设备、进程、内核状态都尽量放进统一的访问模型里。命令只是帮你读写这些接口。
很多新手第一次进入根目录,看到这些名字会直接懵:
/bin /boot /dev /etc /home /proc /run /usr /var如果靠死背,确实很痛苦。更好的办法是记住一个原则:Linux 的目录大体按功能分工。FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)就是这套分工的主要参考。
不用一口气背完所有目录,先抓住常见的几个。
/etc:系统级配置/etc 主要放当前机器的系统配置。服务配置、网络配置、用户相关配置,很多都会在这里出现。
比如通过发行版包管理器安装的 Nginx,常见配置路径是:
/etc/nginx/但这里也要留一点余地:不同发行版、不同安装方式会影响实际路径。你不能只背“配置一定在 /etc”,更应该理解“系统级配置通常优先从 /etc 查起”。
/var:会不断变化的数据/var 的重点是 variable,也就是运行过程中会变化的数据。
日志常见于:
/var/log/邮件队列、缓存、数据库文件、服务运行时产生的数据,也经常和 /var 有关。你排查服务时先找日志,本质上就是在沿着这个目录逻辑走。
需要注意的是,运行时状态现在更多会放在 /run,有些系统会保留 /var/run 作为兼容路径或符号链接。写文章或做笔记时,最好不要只写死 /var/run。
/usr:共享的、相对静态的系统资源很多人会问:既然根目录下有 /bin,为什么还有 /usr/bin?
历史上这些目录经历过变化。今天你可以先这样理解:/usr 主要放共享的、相对静态的系统资源,比如大量用户可执行程序、库文件、文档等。
现代很多发行版已经做了 usr merge,也就是把 /bin、/sbin、/lib 等路径合并或链接到 /usr 下。你在不同系统里看到的结构可能不完全一样,但背后的思路仍然是:启动必需、系统配置、运行数据、共享资源,各有分工。
/usr/local:本机手动安装的软件如果某个软件不是通过系统包管理器安装,而是你自己编译安装,它很可能出现在:
/usr/local/这就是为什么有时 Nginx 配置在 /etc/nginx/,有时又在 /usr/local/nginx/conf/。不是 Linux 乱,而是安装方式不同。
/home:普通用户自己的空间普通用户的文件一般在 /home/<username>。用户自己的 shell 配置、编辑器配置、项目文件,常见于这里。
系统级配置和用户级配置要分清。比如全局 shell 配置可能在 /etc,用户自己的配置可能在家目录下。你理解了这个层级,很多“为什么我改了配置没生效”的问题就能少踩坑。
回到开头那个问题:Nginx 起不来,应该怎么查?
不要第一反应就到处搜命令。先按系统逻辑问几个问题:
/etc/nginx/,手动安装再看 /usr/local/nginx/。/var/log/nginx/,也可以从配置文件里确认日志路径。systemctl status nginx、ps、ss 等命令确认。这时命令才开始发挥作用。
你可以看服务状态:
systemctl status nginx可以检查配置:
nginx -t可以看端口占用:
ss -ltnp | grep ':80'可以看日志:
journalctl -u nginxtail -n 100 /var/log/nginx/error.log这些命令并不难,难的是知道什么时候用哪条。这个判断来自系统逻辑,而不是来自命令清单。
学 Linux 当然要学命令,但顺序不要反。
更好的顺序是:
先理解系统在管理什么,再学习对应命令怎么操作。
比如你学文件系统,就顺带学 ls、cd、find、du、df。你学文本处理,就顺带学 grep、sed、awk。你学进程,就顺带学 ps、top、kill。你学服务管理,就顺带学 systemctl、journalctl。
这样学有一个好处:命令忘了可以查,但逻辑不会丢。
我建议新手先做三件事。
第一,别急着背完所有目录。每天打开一个目录,看里面放了什么,再对照 FHS 或发行版文档理解它的用途。
第二,从真实问题出发学。比如“服务为什么没起来”“磁盘为什么满了”“日志为什么没有写入”,每解决一个问题,就补上一块系统逻辑。
第三,常用命令要理解它操作了什么。rm 删除的是目录项和文件引用,grep 是按模式过滤文本,find 是遍历文件系统,df 看文件系统空间,du 统计目录占用。你知道它们在看什么,参数才好记。
Linux 入门可以从命令开始,但不能停在命令表上。
你真正要建立的是一张系统地图:配置在哪,日志在哪,设备怎么暴露,进程状态怎么看,服务由谁管理。地图有了,命令只是路上的工具。
上篇先讲文件系统。下篇我们继续把这张地图往下走:从启动流程、systemd、进程信号,到 CPU、内存、I/O 的排障思路。

END




