GitHub पर ओपन सोर्स फाइलों के बारे में मेरी सबसे पसंदीदा चीजों में से एक यह है कि दूसरों को यह करते हुए देखने की क्षमता है कि कुछ लोग (मुंडेन चीजें कह सकते हैं) जैसे अपने .bashrc और अन्य डॉटफाइल्स सेट अप करना। जबकि मैं उतना उत्साही नहीं हूं राइसिंग के बारे में जितना मैं पहली बार Linux साइड में आने पर था, मुझे अभी भी काफी उत्साह मिलता है जब मुझे एक कॉन्फ़िगरेशन सेटिंग मिलती है जो चीजों को सुंदर और तेज बनाती है, और इस प्रकार, बेहतर।
मैं हाल ही में कुछ ऐसी चीजों के साथ आया, विशेष रूप से टॉम हडसन के डॉटफाइल्स में। टॉम को चीजों को स्क्रिप्ट करना पसंद लगता है, और उन चीजों में से कुछ में सिमलिंक को स्वचालित रूप से सेट करना, और Ubuntu रिपॉजिटरी एप्लिकेशन और अन्य प्रोग्राम इंस्टॉल करना शामिल है। इसने मुझे सोचने पर मजबूर किया। क्या मैं एक नई मशीन के सेटअप को स्वचालित कर सकता हूं ताकि यह मेरी वर्तमान मशीन को दोहराए?
आम तौर पर चीजों को यह देखने के लिए अलग करने के लिए इच्छुक कोई व्यक्ति होने के नाते कि वे कैसे काम करते हैं, मुझे पता है कि मैंने मौके पर अपने लैपटॉप को गड़बड़ कर दिया है। (आमतौर पर जब मैं घर से दूर होता हूं, और मेरा बैकअप हार्डड्राइव नहीं होता।) उन दुर्लभ लेकिन वास्तव में असुविधाजनक स्थितियों में जब मेरा कंप्यूटर अपने पूर्व स्व का खोल बन जाता है, (बा-डम-चिंग) हंप्टी डम्प्टी को फिर से एक साथ रखने का एक तेज, सरल तरीका होना काफी अच्छा होगा, ठीक उसी तरह जैसे मुझे पसंद है।
डिस्क इमेज बनाने और बाद में इसे पुनर्स्थापित करने के विपरीत, bash स्क्रिप्ट का संग्रह बनाना, बनाए रखना और घुमाना आसान है। उन्हें किसी विशेष यूटिलिटी की आवश्यकता नहीं होती, केवल एक बाहरी परिवहन विधि। यह पूरी बंड्ट केक के बजाय रेसिपी पास करने जैसा है। (म्म्म, केक।)
इसके अतिरिक्त, इस तरह की कार्यक्षमता वर्चुअल मशीन, या VM, या यहां तक कि वर्चुअल प्राइवेट सर्वर, या VPS सेट अप करते समय सुपर उपयोगी होगी। (जिनमें से दोनों, अब जब मैं यह लिखता हूं, शायद मेरे अधिक विनाशकारी प्रयोगों के लिए अधिक क्षमाशील लक्ष्य बनेंगे... जियो और सीखो!)
खैर, कुछ ग्रेपिंग और गूगलिंग और खुदाई के बाद, मेरे पास अब स्क्रिप्ट का एक सूट है जो यह कर सकता है:
यहां सेटअप का एक वीडियो देखें।
यह एक ताजा Ubuntu डेस्कटॉप पर सेटअप स्क्रिप्ट के टेस्ट रन का अंतिम हिस्सा है, जिसे बूटेबल USB से लोड किया गया है। इसने मेरे सभी प्रोग्राम और सेटिंग्स को तीन मिनट से कम समय में पुनर्स्थापित कर दिया!
यह पोस्ट बताएगी कि bash स्क्रिप्ट का उपयोग करके Ubuntu डेस्कटॉप (मेरे मामले में, Ubuntu LTS 18.04) चलाने वाले कंप्यूटर का स्वचालित सेटअप कैसे प्राप्त करें। कवर की गई अधिकांश जानकारी सभी Linux डेस्कटॉप फ्लेवर पर लागू होती है, हालांकि कुछ सिंटैक्स भिन्न हो सकते हैं। bash स्क्रिप्ट तीन मुख्य क्षेत्रों को कवर करती हैं: डॉटफाइल्स लिंक करना, Ubuntu और अन्य जगहों से सॉफ्टवेयर इंस्टॉल करना, और डेस्कटॉप एनवायरनमेंट सेट अप करना। हम इनमें से प्रत्येक क्षेत्र को कवर करेंगे और महत्वपूर्ण बिट्स पर जाएंगे ताकि आप अपनी खुद की स्क्रिप्ट बनाना शुरू कर सकें।
डॉटफाइल्स
डॉटफाइल्स वही हैं जिन्हें अधिकांश Linux उत्साही कॉन्फ़िगरेशन फाइलें कहते हैं। वे आमतौर पर उपयोगकर्ता की होम डायरेक्टरी में रहते हैं (bash स्क्रिप्ट में बिल्टइन वेरिएबल $HOME के साथ दर्शाया गया) और सभी प्रकार के प्रोग्राम की उपस्थिति और व्यवहार को नियंत्रित करते हैं। फाइल नाम . से शुरू होते हैं, जो Linux में छिपी फाइलों को दर्शाता है (इसलिए "डॉट" फाइलें)। यहां कुछ सामान्य डॉटफाइल्स और वे कैसे उपयोगी हैं।
.bashrc
.bashrc फाइल इंटरैक्टिव, नॉन-लॉगिन शेल द्वारा स्टार्टअप पर निष्पादित कमांड की एक सूची है। इंटरैक्टिव बनाम नॉन-इंटरैक्टिव शेल थोड़ा भ्रमित करने वाला हो सकता है, लेकिन हमें यहां उनके बारे में चिंता करने की आवश्यकता नहीं है। हमारे उद्देश्यों के लिए, किसी भी समय आप एक नया टर्मिनल खोलते हैं, एक प्रॉम्प्ट देखते हैं, और इसमें कमांड टाइप कर सकते हैं, आपका .bashrc निष्पादित हुआ था।
इस फाइल में लाइनें एलियास बनाकर आपके वर्कफ़्लो को बेहतर बनाने में मदद कर सकती हैं जो कीस्ट्रोक्स को कम करते हैं, या उपयोगी जानकारी के साथ एक सहायक प्रॉम्प्ट प्रदर्शित करके। यह उपयोगकर्ता-निर्मित प्रोग्राम भी चला सकता है, जैसे Eddie। अधिक विचारों के लिए, आप GitHub पर मेरी .bashrc फाइल देख सकते हैं।
.vimrc
.vimrc डॉटफाइल सभी टेक्स्ट एडिटर्स के चैंपियन, Vim को कॉन्फ़िगर करती है। (यदि आपने अभी तक कीबोर्ड शॉर्टकट की शक्तियों का उपयोग नहीं किया है, तो मैं Vim सीखने के लिए एक मजेदार गेम की अत्यधिक अनुशंसा करता हूं।)
.vimrc में, हम एडिटर प्राथमिकताएं जैसे डिस्प्ले सेटिंग्स, रंग, और कस्टम कीबोर्ड शॉर्टकट सेट कर सकते हैं। आप GitHub पर मेरा .vimrc देख सकते हैं।
अन्य डॉटफाइल्स आपके द्वारा उपयोग किए जाने वाले प्रोग्राम के आधार पर उपयोगी हो सकती हैं, जैसे .gitconfig या .tmux.conf। GitHub पर डॉटफाइल्स का पता लगाना यह समझने का एक शानदार तरीका है कि क्या उपलब्ध है और आपके लिए उपयोगी है!
डॉटफाइल्स लिंक करना
हम अपने सभी डॉटफाइल्स के लिए सिम्बोलिक लिंक, या सिमलिंक बनाने के लिए एक स्क्रिप्ट का उपयोग कर सकते हैं। यह हमें सभी फाइलों को एक केंद्रीय रिपॉजिटरी में रखने की अनुमति देता है, जहां उन्हें आसानी से प्रबंधित किया जा सकता है, जबकि उस स्थान में एक तरह के प्लेसहोल्डर भी प्रदान करता है जहां हमारे प्रोग्राम कॉन्फ़िगरेशन फाइल को खोजने की उम्मीद करते हैं। यह आमतौर पर, लेकिन हमेशा नहीं, उपयोगकर्ता होम डायरेक्टरी होती है। उदाहरण के लिए, चूंकि मैं अपने डॉटफाइल्स को GitHub पर संग्रहीत करता हूं, मैं उन्हें ~/github/dotfiles/ जैसे पथ वाली डायरेक्टरी में रखता हूं जबकि फाइलें स्वयं सिमलिंक होती हैं, जिसके परिणामस्वरूप ~/.vimrc जैसा पथ होता है।
किसी भी मौजूदा फाइल और सिमलिंक की प्रोग्रामेटिक रूप से जांच और संचालन करने, फिर नए बनाने के लिए, हम इस सुंदर शेल स्क्रिप्ट का उपयोग कर सकते हैं। मैं इसकी प्रशंसा केवल इसलिए करता हूं क्योंकि मैंने इसकी कोर को टॉम के सेटअप स्क्रिप्ट से स्पष्ट रूप से चुराया है, इसलिए मैं इसके सुंदर होने का श्रेय नहीं ले सकता।
symlink.sh स्क्रिप्ट हमारे $HOME में प्रत्येक डॉटफाइल के लिए सिमलिंक बनाने का प्रयास करके काम करती है। यह पहले जांचता है कि क्या एक सिमलिंक पहले से मौजूद है, या क्या उसी नाम की एक नियमित फाइल या डायरेक्टरी मौजूद है। पहले मामले में, सिमलिंक को हटा दिया जाता है और फिर से बनाया जाता है; बाद में, फाइल या डायरेक्टरी का नाम बदला जाता है, फिर सिमलिंक बनाया जाता है।
सॉफ्टवेयर इंस्टॉल करना
शेल स्क्रिप्ट का पता लगाने के बारे में सुंदर चीजों में से एक यह खोजना है कि केवल कमांड लाइन का उपयोग करके कितना कुछ हासिल किया जा सकता है। ग्राफिकल ऑपरेटिंग सिस्टम के माध्यम से कंप्यूटर के लिए मेरा पहला जोखिम होने के नाते, मुझे टर्मिनल में काम करना ताज़गी से तेज लगता है।
Ubuntu के साथ, हमारे द्वारा आवश्यक अधिकांश प्रोग्राम डिफ़ॉल्ट Ubuntu सॉफ्टवेयर रिपॉजिटरी के माध्यम से उपलब्ध हैं। हम आमतौर पर इन्हें कमांड apt search <program> के साथ खोजते हैं और sudo apt install <program> के साथ इंस्टॉल करते हैं। कुछ सॉफ्टवेयर जो हम चाहते हैं वे डिफ़ॉल्ट रिपॉजिटरी में नहीं हो सकते हैं, या वहां सबसे वर्तमान वर्जन में पेश नहीं किए जा सकते हैं। इन मामलों में, हम अभी भी एक PPA, या पर्सनल पैकेज आर्काइव का उपयोग करके Ubuntu में इन प्रोग्राम को इंस्टॉल कर सकते हैं। हमें बस सावधान रहना होगा कि हम जो PPAs चुनते हैं वे आधिकारिक स्रोतों से हैं।
यदि कोई प्रोग्राम जो हम चाहते हैं डिफ़ॉल्ट रिपॉजिटरी में दिखाई नहीं देता है या ऐसा नहीं लगता कि उसके पास PPA है, तो हम अभी भी कमांड लाइन के माध्यम से इसे इंस्टॉल करने में सक्षम हो सकते हैं। "इंस्टॉलेशन कमांड लाइन" के लिए एक त्वरित खोज से कुछ उत्तर मिलने चाहिए।
चूंकि bash स्क्रिप्ट केवल कमांड का एक संग्रह हैं जिन्हें हम व्यक्तिगत रूप से टर्मिनल में चला सकते हैं, अपने सभी वांछित प्रोग्राम इंस्टॉल करने के लिए एक स्क्रिप्ट बनाना सभी कमांड को एक स्क्रिप्ट फाइल में डालने जितना सीधा है। मैंने अपने इंस्टॉलेशन स्क्रिप्ट को डिफ़ॉल्ट रिपॉजिटरी के बीच व्यवस्थित करना चुना, जो मेरे aptinstall.sh स्क्रिप्ट द्वारा इंस्टॉल किए जाते हैं, और प्रोग्राम जो बाहरी स्रोतों को शामिल करते हैं, जिन्हें मेरे programs.sh स्क्रिप्ट के साथ संभाला जाता है।
डेस्कटॉप एनवायरनमेंट सेट अप करना
हाल के अवसरों पर जब मुझे एक नया डेस्कटॉप मिला (जानबूझकर या अन्यथा) मुझे हमेशा याद आता है कि सभी डेस्कटॉप एनवायरनमेंट सेटिंग्स को याद करने, ढूंढने और फिर बदलने में कितना समय लगता है। कीबोर्ड शॉर्टकट, वर्कस्पेस, साउंड सेटिंग्स, नाइट मोड... यह जुड़ जाता है!
शुक्र है, इन सभी सेटिंग्स को किसी नॉन-ग्राफिकल फॉर्मेट में कहीं संग्रहीत किया जाना चाहिए, जिसका अर्थ है कि यदि हम यह पता लगा सकते हैं कि यह कैसे किया जाता है, तो हम संभवतः bash स्क्रिप्ट के साथ सेटिंग्स को आसानी से हेरफेर करने का एक तरीका ढूंढ सकते हैं। लो और निहारना टर्मिनल कमांड, gsettings list-recursively।
GNOME डेस्कटॉप एनवायरनमेंट के लिए सेटिंग्स की एक बड़ी संख्या है। हम सूची को स्क्रॉल करना आसान बना सकते हैं (यदि, मेरी तरह, आप कभी-कभी उस प्रकार के व्यक्ति हैं जो कहते हैं "बस मुझे सब कुछ देखने दो और पता लगाने दो कि मुझे क्या चाहिए!") इसे less में पाइप करके: gsettings list-recursively | less। वैकल्पिक रूप से, यदि हमें इस बात का अंदाजा है कि हम क्या खोज रहे होंगे, तो हम grep का उपयोग कर सकते हैं: gsettings list-recursively | grep 'keyboard'।
हम gsettings set कमांड के साथ अपनी सेटिंग्स में हेरफेर कर सकते हैं। कभी-कभी हमारे द्वारा चाही गई सेटिंग के लिए सिंटैक्स ढूंढना मुश्किल हो सकता है, इसलिए जब हम पहली बार अपना स्क्रिप्ट बना रहे होते हैं, तो मैं GUI का उपयोग करके परिवर्तन करने, फिर हमारे द्वारा बदली गई gsettings लाइन को ढूंढने और उसका मान रिकॉर्ड करने की सिफारिश करता हूं।
कुछ प्रेरणा के लिए, आप GitHub पर मेरा desktop.sh सेटिंग्स स्क्रिप्ट देख सकते हैं।
इसे सभी को एक साथ रखना
मॉड्यूलर स्क्रिप्ट होना (सिमलिंक के लिए एक, प्रोग्राम इंस्टॉल करने के लिए दो, डेस्कटॉप सेटिंग्स के लिए एक) चीजों को व्यवस्थित रखने और स्वचालित सेटअप के कुछ लेकिन सभी को चलाने में सक्षम होने के लिए उपयोगी है। उदाहरण के लिए, यदि मैं एक VPS सेट अप कर रहा होता जिसमें मैं केवल कमांड लाइन का उपयोग करता, तो मुझे ग्राफिकल प्रोग्राम या डेस्कटॉप सेटिंग्स इंस्टॉल करने की चिंता करने की आवश्यकता नहीं होती।
ऐसे मामलों में जहां मैं सभी स्क्रिप्ट चलाना चाहता हूं, हालांकि, उन्हें एक-एक करके करना थोड़ा थकाऊ होता है। शुक्र है, चूंकि bash स्क्रिप्ट स्वयं टर्मिनल कमांड द्वारा चलाई जा सकती हैं, हम बस एक और मास्टर स्क्रिप्ट लिख सकते हैं उन सभी को चलाने के लिए!
यहां एक नई Ubuntu डेस्कटॉप मशीन के सेटअप को संभालने के लिए मेरा मास्टर स्क्रिप्ट है:
#!/bin/bash
./symlink.sh
./aptinstall.sh
./programs.sh
./desktop.sh
# सभी अपग्रेड प्राप्त करें
sudo apt upgrade -y
# हमारे bash परिवर्तन देखें
source ~/.bashrc
# मजेदार हेलो
figlet "... and we're back!" | lolcat
मैंने अच्छे उपाय के लिए अपग्रेड लाइन डाल दी। यह सुनिश्चित करेगा कि हमारे नए डेस्कटॉप पर इंस्टॉल किए गए प्रोग्राम में नवीनतम अपडेट हैं। अब एक सरल, सिंगल bash कमांड सब कुछ का ख्याल रखेगी!
आपने देखा होगा कि, जबकि हमारा डेस्कटॉप अब परिचित दिखता है और चलता है, ये स्क्रिप्ट एक बहुत महत्वपूर्ण क्षेत्र को कवर नहीं करते हैं: हमारी फाइलें। उम्मीद है, आपके पास उन लोगों के लिए एक बैकअप विधि है जिसमें किसी प्रकार का विश्वसनीय बाहरी हार्डवेयर शामिल है। यदि नहीं, और यदि आप अपने काम को GitHub या GitLab जैसे बाहरी रिपॉजिटरी होस्ट में रखते हैं, तो मेरे पास Bash वन-लाइनर्स के साथ अपने GitHub रिपॉजिटरी को स्वचालित रूप से क्लोन और बैकअप करने का एक तरीका है।
बाहरी रिपॉजिटरी होस्ट पर भरोसा करना 100% कवरेज प्रदान नहीं करता है, हालांकि। फाइलें जिन्हें आप बाहरी रूप से होस्ट किए गए रिपॉजिटरी (निजी या अन्यथा) में नहीं डालेंगे, परिणामस्वरूप खींची नहीं जा सकतीं। शामिल फाइलों से उत्पन्न नहीं किए जा सकने वाले Git अनदेखी ऑब्जेक्ट्स, जैसे निजी कुंजी और सीक्रेट्स, पुनर्निर्मित नहीं किए जाएंगे। हालांकि, वे फाइलें संभवतः इतनी छोटी हैं कि आप उनमें से एक पूरा गुच्छा कुछ एन्क्रिप्टेड USB फ्लैश ड्राइव पर फिट कर सकते हैं (और यदि आपके पास निजी कुंजी बैकअप नहीं हैं, तो शायद आपको पहले वह करना चाहिए?)।
कहा जा रहा है, मुझे आशा है कि इस पोस्ट ने आपको कम से कम कुछ प्रेरणा दी होगी कि कैसे डॉटफाइल्स और bash स्क्रिप्ट एक नए डेस्कटॉप को सेट अप करने को स्वचालित करने में मदद कर सकते हैं। यदि आप कुछ सेटिंग्स लेकर आते हैं जो आपको उपयोगी लगती हैं, तो कृपया अपने डॉटफाइल्स को भी साझा करके दूसरों को उन्हें खोजने में मदद करें!