1.1 文件的类型和权限
多人多任务环境,文件权限管理
Linux 优秀的地方之一就是它的多人多任务环境,而它的文件权限管理就能确保每个用户都拥有自己的私密文件。
Linux 的文件身份有三种,分别是拥有者(owner)、所属群组(group)和其它人(others),且这三种身份分别有各自的读(read)、写(write)、执行(execute)权限。
1. 文件的相关属性
ls(list)命令就可以显示出文件的相关属性。
ls [OPTION]... [FILE]...1.1 ls 命令
ls 命令最常用
-l
使用长(long)列表格式
--full-time
显示完整时间
等价于 -l --time-style=full-iso
-a
--all
会显示隐藏入口,即以.开头的条目
实用
-h
--human-readable
和-l一起,会把文件大小显示成更可读的形式
比如 1K, 234M, 2G
-1
单列输出
-p
在目录后加指示符 /
-F
--classify --file-type
在文件名后加 /*@|=> 等指示符
- / 目录
- * 普通的可执行文件
- @ 符号链接
- | FIFOs 管道
- = 套接字(sockets)
什么都没有则表示是普通文件
-R
--recursive
递归列出子目录的内容
排序
-S
排序(sort),按文件大小
-t
排序,按修改时间 (modification time)
-u
排序,按访问时间 (access/use time)
-r
--reverse
排序时倒序
其它
-s
--size
打印每个文件的分配大小,以块为单位
-L
当显示符号链接(symbolic link)的文件信息时, 显示链接引用的文件信息而不是链接本身的信息
-B
--ignore-backups
不列出以~结尾的隐藏备份文件
更多选项可查看 ls --help
1.2 示例
eg1. 单列输出 ls -1 

eg2. 查看详情 ls -lah

eg3. 显示完整时间 ls --full-time

eg4. 按文件大小排序 ls -lahS 和 ls -lahSr

eg5. 按修改时间排序 ls -laht 和 ls -lahtr

eg6. 手动指定 ls 的目录/文件,默认是当前目录

1.3 ls -l 的第一列
ls -l 的第一列ls -l 会显示 7 列数据,如下:
# 类型+权限 链接数/第一级子目录数 拥有者 所属用户组 大小 最后修改时间 文件名 
-rwsr-xr-x    1 root root  32208 Oct 31  2018 su
---s--x--x    1 root root 147392 Oct 31  2018 sudo
lrwxrwxrwx    1 root root      7 Dec 18  2018 bin -> usr/bin
drwxr-xr-x.   4 root root   4096 Dec 24 21:45 home
drwxr-xr-x.  92 root root  12288 Dec 24 19:22 etc重点看第 1 列,代表了这个文件的类型和权限,它共有 10 个字符。如下:

其中,第 1 个字符代表文件类型,接下来是三组 rwx 权限,依次是文件拥有者的权限、文件所属用户组的权限和其它人的权限。
- 文件类型,最常见的有: - -普通文件
- d目录文件
- l符号链接/链接文件
 
- rwx权限,其中:- rread,表示可读
- wwrite,表示可写
- xexecute,表示可执行
- -表示没有相应位置的权限
 
比如 drwxr-xr-x 就表示此文件是一个目录文件,拥有者可读可写可执行,同用户组的用户可读可执行,其它用户可读可执行。

2. 文件的类型
任何设备在 Linux 下都是文件,所以 Linux 里的文件种类非常多。
2.1 常见类型
常见的文件类型有:
- 普通文件/常规文件 - -。按照文件内容,又大概可以分为:- 纯文本文件(ASCII) 
- 数据文件(data) 
- 二进制文件(binary) 
 
- 目录文件 - d
- 链接文件 - l。类似于 Windows 系统里的快捷方式
- 设备与设备文件(device)。与系统周边和存储等相关的文件,通常存储在 - /dev目录下- 区块设备文件 - b(block):就是一些存储数据,以提供给系统随机存取的接口设备,比如硬盘/软盘都是块设备
- 字符设备文件 - c(character):就是一些串行端口的接口设备,比如键盘/鼠标,它们的特色就是一次性读取
 
- 套接字文件 - s(sockets)。此类型的文件通常被用于网络上的数据交换,通常在- /run或- /tmp中能看到这种类型的文件
- 管道文件 - p(FIFO, pipe)
2.2 三种方式
要想查看文件的类型,有三种方式:
- 用 - -l选项,看第一列的第一个字符
- 用 - -F选项,看文件名后面的指示符
- 看终端的颜色 
普通文件
-
无
白色
-
无
红色(压缩文件或归档文件)
-
*
绿色(可执行文件)
目录文件
d
/
蓝色
链接文件
l
@
浅蓝色(链接文件) 红色闪烁(链接文件存在问题)
设备文件
b 区块
c 字符
黄色
套接字文件
s
=
管道文件
p
|
青黄色
ls -lF 看第一列的第一个字符、看文件名后的指示符、看颜色。如下:

3. 文件的权限
目录和文件的权限意义并不相同,因为它们所记录的数据内容不同。
3.1 文件
文件是实际包含数据的地方,包括一般文件、数据库文件、二进制可执行文件等。
所以,权限对于文件来说,都是针对文件的内容的。如下:
- r可读:可以读取此文件的实际内容
- w可写:可以编辑文件的实际内容(但不包括删除该文件)
- x可执行:该文件具有可以被系统执行的权限- 在 Linux 中,文件能否被执行是由此权限来决定的,而和文件的扩展名(后缀)没有什么关系 
- 在 Linux 中,如果文件可以被执行,但它能否被执行成功,则取决于文件的内容 
 
3.2 目录
文件是存放实际数据的地方,而目录是记录文件名列表的。
所以,权限对于目录来说,都是针对目录内的文件名列表的。如下:
- r可读:可以读取目录结构列表,即可以利用- ls命令把此目录的内容列表显示出来
- w可写:可以改动该目录结构列表,包括以下:- 可以建立新的文件和目录 
- 可以删除已经存在的文件和目录(不论该文件的权限是什么) 
- 可以修改已经存在的文件和目录的名字 
- 可以移动该目录内的文件和目录的位置 
 
- x可执行:表示用户能否进入该目录成为自己的工作目录,即能否- cd进来
r
可读取“文件内容”
可读取“目录结构列表”
w
可编辑“文件内容”
可改动“目录结构列表”
x
可执行该文件
可进入该目录
Last updated