1
0
mirror of https://github.com/jlevy/the-art-of-command-line.git synced 2024-12-12 10:45:00 +02:00

The-Art-Of-Command-line Translation in Nepali

This commit is contained in:
sudipnext 2022-10-01 20:13:53 +05:45
parent 38725ee7e4
commit 7295ec5ebd

618
README-np.md Normal file
View File

@ -0,0 +1,618 @@
🌍
*[Čeština](README-cs.md) ∙ [Deutsch](README-de.md) ∙ [Ελληνικά](README-el.md) ∙ [English](README.md) ∙ [Español](README-es.md) ∙ [Français](README-fr.md) ∙ [Indonesia](README-id.md) ∙ [Italiano](README-it.md) ∙ [日本語](README-ja.md) ∙ [한국어](README-ko.md) ∙ [polski](README-pl.md) ∙ [Português](README-pt.md) ∙ [Română](README-ro.md) ∙ [Русский](README-ru.md) ∙ [Slovenščina](README-sl.md) ∙ [Українська](README-uk.md) ∙ [简体中文](README-zh.md) ∙ [繁體中文](README-zh-Hant.md)*
# कमाण्ड लाइन को कला
*नोट: म यसलाई परिमार्जन गर्ने योजनामा ​​छु र यसलाई थप व्यापक गाइडमा विस्तार गर्न मद्दत गर्न नयाँ सह-लेखक खोज्दैछु। जबकि यो धेरै लोकप्रिय छ, यो फराकिलो र अलि गहिरो हुन सक्छ। यदि तपाईं लेख्न चाहनुहुन्छ र यस सामग्रीमा विशेषज्ञ हुनको नजिक हुनुहुन्छ र मद्दत गर्न विचार गर्न इच्छुक हुनुहुन्छ भने, कृपया मलाई josh (0x40) holloway.com मा एक नोट छोड्नुहोस्। –[jlevy](https://github.com/jlevy), [Holloway](https://www.holloway.com). धन्यवाद!*
- [मेटा] (#मेटा)
- [आधारभूत](#आधारभूत)
- [दैनिक प्रयोग] (#दैनिक प्रयोग)
- [फाइल र डाटा प्रशोधन गर्दै](#प्रोसेसिङ-फाइल-र-डेटा)
- [प्रणाली डिबगिङ] (#system-debugging)
- [वन-लाइनर] (#वन-लाइनर)
- [अस्पष्ट तर उपयोगी] (#अस्पष्ट-तर-उपयोगी)
- [macOS मात्र] (#macos-मात्र)
- [Windows मात्र] (#windows-only)
- [अधिक स्रोतहरू] (#अधिक-संसाधनहरू)
- [अस्वीकरण] (#अस्वीकरण)
![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png)
कमाण्ड लाइनमा प्रवाह एक सीप हो जुन प्राय: बेवास्ता गरिन्छ वा रहस्यमय मानिन्छ, तर यसले स्पष्ट र सूक्ष्म दुवै तरिकामा इन्जिनियरको रूपमा तपाईंको लचिलोपन र उत्पादकता सुधार गर्दछ। यो कमाण्ड-लाइन प्रयोग गर्ने नोटहरू र सुझावहरूको चयन हो जुन हामीले लिनक्समा काम गर्दा उपयोगी पाएका छौं। केही सुझावहरू प्राथमिक छन्, र केही एकदम विशिष्ट, परिष्कृत, वा अस्पष्ट छन्। यो पृष्ठ लामो छैन, तर यदि तपाइँ यहाँ सबै वस्तुहरू प्रयोग गर्न र सम्झन सक्नुहुन्छ भने, तपाइँलाई धेरै थाहा छ।
यो काम [धेरै लेखक र अनुवादकहरू](AUTHORS.md) को परिणाम हो।
यस मध्ये केही
[मूल रूपमा](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands)
[देखायो](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)
मा [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know),
तर यो पछि GitHub मा सारियो, जहाँ मूल लेखक भन्दा धेरै प्रतिभाशाली व्यक्तिहरूले धेरै सुधारहरू गरेका छन्।
[**कृपया एउटा प्रश्न पेस गर्नुहोस्**](https://airtable.com/shrzMhx00YiIVAWJg) यदि तपाईंसँग कमाण्ड लाइनसँग सम्बन्धित प्रश्न छ भने। [**कृपया योगदान गर्नुहोस्**](/CONTRIBUTING.md) यदि तपाईंले त्रुटि वा अझ राम्रो हुन सक्ने केही देख्नुभयो भने!
## मेटा
दायरा:
- यो गाईड दुबै शुरुआती र अनुभवी प्रयोगकर्ताहरूको लागि हो। लक्ष्यहरू हुन् * चौडाई * (सबै महत्त्वपूर्ण), * विशिष्टता * (सबैभन्दा सामान्य केसको ठोस उदाहरणहरू दिनुहोस्), र * संक्षिप्तता * (अत्यावश्यक नभएका चीजहरू वेवास्ता गर्नुहोस् वा तपाईंले सजिलै अन्यत्र हेर्न सक्नुहुन्छ)। प्रत्येक टिप केहि अवस्थामा आवश्यक छ वा महत्त्वपूर्ण रूपमा विकल्पहरूमा समय बचत गर्दछ।
- यो "[macOS only](#macos-only)" र "[Windows only](#windows-only)" खण्डहरू बाहेक, Linux को लागि लेखिएको हो। अन्य धेरै वस्तुहरू लागू हुन्छन् वा अन्य Unices वा macOS (वा पनि Cygwin) मा स्थापना गर्न सकिन्छ।
- फोकस अन्तरक्रियात्मक Bash मा छ, यद्यपि धेरै सुझावहरू अन्य शेलहरूमा र सामान्य Bash स्क्रिप्टिङमा लागू हुन्छन्।
- यसले दुबै "मानक" युनिक्स आदेशहरू साथै विशेष प्याकेज स्थापनाहरू आवश्यक पर्नेहरू समावेश गर्दछ - जबसम्म तिनीहरू समावेशीकरणको लागि पर्याप्त महत्त्वपूर्ण छन्।
नोट:
- यसलाई एक पृष्ठमा राख्नको लागि, सामग्रीलाई सन्दर्भद्वारा समावेश गरिएको छ। एकपटक तपाईंले Google लाई विचार वा आदेश थाहा पाउनुभएपछि अन्यत्र थप विवरणहरू हेर्नको लागि तपाईं पर्याप्त स्मार्ट हुनुहुन्छ। नयाँ प्रोग्रामहरू स्थापना गर्न `apt`, `yum`, `dnf`, `pacman`, `pip` वा `brew` (उपयुक्त रूपमा) प्रयोग गर्नुहोस्।
- प्रयोग गर्नुहोस् [Explainshell](http://explainshell.com/) कमान्डहरू, विकल्पहरू, पाइपहरू इत्यादिले के गर्छ भन्ने उपयोगी ब्रेकडाउन प्राप्त गर्न।
## आधारभूत कुरा
- आधारभूत ब्यास जान्नुहोस्। वास्तवमा, `man bash` टाइप गर्नुहोस् र कम्तिमा सम्पूर्ण कुरा स्किम गर्नुहोस्; यसलाई पछ्याउन धेरै सजिलो छ र त्यो लामो छैन। वैकल्पिक शेलहरू राम्रो हुन सक्छ, तर Bash शक्तिशाली र सधैं उपलब्ध छ (*मात्र* zsh, माछा, इत्यादि सिक्ने, तपाईंको आफ्नै ल्यापटपमा प्रलोभनमा रहँदा, तपाईंलाई अवस्थित सर्भरहरू प्रयोग गर्ने जस्ता धेरै परिस्थितिहरूमा प्रतिबन्ध लगाउँदछ)।
- कम्तिमा एक पाठ-आधारित सम्पादक राम्रोसँग जान्नुहोस्। `nano` सम्पादक आधारभूत सम्पादन (खोल्ने, सम्पादन गर्ने, बचत गर्ने, खोज्ने) को लागि सबैभन्दा सरल मध्ये एक हो। यद्यपि, पाठ टर्मिनलमा पावर प्रयोगकर्ताको लागि, Vim (`vi`) को कुनै विकल्प छैन, सिक्न गाह्रो तर आदरणीय, छिटो, र पूर्ण-विशेष सम्पादक। धेरै व्यक्तिहरूले क्लासिक Emacs पनि प्रयोग गर्छन्, विशेष गरी ठूला सम्पादन कार्यहरूको लागि। (निस्सन्देह, विस्तृत परियोजनामा ​​​​काम गर्ने कुनै पनि आधुनिक सफ्टवेयर विकासकर्ताले शुद्ध पाठ-आधारित सम्पादक मात्र प्रयोग गर्ने सम्भावना छैन र आधुनिक ग्राफिकल IDE र उपकरणहरूसँग पनि परिचित हुनुपर्छ।)
- कागजात खोज्दै:
- जान्नुहोस् कसरी आधिकारिक कागजातहरू `man` सँग पढ्ने (जिज्ञासुका लागि, `man man` ले सेक्सन नम्बरहरू सूचीबद्ध गर्दछ, उदाहरणका लागि 1 ले "नियमित" आदेशहरू, 5 फाइलहरू/कन्भेन्सनहरू, र 8 प्रशासनका लागि हुन्)। 'apropos' को साथ म्यान पृष्ठहरू फेला पार्नुहोस्।
- जान्नुहोस् कि केहि आदेशहरू कार्यान्वयनयोग्य होइनन्, तर Bash बिल्टइनहरू हुन्, र तपाइँ तिनीहरूलाई 'help' र 'help -d' मार्फत मद्दत प्राप्त गर्न सक्नुहुन्छ। तपाईले पत्ता लगाउन सक्नुहुन्छ कि आदेश कार्यान्वयन योग्य, शेल बिल्टइन वा उपनाम हो `प्रकार आदेश` प्रयोग गरेर।
- `curl cheat.sh/command` ले शेल कमाण्ड कसरी प्रयोग गर्ने भन्ने सामान्य उदाहरणहरूको साथ संक्षिप्त "धोखा पाना" दिनेछ।
- `>``<` प्रयोग गरेर आउटपुट र इनपुटको पुन:निर्देशन र `|` प्रयोग गरेर पाइपहरू बारे जान्नुहोस्। जान्नुहोस् `>` आउटपुट फाइल अधिलेखन गर्दछ र `>>` जोडिन्छ। stdout र stderr बारे जान्नुहोस्।
- फाइल ग्लोब विस्तारको बारेमा जान्नुहोस् `*` (र सायद `?``[`...`]`) र उद्धरण र डबल `"` र एकल ``` उद्धरणहरू बीचको भिन्नता। (चर विस्तारमा थप हेर्नुहोस् तल।)
- Bash कार्य व्यवस्थापनसँग परिचित हुनुहोस्: `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill`, आदि।
- `ssh`, र `ssh-agent`, `ssh-add`, आदि मार्फत पासवर्डरहित प्रमाणीकरणका आधारभूत कुराहरू जान्नुहोस्।
- आधारभूत फाइल व्यवस्थापन: `ls``ls -l` (विशेष गरी, `ls -l` मा प्रत्येक स्तम्भको अर्थ के हो जान्नुहोस्), `कम`, `हेड`, `पुच्छर``पुच्छर-f` (वा अझ राम्रो, `कम +F`), `ln``ln -s` (हार्ड बनाम सफ्ट लिङ्कहरूको भिन्नता र फाइदाहरू जान्नुहोस्), `chown`, `chmod`, `du` (डिस्कको द्रुत सारांशको लागि) उपयोग: `du -hs *`)। फाइल प्रणाली व्यवस्थापनका लागि, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`। एक inode के हो जान्नुहोस् (`ls -i` वा `df -i`)।
- आधारभूत नेटवर्क व्यवस्थापन: `ip` वा `ifconfig`, `dig`, `traceroute`, `route`
- सिक्नुहोस् र संस्करण नियन्त्रण व्यवस्थापन प्रणाली प्रयोग गर्नुहोस्, जस्तै `git`
- नियमित अभिव्यक्तिहरू राम्ररी जान्नुहोस्, र `grep`/`egrep` मा विभिन्न झण्डाहरू। `-i`, `-o`, `-v`, `-A`, `-B`, र `-C` विकल्पहरू जान्न लायक छन्।
- प्याकेजहरू फेला पार्न र स्थापना गर्न `apt-get`, `yum`, `dnf` वा `pacman` (distro मा निर्भर गर्दै) प्रयोग गर्न सिक्नुहोस्। र निश्चित गर्नुहोस् कि तपाईसँग पाइथन-आधारित कमाण्ड-लाइन उपकरणहरू स्थापना गर्न `pip` छ (केही तल `pip` मार्फत स्थापना गर्न सजिलो छ)।
## दैनिक प्रयोग
- Bash मा, **ट्याब** प्रयोग गर्नुहोस् तर्कहरू पूरा गर्न वा सबै उपलब्ध आदेशहरू सूचीबद्ध गर्न र **ctrl-r** आदेश इतिहास मार्फत खोजी गर्नको लागि (थिचेपछि, खोज गर्न टाइप गर्नुहोस्, चक्रमा **ctrl-r** बारम्बार थिच्नुहोस्। थप मिलानहरू मार्फत, फेला परेको आदेश कार्यान्वयन गर्न **Enter** थिच्नुहोस्, वा सम्पादनलाई अनुमति दिनको लागि हालको लाइनमा नतिजा राख्न दायाँ तीरमा थिच्नुहोस्)।
- Bash मा, अन्तिम शब्द मेटाउन **ctrl-w** प्रयोग गर्नुहोस्, र **ctrl-u** हालको कर्सरबाट लाइनको सुरुमा सामग्री मेटाउनको लागि। शब्दद्वारा सार्नको लागि **alt-b****alt-f** प्रयोग गर्नुहोस्, कर्सरलाई रेखाको सुरुमा सार्न **ctrl-a**, **ctrl-e** कर्सरलाई रेखाको अन्त्यमा सार्न प्रयोग गर्नुहोस्। , **ctrl-k** लाइनको अन्त्यमा मार्न, **ctrl-l** स्क्रिन खाली गर्न। Bash मा सबै पूर्वनिर्धारित किबाइन्डिङहरूको लागि `man readline` हेर्नुहोस्। त्यहाँ धेरै छन्। उदाहरणका लागि **alt-** अघिल्लो तर्कहरू मार्फत चक्र, र **alt-**** ले ग्लोब विस्तार गर्दछ।
- वैकल्पिक रूपमा, यदि तपाइँ vi-style कुञ्जी-बाइन्डिङहरू मन पराउनुहुन्छ भने, `set -o vi` (र `set -o emacs` यसलाई फिर्ता राख्न) प्रयोग गर्नुहोस्।
- लामो आदेशहरू सम्पादन गर्नका लागि, तपाईंको सम्पादक सेट गरेपछि (उदाहरणका लागि `EDITOR=vim` निर्यात गर्नुहोस्), **ctrl-x** **ctrl-e** ले बहु-लाइन सम्पादनको लागि सम्पादकमा हालको आदेश खोल्नेछ। वा vi शैलीमा, **एस्केप-v**
- हालका आदेशहरू हेर्न, 'इतिहास' प्रयोग गर्नुहोस्। फेरि कार्यान्वयन गर्न `!n` (जहाँ `n` कमाण्ड नम्बर हो) सँग पछ्याउनुहोस्। तपाईले प्रयोग गर्न सक्नुहुने धेरै संक्षिप्त नामहरू पनि छन्, सबैभन्दा उपयोगी हुन सक्छ `!$` अन्तिम तर्कको लागि र `!!` अन्तिम आदेशको लागि (म्यान पृष्ठमा "इतिहास विस्तार" हेर्नुहोस्)। यद्यपि, यी प्रायः सजिलैसँग **ctrl-r****alt-.** सँग बदलिन्छन्।
- `cd` को साथ आफ्नो गृह निर्देशिकामा जानुहोस्। `~` उपसर्ग (जस्तै `~/.bashrc`) सँग तपाईँको गृह निर्देशिकासँग सम्बन्धित फाइलहरू पहुँच गर्नुहोस्। `sh` स्क्रिप्टहरूमा गृह निर्देशिकालाई `$HOME` भनिन्छ।
- अघिल्लो काम गर्ने डाइरेक्टरीमा फर्कन: `cd -`
- यदि तपाइँ आदेश टाइप गरेर आधा बाटोमा हुनुहुन्छ तर आफ्नो विचार परिवर्तन गर्नुहोस्, **alt-#** मा थिच्नुहोस् सुरुमा `#` थप्न र यसलाई टिप्पणीको रूपमा प्रविष्ट गर्नुहोस् (वा **ctrl-a**, ** प्रयोग गर्नुहोस्। #**, **इन्टर**)। त्यसपछि तपाइँ यसलाई आदेश इतिहास मार्फत पछि फर्कन सक्नुहुन्छ।
- `xargs` (वा `समानान्तर`) प्रयोग गर्नुहोस्। यो धेरै शक्तिशाली छ। नोट गर्नुहोस् कि तपाइँ प्रति रेखा (`-L`) साथै समानान्तर (`-P`) कार्यान्वयन गर्ने कति वस्तुहरू नियन्त्रण गर्न सक्नुहुन्छ। यदि तपाइँ निश्चित हुनुहुन्न कि यसले सही काम गर्छ भने, पहिले `xargs echo` प्रयोग गर्नुहोस्। साथै, `-I{}` उपयोगी छ। उदाहरणहरू:
``बाश
फेला पार्नुहोस्। -नाम '*.py' | xargs grep some_function
बिरालो होस्ट | xargs -I{} ssh root@{} होस्टनाम
```
- `pstree -p` प्रक्रिया रूखको एक उपयोगी प्रदर्शन हो।
- नामद्वारा प्रक्रियाहरू फेला पार्न वा संकेत गर्न `pgrep``pkill` प्रयोग गर्नुहोस् (`-f` उपयोगी छ)।
- तपाईले प्रक्रियाहरू पठाउन सक्ने विभिन्न संकेतहरू जान्नुहोस्। उदाहरणका लागि, प्रक्रिया निलम्बन गर्न, `kill -STOP [pid]` प्रयोग गर्नुहोस्। पूर्ण सूचीको लागि, `man 7 सिग्नल` हेर्नुहोस्
- यदि तपाइँ पृष्ठभूमि प्रक्रिया सधैंभरि चलिरहन चाहनुहुन्छ भने `nohup` वा `disown` प्रयोग गर्नुहोस्।
- कुन प्रक्रियाहरू `netstat -lntp` वा `ss -plat` (TCP को लागि; UDP को लागि `-u` थप्नुहोस्) वा `lsof -iTCP -sTCP:LISTEN -P -n` (जसले macOS मा पनि काम गर्दछ) मार्फत सुनिरहेको छ भनी जाँच गर्नुहोस्। )।
- खुला सकेट र फाइलहरूको लागि `lsof``fuser` पनि हेर्नुहोस्।
- प्रणाली कति समयदेखि चलिरहेको छ थाहा पाउन `अपटाइम` वा `w` हेर्नुहोस्।
- सामान्यतया प्रयोग गरिएका आदेशहरूका लागि सर्टकटहरू सिर्जना गर्न `उपनाम` प्रयोग गर्नुहोस्। उदाहरणका लागि, `alias ll='ls -latr'` ले नयाँ उपनाम `ll` सिर्जना गर्छ।
- उपनामहरू, शेल सेटिङहरू, र प्रकार्यहरू बचत गर्नुहोस् जुन तपाइँ सामान्यतया `~/.bashrc` मा प्रयोग गर्नुहुन्छ, र [यसको स्रोतको लागि लगइन शेलहरू मिलाउनुहोस्] (http://superuser.com/a/183980/7106)। यसले तपाइँको सेटअप तपाइँको सबै शेल सत्रहरूमा उपलब्ध गराउनेछ।
- वातावरण चरहरूको सेटिङहरू राख्नुहोस् र आदेशहरू जुन तपाईं `~/.bash_profile` मा लगइन गर्दा कार्यान्वयन गर्नुपर्छ। तपाईंले ग्राफिकल वातावरण लगइनहरू र `cron` कार्यहरूबाट सुरु गर्नुहुने शेलहरूको लागि छुट्टै कन्फिगरेसन आवश्यक हुनेछ।
- तपाईंको कन्फिगरेसन फाइलहरू सिङ्क्रोनाइज गर्नुहोस् (जस्तै `.bashrc``.bash_profile`) Git सँग विभिन्न कम्प्युटरहरू बीच।
- बुझ्नुहोस् कि हेरचाह आवश्यक छ जब चर र फाइलनामहरूले सेतो ठाउँ समावेश गर्दछ। तपाईंको बास चरहरूलाई उद्धरणहरूद्वारा घेर्नुहोस्, उदाहरणका लागि। `"$FOO"`। फाइलनामहरू सीमांकन गर्न शून्य वर्णहरू सक्षम गर्न `-०` वा `-प्रिन्ट०` विकल्पहरूलाई प्राथमिकता दिनुहोस्, उदाहरणका लागि। `locate -0 pattern | xargs -0 ls -al` वा `find / -print0 -type d | xargs -0 ls -al`। लूपमा सेतो स्पेस भएको फाइलनामहरूमा पुनरावृत्ति गर्न, आफ्नो IFS लाई `IFS=$'\n'` प्रयोग गरेर मात्र नयाँ लाइनको रूपमा सेट गर्नुहोस्।
- Bash स्क्रिप्टहरूमा, डिबगिङ आउटपुटका लागि `set -x` (वा संस्करण `set -v`, जसले कच्चा इनपुट लग गर्छ, विस्तार नगरिएको चर र टिप्पणीहरू सहित) प्रयोग गर्नुहोस्। कडा मोडहरू प्रयोग गर्नुहोस् जबसम्म तपाईंसँग नगर्ने राम्रो कारण छ: त्रुटिहरूमा परित्याग गर्न `सेट -e` प्रयोग गर्नुहोस् (शून्य बाहिर निस्कने कोड)। सेट नगरिएको चर प्रयोगहरू पत्ता लगाउन `सेट -u` प्रयोग गर्नुहोस्। पाइप भित्रका त्रुटिहरूलाई रद्द गर्नको लागि `सेट -ओ पाइपफेल` लाई पनि विचार गर्नुहोस् (यद्यपि यदि तपाईंले गर्नुभयो भने यसलाई थप पढ्नुहोस्, किनकि यो विषय अलि सूक्ष्म छ)। थप संलग्न स्क्रिप्टहरूको लागि, EXIT वा ERR मा `trap` पनि प्रयोग गर्नुहोस्। एउटा उपयोगी बानी भनेको यस प्रकारको स्क्रिप्ट सुरु गर्नु हो, जसले यसलाई पत्ता लगाउने र सामान्य त्रुटिहरूमा परित्याग गर्ने र सन्देश छाप्ने छ:
``Bash
set -euo pipefail
ट्र्याप "इको 'त्रुटि: स्क्रिप्ट असफल भयो: माथि असफल आदेश हेर्नुहोस्'" ERR
```
- Bash स्क्रिप्टहरूमा, subshells (कोष्ठकहरूसँग लेखिएको) समूह आदेशहरूको लागि सुविधाजनक तरिका हो। एउटा सामान्य उदाहरण अस्थायी रूपमा फरक कार्य निर्देशिकामा सार्नु हो, उदाहरणका लागि।
``Bash
# हालको dir मा केहि गर्नुहोस्
(cd/some/other/dir && other-command)
# मूल dir मा जारी राख्नुहोस्
```
- Bash मा, नोट गर्नुहोस् त्यहाँ धेरै प्रकारका चर विस्तारहरू छन्। एउटा चर अवस्थित छ भनेर जाँच गर्दै: `${name:?error message}`। उदाहरणका लागि, यदि Bash स्क्रिप्टलाई एकल तर्क चाहिन्छ भने, केवल `input_file=${1:?usage: $0 input_file}` लेख्नुहोस्। यदि एक चल खाली छ भने पूर्वनिर्धारित मान प्रयोग गर्दै: `${name:-default}`। यदि तपाइँ अघिल्लो उदाहरणमा थप (वैकल्पिक) प्यारामिटर थप्न चाहनुहुन्छ भने, तपाइँ `output_file=${2:-logfile}` जस्तै केहि प्रयोग गर्न सक्नुहुन्छ। यदि `$2` हटाइएको छ र यसरी खाली छ भने, `output_file` लाई `logfile` मा सेट गरिनेछ। अंकगणितीय विस्तार: `i=$(((i + 1) % 5 ))`। अनुक्रमहरू: `{1..10}`। स्ट्रिङको ट्रिमिङ: `${var%suffix}``${var#prefix}`। उदाहरणका लागि यदि `var=foo.pdf`, त्यसपछि `echo ${var%.pdf}.txt` ले `foo.txt` छाप्छ।
- `{`...`}` प्रयोग गरेर ब्रेस विस्तारले समान पाठ पुन: टाइप गर्न र वस्तुहरूको स्वचालित संयोजनलाई कम गर्न सक्छ। यो `mv foo.{txt,pdf} some-dir` (जसले दुवै फाइलहरू सार्छ), `cp somefile{,.bak}` (जसले `cp somefile somefile.bak` मा विस्तार हुन्छ) वा `mkdir जस्ता उदाहरणहरूमा उपयोगी छ। -p test-{a,b,c}/subtest-{1,2,3}` (जसले सबै सम्भावित संयोजनहरू विस्तार गर्दछ र डाइरेक्टरी रूख सिर्जना गर्दछ)। ब्रेस विस्तार कुनै पनि अन्य विस्तार अघि प्रदर्शन गरिन्छ।
- विस्तारको क्रम हो: ब्रेस विस्तार; टिल्ड विस्तार, प्यारामिटर र चर विस्तार, अंकगणित विस्तार, र आदेश प्रतिस्थापन (बायाँ-देखि-दायाँ फेसनमा गरियो); शब्द विभाजन; र फाइल नाम विस्तार। (उदाहरणका लागि, `{1..20}` जस्तो दायरालाई `{$a..$b}` प्रयोग गरेर चरहरूसँग व्यक्त गर्न सकिँदैन। यसको सट्टा `seq` वा `for` loop प्रयोग गर्नुहोस्, जस्तै, `seq $a $b` वा `कालागि((i=a; i<=b; i++)); do ... ; सकियो`।)
- आदेशको आउटपुटलाई `<(केही आदेश)` (प्रक्रिया प्रतिस्थापन भनिन्छ) मार्फत फाइल जस्तै व्यवहार गर्न सकिन्छ। उदाहरणका लागि, स्थानीय `/etc/hosts` लाई रिमोटसँग तुलना गर्नुहोस्:
```sh
diff /etc/hosts <(ssh somehost cat /etc/hosts)
```
- स्क्रिप्टहरू लेख्दा तपाईंले आफ्नो सबै कोड घुमाउरो कोष्ठकहरूमा राख्न चाहनुहुन्छ। यदि बन्द गर्ने कोष्ठक हराइरहेको छ भने, सिन्ट्याक्स त्रुटिको कारणले गर्दा तपाईंको लिपि कार्यान्वयन हुनबाट रोकिनेछ। तपाईंको स्क्रिप्ट वेबबाट डाउनलोड हुने बेलामा यसले अर्थ राख्छ, किनकि यसले आंशिक रूपमा डाउनलोड गरिएका स्क्रिप्टहरूलाई कार्यान्वयन हुनबाट रोक्छ:
``बाश
{
# तपाईंको कोड यहाँ छ
}
```
- एउटा "यहाँ कागजात" ले [इनपुटका धेरै लाइनहरूको पुन:निर्देशन] (https://www.tldp.org/LDP/abs/html/here-docs.html) लाई फाइलबाट जस्तै अनुमति दिन्छ:
```
बिरालो <<EOF
इनपुट
धेरै लाइनहरूमा
EOF
```
- Bash मा, दुबै मानक आउटपुट र मानक त्रुटि मार्फत रिडिरेक्ट गर्नुहोस्: `some-command>logfile 2>&1` वा `some-command &>logfile`। प्रायः, कमाण्डले खुला फाइल ह्यान्डललाई मानक इनपुटमा नछोड्ने सुनिश्चित गर्नको लागि, यसलाई तपाईं भित्र भएको टर्मिनलमा बाँधेर, `</dev/null` थप्नु पनि राम्रो अभ्यास हो।
- हेक्स र दशमलव मानहरूको साथ राम्रो ASCII तालिकाको लागि `man ascii` प्रयोग गर्नुहोस्। सामान्य इन्कोडिङ जानकारीको लागि, `man unicode`, `man utf-8`, र `man latin1` उपयोगी छन्।
- स्क्रिन मल्टिप्लेक्स गर्नको लागि `स्क्रिन` वा [`tmux`](https://tmux.github.io/) प्रयोग गर्नुहोस्, विशेष गरी रिमोट ssh सत्रहरूमा उपयोगी हुन र सेसनमा छुट्याउन र पुनः संलग्न गर्न। `byobu` ले थप जानकारी र सजिलो व्यवस्थापन प्रदान गरेर स्क्रिन वा tmux बढाउन सक्छ। सत्र निरन्तरताको लागि मात्र एक थप न्यूनतम विकल्प [`dtach`](https://github.com/bogner/dtach) हो।
- ssh मा, `-L` वा `-D` (र कहिले काँही `-R`) सँग सुरुङ कसरी पोर्ट गर्ने भनेर जान्नु उपयोगी हुन्छ, उदाहरणका लागि। रिमोट सर्भरबाट वेब साइटहरू पहुँच गर्न।
- यो तपाईंको ssh कन्फिगरेसनमा केहि अनुकूलन गर्न उपयोगी हुन सक्छ; उदाहरणका लागि, यो `~/.ssh/config` ले निश्चित सञ्जाल वातावरणमा जडानहरू छोड्नबाट बच्न सेटिङहरू समावेश गर्दछ, कम्प्रेसन प्रयोग गर्दछ (जुन कम-ब्यान्डविथ जडानहरूमा scp सँग उपयोगी हुन्छ), र स्थानीय नियन्त्रण फाइलको साथ एउटै सर्भरमा मल्टिप्लेक्स च्यानलहरू छन्। :
```
TCPKeepAlive=हो
ServerAliveInterval=15
ServerAliveCountMax=6
कम्प्रेसन = हो
ControlMaster स्वत:
ControlPath /tmp/%r@%h:%p
ControlPersist हो
```
- ssh सँग सान्दर्भिक केही अन्य विकल्पहरू सुरक्षा संवेदनशील छन् र हेरचाहका साथ सक्षम हुनुपर्छ, उदाहरणका लागि। प्रति सबनेट वा होस्ट वा विश्वसनीय नेटवर्कहरूमा: `StrictHostKeyCeyChecking=no`, `ForwardAgent=yes`
- UDP प्रयोग गर्ने ssh को विकल्पमा [`mosh`](https://mosh.mit.edu/) विचार गर्नुहोस्, छुटेको जडानहरू बेवास्ता गर्दै र सडकमा सुविधा थप्नुहोस् (सर्भर-साइड सेटअप आवश्यक छ)।
- अक्टल फारममा फाइलमा अनुमतिहरू प्राप्त गर्न, जुन प्रणाली कन्फिगरेसनको लागि उपयोगी छ तर `ls` मा उपलब्ध छैन र बङ्गल गर्न सजिलो छ, जस्तै केहि प्रयोग गर्नुहोस्।
``sh
stat -c '% A %a %n' /etc/timezone
```
- अर्को आदेशको आउटपुटबाट मानहरूको अन्तरक्रियात्मक चयनको लागि, [`percol`](https://github.com/mooz/percol) वा [`fzf`](https://github.com/junegunn/fzf) प्रयोग गर्नुहोस्। )।
- अर्को आदेश (जस्तै `git`) को आउटपुटमा आधारित फाइलहरूसँग अन्तर्क्रियाको लागि, `fpp` ([PathPicker](https://github.com/facebook/PathPicker)) प्रयोग गर्नुहोस्।
- हालको डाइरेक्टरी (र subdirs) मा सबै फाइलहरु को लागी एक साधारण वेब सर्भर को लागी, तपाईको नेटवर्क मा जो कोही को लागी उपलब्ध छ, प्रयोग गर्नुहोस्:
`python -m SimpleHTTPServer 7777` (पोर्ट 7777 र Python 2 को लागि) र `python -m http.server 7777` (पोर्ट 7777 र Python 3 को लागि)।
- अर्को प्रयोगकर्ताको रूपमा आदेश चलाउनको लागि, `sudo` प्रयोग गर्नुहोस्। रूटको रूपमा चलाउन पूर्वनिर्धारित; अर्को प्रयोगकर्ता निर्दिष्ट गर्न `-u` प्रयोग गर्नुहोस्। त्यो प्रयोगकर्ताको रूपमा लगइन गर्न `-i` प्रयोग गर्नुहोस् (तपाईलाई _your_ पासवर्डको लागि सोधिनेछ)।
- शेललाई अर्को प्रयोगकर्तामा स्विच गर्नको लागि, `su username` वा `su - username` प्रयोग गर्नुहोस्। "-" सँगको पछिल्लोले अर्को प्रयोगकर्ताले भर्खरै लग इन गरेको जस्तो वातावरण पाउँछ। प्रयोगकर्ता नाम पूर्वनिर्धारितलाई रूटमा मेटाउने। तपाईलाई तपाईले स्विच गरिरहनुभएको प्रयोगकर्ताको पासवर्डको लागि सोधिनेछ।
- कमाण्ड लाइनहरूमा [128K सीमा](https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong) बारे जान्नुहोस्। यो "तर्क सूची धेरै लामो" त्रुटि सामान्य छ जब वाइल्डकार्ड फाइलहरूको ठूलो संख्यासँग मेल खान्छ। (जब यो हुन्छ 'find' र 'xargs' जस्ता विकल्पहरूले मद्दत गर्न सक्छ।)
- आधारभूत क्याल्कुलेटरको लागि (र पक्कै पनि सामान्य रूपमा पाइथनमा पहुँच), `पाइथन` अनुवादक प्रयोग गर्नुहोस्। उदाहरणका लागि,
```
>>> 2+3
5
```
## फाइल र डाटा प्रशोधन गर्दै
- हालको डाइरेक्टरीमा नामद्वारा फाइल पत्ता लगाउन, 'फेला पार्नुहोस्। -नाम '*something*'` (वा समान)। नामद्वारा कहीं पनि फाइल फेला पार्न, `locate something` प्रयोग गर्नुहोस् (तर दिमागमा राख्नुहोस् `updatedb` ले हालसालै सिर्जना गरिएका फाइलहरू अनुक्रमित नगरेको हुनसक्छ)।
- स्रोत वा डेटा फाइलहरू मार्फत सामान्य खोजको लागि, त्यहाँ धेरै विकल्पहरू छन् 'grep -r' भन्दा बढि उन्नत वा छिटो, (पुरानो देखि नयाँ सम्म) [`ack`](https://github.com/beyondgrep) सहित। /ack2), [`ag`](https://github.com/ggreer/the_silver_searcher) ("द सिल्वर खोजकर्ता"), र [`rg`](https://github.com/BurntSushi/ripgrep) ( ripgrep)।
- HTML लाई पाठमा रूपान्तरण गर्न: `lynx -dump -stdin`
- मार्कडाउन, HTML, र सबै प्रकारका कागजात रूपान्तरणका लागि, [`pandoc`](http://pandoc.org/) कोसिस गर्नुहोस्। उदाहरणका लागि, मार्कडाउन कागजातलाई Word ढाँचामा रूपान्तरण गर्न: `pandoc README.md --from markdown --to docx -o temp.docx`
- यदि तपाईंले XML ह्यान्डल गर्नुपर्छ भने, `xmlstarlet` पुरानो तर राम्रो छ।
- JSON का लागि, [`jq`](http://stedolan.github.io/jq/) प्रयोग गर्नुहोस्। अन्तरक्रियात्मक प्रयोगको लागि, [`jid`](https://github.com/simeji/jid) र [`jiq`](https://github.com/fiatjaf/jiq) पनि हेर्नुहोस्।
- YAML को लागि, [`shyaml`](https://github.com/0k/shyaml) प्रयोग गर्नुहोस्।
- Excel वा CSV फाइलहरूको लागि, [csvkit](https://github.com/onyxfish/csvkit) ले `in2csv`, `csvcut`, `csvjoin`, `csvgrep`, इत्यादि प्रदान गर्दछ।
- Amazon S3 को लागि, [`s3cmd`](https://github.com/s3tools/s3cmd) सुविधाजनक छ र [`s4cmd`](https://github.com/bloomreach/s4cmd) छिटो छ। Amazon को [`aws`](https://github.com/aws/aws-cli) र सुधारिएको [`saws`](https://github.com/donnemartin/saws) अन्य AWS-सम्बन्धित कार्यहरूको लागि आवश्यक छ। ।
- uniq को `-u``-d` विकल्पहरू सहित `sort``uniq` बारे जान्नुहोस् -- तल एक-लाइनर हेर्नुहोस्। `comm` पनि हेर्नुहोस्।
- पाठ फाइलहरू हेरफेर गर्न `कट`, `पेस्ट`, र `जोइन` बारे जान्नुहोस्। धेरै व्यक्तिहरूले `कट` प्रयोग गर्छन् तर `जोइन` बिर्सन्छन्।
- नयाँ रेखाहरू (`-l`), क्यारेक्टरहरू (`-m`), शब्दहरू (`-w`) र बाइटहरू (`-c`) गणना गर्न `wc` को बारेमा जान्नुहोस्।
- stdin बाट फाइलमा र stdout मा प्रतिलिपि गर्न `tee` बारे जान्नुहोस्, जस्तै `ls -al | tee file.txt`
- समूहीकरण, रिभर्सिङ फिल्डहरू, र सांख्यिकीय गणनाहरू सहित थप जटिल गणनाहरूका लागि, [`datamash`](https://www.gnu.org/software/datamash/) लाई विचार गर्नुहोस्।
- थाहा छ कि लोकेलले धेरै कमाण्ड लाइन उपकरणहरूलाई सूक्ष्म तरिकामा असर गर्छ, क्रमबद्ध क्रम (कोलेसन) र कार्यसम्पादन सहित। धेरै जसो लिनक्स स्थापनाहरूले 'LANG' वा अन्य लोकेल चरहरूलाई US अंग्रेजी जस्तै स्थानीय सेटिङमा सेट गर्नेछन्। तर सचेत रहनुहोस् यदि तपाईंले स्थान परिवर्तन गर्नुभयो भने क्रमबद्ध परिवर्तन हुनेछ। र थाहा छ i18n दिनचर्याहरू क्रमबद्ध गर्न वा अन्य आदेशहरू * धेरै पटक * ढिलो चलाउन सक्छ। केहि परिस्थितिहरूमा (जस्तै तल सेट अपरेशनहरू वा विशिष्टता अपरेशनहरू) तपाईं ढिलो i18n दिनचर्याहरूलाई पूर्ण रूपमा बेवास्ता गर्न सक्नुहुन्छ र 'निर्यात LC_ALL=C' प्रयोग गरेर परम्परागत बाइट-आधारित क्रमबद्ध क्रम प्रयोग गर्न सक्नुहुन्छ।
- तपाईले कुनै खास कमाण्डको वातावरणलाई 'TZ=Pacific/Fiji date' मा जस्तै वातावरण चर सेटिङहरूसँग यसको आह्वान उपसर्ग लगाएर सेट गर्न सक्नुहुन्छ।
- साधारण डाटा munging को लागि आधारभूत `awk``sed` जान्नुहोस्। उदाहरणका लागि [वन-लाइनर](#वन-लाइनर) हेर्नुहोस्।
- ठाउँमा स्ट्रिङको सबै घटनाहरू प्रतिस्थापन गर्न, एक वा बढी फाइलहरूमा:
```sh
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
```
- बहु फाइलहरू पुन: नामकरण गर्न र/वा फाइलहरू भित्र खोजी र प्रतिस्थापन गर्न, [`repren`](https://github.com/jlevy/repren) कोसिस गर्नुहोस्। (केहि अवस्थामा `rename` आदेशले धेरै नामहरू पुन: नामकरण गर्न पनि अनुमति दिन्छ, तर सावधान रहनुहोस् किनकि यसको कार्यक्षमता सबै लिनक्स वितरणहरूमा समान छैन।)
```sh
# फाइलनामहरू, डाइरेक्टरीहरू, र सामग्रीहरूको पूर्ण नामकरण foo -> बार:
repren --full --preserve-case --from foo --to bar ।
# ब्याकअप फाइलहरू पुन: प्राप्ति गर्नुहोस् whatever.bak -> जे भए पनि:
repren --names -- बाट ' ( * * . बाक ' -- बाट ' \ 1 ' * . बाक
# माथिको जस्तै, पुन: नाम प्रयोग गरेर, यदि उपलब्ध छ भने:
नाम बदल्नुहोस् 's/\.bak$//' *.bak
```
- जस्तै म्यान पृष्ठले भन्छ, `rsync` साँच्चै छिटो र असाधारण बहुमुखी फाइल प्रतिलिपि गर्ने उपकरण हो। यो मेशिनहरू बीच सिङ्क्रोनाइजको लागि परिचित छ तर स्थानीय रूपमा समान रूपमा उपयोगी छ। जब सुरक्षा प्रतिबन्धहरू अनुमति दिन्छ, `scp` को सट्टा `rsync` प्रयोग गरेर स्क्र्याचबाट पुनः सुरु नगरी स्थानान्तरणको पुन: प्राप्तिलाई अनुमति दिन्छ। यो पनि [सबैभन्दा छिटो तरिकाहरू] (https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-) मध्ये एक हो number-of-files.html) ठूलो संख्यामा फाइलहरू मेटाउन:
```sh
mkdir खाली र& rsync -r -- मेटाउनुहोस् खाली/ some-dir && rmdir some-dir
```
- फाइलहरू प्रशोधन गर्दा प्रगति निगरानीको लागि, [`pv`](http://www.ivarch.com/programs/pv.shtml), [`pycp`](https://github.com/dmerejkowsky/pycp) प्रयोग गर्नुहोस्। , [`pmonitor`](https://github.com/dspinellis/pmonitor), [`progress`](https://github.com/Xfennec/progress), `rsync --progress`, वा, ब्लकको लागि -स्तर प्रतिलिपि, `dd स्थिति=प्रगति`
- शफल गर्न वा फाइलबाट अनियमित रेखाहरू चयन गर्न `shuf` प्रयोग गर्नुहोस्।
- `sort` को विकल्पहरू जान्नुहोस्। संख्याहरूको लागि, मानव-पठनीय संख्याहरू ह्यान्डल गर्नको लागि `-n`, वा `-h` प्रयोग गर्नुहोस् (जस्तै `du -h` बाट)। जान्नुहोस् कि कसरी कुञ्जीहरूले काम गर्दछ (`-t` र `-k`)। विशेष रूपमा, ध्यान दिनुहोस् कि तपाईंले `-k1,1` लेख्नु आवश्यक छ केवल पहिलो फिल्डद्वारा क्रमबद्ध गर्न; `-k1` को अर्थ सम्पूर्ण रेखा अनुसार क्रमबद्ध गर्नुहोस्। स्थिर क्रमबद्ध (`sort-s`) उपयोगी हुन सक्छ। उदाहरण को लागी, फिल्ड 2 द्वारा पहिले क्रमबद्ध गर्न, त्यसपछि दोस्रो फिल्ड 1 द्वारा, तपाईले `sort -k1,1 | क्रमबद्ध -s -k2,2`
- यदि तपाईलाई बाशमा कमाण्ड लाइनमा ट्याब शाब्दिक लेख्न आवश्यक छ (जस्तै क्रमबद्ध गर्न -t तर्कको लागि), थिच्नुहोस् **ctrl-v** **[Tab]** वा `$'\t' लेख्नुहोस्। ` (पछिल्लो राम्रो छ किनकि तपाइँ यसलाई प्रतिलिपि / टाँस्न सक्नुहुन्छ)।
- स्रोत कोड प्याचिङका लागि मानक उपकरणहरू `diff``patch` हुन्। भिन्नताको सारांश तथ्याङ्कका लागि `diffstat` र छेउछाउको भिन्नताका लागि `sdiff` पनि हेर्नुहोस्। नोट `diff -r` सम्पूर्ण डाइरेक्टरीहरूको लागि काम गर्दछ। `diff -r tree1 tree2 | प्रयोग गर्नुहोस् परिवर्तनहरूको सारांशको लागि diffstat'। फाइलहरू तुलना गर्न र सम्पादन गर्न `vimdiff` प्रयोग गर्नुहोस्।
- बाइनरी फाइलहरूको लागि, साधारण हेक्स डम्पहरूको लागि `hd`, `hexdump` वा `xxd` र बाइनरी सम्पादनको लागि `bvi`, `hexedit` वा `biew` प्रयोग गर्नुहोस्।
- बाइनरी फाइलहरूको लागि पनि, `स्ट्रिङ्स` (प्लस `ग्रेप`, इत्यादि) ले तपाइँलाई पाठका बिटहरू फेला पार्न दिन्छ।
- बाइनरी डिफहरू (डेल्टा कम्प्रेसन) को लागि, `xdelta3` प्रयोग गर्नुहोस्।
- पाठ सङ्केतनहरू रूपान्तरण गर्न, `iconv` प्रयास गर्नुहोस्। वा अधिक उन्नत प्रयोगको लागि `uconv`; यसले केही उन्नत युनिकोड चीजहरूलाई समर्थन गर्दछ। उदाहरणका लागि:
```sh
# हेक्स कोडहरू वा क्यारेक्टरहरूको वास्तविक नामहरू प्रदर्शन गर्दछ (डिबगिङका लागि उपयोगी):
uconv -f utf-8 -t utf-8 -x ':: Any-Hex;' < input.txt
uconv -f utf-8 -t utf-8 -x '::Any-Name;' < input.txt
# लोअरकेस र सबै एक्सेन्टहरू हटाउँछ (विस्तार गरेर र छोडेर):
uconv -f utf-8 -t utf-8 -x ':: Any-lower; :: Any-NFD; [:बिना स्पेसिङ मार्क:] >; :: Any-NFC;' <input.txt> output.txt
```
- फाइलहरूलाई टुक्रामा विभाजन गर्न, `स्प्लिट` (आकारद्वारा विभाजित गर्न) र `csplit` (ढाँचाद्वारा विभाजित गर्न) हेर्नुहोस्।
- मिति र समय: उपयोगी [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) ढाँचामा हालको मिति र समय प्राप्त गर्न, `date -u +"%Y-%m-% प्रयोग गर्नुहोस्। dT%H:%M:%SZ"` (अन्य विकल्पहरू [है](https://stackoverflow.com/questions/7216358/date-command-on-os-x-doesnt-have-iso-8601-i- विकल्प) [समस्याग्रस्त](https://unix.stackexchange.com/questions/164826/date-command-iso-8601-option))। मिति र समय अभिव्यक्तिहरू हेरफेर गर्न, [`dateutils`] (http://www.fresse.org/dateutils/) बाट `dateadd`, `datediff`, `strptime` आदि प्रयोग गर्नुहोस्।
- संकुचित फाइलहरूमा सञ्चालन गर्न `zless`, `zmore`, `zcat`, र `zgrep` प्रयोग गर्नुहोस्।
- फाइल विशेषताहरू `chattr` मार्फत मिलाउन सकिन्छ र फाइल अनुमतिहरूको लागि तल्लो-स्तरको विकल्प प्रस्ताव गर्दछ। उदाहरणका लागि, आकस्मिक फाइल मेटाउनबाट जोगाउन अपरिवर्तनीय झण्डा: `sudo chattr +i /critical/directory/or/file`
- फाइल अनुमतिहरू बचत र पुनर्स्थापना गर्न `getfacl``setfacl` प्रयोग गर्नुहोस्। उदाहरणका लागि:
```sh
getfacl -R /some/path> permissions.txt
setfacl --restore=permissions.txt
```
- खाली फाइलहरू द्रुत रूपमा सिर्जना गर्न, `truncate` ([sparse file](https://en.wikipedia.org/wiki/Sparse_file) सिर्जना गर्दछ), `fallocate` (ext4, xfs, btrfs र ocfs2 फाइल प्रणाली), `xfs_mkfile प्रयोग गर्नुहोस्। ` (लगभग कुनै पनि फाइल प्रणाली, xfsprogs प्याकेजमा आउँछ), `mkfile` (Solaris, Mac OS जस्ता Unix-जस्तो प्रणालीहरूको लागि)।
## प्रणाली डिबगिङ
- वेब डिबगिङका लागि, `curl``curl -I` उपयोगी छन्, वा तिनीहरूको `wget` समकक्षहरू, वा अझ आधुनिक [`httpie`](https://github.com/jkbrzt/httpie)।
- हालको cpu/डिस्क स्थिति जान्नको लागि, क्लासिक उपकरणहरू `शीर्ष` (वा राम्रो `htop`), `iostat`, र `iotop` हुन्। आधारभूत CPU र विस्तृत प्रति-विभाजन डिस्क तथ्याङ्क र कार्यसम्पादन अन्तरदृष्टिको लागि `iostat -mxz 15` प्रयोग गर्नुहोस्।
- नेटवर्क जडान विवरणहरूको लागि, `netstat``ss` प्रयोग गर्नुहोस्।
- प्रणालीमा के भइरहेको छ भनेर द्रुत सिंहावलोकनको लागि, `dstat` विशेष रूपमा उपयोगी छ। विस्तृत विवरणका लागि, [`glances`](https://github.com/nicolargo/glances) प्रयोग गर्नुहोस्।
- मेमोरी स्थिति जान्नको लागि, चलाउनुहोस् र `free``vmstat` को आउटपुट बुझ्नुहोस्। विशेष रूपमा, "क्यास गरिएको" मानलाई लिनक्स कर्नेलले फाइल क्यासको रूपमा राखेको मेमोरी हो, त्यसैले प्रभावकारी रूपमा "नि:शुल्क" मानमा गणना हुन्छ।
- जाभा प्रणाली डिबगिङ माछाको फरक केतली हो, तर Oracle र केही अन्य JVM मा एउटा साधारण ट्रिक यो हो कि तपाइँ `kill -3 <pid>` र पूर्ण स्ट्याक ट्रेस र हिप सारांश (पुस्ताको फोहोर संकलन विवरणहरू सहित, जुन अत्यधिक जानकारीमूलक हुन सक्छ) stderr/logs मा डम्प गरिनेछ। JDK को `jps`, `jstat`, `jstack`, `jmap` उपयोगी छन्। [SJK उपकरणहरू](https://github.com/aragozin/jvm-tools) अझ उन्नत छन्।
- नेटवर्क समस्याहरू पहिचान गर्न, राम्रो ट्रेसराउटको रूपमा [`mtr`](http://www.bitwizard.nl/mtr/) प्रयोग गर्नुहोस्।
- डिस्क भरिएको कारण हेर्नको लागि, [`ncdu`](https://dev.yorhel.nl/ncdu) ले `du -sh *` जस्ता सामान्य आदेशहरूमा समय बचत गर्छ।
- कुन सकेट वा प्रक्रियाले ब्यान्डविथ प्रयोग गरिरहेको छ भनी पत्ता लगाउन, [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) वा [`nethogs`](https://github.com) कोसिस गर्नुहोस्। /raboof/nethogs)।
- 'ab' उपकरण (Apache सँग आउँछ) वेब सर्भर कार्यसम्पादनको द्रुत-र-फोहोर जाँचको लागि उपयोगी छ। थप जटिल लोड परीक्षणको लागि, `सिज` प्रयास गर्नुहोस्।
- थप गम्भीर नेटवर्क डिबगिङका लागि, [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html), वा [ `ngrep`](http://ngrep.sourceforge.net/)।
- 'strace' र 'ltrace' बारे जान्नुहोस्। यो उपयोगी हुन सक्छ यदि एक कार्यक्रम असफल, ह्याङ्ग, वा क्र्यास भइरहेको छ, र तपाईलाई थाहा छैन किन, वा यदि तपाइँ प्रदर्शनको सामान्य विचार प्राप्त गर्न चाहनुहुन्छ भने। प्रोफाइलिङ विकल्प (`-c`), र चलिरहेको प्रक्रियामा संलग्न गर्ने क्षमता (`-p`) नोट गर्नुहोस्। महत्त्वपूर्ण कलहरू हराउनबाट बच्न ट्रेस चाइल्ड विकल्प (`-f`) प्रयोग गर्नुहोस्।
- साझा पुस्तकालयहरू आदि जाँच गर्न `ldd` बारे जान्नुहोस् — तर [अविश्वसनीय फाइलहरूमा कहिल्यै नचलाउनुहोस्] (http://www.catonmat.net/blog/ldd-arbitrary-code-execution/)।
- 'gdb' को साथ चलिरहेको प्रक्रियामा कसरी जडान गर्ने र यसको स्ट्याक ट्रेसहरू प्राप्त गर्ने बारे जान्नुहोस्।
- `/proc` प्रयोग गर्नुहोस्। कहिलेकाहीँ प्रत्यक्ष समस्याहरू डिबग गर्दा यो आश्चर्यजनक रूपमा उपयोगी हुन्छ। उदाहरणहरू: `/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, ​​`/proc/xxx/exe`, `/proc/xxx/fd/` , `/proc/xxx/smaps` (जहाँ `xxx` प्रक्रिया id वा pid हो)।
- विगतमा किन केही गलत भयो भन्ने डिबग गर्दा, [`sar`](http://sebastien.godard.pagesperso-orange.fr/) धेरै उपयोगी हुन सक्छ। यसले CPU, मेमोरी, नेटवर्क, आदिमा ऐतिहासिक तथ्याङ्कहरू देखाउँछ।
- गहिरो प्रणाली र कार्यसम्पादन विश्लेषणको लागि, `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](https://en.wikipedia.org/wiki/) मा हेर्नुहोस्। Perf_%28Linux%29), र [`sysdig`](https://github.com/draios/sysdig)।
- तपाईं `uname` वा `uname -a` (सामान्य Unix/kernel info) वा `lsb_release -a` (Linux distro info) मार्फत कुन OS मा हुनुहुन्छ भनी जाँच गर्नुहोस्।
- 'dmesg' प्रयोग गर्नुहोस् जब कुनै चीज वास्तवमै हास्यास्पद हुन्छ (यो हार्डवेयर वा चालक समस्याहरू हुन सक्छ)।
- यदि तपाईंले फाइल मेटाउनुभयो र यसले `du` द्वारा रिपोर्ट गरे अनुसार अपेक्षित डिस्क ठाउँ खाली गर्दैन भने, फाइल प्रक्रियाद्वारा प्रयोगमा छ कि छैन जाँच गर्नुहोस्:
'lsof | grep हटाइयो | grep "filename-of-my-big-file"`
## वन-लाइनर
आदेशहरू सँगै टुक्रा पार्ने केही उदाहरणहरू:
- यो कहिलेकाहीं उल्लेखनीय रूपमा उपयोगी छ कि तपाइँ प्रतिच्छेदन, संघ, र पाठ फाइलहरूको भिन्नता `sort`/`uniq` मार्फत सेट गर्न सक्नुहुन्छ। मानौं `a``b` पाठ फाइलहरू हुन् जुन पहिले नै अद्वितीय छन्। यो छिटो छ, र मनमानी आकारका फाइलहरूमा काम गर्दछ, धेरै गीगाबाइट सम्म। (क्रमबद्ध गर्न मेमोरी द्वारा सीमित छैन, यद्यपि तपाईले `-T` विकल्प प्रयोग गर्न आवश्यक हुन सक्छ यदि `/tmp` सानो रूट विभाजनमा छ।) माथिको `LC_ALL``सर्ट`को `- बारे नोट पनि हेर्नुहोस्। u` विकल्प (तल स्पष्टताको लागि छोडियो)।
```sh
क्रमबद्ध a b | uniq > c # c एक संघ हो
क्रमबद्ध a b | uniq -d > c # c एक प्रतिच्छेद b हो
क्रमबद्ध a b b | uniq -u > c # c फरक a - b सेट गरिएको छ
```
- दुई JSON फाईलहरू प्रिटि-प्रिन्ट गर्नुहोस्, तिनीहरूको सिन्ट्याक्सलाई सामान्य बनाउनुहोस्, त्यसपछि रङ र परिणाम पृष्ठन गर्नुहोस्:
```
diff <(jq --sort-keys। <file1.json) <(jq --sort-keys <file2.json) | colordiff | कम - आर
```
- 'grep प्रयोग गर्नुहोस्। *` द्रुत रूपमा डाइरेक्टरीमा सबै फाइलहरूको सामग्रीहरू जाँच गर्न (त्यसैले प्रत्येक रेखा फाइलनामसँग जोडिएको छ), वा `हेड -१०० *` (त्यसैले प्रत्येक फाइलको शीर्षक छ)। यो `/sys`, `/proc`, `/etc` मा भएका कन्फिगरेसन सेटिङहरूले भरिएका डाइरेक्टरीहरूको लागि उपयोगी हुन सक्छ।
- पाठ फाइलको तेस्रो स्तम्भमा सबै नम्बरहरू संक्षेप गर्दै (यो सम्भवतः 3X छिटो र 3X कम कोड बराबर पाइथन भन्दा हो):
```sh
awk '{ x += $3 } END { print x }' myfile
```
- फाइलहरूको रूखमा साइज/मितिहरू हेर्न, यो पुनरावर्ती `ls -l` जस्तै हो तर `ls -lR` भन्दा पढ्न सजिलो छ:
``sh
फेला पार्नुहोस्। - प्रकार f -ls
```
- भन्नुहोस् कि तपाइँसँग एउटा टेक्स्ट फाइल छ, जस्तै वेब सर्भर लग, र केही लाइनहरूमा देखा पर्ने निश्चित मान, जस्तै URL मा अवस्थित `acct_id` प्यारामिटर। यदि तपाइँ प्रत्येक `acct_id` को लागि कति अनुरोधहरूको ट्याली चाहनुहुन्छ भने:
``sh
egrep -o 'acct_id=[0-9]+' access.log | cut -d= -f2 | क्रमबद्ध | uniq -c | क्रमबद्ध गर्नुहोस्
```
- लगातार परिवर्तनहरू निगरानी गर्न, `वाच` प्रयोग गर्नुहोस्, उदाहरणका लागि। `watch -d -n 2 'ls -rtlh | को साथ डाइरेक्टरीमा फाइलहरूमा परिवर्तनहरू जाँच गर्नुहोस् tail'` वा 'watch -d -n 2 ifconfig` को साथ तपाईंको वाइफाइ सेटिङहरू समस्या निवारण गर्दा नेटवर्क सेटिङहरूमा।
- यस कागजातबाट अनियमित टिप प्राप्त गर्न यो प्रकार्य चलाउनुहोस् (मार्कडाउन पार्स गर्दछ र वस्तु निकाल्छ):
``sh
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed '/cowsay[.]png/d' |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
xmlstarlet unesc | fmt -80 | iconv -t US
}
```
## अस्पष्ट तर उपयोगी
- `expr`: perform arithmetic or boolean operations or evaluate regular expressions
- `m4`: simple macro processor
- `yes`: print a string a lot
- `cal`: nice calendar
- `env`: run a command (useful in scripts)
- `printenv`: print out environment variables (useful in debugging and scripts)
- `look`: find English words (or lines in a file) beginning with a string
- `cut`, `paste` and `join`: data manipulation
- `fmt`: format text paragraphs
- `pr`: format text into pages/columns
- `fold`: wrap lines of text
- `column`: format text fields into aligned, fixed-width columns or tables
- `expand` and `unexpand`: convert between tabs and spaces
- `nl`: add line numbers
- `seq`: print numbers
- `bc`: calculator
- `factor`: factor integers
- [`gpg`](https://gnupg.org/): encrypt and sign files
- `toe`: table of terminfo entries
- `nc`: network debugging and data transfer
- `socat`: socket relay and tcp port forwarder (similar to `netcat`)
- [`slurm`](https://github.com/mattthias/slurm): network traffic visualization
- `dd`: moving data between files or devices
- `file`: identify type of a file
- `tree`: display directories and subdirectories as a nesting tree; like `ls` but recursive
- `stat`: file info
- `time`: execute and time a command
- `timeout`: execute a command for specified amount of time and stop the process when the specified amount of time completes.
- `lockfile`: create semaphore file that can only be removed by `rm -f`
- `logrotate`: rotate, compress and mail logs.
- `watch`: run a command repeatedly, showing results and/or highlighting changes
- [`when-changed`](https://github.com/joh/when-changed): runs any command you specify whenever it sees file changed. See `inotifywait` and `entr` as well.
- `tac`: print files in reverse
- `comm`: compare sorted files line by line
- `strings`: extract text from binary files
- `tr`: character translation or manipulation
- `iconv` or `uconv`: conversion for text encodings
- `split` and `csplit`: splitting files
- `sponge`: read all input before writing it, useful for reading from then writing to the same file, e.g., `grep -v something some-file | sponge some-file`
- `units`: unit conversions and calculations; converts furlongs per fortnight to twips per blink (see also `/usr/share/units/definitions.units`)
- `apg`: generates random passwords
- `xz`: high-ratio file compression
- `ldd`: dynamic library info
- `nm`: symbols from object files
- `ab` or [`wrk`](https://github.com/wg/wrk): benchmarking web servers
- `strace`: system call debugging
- [`mtr`](http://www.bitwizard.nl/mtr/): better traceroute for network debugging
- `cssh`: visual concurrent shell
- `rsync`: sync files and folders over SSH or in local file system
- [`wireshark`](https://wireshark.org/) and [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): packet capture and network debugging
- [`ngrep`](http://ngrep.sourceforge.net/): grep for the network layer
- `host` and `dig`: DNS lookups
- `lsof`: process file descriptor and socket info
- `dstat`: useful system stats
- [`glances`](https://github.com/nicolargo/glances): high level, multi-subsystem overview
- `iostat`: Disk usage stats
- `mpstat`: CPU usage stats
- `vmstat`: Memory usage stats
- `htop`: improved version of top
- `last`: login history
- `w`: who's logged on
- `id`: user/group identity info
- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): historic system stats
- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) or [`nethogs`](https://github.com/raboof/nethogs): network utilization by socket or process
- `ss`: socket statistics
- `dmesg`: boot and system error messages
- `sysctl`: view and configure Linux kernel parameters at run time
- `hdparm`: SATA/ATA disk manipulation/performance
- `lsblk`: list block devices: a tree view of your disks and disk partitions
- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: hardware information, including CPU, BIOS, RAID, graphics, devices, etc.
- `lsmod` and `modinfo`: List and show details of kernel modules.
- `fortune`, `ddate`, and `sl`: um, well, it depends on whether you consider steam locomotives and Zippy quotations "useful"
## macOS मात्र
यी वस्तुहरू सान्दर्भिक *मात्र* macOS मा छन्।
- प्याकेज व्यवस्थापन `brew` (Homebrew) र/वा `port` (MacPorts) सँग। यी माथिका धेरै आदेशहरू macOS मा स्थापना गर्न प्रयोग गर्न सकिन्छ।
- कुनै पनि आदेशको आउटपुटलाई डेस्कटप एपमा `pbcopy` को साथ प्रतिलिपि गर्नुहोस् र `pbpaste` बाट इनपुट टाँस्नुहोस्।
- macOS टर्मिनलमा विकल्प कुञ्जीलाई alt कुञ्जी (जस्तै **alt-b**, **alt-f**, आदि) मा प्रयोग गरिएको, प्राथमिकताहरू खोल्नुहोस् -> प्रोफाइलहरू -> किबोर्ड। र "मेटा कुञ्जीको रूपमा विकल्प प्रयोग गर्नुहोस्" चयन गर्नुहोस्।
- डेस्कटप एपसँग फाइल खोल्नको लागि, `open` वा `open -a /Applications/Whatever.app` प्रयोग गर्नुहोस्।
- स्पटलाइट: `mdfind` को साथ फाइलहरू खोज्नुहोस् र `mdls` सँग मेटाडाटा (जस्तै फोटो EXIF ​​जानकारी) सूची गर्नुहोस्।
- सचेत रहनुहोस् macOS BSD Unix मा आधारित छ, र धेरै आदेशहरू (उदाहरणका लागि `ps`, `ls`, `tail`, `awk`, `sed`) Linux बाट धेरै सूक्ष्म भिन्नताहरू छन्, जुन धेरै हदसम्म प्रणाली V द्वारा प्रभावित छ। - शैली युनिक्स र GNU उपकरणहरू। तपाइँ प्राय: "BSD जनरल कमान्ड म्यानुअल" शीर्षक भएको म्यान पृष्ठलाई ध्यान दिएर फरक बताउन सक्नुहुन्छ। केही अवस्थामा GNU संस्करणहरू पनि स्थापना गर्न सकिन्छ (जस्तै GNU awk र sed को लागि `gawk``gsed`)। यदि क्रस-प्लेटफर्म ब्यास स्क्रिप्टहरू लेख्दै हुनुहुन्छ भने, त्यस्ता आदेशहरूलाई बेवास्ता गर्नुहोस् (उदाहरणका लागि, पाइथन वा `पर्ल`लाई विचार गर्नुहोस्) वा सावधानीपूर्वक परीक्षण गर्नुहोस्।
- macOS रिलीज जानकारी प्राप्त गर्न, `sw_vers` प्रयोग गर्नुहोस्।
## विन्डोज मात्र
यी वस्तुहरू विन्डोजमा *मात्र* सान्दर्भिक छन्।
### विन्डोज अन्तर्गत युनिक्स उपकरणहरू प्राप्त गर्ने तरिकाहरू
- [Cygwin](https://cygwin.com/) स्थापना गरेर माइक्रोसफ्ट विन्डोज अन्तर्गत युनिक्स शेलको शक्ति पहुँच गर्नुहोस्। यस कागजातमा वर्णन गरिएका अधिकांश चीजहरू बाकस बाहिर काम गर्नेछन्।
- Windows 10 मा, तपाईंले [Windows Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about) प्रयोग गर्न सक्नुहुन्छ, जसले युनिक्स कमाण्ड लाइन उपयोगिताहरूसँग परिचित बास वातावरण प्रदान गर्दछ।
- यदि तपाइँ विन्डोजमा GNU विकासकर्ता उपकरणहरू (जस्तै GCC) प्रयोग गर्न चाहनुहुन्छ भने, [MinGW](http://www.mingw.org/) र यसको [MSYS](http://www.mingw.org/) लाई विचार गर्नुहोस् wiki/msys) प्याकेज, जसले bash, gawk, make र grep जस्ता उपयोगिताहरू प्रदान गर्दछ। MSYS सँग Cygwin को तुलनामा सबै सुविधाहरू छैनन्। MinGW विशेष गरी युनिक्स उपकरणहरूको नेटिभ विन्डोज पोर्टहरू सिर्जना गर्न उपयोगी छ।
- विन्डोज अन्तर्गत युनिक्स लुक र महसुस गर्ने अर्को विकल्प [नगद] (https://github.com/dthree/cash) हो। ध्यान दिनुहोस् कि यो वातावरणमा धेरै थोरै युनिक्स आदेशहरू र आदेश-लाइन विकल्पहरू उपलब्ध छन्।
### उपयोगी विन्डोज कमाण्ड-लाइन उपकरणहरू
- तपाईँले 'wmic' सिकेर र प्रयोग गरेर कमाण्ड लाइनबाट अधिकांश विन्डोज प्रणाली प्रशासन कार्यहरू प्रदर्शन र स्क्रिप्ट गर्न सक्नुहुन्छ।
- नेटिभ कमाण्ड-लाइन विन्डोज नेटवर्किङ उपकरणहरू तपाईले उपयोगी पाउन सक्नुहुन्छ `ping`, `ipconfig`, `tracert`, र `netstat`
- तपाईं `Rundll32` आदेश बोलाएर [धेरै उपयोगी Windows कार्यहरू] (http://www.thewindowsclub.com/rundll32-shortcut-commands-windows) गर्न सक्नुहुन्छ।
### Cygwin सुझाव र चालहरू
- Cygwin को प्याकेज प्रबन्धक संग अतिरिक्त Unix कार्यक्रम स्थापना गर्नुहोस्।
- आफ्नो कमाण्ड-लाइन विन्डोको रूपमा `mintty` प्रयोग गर्नुहोस्।
- `/dev/clipboard` मार्फत विन्डोज क्लिपबोर्ड पहुँच गर्नुहोस्।
- चलाउनुहोस् `cygstart` यसको दर्ता अनुप्रयोग मार्फत एक मनमानी फाइल खोल्न।
- 'regtool' को साथ विन्डोज रजिस्ट्री पहुँच गर्नुहोस्।
- नोट गर्नुहोस् कि एक `C:\` Windows ड्राइभ पथ `/cygdrive/c` हुन्छ Cygwin अन्तर्गत, र त्यो Cygwin को `/` विन्डोजमा `C:\cygwin` अन्तर्गत देखिन्छ। साइगविन र विन्डोज-शैली फाइल मार्गहरू बीच `cygpath` को साथ रूपान्तरण गर्नुहोस्। यो विन्डोज प्रोग्रामहरू आह्वान गर्ने स्क्रिप्टहरूमा सबैभन्दा उपयोगी छ।
## थप स्रोतहरू
- [awesome-shell](https://github.com/alebcay/awesome-shell): शेल उपकरण र स्रोतहरूको क्युरेट गरिएको सूची।
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): macOS कमाण्ड लाइनको लागि थप गहिरो गाइड।
- राम्रो शेल लिपिहरू लेख्नको लागि [कडा मोड](http://redsymbol.net/articles/unofficial-bash-strict-mode/)।
- [shellcheck](https://github.com/koalaman/shellcheck): एक शेल स्क्रिप्ट स्थिर विश्लेषण उपकरण। अनिवार्य रूपमा, bash/sh/zsh को लागि lint।
- [शेलमा फाइलनामहरू र मार्गनामहरू](http://www.dwheeler.com/essays/filenames-in-shell.html): शेल लिपिहरूमा फाइलनामहरू कसरी सही रूपमा ह्यान्डल गर्ने भन्नेमा दुखद जटिल कुरा।
- [Data Science at the Command Line](http://datascienceatthecommandline.com/#tools): उही नामको पुस्तकबाट, डाटा विज्ञान गर्नका लागि थप आदेश र उपकरणहरू उपयोगी
## अस्वीकरण
धेरै साना कार्यहरू बाहेक, कोड लेखिएको छ ताकि अरूले यसलाई पढ्न सकून्। शक्तिसँगै जिम्मेवारी पनि आउँछ । बाशमा तपाईले *सक्नुहुन्छ* भन्ने तथ्यको मतलब तपाईले गर्नुपर्छ भन्ने होइन! ;)
## लाइसेन्स
[![क्रिएटिभ कमन्स लाइसेन्स](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/)
यो काम [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/) अन्तर्गत इजाजतपत्र दिइएको छ।