क्या प्रतीकात्मक आउटपुट -rw-rw-r-- के बजाय 644 जैसे संख्यात्मक यूनिक्स अनुमतियों को देखने के लिए निर्देशिका को सूचीबद्ध करना संभव है।
धन्यवाद।
क्या प्रतीकात्मक आउटपुट -rw-rw-r-- के बजाय 644 जैसे संख्यात्मक यूनिक्स अनुमतियों को देखने के लिए निर्देशिका को सूचीबद्ध करना संभव है।
धन्यवाद।
जवाबों:
यह लगभग कर सकते हैं ..
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' *
कि मैक (FreeBSD) पर यही काम करता है
stat
नहीं है ls
इसलिए इस सही जवाब नहीं है। हालांकि, मेरा मानना है कि यह वांछित आउटपुट के संदर्भ में सही उत्तर है। यदि awk
एक पाइप में अनुमति दी जाती है, तो find
अनुमति दी जानी चाहिए कि कहां stat
कहा जाता है -exec
; तो आप stat
सीधे बिना उपयोग कर सकते हैं*
stat -c '%a %n' * **/*
।
आप निम्न कमांड का उपयोग कर सकते हैं
stat -c "%a %n" *
इसके अलावा, आप एक विशिष्ट परिणाम प्राप्त करने के लिए किसी भी filename
या directoryname
इसके बजाय का उपयोग कर सकते हैं *
।
मैक पर, आप उपयोग कर सकते हैं
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
।
@ द मायन्यू
वाह, अच्छा जाग! लेकिन suid, sgid और चिपचिपा बिट के बारे में क्या?
आपको अपने फ़िल्टर को एस और टी के साथ विस्तारित करना होगा, अन्यथा वे गिनती नहीं करेंगे और आपको गलत परिणाम मिलेगा। इस विशेष झंडे के लिए ऑक्टल संख्या की गणना करने के लिए, प्रक्रिया समान है, लेकिन सूचकांक 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;}'"
यूनिक्स संख्यात्मक अनुमति मूल्यों (ओक्टल मान) और फ़ाइल नाम को प्रदर्शित करने के लिए इसका उपयोग करें।
stat -c '%a %n' *
यूनिक्स संख्यात्मक अनुमति मूल्यों (अष्टाधारी मूल्यों) और फ़ोल्डर के sgid और चिपचिपा बिट, मालिक का उपयोगकर्ता नाम, समूह का नाम, बाइट्स में कुल आकार और फ़ाइल नाम प्रदर्शित करने के लिए इसका उपयोग करें।
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 का उपयोग नहीं करते हैं। आप स्टेटमेंट कमांड का उपयोग करें। यह आपको संख्यात्मक मान देगा जो आप चाहते हैं। "यूनिक्स वे" कहता है कि आपको अपनी खुद की स्क्रिप्ट का उपयोग करना चाहिए ls (या 'इको *') और स्टेट और जो कुछ भी आप चाहते हैं प्रारूप में जानकारी देना पसंद करते हैं।
के बंद का निर्माण चुना जवाब और सुझाव एक उपनाम का उपयोग करने के , मैं इसे एक समारोह में बदल जाती है, ताकि सूची के लिए एक निर्देशिका गुजर संभव है।
# 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}"
}
ls: ERROR: Illegal option -- H
usage: ls -1ACFLRTabcdfgilmnopqrstux -W[sv] [files]
awk: cmd. line:2: fatal: file '/usr/include' is a directory
प्रश्न को ध्यान में रखते हुए UNIX निर्दिष्ट करता है, न कि लिनक्स, stat
बाइनरी का उपयोग आवश्यक नहीं है। नीचे दिए गए समाधान बहुत पुराने UNIX पर काम करते हैं, हालांकि sh
(यानी bash
) के अलावा एक शेल आवश्यक था। यह ग्लेन जैकमैन के perl
stat
समाधान की व्युत्पत्ति है । यह एक विकल्प की तरह लगता है जो संक्षिप्तता के लिए खोज करने योग्य है।
$ alias lls='llsfn () { while test $# -gt 0; do perl -s -e \
'\''@fields = stat "$f"; printf "%04o\t", $fields[2] & 07777'\'' \
-- -f=$1; ls -ld $1; shift; done; unset -f llsf; }; llsfn'
$ lls /tmp /etc/resolv.conf
1777 drwxrwxrwt 7 sys sys 246272 Nov 5 15:10 /tmp
0644 -rw-r--r-- 1 bin bin 74 Sep 20 23:48 /etc/resolv.conf
इस उत्तर में जानकारी का उपयोग करके उपनाम विकसित किया गया था
संपूर्ण उत्तर इस उत्तर में समाधान का एक संशोधित संस्करण है
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}'"