简介《Unix/Linux基础讲义》面向操作系统课程初学者、Linux入门自学者及需要梳理知识框架的读者围绕Unix与Linux的源流、设计思想及基础概念展开帮助解决入门阶段概念零散、发展脉络不清的问题。压缩包内为1个doc文档整体约13.46MB以单份讲义形式组织便于按章节连续阅读或在本地检索标注。讲义从操作系统承上启下的地位谈起串联Unix家族、Linux家族、Minix、GNU计划与POSIX标准并延伸至Linux内核、发行版、X Window及Unix/Linux在服务器和嵌入式等领域的应用。内容兼顾历史背景与知识体系可用于课前预习、课后复盘和面试前的基础梳理也可作为实验课程的概念补充。目前已有325人学习适合希望用较短时间建立Unix/Linux整体认知的读者。1. 先破除一个误会Unix/Linux 不是黑客的专属工具初学的人问我最多的一句话是Unix/Linux 是不是只有电影里那种黑屏幕、满屏绿字、噼里啪啦敲一堆神秘字符的人才用得上我第一次接触时也这么想后来才发现你每天打开的网页、连上的网络、家里路由器里跑的东西背后大多站着它。说白了Unix/Linux 就是一类操作系统跟个人电脑上的图形系统是同一个工作种类只不过它更多守在服务器、嵌入式设备里干活很少露面。这门基础讲义讲的就是它最底下的三块基础文件系统怎么组织、文件权限怎么管理、命令怎么敲。适合完全没碰过命令行、但迟早要跟服务器打交道的新手。2. 为什么建议从命令行开始一行命令省下十次鼠标点击新手装好系统后第一个念头通常是能不能装个桌面用鼠标点能但这样学下去你只是在用一台“长得像 Windows 的机器”真正的 Linux 你一点没碰到。这一章讲清楚为什么入门要往命令行里走以及第一次坐下来怎么不慌地把一条命令敲出去。2.1 图形界面是外衣文件和目录结构才是重点讲义里有句话我特别认同桌面和应用是 Linux 的外衣文件组织、目录结构才是它的内心。图形界面只是内核之上叠的一层应用组件可有可无而目录怎么组织、文件怎么管理是从内核往外一直贯穿的东西。这一点对新手意味着什么呢意味着你花三天学会点鼠标开文件夹换个发行版、换台机器这些经验基本归零但你花三天学会ls、cd、man走到任何一台类 Unix 机器上都认得路。更现实的是你以后接触的服务器绝大多数根本不装图形界面远程连上去屏幕上只有一行提示符等你打字没有开始菜单没有回收站。命令行还有两个悄悄的好处一是快删一千个文件、批量改名、统计行数鼠标点一天命令一行二是可重复你今天敲的一条命令可以原样存进脚本明天自动跑而鼠标操作没法“存下来重放”。所以讲义里那句“不会命令行就不算会 Linux”不是吓唬人是实话。顺便打消一个顾虑命令不需要背。常用命令来来回回就那么几十个真正需要记的是“我想干什么该去查哪个命令”剩下的交给系统自带的说明书。下面几节就教你怎么查。2.2 命令的固定格式三段式看一遍就懂不管多复杂的命令结构基本长这样# 命令名 [选项] [参数] ls -l /home # ↑ ↑ ↑ # 干什么 怎么干 对谁干拆开看三个部分command命令名告诉系统你要干什么通常是英文单词或缩写ls是 listcp是 copymv是 move。看到不认识的命令先猜它的英文原词八九不离十。[-options]选项控制“怎么干”。方括号表示可省略短选项一般是一个减号加一个字母比如-l长选项是两个减号加单词比如--help。很多命令允许把短选项合起来写ls -l -h和ls -lh是一回事。parameter参数告诉命令“对谁干”可以是文件名、目录名、用户名也可以零个、一个或多个多个之间用空格隔开。知道了格式你看到任何一条命令都不至于懵第一段是动作中间减号开头的是修饰剩下的都是对象。新手最容易犯的错是空格乱加或漏加比如ls - l减号后多了空格会被理解成对名为-和l的两个东西操作直接报错。多一个空格、少一个空格在命令行里差别很大。还有一条铁律Linux 区分大小写。ls能跑LS只会告诉你 command not foundNote.txt和note.txt是两个不同的文件。用惯了不区分大小写的系统的人头几天会在这上面栽好几次。2.3 忘了命令怎么办--help 和 man 这两位随身说明书系统里命令几百个没人全记得住但每条命令自带了说明书。第一种查法加--help# 大多数命令都支持 --help快速看一眼用法 ls --help输出会告诉你这个命令支持哪些选项、每个选项干什么。缺点是排版比较随意有的命令也不支持这个选项。第二种查法man功能更专业它是一整套手册# 查看 ls 命令的手册页 man ls # 命令和函数重名时明确指定看第 1 节标准命令 man 1 ls为什么会有man 1这种写法因为手册是分节的第 1 节放普通命令第 2 节放系统调用第 3 节放库函数第 5 节放文件格式第 8 节放管理员命令。有些名字既是命令又是库函数比如printf不指定节号man会按节号顺序找到第一个你可能看到的是命令而不是函数。入门阶段记住一句查命令用法写man 1 命令名最稳。打开手册页后键盘操作是这样的按键作用空格向下翻一屏Enter向下滚一行b往回翻一屏f向前翻一屏/单词在手册里搜索这个词h列出所有快捷键q退出手册新手最常见的卡死场景进了man页面发现怎么打字都没反应以为终端坏了。其实你只是在一个阅读器里按q就出来了。这个“新鲜的程序把键盘抢走了”的感觉后面还会遇到好几次习惯就好。2.4 两个能省一半时间的技巧Tab 补全和 history这两个技巧不写进教程很多人学一个月都不知道知道之后效率立刻不一样。第一个Tab 自动补全。敲命令或路径的前几个字母按一下 Tab系统自动帮你补全如果有多个候选连按两下 Tab会把所有可能的选项列出来。# 想进 /home 下的某个长目录敲前几个字母后按 Tab cd /hoTab它的价值不只是省打字更重要的是帮你确认路径存在。如果按 Tab 毫无反应说明你前面敲的这几个字母拼错了或者目录根本不在那儿等于提前帮你排掉一次报错。第二个历史命令。按方向键上、下可以翻你之前执行过的命令找到后回车直接再跑一次不用重敲。# 把执行过的命令列出来带行号 history配合行号还能快速重跑比如!128就是重跑历史里第 128 条。入门阶段不用记这个先用上下键就够了。养成习惯重跑复杂命令时优先翻历史而不是凭记忆重敲能显著减少“上次明明跑通了这次怎么不行”的玄学。3. 路径这棵树为什么在 Linux 里找不到 C 盘从图形界面过来的人第一个文化冲击往往发生在这里打开文件管理器找不到 C 盘、D 盘只有一堆名字奇怪的文件夹。这一章把“路径”这件事讲透因为后面每一条命令都要跟路径打交道路径搞不清命令永远敲不对。3.1 多个盘并列还是一棵树只有一个根在常见的个人电脑系统里每个驱动器有自己的根目录C 盘一个树、D 盘一个树好几个树并排站着。所以你会自然地想“文件在哪个盘”。Unix/Linux 不这么干。它只有一个根目录写作/所有分区、所有设备、所有目录都挂在这棵树上。你插一个 U 盘不是多出一个 E 盘而是这个 U 盘被“挂载”到树上某个现成的目录里你从那个目录进去看到的就是 U 盘的内容。系统里所有的东西都从/开始往下走。还有个容易踩的小细节路径分隔符的方向。Windows 风格用反斜杠\Unix/Linux 用正斜杠/。别小看这个从别处抄来的命令里如果混了反斜杠Linux 认不出来会当成转义符报错报得莫名其妙。为什么统一成一棵树这么重要因为统一之后路径才有唯一写法。无论谁、在哪台机器上/etc就是配置目录/home就是用户家目录不会出现“我这在 D 盘你那在 E 盘”的沟通成本。早期的类 Unix 系统各家目录命名其实很混乱后来业界推出了一套文件系统层次结构标准把根目录下每个文件夹的名字和作用统一规定下来这套约定沿用至今。3.2 绝对路径和相对路径从根出发还是从脚下出发同一个文件可以有两种描述方式区别只在于“起点”是谁。绝对路径从根目录/开始一路写到底。第一个字符一定是/。# 从根开始依次进入 home、进入用户目录、找到笔记文件 /home/student/notes/day1.txt只要文件没被移动这个写法在任何目录下执行都指向同一个地方所以脚本里、配置里基本都用绝对路径。相对路径从“你现在站的位置”开始算。它不以/开头。# 当前就在 /home/student 下直接写下一层 notes/day1.txt相对路径短但它依赖你当前所在的位置换个目录执行就指到别处去了。新手写脚本时用相对路径然后换了个目录运行就报“文件不存在”八成是这个问题。这里有两个特殊符号必须记牢.表示当前目录本身..表示上一级目录所以cd ..是回上一层./run.sh是“执行当前目录下的 run.sh”。为什么执行脚本要写./因为系统出于安全默认不会在当前目录里找可执行文件你写./等于明确告诉它“就是这个目录里的这个文件”。另外还有个~代表当前用户的家目录。~单独用是“我的家目录”~someone是“某个用户的家目录”。新手最常看到它出现在提示符和cd ~里。一句话总结判断方法看第一个字符是/就是绝对路径是别的包括.、..、~、字母就是相对路径或特殊写法。3.3 新手先记住这七个目录就够开始干活了根目录下一堆文件夹不用一次背完先认这七个日常八成场景够用目录放什么新手什么时候会进去/根目录一切起点下面只放目录基本不在这里操作/bin、/usr/bin常用命令的可执行文件ls、cp都在这儿查某条命令在哪/etc系统和软件的配置文件改配置、看端口设置/home普通用户的家目录一人一间你自己的东西都放这/root管理员的家目录一般不用碰/tmp临时文件谁都能写临时试验别存重要东西/var经常变化的文件日志就在/var/log排错看日志再补几个迟早会遇到/dev放设备文件/mnt和/media是挂载点/proc里的数据其实在内存里、不占磁盘/boot放启动相关文件/usr放应用程序和它的库、文档。有个很实用的判断习惯看到/etc就知道是配置看到/var/log就知道是日志看到/tmp就知道随时会被清。这个直觉建立起来别人给你指个路径你大概能猜出那是什么东西。3.4 一切皆文件鼠标、磁盘、网络连接都是“文件”这一条是 Unix/Linux 设计里最有意思的地方也是新手最不理解的地方。在它眼里普通文档是文件程序是文件目录是文件连你的鼠标、硬盘、屏幕、网络连接都被抽象成文件用同一套方式打开、读取、写入。好处是统一你操作硬盘和操作一个文本文件用的是同一批命令、同一套权限不用为每种设备学一套新东西。这就是“一切皆文件”的含义。文件类型大致分五类普通文件文本、数据、可执行程序、目录文件目录本身也是一种特殊文件、设备文件字符设备和块设备、管道文件用于进程间通信、链接文件类似快捷方式分软链接和硬链接。用file命令可以看一个文件到底是什么类型# 看单个文件的真实类型 file note.txt # 配合通配符一次看当前目录下所有文件的类型 file *注意file看的是文件内容判断出来的真实类型不是靠扩展名猜。这点跟另一套系统的习惯很不一样Linux 里文件可以没有扩展名一个叫run的文件照样可以是可执行程序一个叫data.txt的文件里面装的可能是二进制。所以别靠后缀名认文件用file看。4. 第一个能跑的例子用 ls 把当前目录看个明白前面讲了一堆概念现在动手。这一章只用一个命令ls把它玩出花来因为这一个小命令里藏着选项、参数、通配符、重定向四个核心机制全学会后面换任何命令都是同一套思路。你只需要打开终端跟着一步步敲。4.1 最短的一行先确认自己在哪再看有什么打开终端第一件事不是急着敲命令而是搞清楚“我现在站在哪”。敲# 打印当前所在目录的绝对路径print working directory pwd输出类似/home/student说明你现在站在自己的家目录里。这一步非常关键后面所有相对路径都是相对这个位置算的不知道自己在哪报错你都判断不出原因。然后敲第一个正式命令# 列出当前目录下的内容list ls屏幕上会打出当前目录里的文件和目录名可能是一串文件名也可能是空的。到这一步你已经完成了一次完整的命令行交互输入命令、系统执行、输出结果、回到提示符等你下一步。如果ls输出是空的别慌不代表命令坏了只是这个目录里确实没有可见的东西或者只有隐藏文件。下一节就解决这个疑问。4.2 三个最常用参数-a、-l、-h组合起来威力翻倍单独ls信息量太少加上参数就不一样了。三个参数先记这三个# -a 显示所有文件包括以 . 开头的隐藏文件 ls -a # -l 以长列表方式显示详细信息 ls -l # -h 把文件大小变成人看得懂的单位K、M、G ls -lh # 三个合用等于“详细列表 人性化大小 带隐藏文件” ls -lah-a解决的是新手第一大困惑明明记得存了个配置文件ls就是看不见。因为 Linux 约定以.开头的文件是隐藏文件默认不显示必须加-a。配置文件为了不碍眼很多都以点开头所以这不是文件丢了是它躲起来了。-l的输出信息量最大值得逐列拆开看。跑一下你会看到类似这样的两行ls -l # -rw-r--r-- 1 student student 1024 3月 5 10:20 note.txt # drwxr-xr-x 2 student student 4096 3月 5 10:21 docs从右往左看比较容易理解最右边是文件名docs是目录note.txt是文件。再往左是最后修改时间再往左是大小字节加-h后变成1.0K这种。再往左两列是所有者owner和所属用户组group这台机器上都是student。再往左那个数字是链接数入门阶段可以先忽略。最左边那一串十个字符最重要第 1 个字符是文件类型-普通文件d目录l软链接c字符设备b块设备。所以看到d开头就知道那是目录。后面 9 个字符是权限分成三组每组 3 位依次是所有者、用户组、其他用户的读r、写w、执行x权限。-rw-r--r--的意思是所有者能读能写不能执行同组的人只能读其他人也只能读。这串字符就是下一章避坑的重点这里先混个脸熟知道它跟“谁能动这个文件”有关就够了。-h是纯粹的体验优化让1024变成1.0K让1048576变成1.0M。小文件看不出差别日志文件动辄几百兆的时候没有它你数不动。4.3 通配符一次匹配一批文件不用一个个写文件名一多一个个敲就是自虐。命令行支持通配符用特殊字符代表一批文件名。还是拿ls练手# 找出当前目录下所有以 te 开头的文件 ls te* # 找出所有以 .txt 结尾的文件 ls *.txt # 只找文件名 3 个字符、后缀是 .c 的文件? 代表任意一个字符 ls ?.c # 找 a、b、c 任意一个开头的文件 ls [abc]* # 找 a 到 f 范围内任意字母开头的文件 ls [a-f]* # 如果文件名本身带星号加反斜杠转义当普通字符处理 ls \*a三种通配符的分工通配符含义例子*代表任意多个包括零个字符ls te*匹配test、tea.txt?代表任意一个字符ls ?.c匹配a.c不匹配ab.c[ ]匹配方括号内任意一个字符-表示范围ls [a-f]*匹配 a 到 f 开头的文件有个坑要提前说-只有在方括号里面才表示范围跑到方括号外面就是个普通字符ls a-f是找名字叫a-f的文件不是找范围。另外?和*如果写在方括号里也就失去通配符的作用了变成普通字符。通配符不是ls专属的几乎所有接受文件名的命令都认cp *.txt backup/就是批量复制这个能力后面会反复用到。也正因为它威力大配删除命令的时候要格外小心第 5 章会细说。4.4 把结果存进文件输出重定向原来是这么回事默认情况下命令的结果是打到屏幕上。但很多时候你想把它存下来。这就是重定向# 把 ls 的结果写进 test.txt文件不存在就创建存在就覆盖 ls test.txt # 用两个大于号是追加不会覆盖原内容 ls -l test.txt # 存完用 cat 看一眼里面是什么 cat test.txt和的区别就一句话单个大于号覆盖两个大于号追加。这个区别是新手最容易吃亏的地方本来想往文件末尾加一行手一抖写成前面攒了半天的内容全没了而且没有回收站也没有后悔药。我第一次这么干的时候覆盖的是一份整理了两小时的笔记从那以后写之前都会先停一秒。还有个小知识点屏幕上看到的内容其实分两路正常结果走“标准输出”报错信息走“标准错误”。默认只接走正常结果所以有时候你明明重定向了屏幕上还是冒出一堆报错那是因为报错另走一路。入门阶段先记住这个现象存在别以为是命令没生效。到这儿pwd、ls、cat加上选项、参数、通配符、重定向你已经能完成“进目录看一眼、筛出一批文件、把结果存下来”这一整套动作了。剩下的命令都是这个模子刻出来的。5. 新手最容易翻车的几个地方权限、路径和删除这一章专门拦一下新手最常摔的跟头。每一条都按“你看到什么现象、为什么、怎么解决”来说遇到时直接对号入座。5.1 先把权限那串字母读懂-rw-r--r--上一章ls -l里那十个字符得单独说清楚因为后面五个坑里有三个跟它有关。权限的设计背景很简单这是一个多用户系统很多人同时用一台机器你的文件不能让所有人随便改。所以系统把访问者分成三类所有者创建文件的人、用户组一批被归到一起的人、其他用户剩下所有人。每类人各有一套读、写、执行权限加起来正好九位。三种权限对文件和目录的含义还不太一样这点特别容易混权限对文件对目录r 读能看内容能列出目录里有哪些文件w 写能改内容能在目录里新建、删除、移动文件x 执行能当程序运行能进入这个目录cd进去注意目录的x它决定你“能不能进得去”没有x权限就算有r能看到文件名也进不去、读不了里面的文件。这是个很典型的“现象解释不了其实是权限”的场景。改权限用chmod入门先掌握数字写法就够# 644所有者读写其他人只读普通文件最常用 chmod 644 note.txt # 755所有者读写执行其他人读和执行脚本和目录常用 chmod 755 run.sh数字怎么来的读 r4、写 w2、执行 x1三组各自相加。644就是“42、4、4”即所有者读写、同组只读、其他人只读。这个换算练两次就记住了。5.2 坑一文件明明在却怎么也看不见现象记得自己在这个目录建过一个配置文件ls出来啥也没有以为文件丢了甚至怀疑是不是被系统删了。原因文件名以.开头被当成隐藏文件ls默认不列出来。这不是 bug是约定俗成的规矩配置文件为了不碍眼基本都这么干。解决ls -a或ls -lah就能看到。看到之后还想操作它正常写文件名就行点开头的文件在命令里不需要特殊处理只有通配符*默认匹配不到它们得写.*才行。养成习惯找文件先用ls -lah看一眼全量再下结论。5.3 坑二路径写错命令一直说找不到文件现象敲cat notes/day1.txt返回“No such file or directory”但你确信文件就在那儿。原因八成是相对路径的起点不对。相对路径是相对“当前所在目录”算的你以为自己在/home/student实际可能在/home/student/docs那notes/day1.txt自然找不到。还有一种可能是大小写写错了Day1.txt和day1.txt是两个文件。解决三步走。先pwd确认当前位置再ls确认这一层到底有什么最后拿不准就直接写绝对路径/home/student/notes/day1.txt。另外敲路径时多用 Tab 补全补不出来基本就是你拼错了等于提前发现错误。写脚本时尽量用绝对路径能省掉一大半这类问题。5.4 坑三一遇到权限问题就 chmod 777现象程序跑不起来、文件存不进去搜一下有人说“加个 777 就好了”执行完确实好了于是以后遇到权限问题一律 777。原因777是所有者、同组、其他人全都有读、写、执行权限等于把文件完全敞开。它确实能解决报错但代价是任何能登录这台机器的人都能改这个文件、甚至往里塞东西。这属于“把门拆了当钥匙用”能进门但门也没了。解决按最小需要给权限。普通文件给644脚本和目录给755确实需要同组协作才给到664、775。真遇到权限不够先想清楚“到底是谁需要什么权限”而不是直接拉满。反过来也一样ls -l看到某文件权限是777尤其它还跟配置文件、脚本有关就该警惕了这往往是有人图省事留下的隐患。5.5 坑四把重要东西放在 /tmp或者站错位置就下手现象昨天放在/tmp里的文件今天没了或者在一个以为没用的目录里执行了删除回头发现删错了地方。原因/tmp是临时目录系统会定期清理重启也可能清空任何人都能往里写它天生就不适合放需要留存的东西。至于删错位置多半是没有确认当前目录就执行了相对路径的删除操作。解决需要留存的文件一律放家目录/home下/tmp只用来做临时试验。执行任何有破坏性的命令之前先跑pwd和ls确认“我在哪、我要动的是哪些东西”两个命令加起来不到两秒能省掉很多事后追悔。这个习惯我从踩坑那年开始一直保留到现在几乎是条件反射了。5.6 坑五照着教程复制命令不看参数就回车现象从别处抄来一条命令敲下去结果不是报错就是动了不该动的东西。原因教程里的命令带了一堆参数你只看到“这样能解决问题”没看每个参数在干什么。尤其像rm -rf 目录名这种-r是递归进子目录-f是不问直接干两个一组合删起来是完全不留情面的再比如重定向的是覆盖抄的时候没注意就把原文件清了。解决抄命令前先查一下参数man 1 命令名或者命令名 --help重点看带减号的那几个字母分别是什么意思尤其是-r、-f、-i这类跟删除、覆盖相关的。拿不准的命令先在一个不重要的测试目录里跑一遍看效果确认无误再用到正式地方。这条看着最啰嗦但它是五个坑里唯一能同时防住其他四个的。6. 下一步学什么从会敲命令到能自己查文档把这门讲义学完你已经能看懂目录树、认出隐藏文件、用ls加通配符筛文件、把结果存进文件也能读懂-rw-r--r--那一串字母的含义。接下来怎么走我给一条顺序别跳步。先补三块立刻能用上的一是文件操作四件套cp复制、mv移动改名、rm删除、mkdir建目录配合-i参数先跑熟二是cd加pwd的组合把“我在哪、我要去哪”变成本能三是cat、less、head、tail这几个看文件内容的命令less翻页、tail -f盯日志排错时天天用。再往下按这个表推进比较稳阶段学什么学到什么程度算过关第 1 周路径、cd、ls、cp、mv、rm、mkdir不看教程能在目录树里自由进出、增删文件第 2 周chmod、chown、ls -l读权限看到权限串能说出谁能干什么能按需给 644/755第 3 周grep、find、管道 第 4 周vi或vim的基本操作能打开文件、改几行、保存退出之后进程管理、软件包管理、简单的 shell 脚本能写几行脚本串起日常操作有一件事比按表推进更重要养成先查文档再问人的习惯。man和--help是你手边最快的答案来源看英文手册费劲就先看选项说明那一段看多了自然就顺了。我第一次学的时候图省事遇到问题就到处搜现成命令结果同样的权限问题反复栽了三次直到被一位带我的前辈按住让我把man chmod从头看一遍才发现自己一直在用一个自己根本没理解的数字。从那以后我每次要动权限、动删除、动重定向都强制走一遍“先看参数说明、再在小目录试一次、最后才在正式位置执行”的流程。慢是慢了几十秒但再没丢过东西。希望帮到你。本文还有配套的精品资源点击获取