लिनक्स कमांड लाइन सर्वोत्तम अभ्यास और टिप्स?


112

मैं एक चर्चा खोलना चाहूंगा जो आपके लिनक्स कमांड लाइन (सीएलआई) की सर्वोत्तम प्रथाओं और युक्तियों को संचित करेगी।

मैंने नीचे टिप्पणी साझा करने के लिए इस तरह की चर्चा के लिए खोज की है, लेकिन इस पोस्ट को नहीं पाया है।

मुझे उम्मीद है कि हम सभी इससे सीख सकते हैं।

आपका बैश टिप्स, grep, sed, AWK, / proc और अन्य सभी संबंधित लिनक्स / यूनिक्स प्रणाली प्रशासन, शेल प्रोग्रामिंग सर्वोत्तम प्रथाओं को हम सभी के लाभ के लिए साझा करने के लिए आपका स्वागत है।


लिनक्स ही क्यों? कई टिप्स यूनिक्स के लगभग सभी स्वादों पर उपयोगी हो सकते हैं।
मौविसील

यह प्रश्न एक व्यापक हो सकता है - पूरी किताबों को भरने के लिए लिनक्स / यूनिक्स कमांड लाइन सर्वोत्तम प्रथाओं के लिए पर्याप्त है ...
जोनीक

मैं मानता हूं कि यूनिक्स टिप्स जिन्हें लिनक्स में भी लागू किया जा सकता है, उनका बहुत स्वागत है, मैंने लिनक्स लिखा है क्योंकि ए। यही है जो हम यहां काम करते हैं। B. क्योंकि यह हाल के वर्षों में एक अधिक व्यापक सार्वजनिक प्रदर्शन प्राप्त कर रहा है।
मैक्सिम वीक्स्लर

मुझे लगता है कि लोगों को इस्तेमाल करने वाले सबसे उपयोगी और दिलचस्प आदेशों की एक सूची तैयार करना एक महान विचार है।

क्या इनमें से कोई भी प्रासंगिक है? refspecs.freestandards.org

जवाबों:


111

जीएनयू प्रोजेक्ट द्वारा विकसित स्क्रीन , एक मुफ्त टर्मिनल मल्टीप्लेक्स का उपयोग करें जो आपको एक में कई टर्मिनलों की अनुमति देगा।

आप एक सत्र शुरू कर सकते हैं और आपके टर्मिनलों को कनेक्शन खो जाने पर भी बचाया जाएगा, इसलिए आप बाद में या घर से फिर से शुरू कर सकते हैं।


2
मेरे द्वारा उपयोग किए जाने वाले सबसे सामान्य स्विच 'स्क्रीन -D -R' हैं, जो मेरे पिछले स्क्रीन सत्र को फिर से शुरू करने और फिर से शुरू करने के लिए 'स्क्रीन -x' हैं, एक ही स्क्रीन सत्र को कई लॉगिन से देखने के लिए। इसके अलावा, अपने आप को dotfiles.org/.screenrc
Nick Devereaux

4
स्क्रीन के बारे में एक और अच्छी बात यह है कि जब आप किसी चीज़ पर सहयोग करना चाहते हैं तो आप अन्य लोगों के साथ एक टर्मिनल साझा कर सकते हैं, स्क्रीन -x का उपयोग करके
gareth_bowles

101

SSH!
SSH भगवान की आज्ञा है - मुझे लगता है कि यह सीखने के लिए सबसे मूल्यवान ओवर-ऑल कमांड है। विकल्प बहुत चुनौतीपूर्ण हो सकते हैं, लेकिन ऐसा लगता है कि मैं लगातार एसएसएच के लिए नए कमांड-लाइन विकल्पों का उपयोग करना सीख रहा हूं जो मैंने कभी नहीं सोचा था कि यह आवश्यक होगा। मैंने इस बिंदु पर उन सभी का उपयोग किया हो सकता है।

जितना अधिक आप इसका उपयोग करते हैं, उतना ही आप इसके बारे में सीखते हैं। आप इसे कुछ अद्भुत चीजों को करने के लिए उपयोग कर सकते हैं।

नोट: ये सभी चीजें दूरस्थ रूप से आपके सर्वर पर कोई सेटअप नहीं है, सिवाय ssh सर्वर के चलने के लिए।

इंटरनेट पर फ़ाइल सिस्टम माउंट करें

SSHFS के लिए नेट खोजें

आगे के आदेश

SVN + SSH प्रोटोकॉल रिमोट क्लाइंट से सर्वर पर सबऑवर्सन है, जिस पर NO DEAMON चल रहा है! SVN कमांड सर्वर को ssh शेल के माध्यम से शुरू करता है और मौजूदा पाइप के माध्यम से जानकारी को आगे और पीछे से गुजरता है। Rsync प्रोग्राम एक ही काम करता है, एक सर्वर के खिलाफ चलता है, जिसमें SSH के माध्यम से खुद को शुरू करने से कोई rsync deamon नहीं है। इसी तरह के ट्रिक करने के लिए अपनी बैश फाइल लिखना आसान है।

फायरवॉल के माध्यम से प्राप्त करने के लिए चेन

मैं अपने घर पर अपने लिनक्स सर्वर के माध्यम से अपने मैक पर कूदने के लिए हर समय इसका उपयोग करता हूं।

फ़ॉरवर्ड पोर्ट:
केवल तब तक उपयोगी लगते हैं जब तक आपको एहसास न हो कि आप अपने होम फ़ायरवॉल के माध्यम से बाउंस कर सकते हैं और घर पर अपने राउटर को काम से कॉन्फ़िगर कर सकते हैं जैसे कि आप अपने होम नेटवर्क के भीतर से कर रहे थे)।

फॉरवर्ड X अनुरोध:

यह एक और आश्चर्यजनक है। आपके दूरस्थ सिस्टम पर चल रहे एक्स सर्वर के साथ या उसके बिना, आप एक एक्स-विंडो प्रोग्राम चला सकते हैं और विंडो आपके स्थानीय स्क्रीन पर दिखाई देगी। बस स्विच -X का उपयोग करें, बस!

चूँकि आपको अपने दूरस्थ सर्वर पर X सर्वर चलाना नहीं आता है, इसलिए आपके सर्वर पर CPU का प्रभाव कम से कम होता है, आपके पास एक TINY Linux सर्वर हो सकता है जो आपके शक्तिशाली गेम पीसी पर चलने वाले विंडोज़ और साइबरविन / एक्स के लिए विशाल ऐप प्रदान करता है।

बेशक VI और EMACS SSH के ऊपर काम करते हैं, लेकिन जब मैं घर पर दौड़ रहा होता हूं, तो कभी-कभी मैं और अधिक चाहता हूं। मैं ग्रहण की एक प्रति शुरू करने के लिए ssh -X का उपयोग करता हूँ! यदि आपका सर्वर आपके लैपटॉप से ​​अधिक शक्तिशाली है, तो आपको अपने लैपटॉप पर वहीं GUI बैठे हैं, लेकिन संकलन आपके सर्वर पर किया जाता है, इसलिए सिस्टम लोड की चिंता न करें।

बैच फ़ाइलों में चलाएँ

(जिसका अर्थ है एक स्थानीय बैच फ़ाइल चलाना जो अन्य प्रणालियों पर "सामान करता है"):

इस एक शांत बनाने के लिए दो चीजें गठबंधन करती हैं। एक आप (अधिक सुरक्षित) एन्क्रिप्शन कुंजी का उपयोग करके पासवर्ड संकेतों को समाप्त कर सकते हैं। दूसरा यह है कि आप SSH CLI पर कमांड निर्दिष्ट कर सकते हैं। मैंने इसे कुछ दिलचस्प तरीकों से इस्तेमाल किया है - जैसे कि जब रिमोट सर्वर पर कोई संकलन विफल होता है, तो मैं इसे अपने कंप्यूटर में एसएसएच करूंगा और एक साउंड फाइल चलाऊंगा)।

याद रखें कि आप रिमोट कमांड से आउटपुट को रीडायरेक्ट कर सकते हैं और इसे अपने स्थानीय बैच फ़ाइल के भीतर उपयोग कर सकते हैं, इसलिए आप अपने सर्वर पर चल रहे कंपाइल को स्थानीय रूप से सिलाई भी कर सकते हैं।

मैक के लिए बनाया गया

सर्वर और क्लाइंट दोनों को मैक और लिनक्स दोनों में बनाया गया है। मैक और उबंटू के मामले में, सर्वर को सक्षम करना सही चेकबॉक्स खोजने के लिए उतना ही सरल है।

एक पीसी इंस्टॉलेशन साइबरविन या साइबरविन / एक्स (साइबर / एक्स) आपको अपने लिनक्स मशीन से अपने विंडोज पीसी पर एक्स-विंडो आउटपुट को फॉरवर्ड करने की अनुमति देगा - यह एक एक्स सर्वर स्थापित करता है)

महत्वपूर्ण सुझाव / विन्यास फाइल

अपने फ़ायरवॉल पर कभी भी पोर्ट 22 का उपयोग न करें। आपको बहुत सारे हैक प्रयास मिलेंगे, यह सिर्फ इसके लायक नहीं है। बस आपके फ़ायरवॉल ने आपके सर्वर के लिए एक अलग पोर्ट अग्रेषित किया है।

व्यापक कॉन्फ़िगरेशन विकल्प हैं जो आपको अपने ssh कमांड को काफी सरल बनाने की अनुमति देते हैं। यहाँ काम पर मेरा एक उदाहरण है:

Host home
    hostname billshome.hopto.org
    Port=12345
    user=bill
    LocalForward=localhost:1025 mac:22

जब मैं "ssh होम" टाइप करता हूं (और कुछ नहीं), तो यह कार्य करता है जैसे कि मैंने टाइप किया था:

ssh -p 12345 bill@billshome.hopto.org

और फिर घर पर मेरे सिस्टम "मैक" के लिए मेरे स्थानीय बंदरगाह 1025 पर आगे। इसका कारण यह है कि मेरी फाइल में एक और प्रविष्टि है:

Host mac
    hostname localhost
    port=1025

ताकि एक बार मैंने "ssh होम" कर लिया और अभी भी खिड़की खुली है, मैं "ssh mac" टाइप कर सकता हूँ और यहाँ काम करने वाला कंप्यूटर वास्तव में अपने स्वयं के पोर्ट 1025 से जुड़ने का प्रयास करेगा जिसे "mac" में भेज दिया गया है: 22 "अन्य कमांड द्वारा, इसलिए यह फ़ायरवॉल के माध्यम से घर पर मेरे मैक से कनेक्ट होगा।

संपादित करें - शांत स्क्रिप्ट!

मैंने एक पुरानी स्क्रिप्ट खोली जिसे मैं सिर्फ प्यार करता हूं - उसे वापस आना पड़ा और यहां किसी के लिए भी पोस्ट करना चाहिए जो रुचि हो सकती है। स्क्रिप्ट को "ओडमिट" कहा जाता है

#!/bin/bash
if [ ! -f ~/.ssh/id_dsa.pub ]
then
    echo 'id_dsa.pub does not exist, creating'
    ssh-keygen -tdsa
fi
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub

यदि आपके घर की निर्देशिका में यह स्क्रिप्ट है और एक होस्ट है जिसे आप (ssh के माध्यम से) कनेक्ट कर सकते हैं, तो आप "./uthMe hostName" टाइप कर सकते हैं।

यदि आवश्यक हो तो यह आपके लिए एक सार्वजनिक / निजी कीपर बनाएगा, फिर यह दूसरी मशीन पर जाएगा और आपकी सार्वजनिक कुंजी को कॉपी करेगा (ssh कमांड आपको पासवर्ड के लिए संकेत देगा ...)

इसके बाद, SSH कमांड को उस रिमोट सिस्टम से जुड़ते समय आपके पासवर्ड के बारे में नहीं पूछना चाहिए, यह सार्वजनिक / निजी कीपर का उपयोग करेगा।

यदि आपका दूरस्थ कंप्यूटर हमेशा सुरक्षित नहीं है, तो संकेत दिए जाने पर आपको "पासफ़्रेज़" सेट करने पर विचार करना चाहिए।

आप अतिरिक्त सुरक्षा के लिए पाठ पासवर्ड (केवल कुंजी) की अनुमति नहीं देने के लिए दूर के हिस्से पर ssh सर्वर को कॉन्फ़िगर करना चाह सकते हैं।


4
+1 बहुत अच्छी और कॉम्पैक्ट पोस्ट
कर्स्टन

2
पोर्ट 22 पर एसएसएच पर एक छोटा सा नोट: बशर्ते आपको एक अच्छा रूट पासवर्ड मिल गया हो और आपके उपयोगकर्ताओं के पास भयानक पासवर्ड न हों, बस फेल 2 एबन (या ऐसा ही कुछ) दरार प्रयासों को जारी रखने के लिए पर्याप्त है। मैंने पाया कि एसएसएच को दूसरे पोर्ट पर रखने के लिए वास्तव में कष्टप्रद है।
डेविड वोलेवर

1
यह कई बार चिड़चिड़ा हो सकता है, लेकिन कनेक्ट की मात्रा सिर्फ डरावनी थी। मुझे पता है कि वे इसके माध्यम से नहीं मिलने वाले हैं, लेकिन यह उस तरह का है जैसे अगर आप किसी के घर तक जा रहे हों और हर मिनट आपके डॉकर्नोब के साथ फ़िदा हो रहे हों - तो बस बेकार है।

आजकल ssh के अधिकांश संस्करणों में आपकी अंतिम कमांड का एक अंतर्निहित संस्करण है, इसे कहा जाता है ssh-copy-id, और यह उतना ही सरल हैssh-copy-id user@someserver
जेम्सहैन

अपनी 'ssh mac' ट्रिक करने का एक और तरीका यह है कि आप अपने .ssh / config फाइल में ProxyCommand निर्देश का उपयोग करें। Host mac ProxyCommand ssh -q home "nc% h% p" यह घर पर netcat (nc) चलाएगा और आपके ssh कनेक्शन को सीधे मैक के माध्यम से रीडायरेक्ट करेगा। मुझे वे चैन आसान लगते हैं (उदाहरण के लिए, यदि आपको 'वर्क
वेबशन

73

मुझे इस्तेमाल करना पसंद है

cd -

पिछली निर्देशिका पर स्विच करने के लिए। बहुत उपयोगी!


6
मैं यह कभी नहीं जानता था! धन्यवाद! एक संबंधित नोट पर, पुश और पॉप एक समान है, डायर के ढेर का निर्माण करके। जब आप गहरी dir संरचना के आसपास नेविगेट कर रहे होते हैं, तो इस तरह की चालें मदद करती हैं।

यह सरासर ज्ञान है।
मैनुएल फेरेरिया

69

मैंने हाल ही में pvकमांड (पाइप दर्शक) की खोज की है जो बिल्ली की तरह है लेकिन हस्तांतरण विवरण के साथ।

इसलिए इसके बजाय

$ gzip -c access.log > access.log.gz

आप उपयोग कर सकते हैं

$ pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=>      ] 15% ETA 0:00:59

इसलिए जब आपका ऑपरेशन खत्म हो जाएगा, तब आपको पता नहीं होगा कि अब आपको पता चल जाएगा!

पीटरिस क्रुमिंस के सौजन्य से


$ gzip -c access.log> access.log.gz क्यों नहीं: $ gzip access.log

ओह, यह काम करता है :) मैंने सिर्फ पीटरिस की वेबसाइट से उदाहरण लिया।
निक डेवेरो

जो देखने में अच्छा लगता है tee(1)
डेनियल सी। सोबरल

अत्यंत उपयोगी उपयोगिता, एक जिसे मैं हमेशा भूल जाता हूं :-(
पैट्रिक

53
sudo !!

रूट के रूप में पिछले कमांड को फिर से चलाएँ।

[साइट http://www.commandlinefu.com पर वर्तमान शीर्ष कमान , इस सवाल की तर्ज पर थीम्ड साइट।]


2
प्रकटीकरण - मैं कमांडलाइनफू.कॉम
कोडिनथेले

9
इसने 16 लोगों को बचाया होगा: xkcd.com/149

46

Ctrl-R दबाएँ और कमांड लिखना शुरू करें (या इसका कोई भी भाग) - यह कमांड हिस्ट्री को खोजता है। Ctrl-R मारना फिर से अगले मैच के लिए कूद जाएगा, वर्तमान में प्रदर्शित कमांड को निष्पादित करेगा, और राइट-एरो (कम से कम) आपको पहले इसे संपादित करने देगा।

$ (reverse-i-search)`svn': svn status

मैंने इसे सीखने से पहले अपने मुख्य OS के रूप में 7 वर्षों के लिए लिनक्स का उपयोग किया था, लेकिन अब जब मुझे पता है कि यह काफी उपयोगी है।


धन्यवाद। मैं रिवर्स खोज का उपयोग कर रहा हूं, लेकिन यह पता लगाने में सक्षम नहीं है कि अगले मैच में कैसे कूदना है।
एडम

Ctrl-S अगले मैच में कूदता है। आपको stty -ixonXON / XOFF फ्लो-कंट्रोल अर्थ को बंद करने के लिए पहले करना होगा (यह भी Ctrl-Q को उपलब्ध कराता है, डिफ़ॉल्ट रूप से इसे Ctrl-V के उद्धरण के समान ही मैप किया जाता है, लेकिन आप इसे कुछ और में बदल सकते हैं )। देखें man sttyऔर man readlineअधिक informations के लिए। sttyआदेश अपने को जोड़ा जा सकता है~/.bashrc
डेनिस विलियमसन

45

कमांड लाइन एक मजेदार चीज है। मुझे लगता है कि आप केवल अपने दम पर इतना कुछ सीख सकते हैं और बाकी आप किसी कमांड लाइन का उपयोग करके किसी और को देखकर दुर्घटना से सीख सकते हैं।

मैं हाथ से निर्देशिका नामों में श्रमसाध्य टाइपिंग के लिए शेल का उपयोग कर रहा था। एक दिन मैं एक दोस्त को एक सिस्टम पर गड़बड़ करता देख रहा था और वह टैब की चाबी मारता रहा। मैंने पूछा "आप टैब क्यों मार रहे हैं?"। उत्तर: यह निर्देशिका या फ़ाइल नाम को पूरा करने की कोशिश करता है। किसने अनुमान लगाया होगा - टैब पूरा! फ़ाइल या निर्देशिका, हिट टैब का एक सा टाइप करें, और यह आपके द्वारा टाइप किए गए को समाप्त करने का प्रयास करेगा (व्यवहार हालांकि किस शेल पर निर्भर करता है)।

एक दिन, दोस्त ने मुझे कमांड लाइन पर देखा था और मुझे कुछ इस तरह देखा:

coryking@cory ~/trunk/mozi $ pushd /etc
/etc ~/trunk/mozi
coryking@cory /etc $ popd
~/trunk/mozi
coryking@cory ~/trunk/mozi $

किसने अनुमान लगाया होगा !? वह कभी भी popd/ के बारे में नहीं जानता था pushd। लगता है कि हम भी हैं ...


1
मेरे लिए टैब पूरा करना कुछ "स्पष्ट" जैसा लगता है, बहुत ही बुनियादी, लेकिन मैं कभी भी पोप / पुशड के बारे में नहीं जानता था। वास्तव में मजेदार है। :)
जोनीक

3
यह उत्तर भी आदेशों, फ़ाइलों और निर्देशिकाओं की तुलना में बहुत अधिक टैब-पूर्ण करने में सक्षम होने के लिए देखें: stackoverflow.com/questions/603696//603919#603919
जोनीक

1
सच बात है। मैंने किसी को देखकर बैश के बैकवर्ड-हिस्ट्री-सर्च (ctrl-r) के बारे में सीखा। मुझे बाद में पता चला कि यह एक रीडलाइन फीचर था और अन्य कार्यक्रमों में भी वही काम किया गया जिसमें रीडलाइन (mysql, gdb, python -i, clisp etc) शामिल थे।
सिगाजिस

2
आप वर्षों तक "शेल" का उपयोग कैसे कर सकते हैं और टैब पूरा होने के बारे में नहीं जानते हैं?
राजतिलक

जब पुश / पॉप से ​​निपटने के लिए कमांड डायर का उल्लेख करना न भूलें । यह दिखाता है कि पुशड / पॉपड स्टैक पर क्या है।
स्लम

41

विम जानें।

यह (यकीनन) सर्वश्रेष्ठ संपादक है, लेकिन सबसे निश्चित रूप से सबसे अच्छा संपादक एक नंगे लिनक्स सर्वर पर उपलब्ध है।


1
gvim खिड़कियों पर भी सबसे अच्छा फ़ाइल ब्राउज़र है;)

यह भी बेहद उपयोगी है क्योंकि एक बार जब आप विम को जान लेते हैं, तो आप सबसे अधिक गोले को वी-मोड में डाल सकते हैं, और नेविगेशन बेहद आसान और तेज हो जाता है
पैट्रिक

38

आपके द्वारा लॉग आउट करने के बाद भी किसी प्रोग्राम को चालू रखना उपयोगी होता है। मैंने कुछ समाधान देखे हैं जो उस उद्देश्य के लिए नूप या स्क्रीन का उपयोग करते हैं। मुझे पता है सबसे सरल:

$ your_command_here & disown

आप एक रनिंग प्रोग्राम भी अलग कर सकते हैं:

$ your_command_here
# Press <Control-Z> to stop the program and bring it to background:
$ bg
$ disown

6
स्क्रीन का उपयोग करना बहुत अच्छा है क्योंकि आप बाद में कहीं से भी उस ऐप को "पुनः कनेक्ट" कर सकते हैं।
२२:०२ पर प्रेस्टोमेशन

+1, मैंने अव्यवस्था के बारे में नहीं सुना था।
user18911

ditto re disown, हालाँकि मैं पहले से ही स्क्रीन के साथ ऐसा ही करता हूँ
एंडी

38

जब मैं यह सुनिश्चित करना चाहता हूं कि मैं वास्तविक आदेश का उपयोग करता हूं और उपनाम नहीं, मैं एक अग्रणी बैकस्लैश का उपयोग करता हूं:

\rm -rf ~/tmp

क्या यह "कमांड rm -rf ~ / tmp" के समान है?
मैक्सिम वीक्स्लर

मैं "कमांड" नहीं जानता था, लेकिन यह वही दिखता है।
मौविसील

4
ठीक है, हाँ जब तक कि "कमांड" उर्फ ​​नहीं है जिस स्थिति में आपको \ कमांड rm -rf ~ / tmp का उपयोग करना होगा उस स्थिति में \ rm -rf ~ / tmp बेहतर है
जमाल

@presario और आपको लगता है कि "/" के लिए एक उपनाम बनाना संभव होगा? मुझे क्या अफ़सोस हो सकता है कि मैं टिप्पणी नहीं कर सकता हूं :)

इसी तरह की कमांड " builtin" भी देखें ।
डेनिस विलियमसन

38

यह टिप आपके सीएलआई को अधिक आरामदायक बना देगा (कम से कम यह मेरे लिए बनाता है):

निम्नलिखित सामग्री के साथ ~ / .inputrc फ़ाइल बनाएं:

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

रीलोड बैश (उदाहरण के लिए "एग्जिट बैश" टाइप करके)। जब आप एक कमांड का उपसर्ग टाइप करते हैं और ऊपर तीर दबाते हैं तो आप अपने उपसर्ग के साथ शुरू होने वाले कमांड ब्राउज़ करेंगे, उदाहरण के लिए यदि आपने ssh टाइप किया है तो यह आपके पूर्व कनेक्शन को दूरस्थ गोले के साथ दिखाएगा। यदि आपका संकेत खाली है तो ऊपर तीर इतिहास को सामान्य तरीके से ब्राउज़ करेगा।


3
आमतौर पर मैं तीर को रिबाउंड करने के बजाय उन लोगों को \ e [5 ~ और \ e [6 ~ (उर्फ पेजअप और पेजडाउन) से बांधता हूं, लेकिन यह Ctrl-R / Ctrl-S :) की तुलना में अधिक सुविधाजनक है
ephemient

+1। मैं cmd.exe की नकल करने के लिए F8 और Shift-F8 के लिए बाध्य हूं, लेकिन यही सिद्धांत लागू होता है।
user18911

4
+1 के लिएexec bash
डेनिस विलियमसन

यह पढ़ने के लिए भी शैक्षिक है man readlineऔर इसे डिफ़ॉल्ट शॉर्टकट याद रखना है
SaveTheRbtz

आप bind -f ~/.inputrcएक नया बैश शुरू करने और अपने वर्तमान वातावरण को मिटाए बिना इनपुट आर्क को फिर से लोड करने के लिए भी कर सकते हैं ।
पैट्रिक

36

का प्रयोग करें &&के बजाय ;जब कई आदेशों एक ही बार में क्रियान्वित। यह तब होता है जब कोई त्रुटि होती है और अन्य कमांड निष्पादित नहीं करता है।

शास्त्रीय उदाहरण:

./configure && make && make install

1
यह प्रथा इतनी कम आंकी गई है! & स्क्रिप्ट के साथ शेल स्क्रिप्ट की प्रत्येक पंक्ति को समाप्त करने के लिए मानक अभ्यास होना चाहिए और अंतिम कमांड के रूप में "सही" का उपयोग करना चाहिए।
user18911

3
क्या मजेदार बात है कि मुझे ';' के बारे में पता नहीं था कमांड से पहले - मेरे पास '&&' का उपयोग किया गया था।
निक क्लाऊर

4
आप "#! / Bin / sh -e" के साथ शेल स्क्रिप्ट शुरू कर सकते हैं। यह बंद हो जाता है अगर कोई रेखा विफल हो जाती है।
स्ट्रीबिका

3
आप "और" खंड के लिए एक डबल पाइप का उपयोग कर सकते हैं:dosomething && echo "success" || echo "teh fail"
डेनिस विलियमसन

2
प्लैनेट डेबियन पर हाल ही में एक नोट आया था कि शेबंग लाइन पर -ई का उपयोग करना बुरा है। इसके बजाय स्क्रिप्ट के शरीर में सेट-ई का उपयोग करें। इस तरह से स्क्रिप्ट अलग तरह से काम नहीं करता है अगर कोई श $ फेन का उपयोग करने के लिए दौड़ता है।
11

32

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

for item in items; do echo something-risky; done

इस तरह से मुझे इसे चलाने के लिए प्रतिबद्ध होने से पहले 'कुछ-जोखिम भरा' देखने को मिलता है। जब आपकी जोखिम भरी कमांड में चर विस्तार और ग्लब्स शामिल होते हैं तो मदद करता है। और 'सेट -x' बैश स्क्रिप्ट लिखते समय बहुत उपयोगी है।

'सेट -x' डिबगिंग सक्षम करता है। बैश डिबगिंग के बारे में जानकारी के लिए http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html देखें ।


3
मैं यह भी करता हूं, बहुत आसान चाल!
user18911

1
+1 यह एक जीवन रक्षक हो सकता है! या डेटा सेवर ...
डेविड वनिल

31

आवश्यकता

आपको 2 सर्वरों के बीच अधिकतम बैंडविड्थ का परीक्षण करने की आवश्यकता है।


उपाय

SERVER1 पर :

nc -u -l 54321 > /dev/null

SERVER2 पर :

dd if=/dev/zero bs=1MB | nc -u SERVER1 54321 &
pid=$(pidof dd)
while (( 1 )); do kill -USR1 $pid; sleep 2; done

आपको आउटपुट दिखाई देगा जैसे:

182682000000 bytes (183 GB) copied, 1555.74 seconds, 117 MB/s
182920+0 records in
182919+0 records out

117 एमबी / एस यहां दिलचस्प कारक है, जो वास्तविक नेटवर्क ट्रांसफर बैंडविड्थ को दर्शाता है।

स्पष्टीकरण :

जैसे जैसे पैकेट नेटवर्क पर बहने लगेगा आप SERVER2 पर बैंडविड्थ के आंकड़े देख पाएंगे, जो कि 2 सर्वरों के बीच वास्तविक अधिकतम संभव बैंडविड्थ का एक बहुत अच्छा अनुमान है।

यूडीपी द्वारा नकल (टीसीपी ओवरहेड को रोकने के लिए)।

पर कॉपी से SERVER1 पर स्मृति (/ dev / शून्य) को Server2 पर स्मृति (/ dev / नल), इस प्रकार टोंटी बनने से रोकने डिस्क मैं / हे।


4
सुनिश्चित करें कि ssh, हालांकि, .ssh / config में संपीड़न का उपयोग करने के लिए कॉन्फ़िगर नहीं किया गया है। अन्यथा आप वास्तव में बहुत अच्छे नंबर प्राप्त करेंगे जो सच्चाई से बहुत दूर हैं;;
जोआचिम सॉर

ज़ोर से हँसना हाँ। और SSH आपके CPU को एन्क्रिप्ट और डिक्रिप्ट करने वाला है, जिससे नंबर भी बंद हो जाएंगे।

इसके बजाय netcat का उपयोग करें
bendin

Netcat के लिए +1। SSH का ओवरहेड आपके नंबरों को तिरछा कर देगा
मिकैग

@Saua, @Daniel Von Fange और @bendin द्वारा सुझावों में संशोधन के लिए। आपके सुझाव के लिए धन्यवाद दोस्तों।
मैक्सिम वीक्स्लर

23

रंग निर्देशिका संरचना को देखना आसान है।

alias ls="ls --color=tty"

संपादित करें

alias ls="ls --color=auto"

5
मैं पसंद करता हूं - रंग = ऑटो क्योंकि यह बकवास नियंत्रण वर्ण नहीं भेजता है यदि फ़ाइल को रीडायरेक्ट किया जाता है तो आप मेल खाने वाले पैटर्न को हाइलाइट करने के लिए उर्फ ​​grep = "grep --color = auto" भी कर सकते हैं।

+1 के लिए - रंग = ऑटो; किसी को उस के साथ जवाब में वृद्धि कर सकता है?
जोनिक

मुझे लगता है कि टैटी यहां ऑटो जैसा ही काम करता है।
जोशसन 21

रंग प्रतिबिंबित करने के लिए अद्यतन किया गया = ऑटो
सुरोट

अजीब तरह से, रंग मेरे लिए चीजों को बहुत कम पठनीय बनाता है। उदाहरण के लिए, पीले-पर-सफेद, एक अच्छा रंग विकल्प नहीं है।

20

लॉग देखने के संबंध में कुछ छोटे संकेत:

  1. आप पूंछ को चालू करने के बाद लॉग देखने के लिए -F का उपयोग कर सकते हैं (उदाहरण के लिए log4j)।
  2. आप कम उपयोग कर सकते हैं: कम खोलें, पूंछ के व्यवहार का अनुकरण करने के लिए SHIFT + F पर क्लिक करें । इसके अलावा उपयोगी संयोजन लाइन रैपिंग को अक्षम करने के लिए -S है। कम आपको लॉग में खोज करने में सक्षम करेगा।

1
और tail -fआप एक साथ कई लॉग देख सकते हैं! जैसे:tail -f log1.txt -f log2.txt
स्टु थॉम्पसन

@StuThompson: धन्यवाद। पता नहीं था। इसके अतिरिक्त, आप vanheusden.com/multitail
Maxim Veksler

20

मैंने एक दोस्त से एक तरकीब सीखी है जो एक फ़ाइल के विस्तार को आसानी से बदलने के लिए बहुत पहले है:

mv my_filename.{old,new}

शेल विस्तार इसका विस्तार करेगा:

mv my_filename.old my_filename.new

इसका उपयोग अन्य तरीकों से फ़ाइल का नाम बदलने के लिए भी किया जा सकता है, जैसे कि इसमें कुछ जोड़ना:

mv my_{,cool_}filename

6
बस एक ही आदेश में किसी वाइल्डकार्ड या अन्य पैटर्न अभिव्यक्तियों को नहीं रखना सुनिश्चित करें, या ग्लोब केवल 2 से अधिक तर्कों का विस्तार कर सकता है! mv *। {पुराना, नया} वास्तव में आश्चर्यजनक परिणाम उत्पन्न करने की संभावना है।

हाँ, सहमत - यह एक महत्वपूर्ण चेतावनी है :)

2
उदाहरण के लिए, आप टाइप भी कर सकते हैं, ls -l /bin/cफिर Alt-Shift- {दबाएं और यह आपके लिए कुछ इस तरह पूरा करेगा ls -l /bin/c{at,h{grp,mod,own,vt},p{,io},sh}
डेनिस विलियमसन

19

संपीड़ित अभिलेखागार निकालने के लिए "टार xf" का उपयोग करें। Bzip2 के लिए j और gzip के लिए z आवश्यक नहीं हैं, क्योंकि टार आपके संग्रह के फ़ाइल प्रकार का पता लगाएगा। तर्कों से पहले न तो '-' संकेत है। आप बहुत समय (एक सहस्राब्दी ;-) पर) बचाएंगे।

बेहतर अभी तक किसी भी अनावश्यक तर्कों के बिना किसी भी आदेश के साथ किसी भी संग्रह को निकालने के लिए अनफू का उपयोग करें ।


हाँ, मेरे पास alias ut="tar xf"- संग्रह को और भी आसान बना देता है।
डेविड वोलेवर

यदि आप उनका उपयोग करते हैं, तो यह कुछ आरएचईएल वितरण पर विफल रहता है।
pvsnp

नए टार में xz (7zip आधारित) अभिलेखागार को संपीड़ित करने के लिए "J" स्विच है
ह्यूबर्ट करियो सेप

: या यूएनपी स्थापित packages.debian.org/sid/unp । मुझे लगता है कि यह अनफॉलो के समान है।

17

बैश-पूरा पैकेज स्थापित करें। इसमें शेल के लिए कई पूर्वनिर्धारित पूर्ण नियम हैं। यदि आप डिस्ट्रो आपके लिए ऐसा नहीं करते हैं, तो इसे "स्रोत / etc / bash_completion" लिखकर सक्षम करें। फिर, उदाहरण के लिए जब भी आप kpdf के बाद पूरा करते हैं तो आपको केवल निर्देशिकाओं और PDF फ़ाइलों की सूची दिखाई देगी। यह scp ssh के बाद दूरस्थ फ़ाइलों को पूरा करने के लिए उतना ही स्मार्ट है: // सर्वर / XXX (यदि आपने पासवर्ड रहित लॉगिन सक्षम किया है)।


17

मैं लगातार इन लोगों का उपयोग करता हूं

ALT-। (ईएससी +। कुछ टर्मिनलों में) अंतिम प्रयुक्त तर्क (सुपर-उपयोगी) प्रतियां

CTRL-W शब्द हटाता है

CTRL-L क्लियर टर्मिनल (जैसे स्पष्ट कमांड लेकिन तेज)

ALT-B (कुछ टर्मिनलों में ESC + B) एक शब्द को पीछे ले जाते हैं

ALT-F (कुछ टर्मिनलों में ESC + F) एक शब्द को आगे बढ़ाते हैं

CTRL-E ईओएल पर जाएं

CTRL-A BOL पर जाएं

इतिहास में CTRL-R खोज


1
शॉर्टकट साझा करने के लिए धन्यवाद! मुझे मैक में काम करने के लिए ALT-B / F नहीं मिला।
लेओ लेपोल्ड हर्ट्ज़ '

बहुत बढ़िया आदमी ....
दाउद अहमद खोखर

16

बाश में, मैं उपयोग करता हूं ! $ बहुत। यह अंतिम कमांड के अंतिम तर्क को दोहराता है:

ls /really/long/command/argument/that/you/dont/want/to/repeat.txt
vi !$

यह ls चलाएगा, फिर यदि आप इसे संपादित करना चाहते हैं, तो आपको इसे दोबारा नहीं बनाना है, बस उपयोग करें! $। यह लंबे पथ / फ़ाइल नामों के लिए वास्तव में उपयोगी है। इसके अलावा, * पिछले सभी कमांड के तर्कों को दोहराता है। मैं उतना उपयोग नहीं करता, लेकिन यह उपयोगी लगता है।

मुझे पता है कि उनका उल्लेख किया गया है, लेकिन मैं विम, स्क्रीन और सीडी का उपयोग करता हूं - बहुत कुछ।

मैं भूल गया noclobber:

set -o noclobber

से आदमी पार्टी :

यदि सेट किया गया है, तो bash किसी मौजूदा फ़ाइल को>,> &, और <> पुनर्निर्देशन ऑपरेटरों के साथ अधिलेखित नहीं करता है। पुनर्निर्देशन ऑपरेटर> का उपयोग करके आउटपुट फ़ाइलें बनाते समय इसे ओवरराइड किया जा सकता है के बजाय>।


6
मैं $ का उपयोग नहीं करता!, क्योंकि यह वास्तव में मोटी उंगली के लिए आसान है, लेकिन मुझे मारना पसंद है ^ [-। (भागने की अवधि) समान प्रभाव प्राप्त करने के लिए।
डेविड वोलेवर सेप

7
अपने कीबोर्ड इत्यादि के आधार पर आप भी कर सकते हैं Alt-.
डेनिस विलियमसन

ओएमजी, छोटे संभोग, टी डेनिस!
आर्टिफ़ेक्स मार्क्स

14

बैश से zsh पर स्विच करें , और अपनी उत्पादकता में सुधार देखें:

  • वास्तव में बुद्धिमान, पटकथा टैब पूरा करना। यह न केवल कमांड लाइनों को पूरा करता है, बल्कि सभी विकल्प, मैन पेजों के नाम, पैकेज के नाम (apt-get / उभरते आदि), और आपके पास क्या है। और पूरा होने के दौरान विकल्पों की एक सहायक व्याख्या प्रदान करता है। यह सब कमांड जारी किए जाने के बाद किसी भी स्क्रॉलबैक स्पेस का उपयोग किए बिना।
  • वाइल्डकार्ड्स का टैब पूरा होना; बिल्ली लिखें * .Txt, प्रेस टैब, और अभिव्यक्ति से मेल खाने वाली किसी भी फाइल के बीच चयन करें।
  • निर्देशिकाओं को उनके नाम लिखकर स्विच करें।
  • कई लाइन संपादक मोड। यदि आप चाहें तो vi या emacs जैसा व्यवहार कर सकते हैं।
  • अनुकूलन कुंजी बाँधने के लिए जो आप चाहते हैं।
  • स्क्रीन के दाईं ओर शीघ्र जानकारी डालने की क्षमता सहित, थमने योग्य संकेत और एक लंबी कमांड टाइप करते समय इसे ऑटो-छिपाएं

Google आपको कई और लाभ बताएगा।


1
आपको अधिक लिंक देना चाहिए। दिलचस्प लगता है, लेकिन इसे मुझे बेच दो यार!

क्या उन्होंने यूनिकोड समर्थन को शामिल करने का प्रबंधन किया था?

@Cory ठीक है, मैं बस साहित्यिक चोरी नहीं करना चाहता था और यह मेरा खुद को लिखने के लिए बेमानी लगा जब दूसरों द्वारा पहले से ही इतना अच्छा सामान लिखा गया है :)

@kyku हां, शायद एक साल पहले से ही उचित यूनिकोड समर्थन है।

सुंदर दिखाई देता है। मैं इसे एक शॉट देता हूँ!

13

पुराना स्कूल, एक डायरेक्टरी ट्री को एक स्थान से दूसरे स्थान पर ले जाना, सहानुभूति, अनुमति और सभी अच्छे सामानों को संरक्षित करना:

tar cBf - . | (cd /destination; tar xvBpf -)

या नेटवर्क के पार

tar cBf - . | rsh foo.com "cd /destination; tar xvBpf -)

नए स्कूल:

rsync -urltv . /destination

या नेटवर्क के पार

rsync -urltv -e ssh . foo.com:/destination

tar xvBpf - -C /destination== (cd /destination; tar xvBpf -) थोड़ा कम टाइपिंग, और ssh पर प्रयोग करने में आसान।
21

1
-a '-rlptgoD' के समान है - जो कि पुनरावृत्ति है, सहानुभूति को सिम्फ़लिंक के रूप में कॉपी करें, परमिट को संरक्षित करें, टाइमस्टैम्प को संरक्षित करें, समूहों को संरक्षित करें, मालिकों को संरक्षित करें, डिवाइस फ़ाइलों और विशेष फ़ाइलों को डिवाइस और विशेष फ़ाइलों के रूप में कॉपी करें। इसके अलावा, मशीनों के बीच, -z (भेजने से पहले फ़ाइलों को संपीड़ित करना, प्राप्त करने के बाद डीकंप्रेस) उपयोगी है। rsync -avz [-e ssh] आपका दोस्त है :-)
dr-jan

क्या -z ssh पर कोई अच्छा करता है? मुझे ऐसा नहीं लगता।
पॉल टॉम्बलिन

rsync -avhएक मशीन पर सबसे अच्छा है - यह hसुनिश्चित करता है कि प्रत्येक लिंक को एक अलग फ़ाइल में बदले बिना हार्ड लिंक को सही ढंग से स्थानांतरित किया जाता है, हालांकि यदि आपके पास बड़ी संख्या में फाइलें हैं तो यह बहुत अधिक मेमोरी का उपयोग कर सकता है। rsync -avzh . foo.com/destinationनेटवर्क के लिए बराबर है, और आमतौर पर आप की जरूरत नहीं है के -e sshरूप में rsync ssh का उपयोग करने के लिए पता चल जाएगा।
रिचवेल 13

दरअसल, इन दिनों मैं इस्तेमाल कर रहा हूंrsync -aSHuvrx --delete / --link-dest=/backup/$PREV /backup/$HOUR
पॉल टॉम्बलिन

13

आवश्यकता : आपके पास एक निर्देशिका है जिसमें उन फ़ाइलों की बड़ी सूची है जिन्हें आप हटाना चाहते हैं। rm -r फेल हो जाएगा!

उदाहरण

find /var/spool/mqueue/ | wc -l
191545
rm -f /var/spool/mqueue/*
-bash: /bin/rm: Argument list too long

समाधान :

find /var/spool/mqueue/ -xdev -exec command rm -f '{}' +

स्पष्टीकरण :

संपादित करें: @ephemient टिप्पणी के बाद स्पष्टीकरण को ठीक करना।

खोज अधिकतम अनुमत तर्कों द्वारा आरएम को तर्क की आपूर्ति करेगा। यह आरएम को बैचों में फ़ाइलों को हटाने की अनुमति देता है जो कि सबसे तेज तकनीक है जिसे मैं खुद को खोजने के -delete ऑपरेशन का उपयोग किए बिना जानता हूं। इसके बराबर है

find /var/spool/mqueue -xdev -print0 | xargs -0 rm -f

अगर आपको findसहायता नहीं मिलती है तो आप उपयोगी हो सकते हैं -exec ... +


5
इसके \;साथ बदलें +: फिर findक्या करेंगे xargsजो डिफ़ॉल्ट रूप से होता है, जो कि यथासंभव तर्क वितर्क कर रहा है (बिना तर्क सूची सीमा के)। या बस का उपयोग -deleteकी intead -exec rm(जीएनयू Findutils दोनों के लिए आवश्यक)
ephemient

अच्छी टिप - मुझे '+' का पता नहीं था।
codeinthehole

@ टिप्पणी: अच्छी टिप्पणी, मैंने पोस्ट संपादित की है।
मैक्सिम वीक्स्लर

2
दिलचस्प है, मैंने '+' के बारे में नहीं सुना था।
user18911

या बस find ... -delete, अगर आपकी खोज इतनी संपन्न है।
डेविड वोलेवर

11

मैं इस दो युक्तियों का इतनी बार उपयोग करता हूं कि मुझे लगा कि इसे साझा करना एक अच्छा विचार होगा:

!foo

"फू" से शुरू होने वाली इतिहास फ़ाइल में अंतिम कमांड लॉन्च करेगा ( !gccउदाहरण के लिए , संकलन के समय मैं अक्सर इसका उपयोग करता हूं ।)

दूसरा एक कीबोर्ड शॉर्टकट है (रिटर्न के बजाय Ctrl + O) यह कमांड निष्पादित करेगा और इतिहास फ़ाइल में अगला कमांड प्रदर्शित करेगा। उदाहरण के लिए जब मैं किसी फाइल को कंपाइल और टेस्ट करता हूं तो मैं हमेशा 3 या 4 कमांड करता हूं, टेस्ट की dir में cd बनाता हूं, टेस्ट रन करता हूं, makefile की dir में cd करता हूं। Ctrl + O का उपयोग करने से यह कार्य बहुत आसान हो जाता है :)

उममीद है कि इससे मदद मिलेगी!


1
Ctrl-O के लिए +1
डेनिस विलियमसन

10

उपलब्ध नहीं हो सकता है कि फैंसी चित्रमय इंटरफेस की मदद के बिना लिनक्स में तोड़फोड़ का उपयोग कैसे करें।

svn co <repo-url> . # Checks out project into current folder

svn update # Get latest changes from server

svn status # Shows what files have changed locally

svn add <path/filename> # Add some file to the repo

svn commit # Commit your changes to the repo

यह लिनक्स के बहुत सारे डेवलपर्स को पकड़ता है, अजीब तरह से।


rapidsvn लिनक्स के तहत svn के लिए एक अच्छा सा गुई है।

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

अब तक मेरा पसंदीदा NautilusSVN है (TortoiseSVN की तरह): code.google.com/p/nautilussvn
user7655

10

अधिकांश अनदेखी पुराने स्कूल के आदेश: find

कल मैंने एक सकल अनुमति बग की मरम्मत की:

for u in nr dias simonpj; do
   sudo -u $u find . -type d -exec chmod g+s '{}' ';'
done

हाँ! खोज आदेश जानें। एक फ़ाइल प्रसंस्करण juggernaut के लिए xargs, sed और awk मिक्स के साथ मिलाएं!
जोनाथन वाटनी

माना! हालाँकि मुझे कभी भी सेड और जाग के बारे में कुछ भी याद नहीं है - मुझे हमेशा इसे त्यागने की ज़रूरत है! मुझे वास्तव में एक चीटशीट का प्रिंट आउट लेना चाहिए।

हां, लेकिन असामान्य वर्णों (जैसे बैकस्लैश) वाले फ़ाइलनामों से जुड़ी मुश्किल समस्याओं से बचने के लिए xprint के लिए -00 और -0 विकल्प का उपयोग करना न भूलें।
user18911

हाँ, शायद आधे समय मैं का उपयोग लगता है यह बेवकूफ अनुमति चीजों को ठीक करने का तरीका बताया chmod 644 $(find . -type f),chmod 755 $(find . -type d)
डेविड Wolever

1
उन फ़ाइलों का पता लगाने के -permविकल्प को मत भूलना findजिनके पास अनुमतियाँ एक निश्चित तरीके से सेट हैं।
डेनिस विलियमसन

8

जैसे गोले के लिए bashऔर ksh, आप अपने पाठ संपादक की तरह कमांड कमांड को नेविगेशन कमांड पर प्रतिक्रिया दे सकते हैं:

set -o emacs

या

set -o vi

आपको अपने इतिहास को खोजने और कमांड लाइन के बारे में उस तरह से स्थानांतरित करने की अनुमति देगा जिस तरह से आपको टेक्स्ट फ़ाइलों में करने के लिए उपयोग किया जाता है (जैसे vi मोड में, ESCफिर दबाकर टाइप /stringकरना "स्ट्रिंग" के लिए आपके पिछले आदेशों की खोज करेगा - आप उपयोग कर सकते हैं nऔर Nस्थानांतरित कर सकते हैं मैचों के बीच)


मामूली टाइपो: "टेस्ट एडिटर" को "टेक्स्ट एडिटर" होना चाहिए

8

grep मेरा दोस्त है गंभीरता से।

उन .rbफ़ाइलों की सूची बनाएं जिनमें पाठ है class foo:

grep -l "class foo" .rb

उन .rbफ़ाइलों की सूची बनाएं जिनमें पाठ नहीं है class foo:

grep -L "class foo" *.rb

सूची .rbफ़ाइलों को नहीं है foo या बार होते हैं (आप -e के साथ किसी भी regexp का उपयोग कर सकते हैं, लेकिन आप ऑपरेटरों से बचने के लिए की जरूरत है):

grep -L -e "foo\|bar" *.rb

आपको "ack" नामक उपकरण में रुचि हो सकती है, जो कि grep जैसा ही काम करता है, लेकिन पुनरावर्ती केवल स्रोत फ़ाइलों को स्कैन करेगा। इसे आजमाएँ (यह मुफ़्त है): betterthangrep.com

8

शेल प्रतिस्थापन के साथ किया जाता है ^:

/home/eugene $ ls foo.txt
foo.txt
/home/eugene $ ^ls^rm
rm foo.txt
/home/eugene $ ls foo.txt
ls: cannot access foo.txt: No such file or directory

2
वास्तव में मैं पसंद करता हूँ "!!: gs / foo / bar" क्योंकि मुझे अक्सर लगता है कि पिछले कमांड में foo का एक से अधिक बार उल्लेख किया गया है और मैं एक वैश्विक प्रतिस्थापन (उदाहरण के लिए "mv foo.txt foo.bak") चाहता हूं।
user18911
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.