文件系统目录结构
Linux 继承了 Unix 一切皆文件(Everything is a file
)的哲学思想, Linux 文件系统上基本上所有的东西都是文件,包括设备、网络和应用,以及其它特殊的socket, 当然万物皆文件
的说法也不是绝对的,比如说系统上正在运行的进程就不是文件系统的一部分;设计了这么一套逻辑,主要还是秉承着 UNIX 哲学一贯主张的 KISS 原则(Keep it simple, stupid),将所有的设备都隐藏起来,给用户统一的外在接口,操作起来简洁方便。
说明实际上,更准确的说法是“万物皆字节流”(Everything is a stream of bytes
),例如/dev/random
并不是一个文件,但它无疑是字节流。
Linux 文件系统目录为“倒”的树形结构,所有的目录都是从”/”(根目录)衍生而来,也称为Linux目录树。
1.文件系统目录简述
▫️ /root: 系统的超级用户(也称为管理员)的主目录
▫️ /bin:存放常规shell内部应用程序,如ls命令
▫️ /sbin: 包含只有超级用户需要的应用程序,如sshd命令
▫️ /boot:存放启动系统所需的文件,内核文件vmlinuz,引导加载器(Bootloader, Grub), 类比于Windows中系统引导,非需勿改
▫️ /dev:存放device设备文件,如网络摄像头或USB
▫️ /etc:存放系统及应用相关的配置文件,类似于 Windows中的注册表,如ssh配置文件
▫️ /home:存放用户个人目录的位置,如/home/weiyigeek
▫️ /lib:存放应用程序调用的libraries库
▫️ /lib64:存放x86_64系统应用程序调用的libraries库
▫️ /media:存放插入外部存储并尝试访问外部存储时自动挂载的位置
▫️ /mnt:用于手动挂载存储设备或分区的位置
▫️ /opt:通常是您编译软件的地方,如从源代码构建 nginx
▫️ /proc:虚拟目录包含有关计算机的信息,如内存/CPU/网络栈
▫️ /run: 系统进程出于自己的邪恶原因使用它来存储临时数据,
▫️ /var: 存放应用程序、库、文档、壁纸、图标以及服务需要共享的内容
▫️ /srv: 包含服务器的数据,如运行web服务器站点物理目录/srv/www
▫️ /sys: 虚拟目录类似于/proc和/dev/,包含来自连接到计算机的设备的信息
▫️ /tmp: 包含临时文件,任何用户程序都可以进行读写访问
▫️ /var: 包含日志之类的内容
▫️ /usr:系统软件资源放置的目录,类似于 Windows 的 ProgramFiles 目录,存放的是用户的应用程序。
▫️ /lost+found:默认是空在ext2、ext3文件系统中,当系统意外崩溃或机器意外关机,当系统非正常关机的时候此目录下会保留一些文件(可以并修复已经损坏的文件系统),不过随着不同Linux的发展,有的发行版不在根目录下。
Linux 文件系统分层结构标准,由 FHS(FileSystem Hierarchy Standard
)机构进行定义,FHS 依据文件系统使用的频繁与否与是否允许使用者随意更动而将目录定义成为四种交互作用的形态:
- 1.可分享的 shareable:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录。
- 2.不可分享的 unshareable:自己机器上面运作的装置文件或者是与程序有关的socket文件等,由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
- 3.不变的 static:有些数据是不会经常变动的,跟随着distribution而不变动。例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等。
- 4.可变动的 variable:经常改变的数据,例如登录文件、一般用户可自行收受的邮件。
~ | 可分享的(shareable ) | 不可分享的(unshareable ) |
---|---|---|
不变的(static ) | /usr (软件放置处)、/opt (第三方协力软件) | /usr (软件放置处)、/boot (开机与核心档) |
可变动的(variable ) | /var/mail (使用者邮件信箱)、/var/spool/news (新闻组) | /var/mail (使用者邮件信箱) 、 /var/lock (程序相关) |
FHS 文件系统层次结构标准,目前版本为 2.1 于2004年1月29日发布,PDF文件地址链接 www.pathname.com/fhs/pub/fhs-2.3.pdf
🔥主流 Linux/Unix 系统使用 tree -L 1 /
命令查看系统目录结构:
- Ubuntu or Debian:
sudo apt install tree
- Red Hat or Fedora:
sudo dnf install tree
- SUSE/openSUSE:
sudo zypper install tree
- Arch-like distros:
sudo pacman -S tree
温馨提示:由于可能不同的 Linux 发行版,应用的配置文件存放路径有所不同,但是根目录下二级目录的名称基本是一致的,如上所述的 /root
、/home
、/bin
、/sbin
、/etc
等。
2.文件系统目录功能
描述:此节作者简单描述下二级目录下各目录的功能,使之在后续的Linux学习中懂得将二进制安装
或源码编译安装
某些目录中,如需了解更详细内容请自行查阅相关资料。
/usr 目录功能
其实 usr
是 Unix Software Resource
的缩写,也就是Unix操作系统软件资源所放置的目录,而不是用户的数据啦, 类比于 Windows 下的 ProgramFiles 目录。
FHS 标准建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录,特别时自己构建的rpm包时。
目录 | 应放置文件内容 |
---|---|
/usr/bin/ | 绝大部分的用户可使用指令都放在这里,他与/bin的不同之处(是否与开机过程有关) |
/usr/sbin/ | 非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon) |
/usr/src/ | 一般原始码建议放置到这里,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。 |
/usr/include/ | c/c++等程序语言的档头(header)与包含档(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档。 |
/usr/lib/ | 各应用软件的函式库文件、目标文件(object file),以及不被一般使用者惯用的执行档或脚本(script)。要注意的是,如果你使用的是X86_64的Linux系统,那可能会有/usr/lib64/目录产生 |
/usr/local/ | 系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别啦。你可以自行到/usr/local去看看,该目录下也是具有bin, etc, include, lib…的次目录 |
/usr/share/ | 放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件嘛。在此目录下常见的还有这些次目录:/usr/share/man:联机帮助文件 |
/usr/share/doc | 软件杂项的文件说明 |
/usr/share/zoneinfo | 与时区有关的时区文件 |
/usr/X11R6/ | X版本为第11版,且该版的第6次释出之意,为X Window System重要数据所放置的目录。 |
实践补充:/usr/local
目录一般是用来存放用户自编译安装软件的存放目录, 通过源码包编译安装的软件,如果没有特别指定安装目录的话--prefix=
,一般也是安装在这个目录中。
/var 目录功能前面介绍 /usr
是安装时会占用较大硬盘容量的目录,而 /var
就是在系统运作后才会渐渐占用硬盘容量的目录;主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等;