1.1 文件的类型和权限

多人多任务环境,文件权限管理

Linux 优秀的地方之一就是它的多人多任务环境,而它的文件权限管理就能确保每个用户都拥有自己的私密文件。

Linux 的文件身份有三种,分别是拥有者(owner)、所属群组(group)和其它人(others),且这三种身份分别有各自的读(read)、写(write)、执行(execute)权限。

1. 文件的相关属性

ls(list)命令就可以显示出文件的相关属性。

ls [OPTION]... [FILE]...

1.1 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 -lahSls -lahSr

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

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

1.3 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 权限,依次是文件拥有者的权限、文件所属用户组的权限和其它人的权限。

  • 文件类型,最常见的有:

    1. - 普通文件

    2. d 目录文件

    3. l 符号链接/链接文件

  • rwx 权限,其中:

    1. r read,表示可读

    2. w write,表示可写

    3. x execute,表示可执行

    4. - 表示没有相应位置的权限

比如 drwxr-xr-x 就表示此文件是一个目录文件,拥有者可读可写可执行,同用户组的用户可读可执行,其它用户可读可执行。

2. 文件的类型

任何设备在 Linux 下都是文件,所以 Linux 里的文件种类非常多。

2.1 常见类型

常见的文件类型有:

  1. 普通文件/常规文件 -。按照文件内容,又大概可以分为:

    • 纯文本文件(ASCII)

    • 数据文件(data)

    • 二进制文件(binary)

  2. 目录文件 d

  3. 链接文件 l。类似于 Windows 系统里的快捷方式

  4. 设备与设备文件(device)。与系统周边和存储等相关的文件,通常存储在/dev目录下

    • 区块设备文件 b(block):就是一些存储数据,以提供给系统随机存取的接口设备,比如硬盘/软盘都是块设备

    • 字符设备文件 c(character):就是一些串行端口的接口设备,比如键盘/鼠标,它们的特色就是一次性读取

  5. 套接字文件 s(sockets)。此类型的文件通常被用于网络上的数据交换,通常在/run/tmp中能看到这种类型的文件

  6. 管道文件 p(FIFO, pipe)

2.2 三种方式

要想查看文件的类型,有三种方式:

  1. -l 选项,看第一列的第一个字符

  2. -F 选项,看文件名后面的指示符

  3. 看终端的颜色

文件类型
-l 选项
-F 选项
终端颜色

普通文件

-

白色

-

红色(压缩文件或归档文件)

-

*

绿色(可执行文件)

目录文件

d

/

蓝色

链接文件

l

@

浅蓝色(链接文件) 红色闪烁(链接文件存在问题)

设备文件

b 区块 c 字符

黄色

套接字文件

s

=

管道文件

p

|

青黄色

ls -lF 看第一列的第一个字符、看文件名后的指示符、看颜色。如下:

3. 文件的权限

目录和文件的权限意义并不相同,因为它们所记录的数据内容不同。

3.1 文件

文件是实际包含数据的地方,包括一般文件、数据库文件、二进制可执行文件等。

所以,权限对于文件来说,都是针对文件的内容的。如下:

  1. r 可读:可以读取此文件的实际内容

  2. w 可写:可以编辑文件的实际内容(但不包括删除该文件)

  3. x 可执行:该文件具有可以被系统执行的权限

    • 在 Linux 中,文件能否被执行是由此权限来决定的,而和文件的扩展名(后缀)没有什么关系

    • 在 Linux 中,如果文件可以被执行,但它能否被执行成功,则取决于文件的内容

3.2 目录

文件是存放实际数据的地方,而目录是记录文件名列表的。

所以,权限对于目录来说,都是针对目录内的文件名列表的。如下:

  1. r 可读:可以读取目录结构列表,即可以利用ls命令把此目录的内容列表显示出来

  2. w 可写:可以改动该目录结构列表,包括以下:

    • 可以建立新的文件和目录

    • 可以删除已经存在的文件和目录(不论该文件的权限是什么)

    • 可以修改已经存在的文件和目录的名字

    • 可以移动该目录内的文件和目录的位置

  3. x 可执行:表示用户能否进入该目录成为自己的工作目录,即能否cd进来

权限
文件
目录

r

可读取“文件内容”

可读取“目录结构列表”

w

可编辑“文件内容”

可改动“目录结构列表”

x

可执行该文件

可进入该目录

Last updated