Возможно ли при перечислении каталога просматривать числовые разрешения Unix, такие как 644, а не символьный вывод -rw-rw-r--
Спасибо.
unix
command-line
permissions
Джон Винстэнли
источник
источник
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}'"
chmod 777 dir
ваша команда напечатает разрешения как767
Самое близкое, что я могу придумать (сделать это достаточно просто)
stat
, это предположить, что вы знаете, какие файлы вы ищете. Если нет,*
можете найти большинство из них:Это обрабатывает липкий, suid и компанию из коробки:
источник
stat -f '%A %N' *
делает то же самое на Mac (FreeBSD)stat
это не так,ls
поэтому это не правильный ответ. Тем не менее, я считаю, что это правильный ответ в контексте желаемого результата. Еслиawk
разрешено в трубе, тоfind
должно быть разрешено, гдеstat
вызывается-exec
; тогда вы можете использоватьstat
напрямую без*
stat -c '%a %n' * **/*
.Вы можете просто использовать GNU find.
источник
-maxdepth 1
опцию, в противном случае она пересекает все дерево каталогов.Вы можете использовать следующую команду
Также вы можете использовать любой
filename
илиdirectoryname
вместо того,*
чтобы получить конкретный результат.На Mac вы можете использовать
источник
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
Для теста:
приведет к:
и
дам:
источник
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 (восьмеричных значений) и имени файла.
Используйте это, чтобы отобразить числовые значения разрешений Unix (восьмеричные значения) и sgid и sticky-бит папки, имя пользователя владельца, имя группы, общий размер в байтах и имя файла.
Добавьте,
%y
если вам нужно время последней модификации в удобочитаемом формате. Для получения дополнительной информации см. Стат .Лучшая версия с использованием псевдонима
Использование псевдонима - более эффективный способ выполнить то, что вам нужно, и он также включает в себя цвет. Далее отображаются ваши результаты, упорядоченные по групповым каталогам, в первую очередь, цветное отображение, размеры печати в удобочитаемом формате (например, 1K 234M 2G), отредактируйте свой
~/.bashrc
и добавьте псевдоним для своей учетной записи или глобально, отредактировав/etc/profile.d/custom.sh
При наборе
cls
отображаются новые результаты команды LS.Папка Дерево
Во время редактирования вашего bashrc или custom.sh добавьте следующий псевдоним, чтобы увидеть графическое представление, в котором при наборе текста
lstree
будет отображаться текущая структура дерева папок.Это будет отображать:
источник
Вы не используете ls для получения информации о разрешениях файла. Вы используете команду stat. Это даст вам числовые значения, которые вы хотите. «Путь Unix» говорит, что вы должны изобрести свой собственный скрипт, используя ls (или «echo *») и stat, и все, что вам нравится, чтобы предоставить информацию в желаемом формате.
источник
Основываясь на выбранном ответе и предложении использовать псевдоним , я преобразовал его в функцию, чтобы можно было передавать каталог в список.
источник