如何通过SSH检查文件权限

Bms*_*smB 6 linux ssh shell

首先,我对此很陌生,所以如果这是非常基本的或者我听起来过于不了解,请原谅我。

我想检查我的 VPS 上特定目录中的所有文件,以确保文件为 644,目录为 755。FTP 是不可能的,因为文件/目录太多了。SSH 似乎是最合乎逻辑的选择,但在我转到 chmod 权限之前,我想看看我将要更改的内容。有没有办法查找和显示不符合此条件的文件/目录?

提前感谢您的任何见解。

Chr*_*rel 11

作为对 David Spillett 答案的改进,如何使用单个 find 命令?我认为它比所有管道都干净一点,并调用 grep。此外,它减少了一些可能会爆炸的边缘情况。

find . -type f ! -perm 644应该找到每个没有 -rw-r--r-- 权限的文件。对于目录,您可以使用find . -type d ! -perm 755.

一旦您对所看到的感到满意,您甚至可以将 chmod 组合到同一个命令中:

find . -type f ! -perm 644 -exec chmod 644 {} \;
find . -type d ! -perm 755 -exec chmod 755 {} \;


Dav*_*ett 7

find . -type f | xargs ls -l | grep -v rw-r--r--
Run Code Online (Sandbox Code Playgroud)

“寻找当前目录下的所有文件,传递到‘ls -l命令’列出他们的细节,扫描输出ls的所有行(-v选项的grep否定匹配)含有” RW-R - R- -" 和目录:

find . -type d | xargs ls -l | grep -v drw-r--r--
Run Code Online (Sandbox Code Playgroud)

如果要扫描另一个目录,请替换“.” 与它,例如:

find /path/to/directory -type f | xargs ls -l | grep -v rw-r--r--
Run Code Online (Sandbox Code Playgroud)

如果某些文件/目录名称可能包含空格,请在 find 和 xargs 中使用“使用 0 分隔的字符串”选项以避免错误:

find . -type f -print0 | xargs -0 ls -l | grep -v rw-r--r--
Run Code Online (Sandbox Code Playgroud)

此外,您还可以删除-v从grep的选项来查找文件/目录,如果你想列出这些作为一个全面的检查匹配。

find默认情况下,使用也会扫描子目录。要仅扫描一个目录而不是其子目录,您可以ls -l通过管道传输throughgrep而不是使用findand xargs

当您运行时chmod请记住,您可以指定该-v选项,以便它会列出它在执行操作时所做的和不更改的内容 - 这对于让自己确信您给出了正确的命令很有用。

  • find 也支持 -perm 标志, find 。- 类型 f -烫发 0644 (2认同)