本文译自:Introduction to the Liux chown command
译者:EmuLab
校对:OpenView
原文及本文遵循:[CC BY-SA协议]
如何使用chown改变一个文件或者目录的所有权
Linux系统上的每个文件和目录都由某人所拥有,而所有者有完整的控制权来修改或删除文件。除了具有所有者外,一个文件也有所有组属性。
你可以使用ls -l命令来查看一个文件的所有权信息:
[pablo@workstation Downloads]$ ls -ltotal 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命令来改变所有权。
有时候改变所有权属性是必须要做的。文件和目录可以在一个系统上长期存在,但是用户却可以有来有往。当文件和目录在系统上移动或者被转移到另一个系统时,文件的所有权也可能需要被改变。
我的主目录下的文件和目录的所有权是我的用户和主要组,以user:group的形式呈现。假设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 confconf:-rw-rw-r-- 1 alan alan 0 Aug 5 15:33 conf.xml$ chown -vR susan:delta confchanged ownership of 'conf/conf.xml' from alan:alan to susan:deltachanged ownership of 'conf' from alan:alan to susan:delta
取决于你的用户,你也许需要使用sudo来改变一个文件的权限。
报告变化信息
大多数命令都有参数来控制它们的输出信息。最常见的就是用-v(--verbose)来启用冗杂输出。但是chown也有一个-c(--changes)参数来指示chown只在做出了修改时才给出报告。Chown仍然会报告其它内容,比如当某个操作不被允许时。
参数-f(--silent, --quiet)被用户抑制错误信息输出。下一节中,我将使用-f和-c参数来只显示实际的修改。
保护Root
Linux文件系统的root(/)应当被给予足够的尊重。如果在此层级上犯了错,结果可能是使得整个系统都无法正常工作。尤其当你在递归地运行一个可能会UI进行修改或者更糟的删除操作时。chown命令有一个参数可以被用于保护root。该参数就是--preserve-root。如果当你对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上关于系统安全的最常用的命令之一。
推荐阅读(点击跳转):
如何方便地在Linux上查询硬件信息并生成报告
3个重启Linux系统的命令(以及4个安全实现的方式)
如何轻松地在命令行上同时移动多种类型的文件?
GameHub:将所有的游戏统一到一个屋檐(平台)下
您可能想知道的'top'命令行实用程序的一些替代方案
如何实现更改Linux终端字体的种类和大小
mktemp命令教程,包含初学者示例
Linux中那些我们赖以为生的Bash别名
喜欢使用Linux办公、学习、hack的朋友们可以点击关注小编,小编将竭力提供更多内容给大家交流~