استفاده از تاریخچه (History) در خط فرمان لینوکس
همانطوری که در درسهای ابتدایی یاد گرفتیم، بش (Bash) تاریخچه (History) از فرمانهایی است که وارد کردهایم را حفظ و نگهداری میکند. این لیست فرمانهای در داخل پوشه home در داخل فایلی با نام bash_history نگهداری میشوند.
تسهیلات تاریخچه منبعی مفید است که به شما کمک میکند تا کمتر تایپ کنید. بهویژه زمانی که با ویرایش فرمان ترکیب شوند شما میتوانید فرمان قبلی تایپ شده را با تغییرات جزیی به فرمانی جدید تبدیل نمایید.
جستجو در تاریخچه (History) خط فرمان
هر زمانی، ما میتوانیم محتوای لیست تاریخچه فرمانها را مشاهده کنیم:
1 |
[me@linuxbox ~]$ history | less |
بهطور پیشفرض، بش (Bash) آخرین ۵۰۰ فرمان وارد شده توسط شما را در حافظه خود ذخیره میکند. در آینده خواهیم آموخت که چگونه این مقدار را تغییر دهیم. بهعنوان مثال میخواهیم فرمانهایی که برای لیست کردن /usr/bin استفاده شدهاند را پیدا کنیم. این یک راه برای رسیدن به این هدف است:
1 |
[me@linuxbox ~]$ history | grep /usr/bin |
حال در بین فرمانهای خود به یک فرمان جذاب مثل این رسیدیم:
1 |
88 ls -l /usr/bin > ls-output.txt |
عدد ۸۸ شماره خطی است که فرمان در لیست تاریخچه فرمانها به خود اختصاص داده است. یک نوع دیگر بسط وجود دارد به نام بسط تاریخچه (History Expansion). برای استفاده از فرمان خط ۸۸ از علامت تعجب (!) قبل از شماره خط استفاده میکنیم، بهصورت زیر:
1 |
[me@linuxbox ~]$ !88 |
علاوه بر این بش (Bash) توانایی جستجوی فزاینده در تاریخچه فرمان را برای ما فراهم آورده است. به این معنا که میتوانیم به بش (Bash) بگوییم تاریخچه فرمان را زمانی که کاراکتری را وارد میکنیم بهصورت فزاینده جستجو کن که در این صورت هر کاراکتری که اضافه میکنیم جستجوی ما را پالایش و تصحیح میکند.
برای شروع یک جستجوی فزایند، Ctrl+R را فشار دهید و در دنباله آن متن مورد نظر را وارد نمایید. وقتی که فرمان را پیدا کردید میتوانید Enter را فشار دهید تا فرمان اجرا شود یا Ctrl+J را بفشارید تا فرمان از خط تاریخچه به فرمان اخیر خط فرمان کپی شود.
برای یافتن پیدایش متن بعدی (حرکت به بالا در لیست تاریخچه)، کلید Ctrl+R را دوباره فشار دهید و برای خروج از حالت جستجو نیز میتوانید Ctrl+G و یا Ctrl+C را فشار دهید. ابتدا Ctrl+R را فشار دهید:
1 |
(reverse-i-search)`': |
مشاهده میشود که وضعیت خط فرمان تغییر کرده تا نشان دهد که ما در حال انجام یک جستجوی فزاینده برعکس هستیم. چرا برعکس؟ زیرا ما داریم از زمان حال (اکنون) به فرمانهای گذشته جستجو میکنیم. سپس شروع به نوشتن متن جستجو میکنیم. (بهعنوان مثال /usr/bin)
1 |
(reverse-i-search)`/usr/bin': ls -l /usr/bin > ls-output.txt |
بلافاصله جستجو نتیجه را به ما برمیگرداند. اکنون میتوانیم فرمان را با فشردن کلید Enter اجرا کنیم و یا با استفاده از Ctrl+J آن را به داخل فرمانهای اخیر کپی کنیم. حال Ctrl+J را فشار میدهیم:
1 |
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt |
شل (Shell) برمیگردد و خط فرمان برای اجرا آماده میشود.
جدول زیر لیست برخی از کلمات کلیدی بهمنظور دستکاری لیست تاریخچه را نشان میدهد:
کلید | شرح عملکرد |
---|---|
Ctrl+P | جابجایی به ورودی قبلی تاریخچه، درست همان کاری که کلید جهت بالا در صفحهکلید میکند. |
Ctrl+N | جابجایی به ورودی بعدی تاریخچه، درست همان کاری که کلید جهت پایین در صفحهکلید میکند. |
Alt+< | جابجایی به ابتدا (بالای) لیست تاریخچه |
Alt+> | جابجایی به انتها (پایین) لیست تاریخچه. برای مثال فرمان اخیر |
Ctrl+R | برعکس کردن جستجوی افزایشی، جستجوهای بصورت افزایشی از فرمان اخیر لیست تاریخچه را مرتب میکنند. |
Alt+P | برعکس کردن جستجوی غیرافزایشی، با این کلید، رشته جستجو را تایپ کنید و قبل از انجام جستجو کلید Enter را فشار دهید. |
Alt+N | جستجو رو به جلو، غیرافزایشی |
Ctrl+O | اجرای آیتم در لیست تاریخچه و پیش روی به مورد بعدی. این زمانی به کار میآید که شما میخواهید یک تاولی از فرمانهای موجود در لیست تاریخچه را دوباره اجرا کنید. |
بسط تاریخچه (History Expansion)
شل (Shell) نوع ویژهای از بسط برای آیتمهایی که در لیست تاریخچه استفاده میشوند را با استفاده از کاراکتر علامت تعجب (!) عرضه میکند.
همانطور که دیدیم علامت تعجب سبب شد تا شماره خط فرمان ذخیره شده در لیست تاریخچه را پیدا کنیم. ویژگیهای دیگری از نوع بسط در جدول زیر وجود دارد:
توالی | عملکرد |
---|---|
!! | تکرار آخرین فرمان. احتمالا این آسانتر است تا کلید جهت بالا و سپس Enter را فشار دهید. |
!number | تکرار شماره آیتم لیست تاریخچه |
!string | تکرار آخرین آیتم لیست تاریخچه که با رشته خاص شروع میشود. |
!?string | تکرار آخرین آیتم لیست تاریخچه که حاوی رشتهای خاص است. |
توجه: از بسط تاریخچه استفاده نکنید مگر آن که کاملاً از محتوای فرمان در تاریخچه مطمئن باشید.
درباره فرشید نوتاش حقیقت
همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرمافزارهای آزاد/ متنباز و سیستمعامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.
نوشتههای بیشتر از فرشید نوتاش حقیقتاین سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش میشوند.
دیدگاهتان را بنویسید