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

bn: added bengali translation

This commit is contained in:
Mahmudun Nabi Kajal 2024-04-09 22:55:09 +06:00
parent 6b50745d2e
commit 552d57ad30

624
README-bn.md Normal file
View File

@ -0,0 +1,624 @@
🌍
*[বাংলা](README-bn.md) ∙ [Č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), [হলোওয়ে](https://www.holloway.com)। ধন্যবাদ!*
- [মেটা](#মেটা)
- [মূলনীতি](#মূলনীতি)
- [দৈনন্দিন ব্যবহার](#দৈনন্দিন-ব্যবহার)
- [ফাইল এবং ডেটা প্রক্রিয়াকরণ](#ফাইল-এবং-ডেটা-প্রক্রিয়াকরণ)
- [সিস্টেম ডিবাগিং](#সিস্টেম-ডিবাগিং)
- [এক-লাইনার](#এক-লাইনার)
- [অস্পষ্ট কিন্তু উপকারী](#অস্পষ্ট-কিন্তু-উপকারী)
- [শুধুমাত্র ম্যাকওএস](#শুধুমাত্র-ম্যাকওএস)
- [শুধুমাত্র উইন্ডোজ](#শুধুমাত্র-উইন্ডোজ)
- [আরও রিসোর্স](#আরও-রিসোর্স)
- [অস্বীকৃতি](#অস্বীকৃতি)
![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) যদি আপনি কোনও ত্রুটি বা এমন কিছু দেখেন যা আরও ভাল হতে পারে!
## মেটা
সুযোগ:
- এই গাইডটি বিগিনার্স এবং অভিজ্ঞ ব্যবহারকারী উভয়ের জন্য। লক্ষ্যগুলি হল *ব্রেডথ* (সবকিছু গুরুত্বপূর্ণ), *নির্দিষ্টতা* (সবচেয়ে সাধারণ ক্ষেত্রে নির্দিষ্ট উদাহরণ দিন), এবং *সংক্ষিপ্ততা* (যা অত্যাবশ্যক নয় বা অন্যত্র সহজেই দেখা যায় এমন বিষয়গুলি এড়িয়ে চলুন)। প্রতিটি টিপ কিছু পরিস্থিতিতে অত্যাবশ্যক বা বিকল্পগুলির উপর উল্লেখযোগ্যভাবে সময় বাঁচায়।
- এটি লিনাক্সের জন্য লেখা হয়েছে, "[ম্যাকওএস শুধুমাত্র](#শুধুমাত্র-ম্যাকওএস)" এবং "[উইন্ডোজ শুধুমাত্র](#শুধুমাত্র-উইন্ডোজ)" বিভাগগুলি ব্যতীত। অন্যান্য আইটেমগুলির অনেকগুলি অন্যান্য ইউনিক্স বা ম্যাকওএস (বা এমনকি সাইগউইন) এ প্রযোজ্য বা ইনস্টল করা যেতে পারে।
- ফোকাসটি ইন্টারঅ্যাকটিভ ব্যাশের উপর, যদিও অনেক টিপস অন্যান্য শেল এবং সাধারণ ব্যাশ স্ক্রিপ্টিং এ প্রযোজ্য।
- এটিতে "স্ট্যান্ডার্ড" ইউনিক্স কমান্ড এবং বিশেষ প্যাকেজ ইনস্টলের প্রয়োজন হয় এমন উভয়ই অন্তর্ভুক্ত রয়েছে -- যতক্ষণ না সেগুলি অন্তর্ভুক্তির যোগ্যতা অর্জনের জন্য যথেষ্ট গুরুত্বপূর্ণ।
Notes:
এই পৃষ্ঠাটি সংক্ষিপ্ত রাখার জন্য, বিষয়বস্তুটি সরাসরি অন্তর্ভুক্ত করা হয়নি। গুগল করার জন্য আপনার যখন ধারণা বা কমান্ডটি জানা থাকবে তখন আপনি অন্য কোথাও থেকে আরও বিস্তারিত জানতে পারবেন। নতুন প্রোগ্রাম ইনস্টল করতে `apt`, `yum`, `dnf`, `pacman`, `pip` বা `brew` (যা প্রযোজ্য) ব্যবহার করুন।
- কমান্ড, অপশন, পাইপ ইত্যাদির কী কাজ তা জানতে [এক্সপ্লেইনসেল](http://explainshell.com/) ব্যবহার করুন।
## মূল বিষয়
- বেসিক ব্যাশ শিখুন। `man bash` টাইপ করুন এবং কমপক্ষে পুরোটা স্কিম করুন; এটা অনুসরণ করা বেশ সহজ এবং ততটা দীর্ঘ নয়। বিকল্প শেলগুলি ভালো হতে পারে, কিন্তু ব্যাশ শক্তিশালী এবং সবসময় পাওয়া যায় (*শুধুমাত্র* zsh, fish, ইত্যাদি শেখা, আপনার নিজের ল্যাপটপে প্রলুব্ধ করার সময়, আপনাকে অনেক পরিস্থিতিতে সীমাবদ্ধ করে, যেমন বিদ্যমান সার্ভার ব্যবহার করা)।
- অন্তত একটি টেক্সট-বেসড এডিটর ভালভাবে শিখুন। মৌলিক পরিবর্তনের (ওপেনিং, এডিটিং, সেভিং, সার্চিং) জন্য `nano` এডিটর হল সবচেয়ে সহজ। যাইহোক, একটি টেক্সট টার্মিনালে পাওয়ার ব্যবহারকারীর জন্য, Vim (`vi`) এর কোনো বিকল্প নেই, যা শেখা কঠিন কিন্তু দ্রুত এবং সম্পূর্ণ বৈশিষ্ট্যযুক্ত এডিটর। অনেক লোক ক্লাসিক Emacs ব্যবহার করে, বিশেষ করে বড় এডিটিং কাজের জন্য। (অবশ্যই, যেকোন আধুনিক সফটওয়্যার ডেভেলপার একটি বিস্তৃত প্রকল্পে কাজ করে শুধুমাত্র একটি টেক্সট-বেসড এডিটর ব্যবহার করার সম্ভাবনা নেই এবং আধুনিক গ্রাফিকাল আইডিই এবং সরঞ্জামগুলির সাথেও পরিচিত হওয়া উচিত।)
- ডকুমেন্টেশন সন্ধান করা:
- `man` দিয়ে অফিসিয়াল ডকুমেন্টেশন পড়তে জানা (জানতে ইচ্ছুকদের জন্য, `man man` সেকশন নাম্বারগুলো তালিকা করে, যেমন 1 হল "রেগুলার" কমান্ড, 5 হল ফাইল/কনভেনশন, এবং 8 হল অ্যাডমিনিস্ট্রেশন)। `apropos` দিয়ে ম্যান পেজগুলো খুঁজুন।
- জানা যে কিছু কমান্ড এক্সিকিউটেবল নয়, বরং Bash বিল্টইন, এবং আপনি `help` এবং `help -d` দিয়ে এগুলোর সাহায্য পেতে পারেন। আপনি `type command` ব্যবহার করে জানতে পারবেন যে একটি কমান্ড এক্সিকিউটেবল, শেল বিল্টইন নাকি একটি অ্যালায়াস।
- `curl cheat.sh/command` একটি শেল কমান্ড ব্যবহার করার সাধারণ উদাহরণসহ একটি সংক্ষিপ্ত "চিট শিট" দেবে।
- আউটপুট এবং ইনপুট রিডিরেকশন সম্পর্কে জানুন `>` এবং `<` এবং পাইপ ব্যবহার করে `|`. জানুন `>` আউটপুট ফাইলটি ওভাররাইট করে এবং `>>` অ্যাপেন্ড করে। stdout এবং stderr সম্পর্কে জানুন।
- ফাইল গ্লব এক্সপ্যানশন সম্পর্কে জানুন `*` (এবং সম্ভবত `?` এবং `[`...`]`) এবং কোটিং এবং ডাবল `"` এবং সিঙ্গেল `'` কোটের মধ্যে পার্থক্য। (নিচে ভেরিয়েবল এক্সপ্যানশন সম্পর্কে আরও দেখুন।)
- ব্যাস জব ম্যানেজমেন্টের সাথে পরিচিত হন: `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill`, ইত্যাদি।
- `ssh` জানুন এবং পাসওয়ার্ডহীন অথেন্টিকেশনের মূল বিষয়গুলি জানুন `ssh-agent`, `ssh-add` ইত্যাদির মাধ্যমে।
- মৌলিক ফাইল ব্যবস্থাপনা: `ls` এবং `ls -l` (বিশেষ করে, `ls -l`-এর প্রতিটি কলামের অর্থ কী তা শিখুন), `less`, `head`, `tail` এবং `tail -f` (বা এমনকি আরও ভাল, `less +F`), `ln` এবং `ln -s` (হার্ড বনাম সফ্ট লিঙ্কের পার্থক্য এবং সুবিধাগুলি শিখুন), `chown`, `chmod`, `du` (ডিস্ক ব্যবহারের একটি দ্রুত সারসংক্ষেপের জন্য: `du -hs *`)। ফাইল সিস্টেম ব্যবস্থাপনার জন্য, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`। শিখুন একটি ইনোড কী (`ls -i` বা `df -i`)।
- মৌলিক নেটওয়ার্ক ম্যানেজমেন্ট: `ip` অথবা `ifconfig`, `dig`, `traceroute`, `route`
- একটি ভার্সন কন্ট্রোল ম্যানেজমেন্ট সিস্টেম শিখুন এবং ব্যবহার করুন, যেমন `git`
- রেগুলার এক্সপ্রেশন ভালোভাবে জানুন এবং `grep`/`egrep` এর বিভিন্ন ফ্ল্যাগ সম্পর্কে জানুন। `-i`, `-o`, `-v`, `-A`, `-B`, এবং `-C` অপশনগুলি জানার মতো।
- প্যাকেজ খুঁজে বের করতে এবং ইনস্টল করতে `apt-get`, `yum`, `dnf` অথবা `pacman` (ডিস্ট্রোর উপর নির্ভর করে) ব্যবহার করতে শিখুন। এবং নিশ্চিত করুন যে পাইথন-ভিত্তিক কমান্ড-লাইন টুল ইনস্টল করার জন্য আপনার `pip` আছে (নিচে কয়েকটি `pip` এর মাধ্যমে ইনস্টল করা সবচেয়ে সহজ)।
## দৈনন্দিন ব্যবহার
- Bash-এ, **Tab** ব্যবহার করুন আর্গুমেন্ট সম্পূর্ণ করতে বা সব উপলব্ধ কমান্ডের তালিকা দেখতে এবং **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-স্টাইলের কী-বাঁধাই পছন্দ করেন, তাহলে `set -o vi` ব্যবহার করুন (এবং `set -o emacs` এটিকে ফিরিয়ে দিতে)।
- লম্বা কমান্ডগুলি সম্পাদনা করার জন্য, আপনার সম্পাদক সেট করার পরে (যেমন `export EDITOR=vim`), **ctrl-x** **ctrl-e** বর্তমান কমান্ডটিকে মাল্টি-লাইন সম্পাদনার জন্য একটি সম্পাদকে খুলবে। অথবা vi স্টাইলে, **escape-v**
- সাম্প্রতিক কমান্ডগুলি দেখতে, `history` ব্যবহার করুন। আবার চালানোর জন্য `!n` (যেখানে `n` হল কমান্ড নম্বর) দিয়ে অনুসরণ করুন। এছাড়াও অনেক সংক্ষিপ্ত রূপ রয়েছে যা আপনি ব্যবহার করতে পারেন, সম্ভবত সবচেয়ে দরকারী হল শেষ আর্গুমেন্টের জন্য `!$` এবং শেষ কমান্ডের জন্য `!!` (ম্যান পেজে "HISTORY EXPANSION" দেখুন)। যাইহোক, এগুলি প্রায়শই **ctrl-r** এবং **alt-.** দিয়ে সহজেই প্রতিস্থাপন করা যায়।
- `cd` দিয়ে আপনার হোম ডিরেক্টরিতে যান। `~` প্রিফিক্স (যেমন `~/.bashrc`) দিয়ে আপনার হোম ডিরেক্টরির সাথে সম্পর্কিত ফাইলগুলিতে অ্যাক্সেস করুন। `sh` স্ক্রিপ্টগুলিতে হোম ডিরেক্টরিকে `$HOME` হিসাবে উল্লেখ করুন।
- পূর্ববর্তী ওয়ার্কিং ডিরেক্টরিতে ফিরে যেতে: `cd -`
- আপনি যদি একটি কমান্ড টাইপ করার অর্ধেক পথ অতিক্রম করেন কিন্তু আপনার মন পরিবর্তন করেন, শুরুতে একটি `#` যোগ করতে **alt-#** টিপুন এবং এটি একটি মন্তব্য হিসাবে লিখুন (বা **ctrl-a**, ** ব্যবহার করুন #**, **এন্টার**)। তারপর আপনি কমান্ড ইতিহাসের মাধ্যমে এটিতে ফিরে আসতে পারেন।
- `xargs` (বা `parallel`) ব্যবহার করুন। এটা খুবই শক্তিশালী। মনে রাখবেন আপনি প্রতি লাইনে কতগুলি আইটেম কার্যকর করবেন (`-L`) সেইসাথে সমান্তরালতা (`-P`) নিয়ন্ত্রণ করতে পারেন। আপনি যদি নিশ্চিত না হন যে এটি সঠিক কাজ করবে কিনা, প্রথমে `xargs echo` ব্যবহার করুন। এছাড়াও, `-I{}` সহজ। উদাহরণ:
```bash
find . -name '*.py' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname
```
- `pstree -p` হল প্রসেস ট্রির একটি সহায়ক প্রদর্শন।
- নাম অনুসারে প্রসেস খুঁজতে বা সিগন্যাল পাঠাতে `pgrep` এবং `pkill` ব্যবহার করুন (`-f` সহায়ক)।
- বিভিন্ন সিগন্যালগুলি জানুন যা আপনি প্রসেসগুলিতে পাঠাতে পারেন। উদাহরণস্বরূপ, একটি প্রসেস স্থগিত করতে, `kill -STOP [pid]` ব্যবহার করুন। পূর্ণ তালিকার জন্য, `man 7 signal` দেখুন।
- যদি আপনি চান যে একটি ব্যাকগ্রাউন্ড প্রসেস চিরকাল চলতে থাকে তবে `nohup` বা `disown` ব্যবহার করুন।
- `netstat -lntp` বা `ss -plat` (TCP এর জন্য; UDP এর জন্য `-u` যোগ করুন) বা `lsof -iTCP -sTCP:LISTEN -P -n` (যা macOS-এও কাজ করে) এর মাধ্যমে কোন প্রসেসগুলি শুনছে তা পরীক্ষা করুন।
- খোলা সকেট এবং ফাইলগুলির জন্য `lsof` এবং `fuser` দেখুন।
- সিস্টেম কতক্ষণ চলছে তা জানতে `uptime` বা `w` দেখুন।
- `alias` ব্যবহার করে সাধারণত ব্যবহৃত কমান্ডের জন্য শর্টকাট তৈরি করুন। উদাহরণস্বরূপ, `alias ll='ls -latr'` একটি নতুন `ll` শর্টকাট তৈরি করে।
- সাধারণত ব্যবহৃত অ্যালিয়াস, শেল সেটিংস এবং ফাংশনগুলি `~/.bashrc` এ সংরক্ষণ করুন এবং [লগইন শেলগুলির জন্য এটি সোর্স করার ব্যবস্থা করুন](http://superuser.com/a/183980/7106)। এটি আপনার সেটআপটি আপনার সমস্ত শেল সেশনে উপলব্ধ করবে।
- লগইন করার সময় যেসব কমান্ডগুলি চালানো উচিত এবং এনভাইরনমেন্ট ভেরিয়েবলের সেটিংসগুলি `~/.bash_profile` এ রাখুন। গ্রাফিক্যাল এনভাইরনমেন্ট লগইন এবং `cron` জব থেকে আপনি যে শেলগুলি লঞ্চ করেন সেগুলির জন্য আলাদা কনফিগারেশন প্রয়োজন হবে।
- বিভিন্ন কম্পিউটারের মধ্যে আপনার কনফিগারেশন ফাইলগুলি (যেমন `.bashrc` এবং `.bash_profile`) গিটের সাথে সিঙ্ক্রোনাইজ করুন।
- যখন ভেরিয়েবল এবং ফাইলের নামে হোয়াইটস্পেস থাকে তখন সাবধানতা অবলম্বন করা প্রয়োজন। আপনার ব্যাস ভেরিয়েবলগুলিকে উদ্ধৃতি দিয়ে ঘিরে রাখুন, যেমন `"$FOO"`। ফাইলের নামগুলিকে সীমাবদ্ধ করার জন্য নাল ক্যারেক্টারগুলিকে সক্ষম করতে `-0` বা `-print0` অপশনগুলিকে পছন্দ করুন, যেমন `locate -0 pattern | xargs -0 ls -al` বা `find / -print0 -type d | xargs -0 ls -al`। হোয়াইটস্পেস ধারণকারী ফাইলের নামগুলিতে একটি ফর লুপে পুনরাবৃত্তি করতে, আপনার IFS কে শুধুমাত্র একটি নিউলাইন হিসাবে সেট করুন `IFS=$'\n'` ব্যবহার করে।
- ব্যাস স্ক্রিপ্টে, ডিবাগিং আউটপুটের জন্য `set -x` (বা ভেরিয়েন্ট `set -v`, যা অপ্রসারিত ভেরিয়েবল এবং মন্তব্য সহ র কাঁচা ইনপুট লগ করে) ব্যবহার করুন। যদি আপনার কোনও ভাল কারণ না থাকে তবে স্ট্রিক্ট মোডগুলি ব্যবহার করুন: ত্রুটিগুলিতে (অ-শূন্য প্রস্থান কোড) বাতিল করতে `set -e` ব্যবহার করুন। অসেট ভেরিয়েবল ব্যবহারগুলি সনাক্ত করতে `set -u` ব্যবহার করুন। পাইপের মধ্যে ত্রুটিগুলিতে বাতিল করতে `set -o pipefail` বিবেচনা করুন (যদিও আপনি যদি এটি করেন তবে এটি সম্পর্কে আরও পড়ুন, কারণ এই বিষয়টি কিছুটা সূক্ষ্ম)। আরও জড়িত স্ক্রিপ্টের জন্য, EXIT বা ERR এ `trap` ব্যবহার করুন। একটি দরকারী অভ্যাস হল এইরকম একটি স্ক্রিপ্ট শুরু করা, যা এটিকে সাধারণ ত্রুটিগুলিকে সনাক্ত এবং বাতিল করবে এবং একটি বার্তা মুদ্রণ করবে:
```bash
set -euo pipefail
trap "echo 'error: Script failed: see failed command above'" ERR
```
- ব্যাশ স্ক্রিপ্টে, সাবশেল (যা বন্ধনী দিয়ে লেখা হয়) কমান্ড গুলোকে গ্রুপ করার একটি সুবিধাজনক উপায়। একটি সাধারণ উদাহরণ হলো অস্থায়ীভাবে একটি ভিন্ন ওয়ার্কিং ডিরেক্টরিতে যাওয়া, যেমন:
```bash
# do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir
```
- ব্যাশে, বিভিন্ন ধরণের ভেরিয়েবল সম্প্রসারণ রয়েছে। একটি ভেরিয়েবলের অস্তিত্ব পরীক্ষা করতে: `${name:?error message}`। উদাহরণস্বরূপ, যদি একটি ব্যাশ স্ক্রিপ্টের একটি একক আর্গুমেন্টের প্রয়োজন হয়, তাহলে লিখুন `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 পরীক্ষা-{a,b,c}/subtest-{1,2,3}` (যা সমস্ত সম্ভাব্য সমন্বয় প্রসারিত করে এবং একটি ডিরেক্টরি ট্রি তৈরি করে)। ব্রেস সম্প্রসারণ অন্য কোন সম্প্রসারণের আগে সঞ্চালিত হয়.
- সম্প্রসারণের ক্রম হল: বন্ধনী সম্প্রসারণ; টিল্ড বিস্তৃতি, প্যারামিটার এবং ভেরিয়েবল সম্প্রসারণ, গাণিতিক সম্প্রসারণ, এবং কমান্ড প্রতিস্থাপন (একটি বাম-থেকে-ডান ফ্যাশনে সম্পন্ন); শব্দ বিভাজন; এবং ফাইলের নাম সম্প্রসারণ। (উদাহরণস্বরূপ, `{1..20}` এর মতো একটি পরিসর `{$a..$b}` ব্যবহার করে ভেরিয়েবল দিয়ে প্রকাশ করা যায় না। পরিবর্তে `seq` বা `for` লুপ ব্যবহার করুন, যেমন, `seq $a $b` বা `for((i=a; i<=b; i++)); do... ; done`।)
- একটি কমান্ডের আউটপুট `<(কিছু কমান্ড)` (প্রসেস প্রতিস্থাপন হিসাবে পরিচিত) এর মাধ্যমে একটি ফাইলের মতো আচরণ করা যেতে পারে। উদাহরণস্বরূপ, দূরবর্তী একটির সাথে স্থানীয় `/etc/hosts` তুলনা করুন:
```sh
diff /etc/hosts <(ssh somehost cat /etc/hosts)
```
- স্ক্রিপ্ট লেখার সময় আপনি আপনার সমস্ত কোড কোঁকড়া বন্ধনীতে রাখতে চাইতে পারেন। যদি ক্লোজিং ব্রেসটি অনুপস্থিত থাকে, আপনার স্ক্রিপ্টটি একটি সিনট্যাক্স ত্রুটির কারণে কার্যকর করা থেকে আটকানো হবে। আপনার স্ক্রিপ্ট যখন ওয়েব থেকে ডাউনলোড করা হবে তখন এটি বোধগম্য হয়, কারণ এটি আংশিকভাবে ডাউনলোড করা স্ক্রিপ্টগুলিকে কার্যকর হতে বাধা দেয়:
```bash
{
# Your code here
}
```
- একটি "এখানে নথি" অনুমতি দেয় [ইনপুটের একাধিক লাইনের পুনঃনির্দেশ](https://www.tldp.org/LDP/abs/html/here-docs.html) যেন একটি ফাইল থেকে:
```
cat <<EOF
input
on multiple lines
EOF
```
- ব্যাসে, স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি উভয়ই এর মাধ্যমে পুনঃনির্দেশিত করুন: `some-command >logfile 2>&1` অথবা `some-command &>logfile`। প্রায়শই, একটি কমান্ড একটি খোলা ফাইল হ্যান্ডেলকে স্ট্যান্ডার্ড ইনপুটে রেখে না যায় তা নিশ্চিত করার জন্য, আপনি যে টার্মিনালে আছেন সেটিকে বেঁধে রেখে, `</dev/null` যোগ করাও ভালো অনুশীলন।
- হেক্স এবং দশমিক মান সহ একটি ভাল ASCII টেবিলের জন্য `man ascii` ব্যবহার করুন। সাধারণ এনকোডিং তথ্যের জন্য, `man unicode`, `man utf-8`, এবং `man latin1` সহায়ক।
- স্ক্রিন মাল্টিপ্লেক্স করতে `screen` বা [`tmux`](https://tmux.github.io/) ব্যবহার করুন, বিশেষ করে দূরবর্তী ssh সেশনে উপযোগী এবং কোনো সেশনে বিচ্ছিন্ন ও পুনরায় সংযুক্ত করতে। `byobu` আরও তথ্য এবং সহজ ব্যবস্থাপনা প্রদান করে স্ক্রিন বা tmux উন্নত করতে পারে। শুধুমাত্র সেশন স্থিরতার জন্য একটি আরও ন্যূনতম বিকল্প হল [`dtach`](https://github.com/bogner/dtach)।
- ssh-এ, কিভাবে `-L` বা `-D` (এবং মাঝে মাঝে `-R`) দিয়ে টানেল পোর্ট করতে হয় তা জানা দরকারী, যেমন একটি দূরবর্তী সার্ভার থেকে ওয়েব সাইট অ্যাক্সেস করতে।
- আপনার ssh কনফিগারেশনে কয়েকটি অপ্টিমাইজেশান করা দরকারী হতে পারে; উদাহরণস্বরূপ, এই `~/.ssh/config` নির্দিষ্ট নেটওয়ার্ক পরিবেশে ড্রপ সংযোগগুলো এড়াতে সেটিংস ধারণ করে, কম্প্রেশন ব্যবহার করে (যা কম-ব্যান্ডউইথ সংযোগে scp-এর জন্য সহায়ক), এবং স্থানীয় নিয়ন্ত্রণ ফাইল সহ একই সার্ভারে মাল্টিপ্লেক্স চ্যানেলগুলো ব্যবহার করে:
```
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
```
- ssh-এর সাথে সংশ্লিষ্ট কিছু অন্যান্য বিকল্প নিরাপত্তা সংবেদনশীল এবং সাবধানতার সাথে সক্ষম করা উচিত, যেমন প্রতিটি সাবনেট বা হোস্ট বা বিশ্বস্ত নেটওয়ার্কগুলিতে: `StrictHostKeyChecking=no`, `ForwardAgent=yes`
- [`mosh`](https://mosh.org/) ssh-এর একটি বিকল্প বিবেচনা করুন যা UDP ব্যবহার করে, বিচ্ছিন্ন সংযোগ এড়িয়ে যায় এবং রাস্তায় সুবিধা যোগ করে (সার্ভার-পার্শ্ব সেটআপ প্রয়োজন)।
- অক্টাল আকারে একটি ফাইলের অনুমতি পেতে, যা সিস্টেম কনফিগারেশনের জন্য উপযোগী কিন্তু `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)) ব্যবহার করুন।
- বর্তমান ডিরেক্টরির (এবং সাবডিয়ার) সমস্ত ফাইলের জন্য একটি সাধারণ ওয়েব সার্ভারের জন্য, আপনার নেটওয়ার্কে যে কেউ উপলব্ধ, ব্যবহার করুন:
`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
```
## ফাইল এবং ডেটা প্রসেসিং
- বর্তমান ডিরেক্টরিতে নাম অনুসারে একটি ফাইল সনাক্ত করতে, `find . -iname '*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`
- মার্কডাউন, এইচটিএমএল এবং সব ধরনের নথি রূপান্তরের জন্য, [`pandoc`](http://pandoc.org/) চেষ্টা করুন। উদাহরণস্বরূপ, একটি মার্কডাউন ডকুমেন্টকে ওয়ার্ড ফরম্যাটে রূপান্তর করতে: `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-সম্পর্কিত কাজের জন্য অপরিহার্য .
- ইউনিকের `-u` এবং `-d` বিকল্পগুলি সহ `sort` এবং `uniq` সম্পর্কে জানুন -- নীচে ওয়ান-লাইনার দেখুন। এছাড়াও `comm` দেখুন।
- টেক্সট ফাইল ম্যানিপুলেট করতে `cut`, `paste` এবং `join` সম্পর্কে জানুন। অনেকে `cut` ব্যবহার করেন কিন্তু `join` ভুলে যান।
- নতুন লাইন (`-l`), অক্ষর (`-m`), শব্দ (`-w`) এবং বাইট (`-c`) গণনা করতে `wc` সম্পর্কে জানুন।
- stdin থেকে ফাইলে অনুলিপি করতে `tee` সম্পর্কে জানুন এবং stdout এর মতো `ls -al | tee file.txt`
- গ্রুপিং, রিভার্সিং ফিল্ড এবং পরিসংখ্যানগত গণনা সহ আরও জটিল গণনার জন্য, [`datamash`](https://www.gnu.org/software/datamash/) বিবেচনা করুন।
- জেনে রাখুন যে লোকেল সূক্ষ্ম উপায়ে অনেক কমান্ড লাইন সরঞ্জামকে প্রভাবিত করে, যার মধ্যে বাছাই ক্রম (সংযোজন) এবং কর্মক্ষমতা রয়েছে। বেশিরভাগ লিনাক্স ইন্সটলেশন ইউএস ইংলিশের মতো স্থানীয় সেটিংয়ে `LANG` বা অন্যান্য লোকেল ভেরিয়েবল সেট করবে। কিন্তু সচেতন থাকুন যদি আপনি লোকেল পরিবর্তন করেন তাহলে সাজানো পরিবর্তন হবে। এবং জেনে রাখুন i18n রুটিনগুলি সাজানোর বা অন্যান্য কমান্ডগুলি *অনেকবার* ধীর গতিতে চালাতে পারে। কিছু পরিস্থিতিতে (যেমন নীচের সেট অপারেশন বা স্বতন্ত্রতা অপারেশন) আপনি নিরাপদে ধীর i18n রুটিন সম্পূর্ণরূপে উপেক্ষা করতে পারেন এবং `export LC_ALL=C` ব্যবহার করে ঐতিহ্যগত বাইট-ভিত্তিক সাজানোর ক্রম ব্যবহার করতে পারেন।
- আপনি `TZ=Pacific/Fiji date`-এর মতো পরিবেশ পরিবর্তনশীল সেটিংসের সাথে তার আহ্বানের প্রিফিক্সিং দ্বারা একটি নির্দিষ্ট কমান্ডের পরিবেশ সেট করতে পারেন।
- সাধারণ ডেটা মুংিংয়ের জন্য মৌলিক `awk` এবং `sed` জানুন। উদাহরণের জন্য [ওয়ান-লাইনার](#ওয়ান-লাইনার) দেখুন।
- এক বা একাধিক ফাইলের জায়গায় একটি স্ট্রিং এর সমস্ত ঘটনা প্রতিস্থাপন করতে:
```sh
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
```
- একাধিক ফাইলের নাম পরিবর্তন করতে এবং/অথবা ফাইলগুলির মধ্যে অনুসন্ধান এবং প্রতিস্থাপন করতে, [`repren`](https://github.com/jlevy/repren) চেষ্টা করুন। (কিছু ক্ষেত্রে `rename` কমান্ড একাধিক নাম পরিবর্তনের অনুমতি দেয়, তবে সতর্ক থাকুন কারণ এর কার্যকারিতা সমস্ত লিনাক্স বিতরণে এক নয়।)
```sh
# Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from '(.*)\.bak' --to '\1' *.bak
# Same as above, using rename, if available:
rename '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 empty && rsync -r --delete empty/ 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 status=progress`
- একটি ফাইল থেকে এলোমেলো লাইনগুলি এলোমেলো করতে বা নির্বাচন করতে `shuf` ব্যবহার করুন।
- `sort` এর বিকল্পগুলি জানুন। সংখ্যার জন্য, মানুষের-পাঠযোগ্য সংখ্যাগুলি পরিচালনা করার জন্য `-n`, বা `-h` ব্যবহার করুন (যেমন `du -h` থেকে)। কীগুলি কীভাবে কাজ করে তা জানুন (`-t` এবং `-k`)। বিশেষ করে, খেয়াল রাখুন যে শুধুমাত্র প্রথম ক্ষেত্র অনুসারে সাজানোর জন্য আপনাকে `-k1,1` লিখতে হবে; `-k1` মানে পুরো লাইন অনুযায়ী সাজানো। স্থিতিশীল সাজানো (`sort -s`) দরকারী হতে পারে। উদাহরণস্বরূপ, প্রথমে ক্ষেত্র 2 দ্বারা বাছাই করতে, তারপর ক্ষেত্র 1 দ্বারা দ্বিতীয়ভাবে, আপনি `sort -k1,1 | sort -s -k2,2`
- আপনি যদি কখনও Bash-এ একটি কমান্ড লাইনে একটি ট্যাব লিটারেল লিখতে চান (যেমন -t আর্গুমেন্ট সাজানোর জন্য), **ctrl-v** **[Tab]** টিপুন বা `$'\t'` (পরেরটি ভাল কারণ আপনি এটি কপি/পেস্ট করতে পারেন)।
- সোর্স কোড প্যাচ করার স্ট্যান্ডার্ড টুল হল `diff` এবং `patch`। এছাড়াও একটি পার্থক্যের সারাংশ পরিসংখ্যানের জন্য `diffstat` এবং একটি পাশাপাশি পার্থক্যের জন্য `sdiff` দেখুন। নোট `diff -r` সম্পূর্ণ ডিরেক্টরির জন্য কাজ করে। `diff -r tree1 tree2 | ব্যবহার করুন পরিবর্তনের সারাংশের জন্য diffstat`। ফাইল তুলনা এবং সম্পাদনা করতে `vimdiff` ব্যবহার করুন।
- বাইনারি ফাইলের জন্য, সাধারণ হেক্স ডাম্পের জন্য `hd`, `hexdump` বা `xxd` এবং বাইনারি সম্পাদনার জন্য `bvi`, `hexedit` বা `biew` ব্যবহার করুন।
- এছাড়াও বাইনারি ফাইলের জন্য, `strings` (প্লাস `grep`, ইত্যাদি) আপনাকে পাঠ্যের বিট খুঁজে পেতে দেয়।
- বাইনারি ডিফের জন্য (ডেল্টা কম্প্রেশন), `xdelta3` ব্যবহার করুন।
- টেক্সট এনকোডিং রূপান্তর করতে, `iconv` চেষ্টা করুন। অথবা আরও উন্নত ব্যবহারের জন্য `uconv`; এটি কিছু উন্নত ইউনিকোড জিনিস সমর্থন করে। উদাহরণ স্বরূপ:
```sh
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x '::Any-Hex;' < input.txt
uconv -f utf-8 -t utf-8 -x '::Any-Name;' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC;' < input.txt > output.txt
```
- ফাইলগুলিকে টুকরো টুকরোতে বিভক্ত করতে, দেখুন `split` (আকার দ্বারা বিভক্ত করতে) এবং `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` ব্যবহার করুন ([স্পার্স ফাইল তৈরি করে](https://en.wikipedia.org/wiki/Sparse_file)), `fallocate` (ext4, xfs, btrfs এবং ocfs2 ফাইলসিস্টেম), `xfs_mkfile ` (প্রায় কোনো ফাইল সিস্টেম, xfsprogs প্যাকেজে আসে), `mkfile` (সোলারিস, ম্যাক ওএসের মতো ইউনিক্স-এর মতো সিস্টেমের জন্য)।
## সিস্টেম ডিবাগিং
- ওয়েব ডিবাগিংয়ের জন্য, `curl` এবং `curl -I` সুবিধাজনক, অথবা তাদের `wget` সমতুল্য, অথবা আরও আধুনিক [`httpie`](https://github.com/jkbrzt/httpie)।
- বর্তমান সিপিইউ/ডিস্কের অবস্থা জানতে, ক্লাসিক টুল হল `top` (বা ভালো `top`), `iostat` এবং `iotop`। মৌলিক CPU এবং বিশদ প্রতি-পার্টিশন ডিস্ক পরিসংখ্যান এবং কর্মক্ষমতা অন্তর্দৃষ্টির জন্য `iostat -mxz 15` ব্যবহার করুন।
- নেটওয়ার্ক সংযোগের বিবরণের জন্য, `netstat` এবং `ss` ব্যবহার করুন।
- একটি সিস্টেমে কী ঘটছে তার একটি দ্রুত ওভারভিউয়ের জন্য, `dstat` বিশেষভাবে কার্যকর। বিশদ বিবরণ সহ বিস্তৃত ওভারভিউয়ের জন্য, [`glances`](https://github.com/nicolargo/glances) ব্যবহার করুন।
- মেমরি স্ট্যাটাস জানতে, চালান এবং `free` এবং `vmstat` এর আউটপুট বুঝুন। বিশেষ করে, "cached" মানটি লিনাক্স কার্নেল দ্বারা ফাইল ক্যাশে হিসাবে ধারণ করা মেমরি, তাই কার্যকরভাবে "মুক্ত" মানের দিকে গণনা করা হয়।
- জাভা সিস্টেম ডিবাগিং মাছের একটি ভিন্ন কেটলি, কিন্তু ওরাকল এবং অন্যান্য কিছু 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 এর সাথে আসে) ওয়েব সার্ভারের কর্মক্ষমতা দ্রুত এবং নোংরা চেক করার জন্য সহায়ক। আরো জটিল লোড পরীক্ষার জন্য, `siege` চেষ্টা করুন।
- আরও গুরুতর নেটওয়ার্ক ডিবাগিংয়ের জন্য, [`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` হল প্রসেস আইডি বা পিড)।
- অতীতে কেন কিছু ভুল হয়েছে তা ডিবাগ করার সময়, [`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 তথ্য) অথবা `lsb_release -a` (Linux distro info) দিয়ে কোন OS-এ আছেন তা পরীক্ষা করুন।
- 'dmesg' ব্যবহার করুন যখনই কিছু সত্যিই মজার কাজ করে (এটি হার্ডওয়্যার বা ড্রাইভার সমস্যা হতে পারে)।
- যদি আপনি একটি ফাইল মুছে ফেলেন এবং এটি `du` দ্বারা রিপোর্ট করা প্রত্যাশিত ডিস্কের স্থান খালি না করে, তাহলে ফাইলটি একটি প্রক্রিয়ার দ্বারা ব্যবহার করা হচ্ছে কিনা তা পরীক্ষা করুন:
`lsof | grep deleted | grep "filename-of-my-big-file"`
## এক-লাইনার
কমান্ডগুলিকে একত্রিত করার কয়েকটি উদাহরণ:
- কখনো কখনো এটা অসাধারণভাবে সহায়ক যে আপনি `সর্ট`/`ইউনিক` এর মাধ্যমে টেক্সট ফাইলের ইন্টারসেকশন, ইউনিয়ন এবং পার্থক্য সেট করতে পারেন। ধরুন `a` এবং `b` হল পাঠ্য ফাইল যা ইতিমধ্যেই অনন্য। এটি দ্রুত, এবং অনেক গিগাবাইট পর্যন্ত নির্বিচারে আকারের ফাইলগুলিতে কাজ করে। (সর্ট মেমরি দ্বারা সীমাবদ্ধ নয়, যদিও `/tmp` একটি ছোট রুট পার্টিশনে থাকলে `-T` বিকল্পটি ব্যবহার করতে হতে পারে) উপরে `LC_ALL` এবং `সর্ট` এর `-u` সম্পর্কে নোটটিও দেখুন (নীচে স্পষ্টতার জন্য ছেড়ে দেওয়া হয়েছে)।
```sh
sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b
```
- দুটি JSON ফাইল প্রিন্ট-প্রিন্ট করুন, তাদের সিনট্যাক্সকে স্বাভাবিক করুন, তারপর রঙ করুন এবং ফলাফল পৃষ্ঠায় করুন:
```
diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
```
- `grep . *` ব্যবহার করুন। একটি ডিরেক্টরির সমস্ত ফাইলের বিষয়বস্তু দ্রুত পরীক্ষা করতে (যাতে প্রতিটি লাইন ফাইলের নামের সাথে যুক্ত করা হয়), বা `head-100 *` (তাই প্রতিটি ফাইলের একটি শিরোনাম থাকে)। এটি `/sys`, `/proc`, `/etc`-এর মতো কনফিগার সেটিংসে ভরা ডিরেক্টরির জন্য উপযোগী হতে পারে।
- একটি টেক্সট ফাইলের তৃতীয় কলামে সমস্ত সংখ্যার সমষ্টি (এটি সম্ভবত 3X দ্রুত এবং সমতুল্য Python থেকে 3X কম কোড):
```sh
awk '{ x += $3 } END { print x }' myfile
```
- ফাইলের তালিকা আকার/তারিখ দেখতে, এটি একটি পুনরাবৃত্তিমূলক `ls -l` এর মতো তবে `ls` এর চেয়ে পড়া সহজ।:
```sh
find . -type f -ls
```
- বলুন আপনার কাছে একটি টেক্সট ফাইল আছে, যেমন একটি ওয়েব সার্ভার লগ, এবং একটি নির্দিষ্ট মান যা কিছু লাইনে প্রদর্শিত হয়, যেমন একটি `acct_id` প্যারামিটার যা URL-এ উপস্থিত। আপনি যদি প্রতিটি `acct_id`-এর জন্য কতগুলি অনুরোধের হিসাব চান:
```sh
egrep -o 'acct_id=[0-9]+' access.log | cut -d= -f2 | sort | uniq -c | sort -rn
```
- ক্রমাগত পরিবর্তনগুলি পর্যবেক্ষণ করতে, `watch` ব্যবহার করুন, যেমন `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`: গণিতিক বা বুলিয়ান অপারেশন পারফরম করুন বা নির্ধারিত সাধারণ অপারেশন সম্পাদনা করুন
- `m4`: সহজ ম্যাক্রো প্রসেসর
- `yes`: একটি স্ট্রিং অনেকবার প্রিন্ট করুন
- `cal`: সুন্দর ক্যালেন্ডার
- `env`: একটি কমান্ড চালান (স্ক্রিপ্টে গুরুত্বপূর্ণ)
- `printenv`: পরিবেশের ভেরিয়েবল প্রিন্ট করুন (বাগ খোঁজার জন্য এবং স্ক্রিপ্টিং জন্য গুরুত্বপূর্ণ)
- `look`: একটি স্ট্রিং দিয়ে শুরু হওয়া ইংরেজি শব্দ (বা একটি ফাইলের লাইন) খুঁজুন
- `cut`, `paste` এবং `join`: ডেটা পরিবর্তন করুন
- `fmt`: টেক্সট প্যারাগ্রাফ ফর্ম্যাট করুন
- `pr`: টেক্সট পৃষ্ঠাগুলি / কলামে ফর্ম্যাট করুন
- `fold`: টেক্সটের লাইনগুলি প্রস্তুত করুন
- `column`: টেক্সট ফিল্ডগুলি সারিবদ্ধ, স্থির-প্রস্থ কলাম বা টেবিলে ফর্ম্যাট করুন
- `expand` এবং `unexpand`: ট্যাব এবং স্পেস মধ্যে পরিবর্তন করুন
- `nl`: লাইন নম্বর যোগ করুন
- `seq`: সংখ্যা প্রিন্ট করুন
- `bc`: ক্যালকুলেটর
- `factor`: গুণনীয় সংখ্যা
- [`gpg`](https://gnupg.org/): ফাইলগুলি এনক্রিপ্ট এবং সাইন করুন
- `toe`: টার্মিনফো এন্ট্রির টেবিল
- `nc`: নেটওয়ার্ক ডিবাগিং এবং ডেটা ট্রান্সফার
- `socat`: সকেট রিলে এবং টিসিপি পোর্ট ফরওয়ার্ডার (নেটক্যাটের মতো)
- [`slurm`](https://github.com/mattthias/slurm): নেটওয়ার্ক ট্রাফিক ভিজ্যুয়ালাইজেশন
- `dd`: ফাইল বা ডিভাইস মধ্যে ডেটা মুভিং
- `file`: একটি ফাইলের প্রকার সনাক্ত করুন
- `tree`: ডিরেক্টরি এবং সাবডিরেক্টরিগুলি একটি নেস্টিং ট্রি হিসাবে প্রদর্শন করুন; এলএসের মতো কিন্তু রিকার্সিভ
- `stat`: ফাইল তথ্য
- `time`: কমান্ড চালানো এবং সময় গণনা করুন
- `timeout`: নির্ধারিত সময়ের জন্য একটি কমান্ড চালানো এবং নির্ধারিত সময়ের পর প্রসেস বন্ধ করুন
- `lockfile`: কেবলমাত্র `rm -f` দ্বারা সরাতে পারা সেমাফোর ফাইল তৈরি করুন
- `logrotate`: লগ ঘুরানো, কম্প্রেস এবং মেইল করুন
- `watch`: ফলাফল প্রদর্শন করে একটি কমান্ড পুনরায় ওয়ালা পরিবর্তনগুলি হাইলাইট করুন
- [`when-changed`](https://github.com/joh/when-changed): ফাইল পরিবর্তন দেখা যায় যখনই আপনি নির্দিষ্ট কোনও কমান্ড চালানো হয়। দেখুন `inotifywait` এবং `entr` এও।
- `tac`: ফাইলগুলি উল্টে প্রিন্ট করুন
- `comm`: সারি অনুযায়ী বিন্যাসিত ফাইলগুলি তুলনা করুন
- `strings`: বাইনারি ফাইল থেকে টেক্সট উত্তোলন করুন
- `tr`: অক্ষর অনুবাদ বা পরিবর্তন
- `iconv` বা `uconv`: টেক্সট ইনকোডিং এর জন্য রূপান্তর
- `split` এবং `csplit`: ফাইলগুলি বিভাজন করুন
- `sponge`: সমস্ত ইনপুট পড়ে পর লেখার আগে পড়ে, এটি একই ফাইল থেকে পড়া এবং লেখার জন্য উপযোগী, উদাহরণস্বরূপ, `grep -v something some-file | sponge some-file`
- `units`: একক রূপান্তর এবং গণনা; ফারলং প্রতি ফর্টনাইট থেকে টুইপস প্রতি ব্লিংকে রূপান্তর করে (দেখুন আরও `/usr/share/units/definitions.units`)
- `apg`: এলোমেলো পাসওয়ার্ড তৈরি করুন
- `xz`: উচ্চ-অনুপাতে ফাইল সংক্ষেপণ
- `ldd`: ডায়নামিক লাইব্রেরি তথ্য
- `nm`: অবজেক্ট ফাইল থেকে সিম্বলগুলি
- `ab` বা [`wrk`](https://github.com/wg/wrk): ওয়েব সার্ভারগুলির বেঞ্চমার্ক
- `strace`: সিস্টেম কল ডিবাগিং
- [`mtr`](http://www.bitwizard.nl/mtr/): নেটওয়ার্ক ডিবাগিং জন্য ভালো ট্রেসারুট
- `cssh`: ভিজুয়াল সমতল শেল
- `rsync`: এসএসএইচ ও লোকাল ফাইল সিস্টেমে ফাইল এবং ফোল্ডার সিঙ্ক
- [`wireshark`](https://wireshark.org/) এবং [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): প্যাকেট ক্যাপচার এবং নেটওয়ার্ক ডিবাগিং
- [`ngrep`](http://ngrep.sourceforge.net/): নেটওয়ার্ক লেয়ারের জন্য গ্রেপ
- `host` এবং `dig`: DNS লুকাপ
- `lsof`: প্রসেস ফাইল ডেসক্রিপ্টর এবং সকেট তথ্য
- `dstat`: উপযুক্ত সিস্টেম পরিস্থিতি
- [`glances`](https://github.com/nicolargo/glances): উচ্চ স্তরের, মাল্টি-সাবসিস্টেম ওভারভিউ
- `iostat`: ডিস্ক ব্যবহারের পরিস্থিতি
- `mpstat`: সিপিইউ ব্যবহারের পরিস্থিতি
- `vmstat`: মেমোরি ব্যবহারের পরিস্থিতি
- `htop`: টপের উন্নত সংস্করণ
- `last`: লগইন ইতিহাস
- `w`: কে লগ ইন করেছেন
- `id`: ব্যবহারকারী / গ্রুপ পরিচিতি তথ্য
- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): ঐতিহাসিক সিস্টেম পরিস্থিতি
- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) বা [`nethogs`](https://github.com/raboof/nethogs): সকেট বা প্রসেস দ্বারা নেটওয়ার্ক ব্যবহার
- `ss`: সকেট পরিস্থিতি
- `dmesg`: বুট এবং সিস্টেম ত্রুটি বার্তা
- `sysctl`: রান টাইমে লিনাক্স কার্নেল প্যারামিটার দেখুন এবং কনফিগার করুন
- `hdparm`: SATA/ATA ডিস্ক পরিবর্তন / কার্যকলাপ / পারফরম্যান্স
- `lsblk`: ব্লক ডিভাইস তালিকা: আপনার ডিস্ক এবং ডিস্ক পার্টিশনগুলির একটি ট্রি ভিউ
- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: হার্ডওয়্যার তথ্য, যেমন CPU, BIOS, RAID, গ্রাফিক্স, ডিভাইস, ইত্যাদি।
- `lsmod` এবং `modinfo`: কার্নেল মডিউলগুলির বিবরণ তালিকা করুন এবং দেখান
- `fortune`, `ddate`, এবং `sl`: আহম, হুম, এটা স্টিম লোকোমোটিভগুলি এবং জিপি উক্তিগুলি যেমন আপনি যোগ্য মনে করেন তা নির্ভর করে
## শুধুমাত্র ম্যাকওএস
এইগুলি ম্যাকওএসে *শুধুমাত্র* প্রাসঙ্গিক আইটেম।
- `brew` (হোমব্রু) এবং/অথবা `port` (ম্যাকপোর্টস) সহ প্যাকেজ ব্যবস্থাপনা। এগুলি উপরের কমান্ডগুলির অনেকগুলি macOS-এ ইনস্টল করতে ব্যবহার করা যেতে পারে।
- যেকোনো কমান্ডের আউটপুট একটি ডেস্কটপ অ্যাপে `pbcopy` সহ কপি করুন এবং `pbpaste` দিয়ে একটি থেকে ইনপুট পেস্ট করুন।
- ম্যাকোস টার্মিনালে বিকল্প কীটিকে একটি Alt কী হিসাবে সক্রিয় করতে (যেমন উপরের কমান্ডগুলিতে যেমন **alt-b**, **alt-f**, ইত্যাদি ব্যবহার করা হয়েছে), পছন্দগুলি খুলুন -> প্রোফাইল -> কীবোর্ড এবং "মেটা কী হিসাবে বিকল্প ব্যবহার করুন" নির্বাচন করুন।
- একটি ডেস্কটপ অ্যাপ দিয়ে একটি ফাইল খুলতে, `open` বা `open -a /Applications/Whatever.app` ব্যবহার করুন।
- স্পটলাইট: `mdfind` দিয়ে ফাইল অনুসন্ধান করুন এবং `mdls` দিয়ে মেটাডেটা (যেমন ফটো EXIF তথ্য) তালিকাভুক্ত করুন।
- সচেতন থাকুন macOS বিএসডি ইউনিক্সের উপর ভিত্তি করে, এবং অনেক কমান্ডের (উদাহরণস্বরূপ `ps`, `ls`, `tail`, `awk`, `sed`) লিনাক্স থেকে অনেক সূক্ষ্ম পরিবর্তন রয়েছে, যা মূলত সিস্টেম V দ্বারা প্রভাবিত। -স্টাইল ইউনিক্স এবং জিএনইউ টুলস। আপনি প্রায়শই একটি ম্যান পৃষ্ঠার শিরোনাম "BSD জেনারেল কমান্ড ম্যানুয়াল" উল্লেখ করে পার্থক্যটি বলতে পারেন। কিছু ক্ষেত্রে GNU সংস্করণগুলিও ইনস্টল করা যেতে পারে (যেমন GNU awk এবং sed এর জন্য `gawk` এবং `gsed`)। ক্রস-প্ল্যাটফর্ম ব্যাশ স্ক্রিপ্ট লিখলে, এই ধরনের কমান্ডগুলি এড়িয়ে চলুন (উদাহরণস্বরূপ, Python বা `perl` বিবেচনা করুন) বা সাবধানে পরীক্ষা করুন।
- macOS প্রকাশের তথ্য পেতে, `sw_vers` ব্যবহার করুন।
## শুধুমাত্র উইন্ডোজ
এই আইটেমগুলি প্রাসঙ্গিক *শুধুমাত্র* উইন্ডোজে।
### উইন্ডোজের অধীনে ইউনিক্স টুল পাওয়ার উপায়
- [Cygwin](https://cygwin.com/) ইনস্টল করে মাইক্রোসফট উইন্ডোজের অধীনে ইউনিক্স শেলের পাওয়ার অ্যাক্সেস করুন। এই নথিতে বর্ণিত বেশিরভাগ জিনিসই বাক্সের বাইরে কাজ করবে।
- Windows 10-এ, আপনি [Windows Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about) ব্যবহার করতে পারেন, যা ইউনিক্স কমান্ড লাইন ইউটিলিটিগুলির সাথে একটি পরিচিত ব্যাশ পরিবেশ প্রদান করে।
- যদি আপনি মূলত উইন্ডোজে জিএনইউ ডেভেলপার টুলস (যেমন জিসিসি) ব্যবহার করতে চান, তাহলে [মিনজিডব্লিউ](http://www.mingw.org/) এবং এর [এমএসওয়াইএস](http://www.mingw.org/wiki/msys) প্যাকেজটি বিবেচনা করুন, যা ব্যাস, গাওক, মেক এবং গ্রেপের মতো ইউটিলিটি প্রদান করে। সাইগউইনের তুলনায় এমএসওয়াইএসের সব ফিচার নেই। ইউনিক্স টুলসের নেটিভ উইন্ডোজ পোর্ট তৈরি করার জন্য মিনজিডব্লিউ বিশেষভাবে উপযোগী।
- উইন্ডোজের অধীনে ইউনিক্সের চেহারা এবং অনুভূতি পাওয়ার আরেকটি বিকল্প হল [ক্যাশ](https://github.com/dthree/cash)। মনে রাখবেন যে এই পরিবেশে শুধুমাত্র খুব কম ইউনিক্স কমান্ড এবং কমান্ড-লাইন বিকল্প উপলব্ধ।
### দরকারী উইন্ডোজ কমান্ড লাইন টুল
- আপনি `wmic` শিখে এবং ব্যবহার করে কমান্ড লাইন থেকে বেশিরভাগ উইন্ডোজ সিস্টেম অ্যাডমিনিস্ট্রেশন কাজ সম্পাদন এবং স্ক্রিপ্ট করতে পারেন।
- নেটিভ কমান্ড-লাইন উইন্ডোজ নেটওয়ার্কিং টুলসগুলির মধ্যে রয়েছে `ping`, `ipconfig`, `tracert` এবং `netstat`
- আপনি `Rundll32` কমান্ড ব্যবহার করে [অনেক দরকারী উইন্ডোজ কাজ] (http://www.thewindowsclub.com/rundll32-shortcut-commands-windows) সম্পাদন করতে পারেন।
### Cygwin টিপস এবং কৌশল
- সাইগউইনের প্যাকেজ ম্যানেজার দিয়ে অতিরিক্ত ইউনিক্স প্রোগ্রাম ইনস্টল করুন।
- আপনার কমান্ড-লাইন উইন্ডো হিসেবে `mintty` ব্যবহার করুন।
- `/dev/clipboard` এর মাধ্যমে উইন্ডোজ ক্লিপবোর্ড অ্যাক্সেস করুন।
- একটি নির্দিষ্ট ফাইল তার নিবন্ধিত অ্যাপ্লিকেশনের মাধ্যমে খুলতে `cygstart` রান করুন।
- `regtool` দিয়ে উইন্ডোজ রেজিস্ট্রি অ্যাক্সেস করুন।
- লক্ষ্য রাখুন যে একটি `C:\` উইন্ডোজ ড্রাইভ পাথ সাইগউইনের অধীনে `/cygdrive/c` হয়ে যায়, এবং সাইগউইনের `/` উইন্ডোজের `C:\cygwin` এর অধীনে প্রদর্শিত হয়। `cygpath` দিয়ে সাইগউইন এবং উইন্ডোজ-স্টাইল ফাইল পাথের মধ্যে রূপান্তর করুন। এটি স্ক্রিপ্টগুলিতে সবচেয়ে উপযোগী যা উইন্ডোজ প্রোগ্রামগুলিকে আহ্বান করে।
## আরও রিসোর্স
- [awesome-shell](https://github.com/alebcay/awesome-shell): শেল টুল এবং সম্পদ একটি সাজানো তালিকা।
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): ম্যাকওএস কমান্ড লাইনের জন্য একটি আরও বিস্তারিত গাইড।
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/): ভাল শেল স্ক্রিপ্ট লেখার জন্য শক্তিশালী মোড।
- [shellcheck](https://github.com/koalaman/shellcheck): একটি শেল স্ক্রিপ্ট স্থির বিশ্লেষণ সরঞ্জাম। প্রায়ই, ব্যাশ / এস / জেডব্লিউএসের জন্য লিন্ট।
- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): শেল স্ক্রিপ্টে ফাইলনেম সঠিকভাবে হ্যান্ডল করার কথার দুঃখজনক ছোটবিশেষতা।
- [Data Science at the Command Line](http://datascienceatthecommandline.com/#tools): একই নামের বই থেকে তথ্য বিজ্ঞানে কাজে সহায়ক আরও কমান্ড এবং সরঞ্জাম।
## অস্বীকৃতি
খুব ছোট কাজ ব্যতীত, কোডটি এমনভাবে লেখা হয় যাতে অন্যরা পড়তে পারে। ক্ষমতার সাথে দায়িত্ব আসে। আপনি ব্যাশে কিছু করতে *পারেন* তার মানে এই নয় যে আপনার উচিত! ;)
## License
[![Creative Commons License](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/) এর অধীনে লাইসেন্স করা হয়েছে।