原文鸟哥的 Linux私房菜 第五章、Linux 的文件权限与目录配置

Linux最优秀的地方之一就在于他的多人多工环境。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了。Linux一般将文件可存取的身份分为三个类别,分别是owner/group/others,且三种身份各有read/write/execute 等权限。

Linux 文件权限

Linux文件属性

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[root@study ~]# ll -a
总用量 24
dr-xr-x---.  2      root    root    114      1月   5 17:03   .
dr-xr-xr-x. 17      root    root    224      1月   5 17:03   ..
-rw-------.  1      root    root    1835     1月   5 17:03   anaconda-ks.cfg
-rw-r--r--.  1      root    root    18       12月 29 2013    .bash_logout
-rw-r--r--.  1      root    root    176      12月 29 2013    .bash_profile
-rw-r--r--.  1      root    root    176      12月 29 2013    .bashrc
-rw-r--r--.  1      root    root    100      12月 29 2013    .cshrc
-rw-r--r--.  1      root    root    129      12月 29 2013    .tcshrc
类型和权限    连接数   拥有者   所属组   文件容量  最后被修改的时间  文件名
  • 第一栏代表这个文件的类型与权限(permission):
    • 第一个字符代表这个文件是『目录、文件或软连接等等』:
      • 当为[ d ]则是目录
      • 当为[ - ]则是文件
      • 若是[ l ]则表示为软连接(link file);
      • 若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取装置);
      • 若是[ c ]则表示为设备文件里面的序列端设备,例如键盘、滑鼠(一次性读取装置)。
    • 接下来的字符中,以三个为一组,且均为『rwx』的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
      • 第一组为『文件拥有者可具备的权限』;
      • 第二组为『加入此群组之帐号的权限』;
      • 第三组为『非本人且没有加入本群组之其他帐号的权限』。
  • 第二栏表示有多少文件名连结到此节点(i-node): 每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录,因此每个文件名都会连结到一个i-node!这个属性记录的,就是有多少不同的文件名连结到相同的一个i-node号码。
  • 第三栏表示这个文件(或目录)的『拥有者帐号』
  • 第四栏表示这个文件的所属群组
  • 第五栏为这个文件的容量大小,预设单位为bytes;
  • 第六栏为这个文件的建档日期或者是最近的修改日期: 这一栏的内容分别为日期(月/日)及时间。如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份而已。如果想要显示完整的时间格式,可以利用ls的选项,亦即:『ls -l –full-time』就能够显示出完整的时间格式了!
  • 第七栏为这个文件的文件名: 这个栏位就是文件名了。比较特殊的是:如果文件名之前多一个『 . 』,则代表这个文件为『隐藏文件』,例如上表中的.bashrc,该文件就是隐藏文件。

如何改变文件属性与权限

chgrp :改变文件所属群组

这个指令就是change group的缩写,要被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
## chgrp [-R] dirname/filename ... 
## 选项与参数:
## -R : 进行递回(recursive)的持续变更,连同子目录下的所有文件、目录
##      都更新成为这个群组。常常用在变更某一目录内所有的文件的情况。
## 范例: 
[root@study ~]# chgrp wheel anaconda-ks.cfg
[root@study ~]# ll
总用量 4
-rw-------. 1 root wheel 1835 1月   5 17:03 anaconda-ks.cfg
[root@study ~]# chgrp user anaconda-ks.cfg
chgrp: 无效的组:"user"

chown :改变文件拥有者

改变拥有者就是change owner。要注意的是,使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
## chown [-R] 帐号名称 文件或目录 
## chown [-R] 帐号名称:群组名称 文件或目录
## 选项与参数:
## -R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更
## 范例: 将anaconda-ks.cfg的拥有者改为bin这个帐号: 
[root@study ~]# chown bin anaconda-ks.cfg
[root@study ~]# ll
总用量 4
-rw-------. 1 bin wheel 1835 1月   5 17:03 anaconda-ks.cfg

## 范例: 将anaconda-ks.cfg的拥有者与群组改回为root: 
[root@study ~]# chown root:root anaconda-ks.cfg
[root@study ~]# ll
总用量 4
-rw-------. 1 root root 1835 1月   5 17:03 anaconda-ks.cfg

⭐️⭐有时候是需要变更文件的拥有者的,最常见的例子就是在复制文件给你之外的其他人时,由于复制行为(cp)会复制执行者的属性与权限,即使你将文件拿给bin这个使用者了,那他仍然无法修改的(看属性/权限就知道了), 所以就必须要将这个文件的拥有者与群组修改一下!

chmod :改变文件的权限, SUID, SGID, SBIT等等的特性-

  • 数字类型改变文件权限 Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限,我们可以使用数字来代表各个权限,各权限的分数对照表如下: r:4 w:2 x:1 每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的, 例如当权限为: [-rwxrwx—] 分数则是: owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others= — = 0+0+0 = 0

  • 符号类型改变文件权限 chmod | u g o a(all) | +(加入)-(除去)=(设定) | r w x | 文件或目录 假如我们要『设定』一个文件的权限成为『-rwxr-xr-x』时,基本上就是:

    • user (u):具有可读、可写、可执行的权限;
    • group 与others (g/o):具有可读与执行的权限。

    所以就是:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    [root@study ~]# chmod u=rwx,go=rx .bashrc 
    #注意喔!那个u=rwx,go=rx是连在一起的,中间并没有任何空白字元!
    [root@study ~]# ls -al .bashrc 
    -rwxr-xr-x.  1 root root  176 12月 29 2013 .bashrc
      
    # 加权限
    [root@study ~]# chmod a+w .bashrc
    [root@study ~]# ll -a .bashrc
    -rwxrwxrwx. 1 root root 176 12月 29 2013 .bashrc
    
    # 减权限
    [root@study ~]# chmod a-x .bashrc
    [root@study ~]# ll -a .bashrc
    -rw-rw-rw-. 1 root root 176 12月 29 2013 .bashrc
    
    #测试完毕得要改回来
    [root@study ~]# chmod 644 .bashrc
    

目录与文件的权限意义:

权限对文件的重要性

权限对于文件来说,他的意义是这样的:

  • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x (eXecute):该文件具有可以被系统执行的权限。

⭐️⭐我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟文件名是没有绝对的关系的! 至于最后一个w这个权限呢?当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, ⭐️⭐但并不具备有删除该文件本身的权限!

权限对目录的重要性

目录主要的内容在记录文件名清单,文件名与目录有强烈的关连!所以如果是针对目录时,那个r, w, x对目录的意义是

  • r (read contents in directory): 表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。所以你就可以利用ls这个指令将该目录的内容列表显示出来!

  • w (modify contents of directory): 这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有改变该目录结构清单的权限,也就是底下这些权限:

    • 建立新的文件与目录;
    • 删除已经存在的文件与目录(不论该文件的权限为何!)
    • 将已存在的文件或目录进行重命名;
    • 移动该目录内的文件、目录位置。
  • x (access directory): 目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是使用者能否进入该目录成为工作目录的用途!所谓的工作目录(work directory)就是你目前所在的目录!举例来说,当你登入Linux时,你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)!

⭐️⭐要注意:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给!

例子:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
## 先用root的身份建立所需要的文件与目录环境
[root@study ~]# cd /tmp/
[root@study tmp]# mkdir test
[root@study tmp]# chmod 744 test
[root@study tmp]# touch test/test
[root@study tmp]# chmod 600 test/test
[root@study tmp]# ls -ald test test/test
drwxr--r--. 2 root root 18 1月   6 13:41 test
-rw-------. 1 root root  0 1月   6 13:41 test/test

## 切换到普通用户
[kiyon@study ~]$ cd /tmp/
[kiyon@study tmp]$ ls -l test
ls: 无法访问test/test: 权限不够
总用量 0
-????????? ? ? ? ?            ? test
[kiyon@study tmp]$ cd test
-bash: cd: test: 权限不够

## 1.先用root的身份来搞定/tmp/test的属性、权限设定:
[root@study ~]# cd /tmp/
[root@study tmp]# chown kiyon /tmp/test/
[root@study tmp]# ls -ld /tmp/test/
drwxr--r--. 2 kiyon root 18 1月   6 13:41 /tmp/test/

## 2.再用kiyon的帐号来处理一下/tmp/test/test这个文件看看:
[kiyon@study test]$ cd /tmp/test/
## 确实是可以进入目录
[kiyon@study test]$ ls -l
总用量 0
## 文件不是kiyon的!
-rw-------. 1 root root 0 1月   6 13:41 test
## 尝试杀掉这个文件看看!
[kiyon@study test]$ rm test
rm:是否删除有写保护的普通空文件 "test"?y
## 竟然可以删除

Linux文件种类与后缀名

Linux 中的一个概念:一切皆文件

文件种类

  • 正规文件(regular file ): 就是一般我们在进行存取的类型的文件,在由ls -al所显示出来的属性方面,第一个字符为[ - ],例如[-rwxrwxrwx ]。另外,依照文件的内容,又大略可以分为:

    • 纯文本文件(ASCII):这是Linux系统中最多的一种文件类型啰,称为纯文本文件是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。几乎只要我们可以用来做为设定的文件都属于这一种文件类型。举例来说,你可以下达『 cat ~/.bashrc 』就可以看到该文件的内容。(cat是将一个文件内容读出来的指令)
    • 二进制文件(binary):系统其实仅认识且可以执行二进制文件(binary file)。Linux当中的可执行文件(scripts,文本批处理不算)就是这种格式。举例来说,刚刚下达的指令cat就是一个binary file。
    • 数据格式文件(data):有些程序在运行的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件(data file)。举例来说,我们的Linux在使用者登入时,都会将日志文件的数据记录在/var/log/wtmp那个文件内,该文件是一个data file,他能够通过last这个指令读出来!但是使用cat时,会读出乱码~因为他是属于一种特殊格式的文件。
  • 目录(directory): 目录的第一个属性为[ d ],例如[drwxrwxrwx]。

  • 软连接(link): 就是类似Windows系统底下的快捷方式。第一个属性为 l ,例如[lrwxrwxrwx] ;

  • 设备文件(device): 与系统周边及储存等相关的一些文件,通常都集中在/dev这个目录之下!通常又分为两种:

    • 区块(block)设备文件:就是一些储存数据,以提供系统随机存取的周边设备,举例来说,硬盘与软盘等就是。你可以随机的在硬盘的不同区块读写,这种装置就是区块装置!你可以自行查一下/dev/sda看看,会发现第一个属性为[ b ]!

    • 字符(character)设备文件:就是是一些序列端口(Serial port)的周边设备,例如键盘、滑鼠等等!这些设备的特色就是『一次性读取』的,不能够截断输出。举例来说,你不可能让鼠标『跳到』另一个画面,而是『连续性滑动』到另一个地方!第一个属性为[ c ]。

  • 数据接口文件(sockets): 既然被称为数据接口文件,这种类型的文件通常被用在网络上的数据传输。我们可以启动一个程序来监听用户端的要求,而用户端就可以通过这个socket来进行数据的沟通了。第一个属性为[ s ],最常在/run或/tmp这些个目录中看到这种文件类型了。使用man socket查看详细信息。

  • 数据输送文件(FIFO, pipe): FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。FIFO是first-in-first-out的缩写。第一个属性为[p] 。使用man fifo查看详细信息。

Linux文件后缀名:

基本上,Linux的文件是没有所谓的『后缀名』的,一个Linux文件能不能被执行,与他的第一栏的十个属性有关,与文件名根本一点关系也没有。这个观念跟Windows的情况不相同!在Windows底下,能被执行的文件后缀名通常是.com .exe .bat等等,而在Linux底下,只要你的权限当中具有x的话,例如[ -rwxr-xr-x ]即代表这个文件具有可以被执行的能力!具有『可执行的权限』以及『具有可执行的代码』是两回事!在Linux 底下,你可以让一个文本文件,例如text.txt 具有『可执行的权限』 (加入x 权限即可), 但是这个文件明显无法执行,因为他不具备可执行的代码!

不过我们仍然希望可以藉由后缀名来了解该文件是什么东西,通常我们还是会以适当的后缀名来表示该文件是什么种类的。底下有数种常用的后缀名:

  • *.sh : 脚本或批处理文件(scripts),因为批处理文件是使用shell写成的,所以后缀名就写成.sh;

  • *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为gunzip, tar 等等的,由于不同的压缩软件,而取其相关的后缀名啰!

  • *.html, *.php:网页相关文件,分别代表HTML 语法与PHP 语法的网页文件!.html 的文件可使用网页浏览器来直接开启,至于.php 的文件, 则可以通过client 端的浏览器来server 端浏览,以得到运算后的网页结果!

Linux文件长度限制:

在Linux底下,使用传统的Ext2/Ext3/Ext4文件系统以及近来被CentOS 7 当作预设文件系统的xfs 而言,针对文件的文件名长度限制为:

  • 单一文件或目录的最大容许文件名为255bytes,以一个ASCII 英文占用一个bytes 来说,则大约可达255 个字符长度。若是以每个中文字占用2bytes 来说, 最大文件名就是大约在128 个中文字!

Linux文件名称的限制:

由于Linux在文字界面下的一些指令操作关系,一般来说,你在设定Linux底下的文件名称时, 最好可以避免一些特殊字元比较好!例如底下这些:

  • * ? > < ; & ! | \ ' " ` ( ) { }

因为这些符号在文字界面下,是有特殊意义的!另外,文件名称的开头为小数点『.』时, 代表这个文件为『隐藏文件』!同时,由于指令下达当中,常常会使用到-option 之类的选项, 所以最好也避免将文件文件名的开头以- 或+ 来命名!

Linux目录配置

Linux目录配置的依据–FHS

为了统一Linux目录配置方法,就有所谓的Filesystem Hierarchy Standard (FHS)标准的出炉了! 根据FHS的标准文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于哪个目录下,所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的使用者,都能够遵循FHS的标准。FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:

可分享的(shareable) 不可分享的(unshareable)
不变的(static) /usr (软件放置处) /etc (配置文件)
/opt (第三方软件) /boot (开机与核心文件)
可变动的(variable) /var/mail (使用者邮件信箱) /var/run (程序相关)
/var/spool/news (新闻群组) /var/lock (程序相关)
  • 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与使用者的邮件等数据,是能够分享给网络上其他主机挂载用的目录;
  • 不可分享的:自己机器上面运行的装置文件或者是与程序有关的socket文件等,由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
  • 不变的:有些数据是不会经常变动的,跟随着distribution而不变动。例如函数库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
  • 可变动的:经常改变的数据,例如日志文件、一般用户可自行收受的新闻群组等。

事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

  • / (root, 根目录):与开机系统有关;
  • /usr (unix software resource):与软件安装/执行有关;
  • /var (variable):与系统运行过程有关。

根目录(/) 的意义与内容:

根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。 因此FHS标准建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。

目录 应放置文件内容
第一部份:FHS 要求必须要存在的目录
/bin 系统有很多放置执行文件的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。 在/bin底下的指令可以被root与一般帐号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。
/boot 这个目录主要在放置开机会使用到的文件,包括Linux核心文件以及开机选单与开机所需配置文件等等。 Linux kernel常用的文件名为:vmlinuz,如果使用的是grub2这个开机管理程序,则还会存在/boot/grub2/这个目录!
/dev 在Linux系统上,任何装置与周边设备都是以文件的型态存在于这个目录当中的。你只要通过存取这个目录底下的某个文件,就等于存取某个装置啰~比要重要的文件有/dev/null, /dev/zero, /dev/tty , /dev/loop*, / dev/sd*等等
/etc 系统主要的配置文件几乎都放置在这个目录内,例如人员的帐号密码文件、各种服务的启始文件等等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的,但是只有root有权力修改。FHS建议不要放置可执行文件(binary)在这个目录中喔。比较重要的文件有: /etc/modprobe.d/, /etc/passwd, /etc/fstab, /etc/issue等等。另外FHS还规范几个重要的目录最好要存在/etc/目录下:1. /etc/opt(必要):这个目录在放置第三方软件/opt的相关配置文件;2. /etc/X11/(建议):与X Window有关的各种配置文件都在这里,尤其是xorg.conf这个X Server的配置文件;3. /etc/sgml/(建议):与SGML格式有关的各项配置文件;4. /etc/xml/(建议):与XML格式有关的各项配置文件
/lib 系统的函数库非常的多,而/lib放置的则是在开机时会用到的函数库,以及在/bin或/sbin底下的指令会呼叫的函数库而已。什么是函数库呢?妳可以将他想成是『外挂』,某些指令必须要有这些『外挂』才能够顺利完成程序的执行。另外FHS还要求底下的目录必须要存在:/lib/modules/:这个目录主要放置可替换式的核心相关模块(驱动程序)!
/media media是『媒体』的英文,顾名思义,这个/media底下放置的就是可移除的装置啦! 包括软盘、光盘、DVD等等装置都暂时挂载于此。常见的文件名有:/media/floppy, /media/cdrom等等。
/mnt 如果想要暂时挂载某些额外的装置,一般建议可以放置到这个目录中。在早些时候,这个目录的用途与/media相同!只是有了/media之后,这个目录就用来暂时挂载用了。
/opt 这个是给第三方协力软件放置的目录。另外,如果想要自行安装额外的软件(非原本的distribution提供的),那么也能够将软件安装到这里来。不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下!
/run 早期的FHS 规定系统开机后所产生的各项资讯应该要放置到/var/run 目录下,新版的FHS 则规范到/run 底下。由于/run 可以使用记忆体来模拟,因此性能上会好很多!
/sbin Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来『设定』系统,其他使用者最多只能用来『查询』而已。 放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, mkfs等等。
/srv srv可以视为『service』的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。常见的服务例如WWW, FTP等等。举例来说,WWW服务器需要的网页数据就可以放置在/srv/www/里面。不过,系统的服务数据如果尚未要提供给互联网任何人浏览的话,预设还是建议放置到/var/lib 底下即可。
/tmp 这是让一般使用者或者是正在执行的程序暂时放置文件的地方。这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目录!因为FHS甚至建议在开机时,应该要将/tmp下的数据都删除!
/usr 第二层FHS 设定,后续介绍
/var 第二层FHS 设定,主要为放置变动性的数据,后续介绍
第二部份:FHS 建议可以存在的目录
/home 这是系统预设的使用者家目录(home directory)。在你新增一个一般使用者帐号时, 预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号:~:代表目前这个使用者的家目录;~kiyon:则代表kiyon的家目录!
/lib 用来存放与/lib 不同的格式的二进位函数库,例如支援64 位的/lib64 函数库等
/root 系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时, 该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。

/usr 的意义与内容:

依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable, static),如果知道如何通过网络进行分区的挂载(例如在服务器篇会谈到的NFS服务器 ),那么/usr确实可以分享给区域网络内的其他主机来使用! FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的子目录,而不要自行建立该软件自己独立的目录。 一般来说,/usr的子目录建议有底下这些:

目录 应放置文件内容
第一部份:FHS 要求必须要存在的目录
/usr/bin/ 所有一般用户能够使用的指令都放在这里!目前新的CentOS 7 已经将全部的使用者指令放置于此,而使用软连接的方式将/bin 连结至此!也就是说, /usr/bin 与/bin 是一模一样了!另外,FHS 要求在此目录下不应该有子目录!
/usr/lib/ 基本上,与/lib 功能相同,所以/lib 就是连结到此目录中的!
/usr/local/ 系统管理员在本机自行安装自己下载的软件(非distribution预设提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别啦!你可以自行到/usr/local去看看,该目录下也是具有bin, etc, include, lib…的子目录!
/usr/sbin/ 非系统正常运行所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)!不过基本功能与/sbin 也差不多, 因此目前/sbin 就是连结到此目录中的。
/usr/share/ 主要放置只读架构的数据文件,当然也包括共享文件。在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件!在此目录下常见的还有这些子目录:
/usr/share/man: 线上说明文件
/usr/share/doc: 软件杂项的文件说明
/usr/share/zoneinfo: 与时区有关的时区文件
第二部份:FHS 建议可以存在的目录
/usr/games/ 与游戏比较相关的数据放置处
/usr/include/ c/c++等程序语言的文件头(header)与包含文件(include)放置处,当我们以tarball方式(*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含文件!
/usr/libexec/ 某些不被一般使用者惯用的执行文件或脚本(script)等等,都会放置在此目录中。例如大部分的X视窗底下的操作指令,很多都是放在此目录下的。
/usr/lib/ 与/lib/功能相同,因此目前/lib 就是连结到此目录中
/usr/src/ 一般源码建议放置到这里,src有source的意思。至于核心源码则建议放置到/usr/src/linux/目录下。

/var 的意义与内容:

如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。因为/var目录主要针对常态性变动的文件,包括缓存(cache)、日志文件(log file)以及某些软件运行所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。常见的次目录有:

目录 应放置文件内容
/var/cache/ 应用程序本身运行过程中会产生的一些缓存文件;
/var/lib/ 程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去!
/var/lock/ 某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。目前此目录也已经挪到/run/lock 中!
/var/log/ ⭐️⭐这是日志文件放置的目录!里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的资讯)等。
/var/mail/ 放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中!通常这两个目录是互为连结文件!
/var/run/ 某些程序或者是服务启动后,会将他们的PID放置在这个目录下。与/run 相同,这个目录连结到/run 去了!
/var/spool/ 这个目录通常放置一些队列数据,所谓的『队列』就是排队等待其他程序使用的数据! 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中,但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中,等到被送出后就被删除。如果是定时任务数据(crontab),就会被放置到/var/spool/cron/目录中!

重点回顾

  • Linux的每个文件中,可分别给予拥有者、群组与其他人三种身份个别的rwx 权限;
  • 群组最有用的功能之一,就是当你在团队开发的时候,且每个帐号都可以支持多个群组;
  • 利用ls -l显示的文件属性中,第一个栏位是文件的权限,共有十个位,第一个位是文件类型, 接下来三个为一组共三组,为拥有者、群组、其他人的权限,权限有r,w,x三种;
  • 如果文件名之前多一个『 . 』,则代表这个文件为『隐藏文件』;
  • 若需要root的权限时,可以使用su - 这个指令来切换身份。处理完毕则使用exit 离开su 的指令环境。
  • 更改文件的群组支援可用chgrp,修改文件的拥有者可用chown,修改文件的权限可用chmod
  • chmod修改权限的方法有两种,分别是符号法与数字法,数字法中r,w,x分数为4,2,1;
  • 对文件来讲,权限的功能为:
    • r:可读取此一文件的实际内容,如读取文本文件的文字内容等;
    • w:可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
    • x:该文件具有可以被系统执行的权限。
  • 对目录来说,权限的功能为:
    • r (read contents in directory)
    • w (modify contents of directory)
    • x (access directory)
  • 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
  • 能否读取到某个文件内容,跟该文件所在的目录权限也有关系(目录至少需要有x 的权限)。
  • Linux文件名的限制为:单一文件或目录的最大容许文件名为255 个英文字元或128 个中文字元;
  • 根据FHS的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下
  • FHS订定出来的四种目录特色为:shareable, unshareable, static, variable等四类;
  • FHS所定义的三层主目录为:/, /var, /usr三层而已;