جستجو فایل و پوشه در لینوکس توسط ترمینال به چند روش امکان پذیر است. با وارد کردن این دستورات ساده در ترمینال دیگر هرگز فایلی را در لینوکس گم نخواهید کرد. پیدا کردن فایلها در لینوکس در مقایسه با سیستم عامل ویندوز کار بسیار دشواری است. به ویژه اگر با سیستم عامل سرور بدون رابط کاربری دسکتاپ سر و کار داشته باشید. روشهای مختلفی برای جستجو فایل و پوشه در لینوکس وجود دارد که سادهترین و راحتترین آنها از طریق ترمینال است. شما با وارد کردن دستورات لینوکس در ترمینال میتوانید تسکهای مختلفی از قبیل کپی کردن فایل در لینوکس و یا جستجوی پوشههای گم شده را به انجام رسانده و یا دستور حذف فایل در لینوکس را صادر کنید.
سیستمعامل لینوکس یک سیستمعامل رایانه پرطرفدار و متن باز از خانواده سیستمهای شبه یونیکس است که از هسته (کرنل) لینوکس استفاده میکند (family of Unix-like operating systems that use the Linux kernel and are open source). لینوکس قابلیتهای بیشماری را در اختیار کاربران خود قرار میدهد. بسیاری از این قابلیتها از طریق میانبرهای لینوکس و یا محیط ترمینال قابل دستیابیاند.
ابزارهای خط فرمان Find و grep جزو محبوبترین ابزارهای ترمینال برای یافتن فایلها در لینوکس به شمار میآیند. دستور find در لینوکس به شما این امکان را میدهد که فایلها و پوشههای مورد نظر خود را از طریق نام فایل، اندازه، نوع و یا مالکیت آن جستجو کنید. در این مقاله قصد داریم به شما نحوه جستجو فایل و پوشه در لینوکس توسط ترمینال را آموزش دهیم. پس با ما همراه باشید. محیط ترمینال لینوکس دو دستور متفاوت برای جستجو در اختیار کاربران قرار می دهد. که در ادامه به آموزش هر دو آنها می پردازیم.
دستور find در لینوکس
دستور find در Linux به شما این امکان را میدهد که فایلها را بر اساس نام، تاریخ ایجاد، نوع فایل و یا سایز آنها جستجو کنید. برای این کار باید عبارت مورد نظر خود را به طور دقیق در ترمینال وارد کنید.
به عنوان مثال برای جستجوی فایلی به نام myfile.txt در پوشه فعلی و سایر زیر پوشهها، میتوانید دستور زیر را به کار برید.
find . -name myFile.txt
برای اینکه فایل مورد نظر خود را در پوشه خاصی جستجو کنید، باید نام آن پوشه را نیز در دستور خود بیاورید. به عنوان مثال اگر میخواهید فایلی به نام myfile.txt را در پوشه /etc جستجو کنید، باید در ترمینال عبارت زیر را تایپ کنید:
Find /etc -type f -name myfile.txt
عبارت type f در دستور فوق به این معناست که فایل شما یک فایل معمولی است. برای جستجوی فایلها و پوشههای خود در ترمینال میتوانید نوع فایل خود را به صورت زیر مشخص کنید:
F - فایل معمولی
D - دایرکتوری یا پوشه
L - لینک
C - دستگاه کاراکتری (character device)
B - دستگاه بلوکی (block device)
اگر در مورد نام فایل مطمئن نیستید و یا قسمتی از نام فایل را میدانید، میتوانید از الگوی wildcard استفاده کنید.
find . -name “myFile*”
شما میتوانید با استفاده از آپشن -size فایلهایی که حجم مشخصی دارند را جستجو کنید. برای این کار تنها کافیست که عبارت -size و سپس حجم مورد نظر خود را در ترمینال تایپ کنید.
برای مثال اگر میخواهید تمامی فایلهایی که حجم کمتر از ۲ مگابایت دارند را در پوشه /home جستجو کنید، دستور زیر را اجرا کنید:
find /home -type f -size -2M
اگر میخواهید فایلهایی که حجمشان بیشتر از ۲ مگابایت است را پیدا کنید به جای (-) از علامت (+) استفاده کنید:
find /home -type f +size -2M
شما همچنین میتوانید بازه حجم مورد نظر خود را نیز انتخاب کنید. به عنوان مثال اگر میخواهید تمامی فایلهایی که حجم بیشتر از ۲ مگابایت و کمتر از ۱۰ مگابایت دارند را جستجو کنید دستور زیر را اجرا کنید:
find /home -type f -size +2M -size 10M
نمادهای اختصاری به کار رفته برای واحدهای حجم فایل در ترمینال Linux عبارتند از:
- c - بایت
- k - کیلوبایت
- M - مگابایت
- G - گیگابایت
- b - ۵۱۲ بایت
دستور find امکان جستجوی فایلها بر مبنای زمان ایجاد یا اصطلاح آنها را در اختیار شما قرار میدهد. برای مثال اگر میخواهید تمامی فایلهای PHP موجود در پوشه /home که در طی ۱۰ روز اخیر روی آنها تغییر صورت گرفته را ببینید، عبارت زیر را در ترمینال تایپ کنید:
find /home -name "*.php" -mtime 10
اگر میخواهید تمامی فایلهایی که از زمان تغییر آنها بیشتر از ۱۰ روز گذشته است را پیدا کنید، به جای نماد (-) از نماد (+) استفاده کنید:
find /home -name "*.php" mtime +10
شما همچنین میتوانید با استفاده از دستورات سرور لینوکس و آپشن find در Linux فایلها را بر اساس اجازه دسترسی به آنها بیابید.
برای مثال اگر میخواهید تمامی فایلهای موجود در پوشه /etc با اجازه 764 را بیابید، از دستور زیر استفاده کنید:
find /etc -perm 764
گاهی اوقات ممکن است نیاز داشته باشید که تمامی فایلهایی که از یک نوع بخصوص هستند را در Linux جستجو کنید. برای این کار تنها کافی است که قبل از پسوند فرمت فایل سمبل * را قرار دهید. به این ترتیب ترمینال لینوکس تمامی فایلهایی که یک پسوند بخصوص دارند، برای مثال تمامی فایلها .txt، .png، .pdf، .mp4 و... را جستجو خواهد کرد.
فرض کنید که میخواهید تمامی فایلهای با پسوند .png را در پوشه /opt جستجو کنید. در این صورت فرمان find شما به صورت زیر درخواهد آمد:
Find /opt -type f -name '*.png'
با این دستور تمامی فایلهای با فرمت PNG که در پوشه /opt قرار دارند مورد جستجو قرار خواهند گرفت.
آدرس فایل در لینوکس
در linux دو نوع آدرس فایل وجود دارد؛ آدرس مطلق و نسبی. نماد اسلش (/) بیانگر پوشه root است که آدرس مطلق از آن شروع میشود. در حالی که آدرس نسبی با پوشه فعلی آغاز میگردد. در سیستمعامل لینوکس پوشه root در بالاترین سطح در آدرس قرار میگیرد. نماد اسلش (/) در لینوکس بیانگر پوشه root است. به عنوان مثال آدرس مطلق فایل "script" به صورت زیر است:
/home/webmaster/script
اگر در پوشه /home/webmaster باشیم، آدرس نسبی فایل ما به صورت زیر خواهد بود:
./script
دستور grep در لینوکس
یک راه دیگر برای جستجو فایل و پوشه در Linux توسط ترمینال از طریق دستور grep در محیط ترمینال است. Grep یک ابزار خط فرمان لینوکس/یونیکس برای جستجوی یک متن مشخص در محتویات یک فایل است. دستور grep از سه جزء اصلی تشکیل شده است. نخستین جزء با grep آغاز میشود؛ بعد از آن الگویی است که میخواهید جستجو کنید. در نهایت، بعد از متن مورد نظر نیز نام فایلی که grep در آن جستجو انجام میدهد آورده میشود.
یک مثال ساده از کاربرد grep در پیدا کردن یک متن مشخص مانند زیر است.
grep database configuration.php
پس از وارد کردن دستور بالا grep به دنبال کلمه database در فایل configuration.php میگردد.
- شما میتوانید بسته به فایل یا فایلهایی که میخواهید جستجو کنید، به دستور فوق شاخ و برگ بدهید. دقت داشته باشید که دستور grep به کوچک یا بزرگ بودن حروف حساس است. بنابراین موقعی که میخواهید این دستور را وارد کنید به این موضوع دقت داشته باشید. اگر میخواهید این محدودیت را از بین ببرید باید دستور زیر را در ترمینال اجرا کنید:
grep -i database
- اگر در متن جستجویتان از کاراکترهای غیر از حروف یا ارقام استفاده شده است (برای مثال خط فاصله یا نماد)، برای جستجو این کاراکترها را در داخل گیومه قرار دهید.
- اگر میخواهید یک کلمه (مثلاً database) را به طور کامل در grep جستجو کنید، باید از دستور -w استفاده کنید. به این ترتیب ترمینال تنها خطوطی را که حاوی کلمه database (نه کمتر و نه بیشتر) هستند به شما نشان میدهد.
grep -w database
- اگر میخواهید تنها فایلهایی را جستجو کنید که عین عبارت database در آنها به کار رفته است، باید از دستور grep -x استفاده کنید.
- اگر میخواهید از دستور grep برای جستجوی بیش از یک فایل استفاده کنید، باید نام فایلهای مورد نظر خود را به دستور اضافه کنید و بین هر دو نام یک اسپیس قرار دهید. مثال زیر را ملاحظه کنید:
grep database configuration1 configuration2 configuration3
در فایل Output تمامی فایلهایی که عبارت database در آنها به کار رفته و خطی که این عبارت در آن وجود دارد را مشاهده خواهید کرد.
- در صورتی که میخواهید grep در تمام فایلها به دنبال کلمه database بگردد، دستور را به شکل زیر وارد کنید.
grep -r -H database *
پس از وارد کردن این دستور کلمه Database را در تمامی فایلها جستجو و نشان میدهد. وارد کردن عبارت -r بعد از grep باعث میشود که ترمینال در تمامی پوشهها و زیرپوشهها به دنبال عبارت مد نظر شما بگردد.
- در صورتی که میخواهید فقط نام فایلهایی که شامل عبارت مورد جستجو هستند نمایش داده شود و خطی که شامل آن عبارت است نمایش داده نشود، کافیست از عبارت l- استفاده کنید.
grep -l database *
این دستور تمامی فایلهایی که شامل کلمه database است را نمایش میدهد ولی خطی که شامل آن کلمه است را نمایش نمیدهد.
- دستور grep همچنین برای فیلتر کردن خروجی حاصل از سایر دستورات نیز بکار میرود.
برای مثال دستور زیر تنها خروجیهای فایل configuration.php را نمایش میدهد.
ls -la | grep configuration.php
شما میتوانید تمامی خطوطی که فاقد یک الگوی متنی هستند را نیز جستجو کنید. برای این کار باید از دستور جستجوی معکوس استفاده کنید. برای مثال اگر میخواهید تمامی خطوطی که فاقد عبارت "database" هستند را مشاهده کنید دستور زیر را تایپ کنید:
grep -v database configuration.php
ترمینال به شما تمامی خطوطی که در فایل configuration.php فاقد عبارت database هستند را نشان خواهد داد.
با استفاده از دستور grep در ترمینال Linux میتوانید تعداد خطوطی که حاوی متن مورد نظرتان است را بیابید. برای این کار باید از دستور -c استفاده کنید:
grep -c database
گاهی اوقات ممکن است فایل بسیار بزرگی داشته باشید و بخواهید یک متن بخصوص که به کرات در فایل استفاده شده است را در آن جستجو کنید. شما میتوانید با استفاده از دستور -m تعداد خطوط نمایش داده شده را محدود کنید. دستور زیر را ببینید:
grep -m2 database configuration.php
با اجرای دستور فوق، ترمینال تنها دو نتیجه اول یافت شده در فایل configuration.php را به شما نشان خواهد داد. اگر در این دستور نام فایل را مشخص نکنید، ترمینال دو نتیجه اول جستجو از هر فایل را به شما نمایش خواهد داد.
یکی از راههای دیگر برای جستجوی فایلها در لینوکس استفاده از دستور locate است. برای مثال اگر میخواهیم فایل rc.local را پیدا کنید باید عبارت locate rc.local را در ترمینال تایپ کنید.
اما دستور grep نیز جایگزینهایی دارد.
- به عنوان مثال برای پیدا کردن یه فایل مشخص در سراسر سرور بهترین گزینه استفاده از دستور جایگزین whereis یا which است.
whereis perl
یا
which perl
اجرای دستورات فوق، مکان فایلهای اجرایی perl را به همراه مسیر کاملشان نمایش خواهد داد.
سؤالات متداول
۱. سیستمعامل لینوکس چیست؟
سیستمعامل لینوکس یک سیستمعامل متن باز مبتنی بر هسته یا کرنل لینوکس است که قابلیتهای بسیار پیشرفتهای را در اختیار مهندسان نرم افزار قرار میدهد. در واقع سیستمعامل لینوکس به گروهی از سیستمعاملهای متن باز شبه یونیکس اطلاق میشود که از هسته لینوکس استفاده میکنند. (family of Unix-like operating systems that use the Linux kernel and are open source)
۲. چگونه میتوانم دستورات کالی لینوکس را برای جستجوی فایل در لینوکس اجرا کنم؟
شما با استفاده از دستور find یا grep در محیط ترمینال کالی لینوکس میتوانید فایلها و پوشههای مورد نظر خود را در لینوکس جست و جو کنید.
۳. تفاوت دستور find و grep در ترمینال لینوکس چیست؟
از دستور find برای یافتن فایلها و پوشهها در لینوکس استفاده میشود. در حالی که عمدتاً دستور grep برای یافتن یک متن بخصوص در فایلهای لینوکس به کار میرود.
۴. تفاوت دستور find و locate در ترمینال Linux چیست؟
دستور find به صورت همزمان و realtime جستجو در سرور لینوکس را انجام میدهد. اما در دستور locate جستجو در یک دیتابیس انجام میگیرد و realtime نیست. سرعت جستجو در دستور locate بیشتر از دستور find است.