--- title: linux 常用命令-文件权限属性设置 date: 2018/02/27 categories: - linux tags: - linux - command --- - [linux 命令-文件权限属性设置](#linux-%E5%91%BD%E4%BB%A4-%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90%E5%B1%9E%E6%80%A7%E8%AE%BE%E7%BD%AE) - [chmod](#chmod) - [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E) - [语法](#%E8%AF%AD%E6%B3%95) - [选项](#%E9%80%89%E9%A1%B9) - [参数](#%E5%8F%82%E6%95%B0) - [知识扩展和实例](#%E7%9F%A5%E8%AF%86%E6%89%A9%E5%B1%95%E5%92%8C%E5%AE%9E%E4%BE%8B) - [chown](#chown) - [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E) - [语法](#%E8%AF%AD%E6%B3%95) - [选项](#%E9%80%89%E9%A1%B9) - [参数](#%E5%8F%82%E6%95%B0) - [实例](#%E5%AE%9E%E4%BE%8B) - [stat](#stat) - [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E) - [语法](#%E8%AF%AD%E6%B3%95) - [选项](#%E9%80%89%E9%A1%B9) - [参数](#%E5%8F%82%E6%95%B0) - [实例](#%E5%AE%9E%E4%BE%8B) - [file](#file) - [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E) - [语法](#%E8%AF%AD%E6%B3%95) - [选项](#%E9%80%89%E9%A1%B9) - [参数](#%E5%8F%82%E6%95%B0) - [实例](#%E5%AE%9E%E4%BE%8B) # linux 常用命令-文件权限属性设置 ## chmod 用来变更文件或目录的权限 ### 补充说明 **chmod命令** 用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。 权限范围的表示法如下: `u` User,即文件或目录的拥有者; `g` Group,即文件或目录的所属群组; `o` Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围; `a` All,即全部的用户,包含拥有者,所属群组以及其他用户; `r` 读取权限,数字代号为“4”; `w` 写入权限,数字代号为“2”; `x` 执行或切换权限,数字代号为“1”; `-` 不具任何权限,数字代号为“0”; `s` 特殊功能说明:变更文件或目录的权限。 ### 语法 ``` chmod(选项)(参数) ``` ### 选项 ```bash u # 操作对象简称,用户user,文件或目录的所有者。 g # 操作对象简称,同组用户group,文件或目录所属群组 o # 操作对象简称,其它用户others a # 操作对象简称,所有用户all,系统默认使用此项 + # 权限操作符,添加某些权限 - # 权限操作符,取消某些权限 = # 权限操作符,设置文件的权限为给定的权限 r # 权限设定(英文),表示可读权限 w # 权限设定(英文),表示可写权限 x # 权限设定(英文),表示可执行权限 - # 权限设定(英文字符),表示没有权限 X # 权限设定,如果目标文件是可执行文件或目录,可给其设置可执行权限 s # 权限设定,设置权限suid和sgid,使用权限组合“u+s”设定文件的用户的ID位,“g+s”设置组ID位 t # 权限设定,只有目录或文件的所有者才可以删除目录下的文件 -c或——changes # 效果类似“-v”参数,但仅回报更改的部分,如果文件权限已经改变,显示其操作信息; -f或--quiet或——silent # 操作过程中不显示任何错误信息; -R或——recursive # 递归处理,将指令目录下的所有文件及子目录一并处理; -v或——verbose # 显示命令运行时的详细执行过程; --reference=<参考文件或目录> # 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同; <权限范围>+<权限设置> # 开启权限范围的文件或目录的该选项权限设置; <权限范围>-<权限设置> # 关闭权限范围的文件或目录的该选项权限设置; <权限范围>=<权限设置> # 指定权限范围的文件或目录的该选项权限设置; --help # 显示帮助信息 --version # 显示版本信息 ``` ### 参数 权限模式:指定文件的权限模式; 文件:要改变权限的文件。 ### 知识扩展和实例 Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在`/etc/passwd`文件中。每个人的密码则是记录在`/etc/shadow`文件下。 此外,所有的组群名称记录在`/etc/group`內! linux文件的用户权限的分析图 ```bash -rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules # ↑╰┬╯╰┬╯╰┬╯ # ┆ ┆ ┆ ╰┈ 0 其他人 # ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组 # ┆ ╰┈┈┈┈ u 属组 # ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件 ``` 例:rwx rw- r-- r=读取属性  //值=4 w=写入属性  //值=2 x=执行属性  //值=1 ```bash chmod u+x,g+w f01  # 为文件f01设置自己可以执行,组员可以写入的权限 chmod u=rwx,g=rw,o=r f01 chmod 764 f01 chmod a+x f01   # 对文件f01的u,g,o都设置可执行属性 ``` 文件的属主和属组属性设置 ```bash chown user:market f01  # 把文件f01给uesr,添加到market组 ll -d f1 查看目录f1的属性 ``` 将`/home/wwwroot/`里的所有文件和文件夹设置为`755`权限 (1)直接指定路径修改 ```bash chmod -R 755 /home/wwwroot/* ``` (2)手动进入该目录修改权限(并显示详细过程) ```bash cd /home/wwwroot chmod -Rv 755 * #注意:“*”表示通配符,指的是所有文件和文件 sudo chmod o+rw /shared #设置文件夹权限以保证其余用户可以访问它。 ``` ## chown 用来变更文件或目录的拥有者或所属群组 ### 补充说明 **chown命令** 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。 只有文件主和超级用户才可以便用该命令。 ### 语法 ``` chown(选项)(参数) ``` ### 选项 ``` -c或——changes:效果类似“-v”参数,但仅回报更改的部分; -f或--quite或——silent:不显示错误信息; -h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件; -R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理; -v或——version:显示指令执行过程; --dereference:效果和“-h”参数相同; --help:在线帮助; --reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同; --version:显示版本信息。 ``` ### 参数 用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者; 文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。 ### 实例 将目录`/usr/meng`及其下面的所有文件、子目录的文件主改成 liu: ``` chown -R liu /usr/meng ``` ## stat 用于显示文件的状态信息 ### 补充说明 **stat命令** 用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。 ### 语法 ``` stat(选项)(参数) ``` ### 选项 ``` -L:支持符号连接; -f:显示文件系统状态而非文件状态; -t:以简洁方式输出信息; --help:显示指令的帮助信息; --version:显示指令的版本信息。 ``` ### 参数 文件:指定要显示信息的普通文件或者文件系统对应的设备文件名。 ### 实例 ``` [root@localhost ~]# ls -l myfile -rw-r--r-- 1 root root 0 2010-10-09 myfile [root@localhost ~]# stat myfile file: “myfile” Size: 0 Blocks: 8 IO Block: 4096 一般空文件 Device: fd00h/64768d Inode: 194805815 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2010-12-12 12:22:35.000000000 +0800 Modify: 2010-10-09 20:44:21.000000000 +0800 Change: 2010-10-09 20:44:21.000000000 +0800 [root@localhost ~]# stat -f myfile File: "myfile" id: 0 Namelen: 255 type: ext2/ext3 Block size: 4096 Fundamental block size: 4096 Blocks: Total: 241555461 free: 232910771 Available: 220442547 Inodes: Total: 249364480 Free: 249139691 [root@localhost ~]# stat -t myfile myfile 0 8 81a4 0 0 fd00 194805815 1 0 0 1292127755 1286628261 1286628261 4096 ``` ## file 用来探测给定文件的类型。 ### 补充说明 **file命令** 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。 ### 语法 ``` file(选项)(参数) ``` ### 选项 ``` -b:列出辨识结果时,不显示文件名称; -c:详细显示指令执行过程,便于排错或分析程序执行的情形; -f<名称文件>:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称; -L:直接显示符号连接所指向的文件类别; -m<魔法数字文件>:指定魔法数字文件; -v:显示版本信息; -z:尝试去解读压缩文件的内容。 ``` ### 参数 文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。 ### 实例 显示文件类型 ``` [root@localhost ~]# file install.log install.log: UTF-8 Unicode text [root@localhost ~]# file -b install.log <== 不显示文件名称 UTF-8 Unicode text [root@localhost ~]# file -i install.log <== 显示MIME类别。 install.log: text/plain; charset=utf-8 [root@localhost ~]# file -b -i install.log text/plain; charset=utf-8 ``` 显示符号链接的文件类型 ``` [root@localhost ~]# ls -l /var/mail lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail [root@localhost ~]# file /var/mail /var/mail: symbolic link to `spool/mail' [root@localhost ~]# file -L /var/mail /var/mail: directory [root@localhost ~]# file /var/spool/mail /var/spool/mail: directory [root@localhost ~]# file -L /var/spool/mail /var/spool/mail: directory ```