কম্পিউটার টিউটোরিয়াল

দৈনন্দিন কমান্ড-লাইন প্রোডাক্টিভিটির জন্য অপরিহার্য Bash টিপস

অনেক লিনাক্স এবং Unix ভেরিয়েন্টের ডিফল্ট শেল হিসেবে, Bash বিভিন্ন অন্ডারইউজড ফিচার অন্তর্ভুক্ত করে, তাই কী ডিসকাস করা হবে সেটি ডিসাইড করা কঠিন ছিল। অবশেষে, আমি সেই Bash টিপসের ওপর ফোকাস করলাম যা দিন দিনের কার্যকলাপগুলো সহজ করে তোলে।

একজন কনসাল্টেন্ট হিসেবে, আমি বিভিন্ন এনভায়রনমেন্ট এবং ওয়ার্ক স্টাইল দেখি। আমি এই অভিজ্ঞতা ব্যবহার করেছি টিপসগুলো চারটি ব্রড ক্যাটাগরিতে নেরো ডাউন করার জন্য: টার্মিনাল এবং লাইন ট্রিকস, নেভিগেশন এবং ফাইল, হিস্টরি, এবং হেল্পফুল কমান্ড। এই ক্যাটাগরিগুলো সম্পূর্ণ আর্বিট্রারি এবং আমার নিজের চিন্তা অর্গানাইজ করার জন্য আরও সার্ভ করে বরং কোনো ডেফিনিটিভ ক্লাসিফিকেশন হিসেবে। এখানে অন্তর্ভুক্ত অনেক টিপস সাবজেক্টিভলি একাধিক ক্যাটাগরিতে ফিট করতে পারে।

আর দেরি ছাড়া, এখানে কিছু সবচেয়ে হেল্পফুল Bash ট্রিকস যা আমি এনকাউন্টার করেছি।

Bash হিস্টরি দিয়ে কাজ করা

আপনার প্রোডাক্টিভিটি বাড়ানোর সেরা উপায়ের একটিই হলো Bash হিস্টরি আরও ইফেক্টিভলি ব্যবহার करना শিখা। সেটি ধরে রেখে, একটি মাল্টি-ইউজার এনভায়রনমেন্টে আপনি আপনার শেলে করতে পারেন সবচেয়ে গুরুত্বপূর্ণ টুইক হচ্ছে histappend অপশন ইनेবল করা। এটি করতে, সোজা নিচের কমান্ড রান করুন:

shopt -s histappend 

এটি একাধিক টার্মিনাল সেশনের ইতিবাচক একই সাথে হিস্টরিতে লিখতে দেয়। অধিকাংশ এনভায়রনমেন্টে এই অপশন ইনেবলড নয়। এর মানে হিস্টরিগুলো প্রায়শই হারিয়ে যায় যদি আপনার একাধিক Bash সেশন খোলা থাকে ( локалি বা SSH-ওয়ার)।

একটি সাধারণ টাস্ক হলো লাস্ট কমান্ড `sudo` দিয়ে রিপিট করা। উদাহরণস্বরূপ, ধরুন আপনি একটি ডিরেক্টরি তৈরি করতে চান mkdir /etc/ansible/facts.d। আপনি রুট না হলে, এই কমান্ড ফেল করবে। আমি যা পর্যবেক্ষণ করেছি, অধিকাংশ ইউজার up অ্যারো চাপে, লাইনের শুরুতে স্ক্রোল করে, এবং sudo কমান্ড যোগ করে। একটি সহজ পদ্ধতি আছে। সোজা কমান্ডটি এইভাবে রান করুন:

sudo !!

Bash sudo রান করবে এবং তারপর পুরো পূর্বের কমান্ড। এখানে এক্সাক্টলি কী হয় সিকোয়েন্সে রান করলে:

[user@centos ~]$ mkdir -p /etc/ansible/facts.d
 mkdir: cannot create directory ‘/etc/ansible’: Permission denied

 [user@centos ~]$ sudo !!
 sudo mkdir -p /etc/ansible/facts.d

যখন !! রান করা হয়, পুরো কমান্ড টার্মিনালে ইকো হয় যাতে আপনি জানেন কী এক্সিকিউট হয়েছে।

সাদৃশ্য কিন্তু খুব কম ব্যবহৃত হলো !* শর্টকাট। এটি Bash-কে বলে যে আপনি পূর্বের কমান্ডের সকল *আর্গুমেন্ট* বর্তমান কমান্ডে রিপিট করতে চান। এটি একটি কমান্ডের জন্য উপযোগী হতে পারে যেটির অনেক আর্গুমেন্ট আছে যা আপনি রিইউজ করতে চান। একটি সহজ উদাহরণ হলো কয়েকটি ফাইল তৈরি করা এবং তারপর সেগুলোর পারমিশন চেঞ্জ করা:

[user@centos tmp]$ touch file1 file2 file3 file4
 [user@centos tmp]$ chmod 777 !*
 chmod 777 file1 file2 file3 file4

এটি শুধু একটি স্পেসিফিক সেট অফ পরিস্থিতিতে হ্যান্ডি, কিন্তু এটি কিছু কীস্ট্রোক বাঁচাতে পারে।

কীস্ট্রোক বাঁচানোর কথা বললেই, আপনার হিস্টরিতে কমান্ড খুঁজে বের করার কথা বলি। অধিকাংশ ইউজার এভাবে কিছু করবে:

history |grep <some command>

যাহোক, আপনার হিস্টরি সার্চ করার একটি সহজ পদ্ধতি আছে। আপনি যদি চাপেন

ctrl + r

Bash আপনার হিস্টরির একটি রিভার্স সার্চ করবে। আপনি টাইপ करना শুরু করলে, রেজাল্ট দেখতে শুরু করবে। উদাহরণস্বরূপ:

(reverse-i-search)`hist': shopt -s histappend

উপরের উদাহরণে, আমি hist টাইপ করেছি এবং এটা আগে আলোচনা করা shopt কমান্ডের সাথে ম্যাচ করল। আপনি যদি ctrl + r চাপতে থাকেন, Bash পिछের দিকে সব অন্যান্য ম্যাচের মধ্য দিয়ে সার্চ চালু রাখবে।

আমাদের লাস্ট ট্রিক টiệnিক্যালি একটি ট্রিক নয় বরং একটি হেল্পফুল কমান্ড যা আপনি ব্যবহার করতে পারেন আপনার হিস্টরিতে সবচেয়ে বেশি ব্যবহৃত কমান্ড কাউন্ট এবং ডিসপ্লে করতে।

[user@centos tmp]$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
 81 ssh
 50 sudo
 46 ls
 45 ping
 39 cd
 29 nvidia-xrun
 20 nmap
 19 export

এই উদাহরণে, আপনি দেখতে পাচ্ছেন ssh ফার বাই ফার আমার হিস্টরিতে এই মুহূর্তে সবচেয়ে বেশি ব্যবহৃত কমান্ড।

নেভিগেশন এবং ফাইল নামকরণ

আপনি সম্ভবত ইতিমধ্যে জানেন যে আপনি যদি একটি কমান্ড, ফাইলনেম, বা ফোল্ডার নাম টাইপ করেন, আপনি tab কী একবার চাপলে এটি আপনার জন্য ওয়ার্ডিং কমপ্লিট করবে। এটি কাজ করে যদি একটি একক একজ্যাক্ট ম্যাচ থাকে। যাহোক, আপনি শاید না জানেন যে আপনি যদি tab দুবার চাপেন, এটি আপনি যা টাইপ করেছেন তার উপর ভিত্তি করে সকল ম্যাচ দেখাবে। উদাহরণস্বরূপ:

[user@centos tmp]$ cd /lib 
 lib/ lib64/ 

এটি ফাইল সিস্টেম নেভিগেশনের জন্য খুব উপযোগী হতে পারে। আরেকটি হেল্পফুল ট্রিক হলো আপনার শেলে cdspell ইনেবল করা। আপনি এটা করতে পারেন shopt -s cdspell কমান্ড ইস্যু করে। এটি আপনার টাইপো সংশোধন করতে সাহায্য করবে:

[user@centos etc]$ cd /tpm
 /tmp
 [user@centos tmp]$ cd /ect
 /etc

এটি পারফেক্ট নয়, কিন্তু প্রতিটি ছোট জিনিস হেল্প করে!

একবার আপনি সফলভাবে ডিরেক্টরি চেঞ্জ করলে, যদি আপনাকে আপনার পূর্বের ডিরেক্টরিতে ফিরে যেতে হয়? এটা বড় ডিল নয় যদি আপনি ডিরেক্টরি ট্রি-তে খুব গভীর নন। কিন্তু আপনি যদি একটি খুব গভীর পথে থাকেন, যেমন /var/lib/flatpak/exports/share/applications/, আপনি টাইপ করতে পারেন:

cd /va/lib/fla/ex/sh/app

শুকর alok, Bash আপনার পূর্বের ডিরেক্টরি মনে রাখে, এবং আপনি সেখানে সহজে cd - টাইপ করে ফিরে যেতে পারেন। এখানে কীভাবে দেখাবে:

[user@centos applications]$ pwd
 /var/lib/flatpak/exports/share/applications

 [user@centos applications]$ cd /tmp
 [user@centos tmp]$ pwd
 /tmp

 [user@centos tmp]$ cd -
 /var/lib/flatpak/exports/share/applications

এটা সব ভালো, কিন্তু আপনার যদি এক কুড়া ডিরেক্টরি থাকে যেগুলোর মধ্যে আপনি সহজে নেভিগেট করতে চান? Bash সেখানে আপনাকে কভার করেছে। একটি ভেরিয়েবল আছে যা আপনি সেট করতে পারেন যা আপনাকে আরও ইফেক্টিভলি নেভিগেট করতে সাহায্য করবে। এখানে একটি উদাহরণ:

[user@centos applications]$ export CDPATH='~:/var/log:/etc'
 [user@centos applications]$ cd hp
 /etc/hp

 [user@centos hp]$ cd Downloads
 /home/user/Downloads

 [user@centos Downloads]$ cd ansible
 /etc/ansible

 [user@centos Downloads]$ cd journal
 /var/log/journal

উপরের উদাহরণে, আমি আমার হোম ডিরেক্টরি (টিল্ডে: ~ দিয়ে ইন্ডিকেট করা), /var/log এবং /etc সেট করেছি। এই ডিরেক্টরিগুলোর টপ লেভেলে যেকোনো জিনিস আপনি সেগুলো রেফারেন্স করলে অটো-ফিল হয়ে যাবে। CDPATH-এ লিস্ট করা ডিরেক্টরির বেসে না থাকা ডিরেক্টরি খুঁজে পাওয়া যাবে না। যদি, উদাহরণস্বরূপ, আপনি যে ডিরেক্টরি খুঁজছেন সেটি /etc/ansible/facts.d/ হয়, এটি cd facts.d টাইপ করলে কমপ্লিট হবে না। এর কারণ হলো ডিরেক্টরি ansible /etc-এর অধীনে পাওয়া যায়, কিন্তু facts.d নয়। তাই, CDPATH একটি ট্রি jonka টপে আপনি ঘন ঘন অ্যাক্সেস করেন সেখানে পৌঁছাতে উপযোগী, কিন্তু বড় ফোল্ডার স্ট্রাকচার ব্রাউজ করার সময় কামসামশি হতে পারে।

শেষে, দুটি সাধারণ ইউজ কেস কথা বলি যা সবাই কখনো না কখনো করে: ফাইল এক্সটেনশন চেঞ্জ করা এবং ফাইল রিনেম করা। প্রথম নজরে, এটি একই জিনিস বলে মনে হতে পারে, কিন্তু Bash এই টাস্কগুলো সম্পন্ন করার জন্য কয়েকটি আলাদা ট্রিক অফার করে।

যদিও এটি একটি "ডাউন-অ্যান্ড-ডার্টি" অপারেশন, অধিকাংশ ইউজার কোনো সময় আপনি যেস ফাইলটা ওয়ার্ক করছেন তার একটি কুইক কপি তৈরি করতে চান। অধিকাংশ ফাইলনেম একজ্যাক্ট কপি করে এবং সিম্পলি একটি ফাইল এক্সটেনশন অ্যাপেন্ড করে যেমন .old বা .bak। Bash-এ এর জন্য একটি কুইক শর্টকাট আছে। ধরুন আপনার একটি ফাইলনেম আছে spideroak_inotify_db.07pkh3 যা আপনি একটি কপি রাখতে চান। আপনি টাইপ করতে পারেন:

cp spideroak_inotify_db.07pkh3 spideroak_inotify_db.07pkh3.bak

আপনি কপি/পেস্ট অপারেশন, ট্যাব কমপ্লিট, আর্গুমেন্ট রিপিট করার শর্টকাট, বা সাদা পুরো জিনিস টাইপ করে এটিকে দ্রুত করতে পারেন। যাহোক, নিচের কমান্ডটি একবার আপনি এর অভ্যস্ত হলে আরও কুইক প্রমাণ হওয়া উচিত:

cp spideroak_inotify_db.07pkh3{,.old}

এটি (যেমন আপনি অনুমান করতে পারেন) ফাইলটি কপি করে .old ফাইল এক্সটেনশন অ্যাপেন্ড করে। এটি দারুন, আপনি বলতে পারেন, কিন্তু আমি একসাথে অনেক ফাইল রিনেম করতে চাই। অবশ্য, আপনি পারছেন একটি for লুপ লিখে এই গুলো ডিল করতে (আমি আসলে জটিল কেসের জন্য এটি প্রায়শই করি) কিন্তু কেন করবেন যখন একটি হ্যান্ডি ইউটিলিটি আছে rename? এই ইউটিলিটির ব্যবহারে Debian/Ubuntu এবং CentOS/Arch-এ কিছু পার্থক্য রয়েছে। Debian-ভিত্তিক rename SED-লাইক সিনট্যাক্স ব্যবহার করে:

user@ubuntu-1604:/tmp$ for x in `seq 1 5`; do touch old_text_file_${x}.txt; done

 user@ubuntu-1604:/tmp$ ls old_text_file_*
 old_text_file_1.txt old_text_file_3.txt old_text_file_5.txt
 old_text_file_2.txt old_text_file_4.txt

 user@ubuntu-1604:/tmp$ rename 's/old_text_file/shiney_new_doc/' *.txt

 user@ubuntu-1604:/tmp$ ls shiney_new_doc_*
 shiney_new_doc_1.txt shiney_new_doc_3.txt shiney_new_doc_5.txt
 shiney_new_doc_2.txt shiney_new_doc_4.txt

CentOS বা Arch বক্সে এটা একইভাবে দেখাবে:

[user@centos /tmp]$ for x in `seq 1 5`; do touch old_text_file_${x}.txt; done

 [user@centos /tmp]$ ls old_text_file_*
 old_text_file_1.txt old_text_file_3.txt old_text_file_5.txt
 old_text_file_2.txt old_text_file_4.txt

 [user@centos tmp]$ rename old_text_file centos_new_doc *.txt

 [user@centos tmp]$ ls centos_new_doc_*
 centos_new_doc_1.txt centos_new_doc_3.txt centos_new_doc_5.txt
 centos_new_doc_2.txt centos_new_doc_4.txt

Bash কী বাইন্ডিং

Bash-এ অনেক বিল্ট-ইন কীবোর্ড শর্টকাট রয়েছে। আপনি সেগুলোর তালিকা পেতে পারেন bind -p টাইপ করে। আমি মনে করি কয়েকটি হাইলাইট করা উপযোগী, যদিও কিছু jól-নোন হতে পারে।

  • ctrl + _ (আনডু)
  • ctrl + t (দুই ক্যারেক্টার সুয়াপ)
  • ALT + t (দুই শব্দ সুয়াপ)
  • ALT + . (পূর্বের কমান্ড থেকে লাস্ট আর্গুমেন্ট প্রিন্ট)
  • ctrl + x + * (গ্লব/স্টার এক্সপ্যান্ড)
  • ctrl + arrow (এক শব্দ ফরওয়ার্ড যান)
  • ALT + f (এক শব্দ ফরওয়ার্ড যান)
  • ALT + b (এক শব্দ ব্যাকওয়ার্ড যান)
  • ctrl + x ফলোড বাই ctrl + e (কমান্ড স্ট্রিংটি একটি এডিটরে খুলে যাতে আপনি এক্সিকিউশন سے پہلے এডিট করতে পারেন)
  • ctrl + e (কার্সর এন্ডে যান)
  • ctrl + a (কার্সর স্টার্টে যান)
  • ctrl + xx (লাইনের অপোজিট এন্ডে যান)
  • ctrl + u (কার্সরের আগের সব কাট করুন)
  • ctrl + k (কার্সরের পরের সব কাট করুন)
  • ctrl + y (বাফার থেকে পেস্ট করুন)
  • ctrl + l (লোয়ারকেস L, স্ক্রিন ক্লিয়ার)

আমি যেস.Clearer ডিসকাস করবো না। যাহোক, সবচেয়ে উপযোগী শর্টকাটগুলো যা আমি পেয়েছি সেগুলো হলো যেগুলো আপনাকে শব্দ (বা টেক্সট সেকশন) ডিলিট এবং আনডু করতে দেয়। ধরুন আপনি systemd ব্যবহার করে অনেক সার্ভিস স্টপ করতে যাচ্ছেন, কিন্তু আপনি শুধু কয়েকটি স্টার্ট করতে চান কিছু অপারেশন কমপ্লিট হওয়ার পর। আপনি এমন কিছু করতে পারেন:

systemctl stop httpd mariadb nfs smbd
 
 

কিন্তু আপনি যদি একটা বেশি রিমুভ করে ফেলেন? কোনো সমস্যা নয়—সহজে ctrl + _ ব্যবহার করে লাস্ট এডিট আনডু করুন।

অন্য কাট কমান্ডগুলো আপনাকে দ্রুত কার্সর থেকে লাইনের এন্ড বা শুরুতে সবকিছু রিমুভ করতে দেয় (Ctrl + k এবং Ctrl + u ব্যবহার করে)। এর এডেড বেনিফিট হলো কাট করা টেক্সট টার্মিনাল বাফারে চলে যায় যাতে আপনি পরে পেস্ট করতে পারেন (ctrl + y ব্যবহার করে)। এই কমান্ডগুলো এখানে ডেমো করা কঠিন, তাই আমি দৃঢ়ভাবে আপনাকে আপনার নিজের সিস্টেমে এগুলো ট্রাই করার পরামর্শ দিচ্ছি।

লাস্ট বাট নট লিস্ট, আমি একটি কম ব্যবহৃত কী কম্বিনেশন মেনশন করতে চাই যা কনফাইনড এনভায়রনমেন্ট যেমন কন্টেইনারে অত্যন্ত হ্যান্ডি হতে পারে। আপনার কখনো কোনো কমান্ড পревিয়াস আউটপুট দিয়ে গার্বলড দেখলে, এর একটি সমাধান আছে: ctrl + x + ctrl + e চাপলে কমান্ডটি এনভায়রনমেন্ট ভেরিয়েবল EDITOR-এ সেট করা যেকোনো এডিটরে খুলবে। এটা আপনাকে একটি লং বা গার্বলড কমান্ড টেক্সট এডিটরে এডিট করতে দেবে যা (পোটেনশিয়ালি) টেক্সট র‍্যাপ করতে পারে। আপনার কাজ সংরক্ষণ করা এবং এক্সিট করা, ঠিক যেমন আপনি একটি নরমাল ফাইলে ওয়ার্ক করার সময় করবেন, এক্সিকিউশনearen লেভিং করার সাথে সাথে কমান্ডটি এক্সিকিউট করবে।

বিবিধ টিপস

আপনি ফাইন্ড করতে পারেন আপনার Bash শেলে কালার ডিসপ্লে থাকা আপনার অভিজ্ঞতা বাড়াতে পারে। আপনি যদি একটি সেশন ব্যবহার করেন যাতে কালারাইজেশন ইনেবলড নয়, নিচে আপনার .bash_profile-এ রাখার জন্য কয়েকটি কমান্ড দেওয়া হলো আপনার সেশনে কালার যোগ করতে। এগুলো খুব স্ট্রেইটফরওয়ার্ড এবং গভীর ব্যাখ্যা দরকার নয়:

# enable colors
 eval "`dircolors -b`"

 # force ls to always use color and type indicators
 alias ls='ls -hF --color=auto'

 # make the dir command work kinda like in windows (long format)
 alias dir='ls --color=auto --format=long'

 # make grep highlight results using color
 export GREP_OPTIONS='--color=auto'

 # Add some colour to LESS/MAN pages
 export LESS_TERMCAP_mb=$'\E[01;31m'
 export LESS_TERMCAP_md=$'\E[01;33m'
 export LESS_TERMCAP_me=$'\E[0m'
 export LESS_TERMCAP_se=$'\E[0m'
 export LESS_TERMCAP_so=$'\E[01;42;30m'
 export LESS_TERMCAP_ue=$'\E[0m'
 export LESS_TERMCAP_us=$'\E[01;36m'

Bash-এ বিভিন্ন অপশন অ্যাডজাস্ট করার পাশাপাশি, আপনি কিছু নাটি ট্রিকস ব্যবহার করতে পারেন টাইম বাঁচাতে। উদাহরণস্বরূপ, দুটি কমান্ড ব্যাক-টু-ব্যাক রান করতে, প্রতিটির এক্সিট স্ট্যাটাসের بغдваরে, ; ব্যবহার করুন কমান্ডগুলো আলাদা করার জন্য, নিচে দেখা যাচ্ছে:

[user@centos /tmp]$ du -hsc * ; df -h

এটি বর্তমান ডিরেক্টরির প্রতিটি ফাইল কত স্পেস নিচ্ছে সেটি ক্যালকুলেট করে (এবং সম করে), তারপর সিস্টেমকে কোয়েরি করে প্রতি ব্লক ডিভাইসের ডিস্ক ইউজেজের জন্য। এই কমান্ডগুলো রান হবে du কমান্ড দ্বারা জেনারেট করা যেকোনো এরর যachtetে।

আপনি যদি চান প্রথম কমান্ড সফলভাবে কমপ্লিট হলে সেকেন্ড কমান্ড এক্সিকিউট হোক? আপনি && শর্টহ্যান্ড ব্যবহার করতে পারেন ইন্ডিকেট করতে যে আপনি সেকেন্ড কমান্ড শুধু তখন রান করতে চান যখন প্রথম কমান্ড সফল এক্সিট স্ট্যাটাস রিটার্ন করে। উদাহরণস্বরূপ, ধরুন আপনি একটি মেশিন রিবুট করতে চান শুধু আপডেট সফল হলে:

[root@arch ~]$ pacman -Syu --noconfirm && reboot

কখনো কখনো একটি কমান্ড রান করার সময়, আপনি এর আউটপুট ক্যাপচার করতে চান। অধিকাংশ মানুষ tee কমান্ড জানেন, যা স্ট্যান্ডার্ড আউটপুট কপি করে টার্মিনাল এবং একটি ফাইলে দুটোই। যাহোক, আপনি যদি আরও কমপ্লেক্স আউটপুট ক্যাপচার করতে চান, যেমন strace- থেকে, আপনাকে I/O রিডাইরেকশন দিয়ে কাজ শুরু করতে হবে। I/O রিডাইরেকশনের ডিটেইল এই সংক্ষিপ্ত আর্টিকেলের স্কোপ বাইরে, কিন্তু আমাদের উদ্দেশ্যে আমরা STDOUT এবং STDERR নিয়ে চিন্তিত। আপনি যা দেখছেন সেটি একজ্যাক্টলি ক্যাপচার করার সেরা পদ্ধতি হলো দুটোই এক ফাইলে কম্বাইন করা। এটি করতে, 2>&1 রিডাইরেকশন ব্যবহার করুন।

[root@arch ~]$ strace -p 1140 > strace_output.txt 2>&1

এটি সকল প্রাসঙ্গিক আউটপুট strace_output.txt নামে একটি ফাইলে রাখবে পরবর্তীতে ভিউ করার জন্য।

কখনো কখনো একটি লং-রানিং কমান্ডের সময়, আপনাকে একটি টাস্ক এক্সিকিউশন পজ করতে হতে পারে। আপনি 'স্টপ' শর্টকাট ctrl + z ব্যবহার করতে পারেন একটি জব স্টপ (বত নয় কিল) করতে। জবটি জব কিউতে যোগ হয়, কিন্তু আপনি আর জবটি দেখবেন না যতক্ষণ না আপনি রিজিউম করেন। এই জবটি পরে ফোরগ্রাউন্ড কমান্ড fg ব্যবহার করে রিজিউম করা যাবে।

অতিরিক্তভাবে, আপনি সিম্পলি একটি জব পজ করতে পারেন ctrl + s দিয়ে। জব এবং এর আউটপুট টার্মিনাল ফোরগ্রাউন্ডে থাকে, এবং শেলের ব্যবহার ফেরত দেয়া হয় না ইউজারকে। জবটি ctrl + q চাপলে রিজিউম হবে।

আপনি যদি অনেক টার্মিনাল খোলা একটি গ্রাফিক্যাল এনভায়রনমেন্টে কাজ করেন, তবে আপনি কপি এবং পেস্ট আউটপুটের জন্য কীবোর্ড শর্টকাট পাওয়া হ্যান্ডি লাগতে পারে। এটা করতে, নিচের শর্টকাটগুলো ব্যবহার করুন:

# Copies highlighted text
 ctrl + shift + c

 # Pastes text in buffer
 ctrl + shift + v

ধরুন একটি এক্সিকিউটিং কমান্ডের আউটপুটে আপনি আরেকটি কমান্ড এক্সিকিউট হচ্ছে দেখেন, এবং আপনি আরও ইনফরমেশন চান। এটা করার কয়েকটি পদ্ধতি আছে। যদি এই কমান্ড আপনার প্যাথে কোথাও থাকে, আপনি which কমান্ড রান করতে পারেন জানতে সেটি আপনার ডিস্কে কোথায় লোকেটেড:

[root@arch ~]$ which ls
 /usr/bin/ls

এই ইনফরমেশন দিয়ে, আপনি বাইনারি ইনস펙্ট করতে পারেন file কমান্ড দিয়ে:

[root@arch ~]$ file /usr/bin/ls
 /usr/bin/ls: ELF 64-bit LSB pie executable x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d4e02b88e596e4f82c6cc62a5bc4ce5827209a49, stripped

আপনি সব ধরণের ইনফরমেশন দেখতে পাচ্ছেন, কিন্তু অধিকাংশ ইউজারের জন্য সবচেয়ে গুরুত্বপূর্ণ হলো ELF 64-bit LSB নONSENSE। এটি এসেনশিয়ালি মানে এটি একটি প্রিকম্পাইল্ড বাইনারি বনাম একটি স্ক্রিপ্ট বা অন্য টাইপ অফ এক্সিকিউটেবল। একটি রিলেটেড টুল যা আপনি কমান্ড ইনস্পেক্ট করতে ব্যবহার করতে পারেন সেটি হলো command টুল নিজে। সিম্পলি command -V <command> রান করলে আপনাকে আলাদা টাইপের ইনফরমেশন দেবে:

[root@arch ~]$ command -V ls
 ls is aliased to `ls --color=auto`

 [root@arch ~]$ command -V bash
 bash is /usr/bin/bash

 [root@arch ~]$ command -V shopt
 shopt is a shell builtin

লাস্ট বাট ডেফিনিটলি নট লিস্ট, আমার ফেভারিট ট্রিক্সের একটা, স্পেশালি যখন কন্টেইনারের সাথে ওয়ার্ক করি বা এমন এনভায়রনমেন্টে যেখানে আমার কম নলেজ বা কন্ট্রোল থাকে, সেটি হলো echo কমান্ড। এই কমান্ডটি যেকোনো জিনিস করতে ব্যবহার করা যায় আপনার for লুপ কি এক্সপেক্টেড সিকোয়েন্স রান করবে সেটি চেক করার থেকে রিমোট পোর্ট খোলা আছে কিনা চেক করা পর্যন্ত। সিনট্যাক্স খুব সিম্পল খোলা পোর্ট চেক করার জন্য: echo > /dev/<udp or tcp>/<server ip>/<port>। উদাহরণস্বরূপ:

user@ubuntu-1604:~$ echo > /dev/tcp/192.168.99.99/222
 -bash: connect: Connection refused
 -bash: /dev/tcp/192.168.99.99/222: Connection refused

 user@ubuntu-1604:~$ echo > /dev/tcp/192.168.99.99/22

যদি পোর্টটি আপনার যেস কানেকশন টাইপ করার জন্য বন্ধ থাকে, আপনি একটি Connection refused মেসেজ পাবেন। যদি প্যাকেট সফলভাবে পাঠানো হয়, কোনো আউটপুট নেই।

আশা করি এই টিপসগুলো Bash আরও ইফিশিয়েন্ট এবং エンজয়েবল করতে সাহায্য করবে। এখানে লিস্ট করা হয়েছে তার চেয়ে Bash-এ অনেক বেশি ট্রিক লুকিয়ে আছে। আপনার ফেভারিটগুলো কী?

অ্যাপেন্ডিক্স ১. কভার করা টিপস এবং ট্রিক্সের তালিকা

# History related
 ctrl + r (reverse search)
 !! (rerun last command)
 !* (reuse arguments from previous command)
 !$ (use last argument of last command)
 shopt -s histappend (allow multiple terminals to write to the history file)
 history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head (list the most used history commands)

 # File and navigation
 cp /home/foo/realllylongname.cpp{,-old}
 cd -
 rename 's/text_to_find/been_renamed/' *.txt
 export CDPATH='/var/log:~' (variable is used with the cd built-in.)

 # Colourize bash

 # enable colors
 eval "`dircolors -b`"
 # force ls to always use color and type indicators
 alias ls='ls -hF --color=auto'
 # make the dir command work kinda like in windows (long format)
 alias dir='ls --color=auto --format=long'
 # make grep highlight results using color
 export GREP_OPTIONS='--color=auto'

 export LESS_TERMCAP_mb=$'\E[01;31m'
 export LESS_TERMCAP_md=$'\E[01;33m'
 export LESS_TERMCAP_me=$'\E[0m'
 export LESS_TERMCAP_se=$'\E[0m' # end the info box
 export LESS_TERMCAP_so=$'\E[01;42;30m' # begin the info box
 export LESS_TERMCAP_ue=$'\E[0m'
 export LESS_TERMCAP_us=$'\E[01;36m'

 # Bash shortcuts
 shopt -s cdspell (corrects typoos)
 ctrl + _ (undo)
 ctrl + arrow (move forward a word)
 ctrl + a (move cursor to start)
 ctrl + e (move cursor to end)
 ctrl + k (cuts everything after the cursor)
 ctrl + l (clears screen)
 ctrl + q (resume command that is in the foreground)
 ctrl + s (pause a long running command in the foreground)
 ctrl + t (swap two characters)
 ctrl + u (cuts everything before the cursor)
 ctrl + x + ctrl + e (opens the command string in an editor so that you can edit it before it runs)
 ctrl + x + * (expand glob/star)
 ctrl + xx (move to the opposite end of the line)
 ctrl + y (pastes from the buffer)
 ctrl + shift + c/v (copy/paste into terminal)

 # Running commands in sequence
 && (run second command if the first is successful)
 ; (run second command regardless of success of first one)

 # Redirecting I/O
 2>&1 (redirect stdout and stderr to a file)

 # check for open ports
 echo > /dev/tcp/<server ip>/<port>
 `` (use back ticks to shell out)

 # Examine executable
 which <command>
 file <path/to/file>
 command -V <some command binary> (tells you whether <some binary> is a built-in, binary or alias)
  1. কমांड লাইন মাস্টার করুন: টার্মিনাল মাস্টারির শুরুকারীদের গাইড

  2. লিনাক্স টার্মিনাল মাস্টার করার জন্য অপরিহার্য বাশ কমান্ডস ও টিপস

  3. মাস্টার বাশ স্ক্রিপ্টিং: বিশ্বস্ত লিনাক্স অটোমেশনের জন্য ১০ অপরিহার্য টিপস

  4. ৩টি আকর্ষণীয় কমান্ড-লাইন গেম দিয়ে দ্রুত ব্যাশ শিখুন