پرش به مطلب اصلی

مرجع سریع دستورات لاگ‌گیری

این سند یک مرجع سریع برای پرکاربردترین دستورات لاگ‌گیری در سیستم‌عامل لینوکس است. اگر می‌دانید به‌دنبال چه چیزی هستید ولی نمی‌دانید کدام دستور را باید بزنید، اینجا را نگاه کنید. هر دستور با یک توضیح کوتاه فارسی همراه شده تا کاربرد آن سریعاً مشخص باشد.

اطلاعات

این سند مکمل راهنمای راهنمای ذهنی لاگ‌گیری در Rocky Linux است. آن راهنما به شما یاد می‌دهد چطور فکر کنید، و این سند دستورات دقیق را در اختیارتان می‌گذارد.

مکان‌های اصلی لاگ در لینوکس​

قبل از هر چیز، بدانید لاگ‌ها کجا ذخیره می‌شوند. بیشتر لاگ‌ها در /var/log/ قرار دارند، ولی بعضی سرویس‌ها مسیر اختصاصی خودشان را دارند.

مسیرتوضیح
/var/log/مسیر اصلی نگهداری تمام لاگ‌های سیستمی
/var/log/syslogلاگ عمومی سیستم (Debian/Ubuntu)
/var/log/messagesلاگ عمومی سیستم (RHEL/CentOS)
/var/log/auth.logلاگ احراز هویت و ورود (Debian)
/var/log/secureلاگ احراز هویت (RHEL/CentOS)
/var/log/kern.logلاگ‌های مربوط به کرنل
/var/log/dmesgپیام‌های بوت و درایورها
/var/log/boot.logلاگ فرآیند بوت سیستم
/var/log/cronلاگ اجرای Cron Job ها
/var/log/mail.logلاگ سرویس ایمیل
/var/log/apache2/لاگ‌های Apache (Debian)
/var/log/httpd/لاگ‌های Apache (RHEL)
/var/log/nginx/لاگ‌های Nginx
/var/log/mysql/لاگ‌های MySQL
/var/log/journal/لاگ‌های باینری systemd-journald

مشاهده‌ی ساده‌ی لاگ‌ها​

دستور cat — نمایش کل محتوای فایل​

cat تمام محتوای فایل را یکجا نمایش می‌دهد. برای فایل‌های کوچک مناسب است، ولی برای فایل‌های بزرگ توصیه نمی‌شود.

cat /var/log/syslog # نمایش کل فایل لاگ
cat -n /var/log/syslog # نمایش با شماره خط
cat file1.log file2.log # نمایش چند فایل پشت سر هم

دستور less — مشاهده‌ی صفحه‌بندی‌شده​

less فایل را به‌صورت تعاملی باز می‌کند و می‌توانید داخل آن جستجو و حرکت کنید. برای فایل‌های بزرگ بهترین گزینه است.

less /var/log/syslog # مشاهده تعاملی
less +F /var/log/syslog # مشاهده زنده (شبیه tail -f)
less +G /var/log/syslog # پرش به انتهای فایل
less -N /var/log/syslog # نمایش با شماره خط
نکته

کلیدهای مفید در less: /pattern جستجو به جلو · ?pattern جستجو به عقب · n نتیجه‌ی بعدی · N نتیجه‌ی قبلی · g ابتدای فایل · G انتهای فایل · q خروج.

دستور more — نمایش صفحه‌به‌صفحه ساده​

more نسخه‌ی ساده‌تر و قدیمی‌تر less است. فقط به جلو حرکت می‌کند و امکانات کمتری دارد.

more /var/log/syslog # نمایش صفحه به صفحه (Space برای صفحه بعد)

مشاهده‌ی ابتدا و انتهای لاگ​

دستور head — نمایش خطوط ابتدایی​

head خطوط ابتدای فایل را نشان می‌دهد. به‌طور پیش‌فرض ۱۰ خط اول.

head /var/log/syslog # ۱۰ خط اول (پیش‌فرض)
head -n 50 /var/log/syslog # ۵۰ خط اول
head -c 500 /var/log/syslog # ۵۰۰ بایت اول

دستور tail — نمایش خطوط انتهایی​

tail مهم‌ترین دستور لاگ‌گیری است. خطوط انتهای فایل را نشان می‌دهد و با -f می‌توانید لاگ را زنده دنبال کنید.

tail /var/log/syslog # ۱۰ خط آخر
tail -n 100 /var/log/syslog # ۱۰۰ خط آخر
tail -f /var/log/syslog # نمایش زنده (Follow)
tail -F /var/log/syslog # Follow حتی اگر فایل rotate شود
tail -n +100 /var/log/syslog # از خط ۱۰۰ به بعد
tail -f /var/log/syslog /var/log/auth.log # چند فایل همزمان
tail -f --pid=1234 /var/log/app.log # توقف پس از خاتمه پروسه
نکته

تفاوت -f و -F: اگر فایل rotate شود (مثلاً syslog به syslog.1 منتقل شود)، -f به فایل قدیمی می‌چسبد ولی -F فایل جدید را دنبال می‌کند. برای لاگ‌های production همیشه از -F استفاده کنید.

جستجو در لاگ‌ها با grep​

grep مثل Ctrl+F در مرورگر است، ولی برای فایل‌ها. پرکاربردترین ابزار جستجو در لاگ‌هاست.

جستجوی پایه​

grep "error" /var/log/syslog # جستجوی ساده کلمه
grep -i "error" /var/log/syslog # بدون حساسیت به حروف
grep -n "error" /var/log/syslog # نمایش شماره خط
grep -c "error" /var/log/syslog # شمارش تعداد تطابق
grep -v "info" /var/log/syslog # خطوطی که شامل info نیستند
grep -w "error" /var/log/syslog # تطابق کلمه کامل
grep -r "error" /var/log/ # جستجو در تمام فایل‌های دایرکتوری
grep -l "error" /var/log/*.log # نمایش فقط نام فایل‌های شامل تطابق

جستجوی پیشرفته​

grep -A 5 "error" /var/log/syslog # ۵ خط بعد از تطابق
grep -B 5 "error" /var/log/syslog # ۵ خط قبل از تطابق
grep -C 5 "error" /var/log/syslog # ۵ خط قبل و بعد
grep -E "error|warning|fail" /var/log/syslog # چند کلمه (Regex)
grep -P "\d{3}" /var/log/syslog # Perl Regex
grep "error" /var/log/syslog | grep -v "test" # فیلتر پیاپی
tail -f /var/log/syslog | grep --line-buffered "error" # فیلتر زنده
grep "^Jan" /var/log/syslog # خطوط شروع‌شده با Jan
grep "failed$" /var/log/syslog # خطوط پایان‌یافته با failed

دستورات egrep و fgrep​

egrep "error|fatal" /var/log/syslog # معادل grep -E
fgrep "192.168.1.1" /var/log/syslog # جستجوی رشته ثابت (سریع‌تر)
نکته

--line-buffered در ترکیب tail -f | grep حیاتی است. بدون آن، grep خروجی را در بافر نگه می‌دارد و لاگ‌ها با تأخیر نمایش داده می‌شوند.

کار با لاگ‌های Systemd (journalctl)​

journalctl ابزار اصلی مشاهده‌ی لاگ‌های systemd است. در توزیع‌های مدرن (از جمله Rocky Linux، Ubuntu، Debian) تمام سرویس‌هایی که با systemctl مدیریت می‌شوند، لاگ‌هایشان در journal ذخیره می‌شود.

دستورات پایه​

journalctl # نمایش تمام لاگ‌های systemd
journalctl -r # مرتب‌سازی معکوس (جدیدترین اول)
journalctl -n 50 # ۵۰ لاگ آخر
journalctl -f # نمایش زنده (Follow)
journalctl -e # پرش به انتها
journalctl --no-pager # بدون صفحه‌بندی
journalctl -k # فقط لاگ‌های کرنل
journalctl -b # لاگ‌های بوت فعلی
journalctl -b -1 # لاگ‌های بوت قبلی
journalctl --list-boots # لیست بوت‌ها

فیلتر بر اساس سرویس و زمان​

journalctl -u nginx.service # لاگ یک سرویس خاص
journalctl -u nginx -u php-fpm # چند سرویس همزمان
journalctl -u nginx -f # نمایش زنده سرویس
journalctl --since "2024-01-01" # از تاریخ مشخص
journalctl --since "1 hour ago" # یک ساعت اخیر
journalctl --since "yesterday" # از دیروز
journalctl --since "09:00" --until "10:00" # بازه ساعتی
journalctl --since today # فقط امروز
journalctl -p err # فقط خطاها
journalctl -p warning..err # بازه اولویت

سطوح اولویت (Priority Levels)​

کدنامتوضیح
0emergاضطراری — سیستم قابل استفاده نیست
1alertباید فوراً اقدام شود
2critوضعیت بحرانی
3errخطا
4warningهشدار
5noticeاطلاعات مهم
6infoاطلاعات عمومی
7debugاطلاعات دیباگ

فرمت خروجی و مدیریت​

journalctl -o json # خروجی JSON
journalctl -o json-pretty # JSON خوانا
journalctl -o short-iso # تاریخ ISO
journalctl -o cat # فقط پیام‌ها بدون timestamp
journalctl --disk-usage # حجم اشغالی journal
journalctl --verify # بررسی سلامت لاگ‌ها
journalctl --vacuum-time=7d # حذف لاگ‌های قدیمی‌تر از ۷ روز
journalctl --vacuum-size=500M # محدود کردن حجم به ۵۰۰ مگ
journalctl --rotate # چرخش دستی لاگ
journalctl _PID=1234 # لاگ‌های یک PID
journalctl _UID=1000 # لاگ‌های یک کاربر
journalctl /usr/bin/sshd # لاگ‌های یک باینری
هشدار

journalctl --vacuum-time و --vacuum-size لاگ‌ها را برای همیشه حذف می‌کنند. قبل از اجرا مطمئن شوید به آن‌ها نیازی ندارید.

لاگ‌های کرنل با dmesg​

dmesg پیام‌های کرنل را نمایش می‌دهد — شامل رویدادهای بوت، خطاهای سخت‌افزاری، مشکلات درایورها و پیام‌های شبکه.

dmesg # نمایش پیام‌های کرنل
dmesg -T # نمایش با تاریخ خوانا
dmesg -H # حالت human-readable + رنگی
dmesg -w # نمایش زنده (Wait/Follow)
dmesg -l err,warn # فیلتر بر اساس سطح
dmesg --facility=kern # فیلتر بر اساس facility
dmesg | grep -i usb # فقط پیام‌های USB
dmesg | grep -i error # فقط خطاها
dmesg -c # خواندن و پاک کردن بافر
dmesg --clear # پاک کردن بافر

دستورات لاگ ورود کاربران​

این دستورات تاریخچه‌ی ورود و خروج کاربران را نشان می‌دهند — چه از فایل‌های wtmp/btmp و چه از وضعیت فعلی سیستم.

last # لاگ ورودهای موفق کاربران
last -n 20 # ۲۰ ورود آخر
last username # ورودهای یک کاربر خاص
last reboot # تاریخچه ری‌بوت‌ها
last -x shutdown # تاریخچه shutdown
lastb # تلاش‌های ورود ناموفق
lastlog # آخرین ورود همه کاربران
lastlog -u root # آخرین ورود کاربر خاص
who # کاربران فعلی سیستم
who -a # جزئیات کامل
w # کاربران فعلی + فعالیت
users # لیست ساده کاربران آنلاین

برش و پردازش لاگ​

دستور awk​

awk ابزار پردازش ستونی است. وقتی لاگ ساختار ستونی دارد (مثل access.log)، awk بهترین انتخاب است.

awk '{print $1}' /var/log/syslog # ستون اول هر خط
awk '{print $1, $2, $3}' /var/log/syslog # چند ستون
awk '/error/ {print}' /var/log/syslog # فیلتر خطوط خطا
awk 'NR==10' /var/log/syslog # فقط خط شماره ۱۰
awk 'NR>=10 && NR<=20' /var/log/syslog # خطوط ۱۰ تا ۲۰
awk '{count[$5]++} END {for(x in count) print x, count[x]}' access.log # شمارش بر اساس ستون

دستورات sed و cut​

sed -n '10,20p' /var/log/syslog # نمایش خطوط ۱۰ تا ۲۰
sed -n '/error/p' /var/log/syslog # نمایش خطوط شامل error
sed '/^$/d' /var/log/syslog # حذف خطوط خالی
sed 's/error/ERROR/g' /var/log/syslog # جایگزینی
cut -d' ' -f1,2,3 /var/log/syslog # برش با جداکننده فاصله
cut -c1-15 /var/log/syslog # کاراکترهای ۱ تا ۱۵

دستورات sort، uniq و wc​

sort /var/log/syslog # مرتب‌سازی
sort -r /var/log/syslog # مرتب‌سازی معکوس
sort -u /var/log/syslog # حذف تکراری‌ها
sort file.log | uniq -c # شمارش موارد تکراری
sort file.log | uniq -c | sort -rn # مرتب بر اساس تکرار
wc -l /var/log/syslog # شمارش خطوط
wc -w /var/log/syslog # شمارش کلمات
wc -c /var/log/syslog # شمارش بایت

کار با لاگ‌های فشرده شده​

لاگ‌های قدیمی معمولاً با gzip، bzip2 یا xz فشرده می‌شوند تا فضای دیسک کمتری اشغال کنند. برای خواندن و جستجو در آن‌ها از نسخه‌ی z* همان ابزارها استفاده کنید.

zcat /var/log/syslog.1.gz # نمایش فایل gz
zless /var/log/syslog.1.gz # less برای gz
zmore /var/log/syslog.1.gz # more برای gz
zgrep "error" /var/log/syslog.*.gz # grep در فایل‌های gz
zegrep "error|fail" /var/log/*.gz # egrep در gz
bzcat file.log.bz2 # نمایش bz2
bzgrep "error" file.log.bz2 # grep در bz2
xzcat file.log.xz # نمایش xz
xzgrep "error" file.log.xz # grep در xz
نکته

برای لاگ‌های چرخش‌یافته (مثل syslog.1.gz، syslog.2.gz و...)، می‌توانید با الگوی * همه را یکجا جستجو کنید: zgrep "error" /var/log/syslog.*.gz. این روش برای ردیابی مشکلات قدیمی بسیار مفید است.

مدیریت چرخش لاگ با logrotate​

logrotate مسئول چرخش، فشرده‌سازی و حذف لاگ‌های قدیمی است. بدون آن، لاگ‌ها دیسک را پر می‌کنند.

cat /etc/logrotate.conf # فایل اصلی تنظیمات
ls /etc/logrotate.d/ # تنظیمات هر سرویس
logrotate -d /etc/logrotate.conf # تست بدون اجرا (Debug)
logrotate -f /etc/logrotate.conf # اجرای اجباری چرخش
logrotate -v /etc/logrotate.d/nginx # اجرا با نمایش جزئیات
cat /var/lib/logrotate/status # وضعیت آخرین چرخش‌ها

نمونه فایل کانفیگ logrotate​

/etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
}

هر خط این کانفیگ یک رفتار را تعریف می‌کند:

دستورمعنی
dailyچرخش روزانه
rotate 7نگه‌داشتن ۷ نسخه‌ی قدیمی
compressفشرده‌سازی نسخه‌های قدیمی
delaycompressفشرده‌سازی با یک چرخه تأخیر
missingokاگر فایل نبود، خطا نده
notifemptyفایل خالی را چرخش نده
create 0640 www-data admساخت فایل جدید با مالکیت مشخص

نوشتن لاگ با logger​

logger به شما اجازه می‌دهد از داخل اسکریپت یا خط فرمان، پیام به syslog بفرستید. برای ردیابی رویدادهای سفارشی بسیار مفید است.

logger "پیام تست" # ارسال پیام به syslog
logger -p user.info "پیام اطلاعاتی" # با تعیین اولویت
logger -t myapp "خطای برنامه" # با تگ (tag)
logger -f /path/to/file # ارسال محتوای فایل
logger -s "پیام خطا" # ارسال + نمایش در stderr
echo "خطا" | logger -t backup # ارسال از pipe
نکته

تگ (-t) به شما اجازه می‌دهد پیام‌های برنامه‌ی خودتان را بعداً راحت پیدا کنید: journalctl -t myapp --since "1 hour ago".

لاگ‌های امنیتی و Audit​

دستور auditd و ausearch​

سیستم Audit هر عمل حساس روی سیستم را ثبت می‌کند — تغییر فایل‌های مهم، اجرای دستورات با sudo، تلاش‌های ورود و بلاک‌های SELinux.

systemctl status auditd # وضعیت سرویس audit
ausearch -m USER_LOGIN # جستجوی رویدادهای ورود
ausearch -ua username # رویدادهای یک کاربر
ausearch -f /etc/passwd # دسترسی به فایل خاص
ausearch -ts today # رویدادهای امروز
ausearch -k mykey # جستجو با کلید تعریف‌شده
aureport # گزارش کلی audit
aureport -au # گزارش احراز هویت
aureport -l # گزارش ورودها
aureport -f # گزارش دسترسی فایل‌ها
auditctl -l # لیست قوانین فعال
auditctl -w /etc/passwd -p wa -k passwd_changes # افزودن قانون
امنیت

افزودن قانون auditctl -w /etc/passwd -p wa -k passwd_changes به شما اجازه می‌دهد هر نوشتن (write) یا تغییر ویژگی (attribute) روی فایل /etc/passwd را ردیابی کنید. این برای محیط‌های حساس توصیه می‌شود.

لاگ‌های وب سرور​

Nginx​

tail -f /var/log/nginx/access.log # لاگ دسترسی زنده
tail -f /var/log/nginx/error.log # لاگ خطا زنده
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head # پرترافیک‌ترین IPها
grep " 404 " /var/log/nginx/access.log # خطاهای 404
grep " 500 " /var/log/nginx/access.log # خطاهای 500
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head # پربازدیدترین URLها

Apache​

tail -f /var/log/apache2/access.log # Debian/Ubuntu
tail -f /var/log/httpd/access_log # RHEL/CentOS
tail -f /var/log/apache2/error.log # خطاهای Apache
اطلاعات

لاگ‌های Apache در RHEL با پسوند _log و در Debian با پسوند .log نام‌گذاری می‌شوند. این تفاوت در اسکریپت‌های چندسکویی مهم است.

مانیتورینگ زنده‌ی چند لاگ​

وقتی باید همزمان چند لاگ را زیر نظر داشته باشید، ابزارهای تخصصی به کار می‌آیند.

multitail /var/log/syslog # مشاهده تعاملی لاگ
multitail /var/log/syslog /var/log/auth.log # چند لاگ همزمان
multitail -i /var/log/nginx/access.log -i /var/log/nginx/error.log # در پنجره‌های جداگانه
lnav /var/log/syslog # مشاهده‌گر پیشرفته لاگ
lnav /var/log/ # تمام لاگ‌های یک دایرکتوری
نکته

lnav قابلیت‌های پیشرفته‌ای دارد: جستجوی SQL-like، فیلتر، هایلایت خودکار خطاها، و پیمایش زمانی. اگر لاگ‌ها را زیاد بررسی می‌کنید، ارزش یادگیری دارد.

لاگ‌های شبکه و فایروال​

journalctl -u ufw # لاگ UFW
journalctl -u firewalld # لاگ firewalld
grep "UFW BLOCK" /var/log/syslog # بلاک‌های UFW
iptables -L -v -n # نمایش قوانین + شمارنده
journalctl -u ssh # لاگ SSH
grep "Failed password" /var/log/auth.log # تلاش‌های ناموفق SSH
grep "Accepted" /var/log/auth.log # ورودهای موفق SSH
fail2ban-client status # وضعیت fail2ban
fail2ban-client status sshd # وضعیت jail SSH

مدیریت سرویس‌های لاگ‌گیری​

systemctl status rsyslog # وضعیت rsyslog
systemctl restart rsyslog # ریستارت rsyslog
cat /etc/rsyslog.conf # فایل کانفیگ rsyslog
ls /etc/rsyslog.d/ # کانفیگ‌های اضافی
rsyslogd -N1 # تست صحت کانفیگ
systemctl status systemd-journald # وضعیت journald
systemctl restart systemd-journald # ریستارت journald
cat /etc/systemd/journald.conf # کانفیگ journald

ذخیره و انتقال خروجی لاگ​

grep "error" /var/log/syslog > errors.txt # ذخیره در فایل
grep "error" /var/log/syslog >> errors.txt # الحاق به فایل
journalctl -u nginx > nginx.log # خروجی journal به فایل
journalctl -u nginx --since today | gzip > today.log.gz # فشرده‌سازی همزمان
tail -f /var/log/syslog | tee output.log # نمایش + ذخیره
scp /var/log/syslog user@server:/backup/ # انتقال به سرور
نکته

tee خروجی را همزمان روی صفحه و در فایل می‌نویسد. برای دیباگ زنده‌ی یک مشکل و ذخیره‌ی همزمان آن بسیار مفید است. اگر می‌خواهید فایل قبلی پاک نشود، از tee -a استفاده کنید.

تحلیل و آمارگیری از لاگ​

grep -c "error" /var/log/syslog # تعداد خطاها
awk '{print $5}' access.log | sort | uniq -c | sort -rn # آمار پرتکرارترین‌ها
grep "Failed password" auth.log | awk '{print $11}' | sort -u # IPهای حمله‌کننده
grep "Failed password" auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head # ۱۰ IP برتر حمله
awk '$9 == 500' access.log | wc -l # تعداد خطای 500
du -sh /var/log/* # حجم هر لاگ
find /var/log -type f -size +100M # لاگ‌های بزرگ‌تر از ۱۰۰ مگ
find /var/log -type f -mtime +30 # لاگ‌های قدیمی‌تر از ۳۰ روز
اطلاعات

ترکیب awk + sort + uniq -c + sort -rn یک الگوی طلایی برای هر نوع آمارگیری از لاگ است. اگر ستون موردنظر را می‌دانید، این چهار دستور تقریباً هر سؤالی را جواب می‌دهند.

پاک‌سازی و مدیریت حجم لاگ​

> /var/log/syslog # خالی کردن فایل بدون حذف
truncate -s 0 /var/log/syslog # خالی کردن (روش بهتر)
cat /dev/null > /var/log/syslog # روش کلاسیک
find /var/log -name "*.gz" -mtime +30 -delete # حذف gz های قدیمی
journalctl --vacuum-time=30d # حذف journal قدیمی
journalctl --vacuum-size=1G # محدود کردن به ۱ گیگ
خطر

هرگز فایل لاگ را با rm حذف نکنید. سرویس‌هایی که فایل را باز نگه داشته‌اند، به نوشتن در آن ادامه می‌دهند اما فضای دیسک آزاد نمی‌شود (تا زمانی که سرویس ری‌استارت شود). همیشه از truncate یا > استفاده کنید.

جدول خلاصه‌ی ابزارهای مهم لاگ‌گیری​

ابزارکاربرد اصلی
catنمایش کل محتوای فایل
less / moreمشاهده صفحه‌بندی شده و تعاملی
head / tailنمایش خطوط ابتدا / انتها
tail -fمشاهده زنده لاگ
grepجستجوی متن در لاگ
awkپردازش ستونی و آماری
sedجایگزینی و ویرایش متن
journalctlلاگ‌های systemd
dmesgلاگ‌های کرنل
last / lastlog / lastbتاریخچه ورود کاربران
who / wکاربران آنلاین فعلی
loggerنوشتن لاگ به syslog
logrotateمدیریت چرخش لاگ‌ها
zgrep / zcatکار با لاگ‌های فشرده
multitail / lnavمانیتورینگ چند لاگ همزمان
ausearch / aureportتحلیل لاگ‌های امنیتی audit
fail2ban-clientمدیریت بلاک IPهای مخرب

خلاصه​

  • برای مشاهده‌ی سریع: cat برای فایل‌های کوچک، less برای فایل‌های بزرگ، tail -f برای مشاهده‌ی زنده.
  • برای جستجو: grep با ترکیب -i، -n، -A/-B/-C و -E تقریباً هر نیاز جستجویی را پوشش می‌دهد.
  • برای لاگ‌های systemd: journalctl با فیلترهای -u، --since/--until، -p و -b ابزار اصلی است.
  • برای تحلیل و آمار: ترکیب awk + sort + uniq -c + sort -rn یک الگوی تکرارشدنی برای هر نوع آمارگیری از لاگ است.
  • برای مدیریت حجم: logrotate را تنظیم کنید و journalctl --vacuum-* را بشناسید. هرگز با rm فایل لاگ را حذف نکنید.