рассмотрим вывод этой команды ls -l:
$ ls -l /usr/bin | tail
-rwxr-xr-x 1 root root 105696 Oct 25 2014 zenity
-rwxr-xr-x 1 root root 188296 Oct 21 2013 zip
-rwxr-xr-x 1 root root 86096 Oct 21 2013 zipcloak
-rwxr-xr-x 1 root root 48459 Mar 3 2015 zipdetails
-rwxr-xr-x 1 root root 2953 Oct 29 10:45 zipgrep
-rwxr-xr-x 2 root root 166584 Oct 29 10:45 zipinfo
разрешения перечислены в симпатичных человекочитаемых символах. Есть ли способ получить ls для вывода числового эквивалента этих разрешений?
В соответствии с https://stackoverflow.com/questions/1795976/can-the-unix-list-command-ls-output-numerical-chmod-permissions это невозможно.
Ответ к этому вопросу, однако предлагает способ «почти» достичь этого:
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}'
Вы можете сделать это псевдонимом для удобства использования, но только один не может этого сделать.
Вот забавный конвейер
paste <(printf "%04d\n" $(stat -c '%a' *)) <(ls -l | sed 1d) |
sed -r 's/([[:digit:]]+)\t(.)........./\2\1/'
printf "%04d\n" $(stat -c '%a' *) - печатает нулевые права доступа на восьмеричный доступ для каждого файла ls -l | sed 1d - длинный список, минус первая строка «всего 12345», paste <(...) <(...) - берет одну строку из каждой подстановки процесса и соединяет их с вкладкой sed -r 's/([[:digit:]]+)\t(.)........./\2\1/' - заменяет читаемые разрешения rwxrwxrwx для человека с восьмеричным значением. Взгляните на поиск GNU:
find -printf "%y %m %n %u %g %Ac %f\n" -maxdepth 1
Смотрите: man find