मैं रिवर्स में अनुमतियों की पुनरावर्ती जांच कैसे करूं?


25

एक आदेश है, मुझे लगता है कि यह अपाचे के साथ आता है, या किसी तरह से संबंधित है, यह अनुमतियों की जांच करता है, सभी तरह से नीचे। तो अगर मैं /home/foo/bar/bazयह मेरे बताएगा कौन-सी अनुमति रहे हैं के लिए baz, bar, foo, और home। क्या किसी को पता है कि यह कमांड क्या है या ऐसा करने का एक और तरीका है। कमांड मूल रूप से तर्क पर शुरू होता है, और यह काम करता है /कि आपको यह पता चले कि अनुमतियाँ रास्ते में क्या हैं ताकि आप देख सकें कि आपको अनुमति की समस्या है या नहीं।

जवाबों:


28

आप जिस उपयोगिता के बारे में सोच रहे होंगे वह nameiकमांड है। मैनुअल पेज के अनुसार:

Namei अपने तर्कों का उपयोग किसी भी प्रकार की Unix फ़ाइल (symlinks, files, Directory, और आगे) के रूप में करता है। Namei तब तक प्रत्येक pathname का अनुसरण करता है जब तक कि टर्मिनल बिंदु नहीं मिलता है (एक फ़ाइल, निर्देशिका, चार डिवाइस आदि)। यदि यह एक प्रतीकात्मक लिंक पाता है, तो हम लिंक दिखाते हैं, और इसका अनुसरण शुरू करते हैं, संदर्भ दिखाने के लिए आउटपुट को इंडेंट करते हैं।

उत्पादन की इच्छा आप इस प्रकार प्राप्त कर सकते हैं:

$ namei -l /usr/src/linux-headers-2.6.35-22/include/
f: /usr/src/linux-headers-2.6.35-22/include/
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxrwsr-x root src  src
drwxr-xr-x root root linux-headers-2.6.35-22
drwxr-xr-x root root include

nameiआदेश का हिस्सा है लिनक्स util एनजी सॉफ्टवेयर पैकेज। देखें मैन्युअल पृष्ठ अधिक जानकारी के लिए।


यह हो सकता है, ऐसा लगता है कि यह केवल सिम्बलिंक के लिए करता है, हालांकि मुझे याद नहीं है कि मैं क्या उपयोग कर रहा था और क्या यह सिम्लिंक पर था।
xenoterracide

जब मैंने पुराने मैनुअल पेज देखे, जिसमें केवल सिमिलिंक का उल्लेख था, मेरे उदाहरण और मैन पेज दोनों के रूप में, यह सभी प्रकार की फाइलों और निर्देशिकाओं के लिए शब्द है।
स्टीवन डी

मेरे लिए नहीं :( यह लंबे समय तक एक लंबी सूची देता है, मेरे लिए,
सहानुभूति के

आप कौन सा संस्करण उपयोग कर रहे हैं? मैं उपयोग कर रहा हूँ 2.18
xenoterracide

2
जो लोग आलसी हैं उनके लिए नेमी का उपयोग करने का एक और उपयोगी तरीका है। namei -l $PWD/public_html/आपके वर्तमान dir से हमें $ PWD की अनुमति मिलती है ताकि आप अपने वर्तमान dir तक परमिट की सूची प्राप्त कर सकें।
nelaaro

7

मुझे किसी भी आदेश की जानकारी नहीं है, लेकिन स्क्रिप्ट लिखना काफी आसान है:

#!/bin/bash    
ARG=$1
while [[ "$ARG" != "." && "$ARG" != "/" ]]
do
        ls -ld -- "$ARG"
        ARG=`dirname -- "$ARG"`      
done

उदाहरण:

$ perms.sh /tmp/1/2/3/hello.txt

-rw-rw-r--    1 user    group          0 Jan 14 16:59 /tmp/1/2/3/hello.txt
drwxrwxr-x    2 user    group       4096 Jan 14 16:59 /tmp/1/2/3
drwxrwxr-x    3 user    group       4096 Jan 14 16:43 /tmp/1/2
drwxrwxr-x    3 user    group       4096 Jan 14 16:43 /tmp/1
drwxrwxrwt   12 root     root       4096 Jan 14 17:02 /tmp

2

कैसे एक मजेदार समाधान के लिए एक पुनरावर्ती बाश समारोह के बारे में:

[bash#] function uptree { ( \ls -ld -- "$PWD"; [ "$PWD" = '/' ] && return; cd ..; uptree ) | column -t ; } 

[bash#] pwd
/home/frielp/bin/dev

[bash#] uptree
drwxrwxr-x.  2   frielp  frielp  4096  Dec  14  14:50  /home/frielp/bin/dev
drwxr-xr-x.  15  frielp  frielp  4096  Aug  23  10:48  /home/frielp/bin
drwxr-xr-x.  60  frielp  frielp  4096  Jan  14  16:48  /home/frielp
drwxr-xr-x.  4   root    root    4096  Dec  1   09:14  /home
dr-xr-xr-x.  23  root    root    4096  Jan  14  08:18  /

[bash#] pwd
/home/frielp/bin/dev
[bash#] 

यह मेरा पसंदीदा है क्योंकि इसके लिए कोई निर्भरता नहीं है। cd .. >/dev/nullहालांकि हम में से एक $CDPATHसेट के साथ उन लोगों के लिए इसे बनाना चाहते हैं (जो इसका उपयोग करने पर सीडी को वर्तमान डायर को आउटपुट करने का कारण बनता है और यह आपके फ़ंक्शन से आउटपुट में हस्तक्षेप करता है।)
बीपोर

2

मुझे लगता है कि आप जहां देख रहे हैं वह कमांड है:

namei -l `pwd`

जो, जब / tmp / foo / bar में निष्पादित होता है, तो आपको एक सूची देता है:

drwxr-xr-x root   root   /
drwxrwxrwt root   root   tmp
drwxr-xr-x user   group  foo
drwxr-xr-x user   group  bar

1

इसे आसानी से वन-लाइनर बनाया जा सकता था। यह पुनरावर्ती नहीं है और इसे बैश में करने का अपेक्षाकृत तेज़ तरीका होना चाहिए। प्रत्येक लूप में pwd को कॉल करना विशेष रूप से तेज़ नहीं है, इसलिए यदि आप कर सकते हैं तो बचें।

#!/bin/bash
if [ -n "$1" ]; then
    echo "Usage: $0 [FILE]"
    exit 1
fi
cd -P -- "$1"
IFS="/"
set -f # turn off globbing for the expansion of $PWD below
for dir in $PWD; do
    stat -c "$PWD %A" .
    cd ..
done

वैकल्पिक, वर्तमान निर्देशिका के लिए एक-लाइनर।

(IFS="/"; set -f; for dir in $PWD; do stat -c "$PWD %A" .; cd ..; done)

क्या वह वन-लाइनर है? क्या मैं कुछ भुल गया?
फुनेहे

Pwd के लिए एक-लाइनर के रूप में: pushd $ (pwd)> / dev / null; OIFS = $ आईएफएस; आईएफएस = "/"; $ (pwd) में dir के लिए; स्टैट -c "$ (pwd)% A"।; cd ..; किया हुआ; आईएफएस = $ OIFS; popd> / dev / null
ewindisch

आपकी स्क्रिप्ट फ़ाइल नामों के साथ काम नहीं करेगी जिसमें रिक्त स्थान या ग्लोबिंग वर्ण हैं।
गिलेस एसओ- बुराई को रोकना

गिल्स, मुझे लगता है कि नहीं। यह मूल रूप से था, लेकिन मैंने इसे संपादन में बदल दिया। मैंने xargs हटा दिया है और इसे फिर से ठीक से काम करना चाहिए।
इविंडिस्क

पुशड और पोप का उपयोग क्यों करें? या eval, उस बात के लिए? सभी परिवर्तनों को स्थानीय रखने के लिए आप एक उपधारा (कोष्ठक) का उपयोग कर सकते हैं। आपको रिक्त स्थान के साथ निर्देशिका नामों की रक्षा set -fकरने और ग्लोबिंग को बंद करने के लिए दोहरे उद्धरण चिह्नों की आवश्यकता है । cd -Pसभी सिम्बलिंक्स का अनुसरण करता है।
गिलेस एसओ- बुराई को रोकना '

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.