دستور locate در لینوکس
دستور locate
در لینوکس یک ابزار خط فرمان جستجوی فایل است که برای یافتن سریع فایلها و دایرکتوریها بر اساس نام آنها با جستجو در پایگاههای داده بهروز شده استفاده میشود.
برای استفاده از دستور locate
، نحو زیر را در ترمینال اجرا کنید و مکان فایلها را به سادگی و سرعت در سیستم لینوکس خود پیدا کنید:
مراحل نصب locate در لینوکس
کار با فایلها و دایرکتوریها یکی از وظایف روزانه مدیران لینوکس است و کسب مهارت در مدیریت فایلها میتواند بهرهوری شما را بهویژه هنگام استفاده از VPS لینوکس بهبود بخشد.
روشهای مختلفی برای یافتن فایلها و دایرکتوریها در لینوکس وجود دارد، اما دستور locate
راحتترین و سریعترین روش است. دستور locate
جایگزینی کارآمد برای دستور find
برای جستجوی فایل است زیرا به جای جستجوی بازگشتی در کل سیستم فایل، یک پایگاه داده پیشساخته (که بهطور منظم با اطلاعات در مورد تمام فایلها بهروز میشود) را جستجو میکند.
اگر دستور locate
در سیستم لینوکس شما در دسترس نیست، در اینجا مراحل نصب locate
در توزیعهای لینوکس مانند Debian، Ubuntu، CentOS، RHEL و Fedora آمده است. بنابراین به عنوان روت به VPS لینوکس خود وارد شوید و مراحل زیر را با امتیاز sudo
دنبال کنید:
۱. بررسی نصب locate:
ابتدا با اجرای دستور زیر بررسی کنید که آیا دستور locate
در سیستم لینوکس شما نصب شده است یا خیر:
locate
خروجی:
Command ' locate' not found
این خروجی نشان میدهد که سیستم لینوکس شما ابزار locate
را از پیش نصب نشده است و باید locate
را در سیستم لینوکس خود نصب کنید.
با این حال، اگر خروجی “locate: no pattern to search for specified” را دریافت کردید، به این معنی است که ابزار locate
در سیستم لینوکس شما نصب شده است و میتوانید بخش نصب locate
را رد کنید.
۲. بهروزرسانی مخزن بستهها:
مخزن بستههای خود را با استفاده از مدیران بستههای خاص توزیع لینوکس خود بهروز کنید:
sudo apt update #Debian/Ubuntu sudo yum -y update #CentOS/RHEL/Fedora
۳. نصب locate در توزیعهای لینوکس
با استفاده از مدیر بسته توزیع خود، locate
را در نصب کنید:
sudo apt install mlocate # Debian/Ubuntu sudo yum install mlocate # CentOS/RHEL 7 or earlier sudo dnf install mlocate # CentOS/RHEL 8+, Fedora
اکنون، سیستم لینوکس شما مجهز به یک ابزار locate
است. نصب بسته mlocate به طور پیشفرض از طریق کار زمانبندیشده ایجاد شده، هر ۲۴ ساعت یک بار به بهروزرسانی پایگاه داده کمک میکند، اما برای بهروزرسانی دستی پایگاه داده، دستور زیر را اجرا کنید:
sudo updatedb
این دستور تضمین میکند که ابزار locate
نتیجه را از یک پایگاه داده بهروز شده فایلهای شما دریافت میکند.
گاهی اوقات، locate
نمیتواند برخی از فایلهایی که اخیراً ایجاد شدهاند را پیدا کند، بنابراین بهروزرسانی دستی پایگاه داده میتواند راه حل برای یافتن فایلهای اخیراً ایجاد شده یا جابهجا شده باشد.
نحوه استفاده از دستور locate در لینوکس
برای استفاده از دستور locate
در لینوکس، باید دستور locate
را با نام فایلها یا دایرکتوریها اجرا کنید تا مسیر تمام فایلهایی که با نام یا الگوی مشخص شده مطابقت دارند را به دست آورید.
نحو پایه locate در لینوکس:
نحو پایه دستور locate
در لینوکس به شرح زیر است:
locate [options] [pattern]
دستور locate
بدون گزینهها، مسیر فایلها و دایرکتوریهایی را که با الگوی جستجو مطابقت دارند، برای کسانی که مجوز خواندن دارند، چاپ میکند. به عنوان مثال، اگر دستور locate
را به عنوان یک کاربر معمولی اجرا کنید، نمیتوانید به دایرکتوری /root
دسترسی پیدا کنید زیرا مجوز روت را ندارید.
گزینههای کلیدی دستور locate در لینوکس:
دستور locate
در لینوکس مانند سایر ابزارهای خط فرمان دارای گزینههای متعددی برای تنظیم جستجوهای locate
با نیازهای خاص شما است. در اینجا برخی از گزینههای کلیدی هستند:
- -A: ورودیهایی را که با تمام الگوهای داده شده مطابقت دارند، چاپ میکند.
- -b: فقط نام پایه را با الگوهای مشخص شده مطابقت میدهد.
- -c: تعداد کل تطبیقهای یافت شده را به جای نام فایلها نشان میدهد.
- -d: از یک فایل پایگاه داده متفاوت (DBPATH، یک لیست جداسازی شده با کولون از نامهای فایل پایگاه داده) به جای فایل پیشفرض (پیشفرض /var/lib/locate.db است) استفاده میکند.
- -e: ورودیهایی را جستجو میکند که به فایلهای موجود اشاره میکنند.
- -r (–regexp): از یک عبارت منظم به جای الگو برای یک جستجوی پیشرفتهتر استفاده میکند.
- -q: حالت بیصدا، خروجی را سرکوب میکند تا هیچ پیامی حاوی خطا در هنگام خواندن یا پردازش پایگاههای داده نشان ندهد.
- -i: هنگام جستجوی نام فایل، حساسیت به حروف بزرگ و کوچک الگو را نادیده میگیرد.
- -n: تعداد نتایج نمایش داده شده را محدود میکند.
- -S: آمار مربوط به هر پایگاه داده خوانده شده را به جای یافتن فایلها نمایش میدهد.
- -h: یک پیام راهنما چاپ میکند.
- -V: نسخه دستور locate را نشان میدهد.
- -w: فقط نام کامل مسیر را با الگوهای داده شده مطابقت میدهد.
جستجوی پایه برای یک فایل
دستور locate
میتواند مسیر فایلها و دایرکتوریهایی را که شما با استفاده از نام فایل یا بخشی از نام فایل جستجو میکنید، چاپ کند. به عنوان مثال، برای جستجوی یک فایل به نام “test.txt” تایپ میکنید:
locate test.txt
این دستور تمام مسیرهای فایلهایی را که حاوی “test.txt” هستند، نمایش میدهد.
سفارشیسازی خروجی locate
هنگامی که نتیجه خیلی طولانی است، میتوانید خروجی دستور locate
را در لینوکس با انتقال خروجی به دستور less
در لینوکس قالببندی کنید:
locate test.txt | less
انتقال خروجی به دستور less
منجر به خوانایی بهتر میشود.
محدود کردن نتایج جستجو
میتوانید تعداد نتایج جستجو را با استفاده از گزینه -n
محدود کنید. به عنوان مثال، برای نمایش فقط ۱۵ نتیجه جستجوی فایلهایی که با .html ختم میشوند، دستور زیر را اجرا کنید:
locate "*.html" -n 15
این دستور ۱۵ فایل اول مطابق با الگوی جستجو را برمیگرداند.
نکته: دستور locate
الگوهایی را که حاوی کاراکترهای گلوبینگ (مانند *, ?, و غیره) هستند، برای تطبیق الگوی انعطافپذیر میپذیرد. اگر الگو شامل کاراکترهای گلوبینگ نباشد، دستور locate
PATTERN را جستجو میکند. بنابراین استفاده از یک کاراکتر وحشی در دستور قبلی، قدرت و دقت جستجو را با یافتن فایلها بر اساس تطبیق با الگوهای نام خاص (مانند فایلهایی با نامهای جزئی یا پسوندهای خاص) افزایش میدهد.
جستجوی بیتوجه به حروف بزرگ و کوچک
دستور locate
به طور پیشفرض پرسشها را به صورت حساس به حروف بزرگ و کوچک پردازش میکند که با استفاده از گزینه -i
، دستور locate
را مجبور میکند که هنگام جستجو، حروف بزرگ و کوچک را نادیده بگیرد. به عنوان مثال، برای نادیده گرفتن حساسیت به حروف بزرگ و کوچک از دستور زیر استفاده کنید:
locate -i test.txt
خروجی:
/home/opera/p1/TEST.txt/home/opera/p2/Test.txt/home/opera/p3/test.txt
نمایش فقط فایلهای موجود
همانطور که قبلاً ذکر شد، از آنجایی که ابزار locate
از پایگاه داده جستجو میکند، همیشه باید مطمئن شوید که پایگاه داده شما بهروز است. زیرا اگر پایگاه داده شما بهروز نشده باشد، دستور locate
ممکن است فایلهای حذف شده را چاپ کند یا فایلهای جدیدی را که پس از آخرین بهروزرسانی پایگاه داده ایجاد شدهاند، نشان ندهد.
بنابراین، برای جلوگیری از مواجهه با این مشکل، باید قبل از اجرای دستور locate
، پایگاه داده را بهطور دستی بهروز کنید یا از گزینه -e
استفاده کنید تا هنگام اجرای دستور locate در لینوکس، فقط فایلهای موجود را نشان دهید:
locate -e filename
به عنوان مثال، فایل مورد نظر به نام test.txt را حذف میکنیم و دستور locate را اجرا میکنیم:
rm test.txt locate test.txt
خروجی:
/home/opera/p3/ test.txt
این خروجی نشان میدهد که دستور locate
مسیر test.txt را برمیگرداند در حالی که ما آن را حذف کردهایم. بنابراین، از گزینه -e
با locate استفاده کنید تا این کاستیها را از بین ببرید:
locate -e test.txt
این دستور هیچ نتیجهای برنمیگرداند زیرا فایل حذف شده است.
شمارش تعداد ورودیهای مطابق
گاهی اوقات نیاز دارید بدانید چند فایل خاص که برای شما مهم هستند، در سیستم شما وجود دارند. در این وضعیت، گزینه -c
همراه با دستور locate میتواند به شما کمک کند تا تعداد فایلهای مطابق را به جای نام فایلها و مسیرهای آنها مشاهده کنید:
locate -c .txt
خروجی:
۱۸۳
همانطور که میبینید این دستور تعداد تمام ورودیهای مطابق، تمام فایلهای ختم شده با .txt را برمیگرداند.
سرکوب خروجی locate در لینوکس
میتوانید هنگام جستجو با استفاده از گزینه -q
همراه با دستور locate
در لینوکس، یک حالت بیصدا فعال کنید تا هرگونه پیام خطا یا هشدار که ممکن است هنگام پردازش پایگاههای داده ظاهر شود، سرکوب شود. برای این کار از مثال زیر استفاده کنید:
locate -q myfile.txt
این دستور myfile.txt را پیدا میکند اما در صورت بروز خطا، هیچ خطایی نمایش نمیدهد. این زمانی مفید است که میخواهید خطاهای مجوز را سرکوب کنید.
جستجوی فایل با نام دقیق
به طور پیشفرض، دستور locate
بر اساس الگویی که نشاندهنده نام فایل یا بخشی از نام فایل است، جستجو میکند.
همچنین، دستور locate
از جستجوی پیچیده پشتیبانی میکند، به شما امکان میدهد از عبارت منظم (regular expression) پایه به جای الگو استفاده کنید. بنابراین، برای یافتن یک فایل با نام دقیق (فایلهایی که با .txt ختم میشوند) دستور زیر را اجرا کنید:
locate -r \.txt$
این دستور فایلهایی را نشان میدهد که نام فایل آنها دقیقاً با پرسش ورودی مطابقت دارد. کاراکتر اسلش رو به جلو (/) برای مرزهای عبارت منظم استفاده میشود و تایپ علامت دلار ($) در انتها پایان یک خط را مشخص میکند.
استفاده از پایگاه داده متفاوت هنگام جستجو
میتوانید هنگام نیاز به یافتن نتایجی که در پایگاه داده پیشفرض mlocate وجود ندارند، یک پایگاه داده متفاوت مشخص کنید. برای استفاده از یک پایگاه داده متفاوت، نحو زیر را اجرا کنید:
locate -d [new database path] [pattern]
بررسی آمار پایگاه داده
دستور locate
به شما امکان میدهد آمار پایگاه داده را بررسی کرده و اطلاعاتی مانند تعداد فایلهای فهرست شده، تعداد دایرکتوریها و فایلها و اندازه پایگاه داده را به دست آورید. برای نمایش آمار در مورد پایگاه داده locate به جای جستجوی فایلها، از گزینه -S
همراه با دستور locate استفاده کنید:
locate -S
خروجی:
Database /var/ lib/mlocate/mlocate.db:58,150 directories276,768 files22,067,113 bytes in file names18,420,189 bytes used to store database
استفاده از جداکنندههای مختلف برای خروجی دستور locate
کاراکتر خط جدید (\n) جداکننده پیشفرض برای ورودیهای خروجی دستور locate است، اما میتوانید از یک جداکننده متفاوت مانند ASCII NULL با استفاده از گزینه -۰ استفاده کنید:
locate -0 test.txt
آیا locate میتواند فایلهای مخفی را پیدا کند؟
بله، دستور locate میتواند فایلهای مخفی را که معمولاً با نقطه (.) شروع میشوند، پیدا کند اگر آنها در پایگاه داده فهرست شده باشند. به عنوان مثال، برای یافتن هر فایلی به نام .bashrc از جمله موارد مخفی، میتوانید دستور زیر را اجرا کنید:
locate .bashrc
اگر فایلهای مخفی پس از آخرین بهروزرسانی پایگاه داده ایجاد شده باشند، ممکن است نیاز به بهروزرسانی دستی پایگاه داده locate داشته باشید تا اطمینان حاصل کنید که فایلهای مخفی فهرست شدهاند.
چگونه میتوانم یک دایرکتوری را در لینوکس با استفاده از دستور locate پیدا کنم؟
برای جستجوی یک دایرکتوری خاص با استفاده از دستور locate، از نحو زیر استفاده کنید:
locate -r '/directory_name$'
یا
locate directory_name
استفاده از اسلش انتهایی (/) برای محدود کردن نتایج به دایرکتوریها مفید است و استفاده از گزینه -r برای اطمینان از یافتن دایرکتوریها و جستجوی مسیر ختم شده به نام دایرکتوری است.
با این حال، این دستور تمام مسیرهای حاوی directory_name را فهرست میکند که گاهی اوقات نتایج زیادی را برمیگرداند. میتوانید از دستور find به عنوان جایگزینی بهتر برای دستور locate برای یافتن دایرکتوریها با نحو زیر استفاده کنید:
find /path/to/search -type d
یا
find / -type d -name directory_name
نتیجهگیری
دستور locate در لینوکس یک ابزار قدرتمند خط فرمان برای جستجوی سریع و کارآمد فایلها است. تبدیل شدن به یک متخصص در دستور locate یک مزیت ارزشمند در مدیریت فایلها در یک سیستم فایل بزرگ است. برای کسب اطلاعات بیشتر در مورد دستور locate، “man locate” را در ترمینال اجرا کنید.