Skip to content

Latest commit

 

History

History
71 lines (44 loc) · 5.34 KB

file-mode.md

File metadata and controls

71 lines (44 loc) · 5.34 KB

文件权限 File Mode

0666 代表什么权限组合?0644 呢?

在 Unix 和 Unix-like 系统(如 Linux)中,文件权限通常用一个三位的八进制数表示,这三位数分别表示所有者(owner)、所属组(group)和其他用户(others)的权限。

每一位都可以是 0 到 7 的数字,它们分别表示不同的权限组合:

  • 0: 没有任何权限
  • 1: 执行权限
  • 2: 写入权限
  • 3: 写入和执行权限(1+2)
  • 4: 读取权限
  • 5: 读取和执行权限(4+1)
  • 6: 读取和写入权限(4+2)
  • 7: 读取、写入和执行权限(4+2+1)

因此,0666 表示:

  • 所有者有读取和写入权限
  • 所属组有读取和写入权限
  • 其他用户有读取和写入权限

0644 表示:

  • 所有者有读取和写入权限
  • 所属组有读取权限
  • 其他用户有读取权限

在创建文件时,实际的权限还受到进程的 umask 的影响。umask 是一个进程级别的设置,它定义了进程创建文件时要去掉(mask out)的权限。例如,如果 umask 是 0002,那么即使你试图以 0666 的权限创建文件,实际的权限也会是 0664,因为 umask 去掉了其他用户的写入权限。

拷贝操作是否会保留原来文件的所有者?

不会,谁拷贝,新文件的所有者就是谁。

创建者以外的用户可以对 file mode 为 777 的文件做 chmod 吗?

在Unix或Linux系统中,文件权限的三个数字代表了所有者(owner)、群组(group)和其他用户(others)的权限。每个数字是0到7之间的值,分别表示不同的读取、写入和执行权限。777表示所有者、群组和其他用户都有读取、写入和执行的权限。

对于你的问题,“创建者以外的用户可以对 file mode 为 777 的文件做 chmod 吗?”,答案是通常不能。

虽然777权限表示所有用户都可以读取、写入和执行该文件,但更改文件的权限(通过chmod命令)通常只有文件的所有者或超级用户(root)才能做到。也就是说,即使一个文件的权限被设置为777,一个非所有者用户也无法改变这个文件的权限。

这是因为文件权限的更改是一个有潜在风险的操作,如果允许任何用户都可以改变文件权限,那么系统的安全性就可能受到威胁。所以,只有文件的所有者或者超级用户才有权限改变文件的权限设置。

tar 命令制作压缩包,里面的文件会保留制作者用户吗?上传到其他机器上解压,里面的文件属于哪个用户,uid 又是怎样确定的?

tar 命令制作的压缩包会保留文件的原始所有者和权限信息,包括用户 ID (UID) 和组 ID (GID)。这意味着,如果你在一个机器上创建了一个 tar 压缩包,然后在另一台机器上解压这个压缩包,解压后的文件所有者的 UID 和 GID 将与原始文件相同。

然而,文件所有者的名称是根据目标系统上的 /etc/passwd 文件来决定的。也就是说,如果 UID 对应的用户名在目标系统上存在,那么文件的所有者将显示为该用户名。如果 UID 对应的用户名在目标系统上不存在,那么文件的所有者将显示为 UID。

例如,假设你在一台机器上以用户 "alice" (UID 为 1001)的身份创建了一个 tar 压缩包,然后在另一台机器上解压这个压缩包。如果目标机器上存在一个 UID 为 1001 的用户 "bob",那么解压后的文件所有者将显示为 "bob"。如果目标机器上没有 UID 为 1001 的用户,那么解压后的文件所有者将显示为 "1001"。

如果你希望在解压 tar 压缩包时忽略原始的所有者信息,可以使用 --no-same-owner 选项,这样解压后的文件将属于解压这个压缩包的用户。例如:

tar xvf archive.tar --no-same-owner

这个命令将解压 archive.tar 文件,解压后的文件将属于运行这个命令的用户。

举例说明 umask 是怎么用的?

在创建文件时,实际的权限还受到进程的 umask 的影响。

umask 是 Unix 和类 Unix 系统(如 Linux)中的一个函数和命令行工具。它用于设定默认的文件权限,具体来说,它定义了当新的文件或目录被创建时,哪些权限应该被屏蔽。它能被 shell 进程用来控制新建文件或目录的默认权限。

一个文件或目录的权限有三种类型:读(r),写(w)和执行(x)。这些权限适用于三种用户类型:拥有者(u),群组(g)和其他(o)。一个文件或目录的权限可以使用 chmod 命令进行改变。

umask 是一个 4 位八进制数,其每位数字对应上述用户类型的权限。对于新创建的文件,其默认权限通常是 666(读和写);对于目录,其默认权限通常是 777(读,写和执行)。然后,这些默认权限会和 umask 值进行比较,被 umask 屏蔽的权限会被去除。

例如,如果 umask 值设为 022,那么新文件的默认权限会是 644(即 666 减去 022,拥有者有读写权限,群组和其他用户只有读权限),新目录的默认权限会是 755(即 777 减去 022,拥有者有全部权限,群组和其他用户只有读和执行权限)。

总的来说,umask 用于控制新建文件和目录的默认权限,让系统管理员有更细粒度的控制权限设置。