教程短文资讯

Linux中的Chmod命令和示例

在UNIX/Linux系统中,每个文件或目录都与3种类型的权限相关联,这些权限控制对它们的访问权限。这些权限是读、写和执行。这允许或防止用户读取文件或写入文件。执行权限允许用户将文件作为脚本或可执行文件运行。

什么是chmod命令

Chmod命令用于更改Linux中文件系统对象(如文件和目录)的访问权限。它还用于更改特殊标志,例如SUID、SGID和粘附位。

您可以使用ls -l命令来检查由r、w和x表示的文件模式。

Linux文件权限

在Linux/Unix类操作系统中,每个文件和目录都由用户和组拥有。当我们谈论Linux文件权限时,它涉及文件所有者、组所有者和权限。

有三个基于用户的权限组:

  • 所有者 - 拥有文件或目录的用户。默认情况下,当用户创建文件或目录时,同一用户将成为其所有者。
  • 组 - 拥有文件或目录的组。组中的所有成员将在文件或目录上具有相同的访问权限。
  • 其他 - 不是文件或目录所有者且不属于组的用户。这意味着“everyone”或另一种说法是“world”。

可以使用chown命令更改文件和目录的所有权。要仅更改文件或目录的组,请使用chgrp命令。默认的文件和目录权限基于umask设置。

每个文件或目录有三种文件权限类型:

  • 执行

字符表示读是r,写是w,执行是x

读权限

文件的读权限表示可以打开并阅读文件。

目录(文件夹)的读权限表示用户可以列出目录的内容。

写权限

文件的写权限表示可以更改(修改或更改)文件。

目录的写权限表示可以更改目录内容。例如,用户可以在目录中创建新文件、删除或重命名文件。

执行权限

文件的执行权限表示可以执行文件。例如,用户可以执行程序或shell脚本文件。

目录的执行权限表示用户可以更改(cd)到目录。但是,这不允许用户列出目录内容。

特殊权限模式

除了读、写和执行之外,您还可以在文件和目录上分配几个特殊权限模式。特殊权限模式是SUID(setUID)、SGID(setGID)和粘附位。

当在文件上设置SUID位时,该文件始终作为拥有该文件的用户而不是启动程序的用户运行。使用SUID的Linux命令的一个示例是ls -l /usr/bin/passwd,该命令在普通用户运行时会给予提升的特权。

当在文件上设置SGID时,有效组设置为文件的组。在执行程序时,用户将获得文件组权限。

粘附位通常设置为目录。一旦在目录上设置了粘附位,则只有文件所有者或root可以更改该目录内的文件或目录。

如何在Linux中执行chmod

Chmod使用符号模式或数字模式来指定权限。您需要是root、文件所有者或sudo用户特权才能更改文件权限。

使用数字模式更改文件/目录权限

Chmod数字模式也称为绝对模式。这是最常用的方法。

读、写和执行分配具有特定数字号码。我们使用该数字或组合来设置文件和目录的权限。

Linux权限数字(八进制值)为:

r(读取)= 4 w(写入)= 2 x(执行)= 1 没有权限 = 0

数字模式中chmod的语法:

chmod <permission-number> <file-name or directory-name>

权限数字通常是一个3位数字(每个三位数字由一个八进制模式数字表示)。第一个数字表示所有者,下一个数字表示组,最后一个数字表示其他人。

例如,要设置文件夹的chmod权限:

chmod 777 hello-programs

以下是关于Linux文件权限和如何更改它们的介绍:

在文件权限中,第一个数字代表文件所有者的读、写、执行权限,用rwx表示,分别对应4、2、1,所以如果第一个数字是7,则代表文件所有者拥有读、写和执行权限。第二个数字代表文件所属组的读、写、执行权限,第三个数字代表其他用户的读、写、执行权限。权限数字可以通过每个用户类别中八进制值的总和来计算。

例如,权限 -rw-rw-r-- 可以表示为:

  • 用户(u): rw- = 4+2+0=6
  • 组(g): rw- = 4+2+0=6
  • 其他(o): r-- = 4+0+0=4

从上面的计算中,我们得到数字权限为 664

再举一个例子,文件权限为 -rwxr-xr--

  • 用户(u): rwx = 4+2+1=7
  • 组(g): r-x = 4+0+1=5
  • 其他(o): r-x = 4+0+1=5

在这种情况下,数字权限为 755

你可以同时为用户、所有者和其他用户设置权限。如果要添加特殊权限,如粘着位(sticky bit)、SUID或SGID,我们使用4位数字。第一个数字用于设置以下特殊权限:

SUID = 4 SGID = 2 sticky bit = 1 zero effect = 0

例如,在/tmp目录上设置特殊权限粘着位:

chmod 1777 /tmp

当有许多文件和目录时,你可以递归更改权限:

chmod -R 755 directory-name

使用符号模式进行chmod更改文件/目录权限

chmod符号模式也称为相对模式。当使用符号模式进行chmod操作时,使用字符u(所有者)、g(组)、o(其他)和a(所有用户)。

基本语法:

chmod <ugoa><-+=><rwxst> file-name or directory-name

其中:

  • "-" - 仅删除指定权限
  • "+" - 添加到已有的其他权限
  • "=" - 忽略所有权限并按指定的权限更改权限

例如,要在目录上设置完全权限:

chmod u=rwx,g=rwx,o=rwx directory-name

或者

chmod ugx+rwx directory-name

或者

chmod a+rwx directory-name

递归更改目录和文件权限

要递归更改目录的文件权限,请使用-R或--recursive标志。以下是递归更改目录权限的语法:

chmod -R MODE filename

例如,要在/var/www目录中为子目录和文件分配数字权限模式755,请运行以下命令:

sudo chmod -R 755 /var/www/html

在符号表示法中,可以表示为:

chmod -R u=rwx,og=rx /var/www/html

指定的目录路径中的所有文件和子目录都将继承分配给目录的权限。

更改多个文件的权限

有时你想批量更改目录或文件的权限。

find /path/to/directory -type d -exec chmod mode {} \; find /path/to/directory -type f -exec chmod mode {} \;

例如,将/usr/share/nginx/html目录路径中的目录权限更改为755,请执行以下命令:

find /usr/share/nginx/html -type d -exec chmod 755 {} \;

符号表示法为:

find /usr/share/nginx/html -type d -exec chmod u=rwx,og=rx {} \;

使用参考文件更改权限

使用--reference=reference_file选项,可以将文件权限从一个文件转移到另一个文件。在所示的语法中,filename最终具有与reference_file相同的文件权限。

chmod --reference=reference_file  filename

符号链接中的chmod

在大多数Linux系统中,符号链接权限一般不太重要。通常,更改符号链接的文件权限会更改它所指向的文件的文件权限,而不是符号链接本身。但是在某些系统中,如果需要更改符号链接的权限,则可以键入:

chmod 644 symlink

一些有用的chmod命令示例

chmod 755 directory-name

这等价于chmod u=rwx,go=rx。这为所有者设置读、写和执行权限(完全权限),为其他用户设置读和执行权限。

chmod +x filename

这相当于chmod ugo+x或chmod u+x,g+x,o+x。这为所有者、组和其他用户设置执行权限。

chmod 750 directory-name

这等价于chmod u+rwx,g=rx,o=.这为所有者设置完全权限,为组设置读和执行权限,为其他用户设置无权限。

chmod u+rwx directory-name

忽略所有权限并为所有者设置读、写和执行权限。

chmod -R 700 directory-name

递归为目录的所有者设置完全权限

chmod go-rwx filename

将组和其他用户的读、写和执行权限从文件中删除。

chmod 644 filename

这为所有者分配读和写权限,为文件的组和其他用户分配只读权限。

chmod g+x filename

将组成员的执行权限分配给文件

chmod go-rw  filename

删除文件的用户和组类别的读和写权限。

在本教程中,我们学习了Linux chmod命令以及如何更改它们的权限。

对这篇文章感觉如何?

太棒了
0
不错
0
爱死了
0
不太好
0
感觉很糟
0

You may also like

Leave a reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

More in:教程

教程

在 Ubuntu Linux 上安装 Clang

无论您使用的是 Ubuntu 22.04、20.04 或其他任何版本,并且想要安装 Clang(一个开源的 C、C++ 和 Objective-C 编译器),本文将对您有所帮助。Clang 是 GNU […]