总体目录结构
Linux 的目录结构一般遵循 FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)。下面是 FHS 中主要的目录结构:
系统核心目录
/
根目录,包含整个文件系统的所有文件和子目录。
/bin
/bin目录是/binary的缩写,它包含众多普通用户可用的命令。而命令的本质就是可执行程序,即二进制bin文件
/boot
/boot目录存放引导加载器(bootstrap loader)使用的文件,如lilo,核心映像也经常放在这里,而不是放在根目录中。
/boot
目录通常包含了以下内容:
Bootloader(引导加载程序):/boot
目录包含了引导加载程序(例如GRUB或LILO)所需的文件,包括内核镜像、引导加载程序配置文件(grub.conf
或menu.lst
)、引导加载程序可执行文件(例如grub
或grub2
文件)和模块(例如文件系统模块)等。在系统启动时,引导加载程序会从此目录读取这些文件并加载内核镜像,启动Linux系统。
内核镜像文件:/boot
目录包含了操作系统内核文件。这些文件通常被命名为vmlinuz
或bzImage
。内核文件是Linux操作系统中最重要的组件之一,负责系统的启动、设备驱动程序、性能优化和安全控制等。
在安装Linux系统时,/boot
目录通常会被创建并分配一定的空间。如果你使用引导加载程序来引导系统,你就需要了解并管理/boot
目录,确保其中的文件完好和充足,以便系统可正常启动。
/dev
/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。 比如,用户可以通过访问/dev/mouse来访问鼠标的输入,就像访问其他文件一样。
包含了系统中所有的设备文件,包括硬件设备、输入输出设备、网络设备、虚拟设备等。在Linux中,所有的设备文件都被认为是文件,你可以像读/写普通文件一样读/写设备文件。设备文件通常是Linux下应用程序与硬件之间的桥梁,应用程序通过读写设备文件,实现与硬件的交互。
/dev
目录中的设备文件可以分为以下两类:
- 块设备文件:块设备是指能够按照固定长度的块进行读写的设备,如硬盘、U盘、SSD等。块设备通常可以通过文件系统进行格式化和挂载。 在
/dev
目录下,块设备文件名通常以sd
(如sda
、sdb
)、hd
(如hda
、hdb
)等前缀为标识,而后面的数字表示不同的设备序号。- 字符设备文件:字符设备是指以字符为单位进行读写的设备,如鼠标、键盘、串口等。字符设备通常不能被格式化和挂载,也没有文件系统。 在
/dev
目录下,字符设备文件名通常以tty
(如tty1
、tty2
)、sda
(如sda1
、sda2
)等前缀为标识,而后面的数字表示不同的设备序号。 需要注意的是,/dev
目录中的设备文件并不是真正的硬件设备文件,而是 Linux 内核通过驱动程序模拟出来的虚拟文件。实际上这些设备文件只是一些接口,实现了将硬件设备暴露给用户空间程序的目的。
/etc
/etc目录是/etcetera 的缩写。
存储了各种系统级别的配置文件,是Linux系统中所有的常用应用程序和服务所需的重要配置文件的存储位置。该目录在系统级别和全局范围内定义了很多关键性的值。
在/etc
目录中,包括了许多文件和子目录,这些文件和子目录是按照应用程序和服务的名称进行组织的。例如,以下是一些在/etc
目录下的子目录及相关的配置文件:
/etc/network
:存储网络相关的设置,包括IP地址、网关、DNS、DHCP等。/etc/passwd
:存储系统中所有的用户账户信息,包括用户名、用户ID、主目录等等。/etc/group
:存储系统中的所有用户组信息,包括组名、组ID、组成员等等。/etc/fstab
:存储系统中所有文件系统的挂载点信息和属性,包括磁盘分区、NFS、CD-ROM等。/etc/sudoers
:存储sudo
命令的相关配置信息,包括哪些用户可以通过sudo
执行哪些命令等。/etc/ssh/sshd_config
:存储sshd
服务的配置信息,包括SSH连接的安全设置、监听端口等。/etc/crontab
:存储定时任务配置信息,包括需要执行的命令、执行的时间等。
当你想更改系统级别的设置和配置时,你经常需要在 /etc
目录下查找和编辑对应的配置文件。这些文件有可能是键值对形式的文本文件,也有可能是类似INI或XML的格式文件。这些配置文件通常具有详细的注释说明,以便用户即使不是专业人士,也能够进行基本的理解和修改。
/root
/root
目录是系统的超级管理员(root)的主目录。
/root
目录包含了 root 用户的个人文件和配置文件,包括一些重要的配置文件、SSH 私钥和其他系统管理工具。和普通用户的家目录 /home
不同,/root
目录是一个系统级别的目录,在一般情况下普通用户是无法访问和修改该目录下的任何文件的
/root
目录包含了许多常见的文件和目录,包括 .bashrc
表示 Bash shell 的配置文件、.profile
表示系统环境变量的配置文件以及一些其他的系统配置文件。当系统需要读取 root 用户的个人文件或者目录时,通常会直接引用 /root
。
/run
一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
/sbin
/sbin 目录是/system bin 的缩写,它的功能类似/bin ,不过它存储的一般是系统程序,一般需要使用管理员权限才能使用。如显示系统已加载的模块命令 lsmod、对存储器分区进行格式化的 mkfs 等。
/tmp
临时文件夹
/tmp 目录存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用/var/tmp 来代替/tmp,因为前者可能拥有一个更大的磁盘空间。
/usr
以前的 /usr 是用户的家目录,存放着各种用户文件 —— 现在被 /home 取代**(例如 /usr/someone 已经改为 /home/someone)。 现代的 /usr 只专门存放各种程序和数据,用户目录已经转移。其含义已经从“用户目录”变成了 “unixsystem resource”(Unix 系统资源)。(值得注意的是,在一些 unix 系统上,仍然把 /usr/someone 当做用户家目录,如 Minix。) 例如:
- /usr/bin : 所有可执行文件,如 gcc,firefox 等(指不包含在 /sbin 和 /bin 内的);
- /usr/include : 各种头文件,编译文件等时需要使用;
- /usr/include/’package-name’ : 程序特定的头文件;
- /usr/lib : 所以可执行文件所需要的库文件;
- /usr/scr:源代码,Linux 内核的源代码就放在该目录下
/var
/var 目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。
通常,此目录下建议包含如表所示的这些子目录。
/var 子目录 | 功能(作用) |
---|---|
/var/lib/ | 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中 |
/var/log/ | 登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。 |
/var/run/ | 一些服务和程序运行后,它们的 PID(进程 ID)保存位置 |
/var/spool/ | 里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。 |
/var/www/ | RPM 包安装的 Apache 的网页主目录 |
/var/nis 和/var/yp | NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录 |
/var/tmp | 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除 |
/lib
/lib目录是/library的缩写,根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。如C语言标准库,这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间。
如代码A和代码B都使用到C语言标准库的printf和malloc函数, 那么它们就可以共用文件系统上的C库内容,代码A和代码B自身就不需要把C库的这部分内容添加到自己发布的程序包中了。 关于这部分在GCC章节的静态/动态编译将会有讲解。
/lib 32/64
存放二进制函数库,支持 32 位或 64 位
/proc
/proc
目录是 Linux 系统中的一个特殊目录,用于存储运行中的进程信息和系统信息,它并不是一个真实的文件系统,而是一个虚拟文件系统。
在 /proc
目录下,可以看到以数字命名的很多子目录,这些数字实际上是系统中每个进程的唯一标识符(PID)。每个 PID 目录下都有一个 status
文件,该文件包含了该进程的状态信息,如进程 ID、进程状态、内存占用情况等。
此外,在 /proc
目录下还有许多其他有用的文件和目录,比如:
- cpuinfo:记录了系统当前 CPU 信息;
- meminfo:记录了系统当前内存使用情况;
- loadavg:记录了系统的负载情况;
- filesystems:记录了系统当前支持的文件系统;
- uptime:记录了系统的运行时间等。 对于管理员和开发者来说,
/proc
目录是非常有用的一个调试和分析工具。 你可以通过检查status
文件和其他一些信息, 了解每个进程正在做的事情,查看系统资源的使用情况,以及了解其他系统工作和状态的相关信息。 总之,/proc
目录用于存储运行中的进程信息和系统信息。它是一个虚拟文件系统,提供了许多有用的调试和分析工具,帮助你更好地理解系统运行的情况。
/sys
用于记录 CPU 与系统硬件的相关信息.
与/proc目录类似,/sys目录用于把内核的设备驱动导出到用户空间,可通过访问sys目录及其下的文件,来查看甚至控制内核的一些驱动设备。
用户相关目录
/home
用户主目录,比如 user 用户的主目录就是/home/user
/home
目录是 Linux 系统中的一个特殊目录,在一个多用户的 Linux 系统中,每个用户都会有一个独立的家目录,即/home
目录下的一个子目录。
在/home
目录下,每个用户的目录都以其用户名作为名称,该目录存储着该用户的文件、文档以及个人设置等信息。例如,用户A的个人文件和设置存储在/home/A
目录中,而用户B的个人文件和设置则存储在/home/B
目录中。
挂载与存储目录
/media
可移动媒体的挂载点,如光盘、软盘和 DVD 等多媒体设备
/mnt
/mnt 目录是系统管理员临时挂载 (mount) 文件系统的安装点。
/mnt 下面可以分为许多子目录,例如/mnt/dosa 可能是使用 msdos 文件系统的软驱,而/mnt/exta 可能是使用 ext 2 文件系统的软驱,/mnt/cdrom 光驱等等
应用程序与服务目录
/opt
第三方应用程序软件包
/srv
一些网络服务所需 要的数据文件
其他目录
/lost +found
(EXT 3/4 ) 当软件奔溃或非法退出时,会产生一些记录文件