![如何通过 SSH 检查文件权限](https://linux22.com/image/549844/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20SSH%20%E6%A3%80%E6%9F%A5%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90.png)
首先,我对此很陌生,所以如果这是非常基础的或者我听起来太无知,请原谅我。
我想检查 VPS 上特定目录中的所有文件,以确保文件为 644,目录为 755。FTP 是不可能的,因为文件/目录太多了。SSH 似乎是最合理的选择,但在我使用 chmod 权限之前,我想看看我将更改什么。有没有办法查找和显示不符合此条件的文件/目录?
提前感谢您的任何见解。
答案1
作为对 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 {} \;
答案2
find . -type f | xargs ls -l | grep -v rw-r--r--
“查找当前目录中的所有文件,传递给“ls -l”列出它们的详细信息,并扫描ls
所有行的输出不是(grep 的 -v 选项否定匹配)包含“rw-r--r--”和目录:
find . -type d | xargs ls -l | grep -v drw-r--r--
如果要扫描其他目录,请用它替换“。”,例如:
find /path/to/directory -type f | xargs ls -l | grep -v rw-r--r--
如果某些文件/目录名称可能包含空格,请在 find 和 xargs 中使用“使用 0 分隔的字符串”选项,以避免错误:
find . -type f -print0 | xargs -0 ls -l | grep -v rw-r--r--
另外,你可以-v
从 grep 中删除选项来查找文件/目录做匹配,如果您想将这些列为健全性检查。
默认情况下,使用find
也会扫描子目录。如果只扫描一个目录而不扫描其子目录,您可以直接通过 输出,ls -l
而grep
不用使用find
和xargs
。
当您运行时chmod
请记住您可以指定选项-v
以便它列出它在执行操作时所做的事情和不会改变的事情 - 这对于确保您给出了正确的命令很有用。
答案3
以下命令应为您提供指定目录中所有文件的数字权限
stat -c "%a %n" /path/to/files/*
答案4
看看这个问题的第一个答案是否适合您:查看权限@stackoverflow