- Red Hat Enterprise Linux 8系统管理实战
- 宁菲菲 夏栋梁
- 2026字
- 2020-11-23 15:01:56
4.2 Linux中的文件管理
与Windows通过盘符管理各个分区不同,Linux把所有文件和设备都当作文件来管理,这些文件都在根目录下,同时Linux中的文件名区分字母的大小写。本节主要介绍文件的属性和权限管理。
4.2.1 文件的类型
Linux系统是一种典型的多用户系统,不同的用户处在不同的地位,拥有不同的权限。为了保护系统的安全性,对于同一资源来说,不同的用户具有不同的权限,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。示例4-2用于认识Linux系统中的文件类型。
【示例4-2】
在示例4-2的输出代码中:
● 第1列表示文件的类型,如表4.1所示。
● 第2列表示文件权限。例如,文件权限是“rw-r--r--”,表示文件所有者可读、可写,文件所归属的用户组可读,其他用户可读此文件。
● 第3列为硬链接个数。
● 第4列表示文件所有者,就是文件属于哪个用户。
● 第5列表示文件所属的组。
● 第6列表示文件大小,通过选项h可以显示为可读的格式,如K/M/G等。
● 第7列表示文件修改时间。
● 第8列表示文件名或目录名。
表4.1 Linux文件类型
4.2.2 文件的属性与权限
为了系统的安全性,Linux为文件赋予了3种属性:可读、可写和可执行。在Linux系统中,每个文件都有唯一的属主,同时Linux系统中的用户可以属于同一个组,通过权限位的控制定义了每个文件的属主,同组用户和其他用户对该文件具有不同的读、写和可执行权限。
● 读权限:对应标志位为“r”,表示具有读取文件或目录的权限,对应的使用者可以查看文件内容。
● 写权限:对应标志位为“w”,用户可以变更此文件,比如删除、移动等。写权限依赖于该文件父目录的权限设置。示例4-3说明了即使文件其他用户权限标志位为可写,其他用户仍然不能操作此文件。
【示例4-3】
● 可执行权限:对应标志位为“x”,一些可执行文件(比如C程序)必须有可执行权限才可以运行。对于目录而言,可执行权限表示其他用户可以进入此目录,如目录没有可执行权限,则其他用户不能进入此目录。
注意
文件拥有执行权限才可以运行,比如二进制文件和脚本文件。目录文件要有执行权限才可以进入。
在Linux系统中文件权限标志位由3部分组成。例如,在“-rwxrw-r--”中,第1位表示普通文件,然后“rwx”表示文件属主具有可读可写可执行的权限,“rw-”表示与属主属于同一组的用户就有读写权限,“r--”表示其他用户对该文件只有读权限。“-rwxrwxrwx”为文件最大权限,对应编码为777,表示任何用户都可以读写和执行此文件。
4.2.3 改变文件所有权
一个文件属于特定的所有者,如果更改文件的属主或属组可以使用chown和chgrp命令。那么chown命令可以将文件变更为新的属主或属组,只有root用户或拥有该文件的用户才可以更改文件的所有者。如果拥有文件但不是root用户,那么只可以将组更改为当前用户所在的组。chown常用参数说明如表4.2所示。
表4.2 chown常用参数说明
chown经常使用的参数为“R”参数,表示递归地更改目录文件的属主或属组。更改时可以使用用户名或用户名对应的UID。操作方法如示例4-4所示。
【示例4-4】
[root@localhost ~]# useradd test [root@localhost ~]# mkdir /data/test [root@localhost ~]# ls -l /data|grep test drwxr-xr-x. 2 root root 4096 Jun 4 20:39 test [root@localhost ~]# chown -R test.users /data/test [root@localhost ~]# ls -l /data|grep test drwxr-xr-x. 2 test users 4096 Jun 4 20:39 test [root@localhost ~]# su - test [test@localhost ~]$ cd /data/test [test@localhost test]$ touch file [test@localhost test]$ ls -l total 0 -rw-rw-r--. 1 test test 0 Jun 4 20:39 file [test@localhost test]$ chown root.root file chown: changing ownership of `file': Operation not permitted [root@localhost ~]# useradd test2 [root@localhost ~]# grep test2 /etc/passwd test2:x:502:502::/home/test2:/bin/bash [root@localhost ~]# mkdir /data/test2 #按用户ID更改目录所有者 [root@localhost ~]# chown -R 502.users /data/test2 [root@localhost ~]# ls -l /data/|grep test2 drwxr-xr-x. 2 test2 users 4096 Jun 4 20:44 test2 #更改文件所有者 [root@localhost test]# chown test2.users file [root@localhost test]# ls -l file -rw-rw-r--. 1 test2 users 0 Jun 4 20:39 file
Linux系统中chgrp命令用于改变指定文件或目录所属的用户组。使用方法与chown类似,此处不再赘述。chgrp命令的操作方法如示例4-5所示。
【示例4-5】
#更改文件所属的用户组 [root@localhost test]# ls -l file -rw-rw-r--. 1 test test 0 Jun 4 20:39 file [root@localhost test]# groupadd testgroup [root@localhost test]# chgrp testgroup file [root@localhost test]# ls -l file -rw-rw-r--. 1 test testgroup 0 Jun 4 20:39 file
4.2.4 改变文件权限
chmod是用来改变文件或目录权限的命令,可以将指定文件的拥有者改为指定的用户或组。其中,用户可以是用户名或用户ID;组可以是组名或组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。只有文件的所有者或root用户可以执行,普通用户不能将自己的文件更改成其他的拥有者。更改文件权限时u表示文件所有者,g表示文件所属的组,o表示其他用户,a表示所有。通过它们可以详细控制文件的权限位。chmod除了可以使用符号更改文件权限外,还可以利用数字来更改文件权限。“r”对应数字4,“w”对应数字2,“x”对应数字1,如可读写则为4+2=6。chmod常用参数如表4.3所示,操作方法如示例4-6所示。
表4.3 chmod命令常用参数说明
【示例4-6】
#新建文件test.sh [test2@localhost ~]$ cat test.sh #!/bin/sh echo "Hello World" #文件所有者没有可执行权限 [test2@localhost ~]$ ./test.sh -bash: ./test.sh: Permission denied [test2@localhost ~]$ ls -l test.sh -rw-rw-r-- 1 test2 test2 29 May 30 19:39 test.sh #给文件所有者加上可执行权限 [test2@localhost ~]$ chmod u+x test.sh [test2@localhost ~]$ ./test.sh #设置文件其他用户不可以读 [test2@localhost ~]$ chmod o-r test.sh [test2@localhost ~]$ logout [root@localhost test1]# su - test1 [test1@localhost ~]$ cd /data/test2 [test1@localhost test2]$ cat test.sh cat: test.sh: Permission denied #采用数字设置文件权限 [test2@localhost ~]$ chmod 775 test.sh [test2@localhost ~]$ ls -l test.sh -rwxrwxr-x 1 test2 test2 29 May 30 19:39 test.sh #将文件 file1.txt 设为所有人都可读取 [test2@localhost ~]$ chmod ugo+r file1.txt #将文件 file1.txt 设为所有人都可读取 [test2@localhost ~]$ chmod a+r file1.txt #将文件 file1.txt 与 file2.txt 设为文件拥有者,与其所属同一群体者可写入,其他人不可写入 [test2@localhost ~]$ chmod ug+w,o-w file1.txt file2.txt #将 ex1.py 设定为只有文件拥有者可以执行 [test2@localhost ~]$ chmod u+x ex1.py #将当前目录下的所有文件与子目录都设为任何人可读取 [test2@localhost ~]$chmod -R a+r * #收回所有用户对file1的执行权限 [test2@localhost ~]$chmod a-x file1