ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux基础入门:从内核、发行版到与Windows的底层差异

Linux基础入门:从内核、发行版到与Windows的底层差异 很多人第一次接触 Linux是在工作之后——突然被要求去服务器上查日志、部署个服务或者看到同事在终端里噼里啪啦敲命令屏幕上滚过一堆看不懂的字符。也有不少人是自己主动想学因为网上铺天盖地的“linux常用命令大全”“linux系统安装教程”让人产生一种感觉再不学 Linux饭碗可能就不稳了。但真到打开教程那一刻又被满屏的命令和陌生的目录结构给劝退了。尤其是如果你一直用 Windows刚从“双击安装包”的世界里过来看到 Linux 的黑框框第一反应大概率是这玩意到底凭什么能跟 Windows 比这文章就是“linux基础第一章”要解决的问题——先搞清楚 Linux 是什么、它和 Windows 到底差在哪以及我们从 Windows 切过来时应该抱着什么样的心态和思路。这篇文章不搞空洞的理论全部是我在实际学习和使用过程中总结出来的经验。我最初也是个纯 Windows 用户后来因为要在服务器上搭环境硬着头皮装了虚拟机从连ls和dir都分不清到现在大部分工作都在 Linux 环境下完成。你会发现Linux 和 Windows 的差别绝不只是“一个要敲命令、一个有图形界面”这么简单而是两种完全不同的设计理念和哲学。搞清楚这些底层逻辑后面学命令、配环境才会特别顺搞不清楚你就只会变成“背命令的复读机”换个发行版就懵了。1. 认识 Linux它到底是什么1.1 一个非技术视角下的 Linux 定义我先用最直白的方式解释。你平时用的 Windows是微软一家公司做出来的从内核到桌面、到自带的应用商店整个是一条龙服务像买了一套精装修的房子拎包入住。而Linux 最初只是林纳斯·托瓦兹写的一个内核Kernel本身只负责管理硬件资源比如 CPU、内存、磁盘。控制台界面都没得看更别说桌面了。我们平时说的“装一个 Linux 系统”实际上是把 Linux 内核和一堆其他开源软件组合在一起形成一个完整可用的操作系统。这个组合体学术界叫“Linux 发行版”普通人就直接叫“Linux”。这里有一个很容易搞混的点很多人问“Linux 是什么系统”其实准确地说Linux 是“一个内核 一堆工具 一个包管理器 可选桌面环境”的总称。就好比“汽车”不是一个单一零件而是发动机加上底盘、车身、轮子组合起来的产物。你开的不同品牌的汽车可能发动机是同一家做的但外观、内饰、操控感完全不一样。Linux 发行版也是这个道理Ubuntu、Debian、CentOS 都共用同一个 Linux 内核但桌面、默认软件、命令工具的细节可能各不相同。这才是为什么网上教程总要先问一句“你用的是哪个发行版”。1.2 Linux 的“家族谱系”从内核到发行版对新手来说最困惑的可能是为什么一搜 Linux能搜出 Ubuntu、CentOS、Debian、Fedora、Arch、Kali Linux 一大堆名字到底该学哪个这就是发行版的问题。它们共享同一个内核但是在“外围配件”上做了不同选择。目前主流可以分成几个大的分支分支代表发行版特点常见场景Debian 系Debian、Ubuntu、Deepin/UOS包管理用apt资料多社区活跃新手入门、桌面办公、一般服务器Red Hat 系RHEL、CentOS Stream、Fedora包管理用dnf/yum企业级生态成熟企业服务器、生产环境、商业支持Arch 系Arch、Manjaro滚动更新软件极新自由度极高折腾型玩家、开发者桌面安全专用Kali Linux、Parrot内置大量安全测试工具渗透测试、网络安全学习我第一次选发行版时就犯了选择困难症。后来一个老运维跟我说了一句话我至今觉得受用“不要纠结哪个发行版最好先用用户最多的那个。”因为用户多意味着你搜任何报错都能搜到答案。所以我建议零基础朋友直接选 Ubuntu 或者它的中文优化版 Deepin原因很简单遇到问题先搜索大概率有人踩过同样的坑。至于国内这几年比较常见的“linux国产”发行版虽然在桌面体验上有了很大进步内置办公软件、输入法都比较友好但从底层原理上讲依然属于 Linux 生态命令和服务器一样的逻辑。不要把“国产发行版”想得很神秘它就是换了个皮肤、换了套默认预装软件核心没有变。1.3 Linux 到底用在哪服务器、嵌入式、超级计算机很多人有个误解觉得 Linux 只是程序员和运维用的东西离普通人很远。但实际上你可能每天都在用 Linux 而不自知。你手机里的 Android底层就是 Linux 内核家里路由器、智能电视、机顶盒很多也是基于 Linux你去任何一个网站背后提供网页服务的服务器大概率跑的是 Linux。这里可以给一个直观感受全球绝大多数网页服务器、云主机都跑在 Linux 上。为什么不用 Windows稳定性、授权成本、可定制性都是原因。Windows Server 当然也能跑网站但企业里大数据量、高并发的环境Linux 的占比要高得多。还有一个特别能说明问题的数据全球超级计算机 TOP500 里常年有超过九成跑的是 Linux。因为它源代码开放科研机构可以根据自己的硬件需求定制内核这是闭源的 Windows 给不了的自由度。包括现在热门的容器技术 Docker官方支持最好的就是 Linux在 Windows 上装 Docker底层其实还是起了一个 Linux 虚拟机。所以你会看到很多人一提到服务器、提到后端开发第一反应就是“Linux”。这也就解释了为什么热词里总有“服务器 linux”“docker windows”“虚拟机安装linux”——大家绕来绕去最后都要回到 Linux 上来。2. Linux 与 Windows核心设计理念的差异2.1 开源与闭源两种哲学的分水岭如果你只在应用层面用电脑可能感觉不到“开源”和“闭源”有什么区别。但往深了想这其实是 Linux 和 Windows 最根本的分野。Windows 是微软的商业产品源代码是公司机密普通用户只能等官方发补丁、等官方出新版本出了 bug 只能祈祷快点修你想改个右键菜单都得靠各种“优化工具”去改注册表很多地方依然改不动。Linux 就正好相反你拿到的每一行代码理论上都可以查看、修改、再发布。你机器上的问题如果你有能力可以自己动手修你不修全球几十万开发者也可能已经帮你修过了。这种开放模式带来一个直接后果Linux 的软件生态是“百花齐放”的。同一个需求比如文本编辑器Windows 上你大概率用系统自带记事本或者买一个 UltraEditLinux 上可能有一百个编辑器供你选从命令行的 vim、nano到桌面的 VS Code、Sublime全凭你喜好。许可证方面Windows 是付费授权Linux 基本免费哪怕商业发行版也通常提供免费版本。对预算有限的公司来说省下来的授权费是很可观的一笔钱。我在实际工作里见过不止一个公司因为要压成本从 Windows 服务器迁移到 Linux 服务器。这不仅仅是省了许可费还彻底摆脱了“强制重启”“后台更新”这些 Windows 服务器常见的老毛病。2.2 一切皆文件Linux 的抽象哲学Windows 用户熟悉的是盘符C 盘系统D 盘软件E 盘电影U 盘插进去是 F 盘一切都以“盘符 路径”的方式组织。设备、网络、输入输出在 Windows 里是另一套抽象体系普通用户根本不关心。Linux 则提出了一个极度简洁的理念“一切皆文件”。普通文件是文件目录是文件硬盘、U 盘、鼠标键盘在/dev目录下也是文件网络配置是文件正在运行的进程信息在/proc目录下也是文件。你操作设备就是在读或写某个文件你改配置就是编辑某个文件。这个理念刚接触会觉得绕但用久了你会感受到它恐怖的便利性。举个例子我接手一台新服务器时想看磁盘空间敲一句df -h要看内存总量和剩余敲free -h要查某个进程敲ps aux | grep 进程名——这些命令背后本质都是在读取系统提供的“文件接口”。再比如你给 Linux 系统改 IP 地址很多发行版就是去编辑/etc/network/interfaces或者/etc/netplan/xxx.yaml这个文本文件改完重启网络服务就行。相比 Windows“控制面板—网络—更改适配器—右键属性—双击协议—填写 IP”那一长串点击到底哪个高效用过的人心里都有数。当然这种设计对新手不友好毕竟你让一个从没接触过命令行的用户去“编辑文件来配置网络”他肯定第一反应是“我是谁我在哪”。这一点我们后面会专门说怎么过渡。2.3 多用户与权限模型一台机器多人用Windows 也有多用户但说实话我相信大多数人买了电脑之后始终用着唯一的管理员账户什么都能干软件随便装系统目录也敢删。而且 Windows 还有一个比较烦人的特点就是很多软件为了图省事强制要求“以管理员身份运行”导致用户潜意识里觉得自己应该时刻拥有最高权限。Linux 不是这样的。它在设计之初就是多用户、多任务的分时操作系统权限模型非常严格。Linux 下最高权限用户叫 root相当于 Windows 的系统管理员但它不鼓励你日常用 root 干活。你平时登录的是自己的普通用户只能在自己家目录比如/home/用户名里完全自由活动想安装系统级软件、修改系统配置得在命令前面加sudo提权系统会要求你输密码。这就是为什么你会看到很多教程里写着“sudo apt install 软件包”。这种机制听着繁琐但真的是在保护你。在 Linux 里一个恶意程序哪怕感染了你的普通用户它能干的事也极其有限没法动系统核心而 Windows 用户如果管理员权限跑了个来路不明的 exe基本就等于把家门钥匙给小偷了。这种“最小权限原则”是我后来越用越喜欢 Linux 的原因之一。代价是新手会经常遇到“Permission denied”权限不足这种报错别慌这其实就是 Linux 在按规则办事。3. 普通用户最关心的几个实际区别3.1 软件安装方式软件包管理器 vs exe/msiWindows 装软件常规操作是浏览器搜官网下载 exe 或 msi双击下一步下一步下一步中途还得注意别点到捆绑软件。Linux 则完全是另一套玩法主流发行版都自带一个“软件包管理器”你可以把它理解成一个类似手机应用商店的东西。Ubuntu、Debian 用aptCentOS、Fedora 用dnfArch 用pacman。装软件不是去网上到处找而是敲一条命令系统会从一个配置好的“软件源”repository里自动下载、安装依赖装完就能用。举个例子你想装 Python 环境Ubuntu 上一条命令就搞定sudo apt update sudo apt install python3再比如要装 telnet 这个命令工具sudo apt install telnet整个过程干净利落不需要去搜索引擎翻半天找安装包更不用担心下载到带毒的文件。我第一次从 Windows 转过来时特别不习惯我明明有 exe 安装包为什么不让我双击后来才明白Linux 的软件生态不是“下载一个安装包”的逻辑而是“从官方仓库拉取包并自动解析依赖”的逻辑。软件源里没有的软件怎么办可以添加第三方源比如 PP A、下载 .deb/.rpm 包手动安装或者从源码编译安装。但我不建议新手一上来就走这三条路容易把自己绕晕。前期老老实实用官方源的软件后面熟练了再慢慢扩展。顺便提醒一句网上有一些不明来源的.sh脚本让你复制粘贴执行老老实实装软件没问题但如果脚本内容你都看不懂尽量别乱跑那是给自己挖坑。3.2 文件系统结构树状目录 vs 盘符Windows 把硬盘分区映射成盘符C 盘、D 盘、E 盘每个盘都有独立的根目录。Linux 恰好相反整个系统只有一个根目录/所有的分区、硬盘、U 盘都要挂载mount到根目录下的某个目录才能访问。这种设计让整个文件系统像一棵大树从一个根节点向下延伸。目录结构也有比较统一的规范新手最常打交道的几个目录包括/home用户的家目录所在地类似 Windows 的“用户”文件夹。/etc存放系统配置文件装软件后会在这里加配置。/var存放日志、缓存等经常变化的数据。/tmp临时文件目录重启后可能被清空。/usr系统软件安装的目录类似 Windows 的“Program Files”。路径写法也不一样。Windows 是C:\Users\xxx\Desktop反斜杠Linux 是/home/xxx/Desktop正斜杠。这个区别很小但会让 Windows 用户特别容易在复制路径时出错。我见过有人把 Windows 路径直接粘到 Linux 终端里结果系统提示找不到目录。解决办法很简单在 Linux 里就把所有路径都用正斜杠写。还有一个让 Windows 用户很困惑的点U 盘插进去没有 D 盘 E 盘了而是被系统自动挂载到某个目录下不同发行版挂载点还不一样有的是/media/用户名/设备名有的是/run/media/用户名/设备名。别急着找盘符先执行lsblk命令就能看到所有磁盘和挂载点。3.3 命令行与图形界面谁更“好用”对新手来说Windows 的图形界面显然是“好用”的代名词毕竟鼠标点点点谁都会。Linux 这些年桌面进步也很大GNOME、KDE 这些桌面环境做得已经相当成熟日常浏览网页、看视频、写文档完全没问题不再是“纯黑窗口”的年代。但有一点必须承认在 Linux 世界里命令行依然是效率最高的操作方式。原因很简单图形界面是给人一个个去点的命令行却可以批量处理、组合处理。举个我实际遇到的例子服务器上有个目录里面有 100 个日志文件我需要把所有文件里的“ERROR”行提取出来生成一个新的汇总文件。Windows 下你怎么办一个个打开再复制粘贴想想就头大。Linux 下一行命令grep ERROR /var/log/app/*.log /tmp/all_errors.txt搞定。再比如我要把当前目录下所有.png文件备份到另一个目录并且按日期重命名脚本一写就是几秒钟的事。这种“组合命令完成复杂任务”的能力是图形界面很难替代的。所以我经常跟新手说不要抗拒命令行你早晚得爱上它。第一次用命令成功批量处理一批文件时你会感受到那种“人剑合一”的快感。当然日常用 Linux 桌面的话你完全不需要背太多命令用文件管理器也能点着操作命令行是“进阶武器”不是“入门门槛”。3.4 游戏和办公软件的现实差距说实话如果你买电脑是为了打最新 3A 大作、用 Adobe 全家桶那我不建议你现在就切到 Linux 当主力机。Windows 在游戏和商业软件生态上的优势依然是现实存在的。但如果你想用 Linux 应付日常办公那如今已经基本够用。办公方面WPS 出了 Linux 版LibreOffice 开箱即用企业微信、搜狗输入法也都有 Linux 客户端协作、聊天、码字都没问题。浏览器方面Chrome、Firefox 都有原生版本开发工具更是 Linux 的强项VS Code、JetBrains 全家桶、Docker、Git 都优先支持 Linux。游戏方面Steam 平台搞了一个叫 Proton 的兼容层能让很多 Windows 游戏跑在 Linux 上。实测下来不少热门单机游戏能流畅运行但部分带反作弊系统的联网游戏依然不行。如果你玩的就是那么几个电竞端游那还是老老实实留在 Windows。我的建议是不要试图让 Linux 完全替代 Windows也不用非要二选一。日常办公、开发用 Linux偶尔打游戏切回 Windows这是很多双系统用户的标准姿势。等你以后接触服务器时你会发现那里根本没有桌面环境只有命令行到了那个阶段图形界面好不好看已经不重要了。4. 从 Windows 到 Linux初学者如何顺利起步4.1 不要急着卸载 Windows虚拟机和双系统我见过不少一腔热血的新手看完一篇帖子就格式化硬盘装了 Linux结果第二天就因为网卡驱动、输入法、软件装不上等一系列问题灰溜溜装回了 Windows。所以我的第一条建议特别朴素先别动你现在的 Windows用虚拟机或者 WSL 先体验。虚拟机VMware、VirtualBox相当于在你的 Windows 里开了一个小窗口里面完整跑着一个 Linux随时可以关掉不会影响主系统。我当年就是先在虚拟机里把 Ubuntu 折腾明白了才敢在自己电脑上装双系统。热词里“虚拟机安装linux系统”搜的人特别多说明很多人都在走这条路方向是对的。虚拟机适合体验但如果你的目标是开发更推荐用 WSLWindows Subsystem for Linux也就是 Windows 自带的一个 Linux 子系统功能。你可以直接在 Windows 里打开一个 Linux 终端跑 Linux 命令、装软件、写脚本底层的文件系统都能互通。它比虚拟机轻量太多启动快资源占用小对做开发的人来说够用了。但 WSL 和真正的 Linux 服务器还是有区别比如没有完整的桌面环境网络行为也有差异。如果你是想彻底了解 Linux或者要学习服务器运维虚拟机或者云服务器会更接近真实场景。至于双系统适合已经确定要长期用 Linux 的人但新手不建议一上来就搞因为分区、引导配置、驱动安装都是坑稍有不慎就会把 Windows 的引导搞丢。4.2 发行版选择建议不要从 Kali 开始选发行版这个问题我前面已经说了一半这里再补充几句针对新手的建议。如果你是纯零基础选 Ubuntu 是最稳的。文档多、教程多、论坛回答多报错的时候搜一下基本都有现成答案。Ubuntu 的桌面版界面也友好自带软件中心很多软件图形化就能装。如果你用不惯 Ubuntu 的 GNOME 桌面风格可以选 KubuntuKDE 桌面或者 XubuntuXfce 桌面底子一样界面和资源占用不同。如果你想体验一下国内开源团队做的桌面体验可以试试 Deepin 或者统信 UOS装完中文输入法、微信、办公软件基本都配好了比较省心。我特别不建议新手一上来就装 Kali Linux。Kali 是个安全测试工具集合不是日常学习用的系统它的默认用户是 root很多安全工具非常专业但是不懂原理的话装完之后你只会觉得“这系统怎么这么难用”。网上很多“kali linux安装教程”很火是因为它自带黑客滤镜但第一天就用它学基础纯属自我折磨。还有 Arch 这种滚动更新的发行版适合喜欢折腾、动手能力强的玩家新手用容易因为一个小更新把自己系统干到无法启动。如果你未来目标是做运维或者后端开发也可以直接弄一台云服务器选择 Ubuntu Server 或者 Debian从命令行环境开始这样最接近生产环境。4.3 先学哪些命令最划算高频命令清单很多新手面对“linux常用命令大全”会头大几百条命令哪记得住其实根本不用背那么多日常使用中真正高频的命令一只手数得过来。我把它们按用途分了个类你可以照着这个清单慢慢熟悉文件与目录ls查看目录、cd切换目录、pwd显示当前路径、cp复制、mv移动/重命名、rm删除、cat/less查看文件内容、mkdir创建目录、touch创建空文件。权限相关sudo提权、chmod修改权限、chown修改属主。新手先把这三个记住就行原理后面慢慢理解。查找与过滤find按条件找文件、grep在文本中搜索内容。这俩是组合命令的核心。系统查看uname -a查看内核版本、df -h查看磁盘、free -h查看内存、ps aux查看进程、top实时资源监控。网络排查ping测试连通性、curl/wget下载或请求网址、ss查看端口监听情况。包管理apt install/remove/updateUbuntu/Debian、dnf install/remove/updateCentOS/Fedora。换发行版了命令也跟着换。我建议你学习时不要死记而是实际去用。比如你创建一个目录再用ls看一看把一个文件复制重命名再用cat打开试着写一个简单的 shell 脚本输出hello linux。不用贪多每天练个三五条命令坚持一个月基础就有了。命令是“用”会的不是“背”会的。后面你真的要用什么功能再临时去查“linux 命令大全手册”“linux 常用100个命令”那时候你的搜索引擎会是你最好的老师。5. 我踩过的坑和几条实用的建议5.1 别把 Windows 的习惯带到 Linux 里从我自己的经验来说从 Windows 跳到 Linux最大的障碍不是技术而是习惯。最典型的就是装软件。我一开始老想着去官网找安装包百度搜“某某软件 linux 版下载”然后下载回来一个 .deb 文件双击安装有时候还提示缺依赖装不上。后来我才明白在 Linux 下应该先想“我的软件源里有没有”绝大多数常用软件一条命令就装好了根本不用折腾。有时候你遇到的“Linux 软件装不上”的问题不是软件不行而是你还在用 Windows 的思路在操作。还有一个习惯要改不要动不动就用 root。Windows 用户习惯了一路管理员权限到底但 Linux 里用 root 操作杀鸡用牛刀不说很容易出事。我自己就干过一件蠢事在某台测试服务器上想清理/tmp下的临时文件结果rm -rf /tmp/多打了一个空格变成了rm -rf /tmp/后面跟着一个奇怪的路径幸好没出大事。但“root 加 rm 加 星号”的恐怖故事你随便一搜一堆轻则系统崩溃重则数据全无。所以日常操作尽量用普通用户确实需要管理员权限时再用sudo系统提示你输密码你多看一眼要执行的命令是对自己数据的尊重。5.2 遇到问题时请把报错原文当搜索关键词Linux 有个特点你遇到的绝大多数问题都不是你一个人遇到过的网上一定有答案。但前提是你得会搜。很多人遇到问题喜欢在论坛上问一句“为什么我的 Nginx 启动失败”这种问题信息量太少别人想帮你都无从下手。正确的做法是把报错原文复制到搜索引擎再加上你的系统版本和软件版本。比如你执行某个命令报错/bin/bash^M: bad interpreter直接搜这段英文报错基本立刻就能找到原因——多半是文件从 Windows 弄过来换行符不对用sed -i s/\r$// 文件名处理一下就好。排查问题时也要养成看日志的习惯。Linux 把系统和服务的日志都放在/var/log/目录下查看服务状态可以用systemctl status 服务名看更详细的日志可以用journalctl -u 服务名。如果启动失败日志里通常会有具体的错误原因比你在终端里猜要高效得多。用dmesg还能查看内核日志排查硬件、驱动问题很管用。我再分享一个小技巧当命令执行失败时按上下方向键调出刚才的命令在前面加sudo重试一次如果还不行就把最后的报错句子记下来去搜。别怕报错报错才是 Linux 教你成长的开始。5.3 Linux 学习路线建议基础入门到方向选择学 Linux 不是看一本书就完事它更像一个通往不同方向的起点。第一阶段的目标也很简单能在虚拟机里安装好一个 Linux熟悉常用命令具备最基本的文件操作能力。这时候你会觉得 Linux 不过如此别急这是正常现象。第二阶段要学的是服务管理。Linux 上的 Web 服务、数据库、容器都是一个个服务你要学会用systemctl启停服务、查看日志、配置开机自启。你还要理解用户和权限知道为什么某些文件普通用户看不了。这个过程结束后你基本就有了管理一台服务器的能力。第三阶段就看你的行业方向了。如果你走运维路线Shell 脚本、网络配置、Nginx、Docker 是必修课如果你走开发路线Git、Python、Node.js、Docker 这套是你的核心武器如果你对网络安全感兴趣那“linux提权”这类进阶话题会是你绕不开的面试考点但前提是你得先把基础权限模型吃透连普通用户和 root 都分不清的时候去学提权纯属空中楼阁。换句话说网上那些“linux面试题”看起来很炫酷但基础不牢刷题也是白搭。我见过太多面试者一说命令都会背但实际给一台新服务器要求部署一个服务就完全手足无措。所以别赶进度一个一个知识点实操过去比什么都强。我个人在实际学习过程中的体会是Linux 真正难的不是命令多而是思维方式的转变。Windows 教我们“点几下鼠标就能完成”Linux 则告诉我们“用几行命令就能批量完成”。前者快在单次操作后者快在批量场景。当你习惯了这种“一切皆文件、一切都可控、一切都有日志”的思路之后再回头看 Windows你会觉得很多事情明明可以更简单却被人为做得更复杂了。如果你现在还在犹豫要不要学 Linux我的建议很直接抽个周末装一台虚拟机给自己定一个小目标——比如在 Linux 里搭一个简单的网页服务然后通过浏览器访问到它。这件事一旦做成你就有了继续深入学下去的信心和动力。剩下的问题遇到一个解决一个慢慢地你会发现自己已经离不开 Linux 了。
返回列表