Linux 系统上的每个文件和目录都归某人所有,所有者拥有完全的控制权来更改或删除他们拥有的文件。除了拥有用户之外,文件还拥有一个组。
您可以使用 ls -l 命令查看文件的所有权
[pablo@workstation Downloads]$ ls -l
total 2454732
-rw-r--r--. 1 pablo pablo 1934753792 Jul 25 18:49 Fedora-Workstation-Live-x86_64-30-1.2.iso
输出的第三列和第四列分别是所有者用户和组,它们共同被称为所有权。对于上面的 ISO 文件,两者都是 pablo。
所有权设置由 chmod 命令 设置,控制谁被允许执行读取、写入或执行操作。您可以使用 chown 命令更改所有权(用户和/或组)。
通常需要更改所有权。文件和目录可以在系统上存在很长时间,但用户可能会来来去去。当文件和目录在系统内或从一个系统移动到另一个系统时,也可能需要更改所有权。
我的主目录中的文件和目录的所有权归我的用户和我的主组所有,形式为 用户:组。假设 Susan 正在管理 Delta 组,该组需要编辑一个名为 mynotes 的文件。您可以使用 chown 命令将用户更改为 susan,组更改为 delta
$ chown susan:delta mynotes
ls -l
-rw-rw-r--. 1 susan delta 0 Aug 1 12:04 mynotes
Delta 组完成文件编辑后,可以将其分配回给我
$ chown alan mynotes
$ ls -l mynotes
-rw-rw-r--. 1 alan delta 0 Aug 1 12:04 mynotes
可以通过在用户后附加冒号 (:) 将用户和组都分配回给我
$ chown alan: mynotes
$ ls -l mynotes
-rw-rw-r--. 1 alan alan 0 Aug 1 12:04 mynotes
通过在组前加上冒号,您可以仅更改组。现在 gamma 组的成员可以编辑该文件了
$ chown :gamma mynotes
$ ls -l
-rw-rw-r--. 1 alan gamma 0 Aug 1 12:04 mynotes
chown 的一些附加参数在命令行和脚本中都很有用。与许多其他 Linux 命令一样,chown 也有一个递归参数 -R,它告诉命令深入到目录中以操作内部的所有文件。如果没有 -R 标志,您只能更改文件夹的权限,而保持其内部的文件不变。在本例中,假设目的是更改目录及其所有内容的权限。在这里,我添加了 -v(verbose)参数,以便 chown 报告它正在做什么
$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug 5 15:33 conf
conf:
-rw-rw-r-- 1 alan alan 0 Aug 5 15:33 conf.xml
$ chown -vR susan:delta conf
changed ownership of 'conf/conf.xml' from alan:alan to susan:delta
changed ownership of 'conf' from alan:alan to susan:delta
根据您的角色,您可能需要使用 sudo 来更改文件的所有权。
当您更改文件的所有权以匹配特定配置或当您不知道所有权时(例如在运行脚本时),可以使用参考文件 (--reference=RFILE)。您可以复制另一个文件(RFILE,称为参考文件)的用户和组,例如,撤消上面所做的更改。回想一下,点 (.) 指的是当前工作目录。
$ chown -vR --reference=. conf
报告更改
大多数命令都有控制其输出的参数。最常见的是 -v (--verbose) 以启用详细模式,但 chown 也有一个 -c (--changes) 参数,用于指示 chown 仅在进行更改时报告。Chown 仍然会报告其他内容,例如操作不允许时。
参数 -f (--silent, --quiet) 用于抑制大多数错误消息。我将在下一节中使用 -f 和 -c,以便仅显示实际更改。
保留根目录
Linux 文件系统的根目录 (/) 应受到高度重视。如果在该级别犯了错误,后果可能会导致系统完全瘫痪。特别是当您运行递归命令进行任何类型的更改或更糟糕的情况:删除时。chown 命令有一个参数可以用来保护和保留根目录。该参数是 --preserve-root。如果在根目录上使用递归 chown 命令时使用此参数,则不会执行任何操作,而是显示一条消息。
$ chown -cfR --preserve-root alan /
chown: it is dangerous to operate recursively on '/'
chown: use --no-preserve-root to override this failsafe
当不与 --recursive 结合使用时,此选项无效。但是,如果该命令由 root 用户运行,则会更改 / 本身的权限,但不会更改其中的其他文件或目录的权限。
$ chown -c --preserve-root alan /
chown: changing ownership of '/': Operation not permitted
[root@localhost /]# chown -c --preserve-root alan /
changed ownership of '/' from root to alan
所有权即安全
文件和目录所有权是良好信息安全的一部分,因此偶尔检查和维护文件所有权以防止不必要的访问非常重要。chown 命令是 Linux 安全命令集中最常见和最重要的命令之一。
4 条评论