۱۳۹۳/۰۲/۱۷

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

۳ نظر:

  1. با سلام
    من کارشناس ارشد GIS&RS دانشگاه چمران اهوازهستم ودرحال انجام کارهای پایان نامه ....پایان نامه من با زبان برنامه نویسی جاوا اسکریپت میباشد در زمینه انجام آن با شما میخواهم صحبتی داشته باشم.اگرامکان تماس هست شماره تماس خودرابرای من میل کنید.

    پاسخحذف
  2. اقا این space رو خوب اومدی، فردا بریم امتحان کنیم ببینیم جواب میده ;)

    پاسخحذف
  3. سلام
    من یه مشکلی دارم
    چطوری باید یک فرم رو با زدن کلیک ورود فراخوانی کنم؟
    دارم با نت بینز جاوا می نویسم ..

    پاسخحذف