1. 从一次真实的“翻车”经历说起:为什么我要认真聊聊Linux和Windows
几年前我帮一个朋友的公司做内部工具迁移,他们原本有一套跑在Windows Server上的数据处理脚本,因为授权费用和稳定性问题想换到Linux上。我当时心想,不就是把Python脚本从Windows搬到Linux嘛,能有多难?结果第一晚就翻车了——路径分隔符从反斜杠变成正斜杠、文件编码从GBK变成UTF-8、定时任务从任务计划程序变成crontab、权限模型从用户组继承变成rwx三组九位……一个看似简单的迁移,硬是折腾了三天才跑通。那次之后我才真正意识到,Linux和Windows的差异远不止“界面不一样”这么表面,它们背后是两套完全不同的设计哲学。
这篇文章就是从那几天的踩坑记录整理出来的。如果你刚开始接触Linux,或者一直在Windows环境下工作、想搞清楚Linux到底是怎么回事,又或者你正在做系统选型、准备面试、打算把服务从Windows迁到Linux,那这篇内容应该能帮你省下不少查资料和试错的时间。我会从最基础的概念讲起,把Linux和Windows的核心差异拆开揉碎,再补上实操层面的命令、配置和避坑经验,尽量做到零基础也能看懂,有基础的也能找到可复用的干货。
2. Linux到底是什么:从内核到发行版,一次讲透
2.1 严格来说,Linux只是一个内核
很多人第一次听到“Linux”这个词的时候,会下意识觉得它是一个完整的操作系统,就像Windows那样。但实际上,Linux严格意义上只是一个内核(Kernel)——它是操作系统最底层的核心组件,负责管理CPU调度、内存分配、设备驱动、文件系统、网络协议栈这些最基础的事情。你平时看到的桌面、终端、文件管理器、浏览器,统统不是Linux内核本身,而是跑在内核之上的应用程序。
这个区别为什么重要?因为当你听到别人说“我装了个Linux”,他装的其实是一个发行版(Distribution),而不是单纯的内核。发行版等于Linux内核加上一大堆用户空间工具、包管理器、桌面环境、预装软件,打包成一个可以直接安装使用的完整系统。常见的发行版有Ubuntu、Debian、CentOS、Fedora、Arch Linux、openSUSE等等,国内还有统信UOS、麒麟这类基于Linux内核的国产发行版。
用一个生活化的类比:Linux内核就像是汽车的发动机和底盘,发行版则是整辆车——发动机是同一款,但不同厂商可以造出轿车、SUV、卡车,内饰、配置、价格都不一样。你买的是整车,不是单独的发动机。
2.2 发行版的分类逻辑:为什么会有这么多版本
刚接触Linux的人最容易被发行版的数量搞晕。我当初也是,看到Ubuntu、CentOS、Debian、Fedora、Arch、Gentoo这些名字,完全不知道该怎么选。后来用多了才总结出一个分类逻辑:发行版主要按包管理器和更新策略来分。
包管理器是Linux安装、更新、卸载软件的工具。主流分两大阵营:Debian系用apt(底层是dpkg),Red Hat系用dnf或yum(底层是rpm)。你选了一个发行版,基本就绑定了它的包管理器生态。比如Ubuntu和Debian都属于Debian系,命令通用;CentOS、Fedora、RHEL都属于Red Hat系,命令通用。
更新策略则决定了系统的稳定性和软件新鲜度。像CentOS、Debian Stable这类偏向稳定,软件版本可能比较旧,但经过大量测试,适合服务器;像Fedora、Arch这类偏向激进,软件版本很新,适合开发者和喜欢折腾的人;Ubuntu则介于两者之间,LTS版本偏稳定,普通版本偏新。
下面这张表可以帮你快速判断常见发行版的定位:
| 发行版 | 包管理器 | 更新策略 | 典型场景 |
|---|---|---|---|
| Ubuntu LTS | apt | 稳定,5年支持 | 服务器、开发机、新手入门 |
| Debian Stable | apt | 非常稳定 | 服务器、长期运行环境 |
| CentOS Stream | dnf | 滚动更新 | 企业服务器、Red Hat生态 |
| Fedora | dnf | 激进,半年一版 | 开发者、尝鲜 |
| Arch Linux | pacman | 滚动更新 | 高级用户、定制化 |
| 统信UOS | apt | 稳定 | 国产化替代、政企办公 |
提示:新手入门我一般推荐Ubuntu LTS或者Debian Stable,资料多、社区活跃、遇到问题容易搜到答案。不要一上来就选Arch,除非你享受折腾的过程。
2.3 Linux的设计哲学:一切皆文件
Linux有一个非常核心的设计理念——一切皆文件。这句话听起来有点玄,但理解之后你会发现它极其优雅。在Linux里,普通文件是文件,目录是文件,硬盘是文件,键盘鼠标是文件,网络连接是文件,甚至进程信息也是文件。所有东西都通过文件系统暴露给用户,你可以用同一套读写接口去操作它们。
举个例子,你想看CPU信息,不需要打开什么“设备管理器”,直接读/proc/cpuinfo这个文件就行。你想调整某个内核参数,不需要改注册表,直接往/proc/sys/下面的文件写值就行。这种统一抽象让Linux的自动化运维变得非常方便——脚本可以像操作普通文件一样操作硬件和内核状态。
这个理念也解释了为什么Linux的命令行如此强大。因为所有东西都是文件,所以cat、grep、awk、sed这些文本处理工具可以组合出无穷无尽的玩法。你可以用一条管道命令把日志过滤、统计、排序、格式化一次性搞定,这在Windows的CMD里几乎不可想象。
2.4 Linux的权限模型:rwx三组九位到底怎么看
Linux的权限系统是新手最容易懵的地方之一。你ls -l一下,看到类似-rwxr-xr--这样的字符串,完全不知道什么意思。其实拆开看很简单:第一个字符表示文件类型(-是普通文件,d是目录,l是软链接),后面九个字符分成三组,每组三位,分别对应所有者(Owner)、所属组(Group)、**其他人(Others)**的权限。
每组的三位分别是r(读,read)、w(写,write)、x(执行,execute)。有权限就显示字母,没权限就显示-。所以-rwxr-xr--的意思是:所有者可读可写可执行,所属组可读可执行不可写,其他人只可读。
数字表示法更常用:r=4,w=2,x=1,三组相加。比如755就是rwxr-xr-x,644就是rw-r--r--。改权限用chmod,改所有者用chown,改所属组用chgrp。
# 给脚本添加执行权限 chmod +x deploy.sh # 把文件所有者改成nginx用户 chown nginx:nginx /var/www/html/index.html # 递归修改目录权限 chmod -R 755 /opt/myapp注意:不要随便用
chmod 777。很多人遇到权限问题就777一把梭,这等于把文件对所有人开放读写执行,生产环境这么做是严重的安全隐患。正确的做法是搞清楚谁需要什么权限,按最小权限原则分配。
3. Linux和Windows的核心差异:不只是界面不同
3.1 内核架构差异:宏内核 vs 混合内核
Linux用的是宏内核(Monolithic Kernel)架构,意思是文件系统、设备驱动、网络协议栈、进程调度这些核心功能全部跑在内核空间里。优点是性能高、模块之间调用直接;缺点是内核体积大,一个驱动出问题可能影响整个系统。不过Linux支持内核模块动态加载,可以在运行时插入或移除驱动模块,不需要重启,这在一定程度上弥补了宏内核的灵活性不足。
Windows用的是**混合内核(Hybrid Kernel)**架构,核心功能在内核空间,但部分服务(比如图形子系统、部分驱动)跑在用户空间。这种设计理论上更稳定,某个服务崩溃不容易拖垮整个系统,但内核和用户空间之间的切换会带来一定性能开销。
这个差异对普通用户来说感知不强,但在服务器场景下影响很大。Linux的宏内核在高并发、高吞吐场景下通常表现更好,这也是为什么大多数互联网公司的后端服务器跑的是Linux而不是Windows Server。
3.2 文件系统与路径规则:反斜杠和正斜杠的战争
Windows用反斜杠\作为路径分隔符,比如C:\Users\Admin\Documents;Linux用正斜杠/,比如/home/admin/documents。这个差异看起来很小,但在跨平台开发时经常导致bug。比如你在Windows上写了一个路径拼接的代码,硬编码了\,搬到Linux上就找不到文件了。
更根本的差异在于盘符概念。Windows有C盘、D盘、E盘,每个盘是一个独立的文件系统树;Linux没有盘符,所有存储设备都挂载到根目录/下面的某个目录。比如你的第二块硬盘可以挂载到/data,U盘可以挂载到/mnt/usb。整个系统是一棵统一的目录树。
Linux的目录结构也有约定俗成的规范(FHS,Filesystem Hierarchy Standard):
| 目录 | 用途 |
|---|---|
/ | 根目录,所有目录的起点 |
/bin | 基本命令二进制文件 |
/etc | 配置文件 |
/home | 普通用户的家目录 |
/root | root用户的家目录 |
/var | 可变数据,如日志、缓存 |
/tmp | 临时文件 |
/usr | 用户程序和数据 |
/opt | 第三方软件安装目录 |
/dev | 设备文件 |
/proc | 进程和内核信息 |
/mnt | 临时挂载点 |
文件系统类型也不一样。Windows主流是NTFS和FAT32;Linux支持ext4、XFS、Btrfs、ZFS等多种文件系统。ext4是目前最常用的默认选择,稳定成熟;XFS在大文件和高并发场景下表现更好;Btrfs和ZFS支持快照、压缩、校验等高级功能。
3.3 用户与权限管理:root和Administrator的区别
Windows的最高权限账户是Administrator,Linux是root。但两者的使用方式差别很大。Windows日常使用中,你登录的账户通常就是管理员账户,弹个UAC确认框就能提权;Linux则强烈建议日常用普通用户登录,需要root权限时用sudo临时提权。
这个差异背后的安全理念不同。Windows倾向于让用户方便地完成操作,安全确认作为一道门槛;Linux倾向于默认最小权限,需要时才显式提权。所以在Linux上,你经常看到这样的操作:
# 普通用户执行需要root权限的命令 sudo apt update sudo systemctl restart nginx # 切换到root用户(不推荐长期这样) sudo -i用户和组的管理命令也是Linux面试的高频考点:
# 新建用户 useradd -m -s /bin/bash zhangsan # 设置密码 passwd zhangsan # 把用户加入sudo组 usermod -aG sudo zhangsan # 查看用户信息 id zhangsan # 删除用户及其家目录 userdel -r zhangsan实操心得:新建用户时一定要加
-m参数,否则不会自动创建家目录,用户登录后会发现自己在一个不存在的目录里,很多命令会报错。这个坑我踩过不止一次。
3.4 软件安装方式:apt/dnf vs exe/msi
Windows装软件通常是下载exe或msi安装包,双击运行,一路下一步。Linux则主要通过包管理器从软件仓库安装,一条命令搞定:
# Debian/Ubuntu系 sudo apt install nginx # Red Hat系 sudo dnf install nginx # Arch系 sudo pacman -S nginx包管理器的好处是自动处理依赖关系、统一更新、方便卸载。你不需要去官网找安装包,也不需要担心捆绑软件。坏处是软件仓库里的版本可能不是最新的,需要最新版时得手动添加第三方仓库或者自己编译。
除了包管理器,Linux还有Snap、Flatpak、AppImage等通用打包格式,以及从源码编译安装的方式。源码编译最灵活但最麻烦,一般只在包管理器没有或者需要自定义编译参数时才用。
3.5 命令行与脚本:Bash vs PowerShell
Windows的传统命令行是CMD,功能比较弱;后来推出了PowerShell,功能强大但语法和Linux的Shell差异很大。Linux的主流Shell是Bash,还有Zsh、Fish等替代品。Bash的管道、重定向、通配符、变量、循环、条件判断等特性非常成熟,配合grep、awk、sed、cut、sort、uniq等文本工具,可以写出极其强大的自动化脚本。
举一个实际例子,统计Nginx访问日志里访问量最高的10个IP:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10这条命令拆开看:awk提取第一列(IP),sort排序,uniq -c统计去重后的出现次数,sort -rn按数字倒序排列,head -10取前10条。一条管道搞定,不需要写任何循环。这种组合能力是Linux命令行的精髓。
3.6 桌面环境与服务器场景的取舍
Windows的桌面体验是它的强项,图形界面统一、软件生态丰富、游戏支持好。Linux的桌面环境则多种多样,GNOME、KDE Plasma、XFCE、Cinnamon、MATE各有特色,但整体来说在桌面端的易用性和软件兼容性上还是不如Windows。
不过,Linux的主战场从来不是桌面,而是服务器。全球绝大多数Web服务器、数据库服务器、容器宿主、超级计算机跑的都是Linux。原因很简单:稳定、免费、开源、可定制、资源占用低、命令行远程管理方便。你可以在一个512MB内存的VPS上流畅跑Linux服务器,但同样配置跑Windows Server会很吃力。
4. 从零上手Linux:实操环境搭建与核心命令
4.1 环境准备:虚拟机、WSL还是云服务器
想学Linux,第一步是搞一个能用的环境。常见方案有三种:
方案一:虚拟机安装Linux。用VMware Workstation、VirtualBox或者Hyper-V创建一个虚拟机,加载Linux ISO镜像安装。优点是隔离性好,随便折腾不怕搞坏宿主机;缺点是需要下载镜像、分配资源,安装过程对新手有一定门槛。虚拟机安装Linux时偶尔会遇到蓝屏或者卡死,通常是虚拟化技术没在BIOS里开启,或者内存分配太少。
方案二:WSL(Windows Subsystem for Linux)。如果你主力用Windows,WSL是最方便的选择。在Windows 10/11上开启WSL功能,然后从Microsoft Store安装Ubuntu,几分钟就能得到一个完整的Linux环境,还能和Windows文件系统互通。WSL 2用的是真正的Linux内核,兼容性很好。
# 在PowerShell中以管理员身份运行 wsl --install # 安装完成后重启,然后设置用户名密码方案三:云服务器。买一台最低配的云服务器,安装Ubuntu或Debian,通过SSH远程连接。优点是贴近真实生产环境,可以练习远程管理、网络配置、服务部署;缺点是要花钱,虽然最低配一年也就几十块。
提示:新手我建议先用WSL或虚拟机,等熟悉基本命令后再上云服务器。不要一上来就买高配服务器,浪费钱。
4.2 必会的20个Linux常用命令
Linux命令有几百个,但日常高频使用的也就二三十个。下面这张表按功能分类整理了最核心的命令,建议先把这个表里的命令练熟:
| 类别 | 命令 | 作用 |
|---|---|---|
| 文件操作 | ls | 列出目录内容 |
| 文件操作 | cd | 切换目录 |
| 文件操作 | cp | 复制文件或目录 |
| 文件操作 | mv | 移动或重命名 |
| 文件操作 | rm | 删除文件或目录 |
| 文件操作 | mkdir | 创建目录 |
| 文件操作 | find | 查找文件 |
| 文本处理 | cat | 查看文件内容 |
| 文本处理 | grep | 搜索文本 |
| 文本处理 | awk | 文本处理 |
| 文本处理 | sed | 流编辑器 |
| 文本处理 | head/tail | 查看文件头/尾 |
| 权限管理 | chmod | 修改权限 |
| 权限管理 | chown | 修改所有者 |
| 进程管理 | ps | 查看进程 |
| 进程管理 | top/htop | 实时监控进程 |
| 进程管理 | kill | 终止进程 |
| 网络 | ping | 测试连通性 |
| 网络 | curl | 发送HTTP请求 |
| 网络 | ss/netstat | 查看网络连接 |
| 系统 | df | 查看磁盘空间 |
| 系统 | free | 查看内存使用 |
| 系统 | systemctl | 管理系统服务 |
| 压缩 | tar | 打包解包 |
| 压缩 | unzip | 解压zip文件 |
这里重点说几个新手容易踩坑的命令。
rm -rf是删除命令的“核弹模式”,-r递归删除目录,-f强制不提示。一旦路径写错,比如rm -rf /或者rm -rf /home/*,后果不堪设想。我个人的习惯是,执行rm -rf之前先用ls确认路径,或者用rm -ri交互模式逐个确认。
tar解压时经常遇到乱码问题,尤其是从Windows传过来的zip文件,因为Windows默认用GBK编码,Linux默认用UTF-8。解决办法是解压时指定编码:
# 解压zip并指定GBK编码 unzip -O GBK filename.zip # 或者用iconv转换文件名编码 unzip filename.zip && convmv -f GBK -t UTF-8 -r --notest ./find命令的组合能力很强,但语法容易记混。比如查找7天前的日志文件并删除:
find /var/log -name "*.log" -mtime +7 -delete4.3 包管理与软件安装实战
以Ubuntu为例,包管理的核心命令就几个:
# 更新软件包索引 sudo apt update # 升级已安装的软件包 sudo apt upgrade # 安装软件 sudo apt install nginx # 卸载软件 sudo apt remove nginx # 卸载并清除配置 sudo apt purge nginx # 搜索软件 apt search redis # 查看软件信息 apt show redis # 清理无用包 sudo apt autoremoveRed Hat系的对应命令是dnf:
sudo dnf check-update sudo dnf upgrade sudo dnf install nginx sudo dnf remove nginx dnf search redis实操心得:
apt update和apt upgrade是两回事。update只是刷新软件源索引,告诉你有哪些新版本可用;upgrade才是真正升级软件。新手经常只跑update就以为升级完了,结果装软件时提示版本旧。
4.4 服务管理与开机自启
现代Linux发行版基本都用systemd管理服务。核心命令是systemctl:
# 启动服务 sudo systemctl start nginx # 停止服务 sudo systemctl stop nginx # 重启服务 sudo systemctl restart nginx # 查看服务状态 sudo systemctl status nginx # 设置开机自启 sudo systemctl enable nginx # 取消开机自启 sudo systemctl disable nginx # 查看所有已启动的服务 systemctl list-units --type=service --state=running排查服务启动失败时,systemctl status会显示最近的日志,但更完整的日志要用journalctl:
# 查看某个服务的日志 journalctl -u nginx # 实时跟踪日志 journalctl -u nginx -f # 查看本次启动以来的日志 journalctl -b # 按时间过滤 journalctl --since "2024-01-01" --until "2024-01-02"4.5 网络配置与远程连接
Linux服务器通常通过SSH远程管理。基本连接命令:
ssh username@server_ip -p 22用密钥登录比密码更安全,生成密钥对:
# 生成密钥对 ssh-keygen -t ed25519 -C "your_email@example.com" # 把公钥复制到服务器 ssh-copy-id username@server_ip查看网络配置:
# 查看IP地址 ip addr show # 查看路由表 ip route show # 测试连通性 ping -c 4 google.com # 查看端口监听 ss -tlnp # 查看DNS配置 cat /etc/resolv.conf注意:修改网络配置前一定要确认你有其他方式能连上服务器,比如控制台或者另一条网络路径。我见过有人远程改网卡配置改错了,SSH直接断连,只能找机房重启。
5. 常见问题与排查技巧实录
5.1 权限被拒绝:Permission denied怎么破
这是Linux新手遇到频率最高的问题。执行某个命令或者访问某个文件时提示Permission denied,说明当前用户没有对应权限。排查思路:
第一步,用ls -l看文件权限和所有者。第二步,用id确认当前用户和所属组。第三步,判断是需要sudo提权,还是需要chmod/chown改权限。
但要注意,不是所有Permission denied都能靠sudo解决。比如你挂载了一个NTFS格式的U盘,文件权限可能被文件系统本身限制,sudo也没用,需要重新挂载时指定权限选项。
还有一种情况是SELinux或AppArmor在拦截。CentOS/RHEL默认开启SELinux,有时候权限看起来没问题但就是访问不了。可以临时用setenforce 0关闭SELinux测试,如果问题消失就说明是SELinux策略问题,需要调整策略而不是直接关掉。
5.2 磁盘满了:No space left on device
服务器跑着跑着突然报磁盘满,是运维常见故障。排查步骤:
# 查看各分区使用率 df -h # 查看当前目录下各子目录大小 du -sh * # 查找大于100M的文件 find / -type f -size +100M -exec ls -lh {} \; # 查看被删除但未释放的文件 lsof | grep deleted最常见的磁盘满原因是日志文件太大。/var/log/下面的日志、Docker的容器日志、应用自己的日志,都可能是元凶。清理日志时不要直接rm,因为如果进程还在写这个文件,rm之后磁盘空间不会释放。正确做法是truncate -s 0 filename或者用logrotate管理。
5.3 中文乱码:从Windows传文件到Linux的编码问题
Windows默认用GBK编码,Linux默认用UTF-8,跨平台传文件经常乱码。表现是文件名变成问号或者乱码,文件内容里的中文也显示不正常。
文件名乱码用convmv转换:
convmv -f GBK -t UTF-8 -r --notest /path/to/dir文件内容乱码用iconv转换:
iconv -f GBK -t UTF-8 input.txt -o output.txt预防措施是在Windows上保存文件时就选UTF-8编码,或者用支持跨平台编码的编辑器(如VS Code)统一管理。
5.4 命令找不到:Command not found
执行某个命令提示command not found,通常有三种原因:一是软件没装,用包管理器安装即可;二是软件装了但不在PATH环境变量里,需要用绝对路径或者把路径加入PATH;三是命令拼写错误。
# 查看命令的绝对路径 which nginx type nginx # 查看PATH echo $PATH # 临时添加路径 export PATH=$PATH:/opt/myapp/bin # 永久添加(写入~/.bashrc) echo 'export PATH=$PATH:/opt/myapp/bin' >> ~/.bashrc source ~/.bashrc5.5 常见问题速查表
| 问题现象 | 可能原因 | 排查命令 | 解决方向 |
|---|---|---|---|
| Permission denied | 权限不足 | ls -l、id | sudo或chmod/chown |
| No space left | 磁盘满 | df -h、du -sh * | 清理日志或扩容 |
| 中文乱码 | 编码不一致 | file、locale | convmv/iconv转换 |
| Command not found | 未安装或PATH问题 | which、echo $PATH | 安装或改PATH |
| 服务启动失败 | 配置错误或端口占用 | systemctl status、journalctl | 看日志定位 |
| SSH连不上 | 网络或防火墙 | ping、ss -tlnp | 检查网络和端口 |
| 内存不足 | 进程泄漏或配置不当 | free -h、top | 优化或加内存 |
6. 系统选型建议:什么场景该用Linux,什么场景该用Windows
6.1 服务器场景:Linux几乎是默认答案
如果你要部署Web服务、数据库、容器、大数据集群、AI训练环境,Linux基本是默认选择。Nginx、Apache、MySQL、PostgreSQL、Redis、Docker、Kubernetes、Hadoop、Spark这些基础设施在Linux上的支持和性能都是最好的。而且Linux服务器不需要图形界面,资源占用低,同样的硬件能跑更多服务。
Windows Server也有它的场景,比如.NET Framework应用、SQL Server、Active Directory域控、Exchange邮件服务器。如果你的技术栈深度绑定微软生态,那Windows Server是合理选择。但如果是新项目、开源技术栈,Linux的优势更明显。
6.2 桌面办公场景:Windows仍然占优
桌面办公领域,Windows的软件生态和硬件兼容性还是最强的。Office、Adobe全家桶、各类行业软件、游戏,基本都优先支持Windows。Linux桌面虽然进步很大,LibreOffice、WPS、GIMP、Blender这些替代品也能用,但在专业软件和游戏方面还是有差距。
不过如果你的工作主要是浏览器、终端、编辑器,那Linux桌面完全够用,甚至更高效。很多开发者现在用macOS或者Linux桌面作为主力开发环境,因为命令行体验更好。
6.3 开发环境:WSL让两者不再对立
以前开发者经常纠结用Windows还是Linux,现在WSL基本解决了这个问题。你可以在Windows上享受桌面生态,同时在WSL里获得完整的Linux命令行环境。VS Code的Remote-WSL插件可以无缝编辑WSL里的文件,Docker Desktop也支持WSL 2后端。
# WSL里查看发行版列表 wsl --list --verbose # 进入指定发行版 wsl -d Ubuntu # 关闭WSL wsl --shutdown6.4 国产化替代场景:统信UOS和麒麟
在国产化替代的背景下,统信UOS、麒麟操作系统这些基于Linux内核的国产发行版在政企市场应用越来越多。它们通常基于Debian或Red Hat系深度定制,提供更符合国内使用习惯的桌面环境和应用商店,还支持Windows应用兼容引擎来运行部分Windows软件。
如果你在政企环境工作,可能会接触到这些系统。好消息是,底层还是Linux,你学的命令和技能基本通用;坏消息是,某些定制化的配置和工具可能需要额外学习。
7. 学习路径与面试准备:从零基础到能干活
7.1 分阶段学习路线
我个人的学习路径是这样的,供参考:
第一阶段(1-2周):装一个Ubuntu虚拟机或WSL,把ls、cd、cp、mv、rm、cat、grep、find、chmod、chown这些基本命令练熟,理解目录结构和权限模型。
第二阶段(2-4周):学习包管理、服务管理、网络配置、用户管理,能独立安装和配置Nginx、MySQL、Redis这些常用服务。
第三阶段(1-2月):学习Shell脚本编程,能写自动化部署脚本、日志分析脚本;学习Docker和容器化部署;学习基本的性能监控和故障排查。
第四阶段(持续):深入学习内核参数调优、网络协议、存储管理、安全加固、自动化运维工具(Ansible、Terraform)、监控体系(Prometheus、Grafana)。
7.2 高频面试题整理
Linux运维和开发岗位的面试,高频考点集中在这些方面:
文件系统与权限:rwx权限计算、umask、软链接和硬链接的区别、inode是什么。
进程管理:进程和线程的区别、僵尸进程和孤儿进程、ps和top的用法、信号机制。
网络:TCP三次握手四次挥手、netstat和ss的区别、iptables规则、DNS解析过程。
性能排查:CPU负载高怎么查、内存泄漏怎么定位、磁盘IO瓶颈怎么分析、网络延迟怎么排查。
Shell脚本:变量、循环、条件判断、函数、管道、重定向、文本处理三剑客(grep/awk/sed)。
服务管理:systemd unit文件怎么写、服务依赖关系、日志管理。
7.3 实操心得与避坑建议
最后分享几条我这些年积累的经验:
不要怕命令行。刚开始可能觉得命令又多又难记,但常用的就那几十个,用多了自然就记住了。而且你可以用man、--help、tldr随时查用法。
养成看日志的习惯。Linux出问题,答案基本都在日志里。/var/log/、journalctl、应用自己的日志目录,学会用grep和tail -f快速定位问题。
操作生产环境前先在测试环境验证。尤其是rm、chmod、chown、iptables、systemctl这些命令,在生产环境执行前一定要确认清楚。
做好备份。改配置文件前先cp一份,比如cp nginx.conf nginx.conf.bak。这个习惯能救命。
善用版本控制。把/etc下的配置文件用Git管理起来,改了什么、什么时候改的、改之前是什么样,一目了然。
不要用root跑日常操作。用普通用户加sudo,减少误操作的风险。
学会用screen或tmux。远程执行长时间任务时,如果SSH断了,任务也会中断。用tmux可以让任务在后台继续跑,断线重连后还能恢复会话。
# 安装tmux sudo apt install tmux # 新建会话 tmux new -s deploy # 断线后重新连接 tmux attach -t deploy # 列出所有会话 tmux ls这些经验看起来简单,但每一条背后都有我踩过的坑。Linux的学习曲线确实比Windows陡,但一旦跨过那个门槛,你会发现它的强大和自由是Windows给不了的。