Насколько я знаю, нет команды unix, которая перечисляет разрешения для файла и всех его родительских каталогов. Есть ли такая вещь, о которой я не знаю?
2 ответа
1
Вы можете использовать bash one-liner для получения списка разрешений иерархии каталогов. Сначала перейдите в соответствующий каталог, а затем запустите:
pushd .; while [ `pwd` != / ]; do ls -ld `pwd`; cd ..; done; popd
1
Для традиционных разрешений Unix есть namei
:
$ namei -l ~/bin/git-resurrect
f: /home/grawity/bin/git-resurrect
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x grawity grawity grawity
drwxr-xr-x grawity grawity bin
lrwxrwxrwx grawity grawity git-resurrect -> ../src/git/contrib/git-resurrect.sh
drwxr-xr-x grawity grawity ..
drwxrwxr-x grawity grawity src
drwxr-xr-x grawity grawity git
drwxr-xr-x grawity grawity contrib
-rwxr-xr-x grawity grawity git-resurrect.sh
Аналогичная программа для отображения POSIX ACL:
#!/usr/bin/env perl
sub follow {
my @items = split(m|/+|, shift);
my @paths = ();
my $path = "/";
while (defined(my $item = shift @items)) {
my $file = $path . ($path eq "/" ? "" : "/") . $item;
if (-l $file) {
my $target = readlink($file)
// die "Could not read link: $!\n";
unshift @items, split(m|/+|, $target);
push @paths, $file;
} else {
push @paths, $path = $file;
}
}
return @paths;
}
for my $file (@ARGV) {
system("getfacl", "-aPpt", $_) for follow($file);
}