说实话,Linux这东西,平时真没人夸你“命令敲得真溜”,但一旦线上出问题、服务起不来、磁盘被写满,或者新机器要交付,能不能第一时间搞定,考的就是这些最基础的东西。我见过不少开发同学,框架用得飞起,一进终端就懵;也见过运维老哥,几行命令就能把问题捋得明明白白。差距不在天赋,就在基础知识扎不扎实。这篇内容就是Linux系统基础知识的下半篇,围绕文件管理、用户权限、进程端口、网络传输、软件安装这些日常最高频的场景展开,把我踩过的坑和常用的排查思路一起说清楚。适合刚入门想系统补课的同学,也适合已经用了几年Linux、但想查漏补缺的运维和开发。
1. 吃透起点:文件系统、路径与命令的本质
1.1 一切皆文件,不只是个说法
刚学Linux的时候,很多教程都会说“Linux下一切皆文件”,这句话听得耳朵起茧,但真正理解它,对你的排查能力提升是质的改变。设备是文件,/dev/sda 代表一块磁盘;进程信息是文件,/proc/ 目录下每个数字目录对应一个正在运行的进程;内核参数是文件,/proc/sys/ 里的内容可以直接 echo 修改;甚至网络连接也被抽象成了文件,你在 /proc/net/ 下面能看到一堆连接状态。
这个设计带来的好处是,所有操作变得统一了。你不用专门学习“如何读取磁盘信息”“如何查看进程内部数据”,只需要会用 cat、echo、ls 这几招,就能搞定大部分问题。我平时排查问题,第一件事就是去看 /proc 和 /sys 下面的内容,比如 cat /proc/loadavg 看系统负载、cat /proc/meminfo 看内存、cat /proc/$(pgrep nginx)/status 看某个进程的状态。这些在传统教科书里可能不会细讲,但实践里真的高频。
还有一个延伸概念叫文件描述符。进程打开文件时,内核会返回一个编号,0 是标准输入,1 是标准输出,2 是标准错误。这也是为什么你用 nohup command > /var/log/app.log 2>&1 & 能把日志完整保存下来。理解了这三个编号,你就理解了一切重定向的底层逻辑。
1.2 绝对路径与相对路径:别再踩脚本里的坑
路径问题看着简单,但它坑过的人一点也不少。绝对路径以 / 开头,从头到尾是确定的;相对路径以当前目录为基准,依赖你“站在哪里”。在终端里手动操作,问题不大;但在脚本里、在定时任务里、在 systemd 服务里,相对路径经常出大问题。
举个例子,我之前处理过一个排查了很久的问题:用户写了一个备份脚本,手动执行一切正常,crontab 里一跑就报“找不到文件”。原因很简单,脚本里用了相对路径,手动执行时当前目录是 /home/user,cron 执行时工作目录是执行环境的一个固定位置,自然找不到文件。后来我习惯在脚本开头写:cd "$(dirname "$0")",把工作目录切到脚本所在目录,再后续的操作全部基于这个目录。如果是服务类程序,更建议直接在配置里写绝对路径,别偷懒。
还有几个路径符号必须滚瓜烂熟:. 表示当前目录,.. 表示上级目录,~ 表示当前用户主目录,- 表示上一次所在目录。cd - 这个命令在长路径来回切换时非常好用,你们可以试试。
1.3 命令记不住怎么办:学会问系统
我发现很多人有“背命令焦虑”,总觉得自己记得不够多。其实没必要,命令是背不完的,关键是会自己查。Linux 系统帮你准备了三套查询工具:man 手册、--help 参数、还有 type/which 这类定位命令。
man 是最全的,比如 man ls 会列出 ls 的所有参数,连退出状态都告诉你。不过 man 手册内容太密,我通常在忘记某个参数时才翻。ls --help 这种快速帮助更轻量,适合日常回忆。另外,type 命令能告诉你一个命令到底是内部命令、外部命令还是别名,这个信息很关键。比如你敲 type ll,如果系统没有定义别名,它会直接报错;如果定义了,你会看到 ll is aliased to 'ls -alF'。而 which 会告诉你一个外部命令的真实路径,比如 which nginx,当系统里有多个同名的二进制时,这个命令能帮你定位到底用的是哪个。
这套“查”的能力,才是 Linux 里最值得养成的基础习惯。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件管理:高频命令的实操细节
2.1 ls、cd、cp、mv:看着简单,坑可不少
ls 应该是每天敲得最多的命令。我习惯用 ls -l 看详细属性,ls -a 看隐藏文件,ls -lh 让人能读的大小。这三个参数组合基本覆盖了 90% 的日常需求。但如果只记住这一层,你还没真正会用 ls。比如 ls -lt 按修改时间排序,排查文件何时被改动特别有用;ls -lS 按大小排序,找出大文件也很方便。
cp 和 mv 的坑主要在两个地方。第一,复制目录必须加 -r 或 -a,cp -a 会保留权限、属主、时间戳,备份配置时更推荐;第二,不管是 cp 还是 mv,目标位置已存在同名文件时会直接覆盖,不会默认询问。我就在生产环境上吃过亏,想把一个文件复制过去,结果把原来的好配置覆盖了,服务直接起不来。后来我养成了习惯,要么先建一个带日期的备份目录,要么用 cp -i 或者 mv -i,让系统在覆盖前问我一下。
还有一个 mv 的底层区别,很多人不知道:同一分区内的 mv,本质只是改目录项,秒完成;跨分区 mv,本质是先复制再删除。所以你把一个大文件从一个目录挪到另一个目录,如果跨分区了,耗时和复制一模一样,磁盘空间在中间过程会被双份占用。理解这一点,你就知道为什么有时候 mv 要等那么久了。
2.2 删除文件夹命令:为什么 rm -rf 成了“高危操作”
删除这个动作,在 Linux 里比 Wind
