Linux文件结构
在linux系统中,所有的文件及目录都可以归结一个树状结构,一个以根目录为根节点向下的分支结构
根目录的绝对路径为/
,在Linux中,大部分的操作都是通过改变当前工作路径到指定位置(cd
命令),然后才对相关目录或者文件或者应用进行操作。
Linux系统也设置了树种第二层基本的基本目录分布,以便于分类Linux的不同性质的文件或者目录。
Linux第二层目录介绍
Linux文件结构树种第二层的目录分别由一下及部分组成:
- bin
- dev
- home
- lib64
- mnt
- proc
- run
- srv
- tmp
- var
- boot
- etc
- media
- opt
- root
- sbin
- sys
- usr
第二层目录详解
bin、sbin目录
Linux中的bin目录里面里面一般存放的但是可执行文件,也就是应用程序,sbin里面存放的是管理员用户专属的程序,但是有时普通用户也是可以用的
根目录下的bin目录里面存放的是Linux中用户命令文件,也就是shell命令,有的是其他应用程序在此位置的软连接。
此目录下的所有的命令都是提供给所有用户和脚本程序使用,并且此目录下不能包含任何子目录。
dev
此目录下的所有文件或者目录里面存放的文件都是一些设备文件
Linux中所有的设备都被当成是一个文件,这些文件统称设备文件,对设备的操作就可一转换成对设备文件来操作
注意此目录内的一些特别设备
/dev/null 黑洞设备
- 所有写入此设备的文件都将会有去无回,相当于一个垃圾桶,所有不需要的信息都可以写入此文件。
- 你也可以将相应的设备重定位到此设备
- 例如我现在不想看到此操作的任何错误信息可以这样输入:
rm test/ 2>/dev/null
代表我将标准错误(系统默认其文件描述符为2)重定位到此黑洞设备,所以在发生错误时就不会显示任何错误信息
- 例如我现在不想看到此操作的任何错误信息可以这样输入:
/dev/zero 无限资源设备
- 此设备相当于有无限的空字符,即不显示,但是占用空间的字符
- 此设备文件中的资源是用不完的,所以我们一般用它来初始化一个文件或者覆盖文件的数据
/dev/stdin、/dev/stdout、/dev/stderr
- 这三个设备分别是标准输入(键盘输入),标准输出(屏幕输出),标准错误(发生的错误异常)
- 系统启动后这三个设备会默认启动,相当于这三个文件会自动打开,其文件描述符分别为 0(标准输入)、1(标准输出)、2(标准错误)
/dev/tty?
- /dev目录中有很多 tty+数字 文件,其代表每个控制终端
- 如果有两个人同时登陆以一个Linux系统,只要知道其他人使用的终端号(ps -ax可以查看相应进程),那么你就可以通过向其终端文件中写入东西,这样就可以将写入的东西在对方的屏幕上显示出来
home
俗称家目录,每个用户的用户主目录都在其下(除了root用户)
lib64和lib
这两个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的.dll文件。几乎所有的应用程序都须要用到这些共享库。lib64存放的是64位应用运行时所需的动态库。
mnt
此目录一般默认为空,系统提供这个目录是为了让用户可以挂载其他的文件系统,来使用其他的文件系统,比如:u盘、共享文件夹等。
当其他文件系统挂载上来之后,我们就可以在此目录找到所挂载的文件系统,并且可以按照自己目录的操作方式来操作其他文件系统。
挂载的时候需要考虑文件系统的格式兼容问题
proc
proc目录是一个文件系统,它是一个虚拟的文件系统,其中存放的是内核运行状态的特殊文件,用户可以通过这些文件查看有关系统硬件以及正在运行的进程的信息,也可以通过更改其来改变内核的运行状态。
/proc目录里面包含了许多数字命名的目录,这里简单解释一下:
- cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
- cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
- environ — 当前进程的环境变量列表,彼此间用空字符(NULL)隔开
- exe — 指向启动当前进程的可执行文件(完整路径)的符号链接
- fd — 这是个目录,包含当前进程打开的每一个文件的文件描述符,每个文件描述符都是一个实际文件的符号链接
- maps — 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表
- root — 指向当前进程运行根目录的符号链接
- stat — 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用
- status — 与stat所提供信息类似,但可读性较好
- task — 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容
/proc目录下也有很多目录,简单介绍一下:
- /proc/meminfo 系统中关于当前内存的利用状况等的信息,常由free命令使用
- /proc/swaps 当前系统上的交换分区及其空间利用信息
- /proc/uptime 系统上次启动以来的运行时间,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒
- proc/version 当前系统运行的内核版本号
run
此目录里存放的是兄正常运行时所必须的文件以及目录,此目录非常重要,千万不要改动里面的任何东西,否则会出大事情的
srv
主要用来存储本机或本服务器提供的服务或数据
var
包含系统一般运行时要改变的数据,通常这些数据所在的目录的大小是要经常变化或扩充的。
- /var/catman 当要求格式化时的man页的cache.man页的源文件一般存在
/usr/man/man*
中;有些man页可能有预格式化的版本,存在/usr/man/cat*
中.而其他的man页在第一次看时需要格式化,格式化完的版本存在/var/man
中,这样其他人再看相同的页时就无须等待格式化了 - /var/lib 系统正常运行时要改变的文件
- /var/local
/usr/local
中安装的程序的可变数据(即系统管理员安装的程序) - /var/log 各种程序的Log文件
- /var/tmp 比/tmp 允许的大或需要存在较长时间的临时文件
tmp
临时文件目录,该目录存放系统中的一些临时文件,文件可能会被系统自动清空,而且每次重新启动的时候此目录都会被清空
boot
引导程序,内核等存放的目录。
etc
etc目录是全局配置目录,其中存放的是整个系统的配置文件
- *rc 此类文件一般都代表启动时的初始化目录,也就是每次启动系统的时候都会读取里面的配置
- passwd 用户数据库,包含所有的 用户名、加密后的密码、uid、guid、注释、家目录、登录后默认的shell
- profile 登录shell的时候首先读取的配置文件
- network 网络配置文件
media
和mnt目录的作用差不多,不过medai是自动挂载的目录,不用管理员手动挂载
opt
此目录专门用来存放那些可选的程序,比如说是测试版的程序,并且安装到此目录的程序它的所有数据也都会在此目录,所以删除的ua比较方便
root
root用户的家目录
普通用户并没有进入此目录的权限
sys
sys目录是sysfs文件系统的挂载点,主要是系统的内核和底层打交道的一些文件目录
usr
用户应用程序存放的位置
目录结构
- /bin普通用户所有的可执行文件,包括应用程序
- /include 各种头文件,编译文件的时候需要用到
- /lib 所有可执行文件需要的库文件,和根目录下的lib功能差不多
- /local 普通用户存放手动安装的软件
文件及目录权限
在Linux中每个文件和目录都有权限这样的概念,这代表用户能不能打开或者修改此文件或者目录
权限类别
在Linux中使用
ls -l
命令可以查看相关的文件的权限(第一列),权限的类别有三种:
- 读(r)
- 写(w)
- 执行(x)
文件权限
- 例如一个文本文件就不谈执行权限了,读权限代表你能不能查看文件中文本的内容,写权限代表你能不能对此文件进行修改,但是一个文件只有文件所有者和root用户才可以删除。
- root用户拥有所有文件的所有权限,并且可以给所有文件设置权限
- 一个用户能不能执行此一个可执行程序在于有没有可执行权限
- 文件所有者可以设置文件的权限,可以可以设置自己对访问文件的权限
目录权限
- 目录的执行权限(x)代表可不可以进入此目录
- 目录的读取权限 (w)代表能不能读取目录的内容
- 目录的写入权限 (r) 代表能不能再这个目录创建文件
- 当目录加上沾附位权限(chmod +t 目录名)代表除了root用户和目录所有者其他人不能删除目录里面的任何文件。
- 在目录所有者不是自己的目录里创建文件不管设置什么权限,目录的所有者都拥有删除此文件的权限
- 只拥有目录的w和r权限并不能对目录进行操作,至少要有个x权限