कई Linux और Unix वेरिएंट्स के लिए डिफ़ॉल्ट शेल के रूप में, Bash में कम उपयोग की जाने वाली सुविधाओं की एक विस्तृत विविधता शामिल है, इसलिए यह तय करना कठिन था कि क्या चर्चा की जाए। अंततः, मैंने उन Bash टिप्स पर ध्यान केंद्रित करने का फैसला किया जो दिन-प्रतिदिन की गतिविधियों को आसान बनाते हैं।
एक सलाहकार के रूप में, मैं विविध वातावरण और कार्य शैलियों की बहुलता देखता हूं। मैंने अपने विचारों को व्यवस्थित करने के लिए चार व्यापक श्रेणियों पर सुझावों को सीमित करने के लिए इस अनुभव का उपयोग किया: टर्मिनल और लाइन ट्रिक्स, नेविगेशन और फ़ाइलें, इतिहास, और सहायक कमांड्स। ये श्रेणियां पूरी तरह से मनमानी हैं और किसी भी प्रकार के निश्चित वर्गीकरण की तुलना में मेरे अपने विचारों को व्यवस्थित करने के लिए अधिक काम करती हैं। यहां शामिल कई टिप्स व्यक्तिपरक रूप से एक से अधिक श्रेणी में फिट हो सकते हैं।
बिना किसी देरी के, यहां कुछ सबसे उपयोगी Bash ट्रिक्स हैं जिनका मैंने सामना किया है।
Bash इतिहास के साथ काम करना
अपनी उत्पादकता बढ़ाने के सर्वोत्तम तरीकों में से एक है Bash इतिहास का अधिक प्रभावी ढंग से उपयोग करना सीखना। इसे ध्यान में रखते हुए, शायद मल्टी-यूजर एनवायरनमेंट में आप अपने शेल में कर सकने वाले सबसे महत्वपूर्ण ट्वीक में से एक है histappend विकल्प को सक्षम करना। ऐसा करने के लिए, बस निम्न कमांड चलाएं:
shopt -s histappend यह एक ही समय में कई टर्मिनल सेशन्स को इतिहास में लिखने की अनुमति देता है। अधिकांश वातावरणों में यह विकल्प सक्षम नहीं है। इसका मतलब है कि यदि आपके पास एक से अधिक Bash सत्र खुले हैं (चाहे स्थानीय रूप से या SSH पर) तो इतिहास अक्सर खो जाते हैं।
एक और आम काम अंतिम कमांड को sudo के साथ दोहराना है। उदाहरण के लिए, मान लीजिए आप एक डायरेक्ट्री बनाना चाहते हैं mkdir /etc/ansible/facts.d। जब तक आप रूट नहीं हैं, यह कमांड विफल हो जाएगी। मैंने जो देखा है, उससे अधिकांश उपयोगकर्ता up तीर दबाते हैं, लाइन की शुरुआत तक स्क्रॉल करते हैं, और sudo कमांड जोड़ते हैं। एक आसान तरीका है। बस कमांड को इस तरह चलाएं:
sudo !!Bash sudo चलाएगा और फिर पिछली कमांड की संपूर्णता। यहाँ ठीक वही दिखता है जब इसे क्रम में चलाया जाता है:
[user@centos ~]$ mkdir -p /etc/ansible/facts.d
mkdir: cannot create directory ‘/etc/ansible’: Permission denied
[user@centos ~]$ sudo !!
sudo mkdir -p /etc/ansible/facts.d
जब !! चलाया जाता है, तो पूरी कमांड टर्मिनल पर इको की जाती है ताकि आप जान सकें कि अभी क्या निष्पादित किया गया था।
समान लेकिन बहुत कम उपयोग किया जाने वाला !* शॉर्टकट है। यह Bash को बताता है कि आप पिछली कमांड से सभी *आर्गुमेंट्स* को वर्तमान कमांड में दोहराना चाहते हैं। यह एक कमांड के लिए उपयोगी हो सकता है जिसमें बहुत सारे आर्गुमेंट्स हैं जिनका आप पुन: उपयोग करना चाहते हैं। एक साधारण उदाहरण है फ़ाइलों का एक गुच्छा बनाना और फिर उन पर अनुमतियां बदलना:
[user@centos tmp]$ touch file1 file2 file3 file4
[user@centos tmp]$ chmod 777 !*
chmod 777 file1 file2 file3 file4
यह केवल परिस्थितियों के एक विशिष्ट सेट में आसान है, लेकिन यह आपको कुछ कीस्ट्रोक्स बचा सकता है।
कीस्ट्रोक्स बचाने की बात करते हुए, आइए अपने इतिहास में कमांड्स खोजने के बारे में बात करते हैं। अधिकांश उपयोगकर्ता ऐसा कुछ करेंगे:
history |grep <some command>हालांकि, आपके इतिहास को खोजने का एक आसान तरीका है। यदि आप दबाते हैं
ctrl + rBash आपके इतिहास का रिवर्स खोज करेगा। जैसे ही आप टाइप करना शुरू करते हैं, परिणाम दिखाई देने लगेंगे। उदाहरण के लिए:
(reverse-i-search)`hist': shopt -s histappendऊपर के उदाहरण में, मैंने hist टाइप किया और यह पहले कवर किए गए shopt कमांड से मेल खाया। यदि आप ctrl + r दबाते रहें, तो Bash अन्य सभी मैचों के माध्यम से पीछे की ओर खोज जारी रखेगा।
हमारी आखिरी ट्रिक उतनी ट्रिक नहीं है जितना एक सहायक कमांड जिसका उपयोग आप अपने इतिहास में सबसे अधिक उपयोग की जाने वाली कमांड्स को गिनने और प्रदर्शित करने के लिए कर सकते हैं।
[user@centos tmp]$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
81 ssh
50 sudo
46 ls
45 ping
39 cd
29 nvidia-xrun
20 nmap
19 exportइस उदाहरण में, आप देख सकते हैं कि ssh फिलहाल मेरे इतिहास में अब तक की सबसे अधिक उपयोग की जाने वाली कमांड है।
नेविगेशन और फ़ाइल नामकरण
आप शायद पहले से ही जानते हैं कि यदि आप कोई कमांड, फ़ाइल नाम, या फ़ोल्डर नाम टाइप करते हैं, तो आप tab कुंजी को एक बार दबाकर शब्द को आपके लिए पूरा कर सकते हैं। यह काम करता है यदि एक सटीक मैच है। हालांकि, आप शायद नहीं जानते कि यदि आप tab को दो बार दबाते हैं, तो यह आपको आपके द्वारा टाइप किए गए आधार पर सभी मैच दिखाएगा। उदाहरण के लिए:
[user@centos tmp]$ cd /lib<प>यह फाइल सिस्टम नेविगेशन के लिए बहुत उपयोगी हो सकता है। एक और उपयोगी ट्रिक है अपने शेल में
lib/ lib64/
cdspell को सक्षम करना। आप shopt -s cdspell कमांड जारी करके ऐसा कर सकते हैं। यह आपकी टाइपो को ठीक करने में मदद करेगा:
[user@centos etc]$ cd /tpm
/tmp
[user@centos tmp]$ cd /ect
/etc
यह परफेक्ट नहीं है, लेकिन हर छोटी सी मदद करता है!
एक बार जब आप सफलतापूर्वक डायरेक्ट्रीज बदल लेते हैं, तो क्या होगा यदि आपको अपनी पिछली डायरेक्ट्री पर वापस जाने की आवश्यकता है? यह कोई बड़ी बात नहीं है यदि आप डायरेक्ट्री ट्री में बहुत गहरे नहीं हैं। लेकिन यदि आप काफी गहरे पथ में हैं, जैसे /var/lib/flatpak/exports/share/applications/, तो आप टाइप कर सकते हैं:
cd /va/lib/fla/ex/sh/app सौभाग्य से, Bash आपकी पिछली डायरेक्ट्री को याद रखता है, और आप बस cd - टाइप करके वहां वापस जा सकते हैं। यहाँ यह कैसा दिखेगा:
[user@centos applications]$ pwd
/var/lib/flatpak/exports/share/applications
[user@centos applications]$ cd /tmp
[user@centos tmp]$ pwd
/tmp
[user@centos tmp]$ cd -
/var/lib/flatpak/exports/share/applications
यह सब ठीक है, लेकिन क्या होगा यदि आपके पास कई डायरेक्ट्रीज हैं जिनके भीतर आप आसानी से नेविगेट करना चाहते हैं? Bash ने आपको वहां भी कवर किया है। एक वेरिएबल है जिसे आप सेट कर सकते हैं जो आपको अधिक प्रभावी ढंग से नेविगेट करने में मदद करेगा। यहाँ एक उदाहरण है:
[user@centos applications]$ export CDPATH='~:/var/log:/etc'
[user@centos applications]$ cd hp
/etc/hp
[user@centos hp]$ cd Downloads
/home/user/Downloads
[user@centos Downloads]$ cd ansible
/etc/ansible
[user@centos Downloads]$ cd journal
/var/log/journal
ऊपर के उदाहरण में, मैंने अपनी होम डायरेक्ट्री (टिल्ड के साथ इंगित: ~), /var/log और /etc सेट की। इन डायरेक्ट्रीज के शीर्ष स्तर पर कुछ भी तब ऑटो-फिल हो जाएगा जब आप उन्हें संदर्भित करेंगे। CDPATH में सूचीबद्ध डायरेक्ट्रीज के आधार पर नहीं होने वाली डायरेक्ट्रीज नहीं मिलेंगी। यदि, उदाहरण के लिए, आप जिस डायरेक्ट्री के बाद थे वह /etc/ansible/facts.d/ थी तो यह cd facts.d टाइप करके पूरा नहीं होगा। ऐसा इसलिए है क्योंकि जब ansible डायरेक्ट्री /etc के तहत पाई जाती है, facts.d नहीं है। इसलिए, CDPATH उस ट्री के शीर्ष पर पहुंचने के लिए उपयोगी है जिसे आप बार-बार एक्सेस करते हैं, लेकिन जब आप एक बड़े फ़ोल्डर ढांचे को ब्राउज़ कर रहे होते हैं तो यह प्रबंधन के लिए बोझिल हो सकता है।
अंत में, आइए दो सामान्य उपयोग के मामलों के बारे में बात करते हैं जो हर कोई किसी बिंदु पर करता है: फ़ाइल एक्सटेंशन बदलना और फ़ाइलों का नाम बदलना। पहली नज़र में, यह एक ही चीज़ की तरह लग सकता है, लेकिन Bash इन कार्यों को पूरा करने के लिए कुछ अलग ट्रिक्स प्रदान करता है।
हालांकि यह एक "डाउन-एंड-डर्टी" ऑपरेशन हो सकता है, अधिकांश उपयोगकर्ताओं को किसी बिंदु पर उनके द्वारा काम की जा रही फ़ाइल की एक त्वरित कॉपी बनाने की आवश्यकता होती है। अधिकांश फ़ाइल नाम को सटीक रूप से कॉपी करेंगे और बस .old या .bak जैसे फ़ाइल एक्सटेंशन को जोड़ देंगे। Bash में इसके लिए एक त्वरित शॉर्टकट है। मान लीजिए आपके पास spideroak_inotify_db.07pkh3 जैसा फ़ाइल नाम है जिसे आप कॉपी रखना चाहते हैं। आप टाइप कर सकते हैं:
cp spideroak_inotify_db.07pkh3 spideroak_inotify_db.07pkh3.bakआप कॉपी/पेस्ट ऑपरेशन्स, टैब कम्पलीशन का उपयोग करके, पिछले आर्गुमेंट को दोहराने के शॉर्टकट्स में से एक का उपयोग करके, या बस पूरी चीज़ टाइप करके इसका त्वरित कार्य कर सकते हैं। हालांकि, नीचे दी गई कमांड एक बार जब आप इसे टाइप करने के आदी हो जाते हैं तो और भी तेज़ साबित होनी चाहिए:
cp spideroak_inotify_db.07pkh3{,.old}यह (जैसा कि आप अनुमान लगा सकते हैं) फ़ाइल को .old फ़ाइल एक्सटेंशन को फ़ाइल में जोड़कर कॉपी करता है। यह बहुत अच्छा है, आप कह सकते हैं, लेकिन मैं एक साथ बड़ी संख्या में फ़ाइलों का नाम बदलना चाहता हूं। ज़रूर, आप इनसे निपटने के लिए एक for लूप लिख सकते हैं (और वास्तव में, मैं अक्सर जटिल चीजों के लिए ऐसा करता हूं) लेकिन जब एक आसान यूटिलिटी rename है तो क्यों करेंगे? इस यूटिलिटी के उपयोग में Debian/Ubuntu और CentOS/Arch के बीच कुछ अंतर है। Debian-आधारित rename एक SED-जैसे सिंटैक्स का उपयोग करता है:
user@ubuntu-1604:/tmp$ for x in `seq 1 5`; do touch old_text_file_${x}.txt; done
user@ubuntu-1604:/tmp$ ls old_text_file_*
old_text_file_1.txt old_text_file_3.txt old_text_file_5.txt
old_text_file_2.txt old_text_file_4.txt
user@ubuntu-1604:/tmp$ rename 's/old_text_file/shiney_new_doc/' *.txt
user@ubuntu-1604:/tmp$ ls shiney_new_doc_*
shiney_new_doc_1.txt shiney_new_doc_3.txt shiney_new_doc_5.txt
shiney_new_doc_2.txt shiney_new_doc_4.txtCentOS या Arch बॉक्स पर यह समान दिखेगा:
[user@centos /tmp]$ for x in `seq 1 5`; do touch old_text_file_${x}.txt; done
[user@centos /tmp]$ ls old_text_file_*
old_text_file_1.txt old_text_file_3.txt old_text_file_5.txt
old_text_file_2.txt old_text_file_4.txt
[user@centos tmp]$ rename old_text_file centos_new_doc *.txt
[user@centos tmp]$ ls centos_new_doc_*
centos_new_doc_1.txt centos_new_doc_3.txt centos_new_doc_5.txt
centos_new_doc_2.txt centos_new_doc_4.txtBash की बाइंडिंग्स
Bash में बहुत सारे बिल्ट-इन कीबोर्ड शॉर्टकट्स हैं। आप bind -p टाइप करके उनकी सूची पा सकते हैं। मुझे लगा कि कई को हाइलाइट करना उपयोगी होगा, हालांकि कुछ प्रसिद्ध हो सकते हैं।
- ctrl + _ (पूर्ववत करें)
- ctrl + t (दो कैरेक्टर्स स्वैप करें)
- ALT + t (दो शब्द स्वैप करें)
- ALT + . (पिछली कमांड से अंतिम आर्गुमेंट प्रिंट करता है)
- ctrl + x + * (ग्लोब/स्टार का विस्तार करें)
- ctrl + arrow (एक शब्द आगे बढ़ें)
- ALT + f (एक शब्द आगे बढ़ें)
- ALT + b (एक शब्द पीछे जाएं)
- ctrl + x उसके बाद ctrl + e (कमांड स्ट्रिंग को एक एडिटर में खोलता है ताकि आप निष्पादन से पहले इसे संपादित कर सकें)
- ctrl + e (कर्सर को अंत में ले जाएं)
- ctrl + a (कर्सर को शुरुआत में ले जाएं)
- ctrl + xx (लाइन के विपरीत छोर पर जाएं)
- ctrl + u (कर्सर से पहले सब कुछ काटें)
- ctrl + k (कर्सर के बाद सब कुछ काटें)
- ctrl + y (बफर से पेस्ट करें)
- ctrl + l (लोअरकेस L, स्क्रीन साफ़ करें)
मैं अधिक स्पष्ट लोगों पर चर्चा नहीं करूंगा। हालांकि, मैंने पाया है कि सबसे उपयोगी शॉर्टकट्स वे हैं जो आपको शब्दों (या टेक्स्ट के खंडों) को हटाने और उन्हें पूर्ववत करने देते हैं। मान लीजिए आप systemd का उपयोग करके कई सेवाओं को रोकने जा रहे थे, लेकिन आप कुछ ऑपरेशन पूरा होने के बाद उनमें से केवल कुछ को शुरू करना चाहते थे। आप ऐसा कुछ कर सकते हैं:
systemctl stop httpd mariadb nfs smbd
<अवांछित आर्गुमेंट्स को हटाने के लिए 'ctrl + w' का उपयोग करें>
लेकिन क्या होगा यदि आपने एक बहुत अधिक हटा दिया? कोई समस्या नहीं—बस अंतिम संपादन को पूर्ववत करने के लिए ctrl + _ का उपयोग करें।
अन्य कट कमांड्स आपको कर्सर से लाइन के अंत या शुरुआत तक सब कुछ जल्दी से हटाने की अनुमति देती हैं (क्रमशः Ctrl + k और Ctrl + u का उपयोग करके)। इसका अतिरिक्त लाभ कट टेक्स्ट को टर्मिनल बफर में रखना है ताकि आप इसे बाद में पेस्ट कर सकें ( ctrl + y का उपयोग करके)। इन कमांड्स को यहां प्रदर्शित करना कठिन है, इसलिए मैं आपको अपने दम पर उन्हें आज़माने के लिए दृढ़ता से प्रोत्साहित करता हूं।
अंतिम लेकिन कम नहीं, मैं एक कम उपयोग किए जाने वाले कुंजी संयोजन का उल्लेख करना चाहूंगा जो कंटेनरों जैसे सीमित वातावरण में बेहद उपयोगी हो सकता है। यदि आपके पास कभी कोई कमांड पिछले आउटपुट द्वारा गड़बड़ दिखती है, तो एक समाधान है: ctrl + x + ctrl + e दबाने से कमांड उस एडिटर में खुल जाएगी जो एनवायरनमेंट वेरिएबल EDITOR में सेट है। यह आपको एक लंबी या गड़बड़ कमांड को टेक्स्ट एडिटर में संपादित करने की अनुमति देगा जो (संभावित रूप से) टेक्स्ट को रैप कर सकता है। अपना काम सहेजना और बाहर निकलना, जैसा कि आप किसी सामान्य फ़ाइल पर काम करते समय करते हैं, एडिटर छोड़ने पर कमांड को निष्पादित करेगा।
विविध टिप्स
आप पा सकते हैं कि आपके Bash शेल में रंग प्रदर्शित होने से आपका अनुभव बेहतर हो सकता है। यदि आप किसी ऐसे सत्र का उपयोग कर रहे हैं जिसमें कलराइजेशन सक्षम नहीं है, तो नीचे कुछ कमांड्स की श्रृंखला है जिन्हें आप अपने .bash_profile में रख सकते हैं ताकि आपके सत्र में रंग जोड़ा जा सके। ये काफी सीधे हैं और इनमें गहन व्याख्या की आवश्यकता नहीं होनी चाहिए:
# रंग सक्षम करें
eval "`dircolors -b`"
# ls को हमेशा रंग और प्रकार संकेतक का उपयोग करने के लिए मजबूर करें
alias ls='ls -hF --color=auto'
# dir कमांड को विंडोज़ की तरह काम करने दें (लंबा प्रारूप)
alias dir='ls --color=auto --format=long'
# grep को रंग का उपयोग करके परिणाम हाइलाइट करने दें
export GREP_OPTIONS='--color=auto'
# LESS/MAN पेजेस में कुछ रंग जोड़ें
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;33m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;42;30m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'
Bash के भीतर विभिन्न विकल्पों को समायोजित करने के साथ, आप समय बचाने के लिए कुछ साफ-सुथरी ट्रिक्स का भी उपयोग कर सकते हैं। उदाहरण के लिए, प्रत्येक के एग्जिट स्टेटस की परवाह किए बिना दो कमांड्स को बैक-टू-बैक चलाने के लिए, ; का उपयोग करके कमांड्स को अलग करें, जैसा कि नीचे देखा गया है:
[user@centos /tmp]$ du -hsc * ; df -hयह बस वर्तमान डायरेक्ट्री में प्रत्येक फ़ाइल द्वारा ली गई जगह की मात्रा की गणना करता है (और इसे जोड़ता है), फिर यह ब्लॉक डिवाइस प्रति डिस्क उपयोग के लिए सिस्टम को क्वेरी करता है। ये कमांड्स du कमांड द्वारा उत्पन्न किसी भी त्रुटि की परवाह किए बिना चलेंगी।
क्या होगा यदि आप पहली कमांड के सफल समापन पर एक एक्शन लेना चाहते हैं? आप && शॉर्टहैंड का उपयोग यह इंगित करने के लिए कर सकते हैं कि आप दूसरी कमांड केवल तभी चलाना चाहते हैं यदि पहली कमांड एक सफल एग्जिट स्टेटस लौटाती है। उदाहरण के लिए, मान लीजिए आप एक मशीन को केवल तभी रीबूट करना चाहते हैं यदि अपडेट्स सफल होते हैं:
[root@arch ~]$ pacman -Syu --noconfirm && rebootकभी-कभी कमांड चलाते समय, आप इसके आउटपुट को कैप्चर करना चाह सकते हैं। अधिकांश लोग tee कमांड के बारे में जानते हैं, जो मानक आउटपुट को टर्मिनल और फ़ाइल दोनों पर कॉपी करेगा। हालांकि, यदि आप strace जैसे अधिक जटिल आउटपुट को कैप्चर करना चाहते हैं, तो आपको I/O रीडायरेक्शन के साथ काम करना शुरू करना होगा। I/O रीडायरेक्शन का विवरण इस छोटे लेख के दायरे से बाहर है, लेकिन हमारे उद्देश्यों के लिए हम STDOUT और STDERR से संबंधित हैं। आप जो देख रहे हैं उसे ठीक से कैप्चर करने का सबसे अच्छा तरीका दोनों को एक फ़ाइल में संयोजित करना है। ऐसा करने के लिए, 2>&1 रीडायरेक्शन का उपयोग करें।
[root@arch ~]$ strace -p 1140 > strace_output.txt 2>&1यह सभी प्रासंगिक आउटपुट को बाद में देखने के लिए strace_output.txt नामक फ़ाइल में डाल देगा।
कभी-कभी लंबे समय तक चलने वाली कमांड के दौरान, आपको किसी कार्य के निष्पादन को रोकने की आवश्यकता हो सकती है। आप कार्य को रोकने (लेकिन मारने नहीं) के लिए 'stop' शॉर्टकट ctrl + z का उपयोग कर सकते हैं। कार्य जॉब कतार में जुड़ जाता है, लेकिन आप तब तक कार्य नहीं देखेंगे जब तक आप इसे फिर से शुरू नहीं करते। इस कार्य को बाद में फोरग्राउंड कमांड fg का उपयोग करके फिर से शुरू किया जा सकता है।
इसके अलावा, आप ctrl + s के साथ केवल एक कार्य को रोक भी सकते हैं। कार्य और इसका आउटपुट टर्मिनल फोरग्राउंड में रहता है, और शेल का उपयोग नहीं उपयोगकर्ता को वापस किया जाता है। ctrl + q दबाकर कार्य को फिर से शुरू किया जा सकता है।
यदि आप कई टर्मिनल्स खुले होने के साथ एक ग्राफिकल वातावरण में काम कर रहे हैं, तो आप आउटपुट कॉपी और पेस्ट करने के लिए कीबोर्ड शॉर्टकट्स रखना उपयोगी पा सकते हैं। ऐसा करने के लिए, निम्न शॉर्टकट्स का उपयोग करें:
# हाइलाइटेड टेक्स्ट कॉपी करता है
ctrl + shift + c
# बफर में टेक्स्ट पेस्ट करता है
ctrl + shift + v
मान लीजिए एक निष्पादित कमांड के आउटपुट में आप एक और कमांड देखते हैं जिसे निष्पादित किया जा रहा है, और आप अधिक जानकारी प्राप्त करना चाहते हैं। ऐसा करने के कुछ तरीके हैं। यदि यह कमांड आपके पथ में कहीं है, तो आप यह पता लगाने के लिए which कमांड चला सकते हैं कि वह कमांड आपके डिस्क पर कहां स्थित है:
[root@arch ~]$ which ls
/usr/bin/ls
इस जानकारी के साथ, आप file कमांड के साथ बाइनरी का निरीक्षण कर सकते हैं:
[root@arch ~]$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB pie executable x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d4e02b88e596e4f82c6cc62a5bc4ce5827209a49, stripped
आप सभी प्रकार की जानकारी देख सकते हैं, लेकिन अधिकांश उपयोगकर्ताओं के लिए सबसे महत्वपूर्ण ELF 64-bit LSB बकवास है। इसका अनिवार्य रूप से मतलब है कि यह एक प्रीकंपाइल्ड बाइनरी है न कि स्क्रिप्ट या अन्य प्रकार का एक्जीक्यूटेबल। एक संबंधित टूल जिसका उपयोग आप कमांड्स का निरीक्षण करने के लिए कर सकते हैं वह command टूल ही है। बस command -V <command> चलाने से आपको विभिन्न प्रकार की जानकारी मिलेगी:
[root@arch ~]$ command -V ls
ls is aliased to `ls --color=auto`
[root@arch ~]$ command -V bash
bash is /usr/bin/bash
[root@arch ~]$ command -V shopt
shopt is a shell builtin
अंतिम लेकिन निश्चित रूप से कम नहीं, मेरी पसंदीदा ट्रिक्स में से एक, विशेष रूप से कंटेनरों या उन वातावरणों में काम करते समय जहां मेरा ज्ञान या नियंत्रण कम है, echo कमांड है। इस कमांड का उपयोग आपके for लूप के अपेक्षित अनुक्रम को चलाने की जांच करने से लेकर यह जांचने तक कि रिमोट पोर्ट खुले हैं या नहीं, सब कुछ करने के लिए किया जा सकता है। सिंटैक्स एक खुले पोर्ट की जांच के लिए बहुत सरल है: echo > /dev/<udp or tcp>/<server ip>/<port>। उदाहरण के लिए:
user@ubuntu-1604:~$ echo > /dev/tcp/192.168.99.99/222
-bash: connect: Connection refused
-bash: /dev/tcp/192.168.99.99/222: Connection refused
user@ubuntu-1604:~$ echo > /dev/tcp/192.168.99.99/22
यदि आप जिस प्रकार के कनेक्शन को बनाने की कोशिश कर रहे हैं उसके लिए पोर्ट बंद है, तो आपको Connection refused संदेश मिलेगा। यदि पैकेट सफलतापूर्वक भेजा जाता है, तो कोई आउटपुट नहीं होगा।
मुझे आशा है कि ये टिप्स Bash को उपयोग करने के लिए अधिक कुशल और आनंददायक बनाते हैं। यहां सूचीबद्ध की तुलना में Bash में कई अधिक ट्रिक्स छिपी हुई हैं। आपके कुछ पसंदीदा क्या हैं?
परिशिष्ट 1. कवर किए गए टिप्स और ट्रिक्स की सूची
# इतिहास संबंधी
ctrl + r (रिवर्स खोज)
!! (अंतिम कमांड फिर से चलाएं)
!* (पिछली कमांड से आर्गुमेंट्स का पुन: उपयोग करें)
!$ (अंतिम कमांड के अंतिम आर्गुमेंट का उपयोग करें)
shopt -s histappend (एकाधिक टर्मिनल्स को इतिहास फ़ाइल में लिखने की अनुमति दें)
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head (सबसे अधिक उपयोग की जाने वाली इतिहास कमांड्स सूचीबद्ध करें)
# फ़ाइल और नेविगेशन
cp /home/foo/realllylongname.cpp{,-old}
cd -
rename 's/text_to_find/been_renamed/' *.txt
export CDPATH='/var/log:~' (वेरिएबल cd बिल्ट-इन के साथ उपयोग किया जाता है.)
# Bash को कलराइज़ करें
# रंग सक्षम करें
eval "`dircolors -b`"
# ls को हमेशा रंग और प्रकार संकेतक का उपयोग करने के लिए मजबूर करें
alias ls='ls -hF --color=auto'
# dir कमांड को विंडोज़ की तरह काम करने दें (लंबा प्रारूप)
alias dir='ls --color=auto --format=long'
# grep को रंग का उपयोग करके परिणाम हाइलाइट करने दें
export GREP_OPTIONS='--color=auto'
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;33m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m' # इन्फो बॉक्स समाप्त करें
export LESS_TERMCAP_so=$'\E[01;42;30m' # इन्फो बॉक्स शुरू करें
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'
# Bash शॉर्टकट्स
shopt -s cdspell (टाइपो ठीक करता है)
ctrl + _ (पूर्ववत करें)
ctrl + arrow (एक शब्द आगे बढ़ें)
ctrl + a (कर्सर को शुरुआत में ले जाएं)
ctrl + e (कर्सर को अंत में ले जाएं)
ctrl + k (कर्सर के बाद सब कुछ काटें)
ctrl + l (स्क्रीन साफ़ करें)
ctrl + q (फोरग्राउंड में कमांड फिर से शुरू करें)
ctrl + s (फोरग्राउंड में लंबे समय तक चलने वाली कमांड रोकें)
ctrl + t (दो कैरेक्टर्स स्वैप करें)
ctrl + u (कर्सर से पहले सब कुछ काटें)
ctrl + x + ctrl + e (कमांड स्ट्रिंग को एडिटर में खोलें ताकि आप इसे चलने से पहले संपादित कर सकें)
ctrl + x + * (ग्लोब/स्टार का विस्तार करें)
ctrl + xx (लाइन के विपरीत छोर पर जाएं)
ctrl + y (बफर से पेस्ट करें)
ctrl + shift + c/v (टर्मिनल में कॉपी/पेस्ट)
# क्रम में कमांड्स चलाना
&& (पहली सफल होने पर दूसरी कमांड चलाएं)
; (पहली की सफलता की परवाह किए बिना दूसरी कमांड चलाएं)
# I/O रीडायरेक्ट करना
2>&1 (stdout और stderr को फ़ाइल में रीडायरेक्ट करें)
# खुले पोर्ट्स की जांच करें
echo > /dev/tcp/<server ip>/<port>
`` (शेल आउट करने के लिए बैक टिक्स का उपयोग करें)
# एक्जीक्यूटेबल की जांच करें
which <command>
file <path/to/file>
command -V <some command binary> (बताता है कि <some binary> बिल्ट-इन, बाइनरी या alias है)