منبع اصلی نوشتار زیر در این لینک قرار دارد

از دستور history بهتر استفاده کنیم

مقدمه


دستور history برای مشاهده تاریخچه دستورات وارد شده در خط فرمان سیستم‌عامل‌هایی بر مبنای یونیکس و لینوکس است. خروجی پیش‌فرض این دستور، فهرستی ساده‌ای از دستوراتی است که قبل از این دستور اجرا شده‌اند. مطلب امروز با معرفی پارامترها و ثابت‌های مرتبط با دستور history، باعث استفاده حداکثری شما از امکانات آن می‌شود.

فهرست دستورات اجرا شده


در زیر خروجی پیش‌فرض دستور history را مشاهده می‌نمایید:
$ history
1008 ll
1009 ifconfig
1010 sudo iptables -nL
1011 sudo psad -S
1012 aptitude update
1013 aptitude full-upgrade
1014 history

فهرست دستورات اجرا شده همراه با تاریخ و ساعت


برای مشاهده زمانی که هر دستور در خط فرمان وارد شده است می‌توانید متغیر HISTTIMEFORMAT را مقداردهی نمایید:
$ export HISTTIMEFORMAT='%F %T  '
$ history
1008 2014-05-07 09:09:11 ll
1009 2014-05-07 09:09:14 iconfig
1010 2014-05-07 09:09:25 sudo iptables -nL
1011 2014-05-07 09:09:37 sudo psad -S
1012 2014-05-07 09:09:47 aptitude update
1013 2014-05-07 09:09:55 aptitude full-upgrade
1014 2014-05-07 09:10:01 history
1015 2014-05-07 09:11:05 export HISTTIMEFORMAT='%F %T '
1016 2014-05-07 09:11:16 history
* در مقداردهی متغیر HISTTIMEFORMAT مقادیر زیر معادل یکدیگر هستند:
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )


فیلتر کردن برخی دستورات در تاریخچه دستور history


شما می‌توانید با مقداردهی متغیر HISTIGNORE دستوراتی را که مکرر استفاده می‌کنید را فیلتر نمایید:
$ export HISTIGNORE='pwd:history:ll:'
$ pwd
/home/saeid
$ history 3
1040 2014-05-07 09:22:58 history
1041 2014-05-07 09:32:48 export HISTIGNORE='pwd:history:ll:'
1042 2014-05-07 09:32:57 history 3

نادیده گرفتن تکرار دستورات


دستوراتی که قصد دارید تکرار دستورات را در history نادیده بگیرید، از متغیر HISTCONTROL به شکل زیر استفاده نمایید:
$ export HISTCONTROL=ignoredups
در نظر داشته باشید که در صورت نیاز می‌توانید تنظیمات HISTCONTROL را توسط دستور unset به حالت پیش‌فرض تغییر دهید:
$ unset HISTCONTROL

تنظیم حداکثر تعداد ذخیره‌سازی دستورات اجرا شده


متغیر HISTSIZE حداکثر تعداد ذخیره‌سازی دستورات اجرا شده را مشخص می‌نماید. مقدار پیش‌فرض این متغیر 1000 است.
$ export HISTSIZE=1000
* برای غیرفعال کردن ذخیره‌سازی دستورات اجرا شده، کافیست مقدار متغیر HISTSIZE را صفر قرار دهید:
$ export HISTSIZE=0

مشاهده دستورات اجرا شده توسط سایر کاربران


به صورت پیش‌فرض، فهرست دستورات اجرا شده توسط هر کاربر در فایلی با نام .bash_history داخل پوشه خانگی وی ذخیره می‌شود. به عنوان مثال دستورات اجرا شده توسط کاربر saeid در فایل زیر قابل مشاهده و دستیابی است:
root@Saeid-Dev:/home/saeid# ll ~saeid/.bash_history
-rw------- 1 saeid saeid 40324 May 7 08:05 /home/saeid/.bash_history
* برای تغییر نام و آدرس فایل تاریخچه دستورات از متغیر HISTFILE استفاده نمایید.
* در نظر داشته باشید که برای مشاهده محتوای فایل تاریخچه سایر کاربران، باید دسترسی کاربر ریشه (root) را داشته باشید.

جستجو در تاریخچه دستورات اجرا شده


شما می‌توانید به منظور جستجو در تاریخچه دستورات اجرا شده، از ترکیب دستورات history و grep به صورت زیر استفاده نمایید:
$ history | grep export
872 export HISTTIMEFORMAT='%F %T '
874 export HISTTIMEFORMAT='%T '
878 export HISTTIMEFORMAT='%Y - %m - %d %T '
1017 export HISTTIMEFORMAT=''
1019 export HISTTIMEFORMAT='%F %T '
1021 export HISTIGNORE='ll:history'
1024 export HISTIGNORE='ls -l:history:ll'
1026 export HISTIGNORE='ll'
1028 export HISTIGNORE='ls -l'
1041 export HISTIGNORE='pwd:history:ll:'
1043 export HISTCONTROL=ignoredups
1051 unset HISTCONTROL
1053 echo "export HISTCONTROL=ignoredups" >> ~/.bash_profile
1062 export HISTSIZE=1000
1074 history | grep export

روش دیگر برای جستجو در تاریخچه دستورات استفاده از ترکیب دکمه های Ctrl و r است. با فشردن هر دو دکمه با هم، فرم جستجوی خطی تاریخچه فعال می‌شود:
(reverse-i-search)`source ': source .bash_profile

ذخیره دائمی تنظیمات دستور history


برای ذخیره نمودن دائمی تنظیمات دستور history (و سایر دستورات) می‌توانید مقادیر مورد نظر را در فایل .bash_profile ذخیره نمایید.
$ vi ~/.bash_profile
یا به صورت خودکار، مانند:
$ echo "export HISTCONTROL=ignoredups" >> ~/.bash_profile

پاک کردن تاریخچه دستورات اجرا شده


به منظور پاک کردن تاریخچه تمامی دستورات اجرا شده میتوانید، از دستورات زیر را استفاده نمایید:
$ history -c

یا
$ > $HISTFILE

در نهایت اینکه اگر قصد دارید دستوری را بدون ذخیره شدن آن در تاریخچه دستورات اجرا نمایید، کافیست در ابتدای دستور یک فاصله (space) قرار دهید ;)



برچسب ها : , , ,