Linux与Windows最大的不同之一就是权限管理,如果接触过一点Linux的就会知道,Linux下的文件系统的权限相关设置非常值复杂,一旦设置错了就会导致应用运行不了,所以这篇笔记会说明Linux下的权限管理相关的初级内容。
在说明Linux相关内容之前,先说明一个有助于学习Linux的小技巧。
使用SSH连接虚拟机(可选)
如果你和我一样是通过虚拟机(比如我用的VMware)安装和学习Linux,难免会遇到在虚拟机和本机来回切换的问题,虽然按一下CTRL+ALT就可以切出,但依然不是很方便,更别提遇到问题时候复制粘贴代码了。
其实如果你像我在中那样设置好了固定IP,并且在虚拟机的网络设置中设置了桥接模式的话,我们的虚拟机就相当于一台局域网中的实体Linux主机,自然也可以通过SSH进行远程连接使用。
而且因为我们学习Linux大多数都是通过字符终端,所以SSH完全可以满足我们的学习需要。
具体的SSH连接大家可以选择自己喜欢的工具,我这里是在Windows Terminal中使用ssh。
如果你不知道怎么安装Windows Terminal,可以阅读。
在进行连接之前如果你不确定虚拟机的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命令都会方便不少。
可以更进一步,在Windows Terminal中添加一个虚拟机的配置项,详情见。
如果连接失败的,可以参考。
文件属性
ls
在Linux中,文件具有复杂的权限设定,这一切都可以使用ls
命令来查看:
[icexmoon@xyz ~]$ ls -al
总用量 44
drwx------. 15 icexmoon icexmoon 4096 8月 6 16:39 .
drwxr-xr-x. 3 root root 22 7月 24 14:45 ..
-rw-------. 1 icexmoon icexmoon 203 7月 29 18:47 .bash_history
-rw-r--r--. 1 icexmoon icexmoon 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 icexmoon icexmoon 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 icexmoon icexmoon 231 4月 1 2020 .bashrc
drwx------. 17 icexmoon icexmoon 4096 7月 29 15:45 .cache
drwxr-xr-x. 16 icexmoon icexmoon 4096 7月 29 16:16 .config
drwx------. 3 icexmoon icexmoon 25 7月 24 14:49 .dbus
-rw-------. 1 icexmoon icexmoon 16 7月 24 14:49 .esd_auth
-rw-------. 1 icexmoon icexmoon 1864 8月 6 16:39 .ICEauthority
-rw-------. 1 icexmoon icexmoon 35 7月 29 17:48 .lesshst
drwx------. 3 icexmoon icexmoon 19 7月 24 14:49 .local
drwxr-xr-x. 6 icexmoon icexmoon 81 7月 29 15:43 .mozilla
-rw-rw-r--. 1 icexmoon icexmoon 22 7月 29 18:35 test.py
drwxr-xr-x. 2 icexmoon icexmoon 6 7月 24 14:49 公共
drwxr-xr-x. 2 icexmoon icexmoon 6 7月 24 14:49 模板
drwxr-xr-x. 2 icexmoon icexmoon 6 7月 24 14:49 视频
drwxr-xr-x. 2 icexmoon icexmoon 6 7月 24 14:49 图片
drwxr-xr-x. 2 icexmoon icexmoon 6 7月 24 14:49 文档
drwxr-xr-x. 2 icexmoon icexmoon 6 7月 24 14:49 下载
drwxr-xr-x. 2 icexmoon icexmoon 6 7月 24 14:49 音乐
drwxr-xr-x. 2 icexmoon icexmoon 6 7月 24 14:49 桌面
命令参数a
的意思是显示所有文件和子目录,l
的意思是显示详细信息,这两个参数比较常见,更详细的参数可以使用ls --help
进行查看。
ls
是list dir
的意思,比较有意思的是windows的cmd命令中的类似命令是dir
。有的Linux发行版支持命令
ll
,其效果等同于ls -l
,其实前者就是后者的一个别名,关于别名会在后续学习中进行说明。
就像上面演示的那样,ls
后不跟目录或文件的时候是打印当前工作目录的内容,如果跟了目录,就会打印指定目录或文件的内容:
[icexmoon@xyz ~]$ ls -al /tmp/test
总用量 4
drwxrwxr-x. 2 icexmoon icexmoon 21 8月 6 17:56 .
drwxrwxrwt. 21 root root 4096 8月 7 13:19 ..
-rwxr-xr-x. 1 icexmoon icexmoon 0 8月 6 17:56 test.py
[icexmoon@xyz ~]$ ls -al /tmp/test/test.py
-rwxr-xr-x. 1 icexmoon icexmoon 0 8月 6 17:56 /tmp/test/test.py
也可以指定仅打印目标目录自身,也就是不包含其下内容:
[icexmoon@xyz ~]$ ls -ald /tmp/test
drwxrwxr-x. 2 icexmoon icexmoon 21 8月 6 17:56 /tmp/test
此外,还可以跟多个目录或者文件名,一并打印:
[icexmoon@xyz ~]$ ls -ald .local .cache .dbus
drwx------. 17 icexmoon icexmoon 4096 7月 29 15:45 .cache
drwx------. 3 icexmoon icexmoon 25 7月 24 14:49 .dbus
drwx------. 3 icexmoon icexmoon 19 7月 24 14:49 .local
还可以使用通配符:
[icexmoon@xyz ~]$ ls -al .bash*
-rw-------. 1 icexmoon icexmoon 629 8月 7 13:20 .bash_history
-rw-r--r--. 1 icexmoon icexmoon 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 icexmoon icexmoon 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 icexmoon icexmoon 231 4月 1 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
的含义为可读可执行,但不可写。
如果是普通的文本文件,则r
和w
比较重要,前者决定有没有读权限,后者决定有没有写权限。因为文本文件本身是没法像应用一样执行的,所以x
权限反而无所谓。
如果是二进制可执行文件,则r
和x
比较重要,一般要具有这两个权限才能够顺利执行,当然如果要能更新程序,则需要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 8月 6 17:55 .
drwxrwxrwt. 18 root root 4096 8月 6 17:55 ..
[icexmoon@xyz test]$ touch test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x. 2 icexmoon icexmoon 21 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 17:55 ..
-rw-rw-r--. 1 icexmoon icexmoon 0 8月 6 17:56 test.py
[icexmoon@xyz test]$ cat test.py
[icexmoon@xyz test]$ su -
密码:
上一次登录:四 7月 29 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 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 17:57 ..
-rw-rw-r--. 1 icexmoon root 0 8月 6 17:56 test.py
[root@xyz test]# exit
登出
其中
su -
是进行提权,切换到root
用户下进行后续操作,因为只有root
才可以执行chgrp
命令,执行完后可以通过exit
退出。
touch
命令可以创建一个空文件。
可以看到执行完毕后test.py
文件的组变成了root
。
chown
[icexmoon@xyz test]$ su -
密码:
上一次登录:五 8月 6 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 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 18:04 ..
-rw-rw-r--. 1 root root 0 8月 6 17:56 test.py
[root@xyz test]# chown icexmoon:icexmoon test.py
[root@xyz test]# ls -al
总用量 4
drwxrwxr-x. 2 icexmoon icexmoon 21 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 18:05 ..
-rw-rw-r--. 1 icexmoon icexmoon 0 8月 6 17:56 test.py
[root@xyz test]# exit
登出
一开始的错误是因为工作目录不对,提权后默认会是
root
的家目录。
chown
与chgrp
命令的使用方法相似,没啥好说的,此外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 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 18:05 ..
-rw-rw-r--. 1 icexmoon icexmoon 0 8月 6 17:56 test.py
[icexmoon@xyz test]$ chmod 777 test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x. 2 icexmoon icexmoon 21 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 18:05 ..
-rwxrwxrwx. 1 icexmoon icexmoon 0 8月 6 17:56 test.py
[icexmoon@xyz test]$ chmod 744 test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x. 2 icexmoon icexmoon 21 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 18:20 ..
-rwxr--r--. 1 icexmoon icexmoon 0 8月 6 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 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 18:27 ..
-rwxrwxrwx. 1 icexmoon icexmoon 0 8月 6 17:56 test.py
[icexmoon@xyz test]$ chmod o-wx test.py
[icexmoon@xyz test]$ ls -al
总用量 4
drwxrwxr-x. 2 icexmoon icexmoon 21 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 18:28 ..
-rwxrwxr--. 1 icexmoon icexmoon 0 8月 6 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 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 18:28 ..
-rw-r--r--. 1 icexmoon icexmoon 0 8月 6 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 8月 6 17:56 .
drwxrwxrwt. 18 root root 4096 8月 6 18:33 ..
-rwxr-xr-x. 1 icexmoon icexmoon 0 8月 6 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
类似,同样是一个虚拟文件系统,记录内核与系统硬件相关内容,包括已加载的内核模块与内核检测到的硬件设备等,这个目录同样不会占用硬盘空间。
/usr
usr
是UNIX Software Resource
的缩写,即UNIX操作系统软件资源所存放的位置。FHS建议所有的软件开发者都应当将其开发的软件和数据合理地放置到这个目录下的子目录中。
这个目录的用户相当于Windows中的
C:\Program Files
FHS要求必须要有的目录:
-
/usr/bin,所有一般用户能够使用的命令,FHS要求此目录下不应该有子目录
-
/usr/lib,与
/lib
目录功能相同,在CentOS
中/lib
会链接到此目录 -
/usr/local,系统管理员自行下载和安装的软件(非发行版默认提供)
-
/usr/sbin,非系统正常运行所需的系统命令
-
-
/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,
src
即source
,一般性的源码会存放在这里,内核源码建议存放在/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中的用法完全相同。
文章评论