فعال‌سازی و استفاده از Timestamp برای تاریخچه دستورات در Bash

در Bash به‌صورت پیش‌فرض تاریخ و زمان اجرای دستورات در خروجی history نمایش داده نمی‌شود. با تنظیم متغیر محیطی HISTTIMEFORMAT می‌توان این قابلیت را فعال کرد.

اما یک نکته مهم و کمتر شناخته‌شده وجود دارد:

اگر timestamp قبلاً ذخیره نشده باشد، بعد از فعال‌سازی، تمام دستورات قدیمی با یک زمان یکسان (زمان فعال‌سازی) نمایش داده می‌شوند — نه زمان واقعی اجرای آن‌ها.

در ادامه این رفتار را دقیق بررسی می‌کنیم.

فعال‌سازی Timestamp

برای فعال‌سازی نمایش تاریخ و زمان:

export HISTTIMEFORMAT='%F %T '

فرمت‌ها:

  • %F → تاریخ به صورت YYYY-MM-DD
  • %T → زمان به صورت HH:MM:S

مثال عملی (خروجی واقعی)

در سیستم زیر، ابتدا timestamp فعال نشده بود. سپس دستور زیر اجرا شد:

export HISTTIMEFORMAT='%F %T '

خروجی history بعد از فعال‌سازی:

1   2026-05-05 23:14:41 hostnamectl set-hostname dns.vahiddb.com
2   2026-05-05 23:14:41 systemctl stop firewalld
3   2026-05-05 23:14:41 systemctl disable firewalld
...
35  2026-05-05 23:14:41 vi /var/named/56.168.192.db
36  2026-05-05 23:14:48 export HISTTIMEFORMAT='%F %T '
37  2026-05-05 23:14:52 date
38  2026-05-05 23:14:55 timedatectl
39  2026-05-05 23:15:03 echo ""hello world"
40  2026-05-05 23:15:13 echo "hello world"
41  2026-05-05 23:15:15 history

نکته بسیار مهم (رفتار واقعی Bash)

همان‌طور که در خروجی مشاهده می‌کنید:

تمام دستورات قدیمی (شماره 1 تا 35)

همگی یک timestamp یکسان دارند:

2026-05-05 23:14:41

در حالی که این دستورات در زمان‌های مختلف اجرا شده بودند.

چرا این اتفاق می‌افتد؟

چون:

  • قبل از فعال‌سازی HISTTIMEFORMAT،
  • Bash زمان اجرای دستورات را در فایل ~/.bash_history ذخیره نکرده بود.

بنابراین وقتی شما بعداً HISTTIMEFORMAT را فعال می‌کنید:

  • Bash برای دستورات قبلی زمان واقعی ندارد.
  • در نتیجه آن‌ها را با زمان بارگذاری history (یا زمان فعال‌سازی) نمایش می‌دهد.
  • این زمان واقعی نیست.

رفتار صحیح بعد از فعال‌سازی

از لحظه‌ای که این متغیر تنظیم شود:

export HISTTIMEFORMAT='%F %T '

دستورات جدید با زمان دقیق ذخیره می‌شوند.

مثلاً:

37  2026-05-05 23:14:52 date
38  2026-05-05 23:14:55 timedatectl
39  2026-05-05 23:15:03 echo ""hello world"

این زمان‌ها دقیق و واقعی هستند.

دائمی کردن تنظیم

برای اینکه این قابلیت همیشه فعال باشد:

echo "export HISTTIMEFORMAT='%F %T '" >> ~/.bashrc

و برای اعمال فوری:

source ~/.bashrc

از این به بعد هر دستور با timestamp واقعی ذخیره می‌شود.