3173 字
16 分钟
Linux文件目录

总体目录结构#

Linux 的目录结构一般遵循 FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)。下面是 FHS 中主要的目录结构:

image.png

系统核心目录#

/

根目录,包含整个文件系统的所有文件和子目录。

/bin#

/bin目录是/binary的缩写,它包含众多普通用户可用的命令。而命令的本质就是可执行程序,即二进制bin文件

/boot#

/boot目录存放引导加载器(bootstrap loader)使用的文件,如lilo,核心映像也经常放在这里,而不是放在根目录中。

/boot目录通常包含了以下内容:

Bootloader(引导加载程序)/boot目录包含了引导加载程序(例如GRUB或LILO)所需的文件,包括内核镜像、引导加载程序配置文件(grub.confmenu.lst)、引导加载程序可执行文件(例如grubgrub2文件)和模块(例如文件系统模块)等。在系统启动时,引导加载程序会从此目录读取这些文件并加载内核镜像,启动Linux系统。
内核镜像文件/boot目录包含了操作系统内核文件。这些文件通常被命名为vmlinuzbzImage。内核文件是Linux操作系统中最重要的组件之一,负责系统的启动、设备驱动程序、性能优化和安全控制等。

在安装Linux系统时,/boot目录通常会被创建并分配一定的空间。如果你使用引导加载程序来引导系统,你就需要了解并管理/boot目录,确保其中的文件完好和充足,以便系统可正常启动。

/dev#

/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。 比如,用户可以通过访问/dev/mouse来访问鼠标的输入,就像访问其他文件一样。

包含了系统中所有的设备文件,包括硬件设备、输入输出设备、网络设备、虚拟设备等。在Linux中,所有的设备文件都被认为是文件,你可以像读/写普通文件一样读/写设备文件。设备文件通常是Linux下应用程序与硬件之间的桥梁,应用程序通过读写设备文件,实现与硬件的交互。

/dev 目录中的设备文件可以分为以下两类:

  1. 块设备文件:块设备是指能够按照固定长度的块进行读写的设备,如硬盘、U盘、SSD等。块设备通常可以通过文件系统进行格式化和挂载。 在 /dev 目录下,块设备文件名通常以 sd(如 sdasdb)、hd(如 hdahdb)等前缀为标识,而后面的数字表示不同的设备序号。
  2. 字符设备文件:字符设备是指以字符为单位进行读写的设备,如鼠标、键盘、串口等。字符设备通常不能被格式化和挂载,也没有文件系统。 在 /dev 目录下,字符设备文件名通常以 tty(如 tty1tty2)、sda(如 sda1sda2)等前缀为标识,而后面的数字表示不同的设备序号。 需要注意的是,/dev 目录中的设备文件并不是真正的硬件设备文件,而是 Linux 内核通过驱动程序模拟出来的虚拟文件。实际上这些设备文件只是一些接口,实现了将硬件设备暴露给用户空间程序的目的。

/etc#

/etc目录是/etcetera 的缩写。

存储了各种系统级别的配置文件,是Linux系统中所有的常用应用程序和服务所需的重要配置文件的存储位置。该目录在系统级别和全局范围内定义了很多关键性的值。

/etc目录中,包括了许多文件和子目录,这些文件和子目录是按照应用程序和服务的名称进行组织的。例如,以下是一些在/etc目录下的子目录及相关的配置文件:

  1. /etc/network:存储网络相关的设置,包括IP地址、网关、DNS、DHCP等。
  2. /etc/passwd:存储系统中所有的用户账户信息,包括用户名、用户ID、主目录等等。
  3. /etc/group:存储系统中的所有用户组信息,包括组名、组ID、组成员等等。
  4. /etc/fstab:存储系统中所有文件系统的挂载点信息和属性,包括磁盘分区、NFS、CD-ROM等。
  5. /etc/sudoers:存储 sudo 命令的相关配置信息,包括哪些用户可以通过 sudo 执行哪些命令等。
  6. /etc/ssh/sshd_config:存储 sshd 服务的配置信息,包括SSH连接的安全设置、监听端口等。
  7. /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/ypNIS 服务机制所使用的目录,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 ) 当软件奔溃或非法退出时,会产生一些记录文件

Linux文件目录
https://scudays.github.io/posts/embedded-linux/linux文件目录/
作者
Days
发布于
2024-12-23
许可协议
CC BY-NC-SA 4.0