
1. 先把“操作系统到底管什么”这件事拆清楚很多人学Linux第一反应就是“去背命令”这其实是一个误区。命令只是你和操作系统对话的一种方式真正值钱的是你对操作系统本身的认知。我这几年带过不少新人发现一个规律凡是能把“操作系统是干什么的”讲清楚的人学Linux的速度会快非常多而且遇到问题不会慌。那么操作系统到底管什么我用一句话概括操作系统是硬件和应用程序之间的中间人负责把有限的硬件资源调度给无限运行的程序使用。你想想一台电脑的硬件有CPU、内存、硬盘、网卡、显卡、键盘、屏幕这些都是物理设备。如果每个程序都直接去操作这些硬件会出现什么问题假设你同时开着浏览器、编辑器、音乐播放器三个程序都想用CPU、都想往内存里写数据如果没有一个统一的管理者程序之间会互相覆盖数据、抢占设备整个电脑马上就乱套了。操作系统就是这个“大管家”。它管四件核心的事处理机管理CPU调度CPU只有一个或者有限个核但程序可能有几百个进程在跑。系统决定谁先用CPU、用多久、用完切换给谁这套策略就是进程调度。你平时感觉电脑“同时”在做很多事实际上CPU是在极快地轮流服务每个进程快到让你感觉是并行的。内存管理物理内存就那么大但程序们都要往里放数据。操作系统用虚拟内存地址空间把每个进程隔离开让A程序访问不到B程序的数据同时通过换页、交换技术让有限的内存能撑起更多程序运行。文件系统管理硬盘上的数据不是随便堆的操作系统把它组织成文件和目录的树形结构让你能用路径找到数据。它还负责记录文件存哪了、权限是什么、谁可以读谁可以写。设备管理键盘输入、鼠标移动、屏幕显示、网卡收发数据操作系统通过驱动程序统一指挥这些设备。程序不需要知道你用的是哪种显卡、什么型号的网卡它只要调用操作系统给的统一接口就行。当你理解了这四个职责再看Linux里的命令就会有完全不一样的感觉。ps是查进程调度状态free是看内存管理情况ls是在文件系统里查目录ip addr是在问设备管理里的网络接口信息。它们不是孤立的命令而是操作系统四大核心功能的投影。还有一层大家容易忽略的是系统调用和内核态/用户态的概念。这是操作系统的“护城河”设计逻辑。为了保护硬件资源和数据安全操作系统把运行状态分成两个级别普通程序运行在用户态操作系统内核运行在内核态。用户态程序想申请内存、读写文件、发送网络包都必须通过系统调用接口“请求”内核代为执行不能自己直接碰硬件。这个过程你可以理解成去银行办业务。你不能自己闯进金库取钱直接操作硬件而是必须填单子、在柜台让柜员帮你办系统调用柜员有这个权限但也会审核你的单子是否合法内核检查权限和参数。所有程序都得走这个流程谁也不能例外这样系统才安全稳定。这个认知对后面理解Linux特别重要。很多报错信息你看不懂比如Permission denied本质就是内核态拒绝了你这个用户态程序的请求。再比如为什么改一些系统配置要用sudo也跟这个有关系——有些系统调用需要更高的权限级别才被允许执行。2. Linux不是一套系统而是一颗内核现在很多人说“我装了Linux系统”这个说法严格来说是不准确的。Linux本身只是内核不是完整可用的操作系统。但是因为大家日常习惯了这么说它也就成了一个约定俗成的称呼。不过在学习阶段你一定要搞清楚内核和发行版的关系这能避免很多认知混乱。2.1 内核和发行版的组合关系完整的操作系统 内核系统工具/库桌面环境可选应用软件。内核负责跟硬件打交道但它本身不提供命令行工具、不提供安装软件的机制、不提供图形界面。你得在上面再加一层GNU工具集就是ls、cp、grep这些你天天用的命令、包管理器比如apt、yum、dnf、Shell比如bash、zsh组合起来才是一个能用的系统。这就是为什么市面上有各种各样的“Linux”——它们其实都共用同一个Linux内核但组合的工具和配置不同。这些组合在Linux世界里叫发行版英文叫Distribution。主流的有Debian系Ubuntu、Debian自身、Red Hat系CentOS、Rocky Linux、Fedora、Arch系Arch Linux、Manjaro还有国产的麒麟和统信UOS等。你可能会问这么多发行版到底选哪个我的建议很直接新手入门首选Ubuntu LTS版本。原因有三一是用户基数最大遇到问题随便一搜就是答案二是包管理机制相对成熟装软件省心三是LTS长期支持版意味着5年内都有安全更新不会用着用着版本就死了。如果是偏服务器运维方向那可以学CentOS/Rocky Linux因为你将来工作面对的服务器大概率是这一类。2.2 内核态与用户态的切换代价前面提过内核态和用户态这里补充一个重要细节用户态程序一旦发起系统调用CPU就要做一次状态切换从用户态切到内核态等内核处理完再切回来。这个切换是有时间开销的所以高频的系统调用会明显影响性能。这就是为什么很多高性能场景要追求“减少系统调用次数”。比如大文件读写很多人以为设置一个很大的缓冲区就可以了实际上减少的是调用次数攒够一批数据再让内核写一次比你每次写1KB就调用一次内核快得多。理解了这个原理你看很多性能优化手段就有了底层依据。另外用户态能访问的内存空间是受限的内核态才有完整的内存访问权限。这种隔离保证了恶意程序或者有bug的程序没法破坏系统核心数据。就算你的程序崩溃了最多就是那个进程死掉系统本身还是稳的。我对初学者的建议是这些东西不用咬文嚼字但“用户态进程崩溃不会拖垮整个系统”这个结论你得信。这正是Linux在服务器领域稳定可靠的根本原因之一也是为什么很多生产环境跑几年都不需要重启。3. “一切皆文件”与Linux目录的底层逻辑Linux的设计哲学里有一句话非常有名——“一切皆文件”。每个新手刚听到这句话都觉得很抽象我换个方式跟你讲就懂了普通文件是文件目录是文件硬盘设备是文件键盘鼠标是文件甚至网络连接也被抽象成了文件。这意味着什么意味着你只要能操作文件你就能操作这台电脑上的几乎所有东西。举个最直观的例子硬盘在Linux里不是C盘、D盘这种盘符而是挂在某个目录下的设备文件。运行ls /dev你能看到一堆sd开头的名字sda代表第一块硬盘sda1代表它的第一个分区。U盘插进去通常就是sdb之类的。这台机器有几个CPU不用装软件直接看文件系统里的信息cat /proc/cpuinfo就能列出来。我想知道系统已经跑了多久cat /proc/uptime。这些都是以文件的形式暴露给你的系统状态。3.1 目录怎么挂载到一棵树上理解目录关键是理解“挂载”这个词。文件系统是一棵大树根是/所有的目录都从根上长出来。硬盘分区不是天生就在某个目录的而是管理员通过mount命令把某个分区“挂”到某个目录上。这就造成一个新手很容易困惑的现象你的程序装在/usr数据放在/var日志写在/var/log但实际上它们可能不在同一个硬盘分区上。我见过一台MySQL服务器根分区写满了但实际数据库文件挂在/data这个独立的分区上所以服务一点事没有。这说明在生产环境里合理的挂载规划是保命的一道防线。对比一下Windows的思路C盘系统、D盘软件、E盘资料本质上也是一种挂载关系但Linux把它放到了统一的目录树里没有盘符的概念路径就是一切。学习Linux目录结构的时候我推荐你分三组记忆会快很多系统启动级/boot内核和引导文件、/etc配置文件、/usr系统软件、/lib系统库运行数据级/var日志和可变数据、/tmp临时文件、/home用户目录、/rootroot用户家目录设备与虚拟级/dev设备文件、/proc运行时内核信息、/sys内核设备树3.2 绝对路径与相对路径别小看日常操作里路径是最容易出错的点也是最容易养成习惯的点。绝对路径从/开始写比如/var/log/syslog不管你在哪都能直接定位。相对路径从当前位置出发用.表示当前目录用..表示上一级目录。我有个习惯建议给所有人写脚本和配置的时候全部用绝对路径手工敲命令的时候才用相对路径。为什么要这样因为脚本如果是用相对路径写的一旦执行时所在目录不对它操作的可能就是完全错误的文件后果可能很严重——比如一个清理脚本rm -rf ./logs你在/app下执行和你在/下执行结局差太多了。另外Linux的路径分隔符是正斜杠/Windows用的反斜杠\如果你是在Windows上编辑脚本再传到Linux上执行要注意换行符不一样稍后我会在踩坑环节专门讲这个。4. 用户和权限Linux安全模型的起点Windows下你装完系统第一个建的用户就是管理员平时用也基本都是管理员权限什么都能干。Linux不同它从安装那一刻起就把人和权限分得很清楚有超级用户root有普通用户yourname普通用户默认权限非常受限。我第一次用Linux的时候很不习惯装软件要权限写系统文件要权限哪哪都磕绊。但后来我理解了这套设计之后反而觉得它太合理了。你想平时上网、办公这些操作凭什么要让程序拥有修改系统文件的权限万一浏览器被攻破它最多破坏你用户目录下的东西动不了系统核心这就叫最小权限原则。4.1 root、普通用户、sudo三者关系root用户编号0权限最大能改任何文件、杀任何进程、装任何软件。但同时它的破坏力也是一样的一条rm -rf就能把系统清光。所以生产环境有一条铁律没事儿别用root登录除非你明确知道自己在干什么。普通用户权限小只能动自己家目录/home/用户名下的东西和系统允许读的部分。sudo它的本质是用“另一个用户的身份”来执行某条命令默认是用root身份。但注意不是随便一个人都能sudo必须在这个系统里被赋予了sudo权限才行。用户能不能sudo看的是/etc/sudoers这个文件的配置。实际经验是平时用普通用户干活需要系统级操作的时候用sudo加在命令前面。比如sudo apt update就这一下用的是root权限其余时间你还是普通用户。这种“临时提权”的方式比一直拿root身份干活安全得多。4.2 权限位和chmod、chownLinux文件权限的基础是三个角色所有者u、所属组g、其他人o每个角色有三个权限读r4、写w2、执行x1。你用ls -l看一个文件前面那串-rw-r--r--第一个字符是文件类型-普通文件d目录l软链接后面9个字符每3个一组分别对应u/g/o。这里的数字记法非常实用因为4、2、1相加能表示所有组合比如7表示rwx全开5表示r-x4表示r--。所以我常用chmod 750 file来表示“所有者完全控制、组成员可读可执行、其他人啥都不能干”。这是很典型的生产环境权限配置。目录的权限要额外注意文件需要读权限才能看内容目录需要执行权限才能进入cd进去并且目录的写权限直接决定你能不能在里面新建或删除文件。这就是为什么很多人明明能打开目录却没法创建文件——缺了写权限。还有chown用来改文件和目录的所属关系比如把web目录从root改给www-data用户否则web服务可能没有写入权限。关于权限再补一个重要提醒看权限别只看文件本身的还要看它的父目录。Linux的权限检查是从根到目标路径一层层验证的中间任何一层目录没有执行权限你都没法穿过它访问深处的内容。网上有个很容易误导新手的操作本来碰到“Permission denied”有人建议“直接chmod 777”。这是下下策。777意味着任何人可读可写可执行等于给攻击者留了一扇大门。正确做法是先搞清楚这个文件该归谁管然后按最小需要授权比如目录就750配置文件就640可执行脚本才755。5. 高频命令地图文件、进程、网络的日常操作命令不需要一次性背很多背多了也记不住。我认为更高效的方式是按使用场景组织命令地图知道某个场景下该用什么命令用到时再查参数细节。下面这三张图是我平时用得最频繁的也是面试里出现率最高的。5.1 文件操作类ls、cd、cp、mv、rm、find这些命令本身不难难在参数是否用得对。ls -l看详细信息和权限ls -a看隐藏文件隐藏文件就是文件名以.开头的文件我惯用的组合是ls -lah一条命令同时看到大小、权限、修改时间还能把大小自动换算成人能看懂的K/M/G单位。find是查找文件的利器很多人对这个命令有点怵其实核心用法就几种find /var/log -name *.log按文件名找*是通配符find /home -type d只看目录find /tmp -size 100M找大文件排查磁盘占用时非常好用find /etc -mtime -3将近3天内修改过的文件另外一个好用但容易被忽略的是du和df前者看目录占了多少空间后者看磁盘分区是不是满了。服务器出故障很多情况就是磁盘满了所以在排查问题的时候我一般先跑一下df -h确认根目录和几个关键挂载点有没有写满。5.2 进程与系统状态ps、top、free、unameps -ef是查看所有进程的经典格式每一行是一个进程关键列是PID进程号、PPID父进程号、CPU占用、内存占用、启动命令。top则是实时刷新的仪表盘相当于Windows任务管理器按P按CPU排序按M按内存排序看到有个进程CPU一直飙100%那就是它不对劲了。free -h看内存使用量注意看的是available那一列它才是真正“还有多少内存可用”的数字。因为Linux天生会用空闲内存做缓存used看起来很高不代表真的紧张这一点要特别注意不然容易把缓存占用误判成内存泄漏。查看内核版本用uname -a查看系统版本发行版信息用cat /etc/os-release。这两条在下载软件或者搜问题解决方案时非常关键——你告诉别人你是什么系统什么内核版本别人才能给你对得上的答案。5.3 网络排查三件套ping、curl、netstat网络排查是运维场景最常碰到的我通常按下面这个顺序来ping 8.8.8.8先确认网络通不通注意ping走的是ICMP协议不通不代表应用间不能通信通也不代表所有服务都正常curl -v http://你的服务地址能直接看到HTTP请求和响应的全过程包括DNS解析、TCP握手、TLS握手、响应头、进程响应体。-v是详细模式这个参数非常重要排错基本都要加netstat -tlnp看本机在监听哪些端口哪个进程在监听。如果这个命令显示端口被占用了通常原因是两个进程抢同一个端口处理办法是找到占用进程然后决定是停掉还是换端口这三条命令能解决大部分网络问题。还有个小技巧curl -I只看响应头不拉取响应体用来快速判断一个HTTP服务是否存活特别高效比curl整页拉取省流量、结果更直观。6. 初学的Linux环境虚拟机、WSL还是云主机“知道了Linux是什么接下来在哪练手”这是我被问得最多的问题。方案有很多但每个方案的适用场景不一样。我先给一张对比表然后说说我的建议逻辑方案上手难度能体验的系统级操作适用人群虚拟机VMware/VirtualBox中等完整想系统学习的人WSLWindows下的Linux子系统低不完整只跑命令/写脚本云服务器ECS低完整有公网IP需求的人物理机装双系统高完整准备长期深入使用的人建议的路径是这样的如果你是零基础别纠结直接装虚拟机。给虚拟机分2个CPU核、4GB内存、20GB磁盘就足够了安装Ubuntu Server或者Ubuntu Desktop都行。Desktop带图形界面新手心理上更有安全感Server没有桌面逼着你在终端里敲命令进步反而更快。我的倾向是至少前两周用Server版本等基本命令熟了再考虑要不要装桌面。WSL用起来确实方便打开就是Linux命令行不用装虚拟机。但它有个限制它跟你Windows共享内核机制不能完整模拟真实的Linux系统调用行为一些系统级实验比如自己编译内核、直接操作设备文件做不了。它适合的场景是我要在Windows上写代码但需要用Linux环境来跑测试。如果你是想正经学Linux运维WSL偏弱了。云服务器的话学生有免费或者很便宜的套餐对于需要公网访问的场景比如搭个个人网站给朋友看很合适。而且用云服务器你会被迫学会SSH远程登录、密钥配置、防火墙规则这些实战技能这些是虚拟机里接触不到的真实场景。我的建议是虚拟机和云主机可以配合着用本地用虚拟机练基本功买一台便宜的云服务器练远程运维。不管你选哪条路有一件事从第一天就要养成习惯及时做快照。虚拟机软件里安装完系统、做完基本配置那一刻先打一个快照。后面你把系统折腾坏了一句话就能恢复到刚装好的状态。这个习惯能让你放手大胆地试错学习速度会快很多。7. 初学期必踩的坑我的排查笔记最后分享几个我在教新手和带团队过程中反复碰到的坑。这些错误几乎每个Linux新手都会经历一次提前知道了能帮你省掉不少焦虑时间。7.1 在Linux上编辑了Windows换行符的文件从Windows上传一份脚本到Linux服务器执行时报错bad interpreter: /bin/bash^M。问题根源是换行符不同Windows用\r\nLinux用\n。那个^M就是\r在这个文件里留下的痕迹。解决办法是用sed -i s/\r$// 你的脚本.sh把行尾的\r删掉或者用dos2unix工具一键转换。更根本的预防方法是写脚本别用Windows自带的记事本用VS Code之类的编辑器并且把底部“CRLF”切换成“LF”。7.2 Linux删了文件空间却一直没释放在WSL或者云服务器上删了一个很大的日志文件df -h一看空间还是满的。原因是有个进程依然在占用这个被删除的文件文件在硬盘上的数据块并没有真正释放只有等进程关掉对应文件句柄后空间才回来。排查方法是用lsof | grep deleted找到那个还在占用已删除文件的进程然后重启或者重载这个进程空间就会释放。这个坑在日志文件管理时尤其常见——rm删了日志但服务还开着原来的文件描述符所以空间一直不降。7.3 解压文件出现乱码从Windows压缩包传到Linux解压后文件名变成一堆乱码。原因是压缩包归档时用的编码是GBK/GB18030而Linux默认按UTF-8解码文件名。解决办法是用unzip -O GBK 文件名.zip指定解压时的编码或者先在Windows上用7-Zip重新压缩为UTF-8再传。7.4 权限被拒后第一反应是chmod 777前面说过了这里再强调一次。遇到Permission denied排查顺序应该是文件/目录的属主是谁ls -l当前登录的用户是谁id我需不需要访问如果不需要就别管如果需要判断是应该改属主、改权限还是用sudo改权限时按最小化原则目录750、文件640、可执行文件755养成这个排查习惯之后你不仅知道了怎么解决问题还能解释清楚为什么会出现这个问题很多面试题考权限本质就是考这个逻辑。7.5 修改配置文件后不知道重启服务改完/etc/ssh/sshd_config之类的配置以为立刻生效了结果连接直接断了或者配置没反应。在Windows里改完配置很多软件会自动重新读取但Linux的服务进程默认不会自动感知配置文件变更大多数服务需要手动重启或重新加载。正确的做法是改完配置后先运行类似sshd -t的语法检查命令确认没有写错然后再systemctl reload sshd。这样即使配置写错了也不会导致服务直接挂掉导致你被拒之门外。这是个很有用的安全操作习惯。这些坑单看都不大但综合起来就是初学Linux最容易消耗信心的地方。我的理念是Linux学习没有捷径但一定有更高效的路。先把操作系统的四大职责理解透再理解Linux内外之分、目录挂载、权限模型然后带着问题去用命令学习曲线会平缓非常多。命令忘了随时能查但是底层的思维框架建立起来以后你能自己推导出绝大部分问题的答案。