linux-tutorial/docs/linux/commands/文件目录管理/文件权限属性设置.md

322 lines
10 KiB
Markdown
Raw Normal View History

2018-02-27 17:29:23 +08:00
---
title: linux 常用命令-文件权限属性设置
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [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)
<!-- /TOC -->
# 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)、其他otherLinux系统中预设的情況下系统中所有的帐号与一般身份使用者以及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
```