linux中怎么查看目录权限,linux – 有没有办法查看路径的所有中间目录的权限..?...

我有一个文件路径..是否有任何单一命令来查看路径中所有中间目录的文件/目录权限..?

解决方法:

我知道一个这样的命令,但它已经快30岁了,虽然它仍然可以正常工作.它应该用sh或perl重写,但这有效:

#!/bin/csh -f

# pup - print all dir perms from here up to root

if ( $#argv == 0 ) then

set args = ( $cwd )

else

set args = ( $argv )

endif

@ mult = ( $#argv > 1 )

foreach dir ( $args )

if ( $mult ) echo "${dir}:"

loop:

if ( "$dir" == '' ) set dir = '/'

ls -lLd "$dir"

if ( "$dir" == '/' ) goto next_for

set dir = ( `echo "$dir" | sed 's;/[^/]*$;;'` )

goto loop

next_for:

end

以下是运行它的示例:

% pup /usr/src/usr.bin/vi/vi

drwxr-xr-x 3 root wsrc 1024 May 29 2008 /usr/src/usr.bin/vi/vi

drwxr-xr-x 13 root wsrc 512 Aug 7 2008 /usr/src/usr.bin/vi

drwxr-xr-x 229 root wsrc 4096 Aug 7 2008 /usr/src/usr.bin

drwxrwxr-x 18 root wsrc 512 Aug 7 2008 /usr/src

drwxr-xr-x 22 root wheel 512 Jan 28 2010 /usr

drwxr-xr-x 21 root wheel 1024 Aug 23 2010 /

它默认为cwd.是的,输出不是很好.如果我今天早上有动力,也许我会改写它.

编辑

这是一个使用系统ls程序的重写.它在处理符号链接方面具有优势:

#!/usr/bin/env perl

use strict;

use warnings;

use Cwd qw( getcwd abs_path );

use File::Basename qw( dirname );

sub ls { 0 == system("ls", "-lid", @_) }

@ARGV = getcwd() unless @ARGV;

for my $path (@ARGV) {

if (-l $path) {

ls($path);

$path = abs_path($path);

}

while (ls($path) && $path !~ m{ \A /+ \z }x) {

$path = dirname(abs_path($path));

}

}

exit;

但我真的很讨厌ls格式化的方式.例如:

chthon(tchrist)% pup1 /dev/null /dev/zero /dev/tty /dev/stdin /dev/fd/0 ~ Mail

79283 crw-rw-rw- 1 root wheel 2, 2 Nov 7 07:53 /dev/null

77953 drwxr-xr-x 3 root wheel 22016 Oct 17 21:15 /dev

2 drwxr-xr-x 21 root wheel 1024 Aug 23 2010 /

79284 crw-rw-rw- 1 root wheel 2, 12 Oct 25 2008 /dev/zero

77953 drwxr-xr-x 3 root wheel 22016 Oct 17 21:15 /dev

2 drwxr-xr-x 21 root wheel 1024 Aug 23 2010 /

79280 crw-rw-rw- 1 root wheel 1, 0 Nov 4 15:17 /dev/tty

77953 drwxr-xr-x 3 root wheel 22016 Oct 17 21:15 /dev

2 drwxr-xr-x 21 root wheel 1024 Aug 23 2010 /

79285 crw-rw-rw- 1 root wheel 22, 0 Oct 25 2008 /dev/stdin

77953 drwxr-xr-x 3 root wheel 22016 Oct 17 21:15 /dev

2 drwxr-xr-x 21 root wheel 1024 Aug 23 2010 /

79308 crw-rw-rw- 1 root wheel 22, 0 Oct 25 2008 /dev/fd/0

77954 dr-xr-xr-x 2 root wheel 1024 Oct 25 2008 /dev/fd

77953 drwxr-xr-x 3 root wheel 22016 Oct 17 21:15 /dev

2 drwxr-xr-x 21 root wheel 1024 Aug 23 2010 /

1143296 drwxr-xr-x 197 tchrist wheel 48128 Nov 7 07:53 /home/tchrist

2 drwxr-xr-x 15 root wheel 512 Aug 12 2008 /home

2 drwxr-xr-x 21 root wheel 1024 Aug 23 2010 /

1146538 lrwx------ 1 root wheel 5 Oct 23 2008 Mail -> /mail

2 drwxr-xr-x 134 tchrist wheel 5120 Nov 7 07:43 /mail

2 drwxr-xr-x 21 root wheel 1024 Aug 23 2010 /

明白了吗?所以这里是一个完全内置的.

让我永远跟踪主要/次要宏,因为我从find2perl偷走了ls例程.它可能不会在我测试的其他系统上做到这些.

#!/usr/bin/env perl

use strict;

use warnings;

my $USE_SHELL_LS_PROGRAM = 0;

use Cwd qw( getcwd abs_path );

use File::Basename qw( dirname );

@ARGV = getcwd() unless @ARGV;

*ls = $USE_SHELL_LS_PROGRAM ? \&your_ls : \&my_ls;

for my $path (@ARGV) {

if (-l $path) {

ls($path);

$path = abs_path($path);

}

while (ls($path) && $path !~ m{ \A /+ \z }x) {

$path = dirname(abs_path($path));

}

}

exit;

########

sub your_ls {

0 == system("ls", "-lid", @_);

}

sub my_ls {

use POSIX qw( strftime );

my $name = shift();

my @rwx = qw(--- --x -w- -wx r-- r-x rw- rwx);

my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,

$atime,$mtime,$ctime,$blksize,$blocks) = CORE::lstat($name)

or do {

printf STDERR "$0: cannot lstat $name: $!\n";

return 0;

};

my $pname = $name;

$blocks

or $blocks = int(($size + 1023) / 1024);

my $perms = $rwx[$mode & 7];

$mode >>= 3;

$perms = $rwx[$mode & 7] . $perms;

$mode >>= 3;

$perms = $rwx[$mode & 7] . $perms;

substr($perms, 2, 1) =~ tr/-x/Ss/ if -u _;

substr($perms, 5, 1) =~ tr/-x/Ss/ if -g _;

substr($perms, 8, 1) =~ tr/-x/Tt/ if -k _;

if (-f _) { $perms = '-' . $perms; }

elsif (-d _) { $perms = 'd' . $perms; }

elsif (-l _) { $perms = 'l' . $perms; $pname .= ' -> ' . readlink($name); }

elsif (-c _) { $perms = 'c' . $perms; $size = sizemm($rdev); }

elsif (-b _) { $perms = 'b' . $perms; $size = sizemm($rdev); }

elsif (-p _) { $perms = 'p' . $perms; }

elsif (-S _) { $perms = 's' . $perms; }

else { $perms = '?' . $perms; }

printf "%9u %-10s %4d %-8s %-8s %8s %s %s\n",

$ino,

$perms,

$nlink,

user($uid),

group($gid),

$size,

strftime("%F %T", localtime $mtime),

$pname;

return 1;

}

sub sizemm {

my $dev = shift;

# these are almost always wrong:

my $major = ($dev >> 8) & 0xff;

my $minor = $dev & 0xff;

# now fix the ones we know how to

for ($^O) {

if (/openbsd/) {

$major = ($dev >> 8) & 0xff;

$minor = ($dev & 0xff) | (($dev & 0xffff0000) >> 8);

}

if (/darwin/) {

$major = ($dev >> 24) & 0xff;

$minor = $dev & 0xffffff;

}

if (/solaris/) {

$major = ($dev >> 18) & 0x3fff;

$minor = $dev & 0x3ffff;

}

if (/linux/) {

$major = (($dev >> 8) & 0xfff) | (($dev >> 32) & ~0xfff);

$minor = ($dev & 0xff) | (($dev >> 12) & ~0xff);

}

}

return sprintf("%3d, %3d", $major, $minor);

}

# cache user number to name conversions

sub user {

use User::pwent;

my $uid = shift;

our %user;

$user{$uid} = getpwuid($uid)->name || "#$uid"

unless defined $user{$uid};

return $user{$uid};

}

# cache group number to name conversions

sub group {

use User::grent;

my $gid = shift;

our %group;

$group{$gid} = getgrgid($gid)->name || "#$gid"

unless defined $group{$gid};

return $group{$gid};

}

例如:

chthon(tchrist)% pup2 /dev/null /dev/zero /dev/tty /dev/stdin /dev/fd/0 ~ Mail

79283 crw-rw-rw- 1 root wheel 2, 2 2011-11-07 07:34:47 /dev/null

77953 drwxr-xr-x 3 root wheel 22016 2011-10-17 21:15:55 /dev

2 drwxr-xr-x 21 root wheel 1024 2010-08-23 11:43:46 /

79284 crw-rw-rw- 1 root wheel 2, 12 2008-10-25 08:03:50 /dev/zero

77953 drwxr-xr-x 3 root wheel 22016 2011-10-17 21:15:55 /dev

2 drwxr-xr-x 21 root wheel 1024 2010-08-23 11:43:46 /

79280 crw-rw-rw- 1 root wheel 1, 0 2011-11-04 15:17:35 /dev/tty

77953 drwxr-xr-x 3 root wheel 22016 2011-10-17 21:15:55 /dev

2 drwxr-xr-x 21 root wheel 1024 2010-08-23 11:43:46 /

79285 crw-rw-rw- 1 root wheel 22, 0 2008-10-25 08:03:50 /dev/stdin

77953 drwxr-xr-x 3 root wheel 22016 2011-10-17 21:15:55 /dev

2 drwxr-xr-x 21 root wheel 1024 2010-08-23 11:43:46 /

79308 crw-rw-rw- 1 root wheel 22, 0 2008-10-25 08:03:51 /dev/fd/0

77954 dr-xr-xr-x 2 root wheel 1024 2008-10-25 08:03:51 /dev/fd

77953 drwxr-xr-x 3 root wheel 22016 2011-10-17 21:15:55 /dev

2 drwxr-xr-x 21 root wheel 1024 2010-08-23 11:43:46 /

1143296 drwxr-xr-x 197 tchrist wheel 48128 2011-11-07 04:16:49 .

2 drwxr-xr-x 15 root wheel 512 2008-08-12 16:51:23 /home

2 drwxr-xr-x 21 root wheel 1024 2010-08-23 11:43:46 /

1146538 lrwx------ 1 root wheel 5 2008-10-23 14:50:24 Mail -> /mail

2 drwxr-xr-x 134 tchrist wheel 5120 2011-11-07 07:43:59 /mail

2 drwxr-xr-x 21 root wheel 1024 2010-08-23 11:43:46 /

标签:bash,linux,shell,unix

来源: https://codeday.me/bug/20190726/1541167.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值