我需要一些帮助来解决家庭作业问题,以修改文件的权限。它想要吗-rwxr-xr-x
?不确定如何设置用户权限。谢谢。
答案1
让我们分析一下你的作业:-rwxr-xr-x
,把它们分成三个部分-rwx|r-x|r-x
:
rwx
:为用户或所有者读取、写入和执行r-x
:组成员可读、不可写、可执行r-x
:与相同,2
但这次针对其他每个人,又名others
。
不,您需要使用更改权限程序运行命令,chmod
如下所示:
chmod 755 filename
解释:
将权限更改为:
- user: 7 => r(4), w(2), x(1) - group: 5 => r(4), -, x(1) - others: r(4), -, x(1)
现在您必须拥有该文件或文件夹才能执行此操作或属于 sudo 组。
答案2
还有一个更“健谈”的版本来设置权限:
chmod u=rwx,g=rx,o=rx filename
这意味着:
- 授予用户(
u=
)rwx
权限,并 - 授予组 (
g=
)rx
权限,并且 - 授予其他人(
o=
)rx
权限。
您可以省略不想更改的部分,例如:
chmod u=rwx filename
将设置用户的权限,其他权限保持不变。
您甚至可以“添加”或“减去”权限:
chmod g-x filename
将删除该群组的x
权限,并且
chmod o+w filename
将为其他人添加写权限。
要设置 SUID、SGID 和粘滞位,请使用s
和t
权限:
chmod u+s filename
-- 设置 SUIDchmod g+s filename
-- 设置 SGIDchmod a+t filename
-- 设置粘滞位(a
表示“全部”,即和u
和)g
o
答案3
强制性序言
修改系统中重要文件和目录的权限可以把东西弄坏。如果您觉得重新安装系统或从实时会话中检索数据很不方便,请确保安全地尝试权限和所有权。在学习文件系统和基本命令时,您应该避免正在运行chmod
并且chown
使用sudo
或在 root shell 中这样,权限错误就会让你知道你可能正在做一些有风险的事情,你应该再次检查该命令。
我们使用 更改文件权限chmod
。此命令具有递归标志-R
。此标志通常不必要地使用,并且很少有用,因为我们通常不希望目录具有与其内部文件相同的权限。目录需要执行权限才能进入,因此没有它就没有用处,而文件只有在是程序时才需要执行权限。如果没有该标志-R
,chmod
只能造成有限且可修复的损坏,但使用 ,-R
您可以在单个命令中使系统变得一团糟。如果您正在使用-R
,请考虑是否真的需要它,并检查文件路径是否有拼写错误。
您被要求提供给文件的模式是常见模式
-rwxr-xr-x
前导破折号表示这是一个常规文件。x
三处的数字表示它需要可由任何用户执行。因此,此模式适用于任何人都可以执行的程序。系统上的大多数程序都具有此模式,您可以通过检查 中的文件等看到这一点/usr/bin
(/bin
我将在本答案的后面解释如何检查权限)。对于安全性而言,只有所有者 root 可以写入(修改)这些文件非常重要,因此您运行的程序不会被没有 root 权限的用户意外(或以其他方式)更改。
正如指出的那样George Udosen 的回答权限位是针对用户(文件所有者)、组和其他用户分别设置的。例如,在我们的标签 wikichmod
以及互联网上的许多其他地方,甚至在您的系统上;您可以通过运行来阅读有关它的man chmod
信息。您被要求使文件可由其所有者读取、写入和执行,并使其组和其他人可读取和写入。您可以通过运行来查看文件的所有者和组ls -ld file
(-d
仅当它是目录时才需要;如果没有该标志,则ls
显示目录的内容而不是目录本身)或者如果您想要更少的无关信息,请使用stat
:
stat -c '%U %G' file
-c
表示控制输出。%U
= 文件所有者,%G
= 组。file
应替换为您要检查其元数据的文件的路径。如果它在当前目录中,则其名称就足够了,但您可以为其他地方的文件提供路径:
$ stat -c '%U %G' /var/log/syslog
syslog adm
该stat
命令还可以以八进制和“人类可读”的形式显示文件权限:
stat -c '%n %a %A' *
(我曾经%n
显示文件名,并在当前目录中的每个非隐藏文件上*
运行。)stat
如果您忘记了某个八进制数代表的权限位chmod
,这将为您提供非常有用的参考。vidarlo 的回答提供了一种很好的回忆方法。
我强烈建议您在更改您关心的文件的权限之前先检查它的权限,因为除了手动设置之外,您将没有其他方法可以“重置”原始模式。
其他答案已经解释了如何用八进制表示法设置所需的文件模式。chmod
接受符号表示法和八进制的文件模式,当您只想修改一个权限位(该rwxr-xr-x
字符串中的一个字母)时,这很有用。Perl Duck 的回答解释如何设置您想要的模式。
当我创建一个脚本并想使其可执行时(这是我使用的主要原因)chmod
,我使用符号表示法赋予自己执行权限并且不做任何其他更改,使用以下命令:
chmod u+x file
如果该脚本需要由所有用户执行,我将在不执行以下任一操作的情况下运行该脚本u
:
chmod +x file
在你当前的情况下,这可能就足够了,因为文件通常默认创建时具有所有者可读写的权限,而只有组和其他人可读,但也有可能创建时具有组的写入权限。这取决于umask
设置用户创建文件时所具有的设置。让我们创建一个文件并查看它!
$ touch somefile
$ stat -c '%a %A' somefile
664 -rw-rw-r--
好的。因此,为了获得模式,755
我需要w
从g
部分中删除位,然后x
在所有地方添加位。
用符号表示法,我可以这样做:
$ chmod +x,g-w somefile
$ stat -c '%a %A' somefile
755 -rwxr-xr-x
另一种写法+x
是。代表全部,如果没有给出字母,则默认为全部。需要注意的是:chmod
代表用户,即所有者,而代表其他人 (a+x
a
u
o
不是所有者)。
您还可以将所有位设置为a
u
g
或o
带有=
符号。下面是我尝试使用无用的权限设置:
$ chmod =x somefile
$ stat -c '%a %A' somefile
111 ---x--x--x
$ chmod u=r,g=rwx,o= somefile
$ stat -c '%a %A' somefile
470 -r--rwx---
您可以使用八进制和符号表示法来添加特殊位,如 setuid(这允许以所有者的身份运行程序,因此很危险)和 setgid(这会导致随后在具有 setgid 的目录中创建的文件继承目录的组所有权,这很有用,因为它允许您控制某个文件系统位置中的一组用户的权限,而不必经常摆弄它)。
有些人喜欢八进制符号,有些人喜欢符号符号。后者更灵活一些,对某些人来说可能更直观一些。我建议测试和学习两者(安全!)这样chmod
当你看到任何命令时,你就能弄清楚它会做什么,并巧妙地解决任何与它有关的作业问题 :)
总结
- 小心使用。除非您知道自己在做什么,否则
chmod
不要使用。在使用该标志前请仔细考虑。sudo chmod
-R
- 首先查看现有的权限。
stat
是你的朋友 - 学习符号和八进制符号。
答案4
我发现以八进制权限来思考最容易:
- 1 等于执行
- 2 等于写
- 4 等于读
通过按位设置可以很容易地看到这一点:
r w x
0 0 1 #Execute = 1
0 1 0 #Write = 2
1 0 0 #Read = 4
1 0 1 #Read + Execute = 5
1 1 0 #Read + Write = 6
1 1 1 #All permissions = 7
这些可以相加。读取和执行是 4+1=5。读取、执行和写入是 7 (4+2+1),仅写入是 2,依此类推。
权限有三位数字:用户、组和其他。用户的 rwx 变为第一位数字 7(完全权限)。组的 rx 变为 1+4=5,其他的 rx 变为 5。因此这等于权限 755。