linux的文件系统
windows中,每个磁盘做完分区之后,各个分区成为一个独立的分区。但是linux中,所有的文件在linux主机上要想能够被访问,必须从根文件位置开始。这并不是说linux就不需要分区了。但是linux分区在完成以后是不可以被独立访问的,而是只能与现有的根一块儿被访问。
linux系统启动,内核加载完成之后,内核本身一般不会提供用户可访问的文件同时也不提供用户可直接使用的进程,所以内核加载之后必须要额外的启动一些外部命令、程序,包括shell程序、GUI、CLI接口等等。而这些外部命令、程序通常就放置于某一分区之上。
为了避免选择上的困难,linux有一个作为系统盘的分区存在,这个系统盘也是内核启动后第一个要加载的分区。
如下图,假定这个系统盘是A分区。
当内核启动完成后,为了帮助加载各种外部程序命令,内核会自行在自身的工作空间设置一个文件系统,称作根文件系统—— /,然把A分区整个直接挂载到根目录下。此时A分区内的a.txt文件路径就是/a.txt,A分区内P目录下的a2.log路径就是/P/a2.log
A分区已经可以访问了,那B分区如何访问呢?
假定现在A分区中有一个目录/mnt/BTEST,在不做设定的情况下,现在这个路径下的文件都位于A分区。
linux中的存储空间必须挂载关联之后才可以访问,现在A已经关联到根目录了,根目录只有一个,B分区只能退而求其次,关联到根目录下的A分区内的某个目录,比如说挂载到/mnt/BTEST,此时A分区上的/mnt/BTEST目录,就成了B分区的访问入口,/mnt/BTEST下就是B分区的所有内容。——有点类似windows系统中的装入磁盘驱动器。
C分区D分区挂载,同理。
既然都挂载到根目录下,为什么还要分区?
系统重装、升级,只对A分区操作,保护BCD分区数据。A区重装系统后,将BCD分区重新挂载即可。
不同于windows系统,linux没有注册表的概念,也就说之前安装在BCD盘的软件程序,在A区系统重装之后,软件程序完全不受影响,不用重新注册。
这就是root filesystemg根文件系统,简称rootfs
类似于windows系统C盘中的Program Files等文件,linux系统也在系统盘中的固定位置有一些便于用户识别的固定的文件目录。
根文件系统一级子目录:
/bin /boot /dev /etc /home /lib /lib64 /lost+found /media /misc /mnt /net /opt /proc /root /sbin /selinux /srv /sys /tmp /usr /var
在linux标准库有一个FHS(Filesystem Hierarchy Standard文件系统层次结构标准)标准。现发行版linux都寻遵循此标准,所以各个版本的Linux中,都有相似的一级甚至部分二级目录。
/boot:引导文件存放目录,内核文件(vmliuz)、引导加载器(bootloader、grub)静态文件等都存放于此目录。/boot通常挂载到独立分区。
/bin:供所有用户使用的基本命令。/bin不能关联至独立分区。操作系统启动即会用到的程序放置于此目录。
/sbin:管理类的基本命令。不能关联至独立分区。操作系统启动即会用到的程序放置于此目录。
/lib:基本共享库文件(系统启动需要的、通用的库文件)和内核模块文件(/lib/modules)适用于32位系统,在64位系统中,还有/lib64
/lib64:专用于X86_64系统上的共享库文件存放位置
/etc:配置文件目录。多数为纯文本文件。
/etc/opt:早期的第三方应用程序配置文件目录,例如早期的Oracle
/etc/X11:图形显示界面需要的X协议的配置文件存放路径
/home/username:普通用户家目录。可挂载独立分区。
/root:管理员家目录
/media:便携式移动设备挂载点。子目录挂载
/mnt:临时文件系统挂载点。子目录挂载
/dev:设备文件及特殊文件存放位置
/opt:第三方应用程序、附件
/srv:当前系统某些服务运行时所需要用到的中间数据存放路径
/tmp:临时文件存放路径,对所有用户开放各种权限
/usr:(Unix System Resource)系统核心所在,包含了所有的共享文件,涵盖了二进制文件,各种文档,各种头文件,还有各种库文件;还有诸多程序,例如 ftp,telnet。
通常独立分区。
/user下还定义bin,include,lib,local,sbin,share二级目录
此处bin,sbin存放系统运行时基本功能应用程序,保证系统功能完整。
/user/include:C程序的头文件存放位置
/user/share:结构化独立的数据,例如doc,man等。
/user/local:第三方应用程序的安装位置,取代早期/opt,有自己的bin,include,lib,local,sbin,share等文件,通常挂载独立分区。
/var:通常独立分区。(variable data files)可变数据文件。
/var/cache:应用程序缓存数据目录
/var/lib:应用程序状态信息数据
/var/lacal:专用于为/usr/local下的应用程序存储可变数据
/var/lock:锁文件
/var/log:日志
/var/opt:专用于为/opt下的应用程序存储可变数据
/var/run:运行中的进程相关的数据,通常用于存储进程的pid文件
/var/spool:应用程序数据池
/var/tmp:保存系统两次重启之间的临时数据
/proc:用于输出内核与进程信息相关的虚拟文件系统(伪文件系统)
/sys:用于输出当前系统上硬件设备相关信息的虚拟文件系统(伪文件系统)
/misc:杂项,备用
/lost+found:使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当系统发生错误时,将一些遗失的片段放置在这个目录下
/selinux:selinux相关的安全策略等信息的存储位置
梳理一下:
Linux应用程序的组成部分:
二进制程序:/bin,/sbin,/usr/sbin,/usr/bin,/usr/local/bin,/usr/local/sbin
库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64
配置文件:/etc,/etc/DURECTORY,/usr/local/etc
帮助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc
linux下的文件类型(以文件的存储机制区分类型)
-:普通文件,file
d:目录文件
b:block device 即块设备文件,如硬盘;支持以block为单位进行随机访问
c:character device 即字符设备文件,如键盘,支持以character为单位进行线性访问
l:symbolic link 即符号链接文件,又称软链接文件,类似windows中快捷方式
p:pipe 即命名管道文件,单方向数据传输的,它们的数据都是直接在内存中传输的,管道是进程间通信的一种方式,例如父进程写,子进程读
s:socket 即套接字文件,用于实现两个进程进行通信