मैक ओएस एक्स: पारंपरिक स्थान जहां बाइनरी फाइलें रहनी चाहिए


61

मैंने एक एप्लिकेशन डाउनलोड किया है जो एक कमांड-लाइन एप्लिकेशन है, और इसे कहीं पर रखना चाहते हैं जहां मैं कमांड-लाइन से स्पष्ट रूप से टाइप किए बिना इसे चला सकता हूं।

  1. इस तरह से कुछ के लिए उपयोग किए जाने वाले पारंपरिक रास्ते क्या हैं? /usr/bin? क्या विभिन्न विकल्प हैं, एक यदि मैं इसे सभी उपयोगकर्ताओं के लिए चाहता हूं, और एक यदि मैं इसे किसी विशेष उपयोगकर्ता के लिए चाहता हूं, तो मेरे व्यवस्थापक खाते की तरह?

  2. या मैं इसे अनुप्रयोग निर्देशिका के तहत अपनी निर्देशिका में रखूं, और इसे पथ में जोड़ दूं? यदि हां, तो कौन सी फ़ाइल नियंत्रित करती है कि रास्ता कहाँ सेट है?

जवाबों:


53

कोर जवाब: आप शायद चाहते हैं /usr/local/bin। आपका macOS कितने हाल का है, इसके आधार पर आपको अपने डिफ़ॉल्ट को अपडेट करने की आवश्यकता हो सकती है $PATH। अधिक जानकारी के लिए नीचे देखें।

अद्यतन 12-01-2018 जब मैंने अपना मूल उत्तर लिखा था, तब से Apple ने अपना डिफ़ॉल्ट बदल दिया $PATH। नतीजतन, मैं नीचे जो कुछ कहता हूं, वह हाल के मैक के लिए अप्रासंगिक है। यदि आप echo $PATHएक टर्मिनल में टाइप करते हैं, और /usr/local/binपहले है, तो आप अपने बदलने के बारे में नीचे सब कुछ अनदेखा कर सकते हैं $PATH

मूल उत्तर

इस संबंध में मैक असामान्य हैं। $PATHएक नियमित उपयोगकर्ता के लिए डिफ़ॉल्ट चर इस तरह दिखता है:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

डाल करके /usr/local/bin के बाद /usr/bin और /bin, मैक सामान्य प्रणाली upends। आम तौर पर, आप कुछ में डाल सकते हैं /usr/local/bin(एक दूसरे पर्ल दुभाषिया कहते हैं, कुछ गैर-मानक तरीके से संकलित), और फिर एक नियमित उपयोगकर्ता पहले सिस्टम-वाइड एक के बजाय कस्टम को हिट करेगा। यह अच्छा है। उपयोगकर्ता वेरिएंट प्राप्त कर सकते हैं, लेकिन सिस्टम शुद्ध रहता है। यह देखते हुए एप्पल के डिफ़ॉल्ट $PATH, हालांकि, में आइटम /usr/binया /binमें कुछ भी करने से पहले मिला हो जाएगी /usr/local/bin। (यह मूल रूप से स्थापित करने के उद्देश्य को पराजित करता है, जैसे, कस्टम पर्ल इन /usr/local/bin।)

इसे ठीक करने के लिए, आप उपयोगकर्ता के होम निर्देशिका में फ़ाइल को $PATHसंपादित करके नियमित उपयोगकर्ता को बदल सकते हैं .profile। (वह फ़ाइल मौजूद नहीं हो सकती है, यदि आपके पास एक नया-नया इंस्टॉल है। उस स्थिति में, इसे बनाएं।)

अर्ध-संबंधित: होमब्रे मैक के लिए उत्कृष्ट पैकेज प्रबंधन प्रदान करता है। डिफ़ॉल्ट रूप से, Homebrew सॉफ्टवेयर स्थापित करता है /usr/local, लेकिन यह एक तरह से ऐसा करता है जिससे चीजों को हटाना और बाद में वेनिला राज्य में वापस आना बहुत आसान हो जाता है।


1
मेरे हौसले से स्थापित ओएक्सएक्स 10.13.6 (हाई सिएरा) पर, पथ में / usr / स्थानीय / बिन पहले (भले ही फ़ोल्डर भी मौजूद नहीं है) डिफ़ॉल्ट रूप से होता है।
लेगोलस

1
@Legolas Apple को लगता है कि वे इसे कैसे संभालते हैं। मैं पोस्ट को संपादित करूँगा।
टेलीमैचस

9

/usr/local/binऔर /usr/local/sbinअच्छी तरह से अपने पथ को जोड़ने के लायक हैं, क्योंकि स्रोत बिल्ड के लिए बहुत सारे मेकफाइल्स वहां स्थापित करने के लिए डिफ़ॉल्ट हैं।

यदि आप MacPorts का उपयोग करते हैं , तो यह जोड़ने /opt/local/binऔर /opt/local/sbinसाथ ही लायक है ।

इसे जोड़ने का सबसे अच्छा तरीका है

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$PATH

करने के लिए .bashrcअपने घर निर्देशिका में फाइल (जो छिपा है, इसलिए CLI का सबसे अच्छा तरीका यह करने के लिए करने के लिए है), या, आप प्रणाली चौड़ा रास्ता बदलना चाहते हैं, के लिए एक ही पंक्ति जोड़ें /etc/bashrc(छिपी नहीं है), लेकिन आप करेंगे यह करने की जरूरत है sudo

यदि आपके पास .bashrcकिसी भी उपयोगकर्ता के घर में नहीं है, तो आप एक बना सकते हैं और इस लाइन को इसमें जोड़ सकते हैं, लेकिन याद रखें कि फ़ाइल में अनुमतियों को बदलने के लिए इसे उपयोगकर्ता द्वारा पठनीय बनाने के लिए बनाएं (जाहिर है कि यदि आप प्रासंगिक नहीं हैं) अपने खुद के प्रोफाइल के लिए यह कर)।

$PATHअंत में जो कुछ भी आप से पहले डाल करने के लिए प्रणाली डिफ़ॉल्ट पथ जोड़ देता है। ध्यान दें कि सिस्टम दिए गए रास्तों के क्रम में बायनेरिज़ की खोज करता है, इसलिए यदि आप बाइनरी को स्थापित करते हैं /usr/localया /opt/localजो सिस्टम पर डिफ़ॉल्ट रूप से भी स्थापित है , तो आपके द्वारा इंस्टॉल किए गए संस्करण पहले मिल जाएंगे, जो (हालांकि शायद ही कभी) परेशान चीजों को कर सकते हैं। यह देखने लायक है।

अच्छी जानकारी यहाँ है

मुझे ध्यान देना चाहिए कि उपरोक्त मान लें कि आप शेल के लिए बैश का उपयोग कर रहे हैं , जो मैक ओएस एक्स v10.4 (टाइगर) और मैक ओएस एक्स v10.5 (तेंदुए) पर डिफ़ॉल्ट है , लेकिन पहले के सिस्टम पर नहीं, जो tcshइसके बजाय उपयोग किया जाता है, जिसका एक अलग वाक्यविन्यास है।

मुझे आशा है कि वह मदद करेंगे...


1
/usr/local/binपहले से ही एक डिफ़ॉल्ट ओएस एक्स में है $PATH(हालांकि बहुत देर हो चुकी है - मेरा उत्तर देखें)। यदि आप MacPorts का उपयोग करते हैं, तो इसके इंस्टॉलर को आपके पथ को आवश्यक रूप से संपादित करना चाहिए - कम से कम यह हमेशा मेरे अनुभव में है। उस ने कहा, उपयोगकर्ताओं के लिए यह जानना अच्छा है कि वह क्या कर रहा है (और क्यों)।
टेलीमेकस जूल

अच्छी तरह से देखा गया @Telemachus: जब भी मैं अपने लिए एक मैक का निर्माण करता हूं, तो मैं रास्ते से बाहर पहली चीज से नरक को अनुकूलित करता हूं, इसलिए मुझे कभी याद नहीं रहता कि क्या मानक है और क्या मेरा!
जूथ

1
मुझे पता है कि आप मैकप्रोर्ट्स इंस्टॉलर के बारे में क्या सोच रहे हैं। रास्ते में रास्ते को अनुकूलित करना। लेकिन मुझे अतीत में ऐसा अवसर मिला है जब किसी कारण से, मुझे पता नहीं है, क्या यह छड़ी करने में विफल रहा (जो मेरे लिए नरक से बाहर निकला। काफी समय!) ... इसलिए तब से मैं इसे हाथ से तार कर देता हूँ ...
१all

"जो छिपा हुआ है, इसलिए सीएलआई ऐसा करने का सबसे अच्छा तरीका है": गूंगा सवाल, आप कमांड प्रॉम्प्ट से एक फाइल पर टेक्स्टएडिट कैसे चलाते हैं?
जेसन एस

एक गूंगे प्रश्न के रूप में ऐसी कोई बात नहीं: openफ़ाइलनाम के साथ कमांड का उपयोग एक तर्क के रूप में करें और इसे डिफ़ॉल्ट पाठ संपादक (मानक के रूप में टेक्स्टएडिट) के रूप में जो कुछ भी सेट किया गया है, उसके साथ खोलना चाहिए।
जूथ

7

मैं साथ जाता हूं /usr/local। यहाँ एक अच्छी व्याख्या क्यों है , जो कि फाइलसिस्टम पदानुक्रम मानक (FHS) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢ को संदर्भित करता है बारी के बारे में कहते हैं /usr/local:

स्थानीय डेटा के लिए तृतीयक पदानुक्रम, इस होस्ट के लिए विशिष्ट है। आमतौर पर आगे उपनिर्देशिकाएँ होती हैं, जैसे, बिन, परिवाद, शेयर ।direct


हां, यह उस संबंध में अन्य * निक्स ऑपरेटिंग सिस्टम के रूप में बहुत अधिक है।
jtbandes

2
कृपया संदर्भ लिंक (एस) से उत्तर के आवश्यक हिस्सों को उद्धृत करें, क्योंकि लिंक लिंक किए गए पृष्ठ बदलने पर उत्तर अमान्य हो सकता है।
DavidPostill
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.