Возможно ли при перечислении каталога для просмотра числовых разрешений unix, таких как 644, а не символьного вывода -rw-rw-r -
Спасибо.
Возможно ли при перечислении каталога для просмотра числовых разрешений unix, таких как 644, а не символьного вывода -rw-rw-r -
Спасибо.
Используйте это для отображения восьмеричных значений (числовые разрешения chmod) и имени файла:
stat -c '%a %n' *
Для получения дополнительной информации см. Стат.
Для более эффективного способа сделать это с помощью псевдонима, см. Мой комментарий ниже.
Ближе всего я могу думать (достаточно просто), 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
вы можете просто использовать GNU find.
find . -printf "%m:%f\n"
Вы можете использовать следующую команду
stat -c "%a %n" *
Также вы можете использовать любые filename
или directoryname
вместо *
, чтобы получить конкретный результат.
На Mac вы можете использовать
stat -f '%A %N' *
@MYYN
Ничего себе, хороший awk! Но как насчет suid, sgid и липкого бита?
Вы должны расширить свой фильтр с помощью 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
Вы не используете ls для получения информации о разрешении файла. Вы используете команду stat. Он даст вам численные значения, которые вы хотите. В "Unix Way" говорится, что вы должны придумать свой собственный script с помощью ls (или 'echo *') и stat и все, что вам нравится, предоставить информацию в желаемом формате.
нет, он может печатать только числовые uids/guids.
Используйте это для отображения числовых значений разрешений Unix (восьмеричных значений) и имени файла.
stat -c '%a %n' *
Используйте это для отображения числовых значений разрешений Unix (восьмеричные значения), а также папки sgid и sticky bit, имени пользователя владельца, имени группы, общего размера в байтах и имени файла.
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, 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}"
}
tl; dr: быстрый ответ на вопрос: никто не может распечатать числовые разрешения, используйте stat.
Расширенные права будут потеряны в переводе, если возиться с awk.
например:
$ ls -la /usr/local/src/
total 8
drwxrwsr-x 2 root staff 4096 Oct 23 11:18 .
drwxrwsr-x 10 root staff 4096 Oct 23 11:18 ..
Предлагаемое решение напечатало бы это:
$ ls -la /usr/local/src | awk '{>
total 8
765 drwxrwsr-x 2 root staff 4096 Oct 23 11:18 .
765 drwxrwsr-x 10 root staff 4096 Oct 23 11:18 ..
Что совершенно не так.
stat, с другой стороны, делает это правильно:
$ stat/usr/local/src Файл: /usr/local/src Размер: 4096 Блоки: 8 Блок ввода-вывода: каталог 4096 Устройство: 801h/2049d Индекс: 917803 Ссылки: 2 Доступ: (2775/drwxrwsr-x) Uid: ( 0/root) Gid: (50/персонал) Доступ: 2018-10-24 12: 30: 58.197907324 +0900 Изменение: 2018-10-23 11:18: 59.810677000 +0900 Изменение: 2018-10-23 11:18: 59,810677000 +0900 Рождение: -
Бонус от мужской стат:
$ stat -c %a /usr/local/src
2775
Это было проверено на стабильной Debian.