शेल - कुछ कमांड की निर्देशिका कैसे खोजें?


127

मुझे पता है कि जब आप शेल पर होते हैं, तो केवल कमांड का उपयोग किया जा सकता है जो कि PATH पर सेट किए गए कुछ डायरेक्टरी पर पाए जा सकते हैं। यहां तक ​​कि मुझे नहीं पता है कि मेरे पैट वैरिएबल पर क्या डायर हैं (और यह एक और अच्छा सवाल है जिसका जवाब दिया जा सकता है), जो मैं जानना चाहता हूं वह है:

मुझे शेल और लिखना आता है:

$ lshw

मैं शेल पर एक कमांड जानना चाहता हूं जो मुझे बता सके कि यह कमांड कहां स्थित है। दूसरे शब्दों में, यह "निष्पादन योग्य फ़ाइल" कहाँ स्थित है?

कुछ इस तरह:

$ location lshw
/usr/bin

किसी को?

जवाबों:


187

यदि आप बैश या zsh का उपयोग कर रहे हैं, तो इसका उपयोग करें:

type -a lshw

यह दिखाएगा कि लक्ष्य एक बिलिन, एक फ़ंक्शन, एक उपनाम या एक बाहरी निष्पादन योग्य है या नहीं। यदि उत्तरार्द्ध, यह आपके स्थान पर दिखाई देने वाली प्रत्येक जगह को दिखाएगा PATH

bash$ type -a lshw
lshw is /usr/bin/lshw
bash$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
bash$ zsh
zsh% type -a which
which is a shell builtin
which is /usr/bin/which

बाश में, फ़ंक्शन के type -aलिए फ़ंक्शन परिभाषा भी प्रदर्शित करेगा। आप declare -f functionnameएक ही काम करने के लिए उपयोग कर सकते हैं (आपको zsh के लिए इसका उपयोग करना होगा, क्योंकि type -aनहीं करता है)।


उत्तर देने वाले सभी को धन्यवाद, लेकिन यह उत्तर सबसे रोमांचक था! धन्यवाद! मैं सोच रहा था कि मैं पागल हूं, क्योंकि मैंने (बहुत समय पहले) इसे करने का एक तरीका परिभाषित किया था: 'अपडेट', और यह 'एप-गेट अपडेट' कर रहा है; apt-get dist-upgrade 'मेरे लिए। लेकिन अभी के लिए, मैं कुछ update.sh फ़ाइल को कहीं खोजने की कोशिश कर रहा था, और मुझे यह नहीं मिला। इसलिए मैंने यह सवाल शुरू किया। लेकिन अब, 'टाइप-ए अपडेट' का उपयोग करते हुए मैंने पाया कि यह केवल मेरे .bashrc पर मेरे ~ घर पर परिभाषित एक उपनाम था। वास्तव में धन्यवाद।
गेब्रियल एल। ओलिवेरा

1
@ गैब्रिएल: यदि आप इससे परिचित नहीं locateहैं तो फाइलों को खोजने में मदद कर सकते हैं। यह एक डेटाबेस का उपयोग करता है updatedbजो कि एक क्रॉन जॉब से चलाया जाता है। चूंकि locateपूरे फाइल सिस्टम के बजाय एक डेटाबेस खोजता है, इसलिए यह बहुत तेज हैfind (जिसका उपयोग अंतिम उपाय के रूप में किया जा सकता है)।
अगली सूचना तक रोक दिया गया।

धन्यवाद। मैं इस टूल का अध्ययन करूंगा, और देखूंगा कि कैसे उबंटू के क्रोनजोब पर चलने के लिए अपडेटेड शेड्यूल किया गया है।
गेब्रियल एल। ओलिवेरा

कभी-कभी type -aभ्रमित हो सकता है। उदाहरण के लिए, nvmजो एक बैश फ़ंक्शन है जिसे मुझे करने की आवश्यकता है: type -a nvm | head -n1यह जानने के लिए कि वास्तव में क्या है nvm
मैरिनो एक

@MarinosAn: कार्यों के लिए, type -a फ़ंक्शन परिभाषा के साथ-साथ निष्पादन योग्य के प्रकार को भी आउटपुट करता है। उपयोग करने के साथ जोखिम यह headहै कि एक से अधिक प्रकार वाले नामों के मामले में, अतिरिक्त प्रकार आउटपुट नहीं होंगे। आप देखना चाह सकते हैं type -t
अगली सूचना तक रोक दिया गया।

64

ऐशे ही:

which lshw

आपके मार्ग में मेल खाने वाले सभी आदेशों को देखने के लिए:

which -a lshw 

7
यह भी कि -एक lshw जो आपके मार्ग में मेल खाने वाली सभी कमांडों को देखने के लिए है।
AlG

मेरा मानना ​​है कि यह केवल कमांड के साथ काम करता है ($ PATH पर निष्पादन योग्य), फ़ंक्शंस नहीं।
ओलिवियर लैकन

whichसमस्याग्रस्त है क्योंकि कई कार्यान्वयन हैं, जिनमें से कई पूरी तरह से गलत काम करते हैं, और अन्य जो ठीक काम करते हैं, लेकिन अजीब आश्चर्य है। आपको typeइसके बजाय पसंद करना चाहिए ।
16

उपनाम और बैश कार्यों के लिए काम नहीं करता है। कम से कम ubuntu पर। बेहतर उपयोगtype -a lshw
मैरिनो

17

PATH एक पर्यावरण चर है, और इको कमांड के साथ प्रदर्शित किया जा सकता है:

echo $PATH

यह बृहदान्त्र वर्ण द्वारा अलग किए गए रास्तों की सूची है ' :'

whichआदेश में बताता है जो फ़ाइल निष्पादित हो जाता है जब आप एक कमांड चलाएँ:

which lshw

कभी-कभी आपको जो मिलता है, वह एक सहजीवन का मार्ग है; यदि आप उस लिंक को ट्रेस करना चाहते हैं जहां वास्तविक निष्पादन योग्य जीवन है, तो आप इसका उपयोग कर सकते हैं readlinkऔर इसका उत्पादन कर सकते हैं which:

readlink -f $(which lshw)

-fपैरामीटर का निर्देश readlinkसिमलिंक रिकर्सिवली निम्नलिखित रखने के लिए।

यहाँ मेरी मशीन से एक उदाहरण है:

$ which firefox
/usr/bin/firefox

$ readlink -f $(which firefox)
/usr/lib/firefox-3.6.3/firefox.sh

5
~$ echo $PATH
/home/jack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
~$ whereis lshw
lshw: /usr/bin/lshw /usr/share/man/man1/lshw.1.gz

3

TENEX C शैल में tcsh , किसी कमांड के स्थान को सूचीबद्ध कर सकता है, या यदि यह एक अंतर्निहित कमांड है, तो whereकमांड का उपयोग कर जैसे:

tcsh% where python
/usr/local/bin/python
/usr/bin/python

tcsh% where cd
cd is a shell built-in
/usr/bin/cd

1

के लिए एक विकल्प type -a हैcommand -V

चूंकि अधिकांश समय मैं पहले परिणाम में ही दिलचस्पी रखता हूं, इसलिए मैं सिर से भी पाइप करता हूं। इस तरह से स्क्रीन एक बैश फ़ंक्शन के मामले में कोड के साथ बाढ़ नहीं करेगा।

command -V lshw | head -n1

0

कोर्न शेल, बिल्ट-इन kshप्रदान करता whenceहै, जो अन्य शेल बिल्ट-इन, मैक्रोज़ आदि की पहचान करता है। whichकमांड अधिक पोर्टेबल है, हालांकि।


1
Ksh में, whence -aबैश के समान है type -a
अगली सूचना तक रोक दिया गया।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.