如何在 Linux 中使用 chmod 和 chown 命令
使用 chown 命令更改文件所有者和组信息。我们运行 chmod 命令来更改文件访问权限,例如读取、写入和访问。本页介绍如何在 Linux 或类 Unix 系统上使用 chmod 和 chown 命令。
了解 chmod 和 chown 命令的文件权限
可以使用文件权限来控制对其文件的访问。系统管理员可以根据文件权限实施安全策略。所有文件都有三种类型:
- 所有者– 创建文件的个人或流程。
- 组– 所有用户都有一个主要组,并且他们拥有该文件,这对于共享文件或授予访问权限很有用。
- 其他– 既不是所有者也不是群组成员的用户。也称为世界权限。
读取 (r)、写入 (w) 和执行 (x) 权限
我们可以对文件和目录设置以下权限:
允许 | 文件 | 目录 |
---|---|---|
r | 读取访问/查看文件 | 用户可以读取文件。换句话说,他们可以运行 ls 命令来列出文件夹/目录的内容。 |
w | 写入访问/更新/删除文件 | 用户可以从目录中更新、写入和删除文件。 |
x | 执行访问。以命令形式运行文件/脚本 | 用户可以作为命令执行/运行文件,并且他们也拥有 r 权限。 |
- | 无访问权限。当你想删除 r、w 和 x 权限时 | 所有访问权限均被剥夺或删除。 |
请注意,内核决定的权限优先级如下:
User permissions -> Group permissions -> Other permissions
用户权限优先于组权限,组权限优先于其他权限。
查看 Linux/Unix 文件权限和所有权
运行 ls 命令:
例如,我们可以列出 /etc/hosts 和 /etc/ 目录的权限,如下所示:
将选项传递给 ls 以列出目录本身,而不是其内容:
ls -l
# Show information about a file named file1 #
ls -l file1
ls -l /path/to/file1
# Get information about a directory named dir1 #
ls -ld dir1
ls -l -d /path/to/dir1
ls -l /etc/hosts
-d
-rw-r--r-- 1 root root 742 Jul 1 14:39 /etc/host
ls -l -d /etc/
drwxr-xr-x 175 root root 12288 Jul 30 08:53 /etc
从上面的输出可以清楚地看出,第一个字符drwxr-xr-x和-rw-r–r–中表示文件类型,接下来的 9 个字符是实际的文件权限。
–rw -r–r–文件和d rwxr-xr-x目录权限解释
第一个字符 | 描述 |
---|---|
- | 常规文件。 |
b | 阻止特殊文件。 |
c | 字符特殊文件。 |
d | 目录。 |
l | 符号链接。 |
p | 先进先出。 |
s | 插座。 |
w | 白茫茫的。 |
接下来的九个字符是文件权限,分为三组/三个字符,分别表示所有者权限、组权限和其他/世界权限,如下所示:
三个权限三元组定义了用户/组/其他人可以做什么 | 第一个三要素定义了所有者可以做什么 | 第二个三角解释了小组成员可以做什么 | 第三个三元组定义了其他用户可以做什么 |
---|---|---|---|
-rw-r--r-- | 所有者仅具有读写权限(rw-) | 组具有读取权限(r--) | 其他人有读取权限(r--) |
drwxr-xr-x | 所有者拥有完全权限 ( rwx) | 组具有读取和执行权限(r-x) | 其他人具有读取和执行权限(r-x) |
使用 stat 命令显示文件权限
运行以下命令:
stat file1
stat dir1
stat /etc/passwd
stat /etc/resolv.conf
File: /etc/passwd Size: 3100 Blocks: 8 IO Block: 4096 regular file Device: fd02h/64770d Inode: 25954314 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-07-29 23:09:01.865822913 +0530 Modify: 2020-07-02 19:16:43.743727913 +0530 Change: 2020-07-02 19:16:43.747727898 +0530 Birth: -
GUI 显示文件权限:
chown 命令
chown 命令更改给定文件的用户和/或组所有权。语法如下:
chown owner-user file chown owner-user:owner-group file chown owner-user:owner-group directory chown options owner-user:owner-group file
示例
首先,列出 demo.txt 的权限,输入:
# ls -l demo.txt
示例输出:
-rw-r--r-- 1 root root 0 Aug 31 05:48 demo.txt
在此示例中,将文件所有权更改为 vivek 用户并列出权限,运行:
示例输出:
# chown vivek demo.txt
# ls -l demo.txt
-rw-r--r-- 1 vivek root 0 Aug 31 05:48 demo.txt
在下一个示例中,所有者设置为 vivek 后跟冒号,组所有权也设置为 vivek 组,运行:
示例输出:
# chown vivek:vivek demo.txt
# ls -l demo.txt
-rw-r--r-- 1 vivek vivek 0 Aug 31 05:48 demo.txt
在此示例中,仅更改文件的组。为此,给出了冒号和后面的 GROUP-name ftp,但省略了所有者,仅更改了文件的组:
示例输出:
# chown :ftp demo.txt
# ls -l demo.txt
-rw-r--r-- 1 vivek ftp 0 Aug 31 05:48 demo.txt
请注意,如果仅给出冒号,或者 NEW-OWNER 为空,则所有者和组都不会更改:
# chown : demo.txt
在此示例中,将 /foo 的所有者更改为“root”,执行:
# chown root /foo
同样,但也将其组更改为“httpd”,输入:
# chown root:httpd /foo
将 /foo 和子文件的所有者更改为“root”,运行:
# chown -R root /u
其中,
- -R– 递归地更改目录及其内容的所有权。
chmod 命令
语法是:
我们使用以下字母表示用户:
chmod permission file
chmod permission dir
chmod UserAccessRightsPermission file
- u对于用户
- g对于团体
- o对于其他人
- a面向所有人
我们可以使用以下字母设置或删除(用户访问权限)文件权限:
- +用于添加
- -用于移除
- =设置精确的权限
文件许可函如下:
- r只读
- w只写
- x仅执行
现在我们可以使用符号方法根据上述字母来更改文件权限。
示例
删除组和其他人在名为 config.php 的文件上的读写权限:
让我们为所有人/每个人 (a) 添加读取权限。换句话说,为用户、组和其他人提供读取权限:
删除所有人 (a) 的执行权限:
为所有人 (a) 添加读取和执行权限:
接下来,为用户设置读写权限,为组设置读取权限,并删除其他人的所有访问权限:
在此文件示例中,为用户和组设置读写权限:有关更多信息,
请参阅“如何使用 chomod 命令更改用户权限”。
$ ls -l config.php
# State 'who' : g (group) and o (others)
# State what to do with 'who': - (remove)
# State permissions for 'who': r (read) and w (write)
$ chmod -v go-rw config.php
$ ls -l config.php
$ stat config.php
$ chmod a+r file.pl
$ chmod a-x myscript.sh
$ chmod a+rx pager.pl
$ chmod u=rw,g=r,o= birthday.cgi
$ chmod ug=rw /var/www/html/data.php
结论
我们为 Linux 和 Unix 用户解释了 chown 和 chmod 命令。我强烈建议您通过键入以下 man 命令来阅读手册页,或者参阅 GNU coreutils 在线帮助页面:
man chown
man chmod