از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
دستورات و بسط های تاریخ Bash
سرفصلهای مطلب
در این راهنما، روش کار با دستورات تاریخچه Bash را نشان خواهیم داد.
پیش نیازها:
برای انجام مراحلی که در این آموزش نشان داده شده است، به اجزای زیر نیاز دارید:
- یک سیستم لینوکس با پیکربندی مناسب روش راه اندازی یک VM اوبونتو را در VirtualBox بررسی کنید.
- آشنایی اولیه با command-line رابط.
تاریخچه Bash
Bash پوسته پیش فرض در اکثر سیستم های لینوکس مدرن است. بهعنوان جانشین «sh»، پوسته اصلی یونیکس، دارای ویژگیها و پیشرفتهای متعددی مانند دستکاری فهرست، کنترل کار، نامهای مستعار، تاریخچه فرمان و غیره است.
Bash تمام دستوراتی را که قبلاً از آن اجرا شده بود، ردیابی می کند terminal. این می تواند در موقعیت های متعددی مانند اشکال زدایی فوق العاده مفید باشد. همچنین میتواند نیاز به تایپ دستورات یکسان/مشابه را کاهش دهد.
برای مدیریت تاریخچه، Bash با دو دستور داخلی ارائه می شود:
برای ذخیره تاریخچه، Bash از دو تکنیک مختلف استفاده می کند:
- هر زمان که با یک جلسه پوسته کار می کنید، تاریخچه آن در حافظه ذخیره می شود.
- هنگامی که بسته می شود، تاریخچه ای که در حافظه ذخیره می شود در یک فایل تاریخچه ریخته می شود.
فایل تاریخچه پیشفرض که Bash استفاده میکند در این آدرس قرار دارد:
همچنین تعدادی متغیر محیطی و میانبرهای صفحه کلید وجود دارد که روش مدیریت Bash تاریخچه را تغییر می دهد.
کار با Bash History
استفاده پایه
برای دریافت لیست دستوراتی که اخیرا اجرا شده اند، از دستور زیر استفاده کنید:
در اینجا، تمام دستوراتی که در بافر ذخیره می شوند، فهرست شده اند. هر دستور دارای مقدار عددی است. قدیمی ترین دستور با 1 اختصاص داده می شود.
با استفاده از دستور زیر می توانیم تعداد دستورات را برای چاپ محدود کنیم:
در اینجا، N یک عدد صحیح است که در آن N >= 0 است. خروجی حاوی آخرین N دستورات از تاریخ است.
همچنین می توانیم از خروجی پشت سر هم با grep برای فیلتر کردن استفاده کنیم:
برای مرور تاریخچه طولانی، میتوانیم از دستور «کمتر» استفاده کنیم:
حذف دستورات از تاریخچه
اگر می خواهید دستور خاصی را از تاریخچه حذف کنید، از دستورات زیر استفاده کنید:
به طور مشابه، برای حذف دستورات از M به N از تاریخچه، می توانیم از دستورات زیر استفاده کنیم:
برای پاک کردن تاریخچه از بافر RAM برای جریان terminal جلسه، به جای آن از دستورات زیر استفاده کنید:
$ تاریخ
برای پاک کردن تاریخچه از فایل تاریخچه ذخیره شده روی دیسک، ما می توانیم آن را به طور کامل با NULL بازنویسی کنیم:
تنظیمات تاریخچه Bash
راههای مختلفی برای تغییر روش مدیریت Bash در تاریخ وجود دارد. بسیاری از این گزینه ها توسط متغیرهای محیطی مدیریت می شوند.
برای تغییر مقدار آنها، فایل “bashrc” را ویرایش می کنیم:
پس از ویرایش، فایل را ذخیره کرده و مجدداً در Bash بارگذاری کنید.
برای ایجاد تغییرات در سراسر سیستم، “bashrc” را که در مکانهای زیر قرار دارد ویرایش کنید:
$ نانو /و غیره/بشرک
اندازه بافر
همانطور که قبلا ذکر شد، Bash از دو بافر برای ذخیره تاریخچه فرمان در RAM (برای جلسه فعلی) و در یک فایل دیسک (برای تمام جلسات قبلی) استفاده می کند.
اندازه این بافرها توسط دو متغیر محیطی کنترل می شود:
- HISTSIZE: تعداد ورودی های ذخیره شده در بافر RAM را مشخص می کند.
- HISTFILESIZE: تعداد ورودی های ذخیره شده در فایل دیسک را مشخص می کند.
ما می توانیم مقدار آنها را در “bashrc” برای مطابقت با نیازهای خود تغییر دهیم:
به عنوان مثال، برای ذخیره 5000 ورودی در هر دو بافر، “bashrc” را با کد زیر به روز کنید:
$ HISTFILESIZE=5000
حذف فرمان
به طور پیشفرض، Bash تک تک دستورات اجرا شده را در بافرهای تاریخچه ذخیره میکند. با این حال، میتوانیم آن را طوری پیکربندی کنیم که Bash دستورات خاصی را نادیده بگیرد. این می تواند در شرایطی مفید باشد که مجبور هستید چندین بار دستورات مشابه را اجرا کنید و بافر را با هرزنامه پر کنید.
- HISTCONTROL
بیایید با مثال دستور زیر شروع کنیم:
همانطور که خروجی فرمان history نشان می دهد، فقط اولین فرمان echo ثبت می شود اما دومی نه.
این کار متغیر محیطی HISTIGNORE است. به Bash میگوید دستورات را در بافر تاریخچه مبتنی بر ثبت نکند روی الگوهای خاص مقادیر زیر در دسترس هستند:
- نادیده گرفتن: اگر دستوری با ورودی سابقه قبلی مطابقت داشته باشد، ثبت نمی شود.
- نادیده گرفتن فضا: اگر دستوری در ابتدا با فاصله شروع شود، ثبت نمی شود.
- هر دو را نادیده بگیرید: هم قاعده ignoredups و هم ignorespace را اعمال می کند.
- پاک شده ها: تمام خطوط قبلی که با دستور فعلی مطابقت دارند از تاریخچه پاک می شوند.
در مثال اول، استفاده از ignorespace را نشان دادیم. با این حال، همه توزیعها نمیتوانند Bash را با این پیکربندی ارسال کنند. مثل همیشه، می توانیم آنها را به “bashrc” اضافه کنیم:
همچنین با استفاده از دستور زیر می توان چندین گزینه را فعال کرد:
در اینجا، ignoredups:ignorespace معادل ignoreboth است.
- HISTIGNORE
این متغیر محیطی می تواند شامل یک یا چند الگو باشد. هر فرمانی که با هر الگوی توصیف شده توسط HISTIGNORE مطابقت داشته باشد در هیچ یک از بافرهای سابقه ثبت نخواهد شد. الگوها با استفاده از عبارات منظم تعریف می شوند.
ساختار به شرح زیر است:
به عنوان مثال، برای حذف دستورات history و echo از تاریخچه Bash، HISTIGNORE را به صورت زیر به روز کنید:
ما می توانیم از زنجیره دستورات زیر برای آزمایش آن استفاده کنیم:
$ تاریخ
$ تاریخ
مهر زمانی
Bash همچنین می تواند برای ثبت زمان اجرای یک فرمان پیکربندی شود. می تواند در موقعیت های مختلف مانند اشکال زدایی مفید باشد.
برای فعال کردن مهرهای زمانی در سابقه Bash، مقدار HISTTIMEFORMAT را بهروزرسانی کنید:
تمام کاراکترهای کنترل قالب زمانی موجود در مرد موجود است page از دستور تاریخ
لیست زیر شامل چند مورد ساده است:
- %T: زمان
- %d: روز
- %m: ماه
- %y: سال
تداوم تاریخ
هنگام کار با CLI، در بسیاری از موارد، با چندین ترمینال کار می کنید. اینجاست که مدیریت تاریخ باش می تواند به منبع درد تبدیل شود.
به طور پیش فرض، پس از بسته شدن جلسه، فایل تاریخچه به روز می شود. در حالی که برای یک جلسه خوب است، اما برای چندین جلسه به طور همزمان کافی نیست. ما می توانیم این مشکل را با مجبور کردن Bash برای به روز رسانی فایل تاریخچه هر بار که دستوری اجرا می شود حل کنیم.
برای انجام این کار، مقدار PROMPT_COMMAND را بهروزرسانی کنید:
در اینجا، متغیر PROMPT_COMMAND می تواند حاوی دستورات معتبری باشد. محتویات PROMPT_COMMAND قبل از اینکه Bash ورودی کاربر را شروع کند اجرا می شود. دستور “history –a” تاریخچه را مجبور می کند تا محتویات را به پرونده تاریخچه اضافه کند.
بسط تاریخ و تعیین کنندگان
Bash دارای چند میانبر داخلی برای استفاده از ویژگی تاریخچه آن است. در اینجا لیست تعیین کنندگان آمده است:
- !!: آخرین دستور را از تاریخ اجرا می کند.
- !ن: دستور N ام را از تاریخ اجرا می کند.
- !-ن: دستور N ام را قبل از آخرین دستور تاریخ اجرا می کند.
- !<فرمان>: آخرین دستور
را اجرا می کند.
زنجیره دستورات زیر کاربرد آنها را نشان می دهد:
$ اکو 2
$ اکو 3
$ تاریخ
$ !اکو
$ !–3
$ !1
$ !!
برخی از تعیین کننده ها نیز با آرگومان های دستوری از تاریخ کار می کنند:
- !:*: از تمام آرگومان های آخرین دستور استفاده کنید.
- !:^: از اولین آرگومان آخرین دستور استفاده کنید.
- !: ن: از آرگومان N ام آخرین دستور استفاده کنید.
- !:MN: از آرگومان های M تا N آخرین دستور استفاده کنید.
- !:$: از آخرین آرگومان آخرین دستور استفاده کنید.
زنجیره دستورات زیر کاربرد آنها را نشان می دهد:
$ اکو !:*
$ اکو 1 2 3 4 5 6 7
$ اکو !:^
$ اکو 1 2 3 4 5 6 7
$ اکو !:5
$ اکو 1 2 3 4 5 6 7
$ اکو !:1–5
$ اکو 1 2 3 4 5 6 7
$ اکو !:$
اگر نیاز به کار با پارامترهای یک دستور دیگر دارید، تعیین کننده ها به شکل زیر هستند:
- !
^ : از اولین آرگومان دستوراستفاده می کند. - !
$ : از آخرین آرگومان دستوراستفاده می کند.
زنجیره فرمان زیر کاربرد آنها را نشان می دهد:
$ دست زدن به 1txt 2txt 3txt 4txt 5txt
$ اکو !دست زدن به^
$ اکو !دست زدن به$
میانبرهای صفحه کلید تاریخچه
علاوه بر تمام دستورات و متغیرهای محیطی، Bash همچنین از تعداد انگشت شماری میانبر صفحه کلید برای پیمایش آسان تر در تاریخ پشتیبانی می کند:
- بالا کلید پیکان: به عقب اسکرول کنید
- پایین کلید پیکان: به جلو بروید
همچنین میانبرهای صفحه کلیدی برای جستجوی تاریخچه تعاملی در دسترس هستند:
- Ctrl + R: دستورات را در تاریخ جستجو کنید.
- Ctrl + O: دستور انتخاب شده را اجرا کنید.
- Ctrl + G: از جستجوی تعاملی خارج شوید.
نتیجه
ما در مورد تاریخچه Bash با جزئیات صحبت کردیم. ما یاد گرفتیم که Bash چگونه تاریخچه فرمان را ذخیره می کند و چگونه از آن به روش های مختلف استفاده کنیم. ما روش کار با سابقه Bash را با استفاده از مثالهای مختلف نشان دادیم.
مایلید درباره Bash بیشتر بدانید؟ زیر مجموعه برنامه نویسی Bash شامل صدها راهنما است روی ویژگی های مختلف Bash
محاسبات مبارک!
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-28 18:31:03