مقدمه
دستور
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) قرار دهید ;)