文章目录
1.文件和目录的处理
1.1.文件所有者和读,写,执行
在 Linux 系统中,不同的用户处于不同的地位,拥有不同的权限,为保护系统安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
Linux 系统的每一个文件或目录都有访问权限,这些访问权限决定了哪些用户和组群能访问文件和能执行的操作。
1.1.1.查看文件权限
使用ls -l 命令可以显示文件的属性以及文件所属的用户和组。
[email protected]:~/umake$ ls -l
如图,以第一行为例:
drwxrwxr-x 2 hlx hlx 4096 11月 5 2018 bin
其基本构成是:文件属性 链接数 所有者 所属用户组 最后修改时间 文件名
1.1.2.文件类型
每个文件的属性由左边第一部分的10个字符来确定。
第一个字符代表文件类型,具体字符有:
- d: 目录
- - 普通文件
- I 软链接,即链接文档(link file)
- b 块设备,装置文件中可供存储的接口设备(可随机存储装置)
- c 字符设备,装置文件中串行端口设备(一次性读取装置)
- s 网络套接字(socket)
- p 管道(piep)
1.1.3.文件权限
文件类型其后的九个字符三个一组,均为 r w x 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute),这三个权限的位置不会改变,若没有权限,仅会出现 - 符号。
以下图为例,从左至右用0-9表示10个字符,第0位确定文件类型,第1-3位确定属主权限拥有该文件的权限(该文件的所有者的权限),第4-6位确定属组权限拥有该文件的权限(所有者的同组用户),第7-9位确定其他用户拥有该文件的权限。
注:
- 读权限,表示可以用一些命令来读取某个文件的内容;
- 写权限,表示可以编辑和修改某个文件;
- 执行权限,通常指可以运行的二进制程序文件或者脚本文件。
一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。
1.1.4.链接数
文件属性后面的数字代表链接到该文件所在的 inode 结点的文件名数目。
1.1.5.文件大小
文件大小是以 inode 结点大小为单位来表示的文件大小,可以给 ls 加上 -lh 参数来更直观的查看文件的大小。
1.2.文件属性(所有者,所有组)的更改
每个文件都有一特定的所有者,也就是对该文件具有所有权的用户,同时,在 Linux 系统中,用户是按组分类的,一个用户属于一个或多个组,而文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux 系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
所有者与所属用户组,标明了该文件具所有权的用户及该文件所属的用户组。
1.2.1.文件所有者的更改
1.2.1.1.chown
语法:chown [选项] 属主名 文件名
常用选项
- -R:递归更改文件属组,即更改某目录文件的属组时,若加上-R,那么该目录下的所有文件的属组都会更改。
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ sudo chown root dddd
[email protected]:~/umake/tmp$ ls -l
如图,名为dddd的普通文件的所属主从开始的 hlx改变为 root
注:
chown命令更改文件属主的同时,也可以更改文件属组,语法为:chown [选项] 属主名:属组名 文件名
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ sudo chown root:lx linux.txt
[email protected]:~/umake/tmp$ ls -l
如图,名为linux.txt的普通文件的所属主从开始的 hlx改变为root,所属组从开始的 hlx 变为 lx。
1.2.1.2.chgrp
语法:chgrp [选项] 用户组名 文件名
选项同 chown 命令的选项相同
[email protected]:~/umake/tmp$ ll
[email protected]:~/umake/tmp$ sudo chgrp root linuxmi.txt
[email protected]:~/umake/tmp$ ll
如图,名为linuxmi.txt的普通文件的所属组从开始的 hlx 改变为root。
1.2.2.文件修改权的更该
Linux 文件的基本权限就有九个,分别是 owner / group / others 三种身份各有自己的 read / write / execute 权限。
要想更改权限,有两种方法,一种是用二进制数字表示,一种是用字符表示。
1.2.2.1.用数字更改
用数字来代表各个权限,则:
- 读,权限是二进制的100,十进制是4;
- 写,权限是二进制的010,十进制是2;
- 执行,权限是二进制的001,十进制是1;
即:各权限的对应数字为: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
所以当设定权限的变更时,该文件的权限数字就是770。
变更权限的命令的语法为:chmod [选项] xyz 文件名或目录名
注:xyz : 就是数字类型的权限属性,为 rwx 属性数值的相加
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ sudo chmod 777 linuxmi.txt
[email protected]:~/umake/tmp$ ll
如图,将权限改为777后,所有身份均具有读、写、执行权限。
1.2.2.1.1. 775
文件夹,默认权限为775。
[email protected]:~/umake/tmp$ mkdir linux
[email protected]:~/umake/tmp$ ls
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ ls -l linux
1.2.2.1.2. 700
更改目录权限到700,目录内可列可创建文件
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ chmod 700 linux
修改时间:[email protected]:~/umake/tmp$ uptime > linux/uptime
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ ls -l linux
[email protected]:~/umake/tmp$ cat linux/uptime
1.2.2.1.3. 400
更改目录权限到400,目录内不可列详情,不可CAT,不可创建文件
[email protected]:~/umake/tmp$ chmod 400 linux
[email protected]:~/umake/tmp$ ls -l linux
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ cat linux/uptime
[email protected]:~/umake/tmp$ touch linux/uptime
1.2.2.1.4. 100
更改目录权限到100,目录内不可列,目录可进入,不可创建文件,可Cat内文件(当然文件的权限要有,而且知道它的名字,不能联想)
[email protected]:~/umake/tmp$ chmod 100 linux
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ ls -l linux
[email protected]:~/umake/tmp$ ls -l linux/uptime
[email protected]:~/umake/tmp$ cd linux/
[email protected]:~/umake/tmp/linux$ ls -l
[email protected]:~/umake/tmp/linux$ cat uptime
[email protected]:~/umake/tmp/linux$ touch linuxme
1.2.2.1.5. 200
更改目录权限到200,目录内不可列,不可CAT,不可创建文件
[email protected]:~/umake/tmp/linux$ cd …
[email protected]:~/umake/tmp$ chmod 200 linux
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ ls -l linux
[email protected]:~/umake/tmp$ cat linux/uptime
[email protected]:~/umake/tmp$ touch linux/linuxme
1.2.2.1.6. 500
更改目录权限到500,目录内可列,可CAT,不可创建文件
[email protected]:~/umake/tmp$ chmod 500 linux
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ ls -l linux
[email protected]:~/umake/tmp$ cat linux/uptime
[email protected]:~/umake/tmp$ touch linux/linuxme
1.2.2.1.7. 300
更改目录权限到300,目录内不可列,可CAT(当然文件的权限要有,而且知道它的名字,不能联想),可创建文件
[email protected]:~/umake/tmp$ chmod 300 linux
[email protected]:~/umake/tmp$ ls -l
[email protected]:~/umake/tmp$ ls -l linux
[email protected]:~/umake/tmp$ cat linux/uptime
[email protected]:~/umake/tmp$ touch linux/linuxme
验证:
[email protected]:~/umake/tmp$ ls -l linux/linuxme
[email protected]:~/umake/tmp$ cd linux/
[email protected]:~/umake/tmp/linux$ ls
[email protected]:~/umake/tmp/linux$ sudo ls
备注:700=rwx, 400=r, 100=x, 200=w, 500=rx, 300=wx
1.2.2.2.用字符更改
九个权限分别是 user、group、others 三种身份的权限,那么可用 u、g、o 来代表三种身份的权限,此外,用 a 代表 all 表示所有的身份。
则变更权限的命令的语法为:chmod 身份 符号 权限 文件名或目录名
如图,更改权限
[email protected]:~/umake/tmp$ ll
[email protected]:~/umake/tmp$ sudo chmod u=rwx,g=rx,o+x tmpfile.txt.txt
[email protected]:~/umake/tmp$ ll
1.3.文件/目录的权限及归属管理
1.3.1.文件的权限和归属概述
1.3.1.1.访问权限
- 读取r:允许查看文件内容、显示目录列表;
- 写入w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录;
- 可执行x:允许运行程序、切换目录
1.3.1.2.归属(所有权)
属主:拥有该文件或目录的用户账号;
属组:拥有该文件或目录的组账号;
1.3.1.3.查看文件的权限和归属
1.3.1.4.chmod设置文件权限
chmod命令的基本语法格式如下:
应用举例:
[[email protected] ~]# touch 1.txt
[[email protected] ~]# ll
总用量 8
-rw-r–r-- 1 root root 0 1月 11 22:27 1.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
# 属主用户添加执行权限
[[email protected] ~]# chmod u+x ./1.txt
[[email protected] ~]# ll
总用量 8
-rwxr–r-- 1 root root 0 1月 11 22:27 1.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
# 属主用户取消执行权限,组添加执行权限,其他用户添加写入权限
[[email protected] ~]# chmod u-x,g+x,o+w 1.txt
[[email protected] ~]# ll
总用量 8
-rw-r-xrw- 1 root root 0 1月 11 22:27 1.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
# 添加755权限(rwxr-xr-x)
[[email protected] ~]# chmod 755 1.txt
[[email protected] ~]# ll
总用量 8
-rwxr-xr-x 1 root root 0 1月 17 02:36 1.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
1.3.1.5.chown设置文件的归属
chown命令的基本语法格式如下:
应用举例:
# 1.txt设置属主
[[email protected] ~]# chown bob 1.txt
[[email protected] ~]# ll
总用量 8
-rwxr-xr-x 1 bob root 0 1月 17 02:36 1.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
# 1.txt设置属组
[[email protected] ~]# chown :benet 1.txt
[[email protected] ~]# ll
总用量 8
-rwxr-xr-x 1 bob benet 0 1月 17 02:36 1.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
# 1.txt设置属主和属组
[[email protected] ~]# chown bob:benet 1.txt
[[email protected] ~]# ll
总用量 8
-rwxr-xr-x 1 bob benet 0 1月 17 02:36 1.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
1.3.2.目录的权限和归属
1.3.2.1.访问权限
1.3.2.2.归属(所有权)
属主:拥有该目录的用户账号;
属组:拥有该目录的组账号;
1.3.2.3.chmod设置目录权限
chmod命令设置目录权限的基本格式如下:
应用举例:
# 循环设置benet目录下的文件或者目录权限为755
[[email protected] ~]# chmod -R 755 benet/
[[email protected] ~]# ll
总用量 8
-rw-r-xrw- 1 root root 0 1月 11 22:27 1.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
drwxr-xr-x 3 root root 18 1月 11 22:39 benet
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
1.3.2.4.chown设置目录的归属
chown命令设置目录归属的基本格式如下:
应用举例:
# 循环设置benet目录中所属用户为bob,所属组为benet
[[email protected] ~]# chown -R bob:benet benet/
[[email protected] ~]# ll
总用量 8
-rw-r-xrw- 1 root root 0 1月 11 22:27 1.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
drwxr-xr-x 3 bob benet 18 1月 11 22:39 benet
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
1.3.3.权限掩码umask
在Linux和Unix操作系统上,所有新文件都使用一组默认权限创建。 umask实用程序允许您查看或设置文件模式创建掩码,该掩码确定新创建的文件或目录的权限。
mkdir、touch、tee和其他创建新文件和目录的命令都使用它。
1.3.3.1.umask的作用
控制新建的文件或目录的权限,默认权限去除umask的权限就是新建的文件或者目录的权限。
1.3.3.2.设置umask
umask 022
1.3.3.3.查看umask
umask
1.3.3.4.应用举例
# 查看umask
[[email protected] ~]# umask
0022
# 设置umask为000
[[email protected] ~]# umask 000
# 验证是否设置成功
[[email protected] ~]# umask
0000
# 创建新文件
[[email protected] ~]# touch 2.txt
[[email protected] ~]# ll
总用量 8
-rwxr-xr-x 1 bob benet 0 1月 17 03:48 1.txt
-rw-rw-rw- 1 root root 0 1月 17 03:48 2.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
# 设置umask为022
[[email protected] ~]# umask 022
# 查看umask
[[email protected] ~]# umask
0022
# 再次创建新文件
[[email protected] ~]# touch 3.txt
[[email protected] ~]# ll
总用量 8
-rwxr-xr-x 1 bob benet 0 1月 17 03:48 1.txt
-rw-rw-rw- 1 root root 0 1月 17 03:48 2.txt
-rw-r–r-- 1 root root 0 1月 17 03:49 3.txt
-rw-------. 1 root root 1572 10月 23 22:37 anaconda-ks.cfg
-rw-r–r--. 1 root root 1603 10月 23 23:36 initial-setup-ks.cfg
1.3.3.5.了解umask
默认情况下,在Linux系统上,文件的默认创建权限是666,它为用户、组和其他用户提供读和写权限;目录的默认创建权限是777,这意味着对用户、组和其他用户具有读、写和执行权限。Linux不允许创建具有执行权限的文件。
可以使用umask实用程序修改默认的创建权限。
umask只影响当前的shell环境。在大多数Linux发行版上,默认的系统范围umask值是在pam_umask.so 或 /etc/profile 文件中设置的。
如果希望根据每个用户指定不同的值,请编辑用户的shell配置文件,例如~/.bashrc 或 ~/.zshrc。(您还可以通过运行umask后面跟着所需的值来更改当前会话umask值。
要查看当前掩码值,只需输入umask,不带任何参数:
[email protected]:~/umake/tmp$ umask
第一个 0 表示的是特殊权限位,对 umask 来说,有效的设定值只有后三位数。
正如我们已经提到的,文件的默认创建权限是666和目录777。要计算新文件的权限,请从默认值中减去umask值。
例如,要计算unask 002将如何影响新创建的文件和目录,请使用:
文件:666 - 002 = 664。所有者和组可以读取和修改文件。其他人只能读取文件。
目录:777 - 002 = 775。所有者和组可以进入目录并列出读取,修改,创建或删除目录中的文件。 其他人可以进入目录并列出并读取文件。
您还可以使用-S选项以符号表示法显示掩码值:
[email protected]:~/umake/tmp$ umask -S
与数字表示法不同,符号表示法值包含将在新创建的文件和目录上设置的权限。
1.3.3.6.设置掩码值
可以使用八进制或符号表示法设置文件创建掩码。要使更改永久化,请在/etc/profile文件等全局配置文件中设置新的umask值,这将影响所有用户或用户的shell配置文件,如,/.profile,/.bashrc 或 ~/.zshrc会影响用户。用户文件优先于全局文件。
在更改umask值之前,请确保新值不会带来潜在的安全风险。应该非常谨慎地使用低于022的限制值。例如,umask 000表示任何人都对所有新创建的文件具有读,写和执行权限。
假设我们想为新创建的文件和目录设置更严格的权限,以便其他人无法cd到目录和读取文件。我们想要的权限是目录750和文件640。
要计算umask值,只需从默认值中减去所需的权限:
umask值:777-750 = 027
以数字表示法表示的所需umask值是027。
要在系统范围内永久设置新值,请使用文本编辑器打开/etc/profile文件:
sudo nano /etc/profile
并在文件的开头更改或添加以下行:
umask 027
要使更改生效,请运行以下源命令或注销并登录:
source /etc/profile
要验证新设置,我们将使用mkdir和touch创建一个新文件和目录:
mkdir linuxidc
touch linuxmi
如果使用ll命令检查权限,您将注意到新文件具有640和新目录750权限,如我们所愿:
输出示例:
drwxr-x— 2 linuxidc linuxidc 4096 Jul 23 22:48 linuxidc/
-rw-r----- 1 linuxidc linuxidc 0 Jul 23 22:49 linuxmi
设置文件创建掩码的另一种方法是使用符号表示法。 例如,umask u=rwx,g=rx,o=与umask 027相同。