Linux 之旅3:文件权限与目录配置

Linux 之旅3:文件权限与目录配置

Linux与Windows最大的不同之一就是权限管理,如果接触过一点Linux的就会知道,Linux下的文件系统的权限相关设置非常值复杂,一旦设置错了就会导致应用运行不了,所以这篇笔记会说明Linux下的权限管理相关的初级内容。

在说明Linux相关内容之前,先说明一个有助于学习Linux的小技巧。

使用SSH连接虚拟机(可选)

如果你和我一样是通过虚拟机(比如我用的VMware)安装和学习Linux,难免会遇到在虚拟机和本机来回切换的问题,虽然按一下CTRL+ALT就可以切出,但依然不是很方便,更别提遇到问题时候复制粘贴代码了。

其实如果你像我在Linux 之旅 2:开关机与帮助文档中那样设置好了固定IP,并且在虚拟机的网络设置中设置了桥接模式的话,我们的虚拟机就相当于一台局域网中的实体Linux主机,自然也可以通过SSH进行远程连接使用。

而且因为我们学习Linux大多数都是通过字符终端,所以SSH完全可以满足我们的学习需要。

具体的SSH连接大家可以选择自己喜欢的工具,我这里是在Windows Terminal中使用ssh。

如果你不知道怎么安装Windows Terminal,可以阅读Windows Terminal+PowerShell 配置

在进行连接之前如果你不确定虚拟机的IP,可以先在虚拟机的终端中执行:

[icexmoon@xyz ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.105  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 2409:8a7a:8ca9:bf30:3b53:626c:3d3f:4022  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::d602:a3fd:7e74:dc5e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:72:06:e1  txqueuelen 1000  (Ethernet)
        RX packets 6759  bytes 9603802 (9.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1602  bytes 123899 (120.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 48  bytes 4080 (3.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 48  bytes 4080 (3.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:c8:46:0d  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

这里ens33中的192.168.1.105就是我的虚拟机的IP。

如果是实体Linux主机,一般网卡是eth0之类的标识。

确认好IP以后就可以使用工具连接了,我这里是在运行虚拟机的笔记本的Windows Terminal中执行:

ssh icexmoon@192.168.1.105
The authenticity of host '192.168.1.105 (192.168.1.105)' can't be established.
ECDSA key fingerprint is SHA256:1QhEZXO0k0317Urj1emTYXg7gkmi1xlgB0hjhQnvTuE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.105' (ECDSA) to the list of known hosts.
icexmoon@192.168.1.105's password:
Last login: Fri Aug  6 16:39:04 2021

其中icexmoon@192.168.1.105是登录虚拟机所需的用户名和ip,当然可以使用root用户登录,但不推荐。

按提示输入相应的密码后就可以成功登录了。

通过这种方式无论是复制还是粘贴shell命令都会方便不少。

文件属性

ls

在Linux中,文件具有复杂的权限设定,这一切都可以使用ls命令来查看:

[icexmoon@xyz ~]$ ls -al
总用量 44
drwx------. 15 icexmoon icexmoon 4096 86 16:39 .
drwxr-xr-x.  3 root     root       22 724 14:45 ..
-rw-------.  1 icexmoon icexmoon  203 729 18:47 .bash_history
-rw-r--r--.  1 icexmoon icexmoon   18 41 2020 .bash_logout
-rw-r--r--.  1 icexmoon icexmoon  193 41 2020 .bash_profile
-rw-r--r--.  1 icexmoon icexmoon  231 41 2020 .bashrc
drwx------. 17 icexmoon icexmoon 4096 729 15:45 .cache
drwxr-xr-x. 16 icexmoon icexmoon 4096 729 16:16 .config
drwx------.  3 icexmoon icexmoon   25 724 14:49 .dbus
-rw-------.  1 icexmoon icexmoon   16 724 14:49 .esd_auth
-rw-------.  1 icexmoon icexmoon 1864 86 16:39 .ICEauthority
-rw-------.  1 icexmoon icexmoon   35 729 17:48 .lesshst
drwx------.  3 icexmoon icexmoon   19 724 14:49 .local
drwxr-xr-x.  6 icexmoon icexmoon   81 729 15:43 .mozilla
-rw-rw-r--.  1 icexmoon icexmoon   22 729 18:35 test.py
drwxr-xr-x.  2 icexmoon icexmoon    6 724 14:49 公共
drwxr-xr-x.  2 icexmoon icexmoon    6 724 14:49 模板
drwxr-xr-x.  2 icexmoon icexmoon    6 724 14:49 视频
drwxr-xr-x.  2 icexmoon icexmoon    6 724 14:49 图片
drwxr-xr-x.  2 icexmoon icexmoon    6 724 14:49 文档
drwxr-xr-x.  2 icexmoon icexmoon    6 724 14:49 下载
drwxr-xr-x.  2 icexmoon icexmoon    6 724 14:49 音乐
drwxr-xr-x.  2 icexmoon icexmoon    6 724 14:49 桌面

命令参数a的意思是显示所有文件和子目录,l的意思是显示详细信息,这两个参数比较常见,更详细的参数可以使用ls --help进行查看。

  • lslist dir的意思,比较有意思的是windows的cmd命令中的类似命令是dir
  • 有的Linux发行版支持命令ll,其效果等同于ls -l,其实前者就是后者的一个别名,关于别名会在后续学习中进行说明。

就像上面演示的那样,ls后不跟目录或文件的时候是打印当前工作目录的内容,如果跟了目录,就会打印指定目录或文件的内容:

[icexmoon@xyz ~]$ ls -al /tmp/test
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 21 root     root     4096 87 13:19 ..
-rwxr-xr-x.  1 icexmoon icexmoon    0 86 17:56 test.py
[icexmoon@xyz ~]$ ls -al /tmp/test/test.py
-rwxr-xr-x. 1 icexmoon icexmoon 0 86 17:56 /tmp/test/test.py

也可以指定仅打印目标目录自身,也就是不包含其下内容:

[icexmoon@xyz ~]$ ls -ald /tmp/test
drwxrwxr-x. 2 icexmoon icexmoon 21 86 17:56 /tmp/test

此外,还可以跟多个目录或者文件名,一并打印:

[icexmoon@xyz ~]$ ls -ald .local .cache .dbus
drwx------. 17 icexmoon icexmoon 4096 729 15:45 .cache
drwx------.  3 icexmoon icexmoon   25 724 14:49 .dbus
drwx------.  3 icexmoon icexmoon   19 724 14:49 .local

还可以使用通配符:

[icexmoon@xyz ~]$ ls -al .bash*
-rw-------. 1 icexmoon icexmoon 629 87 13:20 .bash_history
-rw-r--r--. 1 icexmoon icexmoon  18 41 2020 .bash_logout
-rw-r--r--. 1 icexmoon icexmoon 193 41 2020 .bash_profile
-rw-r--r--. 1 icexmoon icexmoon 231 41 2020 .bashrc

现在来说明一下ls命令打印出的信息的意义:

  • 第一个字母代表项目类型,d表示目录,-表示文件,这两个最常见,此外还有l表示链接,b表示外接存储设备,c表示串行端口设备等。
  • 项目类型后边的是项目的权限,比如-rw-rw-r--. 1 icexmoon icexmoon 22 7月 29 18:35 test.py,表示这个文件的权限是rw-rw-r--,关于这个权限会在之后详细说明。
  • 第二列是一个数字,这表示该项目的引用次数,这个内容与Linux文件系统的知识直接相关,会在后续学习中详细说明。
  • 第三列是该项目的拥有者(owner)。
  • 第四列是该项目所在的组(group)。
  • 第五列是项目的大小,单位是Byte,当然如果想用更直观的单位打印,比如M和G等可以在参数中加上-h。值得注意的是如果是文件,这里显示的是文件的实际大小,而如果是目录,则会是统一个6个字节,无论其下有大的文件,都会显示这么大,关于原因同样需要学习文件系统以后才能明白。
  • 接下来是文件最后一次被修改的时间(mtime)。
  • 最后就是项目名称了。

在Linux中,所有的设备都是以文件的形式存在的,所以这里的“项目”其实指的就是目录或者文件。

owner,group,other

现在详细说明一下上边的所谓的“项目的权限”的含义。

在Linux中,文件或目录的权限被分为三个维度分别设置,即:

  • 项目的所有者(owner)。
  • 项目所在的组(group)。
  • 其它人(other)。

项目的所有者很好理解,就是这个东西是属于哪个Linux用户的,要知道Linux与Windows不同,不单单会为真实的需要登录系统的人类创建系统用户,也同样会为一些有需要的应用创建用户,比如我在我的VPS上就发现网站目录www下的文件和目录的所有者是Apache,者明显是Apache应用需要的用户。

项目所在的组是指的用户组,Windows上好像也有用户组的概念,但基本上没什么用,但Linux上的这个用户组相当重要,每个Linux用户都会属于一个或多个用户组,如果某个文件归属于某个用户组,则该用户组下的用户操作这个文件的时候都具有该权限。

其它人也不难理解,如果一个用户即不是这个项目的所有者,也不在这个项目指定的组中,则就是属于其它人,自然也按照这个其它人的权限对待。

下面我们看具体的rwx的含义。

rwx

权限相关的这三个字母分别代表:

  • r (read),读
  • w (write),写
  • x (execute),执行

此外如果不具有某个权限,则使用-标记,比如常见的r-x的含义为可读可执行,但不可写。

如果是普通的文本文件,则rw比较重要,前者决定有没有读权限,后者决定有没有写权限。因为文本文件本身是没法像应用一样执行的,所以x权限反而无所谓。

如果是二进制可执行文件,则rx比较重要,一般要具有这两个权限才能够顺利执行,当然如果要能更新程序,则需要w权限。

如果是目录,则三个权限都很重要,r表示能否从目录中读取子目录和文件信息,w表示能否在目录中添加或者删除一个文件或者子目录,x表示能不能用cd命令将当前工作目录切换到该目录。

现在举例说明:

对于-rw-rw-r--. 1 icexmoon icexmoon 22 7月 29 18:35 test.py这个文件。

其拥有者和所在的组是icexmoon,也就是当前用户,而权限rw-rw-r--则说明对于用户icexmoon可读可写,对于用户组icexmoon内的用户也是可读可写,但对于其它人就只有读权限。

这里需要注意的是这个权限是受目录层级自上而下影响的,比如说有个文件/root/home/test.py,这个文件的拥有者就是当前登录用户,且权限是rwx,你是有所有权限的,但是如果你不具有进入/root/home这个目录的权限,比如说这个目录的拥有者不是你,且对于other的权限是---,那你自然是没戏的。

此外,所有的这些设置对于root用户都是没用的,在Linux中,root用户拥有无限的权力,可以做任何事,所以最好不要使用root来进行日常登录和操作,那样会让你的权限设置形同虚设,一不小心执行了错误的命令就可能带来灾难性后果。

修改文件属性与权限

常用的修改文件属性与权限的命令有:

  • chgrp,修改文件所属用户组
  • chown,修改文件的拥有者
  • chmod,修改文件的权限

ch是change的缩写,所以chgrp是change group的意思,这样比较容易记忆。

chgrp

修改用户组的前提是目标用户组要在Linux中存在,我们可以通过下面的命令查看已有的用户组:

[icexmoon@xyz ~]$ cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:icexmoon
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:

下面进行实际演示:

[icexmoon@xyz ~]$ cd /tmp
[icexmoon@xyz tmp]$ mkdir test
[icexmoon@xyz tmp]$ cd test
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon    6 86 17:55 .
drwxrwxrwt. 18 root     root     4096 86 17:55 ..
[icexmoon@xyz test]$ touch test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 17:55 ..
-rw-rw-r--.  1 icexmoon icexmoon    0 86 17:56 test.py
[icexmoon@xyz test]$ cat test.py
[icexmoon@xyz test]$ su -
密码:
上一次登录:四 729 16:51:29 CST 2021pts/0 上
[root@xyz ~]# cd /tmp/test
[root@xyz test]# chgrp root test.py
[root@xyz test]# ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 17:57 ..
-rw-rw-r--.  1 icexmoon root        0 86 17:56 test.py
[root@xyz test]# exit
登出
  • 其中su -是进行提权,切换到root用户下进行后续操作,因为只有root才可以执行chgrp命令,执行完后可以通过exit退出。
  • touch命令可以创建一个空文件。

可以看到执行完毕后test.py文件的组变成了root

chown
[icexmoon@xyz test]$ su -
密码:
上一次登录:五 86 17:56:49 CST 2021pts/1 上
[root@xyz ~]# chown root test.py
chown: 无法访问"test.py": 没有那个文件或目录
[root@xyz ~]# cd /tmp/test
[root@xyz test]# chown root test.py
[root@xyz test]# ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 18:04 ..
-rw-rw-r--.  1 root     root        0 86 17:56 test.py
[root@xyz test]# chown icexmoon:icexmoon test.py
[root@xyz test]# ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 18:05 ..
-rw-rw-r--.  1 icexmoon icexmoon    0 86 17:56 test.py
[root@xyz test]# exit
登出

一开始的错误是因为工作目录不对,提权后默认会是root的家目录。

chownchgrp命令的使用方法相似,没啥好说的,此外chown还可以同时修改owner和group,比如示例中的chown icexmoon:icexmoon test.py

chmod

修改权限的命令稍微复杂一些,具体的修改方式分为两种:字母方式和数字方式。

先介绍难一点的数字方式。

前边已经说过了,权限以rwx的方式进行设置,而如果将这三个固定顺序的权限用二进制来表示,1表示有该权限,0表示没有,则可以使用三位二进制来代替字母表示,这就是权限的数字表示。

具体举例,如果一个文件的权限是rwxr-xr-x,则用二进制表示就是111101101

不过在应用中我们需要将二进制转换为十进制,在转换的时候需要分别以三个维度来转换。

具体举例,如果一个文件的权限是rwxr-xr-x,则其owner的权限用二进制表示是111,转换为十进制就是1*2^2+1*2^1+1*2^0=7,以此类推可以算出group和other对应的十进制权限,将这三个十进制权限数字连起来就是755,也就是该权限对应的数字形式。

这里有个快速运算的诀窍,三位二进制如果是111,每个进位对应的十进制数字是固定的421,在具体转换中可以快速使用这三个位对应的十进制数字进行相加得出结果,比如rwx就是4+2+1=7,r-x就是4+1=5,r–就是4。

下面我们具体操作:

[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 18:05 ..
-rw-rw-r--.  1 icexmoon icexmoon    0 86 17:56 test.py
[icexmoon@xyz test]$ chmod 777 test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 18:05 ..
-rwxrwxrwx.  1 icexmoon icexmoon    0 86 17:56 test.py
[icexmoon@xyz test]$ chmod 744 test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 18:20 ..
-rwxr--r--.  1 icexmoon icexmoon    0 86 17:56 test.py

当然,在执行chmod前要确认你是否为当前用户的拥有者。

这里我们先通过chmod 777 test.py将文件设置为了任何人都有全部权限的状态,这当然是很不安全的,但不得不说也很适合小白,很久之前我不会Linux的时候就是这么解决服务器的权限问题的…

因为test.py本身是一个Python代码文件,也就是文本文件,所以合理的权限应该是744,即rwxr--r--,或者更严格一点可以设置为644。

数字方式修改权限是Linux比较常用的方式,当然如果你不习惯,也可以用容易理解的字母方式。

字母方式需要结合三种符号来使用:

  • +,追加权限
  • =,赋予权限
  • -,去除权限

下面看实际操作:

[icexmoon@xyz test]$ chmod go+wx test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 18:27 ..
-rwxrwxrwx.  1 icexmoon icexmoon    0 86 17:56 test.py
[icexmoon@xyz test]$ chmod o-wx test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 18:28 ..
-rwxrwxr--.  1 icexmoon icexmoon    0 86 17:56 test.py
[icexmoon@xyz test]$ chmod g=r,u=rw test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 18:28 ..
-rw-r--r--.  1 icexmoon icexmoon    0 86 17:56 test.py

前边介绍的操作符号结合上ugo即可执行权限的追加或赋予,这里u表示拥有者,可以看作是user的缩写,g和o分别表示group和other。

比较特殊的是可以使用a(all)来进行对所有三个维度的权限修改。

来看具体操作:

[icexmoon@xyz test]$ chmod a+x test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon   21 86 17:56 .
drwxrwxrwt. 18 root     root     4096 86 18:33 ..
-rwxr-xr-x.  1 icexmoon icexmoon    0 86 17:56 test.py

使用字母操作的方式有个额外好处,即可以在不了解原有权限的情况下追加某种权限,比如示例中的a+x

Linux目录配置

对刚接触Linux的新手来说,了解Linux的目录也是一大难点,完全不知道那些个目录是干嘛的,也不知道应该在哪个目录寻找要用的配置,或者是需要的应用。

事实上虽然Linux仅有内核是一样的,其它的部分都是各个发行版自行定义的,但是为了保持一定形式上的统一,各个发行版都遵守一个统一的目录设置标准——FHS。

FHS

FHS,全程File Hierarchy Standard 文件层级标准,这个标准规定了每个特定目录下应该存放什么样的数据。

事实上,FHS仅定义了三个目录:

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

根目录是Linux最重要的目录,Linux所有的目录都由根目录衍生而出。因为Linux并不像Windows那样会分出多个盘符,Linux所有目录在层级结构上都从属于根目录(当然在物理结构上并不一定,可能是通过其他存储设备挂载)。

除此以外,根目录的重要性还体现在它会参与系统的启动、还原及修复等操作,比如用于修复的单人值守模式,就只会挂载根目录,其它通过mount方式加载的额外的文件系统都不会加载,这有点像是Windows的安全模式,仅加载核心程序。

FHS对根目录的建议是,根目录所在的分区越小越好,且不应该将应用程序安装到根目录所在的分区,这样可以保持根目录的纯净,以及避免根目录的文件系统出现一些不必要的麻烦

这就好比使用Windows的时候最好不要什么都往C盘装一样。

此外,FHS也规定了根目录下必须有和建议有的目录,及其用途。

根目录下必须有的目录:

  • /bin,存放在单人维护模式下还能被使用的命令
  • /boot,放置系统启动所需的文件,包括Linux内核文件以及启动选项与所需的配置
  • /dev,任何设备及接口设备都是以文件的形式存在于这个目录
  • /etc,系统的主要配置文件,例如用户的账号密码,以及各种服务的启动文件。此外FHS还建议不要存放可执行文件在这个目录中。
    • /etc/opt (必须),/opt下第三方复制软件所需的相关配置
    • /etc/x11(建议),与X Window相关的配置
    • /etc/sgml(建议),与sgml相关的配置
    • /etc/xml(建议),与xml相关的配置
  • /lib,各种系统启动,或者/bin/sbin所需的函数库
    • /lib/modules,可抽换式内核相关模块(即驱动程序)
  • /media,可删除的设备,包括软盘、光盘、DVD等
  • /mnt,暂时挂在的额外设备
  • /opt,第三方辅助软件
  • /run,系统启动后产生的信息
  • /sbin,启动过程所需要的,包括启动、修复、还原系统所需的命令
  • /srv,srv是service的缩写,一些网络服务启动后所需要使用的数据目录
  • /tmp,用户或程序暂时存放的数据
  • /usr,第二层FHS设置
  • /var,第二层FHS设置

FHS建议存在的目录:

  • /home,默认的用户家目录
  • /lib<qual>,存放与/lib不同的二进制函数库,比如64位的/lib64函数库
  • /root,系统管理员的家目录,因为单人维护模式的关系,这个目录最好和根目录在一个分区

出了上面FHS规定的目录以外,还有几个根目录下的目录也很重要,需要了解一下:

  • /host+found,这是使用ext2/ext3/ext4格式的文件系统才会有的目录,会存放一些使用中产生的遗失片段,如果使用的xfs文件系统就不会有这个目录。
  • /proc,这个目录本身是一个虚拟文件系统(virtual filesystem),其数据都存在于内存中,例如系统内核、进程信息(process)、外接设备的状态及网络状态等,因为只存在于内存中,所以并不会占用任何硬盘空间。
  • /sys,与/proc类似,同样是一个虚拟文件系统,记录内核与系统硬件相关内容,包括已加载的内核模块与内核检测到的硬件设备等,这个目录同样不会占用硬盘空间。
/urs

usrUNIX Software Resource的缩写,即UNIX操作系统软件资源所存放的位置。FHS建议所有的软件开发者都应当将其开发的软件和数据合理地放置到这个目录下的子目录中。

这个目录的用户相当于Windows中的C:\Program Files

FHS要求必须要有的目录:

  • /usr/bin,所有一般用户能够使用的命令,FHS要求此目录下不应该有子目录
  • /usr/lib,与/lib目录功能相同,在CentOS/lib会链接到此目录
  • /usr/local,系统管理员自行下载和安装的软件(非发行版默认提供)
  • /usr/sbin,非系统正常运行所需的系统命令
  • /usr/share,只读的数据文件,也包括共享文件
    • /usr/share/man,在线帮助文档
    • /usr/share/doc,软件的说明文档
    • /usr/share/zoneinfo,与时区有关的文件

FHS建议存在的目录:

  • /usr/games,与游戏相关的数据
  • /usr/include,C/C++等程序语言头文件(header)与包含文件(include)存放的地方
  • /usr/libexec,某些不被一般用户常用的执行文件或脚本(scripts)等
  • /usr/lib<qual>,与/lib<qual>功能相同
  • /usr/src,srcsource,一般性的源码会存放在这里,内核源码建议存放在/usr/src/Linux
/var

/var主要针对经常变动性的文件,包括缓存(cache)、日志文件(log file)以及某些软件运行后产生的文件,包括程序文件(lock file、run file),或例如MySQL数据库的文件等。

FHS要求必须要有的目录:

  • /var/cache,应用程序运行后产生的缓存
  • /var/lib,程序运行过程中需要使用的数据文件,在这个目录下各自软件要有各自的目录,比如MySQL的数据库文件会存放在/var/lib/mysql
  • /var/locl,对设备加锁存放的目录,目前此目录已经挪到/run/lock
  • /var/log,日志文件
  • /var/mail,个人电子邮箱,目前已被挪到/var/spool/mail
  • /var/run,某些程序或服务启动后,会将其PID存放于这里,此目录功能与/run相同
  • /var/spool,通常放置队列数据,比如等待接收和寄送的电子邮件

CentOS7与之前的版本不同,将一些原本按照FHS应该存在的目录从根目录下移出,然后进行链接(link)处置,具体有下面这些:

  • /bin --> /urs/bin
  • /sbin --> /usr/sbin
  • /lib --> /usr/lib
  • /lib64 --> /usr/lib64
  • /var/lock --> /run/lock
  • /var/run --> /run

最后关于绝对路径和相对路径的内容就不赘述了,这个相对很入门,且在Windows的CMD中的用法完全相同。

谢谢阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值