ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Unix/Linux基础学习地图:三层结构、FHS目录与权限命令

Unix/Linux基础学习地图:三层结构、FHS目录与权限命令

简介:《Unix/Linux基础讲义.doc》面向操作系统初学者、计算机专业学生及需补齐 Unix/Linux 基础的开发者,帮助建立从操作系统定位到 Unix、Linux 演进脉络的系统认知。讲义围绕操作系统承上启下的作用展开,梳理 Unix 家族从 MULTICS、UNICS 到 BSD 与 System Ⅲ 的发展,并讲解 Linux 从 Minix、Linus 内核到 GNU/POSIX 五大支柱的形成过程,同时涉及内核与发行版、两类用户、开发应用领域等基础知识点。资源包共 1 个 doc 文件,约 13.46MB,适合按章节通读并做概念笔记。当前已有 325 人学习,可作为课程预习、面试复习或实验前的理论铺垫,帮助读者理清 Unix/Linux 的关键术语、历史节点与知识框架。

1. Unix/Linux 这张地图:三层结构,一层都不能跳

Unix/Linux 基础看着知识点零散,其实只有三层:最上面是"操作系统"这层抽象,向下封装硬件、向上提供操作接口;中间是文件系统这棵树,单一根、FHS 目录规范、一切皆文件;最下面是权限和命令这两类"钥匙",决定谁能动、怎么动。只背命令的人,一遇到"这个文件为什么删不掉""man 为什么查不到"就会卡住;把三层的对应关系理顺,命令表反而不用死记。这份讲义的价值恰恰在于按这个顺序,把家族谱系、目录结构、权限位、命令格式串成了一条线。它适合两类读者:正在系统学 Unix/Linux、需要一张完整地图的人,以及考纲里有这门课、想快速查漏补缺的人。

2. 家族谱系与版本号:从 MULTICS 计划到发行版排行

2.1 操作系统的三个目标和一个位置

操作系统要干什么,讲义把它压成了三个词:方便、有效、扩展。方便,是让整个计算机系统好用;有效,是以更有效的方式使用系统资源,CPU 怎么分、内存怎么给、磁盘 I/O 怎么排队,都归它管;扩展,是方便用户有效开发、测试和引进新功能。这三个词乍看像口号,实际是后面所有知识点的判据,命令行为什么比图形界面快,是"有效";为什么要统一目录规范,是"扩展"。

真正要背熟的是它的位置:向下封装硬件,向上提供操作接口。这句话写出来只有一行,展开却是一张分层图。

层次这一层负责什么讲义里对应的知识点
应用程序用户直接操作的部分shell 命令、编辑器、桌面环境
操作接口规定"程序怎么请求系统做事"命令格式、man 手册、POSIX 标准
内核进程、内存、设备与文件系统管理内核版本、稳定版与开发版
硬件CPU、磁盘、打印机、网卡设备文件 /dev、设备独立性

这张表能解释一个高频疑问:为什么同一个命令在有的发行版上参数不一样。命令处在"应用程序"和"操作接口"之间,各发行版打包方式不同,表现自然有差异;而内核才是所有发行版共用的那一层。复习时把这张表默写一遍,比抄十遍命令列表有用。

2.2 Unix 时间线:一条官司拖慢的十年

讲义给的年份很密,直接从头背很容易记串。按"谁做了什么、留下什么后果"来记会稳得多。

1965 年,某研究实验室加入一项与某高校、某公司合作的计划,目标是做一套多使用者、多任务、多层次的 MULTICS 操作系统,后来因为项目太复杂而失败。1969 年,两位核心开发者带着一组人做出了新的多任务系统 UNICS,后来改名 Unix,最初用 B 语言和汇编语言混合编写。1971 年,同两位核心开发者把 C 语言做出来;1973 年用 C 重写了 Unix。1974 年,Unix 第一次出现在实验室之外,随后被研究机构、企业和高校注意到,逐渐流行。

1980 年出现两条最主要的版本线,一条是高校主导的学术分支,一条是商业分支,两者的竞争引发了"Unix 战争",最终导致 Unix 出现各种各样的变种。1982 年,第一个商业版本发布,并不再开源。1992 到 2001 年,版权纠纷打了将近十年,结果是两头都受损:Unix 因为费用昂贵,只局限于大型机应用;学术分支因为版权问题,失去了宝贵的发展时期。

年份事件记忆锚点
1965MULTICS 计划启动,目标多使用者、多任务、多层次太复杂而失败
1969UNICS 诞生,后改名 UnixB 语言 + 汇编
1971 / 1973C 语言诞生 / 用 C 重写 Unix可移植性从这里开始
1974Unix 第一次走出实验室开始流行
1980两条版本线竞争变种爆发
1982第一个商业版本,不再开源授权开始收费
1992—2001版权官司近十年两边都错过窗口期

这段历史最值得记的不是年份本身,而是两个后果:一是变种太多,直接催生了对统一标准的需求,POSIX 和 FHS 都是同一个逻辑的产物;二是授权太贵、官司太长,给了一个免费内核难得的窗口期。把这两句挂在时间线后面,简答题基本不会跑偏。

2.3 Linux 为什么能起来:五个支柱与九条补齐

Minix 是绕不开的前置。某高校的一位教授仿照 4.3BSD 的源码,白手起家写了 12000 行 C 语言,完成后这个系统只是一个教学工具,没有什么实际应用价值。它的意义不在于能用,而在于证明了一个人也能写完一个内核。1990 年,一位开发者决定编写自己的 Minix 内核,初名意为"某某的 Minix 内核",后来改名 Linux,1991 年正式发布,逐渐引起注意。

讲义把 Linux 的诞生和成长归结为五个支柱,这个总结方式很适合直接背。

支柱给了什么缺了会怎样
Unix 操作系统设计范式:多用户、多任务、树形文件系统、一切皆文件没有可参照的整体结构
Minix 操作系统可读的最小实现,一个教学样本缺少起步时的代码基础
GNU 计划工具链:编辑器、BASH shell、GCC、GDB只有内核,没有能用的软件
POSIX 标准统一的应用程序接口规范各分支接口各异,程序不可移植
互联网分发渠道与协作方式改动无法汇总,发展极慢

GNU 是"GNU is Not Unix"的递归缩写,1984 年发起,目标是开发一套免费、类 Unix 的操作系统及其开发工具,编辑系统、BASH shell、GCC、GDB 都是这个计划的产品。1992 年,Linux 与其他 GNU 软件结合,完全自由的操作系统正式诞生,往往被称为 GNU/Linux 或者简称 Linux。POSIX 标准则定义了操作系统应该为应用程序提供的接口标准,它用来统一各分支的编程接口,以提高通用性和可移植性。

补上背景再看九条特点,就不像在背形容词了。

Linux 的特点落到哪个具体机制上
开放性源码公开,改动可被社区甄别后进主线
完全免费不受版权制约,与 Unix 兼容
多用户、多任务同一台机器上多人同时访问、多任务并发
良好的用户界面图形界面是可选组件,命令行照样完整
设备独立性设备映射成 /dev 下的文件,用统一方式访问
丰富的网络功能服务器领域应用最广的一块
可靠的系统安全性多用户下的权限与身份认证体系
良好的可移植性内核可裁剪,能跑在多种 CPU 与硬件平台

对照着看 Unix 的短板就清楚了:Unix 稳定、高效、安全、功能强大,自 20 世纪 70 年代起就运行在许多大中小型机上,但它对运行平台要求很高,只能在工作站或小型机上才能发挥全部功能,价格昂贵,普通用户可望而不可及——这正是 Linux 崛起的机会。Linux 是免费的、不受版权制约的、与 Unix 兼容的操作系统,并在 x86 架构上实现了 Unix 的全部特性。至于"Linux 的两类用户",梳理下来会发现一条清晰的分界:一类把它当生产环境,运维、后端、嵌入式开发,关心的是权限、目录、命令行;另一类把它当桌面系统,关心的是图形界面和办公套件。考纲里的绝大多数考点,服务的是第一类人。

2.4 内核与发行版:两层版本号别混

内核是系统的心脏,是运行程序和管理磁盘、打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序之间的抽象层。内核版本分稳定版和开发版,两者相互关联、相互循环:稳定版具有工业级强度,可以广泛应用和部署,新的稳定版相对旧版只是修正一些 bug 或加入一些新的驱动程序;开发版要试验各种解决方案,所以变化很快。全世界的修改最终都会汇总到官方内核源码站点,由社区核心维护者甄别后决定是否进入主线。

发行版是另一层概念。一个发行版通常包含桌面环境、办公套件、媒体播放器、数据库等应用软件,由 Linux 内核、大量来自 GNU 计划的函数库、基于 X Window 的图形界面组成。X Window 有几个常考特征:它是客户机/服务器结构的,主要由 X Server 和 X Client 两部分组成;它的实现与操作系统内核分开;它不是 Unix/Linux 必需的构成部分,只是一个可选的应用程序组件。换句话说,"没有图形界面能不能跑 Linux"这个问题,答案是能。

讲义记录了两期发行版排行快照,用来记流派比记名次更有用。

名次2015 年2014 年
1Linux MintLinux Mint
2DebianUbuntu
3UbuntuDebian
4openSUSEopenSUSE
5FedoraFedora
6MageiaMageia
7ManjaroArch
8CentOSElementary
9ArchCentOS
10ElementaryZorin

这张表的意义不在于谁第一,而在于让你认出几个大类:以 Debian 为根的一支、以 Arch 为代表的一支、偏企业应用的一支、走独立路线的一支。名次年年变,流派几年才动一次。

应用领域按讲义分四块:服务器是目前应用最多的领域,可提供 Web、FTP、邮件、DNS 等服务,支持服务器集群、虚拟主机;嵌入式 Linux 是把流行内核裁剪修改后跑在嵌入式系统上,支持多种 CPU 和硬件平台,剪裁性好,代表有 Embedix、uCLinux、muLinux;桌面应用这些年进步很大,办公、多媒体、网络功能都能覆盖;此外还有行业办公领域,看重的是安全性上的优势。

3. 文件系统:单一根树、FHS 目录表与"一切皆文件"

3.1 目录、路径与两个特殊目录

目录是一组相关文件的集合,一个目录下面除了文件还可以放其他目录,也就是可以包含子目录。确定文件、目录位置时,DOS 和 Unix/Linux 都采用"路径名 + 文件名"的方式,路径反映的是目录与目录之间的关系。

差别在分隔符:Unix/Linux 用斜杠/,DOS 用反斜杠\。路径分两种。

绝对路径从目录树的树根/开始往下,直到到达文件所经过的所有节点目录,下级目录接在上级目录后面用/隔开,判断方法只有一条——第一个字符一定是/。相对路径指目标目录相对于当前目录的位置,如果目标不在当前目录下,就要用到两个特殊目录:.指向当前目录本身,..指向上一级目录。

梳理下来会发现,..有一个容易忽略的边界:如果当前目录正好是一个挂载点,..停在挂载点上,退不到挂载它的那个上级目录的物理位置。这不是笔试题里的常客,但排查"路径明明写对了却进错目录"时,它是第一个要怀疑的对象。

3.2 多盘符并列 vs 单一根挂载

Windows 平台下打开计算机,看到的是一堆驱动器盘符,每个驱动器都有自己的根目录结构,形成多个树并列的情形。Linux 下看不到盘符,看到的是目录。早期的 UNIX 系统里,各家厂商各自定义文件目录,比较混乱;Linux 面世不久后对文件目录做了标准化,1994 年推出 FHS(Filesystem Hierarchy Standard)文件系统层次结构标准,规定了根目录下各文件夹的名称及作用,统一了命名混乱的局面。

Unix/Linux 同样采用树状结构的文件系统,由目录和目录下的文件一起构成,但不使用驱动器这个概念,而是使用单一的根目录结构,所有分区都挂载到单一的/目录上。挂载这个动作落到命令上就是一条:把设备文件挂到某个目录上,比如把光驱挂到/mnt,之后访问/mnt就等于访问那张光盘。所以/dev下的文件和挂载点是两回事,前者代表设备本身,后者是设备被接进目录树的位置。

一句话记住这层区别:无论哪个发行版,桌面和应用是外衣,文件组织和目录结构才是内心。

3.3 FHS 目录逐条对照

十八个目录硬背很容易串,按功能分组再记就稳了:可执行类、配置类、数据类、设备与内核类、用户类、临时与杂项类。

目录放什么使用与易错点
/根目录,一般只存放目录全系统有且只有一个,所有路径从这里开始
/bin、/usr/bin可执行二进制文件如 ls、tar、mv、cat
/boot启动用到的文件内核文件、引导管理器都在这里
/dev设备文件访问其中某个文件等于访问某个设备
/etc系统配置文件不建议放可执行文件,inittab、fstab、init.d 等都在此
/home普通用户家目录~表示当前用户家目录,~edu表示某用户的家目录
/lib、/usr/lib、/usr/local/lib系统函数库程序运行时要调用的额外库
/lost+found异常时产生的遗失片段文件系统修复后常见,别急着删
/mnt、/media挂载点光盘常挂在 /mnt/cdrom,也可选任意位置挂载
/opt额外安装软件的目录非发行版自带的大型软件常放这里
/proc内存中的系统信息不占磁盘,cpuinfo、interrupts、net/* 都在这
/root管理员的家目录不是/,也不在/home下
/sbin、/usr/sbin、/usr/local/sbin管理员命令普通用户一般只能查看,不能设置和使用
/tmp临时文件任何人都可访问,重要数据不要放
/srv服务启动后访问的数据网页数据常放在 /srv/www 内
/usr应用程序存放目录bin 放程序、share 放共享数据、local 放升级包、share/doc 与 share/man 放文档
/var经常变化的文件日志/var/log、邮件/var/spool/mail、PID 在/var/run

这张表最值得反复看的是三组对照:/bin与/sbin(给谁用的)、/etc与/var(不变的配置与常变的运行时数据)、/proc与/dev(内存里的信息与映射出来的设备)。三组分清,选择题基本不会掉坑。

3.4 一切皆文件与五类文件

Unix/Linux 把数据文件(如音频、图片)、程序文件(如 .c、.h、.o)、设备文件(显示屏、触摸屏、鼠标)、网络文件(socket)等的管理都抽象为文件,用统一的方式方法管理,这就是"一切皆文件"的由来。它带来的直接好处是接口统一:打开、读、写、关闭这一套动作,对普通文件和设备文件都适用。

同时,文件类型仍然要区分,通过类型可以判断一个文件属于可执行文件、文本文件还是数据文件;而且 Unix/Linux 的文件可以没有扩展名,所以看后缀名判断类型在这里是不靠谱的,要用file命令。file后面跟文件名就查指定文件,跟通配符*就查当前目录下所有文件。

常用的文件类型有五种。

类型说明细节
普通文件存放数据、程序等信息长期存放于外存,包括文本、数据、可执行二进制
目录文件目录被当作一种特殊文件构成树型结构;用户进程可读,不能修改
设备文件每个设备映射成一个文件分字符设备(按字符存取)和块设备(按字符块存取)
管道文件多用于进程间通信特殊文件类型,本身不存数据
链接文件类似快捷方式分软链接(符号链接)和硬链接

设备文件都在/dev下,比如行式打印机对应/dev/lp,第一个软盘驱动器对应/dev/fd0。每个目录文件至少包含两个条目:..表示上一级目录,.表示该目录本身,这也解释了为什么ls -a总能看到这两个名字。硬链接与软链接的差别按最系统的整理是:硬链接指向同一份数据,本质是给同一个文件起第二个名字,不能跨文件系统、一般也不给目录建;软链接存的是路径,可以跨文件系统、可以指向目录,原文件删掉后它就成了断链。这一条讲义没有展开,但考卷上很常见。

4. 权限与命令:九位权限位加命令三段式

4.1 三类访问者 × 三种权限

Unix/Linux 是典型的多用户系统,不同用户处于不同地位,对文件和目录有不同的访问权限。为了安全,系统除了对用户权限作严格界定,还在身份认证、访问控制、传输安全、文件读写权限等方面做了周密的控制。每个文件或目录都包含访问权限,这些权限决定了谁能访问、如何访问。

访问者分三类:所有者,也就是创建文件的用户;用户组,系统管理员可以把某一类或某个项目中的用户归为一个组,组内成员共享权限;其他用户,即系统内除前两类之外的所有人。可以拿社交平台的空间权限作类比:这个空间是我的,我想怎么访问就怎么访问;我可以设置允许好友访问,好友就类似用户组;也可以对所有人开放,所有人就类似其他用户。

权限也分三种,但对文件和目录的语义完全不同,这是全篇最该用表格锁死的地方。

权限对文件对目录
读 r读取文件内容浏览目录,能列出里面的名字
写 w新增、修改文件内容删除、移动目录内的文件
执行 x执行该文件进入该目录(cd 进去)

注意:通常 Unix/Linux 只允许文件的属主或超级用户改变文件的读写权限,其他人没这个权力。上表最后一行"对目录的 w 是删除、移动目录内的文件"要单独标出来,它和"能不能改文件内容"完全是两件事,后面的易错点会专门算一次账。

4.2 十位字符串逐位拆开读

ls -l出来的第一列是十位字符串,读法是"1 + 3 + 3 + 3"。

第 1 个字母代表文件类型:d文件夹、-普通文件、c硬件字符设备、b硬件块设备、l软链接文件、s管道文件。这里有个记法差异要留意:讲义把管道文件记作s,而在更常见的标准记法里,管道是p,s表示套接字。两种写法在教材和试卷里都出现过,看到s时不要条件反射,结合上下文判断是管道还是套接字更稳妥。

后 9 个字母分三组,依次是所有者权限、用户组权限、其他用户权限,每组内部固定是 r、w、x 的顺序,没有某位权限就用-占位。三组乘以三种,构成为 9 种权限位组合。

以-rwxr-xr--为例:第一位-是普通文件;第一组rwx是属主可读可写可执行;第二组r-x是组内成员可读可执行、不可写;第三组r--是其他用户只能读。数字表示法把 r 记 4、w 记 2、x 记 1,每组三位相加,于是这个文件就是 754。

# 755 = rwxr-xr-x:属主全权限,组和其他人只读+进入,脚本常这么给 chmod 755 run.sh # 644 = rw-r--r--:属主可读写,其他人只读,配置文件常这么给 chmod 644 config.ini # 符号法:给属主加执行位,同时去掉组和其他人的写位,逗号分隔多组操作 chmod u+x,g-w,o-w run.sh # 改完立刻回读一遍,第一位和九位一起确认 ls -l run.sh

chmod的两套写法要分清:数字法是"直接赋值",三位分别对应 u、g、o,写 755 就是一次性定死;符号法是"增量修改",u、g、o、a选对象,+、-、=选动作,r、w、x选权限,多组之间用逗号隔开。前者适合批量设定,后者适合只动一位,比如只给属主加执行权限而不碰其他位,用符号法更不容易误伤。

4.3 命令格式与 man 手册的八个 section

Linux 命令的格式是command [-options] [parameter1] …。command是命令名,通常是相应功能的英文单词或其缩写;[-options]是选项,用来对命令进行控制,可以省略,方括号本身就代表可选;parameter1 …是传给命令的参数,可以是零个、一个或多个。这三段式是所有命令的公共骨架,看到不认识的命令先按这三段拆,比死记参数快得多。

查帮助有两条路。--help一般是命令自带的帮助信息,并不是所有命令都自带这个选项,所以它靠不住。man是系统提供的手册,包含绝大部分命令和函数的使用说明,手册分成很多章节。

Section内容典型例子
1标准命令ls、cp
2系统调用open、write
3库函数printf、fopen
4设备文件的说明/dev 下各种设备
5文件格式passwd
6游戏和娱乐各类小游戏
7杂项、惯例与协定文件系统、网络协定、ASCII 码、environ 全局变量
8管理员命令ifconfig

用法是man [选项] 命令名。手册页里有一套功能键:空格键显示下一屏,Enter 键一次滚动一行,b回滚一屏,f前滚一屏,q退出,h列出所有功能键,/word搜索 word 字符串。

为什么要指定章节号?因为man是按章节号顺序搜索的。假如命令名和函数名刚好重名,比如 printf 既是命令也可以是库函数,不指定章节号时man printf只查命令的用法,不会查到函数,所以查库函数要写man 3 printf,查标准命令写man 1 ls。实际使用中不指定章节也能查到大部分内容,但一旦查出来的东西"看着不像你要的",第一反应就该是补章节号。

两个使用技巧值得变成肌肉记忆:一是自动补全,敲出命令的前几个字母后按 Tab 键,系统会帮你补全;二是历史命令,按上下键翻看以前执行过的命令,history把执行过的命令列出来。命令数量最少的发行版也有 200 多个,靠背是背不完的,靠"格式 + 手册 + 补全"才是正路。

4.4 ls 参数、通配符与输出重定向

ls是 list 的缩写,功能是列出目录内容,类似 DOS 下的 dir

本文还有配套的精品资源,点击获取

返回列表