Чи можливо при перерахуванні каталогу переглядати числові дозволи 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
...
Він обробляє липку, сукню та компанію з коробки:
$ 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
.
@TY MYYN
вау, приємний awk! А як щодо суїда, жорсткого та клейкого шматочка?
Ви повинні розширити свій фільтр на s і t, інакше вони не будуть зараховані, і ви отримаєте неправильний результат. Для обчислення восьмеричного числа для цього спеціального прапора процедура є такою ж, але індекс дорівнює 4 7 та 10. можливі прапори для файлів із набором бітів Execute ---s--s--t
amd для файлів без біта виконання Execution are---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 (вісімкові значення) та жорсткий і липкий біт папки, ім'я власника власника, ім'я групи, загальний розмір у байтах та ім'я файлу.
stat -c '%a %A %U %G %s %n' *
Додайте, %y
якщо вам потрібен час останньої модифікації у читаному для людини форматі. Для отримання додаткових варіантів див. Stat .
Краща версія з використанням псевдоніма
Використання псевдоніма - це більш ефективний спосіб досягти того, що вам потрібно, а також включає колір. Далі відображаються ваші результати, організовані спочатку за груповими каталогами, відображаються у кольорі, розмірами друку у читаному для людини форматі (наприклад, 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}'"