কম্পিউটার

কমান্ড লাইনে প্রতিদিনের জন্য ব্যাশ টিপস

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

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

আর কোনো ঝামেলা ছাড়াই, এখানে আমার দেখা সবচেয়ে সহায়ক কিছু ব্যাশ কৌশল রয়েছে।

ব্যাশ ইতিহাসের সাথে কাজ করা

আপনার উত্পাদনশীলতা বাড়ানোর সেরা উপায়গুলির মধ্যে একটি হল ব্যাশ ইতিহাসকে আরও কার্যকরভাবে ব্যবহার করতে শেখা। এটি মাথায় রেখে, সম্ভবত একটি মাল্টি-ইউজার পরিবেশে আপনি যে সবচেয়ে গুরুত্বপূর্ণ পরিবর্তনগুলি করতে পারেন তা হল histappend সক্ষম করা। আপনার শেলের বিকল্প। এটি করতে, কেবল নিম্নলিখিত কমান্ডটি চালান:

shopt -s histappend  

এটি একাধিক টার্মিনাল সেশনকে একই সময়ে ইতিহাসে লেখার অনুমতি দেয়। বেশিরভাগ পরিবেশে এই বিকল্পটি না সক্রিয় এর মানে হল যে আপনার যদি একটির বেশি ব্যাশ সেশন খোলা থাকে (স্থানীয়ভাবে বা SSH-এর উপরে) তাহলে ইতিহাসগুলি প্রায়শই হারিয়ে যায়।

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

sudo !! 

ব্যাশ sudo চালাবে এবং তারপর পূর্ববর্তী কমান্ডের সম্পূর্ণতা। ক্রমানুসারে চালানোর সময় এটি দেখতে কেমন লাগে তা এখানে রয়েছে:



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

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

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

[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 

ব্যাশ আপনার ইতিহাসের বিপরীত অনুসন্ধান করবে। আপনি টাইপ করা শুরু করার সাথে সাথে ফলাফলগুলি প্রদর্শিত হতে শুরু করবে। যেমন:

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

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

আমাদের শেষ কৌশলটি আপনার ইতিহাসে সর্বাধিক ব্যবহৃত কমান্ডগুলি গণনা এবং প্রদর্শন করার জন্য একটি সহায়ক কমান্ডের মতো একটি কৌশল নয়৷

[user@centos tmp]$ ইতিহাস | awk 'BEGIN {FS="[ \t]+|\\|"} {প্রিন্ট $3}' | সাজান | uniq -c | সাজান -nr | মাথা 
81 ssh
50 sudo
46 ls
45 ping
39 cd
29 nvidia-xrun
20 nmap
19 রপ্তানি করুন

এই উদাহরণে, আপনি 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<tab>/lib/fla<tab>/ex<tab>/sh<tab>/app<tab> 

সৌভাগ্যবশত, ব্যাশ আপনার পূর্ববর্তী ডিরেক্টরি মনে রেখেছে, এবং আপনি কেবল 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

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

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

[user@centos hp]$ cd ডাউনলোড
/home/user/Downloads

[user@centos Downloads]$ cd উত্তরযোগ্য
/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 আপনি প্রায়শই অ্যাক্সেস করেন এমন একটি গাছের শীর্ষে যাওয়ার জন্য দরকারী, কিন্তু আপনি যখন একটি বড় ফোল্ডার কাঠামো ব্রাউজ করছেন তখন এটি পরিচালনা করা কষ্টকর হতে পারে৷

পরিশেষে, আসুন দুটি সাধারণ ব্যবহারের ক্ষেত্রে কথা বলি যা প্রত্যেকেই কিছু সময়ে করে:একটি ফাইল এক্সটেনশন পরিবর্তন করা এবং ফাইলগুলির নাম পরিবর্তন করা। প্রথম নজরে, এটি একই জিনিস বলে মনে হতে পারে, কিন্তু ব্যাশ এই কাজগুলি সম্পন্ন করার জন্য কয়েকটি ভিন্ন কৌশল অফার করে৷

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

cp spideroak_inotify_db.07pkh3 spideroak_inotify_db.07pkh3.bak 

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

cp spideroak_inotify_db.07pkh3{,.old} 

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

`seq 1 5` এ x এর জন্য
user@ubuntu-1604:/tmp$; old_text_file_${x}.txt স্পর্শ করুন; সম্পন্ন হয়েছে

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



/>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.t.x shiney_new_doc_3.txt shiney_new_doc_5.txt
shiney_new_doc_2.txt shiney_new_doc_4.txt

একটি CentOS বা আর্চ বাক্সে এটি একই রকম দেখাবে:

[user@centos /tmp]$ x এর জন্য `seq 1 5`; old_text_file_${x}.txt স্পর্শ করুন; হয়ে গেছে

[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]$ পুরানো_টেক্সট_ফাইল centos_new_doc *.txt

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

ব্যাশ কী বাইন্ডিং

Bash-এ প্রচুর বিল্ট-ইন কীবোর্ড শর্টকাট রয়েছে। আপনি bind -p টাইপ করে তাদের একটি তালিকা খুঁজে পেতে পারেন . আমি ভেবেছিলাম এটি বেশ কয়েকটি হাইলাইট করা উপযোগী হবে, যদিও কিছু সুপরিচিত হতে পারে।

  • ctrl + __ (আনডু)
  • ctrl + t (দুটি অক্ষর অদলবদল)
  • ALT + t (দুটি শব্দ অদলবদল)
  • ALT + (আগের কমান্ড থেকে শেষ আর্গুমেন্ট প্রিন্ট করে)
  • ctrl + x + * (গ্লোব/স্টার প্রসারিত করুন)
  • ctrl + তীর (একটি শব্দ এগিয়ে যান)
  • ALT + f (একটি শব্দ এগিয়ে যান)
  • ALT + b (একটি শব্দ পিছনে সরান)
  • ctrl + x এর পরে ctrl + e (একটি সম্পাদকে কমান্ড স্ট্রিংটি খোলে যাতে আপনি সম্পাদনের আগে এটি সম্পাদনা করতে পারেন)
  • ctrl + e (কারসারকে শেষ পর্যন্ত নিয়ে যান)
  • ctrl + a (শুরু করতে কার্সার সরান)
  • ctrl + xx (লাইনের বিপরীত প্রান্তে যান)
  • ctrl + u (কারসরের আগে সবকিছু কেটে দেয়)
  • ctrl + k (কারসরের পরে সবকিছু কাটে)
  • ctrl + y (বাফার থেকে পেস্ট)
  • ctrl + l (ছোট হাতের L, স্ক্রীন পরিষ্কার করে)

আমি আরো সুস্পষ্ট বেশী আলোচনা করব না. যাইহোক, আমি খুঁজে পেয়েছি সবচেয়ে দরকারী শর্টকাটগুলির মধ্যে কিছু যা আপনাকে শব্দগুলি (বা পাঠ্যের অংশগুলি) মুছে ফেলতে এবং সেগুলিকে পূর্বাবস্থায় ফেরাতে দেয়৷ ধরুন আপনি systemd ব্যবহার করে একগুচ্ছ পরিষেবা বন্ধ করতে যাচ্ছেন , কিন্তু আপনি কিছু অপারেশন শেষ হওয়ার পরে শুধুমাত্র তাদের কয়েকটি শুরু করতে চেয়েছিলেন। আপনি এই মত কিছু করতে পারেন:

systemctl stop httpd mariadb nfs smbd
<আগের কমান্ড পেতে আপ বোতামটি টিপুন>
<অবাঞ্ছিত আর্গুমেন্টগুলি সরাতে 'ctrl + w' ব্যবহার করুন>

কিন্তু আপনি যদি একটিকে অনেকগুলি সরিয়ে দেন? কোন সমস্যা নেই — শুধু ctrl + _ ব্যবহার করুন শেষ সম্পাদনা পূর্বাবস্থায় ফেরাতে৷

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

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

বিবিধ টিপস

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

# রঙ সক্রিয় করুন
eval "`dircolors -b`"

# ls সর্বদা রঙ এবং টাইপ সূচক ব্যবহার করতে বল করুন
alias ls='ls -hF --color =অটো'

# dir কমান্ডকে উইন্ডোজের মতো কাজ করে (লং ফরম্যাট)
alias dir='ls --color=auto --format=long'

# রঙ ব্যবহার করে grep হাইলাইট ফলাফল তৈরি করুন
export GREP_OPTIONS='-color=auto'

# LESS/MAN পৃষ্ঠাগুলিতে কিছু রঙ যোগ করুন
LESS_TERMCAP_mb=$' রপ্তানি করুন \E[01;31m'
রপ্তানি LESS_TERMCAP_md=$'\E[01;33m'
রপ্তানি LESS_TERMCAP_me=$'\E[0m'
রপ্তানি LESS_TERMCAP_se=$'\E[0m '
রপ্তানি LESS_TERMCAP_so=$'\E[01;42;30m'
রপ্তানি LESS_TERMCAP_ue=$'\E[0m'
রপ্তানি LESS_TERMCAP_us=$'\E[01;36m'

ব্যাশের মধ্যে বিভিন্ন বিকল্পগুলি সামঞ্জস্য করার পাশাপাশি, আপনি সময় বাঁচাতে কিছু ঝরঝরে কৌশলও ব্যবহার করতে পারেন। উদাহরণস্বরূপ, প্রতিটির প্রস্থান অবস্থা নির্বিশেষে দুটি কমান্ড ব্যাক-টু-ব্যাক চালানোর জন্য, ; ব্যবহার করুন কমান্ডগুলিকে আলাদা করতে, যেমনটি নীচে দেখানো হয়েছে:

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

এটি কেবল বর্তমান ডিরেক্টরির প্রতিটি ফাইলের স্থানের পরিমাণ গণনা করে (এবং এটি যোগ করে), তারপর এটি প্রতি ব্লক ডিভাইসে ডিস্ক ব্যবহারের জন্য সিস্টেমকে জিজ্ঞাসা করে। du দ্বারা উত্পন্ন কোনো ত্রুটি নির্বিশেষে এই কমান্ডগুলি চলবে৷ আদেশ৷

আপনি যদি প্রথম কমান্ডের সফল সমাপ্তির পরে একটি পদক্ষেপ নিতে চান? আপনি && ব্যবহার করতে পারেন সংক্ষেপে নির্দেশ করুন যে আপনি দ্বিতীয় কমান্ডটি চালাতে চান শুধুমাত্র যদি প্রথম কমান্ডটি একটি সফল প্রস্থান অবস্থা প্রদান করে। উদাহরণস্বরূপ, ধরুন আপনি একটি মেশিন রিবুট করতে চান শুধুমাত্র যদি আপডেটগুলি সফল হয়:

[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 টিপে কাজটি পুনরায় শুরু করা যেতে পারে .

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

# কপি হাইলাইট করা টেক্সট
ctrl + shift + c

# বাফারে টেক্সট পেস্ট করে
ctrl + shift + v

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

[root@arch ~]$ যা ls
/usr/bin/ls

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

[root@arch ~]$ ফাইল /usr/bin/ls
/usr/bin/ls:ELF 64-বিট LSB পাই এক্সিকিউটেবল x86-64, সংস্করণ 1 (SYSV), গতিশীলভাবে লিঙ্কযুক্ত, দোভাষী / lib64/ld-linux-x86-64.so.2, GNU/Linux 3.2.0 এর জন্য, BuildID[sha1]=d4e02b88e596e4f82c6cc62a5bc4ce5827209a49, ছিনতাই করা হয়েছে

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

[root@arch ~]$ কমান্ড -V ls
ls এর নামকরণ করা হয়েছে `ls --color=auto`

[root@arch ~]$ কমান্ড -V ব্যাশ
bash হল /usr/bin/bash

[root@arch ~]$ command -V shopt
shopt হল একটি শেল বিল্টইন

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

user@ubuntu-1604:~$ echo> /dev/tcp/192.168.99.99/222
-bash:connect:সংযোগ অস্বীকার করা হয়েছে
-bash:/dev/tcp/192.168.99.99/ 222:সংযোগ প্রত্যাখ্যান

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

আপনি যে ধরনের সংযোগ করার চেষ্টা করছেন তাতে পোর্টটি বন্ধ থাকলে, আপনি একটি Connection refused পাবেন বার্তা যদি প্যাকেটটি সফলভাবে পাঠানো হয়, তাহলে কোন আউটপুট থাকবে না।

আমি আশা করি এই টিপসগুলি ব্যাশকে আরও দক্ষ এবং ব্যবহারে উপভোগ্য করে তুলবে। আমি এখানে তালিকাভুক্ত করেছি তার চেয়ে বাশে আরও অনেক কৌশল লুকিয়ে আছে। আপনার পছন্দের কিছু কি?

পরিশিষ্ট 1. কভার করা টিপস এবং কৌশলগুলির তালিকা

# ইতিহাস সম্পর্কিত 
ctrl + r (বিপরীত অনুসন্ধান)
!! (শেষ কমান্ড পুনরায় চালান)
!* (আগের কমান্ড থেকে আর্গুমেন্ট পুনরায় ব্যবহার করুন)
!$ (শেষ কমান্ডের শেষ আর্গুমেন্ট ব্যবহার করুন)
shopt -s histappend (একাধিক টার্মিনালকে ইতিহাস ফাইলে লেখার অনুমতি দিন )
ইতিহাস | awk 'BEGIN {FS="[ \t]+|\\|"} {প্রিন্ট $3}' | সাজান | uniq -c | সাজান -nr | মাথা (সবচেয়ে বেশি ব্যবহৃত ইতিহাস কমান্ডের তালিকা)

# ফাইল এবং নেভিগেশন
cp /home/foo/realllylongname.cpp{,-old}
cd -
নাম পরিবর্তন করুন 's/text_to_find/been_renamed/' *.txt
এক্সপোর্ট CDPATH='/var/log:~' (ভেরিয়েবল সিডি বিল্ট-ইন এর সাথে ব্যবহার করা হয়।)

# কালারাইজ ব্যাশ

# রঙ সক্রিয় করুন
eval "`dircolors -b`"
# ls সর্বদা রঙ ব্যবহার করতে এবং সূচক টাইপ করতে বল করুন
alias ls='ls -hF --color =অটো'
# dir কমান্ডকে উইন্ডোজের মতো করে কাজ করুন (লং ফরম্যাট)
alias dir='ls --color=auto --format=long'
# grep হাইলাইট ফলাফল তৈরি করুন রঙ ব্যবহার করে
রপ্তানি GREP_OPTIONS='--color=auto'

রপ্তানি LESS_TERMCAP_mb=$'\E[01;31m'
রপ্তানি LESS_TERMCAP_md=$'\E[01; 33m'
রপ্তানি LESS_TERMCAP_me=$'\E[0m'
রপ্তানি LESS_TERMCAP_se=$'\E[0m' # তথ্য বাক্সটি শেষ করুন
এক্সপোর্ট LESS_TERMCAP_so=$'\E[01;42;30m' # তথ্য বাক্স শুরু করুন
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'

# ব্যাশ শর্টকাট
  shopt -s cdspell (শুরু করার জন্য কার্সার সরান)
    ctrl + _ (পূর্বাবস্থায় ফেরান)
  ctrl + তীর (একটি শব্দ এগিয়ে যান)
  ctrl + a (শুরু করতে কার্সার সরান)
    ctrl + e (সরান কার্সার থেকে শেষ পর্যন্ত)
  ctrl + k (কার্সারের পরে সবকিছু কাটে)
  ctrl + l (স্ক্রিন পরিষ্কার করে)
  ctrl + q (পুনরায় শুরু করার কমান্ড যা অগ্রভাগে রয়েছে)
    ctrl + s (পুরোভূমিতে একটি দীর্ঘ চলমান কমান্ডকে বিরতি দিন)
  ctrl + t (দুটি অক্ষর অদলবদল করুন)
  ctrl + u (কার্সারের আগে সবকিছু কেটে দেয়)
  ctrl + x + ctrl + e ( একটি সম্পাদকে কমান্ড স্ট্রিং খোলে যাতে এটি চালানোর আগে আপনি এটি সম্পাদনা করতে পারেন)
  ctrl + x + * (গ্লোব/স্টার প্রসারিত করুন)
  ctrl + xx (লাইনের বিপরীত প্রান্তে যান)
    ctrl + y (বাফার থেকে পেস্ট করে)
  ctrl + shift + c/v (টার্মিনালে কপি/পেস্ট করুন)

# ক্রমানুসারে কমান্ড চলমান
&&(চালান দ্বিতীয় কমান্ড যদি প্রথমটি সফল হয়)
; (প্রথমটির সাফল্য নির্বিশেষে দ্বিতীয় কমান্ড চালান)

# পুনঃনির্দেশ করা I/O
2>&1 (stdout এবং stderr ফাইলে পুনঃনির্দেশিত)

# চেক খোলা পোর্টের জন্য
echo> /dev/tcp/ /
`` (শেল আউট করতে ব্যাক টিক ব্যবহার করুন)

# এক্সামিনেশন এক্সিকিউটেবল

file
command -V (আপনাকে বলে যে একটি অন্তর্নির্মিত, বাইনারি বা উপনাম কিনা)

  1. নতুনদের জন্য কমান্ড লাইন - কিভাবে একটি প্রো মত টার্মিনাল ব্যবহার করবেন [সম্পূর্ণ হ্যান্ডবুক]

  2. লিনাক্স কমান্ড - বেসিক ব্যাশ কমান্ড লাইন টিপস আপনার জানা উচিত

  3. লিনাক্সে কার্যকরী ব্যাশ স্ক্রিপ্ট লেখার জন্য 10টি দরকারী টিপস

  4. মজার উপায় ব্যাশ শেখার জন্য 3টি কমান্ড লাইন গেম