कई लिनक्स और यूनिक्स वेरिएंट के लिए डिफ़ॉल्ट शेल के रूप में, बैश में कई प्रकार की अप्रयुक्त विशेषताएं शामिल हैं, इसलिए यह तय करना कठिन था कि क्या चर्चा की जाए। अंततः, मैंने बैश युक्तियों पर ध्यान केंद्रित करने का निर्णय लिया जो दिन-प्रतिदिन की गतिविधियों को आसान बनाती हैं।
एक सलाहकार के रूप में, मुझे विविध वातावरण और कार्य शैलियों की बहुलता दिखाई देती है। मैंने इस अनुभव का उपयोग सुझावों को चार व्यापक श्रेणियों तक सीमित करने के लिए किया:टर्मिनल और लाइन ट्रिक्स, नेविगेशन और फाइलें, इतिहास और सहायक कमांड। ये श्रेणियां पूरी तरह से मनमानी हैं और किसी भी तरह के निश्चित वर्गीकरण की तुलना में मेरे अपने विचारों को व्यवस्थित करने के लिए अधिक काम करती हैं। यहां शामिल कई युक्तियां एक से अधिक श्रेणियों में विषयगत रूप से फिट हो सकती हैं।
आगे की हलचल के बिना, यहां कुछ सबसे उपयोगी बैश ट्रिक्स हैं जिनका मैंने सामना किया है।
बैश इतिहास के साथ काम करना
अपनी उत्पादकता बढ़ाने के सर्वोत्तम तरीकों में से एक बैश इतिहास का अधिक प्रभावी ढंग से उपयोग करना सीखना है। इसे ध्यान में रखते हुए, बहु-उपयोगकर्ता वातावरण में शायद सबसे महत्वपूर्ण बदलावों में से एक है histappend
को सक्षम करना। अपने खोल के लिए विकल्प। ऐसा करने के लिए, बस निम्न कमांड चलाएँ:
shopt -s histappend
यह कई टर्मिनल सत्रों को एक ही समय में इतिहास को लिखने की अनुमति देता है। अधिकांश परिवेशों में यह विकल्प नहीं है सक्षम। इसका मतलब है कि यदि आपके पास एक से अधिक बैश सत्र खुले हैं (या तो स्थानीय रूप से या एसएसएच से अधिक) तो इतिहास अक्सर खो जाता है।
एक अन्य सामान्य कार्य अंतिम कमांड को sudo
. के साथ दोहराना है . उदाहरण के लिए, मान लें कि आप एक निर्देशिका बनाना चाहते हैं mkdir /etc/ansible/facts.d
. जब तक आप रूट नहीं हैं, यह आदेश विफल हो जाएगा। मैंने जो देखा है, उससे अधिकांश उपयोगकर्ता up
तीर, पंक्ति की शुरुआत तक स्क्रॉल करें, और sudo
. जोड़ें आज्ञा। एक आसान तरीका है। बस इस तरह कमांड चलाएँ:
sudo !!
बैश चलेगा 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
जब !!
चलाया जाता है, पूरा कमांड टर्मिनल पर प्रतिध्वनित होता है ताकि आप जान सकें कि अभी क्या निष्पादित किया गया था।
!*
. के समान लेकिन बहुत कम बार उपयोग किया जाता है छोटा रास्ता। यह बैश को बताता है कि आप सभी *तर्क* . चाहते हैं पिछली कमांड से वर्तमान कमांड में दोहराया जाना है। यह उस कमांड के लिए उपयोगी हो सकता है जिसमें बहुत सारे तर्क हैं जिनका आप पुन:उपयोग करना चाहते हैं। एक साधारण उदाहरण फाइलों का एक गुच्छा बना रहा है और फिर उन पर अनुमतियों को बदल रहा है:
[user@centos tmp]$ touch file1 file2 file3 file4
[user@centos tmp]$ chmod 777 !*
chmod 777 file1 file2 file3 file4
यह केवल विशिष्ट परिस्थितियों में ही काम आता है, लेकिन यह आपको कुछ कीस्ट्रोक्स से बचा सकता है।
कीस्ट्रोक्स को सेव करने की बात करते हुए, आइए अपने इतिहास में कमांड खोजने के बारे में बात करते हैं। अधिकांश उपयोगकर्ता कुछ इस तरह करेंगे:
history |grep <some command>
हालांकि, अपने इतिहास को खोजने का एक आसान तरीका है। अगर आप
. दबाते हैंctrl + r
बैश आपके इतिहास की रिवर्स सर्च करेगा। जैसे ही आप टाइप करना शुरू करेंगे, परिणाम दिखने शुरू हो जाएंगे। उदाहरण के लिए:
(reverse-i-search)`hist': shopt -s histappend
उपरोक्त उदाहरण में, मैंने hist
टाइप किया है और यह shopt
. से मेल खाता था कमांड जिसे हमने पहले कवर किया था। अगर आप ctrl + r
दबाते रहते हैं , बैश अन्य सभी मैचों के माध्यम से पीछे की ओर खोजना जारी रखेगा।
हमारी आखिरी तरकीब कोई तरकीब नहीं है, जितना कि एक उपयोगी कमांड जिसे आप अपने इतिहास में सबसे अधिक उपयोग किए जाने वाले कमांडों को गिनने और प्रदर्शित करने के लिए उपयोग कर सकते हैं।
[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 <tab><tab>
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<tab>/lib/fla<tab>/ex<tab>/sh<tab>/app<tab>
सौभाग्य से, बैश को आपकी पिछली निर्देशिका याद है, और आप केवल 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
यह सब ठीक है और अच्छा है, लेकिन क्या होगा यदि आपके पास निर्देशिकाओं का एक समूह है जिसे आप आसानी से नेविगेट करना चाहते हैं? बैश ने आपको वहां भी कवर किया है। एक वैरिएबल है जिसे आप सेट कर सकते हैं जो आपको अधिक प्रभावी ढंग से नेविगेट करने में मदद करेगा। यहां एक उदाहरण दिया गया है:
[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
एक पेड़ के शीर्ष पर पहुंचने के लिए उपयोगी है जिसे आप अक्सर एक्सेस करते हैं, लेकिन जब आप एक बड़ी फ़ोल्डर संरचना ब्राउज़ कर रहे हों तो इसे प्रबंधित करना बोझिल हो सकता है।
अंत में, आइए दो सामान्य उपयोग के मामलों के बारे में बात करते हैं जो हर कोई किसी न किसी बिंदु पर करता है:फ़ाइल एक्सटेंशन बदलना और फ़ाइलों का नाम बदलना। पहली नज़र में, यह एक ही बात लग सकती है, लेकिन बैश इन कार्यों को पूरा करने के लिए कुछ अलग तरकीबें पेश करता है।
हालांकि यह एक "डाउन-एंड-डर्टी" ऑपरेशन हो सकता है, अधिकांश उपयोगकर्ताओं को किसी समय उस फ़ाइल की एक त्वरित प्रतिलिपि बनाने की आवश्यकता होती है जिस पर वे काम कर रहे हैं। अधिकांश फ़ाइल नाम को ठीक से कॉपी करेंगे और बस एक फ़ाइल एक्सटेंशन जैसे .old
. को जोड़ देंगे या .bak
. बैश में इसके लिए एक त्वरित शॉर्टकट है। मान लीजिए आपके पास एक फ़ाइल नाम है जैसे spideroak_inotify_db.07pkh3
जिसकी एक प्रति आप रखना चाहते हैं। आप टाइप कर सकते हैं:
cp spideroak_inotify_db.07pkh3 spideroak_inotify_db.07pkh3.bak
आप कॉपी/पेस्ट ऑपरेशंस का उपयोग करके, पूर्ण टैब का उपयोग करके, संभवतः एक तर्क को दोहराने के लिए किसी एक शॉर्टकट का उपयोग करके, या बस पूरी बात टाइप करके इसका त्वरित कार्य कर सकते हैं। हालाँकि, जब आप इसे टाइप करने के अभ्यस्त हो जाते हैं, तो नीचे दिया गया कमांड और भी तेज़ साबित होना चाहिए:
cp spideroak_inotify_db.07pkh3{,.old}
यह (जैसा कि आप अनुमान लगा सकते हैं) .old
. जोड़कर फ़ाइल को कॉपी करता है फ़ाइल में फ़ाइल एक्सटेंशन। यह बहुत अच्छा है, आप कह सकते हैं, लेकिन मैं एक साथ बड़ी संख्या में फाइलों का नाम बदलना चाहता हूं। ज़रूर, आप कर सकते थे इनसे निपटने के लिए लूप के लिए लिखें (और वास्तव में, मैं अक्सर कुछ जटिल के लिए ऐसा करता हूं) लेकिन जब 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.txt
CentOS या Arch बॉक्स पर यह समान दिखाई देगा:
`seq 1 5` में x के लिए[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.txt
बैश की बाइंडिंग
बैश में बहुत सारे बिल्ट-इन कीबोर्ड शॉर्टकट हैं। आप bind -p
. लिखकर उनकी सूची ढूंढ सकते हैं . मैंने सोचा कि कई को उजागर करना उपयोगी होगा, हालांकि कुछ प्रसिद्ध हो सकते हैं।
- ctrl + _ (पूर्ववत करें)
- ctrl + t (दो वर्णों की अदला-बदली करें)
- ALT + t (दो शब्दों की अदला-बदली करें)
- एएलटी + . (पिछली कमांड से अंतिम तर्क प्रिंट करता है)
- ctrl + x + * (ग्लोब/स्टार का विस्तार करें)
- ctrl + तीर (एक शब्द आगे बढ़ाएं)
- ALT + f (एक शब्द आगे बढ़ाएं)
- ALT + b (एक शब्द पीछे ले जाएँ)
- ctrl + x उसके बाद ctrl + e (संपादक में कमांड स्ट्रिंग खोलता है ताकि आप निष्पादन से पहले इसे संपादित कर सकें)
- ctrl + e (कर्सर को अंत तक ले जाएं)
- ctrl + a (कर्सर को शुरू करने के लिए ले जाएँ)
- ctrl + xx (पंक्ति के विपरीत छोर पर जाएँ)
- ctrl + u (कर्सर से पहले सब कुछ काट देता है)
- ctrl + k (कर्सर के बाद सब कुछ काट देता है)
- ctrl + y (बफर से चिपकाता है)
- ctrl + l (लोअरकेस एल, स्क्रीन साफ़ करता है)
मैं अधिक स्पष्ट लोगों पर चर्चा नहीं करूंगा। हालाँकि, कुछ सबसे उपयोगी शॉर्टकट जो मैंने पाए हैं, वे हैं जो आपको शब्दों (या पाठ के अनुभाग) को हटाने और उन्हें पूर्ववत करने देते हैं। मान लीजिए कि आप systemd
. का उपयोग करके सेवाओं के एक समूह को रोकने जा रहे हैं , लेकिन आप उनमें से कुछ को कुछ ऑपरेशन पूरा होने के बाद ही शुरू करना चाहते थे। आप ऐसा कुछ कर सकते हैं:
systemctl stop httpd mariadb nfs smbd
<hit the up button to get the previous command>
<use 'ctrl + w' to remove the unwanted arguments>
लेकिन क्या होगा अगर आपने एक को बहुत अधिक हटा दिया? कोई समस्या नहीं—बस ctrl + _
. का उपयोग करें पिछले संपादन को पूर्ववत करने के लिए।
अन्य कट कमांड आपको कर्सर से लाइन के अंत या शुरुआत तक सब कुछ जल्दी से हटाने की अनुमति देते हैं (Ctrl + k
का उपयोग करके) और Ctrl + u
, क्रमश)। इसमें कटे हुए टेक्स्ट को टर्मिनल बफर में रखने का अतिरिक्त लाभ है ताकि आप इसे बाद में पेस्ट कर सकें (ctrl + y
का उपयोग करके) ) इन आदेशों को यहाँ प्रदर्शित करना कठिन है, इसलिए मैं आपको इन्हें स्वयं आज़माने के लिए दृढ़ता से प्रोत्साहित करता हूँ।
अंतिम लेकिन कम से कम, मैं शायद ही कभी उपयोग किए जाने वाले कुंजी संयोजन का उल्लेख करना चाहता हूं जो कंटेनरों जैसे सीमित वातावरण में बेहद आसान हो सकता है। यदि आपके पास कभी भी पिछले आउटपुट से कोई कमांड दिखता है, तो एक समाधान है:ctrl + x + ctrl + e
दबाकर पर्यावरण चर EDITOR में जो भी संपादक सेट है, उसमें कमांड को खोलेगा। यह आपको टेक्स्ट एडिटर में एक लंबे या विकृत कमांड को संपादित करने की अनुमति देगा जो (संभावित रूप से) टेक्स्ट को लपेट सकता है। अपने काम को सहेजना और बाहर निकलना, ठीक वैसे ही जैसे आप एक सामान्य फ़ाइल पर काम करते समय, संपादक को छोड़ने पर कमांड निष्पादित करेंगे।
विविध युक्तियाँ
आप पा सकते हैं कि आपके बैश शेल में रंग प्रदर्शित होने से आपका अनुभव बढ़ सकता है। यदि आप ऐसे सत्र का उपयोग कर रहे हैं जिसमें रंगीकरण सक्षम नहीं है, तो नीचे उन आदेशों की एक श्रृंखला दी गई है जिन्हें आप अपने .bash_profile
में रख सकते हैं। अपने सत्र में रंग जोड़ने के लिए। ये काफी सीधे हैं और इन्हें गहन स्पष्टीकरण की आवश्यकता नहीं है:
# enable colors
eval "`dircolors -b`"
# force ls to always use color and type indicators
alias ls='ls -hF --color=auto'
# make the dir command work kinda like in windows (long format)
alias dir='ls --color=auto --format=long'
# make grep highlight results using color
export GREP_OPTIONS='--color=auto'
# Add some colour to LESS/MAN pages
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'
बैश के भीतर विभिन्न विकल्पों को समायोजित करने के साथ-साथ, आप समय बचाने के लिए कुछ साफ-सुथरी तरकीबों का भी उपयोग कर सकते हैं। उदाहरण के लिए, दो आदेशों को एक के बाद एक चलाने के लिए, प्रत्येक के बाहर निकलने की स्थिति पर ध्यान दिए बिना, ;
का उपयोग करें कमांड को अलग करने के लिए, जैसा कि नीचे देखा गया है:
[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
. नामक फ़ाइल में डाल देगा बाद में देखने के लिए।
कभी-कभी लंबे समय तक चलने वाली कमांड के दौरान, आपको किसी कार्य के निष्पादन को रोकना पड़ सकता है। आप 'स्टॉप' शॉर्टकट का उपयोग कर सकते हैं ctrl + z
नौकरी रोकना (लेकिन मारना नहीं)। कार्य को कार्य कतार में जोड़ दिया जाता है, लेकिन जब तक आप इसे फिर से शुरू नहीं करते, तब तक आपको कार्य दिखाई नहीं देगा। यह कार्य बाद में अग्रभूमि आदेश fg
. का उपयोग करके फिर से शुरू किया जा सकता है ।
इसके अलावा, आप ctrl + s
. के साथ किसी कार्य को आसानी से रोक भी सकते हैं . कार्य और उसका आउटपुट टर्मिनल अग्रभूमि में रहता है, और शेल का उपयोग नहीं है उपयोगकर्ता को वापस कर दिया। ctrl + q
. दबाकर काम फिर से शुरू किया जा सकता है ।
यदि आप एक ग्राफिकल वातावरण में काम कर रहे हैं जिसमें कई टर्मिनल खुले हैं, तो आउटपुट को कॉपी और पेस्ट करने के लिए कीबोर्ड शॉर्टकट रखना आपके लिए आसान हो सकता है। ऐसा करने के लिए, निम्न शॉर्टकट का उपयोग करें:
# Copies highlighted text
ctrl + shift + c
# Pastes text in buffer
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>
running चल रहा है आपको विभिन्न प्रकार की जानकारी देगा:
[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
मिलेगा संदेश। यदि पैकेट सफलतापूर्वक भेजा जाता है, तो कोई आउटपुट नहीं होगा।
मुझे उम्मीद है कि ये टिप्स बैश को अधिक कुशल और उपयोग करने में आनंददायक बना देंगे। मैंने यहाँ सूचीबद्ध की तुलना में बैश में और भी कई तरकीबें छिपी हैं। आपके कुछ पसंदीदा क्या हैं?
परिशिष्ट 1. कवर की गई युक्तियों और युक्तियों की सूची
# History related
ctrl + r (reverse search)
!! (rerun last command)
!* (reuse arguments from previous command)
!$ (use last argument of last command)
shopt -s histappend (allow multiple terminals to write to the history file)
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head (list the most used history commands)
# File and navigation
cp /home/foo/realllylongname.cpp{,-old}
cd -
rename 's/text_to_find/been_renamed/' *.txt
export CDPATH='/var/log:~' (variable is used with the cd built-in.)
# Colourize bash
# enable colors
eval "`dircolors -b`"
# force ls to always use color and type indicators
alias ls='ls -hF --color=auto'
# make the dir command work kinda like in windows (long format)
alias dir='ls --color=auto --format=long'
# make grep highlight results using color
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' # end the info box
export LESS_TERMCAP_so=$'\E[01;42;30m' # begin the info box
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'
# Bash shortcuts
shopt -s cdspell (corrects typoos)
ctrl + _ (undo)
ctrl + arrow (move forward a word)
ctrl + a (move cursor to start)
ctrl + e (move cursor to end)
ctrl + k (cuts everything after the cursor)
ctrl + l (clears screen)
ctrl + q (resume command that is in the foreground)
ctrl + s (pause a long running command in the foreground)
ctrl + t (swap two characters)
ctrl + u (cuts everything before the cursor)
ctrl + x + ctrl + e (opens the command string in an editor so that you can edit it before it runs)
ctrl + x + * (expand glob/star)
ctrl + xx (move to the opposite end of the line)
ctrl + y (pastes from the buffer)
ctrl + shift + c/v (copy/paste into terminal)
# Running commands in sequence
&& (run second command if the first is successful)
; (run second command regardless of success of first one)
# Redirecting I/O
2>&1 (redirect stdout and stderr to a file)
# check for open ports
echo > /dev/tcp/<server ip>/<port>
`` (use back ticks to shell out)
# Examine executable
which <command>
file <path/to/file>
command -V <some command binary> (tells you whether <some binary> is a built-in, binary or alias)