ব্যাশ ইতিহাস খুবই শক্তিশালী। কীভাবে কার্যকরভাবে ব্যাশ ইতিহাস সম্প্রসারণ ব্যবহার করতে হয় তা বোঝা আপনাকে লিনাক্স কমান্ড লাইনে অত্যন্ত উত্পাদনশীল করে তুলবে৷
এই নিবন্ধটি 15টি উদাহরণ ব্যাখ্যা করে যা নিম্নলিখিত ব্যাশ ইতিহাস সম্প্রসারণ বৈশিষ্ট্যগুলি ব্যবহার করে:
- ইভেন্ট ডিজাইনার - ইতিহাসের একটি নির্দিষ্ট কমান্ডকে বোঝায়। এটি একটি! দিয়ে শুরু হয়
- শব্দ মনোনীত - ইতিহাস এন্ট্রির একটি নির্দিষ্ট শব্দকে বোঝায়। সাধারণত এটি একটি এমনকি মনোনীতকারীর সাথে মিলিত হয়। এমনকি মনোনীত এবং শব্দ মনোনীতকারী একটি কোলন দ্বারা পৃথক করা হয়
- সংশোধনকারী - ইভেন্ট বা শব্দ মনোনীতকারীদের দ্বারা প্রতিস্থাপনের ফলাফল পরিবর্তন করে
এই নিবন্ধটি আমাদের চলমান ব্যাশ টিউটোরিয়াল সিরিজের অংশ।
আপনি ইতিমধ্যেই জানেন, সমস্ত ইতিহাস এন্ট্রি দেখতে, ইতিহাস কমান্ড ব্যবহার করুন। এটি ইতিহাসের সারণীতে সেই কমান্ডের নম্বর সহ পূর্বে কার্যকর করা সমস্ত কমান্ড প্রদর্শন করবে৷
$ history 1 tar cvf etc.tar /etc/ 2 cp /etc/passwd /backup 3 ps -ef | grep http 4 service sshd restart 5 /usr/local/apache2/bin/apachectl restart
ব্যাশ ইতিহাস ইভেন্ট ডিজাইনার
1. !n
ব্যবহার করে ইতিহাস থেকে একটি নির্দিষ্ট কমান্ড চালানআপনি যদি আগে একটি কমান্ড এক্সিকিউট করে থাকেন, তাহলে এটি আবার টাইপ করার পরিবর্তে, আপনি ইতিহাসে কমান্ডের সংশ্লিষ্ট নম্বর ব্যবহার করে দ্রুত এটি চালাতে পারেন।
উদাহরণস্বরূপ, কমান্ড # 4 কার্যকর করতে, নিম্নলিখিতটি করুন। এটি ইতিহাস থেকে কমান্ড #4 প্রদর্শন করবে এবং অবিলম্বে এটি কার্যকর করবে।
<কেন্দ্র> কেন্দ্র>$ !4 service sshd restart
2টি কমান্ড টাইপ করা একটি কমান্ড চালানোর জন্য, নিম্নলিখিতগুলি করুন৷
৷$ !-2
পূর্ববর্তী কমান্ড চালানোর জন্য, নিম্নলিখিত যেকোন একটি করুন:
$ !! $ !-1
পূর্ববর্তী কমান্ডে যাওয়ার জন্য আপনি
আপনি যদি 'set -o vi' ব্যবহার করে কমান্ড লাইনের জন্য vi শৈলী সম্পাদনা সক্ষম করে থাকেন তবে পূর্ববর্তী কমান্ডে যেতে
2. !string এবং !?string
ব্যবহার করে কীওয়ার্ড দিয়ে একটি কমান্ড চালানআপনি ইতিহাস থেকে একটি কমান্ড কার্যকর করতে কীওয়ার্ড ব্যবহার করতে পারেন।
নিম্নলিখিত উদাহরণটি পূর্ববর্তী কমান্ডের জন্য অনুসন্ধান করবে যা কীওয়ার্ড দিয়ে শুরু হয় "ps" এবং এটি চালান। এই উদাহরণে, এটি পূর্ববর্তী কমান্ড “ps -ef | grep http” এবং এটি চালায়।
$ !ps ps -ef | grep http
নিম্নলিখিত উদাহরণটি পূর্ববর্তী কমান্ডের জন্য অনুসন্ধান করবে যা কীওয়ার্ডটি রয়েছে "apache" এবং এটি চালান। এই উদাহরণে, এটি "/usr/local/apache2/bin/apachectl restart" পূর্ববর্তী কমান্ডটি তুলে নেয় এবং এটি কার্যকর করে।
$ !?apache /usr/local/apache2/bin/apachectl restart
3. ^str1^str2^
ব্যবহার করে পূর্ববর্তী কমান্ড থেকে একটি স্ট্রিং প্রতিস্থাপন করুননিম্নলিখিত উদাহরণে, প্রথমে আমরা একটি ফাইল যাচাই করার জন্য ls কমান্ডটি কার্যকর করেছি। পরে আমরা বুঝতে পারি যে আমরা ফাইলের বিষয়বস্তু দেখতে চাই। পুরো ফাইলের নাম আবার টাইপ করার পরিবর্তে, আমরা পূর্ববর্তী কমান্ডের "ls" কে নীচে দেখানো "cat" দিয়ে প্রতিস্থাপন করতে পারি।
$ ls /etc/cron.daily/logrotate $ ^ls^cat^ cat /etc/cron.daily/logrotate
দ্রষ্টব্য:অতিরিক্ত ব্যাশ ইতিহাসের টিপসের জন্য, লিনাক্স কমান্ড লাইন ইতিহাসের মাস্টার করার 15টি উদাহরণ পড়ুন। এটি ব্যাখ্যা করে কিভাবে ইতিহাসে টাইমস্ট্যাম্প প্রদর্শন করতে হয় এবং হিস্টটাইমফরম্যাট, হিস্টিসাইজ, হিস্টফাইল, হিস্টকন্ট্রোল এবং হিস্টিগনোর সহ বিভিন্ন ইতিহাস সম্পর্কিত পরিবেশের ভেরিয়েবলগুলি কীভাবে ব্যবহার করতে হয়
ব্যাশ হিস্ট্রি ওয়ার্ড ডিজাইনার
আপনি যখন একটি নতুন কমান্ড টাইপ করতে চান তখন ওয়ার্ড ডিজাইনারগুলি খুব সহায়ক, তবে আগে চালানো কমান্ডগুলির একটি থেকে আর্গুমেন্ট ব্যবহার করুন। কিছু উদাহরণ নিচে দেখানো হয়েছে।
4. :^
ব্যবহার করে একটি কমান্ডের ১ম আর্গুমেন্ট পাননিম্নলিখিত উদাহরণে, "!cp:^" কে "ls -l" কমান্ডের যুক্তি হিসাবে দেওয়া হয়েছিল। "!cp:^" ইতিহাসে আগের কমান্ডটি সনাক্ত করে যা "cp" দিয়ে শুরু হয় এবং সেই কমান্ডের ১ম আর্গুমেন্ট পায়।
$ cp /etc/passwd /backup $ ls -l !cp:^ ls -l /etc/passwd
নিম্নলিখিত উদাহরণটি পূর্ববর্তী কমান্ড থেকে 1ম আর্গুমেন্ট পায়।
$ ls -l !!:^
5. :$
ব্যবহার করে একটি কমান্ডের শেষ আর্গুমেন্ট পাননিম্নলিখিত উদাহরণে, "!cp:$" কে "ls -l" কমান্ডের আর্গুমেন্ট হিসেবে দেওয়া হয়েছে। “!cp:$” ইতিহাসে আগের কমান্ডটি সনাক্ত করে যা “cp” দিয়ে শুরু হয় এবং সেই কমান্ডের শেষ আর্গুমেন্ট পায়।
$ cp /etc/passwd /backup $ ls -l !cp:$ ls -l /backup
নিম্নলিখিত উদাহরণটি পূর্ববর্তী কমান্ড থেকে শেষ আর্গুমেন্ট পায়।
$ls -l !!:$
6. :n
ব্যবহার করে একটি কমান্ডের nম আর্গুমেন্ট পাননিম্নলিখিত উদাহরণে, "!tar:2" কে "ls -l" কমান্ডের যুক্তি হিসাবে দেওয়া হয়েছিল৷ "!tar:2" ইতিহাসে আগের কমান্ডটি সনাক্ত করে যা "tar" দিয়ে শুরু হয় এবং সেই কমান্ডের ২য় আর্গুমেন্ট পায়।
$ tar cvfz /backup/home-dir-backup.tar.gz /home $ ls -l !tar:2 ls -l /backup/home-dir-backup.tar.gz
7. :*
ব্যবহার করে একটি কমান্ড থেকে সমস্ত আর্গুমেন্ট পাননিম্নলিখিত উদাহরণে, "!cp:*" "ls -l" কমান্ডের যুক্তি হিসাবে দেওয়া হয়েছিল। "!cp:*" ইতিহাসে আগের কমান্ডটি সনাক্ত করে যা "cp" দিয়ে শুরু হয় এবং এর সমস্ত আর্গুমেন্ট পায়৷
$ cp /etc/passwd /backup $ ls -l !cp:* ls -l /etc/passwd /backup
8. !%
ব্যবহার করে সম্প্রতি অনুসন্ধান করা শব্দটি পড়ুনযেমনটি আমরা উপরে ব্যাখ্যা করেছি, “!?apache” পূর্ববর্তী ইতিহাস কমান্ড অনুসন্ধান করবে যেটিতে “apache” কীওয়ার্ড রয়েছে এবং এটি কার্যকর করবে।
$ /usr/local/apache2/bin/apachectl restart $ !?apache /usr/local/apache2/bin/apachectl restart
!% পুরো শব্দটিকে নির্দেশ করবে যা আগের "?" অনুসন্ধান করুন৷
৷উদাহরণস্বরূপ, আপনি যদি আগে “?apache” অনুসন্ধান করে থাকেন, তাহলে “!%” পুরো শব্দটি “/usr/local/apache2/bin/apachectl”-এর সাথে মিলবে। মনে রাখবেন যে "/" এই প্রসঙ্গে একটি শব্দের অংশ হিসাবে বিবেচিত হয়৷
৷সুতরাং, এই ক্ষেত্রে, নিম্নলিখিতগুলি সম্পাদন করে, আপনি অ্যাপাচি বন্ধ করতে পারেন।
$ !% stop /usr/local/apache2/bin/apachectl stop
9. x-y
ব্যবহার করে একটি কমান্ড থেকে আর্গুমেন্টের পরিসীমা পাননিম্নলিখিত উদাহরণে, "!tar:3-5" "ls -l" কমান্ডের যুক্তি হিসাবে দেওয়া হয়েছিল। "!tar:3-5" ইতিহাসে আগের কমান্ডটি সনাক্ত করে যা "tar" দিয়ে শুরু হয় এবং 3 থেকে 5 পর্যন্ত আর্গুমেন্ট পায়৷
$ tar cvf home-dir.tar john jason ramesh rita $ ls -l !tar:3-5 ls -l john jason ramesh
নিম্নলিখিত 2 থেকে সমস্ত আর্গুমেন্ট পায়।
$ ls -l !tar:2-$
অনুগ্রহ করে নিম্নলিখিতগুলি নোট করুন:
- !!:* পূর্ববর্তী কমান্ড থেকে সমস্ত আর্গুমেন্ট পায়
- !!:2* ২য় আর্গুমেন্ট থেকে শুরু করে সমস্ত আর্গুমেন্ট পায়।
- !!:2-$ উপরের মতই। ২য় আর্গুমেন্ট থেকে শুরু করে সব আর্গুমেন্ট পায়।
- !!:2- ২য় আর্গুমেন্ট থেকে শুরু করে সমস্ত আর্গুমেন্ট পায় (শেষ আর্গুমেন্ট ছাড়া)।
ব্যাশ ইতিহাস পরিবর্তনকারী
সংশোধক শব্দের পরে মনোনীত করা হয়, যেমনটি নীচের উদাহরণে ব্যাখ্যা করা হয়েছে।
10. :h
ব্যবহার করে একটি শব্দ থেকে ট্রেলিং পাথ নামটি সরাননিম্নলিখিত উদাহরণে, “!!:$:h” পূর্ববর্তী কমান্ডের শেষ আর্গুমেন্ট নেয় এবং ট্রেলিং পাথ নামটি সরিয়ে দেয়। এই ক্ষেত্রে, এটি ফাইলের নাম মুছে দেয়, এবং শুধুমাত্র সম্পূর্ণ পথ পায়।
$ ls -l /very/long/path/name/file-name.txt $ ls -l !!:$:h ls -l /very/long/path/name
11. :t
ব্যবহার করে একটি শব্দ থেকে সমস্ত অগ্রণী পথের নাম সরানএটি আগের উদাহরণের ঠিক বিপরীত।
নিম্নলিখিত উদাহরণে, “!!:$:t” পূর্ববর্তী কমান্ডের শেষ আর্গুমেন্ট নেয় এবং সমস্ত অগ্রণী পথের নাম মুছে দেয়। এই ক্ষেত্রে, এটি শুধুমাত্র ফাইলের নাম পায়৷
৷$ ls -l /very/long/path/name/file-name.txt $ ls -l !!:$:t ls -l file-name.txt
12. :r
ব্যবহার করে একটি শব্দ থেকে ফাইলের নাম এক্সটেনশনটি সরাননিম্নলিখিত উদাহরণে, “!!:$:r” পূর্ববর্তী কমান্ডের শেষ আর্গুমেন্ট নেয় এবং শুধুমাত্র “.suffix” (যেটি এখানে ফাইলের নাম এক্সটেনশন) সরিয়ে দেয়। এই ক্ষেত্রে, এটি .txt
সরানো হয়েছে$ ls -l /very/long/path/name/file-name.txt $ ls -l !!:$:r ls -l /very/long/path/name/file-name
13. :s/str1/str2/
ব্যবহার করে ব্যাশ ইতিহাসে প্রতিস্থাপনের মত Sed"^অরিজিনাল^প্রতিস্থাপন^" ব্যবহার করার পরিবর্তে আমরা আগে আলোচনা করেছি, আমরা নীচের উদাহরণে দেখানো ব্যাশ ইতিহাসে একটি sed-এর মতো প্রতিস্থাপনও ব্যবহার করতে পারি। এই মনে রাখা সহজ হতে পারে. !! পূর্ববর্তী কমান্ডকে কল করতে হয়, “:s/original-string/replacement-string/” একটি স্ট্রিং প্রতিস্থাপন করার জন্য sed-এর মতো সিনট্যাক্স।
$ !!:s/ls -l/cat/
আপনি নীচে দেখানো হিসাবে বিশ্বব্যাপী প্রতিস্থাপন করতে g পতাকা (s পতাকা সহ) ব্যবহার করতে পারেন। এটি সহায়ক যখন আপনি একাধিক শব্দ ভুল টাইপ করেন এবং সেগুলি একসাথে পরিবর্তন করতে চান এবং আবার কমান্ডটি চালাতে চান৷
নিম্নলিখিত উদাহরণে, ভুলবশত আমি দুবার "পাসওয়ার্ড" দিয়েছি (পাসওয়ার্ডের পরিবর্তে)।
$ cp /etc/password /backup/password.bak
এটি ঠিক করতে, শুধুমাত্র নিম্নলিখিত বৈশ্বিক ইতিহাস sed যেমন প্রতিস্থাপন করুন।
$ !!:gs/password/passwd/ cp /etc/passwd /backup/passwd.bak
14. :&
ব্যবহার করে দ্রুত প্রতিস্থাপনের পুনরাবৃত্তি করুনআপনি যদি উপরে দেখানো হিসাবে সফলভাবে একটি ব্যাশ ইতিহাস প্রতিস্থাপন সম্পাদন করে থাকেন, তাহলে আপনি :&.
ব্যবহার করে দ্রুত একই প্রতিস্থাপনের পুনরাবৃত্তি করতে পারেন।আমি ভুলবশত অন্য একটি কমান্ডে "passwd" এর পরিবর্তে আবার "পাসওয়ার্ড" টাইপ করেছি।
$ tar cvf password.tar /etc/password
এখন, কমান্ডটি পুনরায় টাইপ করার পরিবর্তে, বা "gs/password/passwd" করার পরিবর্তে, আমি কেবল ":&" ব্যবহার করতে পারি, যা শেষ প্রতিস্থাপনটি পুনরায় ব্যবহার করবে। বিশ্বব্যাপী শেষ সাবসিটিউশন পুনরায় ব্যবহার করার জন্য ":g&" ব্যবহার করুন।
$ !!:g& tar cvf passwd.tar /etc/passwd
15. কমান্ড ব্যবহার না করেই প্রিন্ট করুন :p
আপনি যখন জটিল ইতিহাস প্রতিস্থাপন করছেন তখন এটি খুবই সহায়ক, এবং আপনি এটি কার্যকর করার আগে চূড়ান্ত কমান্ডটি দেখতে চান৷
নিম্নলিখিত উদাহরণে, "!tar:3-:p", আসলেই কমান্ডটি কার্যকর করে না।
যেহেতু আমরা এখানে ":p" দিয়েছি, এটি শুধুমাত্র প্রতিস্থাপন করে এবং নতুন কমান্ড প্রদর্শন করে। একবার আপনি ব্যাশ ইতিহাস সম্প্রসারণ যাচাই করে নিলে, এবং আপনি যদি মনে করেন যে এটিই আপনি চালানোর উদ্দেশ্য, ":p" সরান এবং এটি আবার চালান৷
$ tar cvf home-dir.tar john jason ramesh rita $ tar cvfz new-file.tar !tar:3-:p tar cvfz new-file.tar john jason ramesh