केवल सॉफ्टवेयर के लिए आपको अपनी घरेलू निर्देशिका का उपयोग करना चाहिए /usr/local।
/usr/localजब आप नहीं करना चाहते हैं तो कमांड के स्वामित्व को बदलने या रूट के रूप में चलाने के बजाय , आपको बस अपने बिल्ड को कॉन्फ़िगर करना चाहिए ताकि वे आपके होम डायरेक्टरी में स्थापित करें /usr/local। यह सभी संभावित समस्याओं के स्वामित्व को बदलने के साथ संबोधित करता है /usr/local, जिसमें यह भी शामिल है कि इसकी binऔर sbinउपनिर्देशिकाएँ किस तरह की हैं root।
यदि आपको अन्य उपयोगकर्ताओं को अपना सॉफ़्टवेयर चलाने की अनुमति देने की आवश्यकता है, तो आप उन्हें एक्सेस दे सकते हैं। वास्तव में, वे संभवत: पहले से ही सक्षम होंगे, क्योंकि डिफ़ॉल्ट रूप से आपके घर की निर्देशिका में अनुमति पढ़ने और निष्पादित करने की अनुमति है । (यदि आप ऐसा नहीं चाहते हैं, तो आप इसे बहुत आसानी से बदल सकते हैं, बस chmodजिस भी फाइल या निर्देशिका को आप निजी बनाना चाहते हैं, उस पर उपयोग करके और संभवतः अपना नाम भी बदल सकते हैं umask।)
आपके घर निर्देशिका में स्थापित सॉफ्टवेयर के साथ, बायनेरिज़ जो अंदर गए /usr/local/binहोंगे, इसके बजाय अंदर जाएंगे । आपको अपने होम डायरेक्टरी की अन्य उपनिर्देशिकाएँ मिलेंगी जो उस सॉफ़्टवेयर की उपनिर्देशिकाओं के अनुरूप हैं जिन्हें आप स्थापित करते हैं। जब आप स्रोत कोड से सॉफ़्टवेयर इंस्टॉल करते हैं तो यह स्वचालित रूप से होगा।/home/username/bin/usr/local
आपके बिल्ड को कॉन्फ़िगर करना
स्रोत कोड से आपके द्वारा बनाए गए अधिकांश सॉफ़्टवेयर में एक चरण होता है जहां आप चलते हैं:
./configure
सॉफ्टवेयर के महान बहुमत के लिए एक configureस्क्रिप्ट के साथ जहाज जो उस तरह चलाया जा सकता है, यह स्थापना के लिए बिल्ड को कॉन्फ़िगर करने में चूक करता है /usr/localजब आप अंततः sudo make installइसे स्थापित करने के लिए चलाते हैं । कारण यह है कि यह अंतर्निहित रूप से चलने के बराबर है:
./configure --prefix=/usr/local
अपने होम निर्देशिका में स्थापना के लिए एक बिल्ड को कॉन्फ़िगर करने के लिए, इसके बजाय इसका उपयोग करें:
./configure --prefix="$HOME"
अभ्यास में, उबंटू में, घर निर्देशिका पथों में रिक्त स्थान, अन्य व्हाट्सएप, या अन्य वर्ण नहीं होते हैं जो विशेष रूप से शेल द्वारा इलाज किए जाएंगे *, इसलिए जब तक आपने अपने उपयोगकर्ता खाते को काफी अजीब तरह से सेट नहीं किया है, आप बस टाइप कर सकते हैं:
./configure --prefix=$HOME
( हालांकि, स्क्रिप्ट लिखने के लिए मुझे इसकी आदत पड़ने की सलाह नहीं है । इसके अलावा, कुछ अन्य OSes पर - जैसे macOS - यह रिक्त स्थान के लिए उपयोगकर्ताओं के घर निर्देशिकाओं के लिए पथ के लिए कम असामान्य नहीं है।)
या यदि आप चाहें तो अपनी पूरी होम निर्देशिका पथ टाइप कर सकते हैं:
./configure --prefix=/home/username
( usernameअपने वास्तविक उपयोगकर्ता नाम के साथ बदलें , निश्चित रूप से। अगर किसी कारण से आपके घर की निर्देशिका नहीं है, /homeतो आपको तदनुसार समायोजित करना होगा।)
आपका निर्माण स्थापित करना
आप चलाने के बाद make, आपके द्वारा चलाए जा के आदी हो सकता है sudo make install, लेकिन जब आप अपने खुद के घर निर्देशिका में स्थापित है, तो आप, तो आप कर सकते हैं रूट के रूप में इसे चलाने के लिए जरूरत नहीं है - और चाहिए --omit sudo। बस दौडो:
make install
इसी प्रकार, सॉफ़्टवेयर के लिए जो uninstallलक्ष्य का समर्थन करता है :
make uninstall
यह वही है जो आप के लिए पूछ रहे थे ... बस अपने घर निर्देशिका में, नहीं /usr/local।
अपने कार्यक्रम चला रहे हैं
संभवतःbin आपके होम डायरेक्टरी की उपनिर्देशिका या तो है:
- पहले से ही अपने में
$PATH, या
- अपने में हो जाएगा
$PATHअगर आप सिर्फ लॉग आउट और में वापस।
कारण यह है कि .profileआपके होम निर्देशिका में फ़ाइल, जिसमें आपके द्वारा लॉग इन करते समय चलने वाली कमांड शामिल हैं, यह उबंटू के अधिकांश संस्करणों में बनाए गए उपयोगकर्ता खातों के लिए डिफ़ॉल्ट रूप से शामिल है (ओएस को स्थापित करते समय बनाए गए प्रारंभिक व्यवस्थापक खाते सहित):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
जब आप लॉग इन करते हैं (क्योंकि यह है .profile) तो यह कोड चलता है और अपनी व्यक्तिगत binनिर्देशिका को $PATH केवल तभी रखता है यदि यह उस समय मौजूद है। इसलिए आपको लॉग आउट और वापस अंदर जाने की आवश्यकता हो सकती है।
उबुन्टू 14.04 जैसे पुराने रिलीज , साथ ही साथ उबंटू 17.10 जैसे नए रिलीज भी आए। हालाँकि, Ubuntu 16.04, जो संभवतः इस लेखन के रूप में सबसे लोकप्रिय रिलीज़ है, इसकी जगह यह है:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
यह binआपके घर निर्देशिका की उपनिर्देशिका को जोड़ता है --- और साथ ही .local/binउपनिर्देशिका - आपके लिए $PATH, बिना यह जाँचे कि क्या उन निर्देशिकाओं का वास्तव में अस्तित्व है। इसलिए यदि आप 16.04 का उपयोग करते हैं, या यदि आप एक ऐसे सिस्टम से अपग्रेड हुए हैं जो 16.04 था जब आपका उपयोगकर्ता खाता बनाया गया था, तो binआपके होम डायरेक्टरी की उपनिर्देशिका आपके पहले से ही होने की संभावना है $PATH।
आपका .profileफ़ाइल /etc/skelनिर्देशिका से कॉपी किया जाता है जब आपका उपयोगकर्ता खाता बनाया जाता है। यदि आपका उपयोगकर्ता खाता पुराने उबंटू रिलीज़ पर बनाया गया था, तो उसे वह संस्करण मिल गया .profile, और इसे परिवर्तित नहीं किया गया - आपके उपयोगकर्ता खाते के लिए - अधिक हालिया रिलीज़ में अपग्रेड करके।
एक बार binआपके होम डायरेक्टरी की उपनिर्देशिका आपके पास होने के बाद $PATH, आप ऐसे प्रोग्राम चला पाएंगे जिनकी निष्पादन योग्य फाइलें उनके नाम लिखकर ही वहां स्थापित की जाएंगी, जैसे आप उबंटू के पैकेज मैनेजर द्वारा स्थापित कार्यक्रमों के साथ कर सकते हैं या अंदर स्थापित कर सकते हैं /usr/local।
.localविकल्प
आपने देखा होगा कि .profileकुछ उबंटू रिलीज़ में बनाए गए उपयोगकर्ता खातों के लिए डिफ़ॉल्ट फ़ाइल, जिसमें ऊपर वर्णित 16.04 भी शामिल है, न केवल $HOME/binआपके पथ में, बल्कि यह भी जोड़ता है $HOME/.local/bin। यदि आपका .profileवह नहीं जोड़ता है, लेकिन आप इसे चाहते हैं, तो आप बस इसे संपादित कर सकते हैं।
हालांकि अक्सर सेटिंग्स और कैश्ड डेटा को स्टोर करने के लिए उपयोग किया जाता है , आप .localअपने होम डायरेक्टरी के उपनिर्देशिका के अंदर सॉफ्टवेयर भी इंस्टॉल कर सकते हैं । आपको ऐसा करने में निर्लिप्तता महसूस करनी चाहिए, जैसा कि एक प्रयोज्यता और सुरक्षा के दृष्टिकोण से, --prefix="$HOME/.local"के समान है --prefix="$HOME"।
याद रखें कि फ़ाइलों और निर्देशिकाओं कि के साथ शुरू .ग्राफिकल फ़ाइल ब्राउज़रों (प्रयोग में डिफ़ॉल्ट रूप से दिखाई नहीं देती हैं Ctrl+ Hसामने लाने के लिए और उन्हें rehide) या द्वारा lsआदेश (पारित -Aया -aझंडा उन्हें दिखाने के लिए)। यह वह नहीं हो सकता है जो आप चाहते हैं, या यह वैसा ही हो सकता है जैसा आप चाहते हैं। यह व्यक्तिगत पसंद का मामला है।
हालाँकि, मैंने देखा है कि कुछ स्वचालित स्रोत-आधारित पैकेज प्रबंधक जो किसी के होम डायरेक्टरी उपयोग में सॉफ़्टवेयर का निर्माण और स्थापित करते हैं $HOME/.local। मैं वास्तव में नहीं जानता कि यह कितना आम है - मुझे आशा है कि आप आगे की जांच करेंगे और इस उत्तर को अपडेट करेंगे - लेकिन आप उन $HOMEचीजों के लिए उपयोग करना पसंद कर सकते हैं जिन्हें आप मैन्युअल रूप से संकलित करते हैं। इस तरह यह स्पष्ट हो जाएगा कि चीजें कहां से आई हैं। और अगर कोई टक्कर होती है, तो सॉफ्टवेयर अभी भी सह-अस्तित्व की संभावना है।
आप जानबूझकर $HOME/.localऔर अन्य सॉफ़्टवेयर में कुछ सॉफ़्टवेयर स्थापित कर सकते हैं $HOME। यह आप पर निर्भर करता है। जो भी binनिर्देशिका आपके $PATHपर्यावरण चर में पहली बार दिखाई देती है वह वह है जिससे एक कमांड चलेगी, इस घटना में कि एक ही नाम के कमांड दोनों में मौजूद हैं।
क्रेडिट को जाता है Zanna और Videonauth के लिए त्रुटियों ओर इशारा करते हुए एक में पिछले संस्करण के बारे में जो उबंटू विज्ञप्ति में जो डिफ़ॉल्ट कोड है, इस उत्तर के .profileलिए, और सही करने के लिए मेरी मदद के लिए उन्हें (यह भी देखें यहाँ )।