خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
آموزش استفاده از دستور Find در لینوکس
دستور find یکی از قدرتمندترین ابزارها در زرادخانه ادمین های سیستم لینوکس است. find فایل ها و دایرکتوری ها را در یک سلسله مراتب دایرکتوری بر اساس عبارت داده شده توسط کاربر سرچ کرده و می تواند اقدامات مشخص شده توسط کاربر را روی هر فایل انجام دهد.
میتوانید از دستور find برای جستجوی فایلها و دایرکتوری ها بر اساس permission ها، type، تاریخ، مالکیت، سایز و موارد دیگر استفاده کنید. همچنین می توان دستور find را با ابزارهای دیگری مانند grep یا sed ترکیب کرد.
Syntax کلی استفاده از دستور find بصورت زیر است:
options در واقع رفتار symbolic link ها، گزینه های اشکال زدایی یا debugging و optimization یا بهینه سازی را کنترل می کند.
Path دایرکتوری یا دایرکتوری های شروع را که find فایل ها را در آن جستجو می کند، تعریف می کند.
Expression در واقع همان pattern یا الگوی جستجو را مشخص می کند که این الگو را شما تعیین کی کنید.
در ادامه با ذکر مثال ها با این دستور بیشتر آشنا خواهید شد.
برای جستجوی فایلها در یک دایرکتوری، کاربری که دستور find را call یا فراخوانی و اجرا می کنید، باید مجوز read در آن دایرکتوری داشته باشد.
در دستور فوق L- در واقع یکی از options هایی است که رفتار دستور find را می تواند کنترل کند. مثلا این L- به دستور find می گوید که symbolic link ها را دنبال کند. شما به جای /var/www باید مسیر مورد نظر خودتان را جایگزین کنید. js.* در واقع شرط سرچ است که است که در این دایرکتوری همه فایل هایی که پسوند js دارند(JavaScript files) را لیست کند. هلامت * قبل از پسوند، یعنی اینکه نام فایل هر چیزی می تواند باشد.
یافتن فایل ها با نام احتمالاً رایج ترین استفاده از دستور find است. برای پیدا کردن یک فایل توسط نام آن، از گزینه name- و سپس نام فایل مورد نظر استفاده کنید. به عنوان مثال، برای جستجوی فایلی به نام document.pdf در فولدر /home/khoshamoz، از دستور زیر استفاده می کنید:
دستور find یک دستور case sensitive یا حساس به حروف بزرگ و کوچک است. برای اینکه حساسیت find را به حروف لزرگ و کوچک برداریم کافیست که به جای -name از -iname استفاده کنیم.
بدین ترتیب اگر دوباره دستور فوق را اجرا کنیم، دیگر مهم نیست که نام فایل DOCUMENT.pdf یا Document.pdf باشد.
جستجوی فایل ها بر اساس پسوند همانند جستجوی فایل ها بر اساس نام است. به عنوان مثال، برای پیدا کردن تمام فایلهایی که دارای پسوند log.gz. در مسیر /var/log/nginx هستند، باید از دستور زیر استفاده کنید.
برای یافتن همه فایلهایی که با *.log.gz مطابقت ندارند، میتوانید از گزینه not- استفاده کنید. برای مثال، برای یافتن همه فایلهایی که به log.gz.* ختم نمیشوند، از دستور زیر استفاده کنید:
بعضا شاید لازم باشد انواع خاصی از فایل ها مانند فایل های معمولی، دایرکتوری ها یا symlinks را جستجو کنید. در لینوکس همه چیز یک فایل است. برای جستجوی فایل ها بر اساس نوع آنها، از گزینه type- و یکی از توصیفگرهای زیر برای تعیین نوع فایل استفاده کنید:
به عنوان مثال، برای یافتن همه دایرکتوری ها در دایرکتوری جاری:
مثال رایج این است که با استفاده از دستور chmod، مجوزهای website file را به صورت بازگشتی به 644 و مجوزهای دایرکتوری را به 755 تغییر دهید:
برای یافتن فایل ها بر اساس اندازه فایل، پارامتر size- را به همراه پارامترهای سایز به دستور پاس دهید. برای تعیین سایز فایل می توانید از پسوندهای زیر استفاده کنید:
دستور زیر تمام فایل های دقیقاً 1024 بایتی را در دایرکتوری tmp/ پیدا می کند:
دستور find همچنین به شما امکان می دهد فایل هایی را جستجو کنید که حجم آنها بزرگتر یا کمتر از حجم مشخص شده باشد. در مثال زیر، همه فایلهای کمتر از 1 مگابایت را در دایرکتوری فعلی سرچ می کنیم. به علامت – قبل از مقدار حجم دقت کنید.
اگر می خواهید فایل هایی با حجم بیشتر از 1 مگابایت را جستجو کنید، باید از علامت + استفاده کنید:
حتی می توانید فایل هایی را در یک محدوده مشخص شده حجم جستجو کنید. دستور زیر تمامی فایل های بین 1 تا 2 مگابایت را پیدا می کند:
دستور find همچنین میتواند فایلها را براساس آخرین تغییر، زمان دسترسی یا تغییر، سرچ کند. همانطور که هنگام سرچ بر اساس سایز، از علامت مثبت و منفی برای "بیشتر از" یا "کمتر از" استفاده کنید. فرض کنید چند روز پیش، یکی از فایل های پیکربندی dovecot را تغییر دادید، اما فراموش کرده اید که کدام فایل بوده است. شما به راحتی می توانید همه فایل ها را در پوشه /etc/dovecot/conf.d که با conf. ختم می شود و در پنج روز گذشته اصلاح شده اند را فیلتر کنید.
در اینجا نمونه دیگری از فیلتر کردن فایل ها بر اساس تاریخ اصلاح با استفاده از گزینه daystart- آورده شده است. دستور زیر تمام فایلهای دایرکتوری home را که 30 روز پیش یا بیشتر اصلاح شدهاند، لیست میکند:
گزینه perm- به شما امکان می دهد فایل ها را بر اساس مجوزهای فایل سرچ کنید. به عنوان مثال، برای یافتن تمام فایلهایی که دارای مجوزهای دقیقاً 775 در دایرکتوری /var/www/html هستند، از دستور زیر استفاده کنید:
برای یافتن فایل های متعلق به یک کاربر یا گروه خاص، از گزینه های user- و group- استفاده کنید. به عنوان مثال، برای جستجوی تمام فایل ها و دایرکتوری های متعلق به کاربر khoshamoz از دستور زیر استفاده کنید:
در ادامه یک مثال از دنیای واقعی می زنیم. فرض کنید میخواهید تمام فایلهای متعلق به کاربر www-data را پیدا کرده و مالکیت فایلهای همسان را از www-data به nginx تغییر دهید:
برای حذف تمام فایل های منطبق، گزینه delete- را به انتهای عبارت سرچ اضافه کنید. اطمینان حاصل کنید که فقط زمانی از این گزینه استفاده می کنید که مطمئن هستید نتیجه با فایل هایی که می خواهید حذف کنید مطابقت دارد. کار جالب تر این است که پیش از استفاده از دستور delete- ابتدا فایل های منطبق با نتیجه سرچ را مشاهده کنید. برای مثال، برای حذف تمام فایلهایی که پسوند temp. را در مسیر /var/log/ دارند، از دستور زیر استفاده کنید:
find فقط می تواند دایرکتوری های خالی را مانند دستور rmdir حذف کند.
میتوانید از دستور find برای جستجوی فایلها و دایرکتوری ها بر اساس permission ها، type، تاریخ، مالکیت، سایز و موارد دیگر استفاده کنید. همچنین می توان دستور find را با ابزارهای دیگری مانند grep یا sed ترکیب کرد.
Syntax کلی استفاده از دستور find بصورت زیر است:
find [options] [path...] [expression]
options در واقع رفتار symbolic link ها، گزینه های اشکال زدایی یا debugging و optimization یا بهینه سازی را کنترل می کند.
Path دایرکتوری یا دایرکتوری های شروع را که find فایل ها را در آن جستجو می کند، تعریف می کند.
Expression در واقع همان pattern یا الگوی جستجو را مشخص می کند که این الگو را شما تعیین کی کنید.
در ادامه با ذکر مثال ها با این دستور بیشتر آشنا خواهید شد.
برای جستجوی فایلها در یک دایرکتوری، کاربری که دستور find را call یا فراخوانی و اجرا می کنید، باید مجوز read در آن دایرکتوری داشته باشد.
find -L /var/www -name "*.js"
در دستور فوق L- در واقع یکی از options هایی است که رفتار دستور find را می تواند کنترل کند. مثلا این L- به دستور find می گوید که symbolic link ها را دنبال کند. شما به جای /var/www باید مسیر مورد نظر خودتان را جایگزین کنید. js.* در واقع شرط سرچ است که است که در این دایرکتوری همه فایل هایی که پسوند js دارند(JavaScript files) را لیست کند. هلامت * قبل از پسوند، یعنی اینکه نام فایل هر چیزی می تواند باشد.
یافتن فایل ها با نام احتمالاً رایج ترین استفاده از دستور find است. برای پیدا کردن یک فایل توسط نام آن، از گزینه name- و سپس نام فایل مورد نظر استفاده کنید. به عنوان مثال، برای جستجوی فایلی به نام document.pdf در فولدر /home/khoshamoz، از دستور زیر استفاده می کنید:
find /home/khoshamoz -type f -name document.pdf
دستور find یک دستور case sensitive یا حساس به حروف بزرگ و کوچک است. برای اینکه حساسیت find را به حروف لزرگ و کوچک برداریم کافیست که به جای -name از -iname استفاده کنیم.
بدین ترتیب اگر دوباره دستور فوق را اجرا کنیم، دیگر مهم نیست که نام فایل DOCUMENT.pdf یا Document.pdf باشد.
find /home/khoshamoz -type f -iname document.pdf
جستجوی فایل ها بر اساس پسوند همانند جستجوی فایل ها بر اساس نام است. به عنوان مثال، برای پیدا کردن تمام فایلهایی که دارای پسوند log.gz. در مسیر /var/log/nginx هستند، باید از دستور زیر استفاده کنید.
find /var/log/nginx -type f -name '*.log.gz'
برای یافتن همه فایلهایی که با *.log.gz مطابقت ندارند، میتوانید از گزینه not- استفاده کنید. برای مثال، برای یافتن همه فایلهایی که به log.gz.* ختم نمیشوند، از دستور زیر استفاده کنید:
find /var/log/nginx -type f -not -name '*.log.gz'
بعضا شاید لازم باشد انواع خاصی از فایل ها مانند فایل های معمولی، دایرکتوری ها یا symlinks را جستجو کنید. در لینوکس همه چیز یک فایل است. برای جستجوی فایل ها بر اساس نوع آنها، از گزینه type- و یکی از توصیفگرهای زیر برای تعیین نوع فایل استفاده کنید:
f: a regular file
d: directory
l: symbolic link
c: character devices
b: block devices
p: named pipe (FIFO)
s: socket
به عنوان مثال، برای یافتن همه دایرکتوری ها در دایرکتوری جاری:
find . -type d
مثال رایج این است که با استفاده از دستور chmod، مجوزهای website file را به صورت بازگشتی به 644 و مجوزهای دایرکتوری را به 755 تغییر دهید:
find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;
برای یافتن فایل ها بر اساس اندازه فایل، پارامتر size- را به همراه پارامترهای سایز به دستور پاس دهید. برای تعیین سایز فایل می توانید از پسوندهای زیر استفاده کنید:
b: 512-byte blocks (default)
c: bytes
w: two-byte words
k: Kilobytes
M: Megabytes
G: Gigabytes
دستور زیر تمام فایل های دقیقاً 1024 بایتی را در دایرکتوری tmp/ پیدا می کند:
find /tmp -type f -size 1024c
دستور find همچنین به شما امکان می دهد فایل هایی را جستجو کنید که حجم آنها بزرگتر یا کمتر از حجم مشخص شده باشد. در مثال زیر، همه فایلهای کمتر از 1 مگابایت را در دایرکتوری فعلی سرچ می کنیم. به علامت – قبل از مقدار حجم دقت کنید.
find . -type f -size -1M
اگر می خواهید فایل هایی با حجم بیشتر از 1 مگابایت را جستجو کنید، باید از علامت + استفاده کنید:
find . -type f -size +1M
حتی می توانید فایل هایی را در یک محدوده مشخص شده حجم جستجو کنید. دستور زیر تمامی فایل های بین 1 تا 2 مگابایت را پیدا می کند:
find . -type f -size +1M -size 2M
دستور find همچنین میتواند فایلها را براساس آخرین تغییر، زمان دسترسی یا تغییر، سرچ کند. همانطور که هنگام سرچ بر اساس سایز، از علامت مثبت و منفی برای "بیشتر از" یا "کمتر از" استفاده کنید. فرض کنید چند روز پیش، یکی از فایل های پیکربندی dovecot را تغییر دادید، اما فراموش کرده اید که کدام فایل بوده است. شما به راحتی می توانید همه فایل ها را در پوشه /etc/dovecot/conf.d که با conf. ختم می شود و در پنج روز گذشته اصلاح شده اند را فیلتر کنید.
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
در اینجا نمونه دیگری از فیلتر کردن فایل ها بر اساس تاریخ اصلاح با استفاده از گزینه daystart- آورده شده است. دستور زیر تمام فایلهای دایرکتوری home را که 30 روز پیش یا بیشتر اصلاح شدهاند، لیست میکند:
find /home -mtime +30 -daystart
گزینه perm- به شما امکان می دهد فایل ها را بر اساس مجوزهای فایل سرچ کنید. به عنوان مثال، برای یافتن تمام فایلهایی که دارای مجوزهای دقیقاً 775 در دایرکتوری /var/www/html هستند، از دستور زیر استفاده کنید:
find /var/www/html -perm 644
برای یافتن فایل های متعلق به یک کاربر یا گروه خاص، از گزینه های user- و group- استفاده کنید. به عنوان مثال، برای جستجوی تمام فایل ها و دایرکتوری های متعلق به کاربر khoshamoz از دستور زیر استفاده کنید:
find / -user linuxize
در ادامه یک مثال از دنیای واقعی می زنیم. فرض کنید میخواهید تمام فایلهای متعلق به کاربر www-data را پیدا کرده و مالکیت فایلهای همسان را از www-data به nginx تغییر دهید:
find / -user www-data -type f -exec chown nginx {} \;
برای حذف تمام فایل های منطبق، گزینه delete- را به انتهای عبارت سرچ اضافه کنید. اطمینان حاصل کنید که فقط زمانی از این گزینه استفاده می کنید که مطمئن هستید نتیجه با فایل هایی که می خواهید حذف کنید مطابقت دارد. کار جالب تر این است که پیش از استفاده از دستور delete- ابتدا فایل های منطبق با نتیجه سرچ را مشاهده کنید. برای مثال، برای حذف تمام فایلهایی که پسوند temp. را در مسیر /var/log/ دارند، از دستور زیر استفاده کنید:
find /var/log/ -name `*.temp` -delete
find فقط می تواند دایرکتوری های خالی را مانند دستور rmdir حذف کند.
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: