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

ill*_*rit 12 permissions command-line chmod

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

sudo chmod -664 my_file
Run Code Online (Sandbox Code Playgroud)

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

尝试将权限更改为 000 以外的任何内容似乎不起作用。我在这里缺少什么?

ter*_*don 34

您正在使用-664,请664改用。并且在不需要时永远不要使用sudo。如果这是您的文件,则不需要sudo

chmod 644 my_file
Run Code Online (Sandbox Code Playgroud)

当您在模式之前chmod使用 a运行时-,您将删除该模式。见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
Run Code Online (Sandbox Code Playgroud)

现在运行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
Run Code Online (Sandbox Code Playgroud)

那是因为您从所有者的权限中删除了 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
Run Code Online (Sandbox Code Playgroud)