बैश का उपयोग करके आपकी सबसे पसंदीदा कमांड-लाइन ट्रिक क्या है? [बन्द है]


156

हम सभी जानते हैं कि <ctrl>-Rइतिहास के माध्यम से रिवर्स खोज का उपयोग कैसे करें , लेकिन क्या आप जानते हैं कि <ctrl>-Sयदि आप सेट करते हैं तो आप आगे की खोज का उपयोग कर सकते हैं stty stop ""? इसके अलावा, क्या आपने कभी अपने सभी कीबोर्ड शॉर्टकट सूचीबद्ध करने के लिए बाइंड -p चलाने की कोशिश की है? डिफ़ॉल्ट रूप से मैक ओएस एक्स पर 455 से अधिक हैं।

अपने एकल सबसे पसंदीदा अस्पष्ट चाल, कीबोर्ड शॉर्टकट या बैश का उपयोग करके दुकान विन्यास क्या है?


2
कृपया यह कहने के लिए कि "आपका सबसे पसंदीदा क्या है"। यह लोगों को मतदान की तरह, लगभग विशिष्ट उत्तरों को वोट करने की अनुमति देता है।
एससीएफएफ

> "क्या आपका सबसे पसंदीदा है" कहने के लिए कृपया इसे फिर से लिखें। किया हुआ।
मार्टिन क्लिंक 22

1
इस सवाल के लिए एक StackOverflow क्लोन है: Commandlinefu.com
rkb

उन 455 डिफॉल्ट की-बाइंडिंग में से केवल 232 "सेल्फ-इंसर्ट" ("टाइप इस की") के अलावा कुछ करते हैं: $ bind -p | grep -v self-insert wc
Ed Brannin

कुछ साफ-सुथरा सामान यहां। लेकिन यह ध्यान दिया जाना चाहिए कि उनमें से कुछ केवल तभी काम करते हैं जब बैश emacs मोड में होता है ...
Mo.

जवाबों:


157

तेज़ी से प्रत्ययों के साथ फ़ाइलों का नाम बदलना / बढ़ना:
cp /home/foo/realllylongname.cpp{,-old}

इसका विस्तार होता है:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old


12
बहुत बढ़िया! अब मुझे इसे याद करने की कोशिश करने की जरूरत है।
जॉनसन

9
बस यह इंगित करने के लिए कि रिवर्स करने के लिए (.cpp-old से .cpp पर जा रहे हैं) आप cp /home/foo/realllylongname.cppelling-old,} करेंगे
माइकल

रेट्रोस्पेक्ट में इतना स्पष्ट है, और फिर भी मुझे नहीं लगता कि मैं इसे अपने दम पर करना पसंद करूंगा। धन्यवाद!
ज़ेकेव नोव

150
cd -

यह बैक बटन के समतुल्य कमांड-लाइन है (आपको पिछली निर्देशिका में ले जाता है)।


6
मैं एक निर्देशिका स्टैक का उपयोग करना चाहता हूं pushdऔर popdअपने आप को बनाए रखना चाहता हूं।
एलेक्स एम।

21
लेकिन 'cd -' में काम करने का फायदा है, भले ही आपको पुशड का इस्तेमाल करना याद न हो।
सर्जियो अकोस्टा

10
यह ध्यान देने योग्य है कि 'सीडी' आपको अपने घर की निर्देशिका में ले जाता है।
dr-jan

यह दिलचस्प है कि यह ( man cdया cd --helpकम से कम मेरा) में दिखाई नहीं देता है।
हलाल Halzgür

135

एक और पसंदीदा:

!!

आपकी आखिरी आज्ञा दोहराता है। फॉर्म में सबसे उपयोगी:

sudo !!

81
यह आपको इसके बारे में भी सच में गुस्सा करने का अतिरिक्त लाभ है। "कंप्यूटर, ऐसा करो।" "पहुंच अस्वीकृत"। "कर दो!!"
निक नेम

यह बहुत कम ज्ञात नहीं है! :-)
होयॉय

10
इसी तरह की चीजें जो आप कर सकते हैं: mkdir testdir; cd !$.. यह चलता है cd [last word of previous line](उदाहरण में cd testdir)
dbr

13
मुझे एक सैंडविच सूडो बनाओ !!
किबी

अगर आपको पसंद है !!,! $ और! -1: ^ फू ^ बार, तो आप "बाइंड स्पेस: मैजिक-स्पेस" भी करेंगे। stackoverflow.com/questions/603696/…
यौ

81

मेरा पसंदीदा '^ string ^ string2' है, जो अंतिम कमांड लेता है, string को string2 से बदल देता है और इसे निष्पादित करता है

$ ehco foo bar baz
bash: ehco: command not found
$ ^ehco^echo
foo bar baz

बैश कमांड लाइन इतिहास गाइड


यह गैर-लालची है। मैं इसे लालची कैसे बनाऊं?
Altreus

9
!!:gs/ehco/echo/
-आर-

उस गाइड का दूसरा पेज जरूरी है
jmoz

1
@ andre-r: !!:gs/ehco/echo/एक वैश्विक खोज करता है और अंतिम कमांड ( stackoverflow.com/questions/68372/…!! में प्रदान करता है ) पर प्रतिस्थापित करता है । इसके बराबर नहीं है जो सिर्फ "एहो" के एक उदाहरण की जगह लेता है - एक अधिक सटीक प्रतिक्रिया होगी । ^ehco^echo!!:s/ehco/scho
आइसलैंड_जैक

64

नाम बदलने

उदाहरण:

$ ls
this_has_text_to_find_1.txt
this_has_text_to_find_2.txt
this_has_text_to_find_3.txt
this_has_text_to_find_4.txt

$ rename 's/text_to_find/been_renamed/' *.txt
$ ls
this_has_been_renamed_1.txt
this_has_been_renamed_2.txt
this_has_been_renamed_3.txt
this_has_been_renamed_4.txt

तो उपयोगी है


3
वाह, मैं ऐसा करने के लिए बेसन, एमवी और {} ट्रिक्स का उपयोग करके इन सभी वर्षों में एक मूर्ख बन गया हूं। / foreheadsmack।
ग्रेग लिंड

7
हालांकि अन्य पदों की तरह नाम बदलना / रीडलाइन विशिष्ट नहीं है।
बंदूकों

1
zsh वितरण से zmv ज्यादातर मामलों में बेहतर है।
ZyX

उपयोग-लिनेक्स-एनजी का एक नाम भी कमांड है और यह इस उत्तर में उल्लिखित की तरह नहीं है। यहाँ वर्णित कमांड वास्तव में mmv है
क्रिस्टियन सियुपिटु

60

मैं सबसे हाल ही में प्रस्तुत कमांड लाइन: अंतिम आइटम, पहले गैर-कमांड आइटम, और सभी गैर-कमांड आइटमों से !$, !^और !*विस्तारक का एक प्रशंसक हूं । बुद्धि के लिए (ध्यान दें कि शेल पहले कमांड को प्रिंट करता है):

$ echo foo bar baz
foo bar baz
$ echo bang-dollar: !$ bang-hat: !^ bang-star: !*
echo bang-dollar: baz bang-hat: foo bang-star: foo bar baz
bang-dollar: baz bang-hat: foo bang-star: foo bar baz

यह तब काम आता है जब आप कहते हैं ls filea fileb, और उनमें से किसी एक को संपादित करना चाहते हैं: vi !$या दोनों vimdiff !*। इसे " nवें तर्क" के लिए भी सामान्यीकृत किया जा सकता है :

$ echo foo bar baz
$ echo !:2
echo bar
bar

अंत में, पथनाम के साथ, आप पथ के कुछ हिस्सों को जोड़कर :hऔर :tउपरोक्त विस्तारकों में से किसी पर भी प्राप्त कर सकते हैं :

$ ls /usr/bin/id
/usr/bin/id
$ echo Head: !$:h  Tail: !$:t
echo Head: /usr/bin Tail: id
Head: /usr/bin Tail: id

'इको !! 2' ने मेरे लिए काम नहीं किया और बाद की पोस्ट से मैंने देखा कि मुझे लगता है कि यह माना जाता है: 'इको !: 2'
user13060

8
"। बाइंड स्पेस: मैजिक-स्पेस" को .bashrc और किसी भी में जोड़ें! अंतरिक्ष से टकराते ही संयोजन स्वतः विस्तारित हो जाएगा।
यौ

47

कमांड चलाते समय, कभी-कभी मैं पिछले वाले तर्कों के साथ एक कमांड चलाना चाहता हूं। ऐसा करने के लिए, आप इस शॉर्टकट का उपयोग कर सकते हैं:

$ mkdir /tmp/new
$ cd !!:*

कभी-कभी, खोजने का उपयोग करने के बदले में, मैं एक-लाइन लूप को तोड़ दूंगा, अगर मुझे फ़ाइलों की सूची पर आदेशों का एक गुच्छा चलाने की आवश्यकता है।

for file in *.wav; do lame "$file" "$(basename "$file" .wav).mp3" ; done;

मेरे .bash_login (या .bashrc) में कमांड-लाइन इतिहास विकल्पों को कॉन्फ़िगर करना वास्तव में उपयोगी है। निम्नलिखित सेटिंग्स का एक कैडर है जो मैं अपने मैकबुक प्रो पर उपयोग करता हूं।

निम्नलिखित को सेट करना आपके इतिहास में डुप्लिकेट कमांड को मिटा देता है:

export HISTCONTROL="erasedups:ignoreboth"

मैं अपने इतिहास का आकार भी बहुत अधिक बढ़ाता हूं। क्यों नहीं? यह आज के माइक्रोप्रोसेसरों पर कुछ भी धीमा नहीं लगता है।

export HISTFILESIZE=500000
export HISTSIZE=100000

एक और बात जो मैं करता हूं वह मेरे इतिहास के कुछ आदेशों की अनदेखी करना है। एक्जिट कमांड को याद रखने की आवश्यकता नहीं है।

export HISTIGNORE="&:[ ]*:exit"

आप निश्चित रूप से हिस्टैपेंड सेट करना चाहते हैं। अन्यथा, जब आप बाहर निकलते हैं तो अपने इतिहास को मिटा देते हैं।

shopt -s histappend

एक अन्य विकल्प जो मैं उपयोग करता हूं वह है cmdhist। यह आपको एक कमांड के रूप में मल्टी-लाइन कमांड को इतिहास में सहेजने देता है।

shopt -s cmdhist

अंत में, मैक ओएस एक्स पर (यदि आप vi मोड का उपयोग नहीं कर रहे हैं), तो आप स्क्रॉल बंद होने से <CTRL> -S रीसेट करना चाहते हैं। यह बैश को आगे की खोज के रूप में व्याख्या करने में सक्षम होने से रोकता है।

stty stop ""

6
मुझे "Alt-" मिला। अंतिम आदेश के अंतिम शब्द को दोहराने के लिए "!!: *" से बेहतर है।
वीडेनड्राइंड

हिस्टारियो के लिए परिवर्धन: 1. नियमित रूप से इतिहास को बचाने (यदि आपके पास एक साथ कई गोले खुले हैं) तो निर्यात करें PROMPT_COMMAND = "history -a" 2. अन्य गोले से इतिहास पढ़ने के लिए उपनाम। उपनाम - एच = 'इतिहास-एन; इतिहास | grep '
वीडेनड्राइंड

निर्यात HISTIGNORE = "[] *" आवश्यक नहीं है, क्योंकि आपका HISTCONTROL = अनदेखा ही करना चाहिए
Weidenrinde

इतिहास के लिए एक और अच्छी बात: निर्यात HISTTIMEFORMAT = "% Y-% m-% d% H:% M:% S:"
Weidenrinde

"सीडी !!: *" से कुछ कीस्ट्रोक्स को बचाने के लिए, "सीडी! $" का प्रयास करें। "$!" की व्याख्या आपके अंतिम आदेश के अंतिम तर्क के रूप में की जाएगी।
टिम स्टीवर्ट

43

वर्तमान एक में केवल उपनिर्देशिका कैसे सूचीबद्ध करें ?

ls -d */

यह एक सरल चाल है, लेकिन आपको यह नहीं पता होगा कि मुझे उस एक को खोजने में कितना समय चाहिए!


2
अति उत्कृष्ट! इन सभी वर्षों में मैं सबसे अच्छा कर सकता था alias lsd='ls -F | grep --color /', जो एक ही चीज़ को सूचीबद्ध करेगा लेकिन एक अधिक लंगड़ा फैशन में। हालांकि, यह पार्सिंग में आसानी के लिए प्रति लाइन एक डीआईआर की सूची देगा। मैंने आपकी कमांड को ऐसा करने के लिए संशोधित किया है:ls -d1 */
आर्टेम रसकोवस्की

यह कैसे काम करता है? "ls -d" बस सूचियाँ। (जो अजीब है) लेकिन "ls -d * /" काम करता है।
यौ

1
यह थोड़ा मुश्किल है ... "ls -d" "ls -d ./" और "ls -d /" के समान "ls -d / ./*/" के समान है। '-D' स्विच सेट 'ls' tu सूची में केवल निर्देशिका प्रविष्टियाँ हैं, लेकिन यदि आप इसे कोई पैरामीटर नहीं देते हैं, तो यह वर्तमान निर्देशिका को एक पैरामीटर के रूप में उपयोग करता है, इसलिए इसमें * केवल "है।" सूची बनाने के लिए निर्देशिका ...
edomaur

1
मुझे विश्वास नहीं हो रहा है कि मैंने पहले कभी ऐसा नहीं पाया है। महान टिप।
निक डिक्सन

कोई शब्द नहीं, बस वाह !!! :)
दिम्बा

41

ESC.

अपने अंतिम बैश कमांड से अंतिम तर्क सम्मिलित करता है। यह आपके विचार से अधिक काम आता है।

cp file /to/some/long/path

सीडी ESC.


यह मेरे लिए काम करता है (बैश)। ध्यान दें कि आपने एस्क कुंजी और फिर पीरियड कुंजी को मारा है। कोई हाइफ़न या कुछ भी नहीं।
होलर

9
इसके अलावा alt-। एक ही बात है।
मार्क बेकर

हाँ, यह केवल बैश है। लेकिन <esc> (या Alt- या मेटा-) _ एक ही फ़ंक्शन के लिए बाध्य है, और <esc> -_ भी vi-mode में भी काम करता है।
निक डिक्सन

@ मेरे zsh में यह वास्तव में काम करता है। शायद आप vi मोड का उपयोग करें?
ZyX

कीबोर्ड हिट के लिए केबीडी-टैग का उपयोग करें: <kbd> ESC </ kbd> (लेकिन कोड-स्वरूपण / इंडेंटेशन के साथ बहुत अच्छा नहीं खेलता है)।
उपयोगकर्ता अज्ञात

36

निश्चित रूप से, आप " diff file1.txt file2.txt" कर सकते हैं , लेकिन बैश प्रक्रिया प्रतिस्थापन का समर्थन करता है , जो आपको diffकमांड के आउटपुट की अनुमति देता है ।

उदाहरण के लिए, मान लें कि मैं यह सुनिश्चित करना चाहता हूं कि मेरी स्क्रिप्ट मुझे वह आउटपुट देती है जिसकी मुझे उम्मीद है। मैं बस अपनी स्क्रिप्ट को <() में लपेट सकता हूं और diffत्वरित और गंदे इकाई परीक्षण प्राप्त करने के लिए इसे फ़ीड कर सकता हूं :

$ cat myscript.sh
#!/bin/sh
echo -e "one\nthree"
$
$ ./myscript.sh 
one
three
$
$ cat expected_output.txt
one
two
three
$
$ diff <(./myscript.sh) expected_output.txt
1a2
> two
$

एक अन्य उदाहरण के रूप में, मान लें कि मैं जांचना चाहता हूं कि क्या दो सर्वरों में RPM की समान सूची स्थापित है। प्रत्येक सर्वर पर sshing करने के बजाय, RPM की प्रत्येक सूची को अलग-अलग फाइलों में लिखना और diffउन फाइलों पर करना, मैं सिर्फ diffअपने वर्कस्टेशन से कर सकता हूं:

$ diff <(ssh server1 'rpm -qa | sort') <(ssh server2 'rpm -qa | sort')
241c240
< kernel-2.6.18-92.1.6.el5
---
> kernel-2.6.18-92.el5
317d315
< libsmi-0.4.5-2.el5
727,728d724
< wireshark-0.99.7-1.el5
< wireshark-gnome-0.99.7-1.el5
$

उन्नत बैश-स्क्रिप्टिंग गाइड में http://tldp.org/LDP/abs/html/process-bub.html पर अधिक उदाहरण हैं ।


35

मेरा पसंदीदा आदेश "ls -thor" है

यह आसानी से पढ़ने योग्य प्रारूप में सबसे हाल ही में संशोधित फ़ाइलों को सूचीबद्ध करने के लिए देवताओं की शक्ति को सम्मन करता है।


6
एक और, पूरी तरह से बेकार है, लेकिन यह भी अजीब आदेश की याद दिलाता है ls -bart -simpson -ruls:। एस, आईसीएनआर
फिलीप्रेम 24:10

'ls -tor' भी उपयोगी है क्योंकि आप बड़ी फ़ाइलों को जल्दी पा सकते हैं। और यह भी, गड़गड़ाहट के देवता के नाम की मूल स्वीडिश वर्तनी वास्तव में 'टॉर' है।
डाला

डेनिश में आप ls -lort"shit" के लिए डेनिश शब्द का उपयोग कर सकते हैं । किसी भी समूह को छोड़ना और घाटी का प्रकोप न होना :)
जेस्पर

1
कोई इसे "ls -lotr" भी कह सकता है, जिसका स्पष्ट रूप से टॉल्केन और लॉर्ड ऑफ द रिंग्स के साथ कुछ करना है :)
ADEpt

28

एक नवीनता की अधिक, लेकिन यह चालाक है ...

उपयोग किए गए शीर्ष 10 आदेश:

$ history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -nr | head

नमूना उत्पादन:

 242 git
  83 rake
  43 cd
  33 ss
  24 ls
  15 rsg
  11 cap
  10 dig
   9 ping
   3 vi

1
यहाँ एक छोटा, तेज़ संस्करण है:history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
अगली सूचना तक रोका गया।

25

^ रिवर्स खोज। मारो ^ R, एक पिछली कमांड का एक टुकड़ा टाइप करें जिसे आप मैच करना चाहते हैं, और ^ R को तब तक हिट करें जब तक आप जो चाहते हैं वह नहीं मिल जाता। फिर मुझे हाल ही में उपयोग किए गए आदेशों को याद नहीं करना है जो अभी भी मेरे इतिहास में हैं। विशेष रूप से बैश नहीं, बल्कि यह भी: ^ लाइन के अंत के लिए ई, ^ लाइन की शुरुआत के लिए, ^ U और ^ K क्रमशः कर्सर से पहले और बाद में हटाने के लिए।


2
मैं ^ U को किसी कारण से कभी याद नहीं रख सकता। क्या कोई शब्द डिलीट शॉर्टकट भी नहीं है?
होयॉय

1
^ W शब्द को कर्सर से पहले हटा देता है। (इस के साथ अपने उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें।)
जॉनसन

2
^ इतना उपयोगी है कि यह प्रश्न में उल्लेख किया गया था :)
मार्क बेकर

20

मेरे पास अक्सर vi, ls, आदि के लिए उपनाम हैं, लेकिन कभी-कभी आप उपनाम से बचना चाहते हैं। बस सामने कमांड में एक बैक स्लैश जोड़ें:

उदाहरण के लिए:

$ alias vi=vim
$ # To escape the alias for vi:
$ \vi # This doesn't open VIM

कूल, है ना?


तुम भी चला सकते हैं command-see SHELL BUILTIN COMMANDSबैश के मैनुअल में।
आइसलैंड_जैक २०

17

यहाँ विन्यास tweaks के एक जोड़े है:

~/.inputrc:

"\C-[[A": history-search-backward
"\C-[[B": history-search-forward

यह काम करता है, ^Rलेकिन इसके बजाय तीर कुंजियों का उपयोग कर रहा है। इसका मतलब है कि मैं टाइप कर सकता हूं (उदाहरण के लिए) cd /media/फिर ऊपर तीर चलाकर आखिरी चीज पर जाऊंगा जिसे मैं फ़ोल्डर के cdअंदर रख रहा हूं /media/

(मैं गनोम टर्मिनल का उपयोग करता हूं, आपको अन्य टर्मिनल एमुलेटर के लिए भागने के कोड को बदलने की आवश्यकता हो सकती है।)

बैश समापन भी अविश्वसनीय रूप से उपयोगी है, लेकिन यह कहीं अधिक सूक्ष्म अतिरिक्त है। इन ~/.bashrc:

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

यह प्रति-प्रोग्राम टैब-पूर्णता को सक्षम करेगा (उदाहरण के लिए कमांड लाइन शुरू होने पर टैब पूरा करने का प्रयास evinceकेवल उसी फाइल को दिखाएगा जो एविज़न खोल सकता है, और यह टैब-कम्प्लीट कमांड लाइन विकल्प भी होगा)।

इसके साथ अच्छी तरह से काम करता है ~/.inputrc:

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

+1 bash_completion जबरदस्त है
Prestomation

एक मैक पर, तीर कुंजियों के साथ इतिहास खोज को सक्षम किया जा सकता है: बाइंड "" \ e [A "': इतिहास-खोज-बैकवर्ड बाइंड" "\ e [बी"': इतिहास-खोज-आगे
असमस

17

मैं निम्नलिखित का उपयोग करता हूं:

:pसंशोधक एक इतिहास परिणाम मुद्रित करने के लिए। उदाहरण के लिए

!!:p

अंतिम कमांड को प्रिंट करेगा ताकि आप जांच सकें कि इसे फिर से चलाने से पहले यह सही है। बस !!इसे निष्पादित करने के लिए दर्ज करें।

इसी तरह से:

!?foo?:p

अपने इतिहास को सबसे हालिया कमांड के लिए खोजेंगे जिसमें स्ट्रिंग 'फू' शामिल है और इसे प्रिंट करें।

यदि आपको प्रिंट करने की आवश्यकता नहीं है,

!?foo

खोज करता है और इसे सीधे निष्पादित करता है।


2
उपयोग करने के बजाय: p, आप मैजिक-स्पेस का उपयोग भी कर सकते हैं: stackoverflow.com/questions/603696/…
Yoo

Bashrc में कॉन्फिग मैजिक-स्पेस को चलाए बिना ऐतिहासिक नियंत्रणों का विस्तार करने के लिएbind Space:magic-space # !pin<space>
SergioAraujo

16

मुझे एक गुप्त हथियार मिला है: शेल-फू।

स्मार्ट टिप्स, कूल ट्रिक्स और कुशल व्यंजनों के हजार हैं जो ज्यादातर समय एक लाइन पर फिट होते हैं।

एक जिसे मैं प्यार करता हूं (लेकिन मैं थोड़ा धोखा देता हूं क्योंकि मैं इस तथ्य का उपयोग करता हूं कि पायथन को अब ज्यादातर यूनिक्स सिस्टम पर स्थापित किया गया है):

alias webshare='python -m SimpleHTTPServer'

अब हर बार जब आप "webshare" टाइप करते हैं, तो वर्तमान निर्देशिका पोर्ट 8000 के माध्यम से उपलब्ध होगी। वास्तव में तब अच्छा होता है जब आप किसी स्थानीय नेटवर्क पर दोस्तों के साथ usb key या रिमोट डायर के बिना फाइल साझा करना चाहते हैं। वीडियो और म्यूजिक स्ट्रीम करना भी कारगर होगा।

और निश्चित रूप से क्लासिक कांटा बम जो पूरी तरह से बेकार है लेकिन अभी भी बहुत मज़ा है:

$ :(){ :|:& };:

कोशिश मत करो कि एक उत्पादन सर्वर में ...


मुझे लगता है कि मुझे नहीं चाहिए webshare /
Yoo

मुझे लगता है कि आप कमांड को सरल बना सकते हैं python -m SimpleHTTPServer(जब तक कि मैं कुछ याद नहीं कर रहा हूं, जब तक कि मूल कमांड फैंसी न हो
जेसपर रॉन-जेनसेन

भावहीन। एक उत्पादन सर्वर पर जो कांटा बम बस ओएस द्वारा निचोड़ा जाएगा; किसी उपयोगकर्ता द्वारा बनाई जा सकने वाली प्रक्रियाओं की संख्या पर सीमाएं होती हैं।
डोनल फेलो

3
@ जोनल: आपको इसे आज़माना चाहिए और अपने निष्कर्षों को रिपोर्ट करना चाहिए।
माइकल फौकरीस

12

आप परिवर्तन देखने के लिए किसी अन्य आदेश के साथ संयोजन में घड़ी आदेश का उपयोग कर सकते हैं। इसका एक उदाहरण तब था जब मैं अपने राउटर का परीक्षण कर रहा था, और मैं सिग्नल-टू-नॉइज़, आदि जैसे सामान पर अप-टू-डेट नंबर प्राप्त करना चाहता था।

watch --interval=10 lynx -dump http://dslrouter/stats.html

वॉच कमांड वास्तव में अच्छा है। मैंने पहली बार लिनक्स सर्वर हैक्स बुक के बारे में पाँच साल पहले पढ़ा था। कौन जानता था कि यह अस्तित्व में है?
होयॉय

11
दुनिया में 'वॉच' का बैश से क्या लेना-देना है?
आर्टेम रसाकोवस्की

11
type -a PROG

उन सभी स्थानों को खोजने के लिए जहां PROG उपलब्ध है, आमतौर पर ~ / बिन में कहीं एक / usr / bin / PROG में से एक है जो उम्मीद की जा सकती थी।


1
यह आपको यह भी बताएगा कि क्या यह एक फ़ंक्शन या उपनाम है। यदि यह आपके कई स्थानों में है तो PATHयह उनमें से प्रत्येक को दिखाएगा।
अगली सूचना तक रोक दिया गया।

11

मैं गूंज के साथ आदेशों का निर्माण करना और उन्हें खोल तक पहुंचाना पसंद करता हूं :

$ find dir -name \*~ | xargs echo rm
...
$ find dir -name \*~ | xargs echo rm | ksh -s

क्यों? क्योंकि यह मुझे यह देखने की अनुमति देता है कि मैं इसे करने से पहले क्या करने जा रहा हूं। इस तरह अगर मेरे पास एक भयानक त्रुटि है (जैसे कि मेरे होम डायरेक्टरी को हटाना), तो ऐसा होने से पहले मैं इसे पकड़ सकता हूं। जाहिर है, विनाशकारी या अपरिवर्तनीय कार्यों के लिए यह सबसे महत्वपूर्ण है।


1
आप फ़ाइलों और फ़ोल्डरों के साथ सफेद रिक्त स्थान वाली समस्याओं से बचने के लिए find -print0 और xargs -0 का उपयोग करना चाह सकते हैं।
neu242

या उनके नाम में सफेद रिक्त स्थान वाली फ़ाइलों और फ़ोल्डरों के साथ बनाने और काम करने से बचें। ;-) अगर आप उपयोगकर्ता द्वारा तैयार किए गए नामों के साथ काम कर रहे हैं, तो आपका सुझाव महत्वपूर्ण है।
जॉन Ericson

4
जब आप "गूंज" निकाल सकते हैं तो आप "| ksh -s" को क्यों जोड़ेंगे?
यौ

GNU खोजने के साथ पाइप लगाने की आवश्यकता नहीं:$ find dir -name \\*~ -exec rm {} +
bobbogo

10

जब मैं एक बड़ी फ़ाइल डाउनलोड करता हूं, तो अक्सर:

while ls -la <filename>; do sleep 5; done

और फिर बस ctrl + c जब मैं कर रहा हूँ (या अगर lsगैर-शून्य देता है)। यह watchकार्यक्रम के समान है, लेकिन यह इसके बजाय शेल का उपयोग करता है, इसलिए यह बिना प्लेटफार्मों पर काम करता है watch

एक अन्य उपयोगी उपकरण netcat है, या nc। यदि तुम करो:

nc -l -p 9100 > printjob.prn

फिर आप किसी अन्य कंप्यूटर पर एक प्रिंटर सेट कर सकते हैं, लेकिन इसके बजाय कंप्यूटर के आईपी पते का उपयोग करें। जब प्रिंट नौकरी भेजी जाती है, तो यह कंप्यूटर नेटक्वाट चलाने से प्राप्त होता है और इसमें डंप किया जाता है printjob.prn


यह और क्यों नहीं, उदाहरण के लिए wget,?
पोर्स

कोशिश करो watch ls -la <filename>(यदि आप 2 सेकंड के डिफ़ॉल्ट को पसंद नहीं करते हैं तो -n5 का उपयोग करें )।
टेड परसीवल सेप

1
@ टेड, watchसभी प्लेटफार्मों पर उपलब्ध नहीं है, हालांकि, सोलारिस, मैक ओएस एक्स, आदि @Porges, सुनिश्चित नहीं हैं कि आपका क्या मतलब है। क्या पत्तन एक बंदरगाह पर भी सुन सकता है?
ड्रीमलैक्स


10

जब मैं एक पेड़ पदानुक्रम में व्यापक रूप से अलग-अलग स्थानों में कई निर्देशिकाओं का उपयोग कर रहा हूं, तो नेविगेट करने का एक पसंदीदा तरीका acf_func.sh (नीचे सूचीबद्ध) का उपयोग करना है। एक बार परिभाषित करने के बाद, आप कर सकते हैं

सीडी -

एक संख्यात्मक मेनू के साथ हाल की निर्देशिकाओं की एक सूची देखने के लिए

सीडी -2

दूसरी सबसे हाल की निर्देशिका में जाने के लिए।

उपयोग करने के लिए बहुत आसान है, बहुत आसान है।

यहाँ कोड है:

# do ". acd_func.sh"
# acd_func 1.0.5, 10-nov-2004
# petar marinov, http:/geocities.com/h2428, this is public domain

cd_func ()
{
  local x2 the_new_dir adir index
  local -i cnt

  if [[ $1 ==  "--" ]]; then
    dirs -v
    return 0
  fi

  the_new_dir=$1
  [[ -z $1 ]] && the_new_dir=$HOME

  if [[ ${the_new_dir:0:1} == '-' ]]; then
    #
    # Extract dir N from dirs
    index=${the_new_dir:1}
    [[ -z $index ]] && index=1
    adir=$(dirs +$index)
    [[ -z $adir ]] && return 1
    the_new_dir=$adir
  fi

  #
  # '~' has to be substituted by ${HOME}
  [[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"

  #
  # Now change to the new dir and add to the top of the stack
  pushd "${the_new_dir}" > /dev/null
  [[ $? -ne 0 ]] && return 1
  the_new_dir=$(pwd)

  #
  # Trim down everything beyond 11th entry
  popd -n +11 2>/dev/null 1>/dev/null

  #
  # Remove any other occurence of this dir, skipping the top of the stack
  for ((cnt=1; cnt <= 10; cnt++)); do
    x2=$(dirs +${cnt} 2>/dev/null)
    [[ $? -ne 0 ]] && return 0
    [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
    if [[ "${x2}" == "${the_new_dir}" ]]; then
      popd -n +$cnt 2>/dev/null 1>/dev/null
      cnt=cnt-1
    fi
  done

  return 0
}

alias cd=cd_func

if [[ $BASH_VERSION > "2.05a" ]]; then
  # ctrl+w shows the menu
  bind -x "\"\C-w\":cd_func -- ;"
fi

10

खूंखार प्रवेश करने से पहले जटिल लाइनों का विस्तार करें

  • Alt+ Ctrl+ e- खोल-विस्तार लाइन (उपयोग करना पड़ सकता है Esc, Ctrl+ eअपने कीबोर्ड पर)
  • Ctrl+ _- पूर्ववत करें
  • Ctrl+ x, *- ग्लोब-विस्तार-शब्द

$ echo !$ !-2^ * Alt+ Ctrl+ e
$ echo aword someotherword * Ctrl+ _
$ echo !$ !-2^ * Ctrl+ x, *
$echo !$ !-2^ LOG Makefile bar.c foo.h

&सी।


+1, मुझे हमेशा दबाने से डर लगता है Enter:)
जोओ पोर्टेला

इनमें से कोई नहीं जानता था। पूर्ववत एक हत्यारा है। किसी भी कमांड लाइन संपादन के लिए अच्छा है।
फिलिप ए।

9

मैं हमेशा आंशिक रहा हूँ:

ctrl-E # move cursor to end of line
ctrl-A # move cursor to beginning of line

मैं भी उपयोग करता हूं shopt -s cdable_vars, तो आप आम निर्देशिका के लिए बैश चर बना सकते हैं। इसलिए, मेरी कंपनी के स्रोत पेड़ के लिए, मैं जैसे चर का एक गुच्छा बनाता हूं:

export Dcentmain="/var/localdata/p4ws/centaur/main/apps/core"

तब मैं उस निर्देशिका को बदल सकता हूं cd Dcentmain


घर और अंत crtl-A और ctrl-E जैसी चीजें करते हैं।
davidfg4

यह मैक लैपटॉप पर मदद करता है जिसमें घर और अंत कीज़ नहीं हैं।
jamesh

दुर्भाग्य से ctrl-A screenडिफ़ॉल्ट रूप से भागने की कुंजी भी है । मैं इसे अपने में ctrl-X के लिए रीमैप करता हूं .screenrc, लेकिन फिर मैं एक एमएसीएस उपयोगकर्ता नहीं हूं।
सिस्टम PAUSE

कुछ हद तक cdable_vars विकल्प से संबंधित है, वहाँ भी CDPATH पर्यावरण चर है। लेकिन यह अलग तरह से काम करता है, क्योंकि आप पेरेंट डायरेक्टरी को सेट करते हैं, जैसे कि पेट में। Cdable_vars के साथ आप अधिक नियंत्रण प्राप्त करते हैं।
ज़ेकेक

1
अपनी शॉर्टकट सूची के लिए: कर्सर से पंक्ति के अंत तक सब कुछ हटाने के लिए CTRL + K, कर्सर से पहले सब कुछ हटाने के लिए CTRL + U, एक शब्द को आगे / पीछे (या CTRL + बाएँ तीर / CTRL को स्थानांतरित करने के लिए ALT + F / ALT + B + सही तीर)। Cdable_vars के लिए +1!
फिलिप ए।

8

pbcopy

यह मैक सिस्टम क्लिपबोर्ड को कॉपी करता है। आप इसे कमांड कर सकते हैं ... कोशिश करें:

pwd | pbcopy


नायब! यह एक मैक विशिष्ट कमांड है।
dala

ये नहीं हैं: alias pbcopy='xsel --clipboard --input' और alias pbpaste='xsel --clipboard --output'
wawawawa

7
$ touch {1,2}.txt
$ ls [12].txt
1.txt  2.txt
$ rm !:1
rm [12].txt
$ history | tail -10
...
10007  touch {1,2}.txt
...
$ !10007
touch {1,2}.txt
$ for f in *.txt; do mv $f ${f/txt/doc}; done

के history 10बजाय का उपयोग करें history | tail -10(जो tail -n 10कि उस वाक्य रचना के पदावनत होने के बाद से होना चाहिए )।
अगली सूचना तक रोक दिया गया।

7

कमांड लाइन से 'सेट -o vi', या बेहतर .bashrc का उपयोग करके, आप कमांड लाइन पर vi संपादन मोड में डालते हैं। आप 'इन्सर्ट' मोड में शुरू करते हैं ताकि आप सामान्य की तरह टाइप और बैकस्पेस कर सकें, लेकिन यदि आप एक 'बड़ी' गलती करते हैं तो आप एस्क कुंजी को हिट कर सकते हैं और फिर 'b' और 'f' का उपयोग करके घूम सकते हैं जैसा कि आप vi में करते हैं। एक शब्द को बदलने के लिए cw। विशेष रूप से उपयोगी होने के बाद आप एक इतिहास कमांड लाते हैं जिसे आप बदलना चाहते हैं।


7

उपरोक्त कई के समान, मेरा वर्तमान पसंदीदा कीस्ट्रोके [alt] है। (Alt और "।" एक साथ कुंजी) यह $ के समान है! (पिछले कमांड से अंतिम तर्क सम्मिलित करता है) सिवाय इसके कि यह तत्काल है और मेरे लिए टाइप करना आसान है। (बस स्क्रिप्ट में इस्तेमाल नहीं किया जा सकता)

उदाहरण के लिए:

mkdir -p /tmp/test/blah/oops/something
cd [alt].

Alt- [0-9] के साथ इसे संयोजित करने का भी प्रयास करें (पहले संयोजन को हिट करें, फिर रिलीज़ करें, फिर दूसरा)। उदाहरण के लिए यदि अंतिम कमांड 'एमवी फू बार' है, तो "Alt-0 Alt-।" "mv" देता है, "Alt-1 Alt-।" "फू 'देता है," ऑल्ट -2 अल्ट-। " और मूल Alt-। दोनों 'बार' आदि देते हैं
सैम स्टोक्स

1
Alt- दबाने का भी प्रयास करें। एक से अधिक बार (या Alt दबाए रखने के बाद, उसे वहीं दबाए रखें, कई बार डॉट दबाएँ, और फिर Alt जारी करें) यह Ctrl-R को एक से अधिक बार दबाने के समान है।
यौ

7

& कमांड का उपयोग करके एक साथ कई कमांड स्ट्रिंग करना :

./run.sh && tail -f log.txt

या

kill -9 1111 && ./start.sh

1
यदि कोई विफल हो जाता है, तो दूसरे कमांड को निष्पादित नहीं किया जाएगा (तेजी से, जैसे प्रोग्राम में)
फ्रेडेरिक मोरीन

1
इसके विपरीत तार्किक या 'का उपयोग करना है || जिसमें दाहिने हाथ की ओर केवल तभी क्रियान्वित किया जाएगा यदि बाएं हाथ की तरफ झूठी है। उदाहरण: <कोड> कमांड_1 || कमांड_2 </ code>
dala
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.