Linux系统的目录结构
????大家对Linux的印象都是那个乌漆嘛黑的操作界面,然后不断地在上面敲各种各样的命令。在实际的生产中,确定也是这么一种情况。在开始敲命令之前,先了解一下,Linux操作系统里面都有些什么。因为利用Linux来开发产品公司功都跟个人实在太多了,如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰。 你能想像,你进入一个企业之后,所接触到的Linux目录配置方法竟然跟你以前学的完全不同吗?很难想像吧~所以,后来就有所谓的FilesystemHierarchy Standard (FHS)标准的出炉了!
????之前看某个机构的视频,里面的老师有提到一个理念:“约定大于配置”。大概意思就是说,大家按照一个规范去开发而不用灵活配置一些东西。根据FHS的标准文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下, 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的使用者,都能够遵循FHS的标准。 也就是说,FHS的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。 这样做好处非常多,因为Linux操作系统就能够在既有的面貌下(目录架构不变)发展出开发者想要的独特风格。
目录结构
第一级目录说明
目录 | 目录说明 |
---|---|
/bin | 用于存放可执行文件的目录,在/bin下面的指令可以被root与一般帐号所使用 |
/boot | 这个目录主要在放置开机会使用到的文件,包括Linux核心文件以及开机菜单与开机所需配置文件等等 |
/dev | 任何设备与周边设备都是以文件的型态存在于这个目录当中,只要通过存取这个目录下面的某个文件,就等于存取某个设备 |
/etc | 系统主要的配置文件几乎都放置在这个目录内,例如各种服务、应用的配置文档 |
/lib | lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库 |
/media | 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下 |
/mnt | 暂时挂载某些额外的设备,一般建议放置到这个目录中,例如可以将光驱挂载在 /mnt/cdrom目录下 |
/opt | opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如安装ORACLE数据库则就可以放到这个目录下 |
/run | 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。 |
/sbin | 区别于上面的/bin目录,该目录下存放的是超级管理员才可以执行的二进制文件 |
/srv | srv可以视为“service”的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录 |
/tmp | tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的 |
/home | 用户的主目录,在 Linux 中,每个普通用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve |
/lib | 用来存放与 /lib 不同的格式的二进制函数库,例如支持 64 位的 /lib64 函数库等 |
/root | 系统管理员(root)的主文件夹。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时, 该目录就能够拥有root的主文件夹 |
/lost+found | 这个目录是使用标准的ext2/ext3/ext4文件系统格式才会产生的一个目录,目的在于当文件系统 发生错误时, 将一些遗失的片段放置到这个目录下。不过如果使用的是 xfs 文件系统的话,就 不会存在这个目录了 |
/proc | 这个目录本身是一个“虚拟文件系统(virtual filesystem)”。放置的数据都是在内存当中,例如系统核心、行程信息(process)、周边设备的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间 |
/sys | 这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。 包括目前已载入的核心模块与核心侦测到的硬件设备信息等等 |
/usr | 在第二级目录中说明 |
/var | 在第二级目录中说明 |
第二级目录说明
usr目录
????usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
目录 | 目录说明 |
---|---|
/usr/bin/ | 普通用户执行的命令都存放在这里,/bin目录其实就是/usr/bin的一个链接文件 |
/usr/lib/ | 与/lib目录一样,/lib目录是/usr/lib目录的一个链接文件 |
/usr/local/ | 系统管理员在本机自行安装自己下载的软件(非安装系统的时候自带的),建议安装到此目录, 这样会比较便于管理。 |
/usr/sbin/ | 与/sbin目录一样,/sbin目录是/usr/sbin目录的一个链接文件 |
/usr/share/ | 主要放置只读架构的数据文件,当然也包括共享文件。在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文字文件 |
/usr/games/ | 与游戏比较相关的数据放置该目录下 |
/usr/include/ | c/c++等程序语言的文件开始(header)与包含档(include)放置处,当我们使用gcc编译安装软件的时候,就会用到里头的文件 |
/usr/libexec/ | 某些不被普通用户惯用的可执行文件或脚本等等,都会放置在此目录中 |
/usr/lib/ | 与 /lib目录一样,/lib目录是/usr/lib目录的一个链接文件 |
/usr/src/ | 一般源代码建议放置到这里,src有source的意思 |
var目录
????var 是 variable(变量) 的缩写,这个目录在系统运行后才会渐渐占用硬盘容量的,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件,高速缓存(cache)等等。
目录 | 目录说明 |
---|---|
/var/cache/ | 应用程序本身运行过程中会产生的一些暂存盘 |
/var/lib/ | 程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录 |
/var/lock/ | 某些设备或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时, 就可能产生一些错误的状况,因此就得要将该设备上锁(lock),以确保该设备只会给单一软件所使用 |
/var/log/ | 每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下 |
/var/mail/ | 放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中。这两目录是链接文件关系 |
/var/run/ | 某些程序或者是服务启动后,会将他们的PID放置在这个目录下。/run目录,其实是/var/run目录的链接文件 |
/var/spool/ | 这个目录通常放置一些伫列数据,所谓的“伫列”就是排队等待其他程序使用的数据。 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。 |
相对路径与绝对路径
????从上面的介绍中,可以了解到Linux操作系统的目录结构,就像是一棵倒过来的树。根目录 / 就像是这棵树的根,不断的向下开枝散叶。对存放在不同目录下的文件或者是目录进行操作,根据文件名写法的不同,也可将所谓的路径定义为绝对路径与相对路径。
????绝对路径:从根目录 / 开始写文件名或者目录名,则称为绝对路径。如:/etc/profile 。
????相对路径:从当前的工作目录相开始写文件名或者目录名,则称为相对路径。如上图所示,/home目录下,有bob 、eve目录,假设当前的工作目录是/home目录,那么进入bob目录,或者eve的目录,可以这样写 cd ./bob, 或者cd ./eve。
????总之,文件或者目录的路径,是从根目录开始的,那么就是绝对 路径,否则就是相对路径。接着上面的例子说,当前在/home目录下,如果要进入eve用户的home目录,使用相对路径和绝对 路径,分别是这样写的:
# 相对路径
cd ./eve
# ./代表的是从当前目录下进行查找,也可以进行简写
cd eve
# 使用绝对路径
cd /home/eve
????cd命令,是(change directory)的缩写,就是要改变当前目录,进入到其他目录的意思。
????注意这里相对路径的写法,路径前面的两个小数点“..”不是写多了,是有特别的含义,就是返回上一层目录的意思。因为当前在/home目录里面,“cd .. ”就相当于返回上一级目录,那么就返回到了/home目录了。后面的"cd ../..",就相当于向上返回了两层,相当于回到了根目录 / 下面了。然后跟着后面的 /var/log,就可以找到对应的目录了。
查看当前的所在的目录:pwd
????pwd是print working directory的缩写,就是打印当前的工作目录。当一个用户登陆到Linux操作系统后,当前的工作目录默认是该用户的home目录。比如:eve用户刚刚登陆到Linux系统的时候,他的工作目录就是/home/eve。同样,bob用户刚刚登陆到Linux系统的时候,他的工作目录也是/home/bob。但是root用户有不一样,他的home目录在根目录下,所以root用户的home目录是/root。
基本语法
pwd [参数]
参数说明
参数 | 参数说明 |
---|---|
P | 大写字母P,打印目录的真实路径 |
????比如说,上面的Linux目录结构中有提到根目录下的/bin目录,其实是/usr/bin的一个链接文件。那么,当进入到/usr目录的时候,输入命令pwd -P,即可以输出/usr目录的真实路径。
实例
# root用户登陆到系统后,查看当前的工作目录
$ pwd
/root
# 查看/bin目录的真实路径 ,先进入到/bin目录,然后输入命令
$ pwd -P
/usr/bin
切换目录:cd
????对Linux操作系统的目录结构有个整体的认识之后,下面就可以对目录进行一些操作了。正如上面提到的cd命令,就是切换当前工作目录的。
基本语法
cd 目录路径
????目录路径,就是上面实例提到的 相对路径中的 ./eve ,以及绝对路径中的 /home/eve。这些都是目录路径呀。
特殊符号
????cd命令后面除了输入目录路径以及,还可以通过以下符号,进行快速的目录切换
符号 | 符号说明 |
---|---|
. | 一个小数点,代表了当前目录 |
.. | 两个连续的小数点,代表了上一层目录 |
- | 减号,代表了上一次所在的目录 |
~[用户名] | 键盘Tab键上面的按键,代表的是当前登陆Linux用户的home目录 后面的用户名为可选参数,加上“用户名”参数可以跳到其他用户的home目录 |
是的,你没看错,什么也没有 cd命令后面没有任何内容,直接回车,会跳到当前登陆Linux系统用户的home目录 |
|
/ | 根目录。 |
实例
# 查看当前的工作目录
$ pwd
/root
# 进入到bob用户的home目录
cd ~bob
# 查看当前的工作目录
$ pwd
/home/bob
# 退回到上一级home目录
cd ..
# 查看当前的工作目录
/home
# 回到自己的home目录
cd ~
# 查看当前的工作目录
$ pwd
/root
# 直接返回上次所在的目录
cd -
# 查看当前的工作目录
$ pwd
/home