Возможно ли при перечислении каталога просматривать числовые разрешения Unix, такие как 644, а не символьный вывод -rw-rw-r--
Спасибо.
Возможно ли при перечислении каталога просматривать числовые разрешения Unix, такие как 644, а не символьный вывод -rw-rw-r--
Спасибо.
Ответы:
это почти может ..
ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
*2^(8-i));if(k)printf("%0o ",k);print}'
chmod 777 dir
ваша команда напечатает разрешения как767
Самое близкое, что я могу придумать (сделать это достаточно просто) stat
, это предположить, что вы знаете, какие файлы вы ищете. Если нет, *
можете найти большинство из них:
/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
Это обрабатывает липкий, suid и компанию из коробки:
$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
stat -f '%A %N' *
делает то же самое на Mac (FreeBSD)
stat
это не так, ls
поэтому это не правильный ответ. Тем не менее, я считаю, что это правильный ответ в контексте желаемого результата. Если awk
разрешено в трубе, то find
должно быть разрешено, где stat
вызывается -exec
; тогда вы можете использовать stat
напрямую без*
stat -c '%a %n' * **/*
.
Вы можете использовать следующую команду
stat -c "%a %n" *
Также вы можете использовать любой filename
или directoryname
вместо того, *
чтобы получить конкретный результат.
На Mac вы можете использовать
stat -f '%A %N' *
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
macOS 10.14.4, то команда должна быть такой stat -f "%Lp %N" *
. %Lp
кажется, чтобы напечатать то же самое, что и %A
.
@ MYYN
вау, классно! Но как насчет suid, sgid и sticky?
Вы должны расширить свой фильтр с помощью s и t, иначе они не будут учитываться, и вы получите неправильный результат. Чтобы вычислить восьмеричное число для этих специальных флагов, процедура такая же, но индекс равен 4 7 и 10. Возможные флаги для файлов с установленным битом выполнения равны ---s--s--t
amd для файлов без установленного бита выполнения:---S--S--T
ls -l | awk '{
k = 0
s = 0
for( i = 0; i <= 8; i++ )
{
k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) )
}
j = 4
for( i = 4; i <= 10; i += 3 )
{
s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j )
j/=2
}
if ( k )
{
printf( "%0o%0o ", s, k )
}
print
}'
Для теста:
touch blah
chmod 7444 blah
приведет к:
7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah
и
touch blah
chmod 7555 blah
дам:
7555 -r-sr-sr-t 1 cheko cheko 0 2009-12-05 01:03 blah
alias "lsmod=ls -al|awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
Используйте это для отображения числовых значений разрешений Unix (восьмеричных значений) и имени файла.
stat -c '%a %n' *
Используйте это, чтобы отобразить числовые значения разрешений Unix (восьмеричные значения) и sgid и sticky-бит папки, имя пользователя владельца, имя группы, общий размер в байтах и имя файла.
stat -c '%a %A %U %G %s %n' *
Добавьте, %y
если вам нужно время последней модификации в удобочитаемом формате. Для получения дополнительной информации см. Стат .
Лучшая версия с использованием псевдонима
Использование псевдонима - более эффективный способ выполнить то, что вам нужно, и он также включает в себя цвет. Далее отображаются ваши результаты, упорядоченные по групповым каталогам, в первую очередь, цветное отображение, размеры печати в удобочитаемом формате (например, 1K 234M 2G), отредактируйте свой ~/.bashrc
и добавьте псевдоним для своей учетной записи или глобально, отредактировав/etc/profile.d/custom.sh
При наборе cls
отображаются новые результаты команды LS.
alias cls="ls -lha --color=always -F --group-directories-first |awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
Папка Дерево
Во время редактирования вашего bashrc или custom.sh добавьте следующий псевдоним, чтобы увидеть графическое представление, в котором при наборе текста lstree
будет отображаться текущая структура дерева папок.
alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
Это будет отображать:
|-scripts
|--mod_cache_disk
|--mod_cache_d
|---logs
|-run_win
|-scripts.tar.gz
Вы не используете ls для получения информации о разрешениях файла. Вы используете команду stat. Это даст вам числовые значения, которые вы хотите. «Путь Unix» говорит, что вы должны изобрести свой собственный скрипт, используя ls (или «echo *») и stat, и все, что вам нравится, чтобы предоставить информацию в желаемом формате.
Основываясь на выбранном ответе и предложении использовать псевдоним , я преобразовал его в функцию, чтобы можно было передавать каталог в список.
# ls, with chmod-like permissions and more.
# @param $1 The directory to ls
function lls {
LLS_PATH=$1
ls -AHl $LLS_PATH | awk "{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/) \
*2^(8-i));if(k)printf(\"%0o \",k);print}"
}
alias cls="ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\"%0o \",k);print}'"