尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从Unix到Linux:系统分层、发行版与虚拟机排错入门

从Unix到Linux:系统分层、发行版与虚拟机排错入门 1. Unix和Linux之间那层说不清的关系先把一个最常见的困惑挑明Linux不是Unix但几乎所有Unix的经验都能直接搬到Linux上用。这两个词经常被摆在一起说很多人以为Linux是Unix的某个新版本或者以为Unix是Linux的旧名字。实际情况比这复杂一点但也没复杂到需要背年表把三条线索捋顺就够了。1.1 1969年那台没人要的PDP-71969年前后贝尔实验室的研究人员参与过一个叫Multics的分时操作系统项目目标是让一台机器同时服务多个用户还要足够可靠。项目后来因为复杂度和成本问题被撤资参与其中的Ken Thompson和Dennis Ritchie手上没了正式任务就在一台基本闲置的PDP-7上继续折腾自己的想法写出了后来被命名为Unix的东西。名字本身就是个自嘲是Multics多路复用信息与计算系统的反义词。转折点出现在1973年他们用自己发明的C语言把Unix内核整个重写了一遍。这件事的意义今天看怎么强调都不过分——操作系统第一次和高低绑定的汇编解耦了。在这之前换一台硬件就要重写一遍系统重写的成本和风险高到只有大厂扛得住。用C写完之后理论上只要给新机器写一个C编译器整个系统就能搬过去。Unix后来能铺满全世界的各种机型根子就在这一步。当时的授权方式也帮了大忙。Unix源码被以非常低的价格扩散到各大高校伯克利分校拿到之后在上面持续做研究衍生出了BSD这一支ATT自己后续发展出System V这一支。两条分支各有拥趸接口上逐渐产生了差异这也是后来各种兼容性问题的最早源头。1.2 从Minix到1991年那封邮件时间拉到八十年代末荷兰的一位教授Andrew Tanenbaum为了教学写了一个简化版的类Unix系统Minix代码量控制得很小方便学生在课堂上读完。它能在个人电脑上跑但设计上并不打算做成实用的生产系统。1991年赫尔辛基大学的学生Linus Torvalds买了台386想在自己的机器上有个像Unix一样好用的系统Minix不够用于是动手自己写内核。他最初在新闻组里发的帖子语气非常保守大意是只是个人爱好不会做成什么大而专业的东西。后来的事情大家都知道了。这里有个细节值得注意Linux从第一天起就是别人的替代方案不是从零设计的新范式。它刻意去兼容Unix已有的接口和行为这样之前写好的程序改一改甚至不改就能跑。这种向后看的策略比任何技术炫技都更能解释它为什么能活下来。1992年内核切换到GPL授权这个决定把它和整个自由软件生态绑在了一起。GNU项目当时已经写好了编译器、shell、编辑器、核心工具链唯独缺一个能用的内核。两边一拍即合凑成了一个完整可用的系统。严格说我们日常讲的Linux系统绝大多数组成部分来自GNU内核才是Linux。所以有段时间社区坚持叫它GNU/Linux用的人多了也就懒得较真了。1.3 POSIX为什么Unix的程序在Linux上照样跑Linux内核没有一行Unix源码是彻底独立实现的。那它凭什么能跑Unix程序答案是一个叫POSIX的标准。IEEE在上世纪八十年代牵头制定了一套接口规范规定了open、read、write、fork、execve、signal这些系统调用应该长什么样、参数怎么传、返回值含义是什么。只要两个系统都遵守这套规范源码层面的移植就变成了重新编译。POSIX管的是接口不管实现所以两家可以各写各的代码对外表现得一样。这里有个反直觉的事实通过官方认证的Unix系统里包含macOS但不包含Linux。Linux遵守POSIX到相当高的程度但从来没去花钱做那个认证。所以业内习惯把Linux称为类UnixUnix-like。你以后看到这个词就知道说的是行为像Unix、血脉跟Unix无关的系统。理解这层关系之后很多看起来奇怪的现象就有了解释。比如为什么ls的选项在Linux和BSD上不一样为什么有些脚本在macOS上跑得好好的到Linux上就报错——它们确实遵守同一个标准但标准只覆盖了核心部分边角料各写各的。2. 撇开命令行先看清操作系统的分层结构新手学Linux最容易走的一条弯路是把会用命令当成懂系统。结果就是命令背了一堆一遇到权限错误、进程卡死、端口占用这类问题就完全没思路。真正的分水岭在于脑子里有没有一张分层的图。2.1 内核态和用户态这堵墙不是摆设现代CPU在硬件层面就提供了多个特权级x86架构上叫Ring 0到Ring 3。操作系统的内核跑在最高特权级能直接操作内存管理单元、中断控制器、各种硬件寄存器普通程序跑在低特权级能干的事情被严格限制。为什么非要搞这堵墙想象一个没有交通规则的城市任何一辆车都能随便开上人行道。某个程序写内存时手一抖地址算错了如果它有权直接改物理内存整个系统当场就崩了。有了这层隔离一个进程的崩溃被关在自己的盒子里最多自己死掉内核和其他进程不受影响。具体点说用户态程序想访问内存走的是虚拟地址由内核的页表机制映射到物理地址。程序根本拿不到也不该拿到真实物理地址。想读写磁盘、想发网络包、想创建新进程全都得先敲门。这扇门就是系统调用。2.2 系统调用是唯一合法的过墙通道内核对外暴露的接口集合叫系统调用。数量其实不多Linux上大概三百多个常用的可能就几十个。你写的每一行代码不管用什么语言最终都会落到这些调用上。打开文件open/openat读写数据read/write启动新程序forkexecve申请内存brk/mmap等待事件epoll_wait/select有个非常实用的调试手段叫strace能把一个程序执行过程中的所有系统调用按顺序打出来。比如你想知道ls到底做了什么strace -f -e traceopenat,read,write ls输出会告诉你它打开了哪些目录、读了哪些文件、写了几次标准输出。性能排查时看一个进程是不是在疯狂调用futex或者read一眼就能定位。新手建议在虚拟机上随便跑几个命令看看strace的输出比看十篇文章都管用。2.3 Shell只是一个普通进程这是最容易被误解的一点。很多人下意识觉得终端里那个命令行是系统本身实际上bash、zsh、fish这些shell全都是用户态的普通程序权限跟你的文本编辑器没有任何本质区别。它做的事情说起来很简单读一行输入解析成命令和参数然后fork出一个子进程在子进程里execve把目标程序加载进来父进程wait等它结束。管道、重定向、通配符这些看着像系统功能的东西其实都是shell自己解析完再决定怎么拼装的。验证起来很容易ps -p $$ -o pid,ppid,cmd echo $0 chsh -s /bin/zsh # 换登录shell$$是当前shell的进程号。你也可以直接kill掉自己所在的shell看看会发生什么——没有任何系统级后果只是你这一会话结束了。理解了这点就能明白为什么换shell、装oh-my-zsh、改.bashrc这些操作永远不会弄坏系统。它们改的都是用户空间的一个配置文件而已。3. 一切皆文件不是口号是能在目录树里看到的事实一切皆文件这句话被说烂了但很多人背下来之后并不知道它具体体现在哪。其实不用背ls一下/dev和/proc就明白了。3.1 /dev、/proc、/sys 三兄弟/dev下躺着的是设备节点。/dev/sda是一块硬盘/dev/null是个黑洞写进去的东西直接消失/dev/zero能无限吐零字节/dev/random提供随机数。这些名字看着像文件操作起来也是read/write但底下对应的是真实硬件或者内核逻辑。有个经典用法dd if/dev/zero oftest.img bs1M count100这条命令能生成一个100MB的稀疏文件本质上就是把/dev/zero当做一个永远读不完的文件源。磁盘测速、镜像制作都靠它。/proc是一个虚拟文件系统不占磁盘。里面/proc/cpuinfo是CPU信息/proc/meminfo是内存统计/proc/pid/目录下是这个进程的各种状态。更神奇的是有些文件可写改一下就相当于改了内核参数cat /proc/sys/net/ipv4/ip_forward echo 1 /proc/sys/net/ipv4/ip_forward/sys是后来加的比/proc的组织更规整主要暴露设备和驱动信息。比如/sys/class/net/下面每个网络接口一个目录调网卡参数就改这里。3.2 管道和重定向小工具的组合哲学Unix的核心设计思想之一是每个程序只做一件事但做到极致然后用管道把它们串起来。管道这个概念是Doug McIlroy在1973年提出的后来成了操作系统史上影响最深远的设计之一。一个实际例子统计当前目录下各类文件扩展名的数量排行ls -1 | grep -o \.[^.]*$ | sort | uniq -c | sort -rn | head -10拆开看ls -1输出一行一个文件名grep -o只截取扩展名部分sort排序uniq -c统计相邻重复项sort -rn按数字倒序head取前十。**六个小工具每个都简单到能一眼看懂组合起来解决了一个具体问题。**换成写一个程序来干这事代码量大概是这行的十倍。重定向解决的是数据往哪去的问题写法含义 file标准输出覆盖写入文件 file标准输出追加到文件2 file标准错误写入文件 file标准输出和错误一起写入21把错误重定向到输出所在的地方 file从文件读入标准输入21这个写法新手最容易搞错顺序它必须写在后面才生效因为重定向是从左往右处理的。再来一个组合xargs能把标准输入转成命令行参数配合find用非常顺手find /var/log -name *.log -size 100M | xargs -r ls -lh3.3 这套设计的代价一切皆文件不是没有成本。用文本格式传递数据解析开销比二进制协议大得多。/proc里那些文件的读写路径也不算快。路径名长度有限制深目录嵌套容易踩坑。权限模型只有属主、属组、其他人三档权限粒度粗做细粒度授权得靠额外机制。但在绝大多数场景下这些代价换来的是可组合性和可调试性。你能用cat看一个设备的状态能用echo改一个内核开关能在出问题时用最简单的工具拼出排查链路。这种设计在新手期可能感知不到价值等你维护复杂系统的时候就会发现能顺手拼个命令出来定位问题比什么高级框架都实在。4. 发行版多到眼花实际只需要认清这几类打开任何一个下载站Ubuntu、Debian、CentOS、Fedora、Rocky、Alma、Arch、openSUSE、Kali、麒麟、UOS名字一屏放不下。但真正需要理解的结构其实只有三层。4.1 内核、发行版、桌面环境根本不是一回事这三样东西经常被混着说。内核是Linus他们维护的那个项目版本号形如6.8、5.15。发行版是某个组织把内核、GNU工具、包管理器、安装程序、预置软件打包在一起的成品。桌面环境是GNOME、KDE、XFCE这些图形界面。三者独立演进可以自由组合。你用uname -r看到的是内核版本用cat /etc/os-release看到的是发行版信息桌面环境在登录界面或者设置里就能换。理解这层区分之后很多困惑就消解了。为什么同一个软件在不同发行版上安装方式完全不同因为它们用的包管理器不同。为什么同一个发行版的服务器版和桌面版差别那么大因为它们预装的软件集不同内核其实是同一个。4.2 Debian系和RHEL系两条包管理路线主流发行版基本可以归到两大血统里。Debian系包括Debian本身、Ubuntu、Linux Mint、Kali、以及国内的深度/UOS等。包格式是.deb底层工具是dpkg日常用的是apt。配置文件在/etc/apt/sources.list以及sources.list.d/目录下。RHEL系包括Red Hat Enterprise Linux、Fedora、Rocky Linux、AlmaLinux、openSUSE等。包格式是.rpm底层工具是rpm日常用的是dnf老版本是yum。软件源配置在/etc/yum.repos.d/。维度Debian系RHEL系包后缀.deb.rpm高层命令apt installdnf install底层命令dpkg -irpm -ivh搜索包apt searchdnf search查看已装dpkg -lrpm -qa仓库配置/etc/apt/sources.list/etc/yum.repos.d/*.repo更新索引apt updatednf makecache有个坑必须提醒CentOS 7已经在2024年6月30日结束维护CentOS 8更早就转成了CentOS Stream这个滚动上游版本。如果你看的教程还在让你装CentOS 7那套环境已经收不到安全更新了。新手现在起步服务器方向建议Rocky Linux 9或者AlmaLinux 9个人学习用Ubuntu LTS最省心。4.3 特殊用途发行版怎么看除了通用发行版还有一批针对特定场景做的。Kali Linux属于Debian系预装了大量安全测试和数字取证工具做渗透测试学习和CTF的人用得多。它不适合当日常桌面用因为默认权限配置和安全策略都是为了测试场景做的。Arch Linux走滚动更新路线装完之后所有软件都是最新的代价是有时候更新会撞上兼容问题。它的安装过程全手工敲命令很多人把它当成一次系统认知训练。基于它衍生出的Manjaro降低了门槛。至于国内的麒麟、UOS这类大多基于Debian或者深度定制的内核主要面向办公场景预装了中文输入法、办公套件和适配过的驱动。它们和主流发行版在命令行层面没有本质区别学会一套换过去照样能用。**选发行版的核心逻辑不是哪个最强而是遇到问题时能不能搜到答案。**社区活跃度、文档质量、报错信息的搜索结果数量比技术先进性重要得多。从这点看Ubuntu LTS和Rocky Linux是新手最不容易走投无路的两个选择。5. 在虚拟机里装一台自己的Linux参数和踩坑点理论讲完该动手了。学Linux必须有一台能随便折腾的机器能随时回滚、能忍受你把它搞崩这一点虚拟机完胜其他方案。5.1 为什么不建议新手直接上双系统双系统的吸引力在于真实的硬件环境、更好的性能。但新手期真正需要的是低成本的试错空间。装双系统要动分区表一旦操作失误原来那个系统里的数据可能一起丢。引导程序装到哪、UEFI和Legacy模式怎么选、Windows的快速启动和BitLocker要不要关任何一个环节出问题都可能让机器开不了机。折腾驱动是另一个坑无线网卡、显卡、触摸板总有一个会闹脾气。虚拟机把这些风险全部隔离了。装崩了大不了删掉重来快照功能还能让你在动手之前先存一个还原点出问题三十秒回退。缺点是性能有损耗、网络配置多一层抽象但对学命令和概念完全够用。5.2 虚拟机配置的具体数字常用的有三个VMware Workstation、VirtualBox、以及Windows自带的Hyper-V。前两个跨平台操作直观新手推荐。注意Hyper-V和VMware有冲突如果Windows上开过Hyper-V或者WSL2VMware可能启动不了虚拟机需要关掉虚拟机平台和Hyper-V这两个Windows功能或者换个方案。配置参数建议项目建议值说明内存2GB起步4GB舒适装桌面版至少4GBCPU2核4核编译软件时快很多磁盘20GB动态分配别用固定大小浪费空间网络NAT能上网不需要路由器配合固件UEFI新系统默认别选Legacy显存128MB只装命令行版可以更小镜像选择上初学建议Ubuntu Server LTS。它没有图形界面逼着你在命令行里解决问题这正是学习的目的。版本号认准LTS长期支持比如24.04 LTS支持五年。桌面版留到后面想当日常系统用的时候再装。5.3 装完之后立刻要做的几件事安装过程本身不复杂跟着向导走就行。分区那一步新手直接选使用整个磁盘让安装程序自动处理别手动画分区。开机之后有五件事建议立刻做完。**第一换软件源。**默认源在国外下载速度能让人怀疑人生。国内各大云厂商和高校都提供镜像站换成离自己近的那个。Ubuntu上是编辑/etc/apt/sources.listRocky上是替换/etc/yum.repos.d/下的文件内容。第二完整更新一次。sudo apt update sudo apt full-upgrade -y**第三创建一个普通用户并配好sudo权限。**日常不要用root登录。root干的任何操作都没有二次确认一条命令敲错就能把系统搞废而普通用户执行敏感操作会要求输密码相当于多一道缓冲。sudo adduser devuser sudo usermod -aG sudo devuser第四装一批基础工具。vim、curl、wget、net-tools、htop、tree、tmux这几样能覆盖大部分日常操作。Debian系用apt装RHEL系用dnf装。**第五打一个快照。**这是虚拟机最值钱的功能。在系统干净、能正常联网的状态下存一个还原点后面不管折腾成什么样都能一键回到这个状态。养成动手前先快照的习惯学习效率能提高一大截。6. 目录树和第一周真正用得上的命令6.1 目录树里每个目录到底放什么Linux的文件系统是一棵以/为根的树每个目录的用途在标准里有明确定义。记住这些位置比记住命令更有长期价值。/bin和/sbin放最基本的命令。现代发行版里这两个目录已经合并进/usr/bin和/usr/sbin了叫usrmerge你会看到它们是符号链接。/etc所有系统级配置文件。全是大大小小的文本文件改配置基本都在这里。/var经常变化的数据。日志在/var/log缓存、数据库文件、邮件队列都在这。/home普通用户的家目录一个用户一个子目录。/rootroot用户的家目录注意它不在/home下面。/tmp临时文件重启后可能被清空别往这里存重要东西。/opt第三方商业软件安装的位置。/proc、/sys、/dev虚拟文件系统前面讲过。/mnt和/media挂载点。手动挂载一般用前者系统自动挂载U盘用后者。/run运行时数据/var/run其实就是指向它的符号链接这个细节后面排查MySQL报错时会用到。有个判断技巧系统自动生成的东西在/var和/run人写的东西在/etc和/home。备份的时候按这个逻辑挑能省不少事。6.2 按使用场景分类的高频命令不按字母表排按你现在想干什么分。找东西的时候ls -lah # 详细列表含隐藏文件大小人性化 find /etc -name *.conf -mtime -7 # 找7天内改过的配置文件 which python3 # 命令的实际路径 type -a ls # 这个命令是别名、函数还是可执行文件看文件内容的时候less /var/log/syslog # 分页查看大文件必备 tail -f /var/log/nginx/access.log # 实时跟踪调试必备 head -20 file.txt # 看开头 wc -l file.txt # 数行数tail -f这个用法值得单独记一下看日志、盯程序输出全靠它。按CtrlC退出。权限相关的时候chmod 644 file # rw-r--r-- chmod x script.sh # 加执行权限 chown user:group file # 改属主和属组 ls -l # 看权限 umask # 看默认权限掩码权限那串rwxr-xr-x从左到右分别是文件类型、属主权限、属组权限、其他人权限。数字表示法里r4、w2、x1相加就是那一位的数字。这个换算刚开始要默念几遍用熟了就是肌肉记忆。看进程和资源的时候ps aux | grep nginx # 找进程 top # 实时资源占用或者用htop更直观 kill -9 pid # 强杀先试kill默认信号不行再上-9 df -h # 磁盘空间 du -sh /var/* # 各目录占了多少排查磁盘满的利器 lsblk # 块设备树状图网络相关的时候ip addr # 看IP取代了老的ifconfig ip route # 看路由表 ss -tulnp # 看监听端口取代了netstat ping -c 4 example.com # 测连通性 curl -I https://example.com # 看响应头ip和ss这两个命令在精简过的系统里可能没装Debian系要装iproute2。6.3 不会了就查man、--help、tldr 的使用优先级查文档有个推荐顺序。先试命令 --help输出短一眼能扫完覆盖大部分常用选项。不行再上man 命令内容全但很长用/关键词在man里搜n跳下一个匹配q退出。man有章节划分同一名字在不同章节意义完全不同。比如man 1 passwd是改密码的命令man 5 passwd是/etc/passwd这个文件的格式说明。忘了在第几章可以用man -k 关键词或者apropos搜。tldr是个第三方工具提供常用命令的示例集合比man友好得多需要自己装。sudo apt install tldr tldr tar判断该用哪个要快速想起一个选项用--help要搞清一个命令的完整行为用man只想看看常见用法示例用tldr。7. 新手最容易卡住的四类报错逐个拆原因理论都懂了一动手还是会撞墙。下面这四个报错是初学者群里出现频率最高的看懂了能省好几个晚上。7.1 解压出来一堆乱码文件名现象是从Windows传过来的zip包在Linux下解压后文件名变成问号或者奇怪符号。这不是文件内容坏了纯粹是编码不一致。Windows的中文版系统默认用GBK代码页936编码文件名zi p格式把编码信息存在文件头里但很多压缩工具不写明白Linux这边默认按UTF-8去解析两边对不上就乱了。tar.gz和tar.bz2不会有这问题因为tar格式不记录编码文件名就是原始字节流。处理办法有几种unzip -O CP936 archive.zip # 指定编码解压最直接 unzip -O GBK archive.zip # 有些版本要用GBK 7z x archive.zip # 7z的编码探测更聪明已经解压乱了可以用convmv批量改回来convmv -f GBK -t UTF-8 -r --notest ./乱码目录--notest不加的话只预览不动手建议先不加看看结果对不对。提示如果zip包里原本是英文文件名却出现了乱码那可能是压缩时用了特殊字符集先unzip -l archive.zip列一下内容确认。7.2 cannot connect to the docker daemon at unix:///var/run/docker.sock这条报错的意思是docker这个命令行客户端找不到守护进程。客户端和服务端是分开的两个程序客户端只负责发指令真正干活的是后台那个叫dockerd的守护进程。两者之间通过/var/run/docker.sock这个Unix套接字通信。排查按这个顺序走基本能覆盖95%的情况。第一步确认守护进程在不在。systemctl status docker如果是inactive或者failed直接启动sudo systemctl start docker sudo systemctl enable docker # 设开机自启第二步如果服务正常但还是报错查权限。ls -l /var/run/docker.sock套接字默认属主是root属组是docker。当前用户不在docker组里就没权限访问。解决办法sudo usermod -aG docker $USER改完之后必须重新登录才生效因为用户组信息是在登录时加载的。不想退出可以用newgrp docker临时切一下但这个只在当前shell有效。第三步检查DOCKER_HOST环境变量。echo $DOCKER_HOST如果它指向了别的地址客户端就会去连那个地址而不是默认的套接字。清掉这个变量或者改成正确的值。**第四步考虑rootless模式。**现在很多发行版支持不用root跑docker这种情况下套接字路径不在/var/run而在$XDG_RUNTIME_DIR/docker.sock也就是/run/user/uid/docker.sock。顺带提醒一句把用户加进docker组等价于给了这个用户接近root的权限因为能通过docker挂载宿主机的任意目录。个人学习机器上无所谓生产环境要慎重。7.3 mysqld_safe directory /var/run/mysqld 目录不存在完整的报错是mysqld_safe directory /var/run/mysqld for unix socket file dont exists。这个错在手动安装MySQL或者重启机器之后特别常见。根本原因在于**/var/run是指向/run的符号链接而/run是tmpfs也就是内存文件系统重启之后内容全丢**。正常情况下系统启动时会有个机制自动重建这个目录但如果MySQL是手动装的或者那个机制没配好目录就没了MySQL启动时找不到放socket文件的地方。临时救急sudo mkdir -p /var/run/mysqld sudo chown mysql:mysql /var/run/mysqld sudo chmod 755 /var/run/mysqld注意属主和属组必须改成mysql不然还是起不来。这个操作重启后会失效。永久解决有两种。一种是用systemd的tmpfiles机制写一个配置文件让它每次开机自动建# /etc/tmpfiles.d/mysqld.conf d /run/mysqld 0755 mysql mysql -另一种是在MySQL的systemd服务单元里加一行[Service] RuntimeDirectorymysqld RuntimeDirectoryMode0755加了之后systemd会自动管理这个目录的生命周期更干净。还有个更容易被忽略的点/etc/my.cnf或者/etc/mysql/my.cnf里socket这一项配置的路径必须和实际目录一致。有人改了配置文件但没建目录一样报错。7.4 DNS改完不生效/etc/resolv.conf 又被写回去了手动编辑/etc/resolv.conf加了个nameserver重启或者过一会儿发现又变回去了。这是新手改DNS最常见的困惑。问题在于这个文件在很多现代发行版上不是普通文件而是个符号链接或者被某个服务接管了。先确认一下ls -l /etc/resolv.conf如果显示指向/run/systemd/resolve/stub-resolv.conf说明是systemd-resolved在管改这个文件本身没意义得改上游配置sudo vim /etc/systemd/resolved.conf # 找到 DNS 那一行填入你的DNS地址 sudo systemctl restart systemd-resolved如果显示是NetworkManager在管就用nmcli改nmcli connection show sudo nmcli connection modify 连接名 ipv4.dns 8.8.8.8 1.1.1.1 sudo nmcli connection up 连接名Ubuntu 18.04之后用netplan的配置写在/etc/netplan/下的yaml文件里改完执行sudo netplan apply排查顺序记住一条先看ls -l /etc/resolv.conf判断谁在管再顺着往上找配置文件。直接改最终文件在临时试验时能用但迟早会被覆盖回去。用resolvectl status或者systemd-resolve --status能看到当前实际生效的DNS服务器和每个网卡的配置。dig和nslookup可以用来验证解析是否正常dig 8.8.8.8 example.com short带指定DNS服务器能绕过本地配置直接测上游通不通排除问题很有用。这一篇把Unix和Linux的来龙去脉、操作系统的分层结构、文件系统设计哲学、发行版谱系、虚拟机实操和几个典型报错都过了一遍全程没怎么写具体命令的细节。这是有意的因为我个人在带人入门时发现先建立系统是怎么组织的这张地图再往里填命令效率比反过来高得多。命令是查得到的但遇到没见过的问题时能不能自己推出该往哪查靠的是对结构的理解。下一篇会正式进入命令行操作和文件权限这两块那是真正每天都要用的东西。建议在看之前先把虚拟机装起来把文中提到的ls -l /etc、cat /proc/cpuinfo、ps aux这几条命令敲一遍哪怕看不明白输出也没关系先让眼睛熟悉一下长什么样。我自己踩过的最大一个坑就是刚开始只看不练等到真正上手的时候连报错信息该从哪个词开始读都不知道。
返回列表