我有一个包含 644() 的文件-rw-r--r--
,想要将其更改为 664( -rw-rw-r--
),运行后:
sudo chmod -664 my_file
文件权限设置为 000( ----------
)。
尝试将权限更改为 000 以外的任何值似乎不起作用。我在这里遗漏了什么?
答案1
你正在使用-664
,只需改用664
即可。并且绝不sudo
在不需要时使用。如果那是你的文件,你不需要sudo
:
chmod 644 my_file
当您在模式前chmod
使用运行时-
,您将删除该模式。请参阅man chmod
(重点是我的):
运算符 + 导致将选定的文件模式位添加到每个文件的现有文件模式位中;- 导致它们被移除;和 = 导致它们被添加并导致未提及的位被删除,但目录未提及的设置用户和组 ID 位不受影响。
具体数字如下:
- 1:执行
- 2:写
- 4:阅读
因此,具有权限的文件777
意味着每个人都有权执行这三项操作,因为 1 + 2 + 4 = 7,因此将权限设置为 7 意味着允许读取、写入和执行。
如果你以一个模式为的文件开始777
:
$ ls -l my_file
-rwxrwxrwx 1 terdon terdon 0 May 28 13:45 my_file
现在运行chmod -644
,您将删除这些位644
,并最终得到一个模式为的文件133
:
$ chmod -644 my_file; ls -l my_file
---x-wx-wx 1 terdon terdon 0 May 28 13:45 my_file
这是因为您从所有者的权限中删除了 6(读取 (4) + 写入 (2)),只留下 1(执行)设置,并从组和其他权限中保留 4(读取)。结果是文件所有者只有执行(1)权限,其余权限为写入和执行(您取消设置 4,留下 1 和 3)权限。
因为您的文件大概具有新文件的默认权限,所以644
,当您运行时chmod -644 my_file
,您删除了所有设置的权限位并得到了一个对任何人都没有任何权限的文件。
$ ls -l my_file
-rw-r--r-- 1 terdon terdon 0 May 28 13:45 my_file
$ chmod -644 my_file
$ ls -l my_file
---------- 1 terdon terdon 0 May 28 13:45 my_file