'chmod -644'会将文件权限设置为000


12

运行后,我有一个带有644(-rw-r--r--)的文件,并想将其更改为664(-rw-rw-r--):

sudo chmod -664 my_file

文件权限设置为000(----------)。

尝试将权限更改为不同于000的任何内容似乎不起作用。我在这里想念什么?


11
为什么-在644前面有一个?尝试sudo chmod 644 my_file-644将删除权利。
索伦A

Answers:


34

您正在使用-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.