locate - جستجوی سریع فایلهای ایجاد شده، توسط نام آنها.
شکل کلی دستور:
# locate [options] [pattern]
شاید شما هم با دستور find کار کرده باشید و کمتر دستور locate را دیده باشید.
یک مقایسه اجمالی در مورد این دو دستور:
دستور find:
- جستجو در موقعیت فعلی (نیازی به روز رسانی ندارد)
- گزینههای اختیاری فراوان برای جستجوی هرچه بهتر
- سرعت کم
- بدون نیاز به دسترسی کاربر ریشه
- تاریخچهی قدیمی دارد
- پشتیبانی ازعملکردها (عملگرهای بولی و...)
- پشتیبانی کامل از Globbing و Regular expressions
- ملحق کردن دستور دیگر در نتایج حاصل از دستور (با استفاده از exec-)
دستور locate:
- جستجو با توجه به آخرین بهروز رسانی پایگاه دادهی خود
- نیاز به دستور updatedb دارد
- سرعت بالا در جستجو
- گزینههای اختیاری کم
- به منظور دیدن همهی فایل، و اجازه برای ساخت پایگاه داده، اسکریپت برای ساخت یا بهروز رسانی پایگاه داده باید به عنوان کاربر ریشه اجرا کنید.
- امنیت کم (از آنجا که این پایگاه داده شامل یک لیست کامل از فایلها بر روی دیسک (از جمله آندسته از دایرکتوریهای خصوصی)، و توسط هرکسی قابل خواندن است، اینمی تواند پیامدهای امنیتی داشته باشد. و بدتر از آن، شما نمیتوانید در مرحلهی اول یک پایگاه داده مجزا برای خود داشته باشید).
- جستجو بر اساس نام
- پشتیبانی از Globbing و Regular_expression، اما نه در تمام نسخههای آن
بهطور کلی زمانی دستور locate مناسب است که مکان یک فایل فراموش شده، که با نام آن با این دستور میتوانید به نتیجهی دلخواه برسید.
قبل از اینکه با این دستور کار کنید بهتراست یک بار پایگاه داده را بهروز رسانی کنید:
# updatedb
نکته: ممکن است برای اولین بار که میخواهید از دستور locate استفاده کنید پیغام عدم وجود یک پایگاه داده را مشاهده کنید که برای رفع آن، به صورت بالا یک بار بهروز رسانی انجام دهید.
مسیر این پایگاه داده در زیر آمده است:
/var/lib/mlocate/mlocate.db
شما میتوانید محتویات آن را توسط دستور strings مشاهده کنید:
#strings /var/lib/mlocate/mlocate.db | more
نکته: شما میتوانید با دستور cron، بهروز رسانی پایگاه داده را زمانبندی کنید.
نکته: ممکن است خروجی حاصل از جستجوی نام شما طولانی باشد، برای رفع این مشکل میتوانید از less و more کمک بگیرید:
locate log | more locate log | less
گزینههای اختیاری:
b-
مخفف basename: از این گزینه زمانی استفاده میشود که شما دقیقا نام فایل را میخواهید پیدا کنید. تفاوت وجود و عدم وجود این گزینه را در خروجی ببینید:
حالت اول: به دلیل طولانی بودن خروجی فقط یک بر دویست آن را مشاهده میکنید! تعداد خطوط خروجی بیش از ۵۷۰۰! امتحان کنید... (خروجی خلاصه شده است)
locate log > /home/Yourname/Desktop/log /etc/login.defs /etc/logrotate.conf /etc/logrotate.d /etc/lsb-base-logging.sh /etc/remote-login-service.conf /etc/rsyslog.conf /etc/rsyslog.d /etc/ImageMagick/log.xml /etc/alternatives/rlogin /etc/alternatives/rlogin.1.gz /etc/apache2/conf.d/other-vhosts-access-log /etc/apache2/mods-available/log_forensic.load /etc/apparmor.d/usr.sbin.rsyslogd /etc/apparmor.d/disable/usr.sbin.rsyslogd /etc/apparmor.d/local/usr.sbin.rsyslogd /etc/apt/apt.conf.d/20changelog /etc/cron.daily/logrotate /etc/default/bootlogd /etc/default/rsyslog /etc/init/flush-early-job-log.conf /etc/init/plymouth-log.conf /etc/init/rsyslog.conf /etc/init.d/bootlogd /etc/init.d/plymouth-log /etc/init.d/rsyslog /etc/init.d/stop-bootlogd /etc/init.d/stop-bootlogd-single /etc/java-6-openjdk/logging.properties
حالت دوم: در حالت دوم، تعداد خطوط حدودا ۳۰۰۰ تا! چیزی حدودا معادل نصف خروجی بالا! (خروجی خلاصه شده است)
locate -b log > /home/Yourname/Desktop/log /bin/login /bin/ntfsdump_logfile /etc/logcheck /etc/login.defs /etc/logrotate.conf /etc/logrotate.d /etc/lsb-base-logging.sh /etc/remote-login-service.conf /etc/rsyslog.conf /etc/rsyslog.d /etc/ImageMagick/log.xml /etc/alternatives/rlogin /etc/alternatives/rlogin.1.gz /etc/apache2/conf.d/other-vhosts-access-log /etc/apache2/mods-available/log_forensic.load /etc/apparmor.d/usr.sbin.rsyslogd /etc/apparmor.d/disable/usr.sbin.rsyslogd /etc/apparmor.d/local/usr.sbin.rsyslogd /etc/apt/apt.conf.d/20changelog /etc/cron.daily/logrotate
l-
مخفف limit: در بیشتر مواقع خروجی حاصل، طولانی است. برای اینکار میتوان خروجی را به تعداد خط مشخص محدود کرد. که در مثال زیر خروجی را به ۱۰ خط محدود کردهایم:
locate -l 10 log > /home/Yourname/Desktop/log /bin/login /bin/ntfsdump_logfile /etc/logcheck /etc/login.defs /etc/logrotate.conf /etc/logrotate.d /etc/lsb-base-logging.sh /etc/remote-login-service.conf /etc/rsyslog.conf /etc/rsyslog.d
c-
مخفف count: این گزینه بهجای مسیر نام جستجو شده، تعداد نتایج را برمیگرداند که یک عدد صحیح است.
locate -c log 5731
i-
: این گزینه اختیاری برای غیرفعال کردن حالت حساس است. در این حالت واژهی "LOG" با "log" تفاوتی نخواهد کرد. پس خروجی دوحالت زیر یکسان است.
حالت اول:
locate -b -10 -i log > /home/Yourname/Desktop/log
حالت دوم:
locate -b -10 -i LOG > /home/Yourname/Desktop/log
r-
مخفف regexp: شما میتوانید توسط این گزینه از regular expression استفاده کنید.
locate -i -r "[^0-9][a-z]og" | more