看了上一篇的文件权限后是不是觉得Linux系统十分神奇呢?
是不是感受到了被root账户支配的恐惧?!
上一篇说了那么多关于文件/目录的权限知识,那么,文件/目录下到底存储了怎样的文件?
你有没有兴趣了解呢?
那么,本篇,第七篇就是介绍在Linux中的目录配置问题。
其中有许多专业方面的文件,目前只做了解,以后会详细深入每一部分。
首先来说说Linux下的文件种类和扩展名的问题
像上一篇中所讲,可以用 ls -l命令列出文件所有属性,在10字符中,第一个极为即为文件类型
文件类型分为, -,d,l,b,c,s,p,等
其中最多的,肯定就是一般文件了
普通文件
[-],又可以分为纯文本文件 与 二进制文件
纯文本文件中基本都是可以直接读出来的数字,字母等信息,可以使用cat命令
如cat .vimrc
二进制文件,系统只认识二进制文件,比如你所使用的程序都是二进制文件,像上面的cat也是二进制文件
目录
[d],即为目录.接下来我们详述目录,可以近似的理解为”文件夹”
连接文件
[l],类似于Win中的”快捷方式”,有两种链接方式
设备及设备文件
因为在Linux中,一切皆为文件,所以设备也被抽象化为文件
分为块设备文件与字符设备文件
[b],表示系统随机访问的设备文件,sd*与hd*
[c],表示字符设备文件,为串行端口接口设备,例如鼠标,键盘都是.
套接字(sockets)
通常用于网络数据连接,目前不详述
管道(FIFO,pipe)
为一种特殊的文件类型,解决多个程序同时访问一个文件造成的错误上
- 扩展名
如上一篇所讲,扩展名在Linux系统中只是为了标明文件的属性,与文件能否执行无关!!!
而-x也只是决定有无执行的可能,能否执行成功与能否执行无关
最后:Linux文件名的限制,
一般情况下,建议不要使用* ? > < ; & ! \ ’ ” ` ( ) { }等符号作文件名
因为这些符号,在命令行行中是有其他特殊意义的!
Linux下的目录配置
之前说过,Linux只是Linus Torvalds先生所编写的系统内核,
所谓的“Linux系统”实质上是Linux内核 + 软件包 + 各种工具
的Linux Distribution。
那么,问题来了,各种的Linux发行版系统差别有多大?
每个人的Linux系统差这么多,怎么进行交流?
就目前而言,Redhat与Debian系占比很高,另外还有Arch Linux独领风骚
那么,这么多个系统的差别到底在哪里?
当时进行开发的虚拟团队,肯定是考虑到这一点的,那么,他们是怎么处理的?
这就要提到,Linux系统的目录配置标准:FHS
所谓“FHS”即是 Filesystem Hierarchy Standard(文件系统配置标准)
因为进行Linux Distribution即开发的个人,团体太多了
如果你更换一个版本的Linux系统,就需要重新学习Linux系统的目录配置,
岂不是很麻烦???
所以制定了FHS,这个Linux下,目录配置文件标准,以此来进行目录配置规范
据FHS官方文件指出:
其主要目的是,希望用户可以了解到已安装的软件通常放置在那个目录下,所以希望独立软件的开发商,操作系统的制作者,以及想要维护系统的用户,都能够遵循FHS的标准
也即是,FHS实质上重点在于规范系统在什么样的目录下应该放置什么样的文件数据
这样做,真的十分便于进行Linux系统的其他工作
FHS根据文件使用的频繁度和更新度,划分了下面四个标准
可分享的 | 不可分享的 |
---|---|
不变的 | /usr(软件放置) |
/opt(第三方软件) | |
可变动的 | /var/mail(邮件) |
/var/spool/news |
通过以上一览表,可以了解到Linux中文件的四种交互作用形态。
其中所举例的,是其中比较特色,典型的目录文件,之后会详解。
现在来分析那四个交互作用形态:
1.可分享的
所谓可分享的,之可以分享给其他系统挂载的目录,了解过“挂载”的概念,相信你能理解
可分享的意思了吧,就是指这部分文件,是可以分享给他人看的。
比如可以分享给网络上主机挂载的目录等。
2.不可分享的
所谓不可分享的,指的是与自己程序相关,这些都是只与你自己的电脑有关的东西
当然也就不适合,也不方便拿出来分享了。
3.不变的
所谓不变的,指的是不会随着发行版的不同而发生改变的文件,比如函数库,/lib中的文件
这些都是不随Linux发行版的改变而改变的文件,如内核文件。所以算作是不变的
4.可变动的
所谓可变动的指的是经常改变的文件,比如登录信息,新闻组等。
事实上,FHS标准对于Linux系统的目录配置文件,只定义了三层目录配置:
/ (root)目录:与开机系统有关
/usr目录:与软件安装/执行有关
/var目录:与系统运作过程有关
下面一个一个目录来详解:
/ :根目录,也可以叫做root目录 与开机系统有关的文件
/,根目录,是Linux系统中最重要的一个目录了!
所有的目录都是由根目录所衍生出来的,而且根目录还与机器的开机,还原,系统修复有关
所以,
FHS建议:
根目录/,所在的分区越小越好,而且应用程序安装的软件最好不要与根目录放在同一个分区下
,保证根目录越小越好。如此不但性能较好,根目录所在的文件系统也不容易发生问题。
鉴于以上的建议:根目录下应该存在这样的目录:
目录 | 应放置的文件内容 |
---|---|
/bin | /bin放置的是在单用户模式下还可以操作的命令 |
/boot | /boot中存放内核文件以及开机配置文件 |
/dev | 之前讲一切皆文件,/dev目录下都是设备文件 |
/etc | 系统的主要配置文件都存放在此处 |
/home | home目录即为用户目录 |
/lib | 系统开机时所用到的函数库 |
/media | “媒体”,指软盘,光盘等设备 |
/mnt | 用于暂时挂载的目录 |
/opt | 用于给第三方软件放置的目录 |
/root | 系统管理员目录 |
/sbin | 可以视为“service”,网络服务数据目录 |
/tmp | 一般用户或者暂时放置数据的地方 |
上面只是大体上的目录介绍,现在进行详细的 /根目录 内容介绍,
/bin (binary)
如上面所说,放置的是单用户模式下还可以被操作的命令,即指在一些特殊情况下,比如系统
崩坏,出现故障时,还可以使用的命令,如,cat,chmod,chown,date,mv,mkdir,cp,bash等。
/boot
其中主要包括开机时会使用到的文件,包括内核文件
注意:内核文件夹名为vmlinuz,请谨慎对待!
/etc (etceteras)
其中放置的是几乎所有主要的系统配置文件,例如个用户的账号信息,服务的起始文件,
一般用户可以查阅,只有root可以修改这些文件!
FHS建议不要放置可执行文件在此目录!!!
/dev (device)
其中一切的设备和接口都是以文件的形式存在的,通过访问文件来访问设备
比较重要的有:/dev/null, /dev/tty, /dev/hd*, /dev/sd*.
/home
其中 ~:表示本用户的主文件夹
~XXXX:表示XXXX用户的主文件夹(非本用户进行访问)
/lib
放置开机和/bin, /sbin目录中的命令成功使用所需要的函数库,
将函数库理解为”外挂“,只有调用他们,才能正常运行--鸟哥
/opt
即放置第三方软件的地方
/root
根据之前的笔记,你应该对root这个名字不陌生了吧?
那么,root文件夹为什么要放在根目录下呢? ? ?
这是因为,一旦系统出现问题,保证还可以进入root管理员用户,来进行系统的修复.
/sbin
其中包括了开机,修复,还原系统所需要的命令,十分重要!
/tmp
此目录下放置的是任何人都可以查看的暂存数据,所以,重要数据不能放在此目录下
而且FHS建议:在开机时,应该将/tmp目录下的数据全部删除!
FHS标准中,对于/root目录只定义了以上的几个目录,但是Linux系统中一般还会有下面的几个重要目录
这也是需要我们了解的:
/lost+found
此目录下是使用标准的ext2/ext3/ext4日志文件系统格式在会产生的一个目录
目的在与文件系统发生错误时,将一些丢失的片段放在该目录下
/proc
该目录是一个虚拟的文件系统,他放置的数据都是在内存当中的,例如系统的内核,进程,
外部设备的状态,网络状态等,
注:因为该目录是在内存中,所以不占据任何硬盘空间!
/sys
这个目录类似于/proc,同样不占据硬盘空间! ,其中存放着已加载的内核模块和
内核监测到的硬件设备信息等
上图即为 / 根目录下的目录信息
注意:开机过程中,仅仅只有根目录会被挂载,其他的分区是在开机完成之后才挂载上去的
所以,注定有一些目录是必须在/目录下的,不能分开!
这些目录是:
/etc:配置文件
/bin:重要执行文件
/dev:所需要的设备文件
/lib:执行文件所需要的函数块与内核所需要的模块
/sbin:重要的系统执行文件
接下来介绍/usr目录,/usr目录是与软件的安装/执行有关的目录
/usr目录下所存放的是可分享的与不可变动的数据文件
usr的缩写并非是”user”而是“UNIX Software Resource”
而且,建议,所有的软件应该合理的配置在/usr下的子目录里,而并非自行新建子目录
目录 | 应放置的文件内容 |
---|---|
/usr/X11R6/ | 为X Windows系统重要数据放置目录 |
/usr/bin/ | 绝大部分的用户可使用命令都在此处 |
/usr/include/ | C/C++的头文件,包含文件都在此处 |
/usr/lib/ | 各类应用软件的函数库,目标文件以及一些非惯用的执行文件或脚本 |
/usr/local/ | 用户自行安装的软件都在此处,区别于发行版自带的软件 |
/usr/sbin/ | 非系统正常运行所需要的系统命令 |
/usr/share/ | 放置共享文件 |
/usr/src/ | 一般源码存放在这里,而内核源码存放在/usr/src/linux下 |
以上即为/usr下的配置目录
显然./usr与/下有不少相同的目录,接下来就看看他们的区别:
/bin 与 /usr/bin
/bin是根目录下的目录,其与开机过程有关,所以要放在开机时就挂载的/目录下
/usr/bin 中存放的也是一般用户所能用到的大多数命令,但是与开机过程不挂钩
/lib 与 /usr/lib
/lib中放置的是在开机时首先会用到的函数库
/usr/lib中放置的则是各种应用软件的函数库,不一定开机时会用到!
/sbin 与 /usr/sbin
/sbin中存放的是超级用户 root一般使用的命令放置着系统管理所必须的程式
/usr/sbin中放置的则不一定是系统正常运行所必须的系统指令
/opt与 /usr/local
/opt在根目录下,存放第三方软件,即并非发行版Linux安装时就装的软件
/usr/local,系统管理员在本机的软件,是不是会想起每次安装软件,都要sudo yum/apt-get?
一般经由root安装的软件都放置于此,所以,实质上
你的软件大部分都是在/usr/local这个目录下的! ! !
接下来,谈谈最后一个FHS标准规定的配置目录/var (variable)
/usr是安装时会占据大空间的目录,/var是安装完系统后才会渐渐增大空间的目录
目录 | 放置的文件内容 |
---|---|
/var/cache/ | 应用程序本身产生的缓存文件 |
/var/lib | 程序运行时需要的数据放置的目录 |
/var/lock | 程序锁,对于只能同时一个用户使用的程序上锁,防止两人同时使用 |
/var/log | 登录文件放置的目录 |
/var/mail | 个人信箱的目录 |
/var/run | 程序的PID放置目录 |
/var/spool | 通常放置一些队列数据 |
小建议,在读完基础篇之后,可以挑战FHS官方文档
FHS只规定了/,/usr,/var三个目录的标准,所以各个版本的Linux Distribution
在一些小细节上有些差异,用户在使用前阅读说明文档即可。
以上所介绍的即为FHS规定所制定的Linux系统目录配置标准,
那么,有了这样一个目录,整个Linux中的文件系统是怎么样的呢?
目录树
目录树具有以下特性:
目录树的起点是根目录(/,root)
没一个目录不只能使用本地的文件系统,还可以挂载网络上的主机
每一个文件在目录树在中的文件名(包括完整路径,4096个字符)是独一无二的!
接下来,Linux文件系统的目录树结构如图:
看了上图,就可以理解Linux中的文件系统了吧?
接下来,我从Win与Linux的文件系统的差别来谈目录树结构
Win大家都使用过,磁盘有着明确的分区,分区有着明确的盘符,进入分区好的硬盘进行文件查找
十分方便,Win的文件系统更便于我们进行理解,
硬盘 -> 分区磁盘 -> 文件数据
但同时,Win这样处理不方便进行文件的管理,以后系统中的垃圾越来越多,杂乱
相对的,再来看Linux文件系统的配置
Linux中是,先存在一个虚拟文件系统,对没错,这个虚拟文件系统就是目录树
在Linux中进行文件查看是这样的
虚拟文件系统 -> 挂载硬盘 -> 分区 ->文件数据
所有进行的操作都是基于虚拟的文件系统,
看过上面的分析,你现在应该能理解目录树这个晦涩一点文件系统了吧!
但是,问题又来了,目录树,硬盘哪个先,哪个后呢?
这个问题就像鸡,蛋到底先有哪个? !这如果继续分析下去,就……
但是,Linux系统很巧妙地解决了这个问题,
就是,使用内存!,当你使用内存时,开机时,首先在内存中有这个虚拟的文件系统,之后的工作就好做了
现在,对于挂载,相信你也有更多的了解了吧,因为如果没有挂载,虚拟的文件系统是无法读出你的数据的! ! !
下面讨论一个问题,可以帮助你更透彻的了解Win与Linux系统文件系统区别
就是”FHS中明确建议,/目录尽可能的小,但是在目录树中,./是开始的目录,按理说,/不应该是最大的么”
这个问题,可以这样理解
之前提过,Linux系统使用虚拟的文件系统,就是说,无论怎样变,每个Linux系统都会
有这样一个虚拟的文件系统,就像上面的图一样,而实际进行系统使用时,
需要对,磁盘和目录进行匹配,挂钩,即挂载,
FHS标准的意思是,对/根目录挂在载一个小的分区里面,尽可能小的容量
即可以这样理解,在Linux系统中,目录上有母子关系的东西,在实际硬盘上可能相差甚远
而这与Win下就是不同的,Win下,比如C:\Windows下存在system32文件夹
那么,Windows文件夹一定比System32所占内存大,即在Win中上下级目录
不仅仅只有目录层面上的包含,在物理内存方面也是包含的关系!
最后,在讲完了目录配置的内容后,你一定迫不及待的想试试了吧!
让我来给你说说路径的内容
路径分为绝对路径 ,相对路径
绝对路径:必须以/根目录开始,比如访问home中的test目录
/home/Evilcrow/test
相对路径:不以/根目录开始,而是相对于当前目录进行目录访问,比如进行test目录访问
cd Evilcrow/test (当前是在home目录下)
简单而言,开头不是/即为相对路径
绝对路径,不管你当前在哪一级目录下都可以进行访问
另外,在每个目录下都存在:
. 表示当前目录
.. 表示上一级目录
关于Linux系统下目录配置的内容至此结束,有不对的地方,请指正.
PS:另外我有一个问题,
在鸟哥的书中讲到/bin与/usr/bin中文件的区别,意即这是两个文件夹,
但是我在ls -l根目录后,发现/bin为连接文件,即/bin与/usr/bin是为同一个目录
这又怎么解释呢? ? ?
June 10, 2017 7:04 PM