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