دستور locate این امکان را به ما میدهد تا از طریق کامند لاین اقدام به جستجوی فایل/دایرکتوری خاصی نماییم. locate اقدام به گشت زنی در دیتابیسی که قبلاً کلیه ی فایلها و دایرکتوری ها در آن به ثبت رسیدهاند میکند و هر چیزی که با کلیدواژگان مد نظر ما همخوانی داشته باشد را در معرض دیدمان قرار میدهد که گاهی اوقات لیست نتایج جستجو بسیار طولانی می گردد.
برای آن که لیستی کوتاهتر و در عین حال دقیقتری از نتایج جستجو داشته باشیم، میتوانیم از دستور grep استفاده کنیم. برای روشنتر شدن این مسأله، مثالی می زنیم:
locate zip
دستور فوق هر فایل/دایرکتوری که حاوی حروف zip باشد را مییابد اما ما نیاز داریم تا فقط آنهایی که علاوه بر zip حاوی عبارت bin هم هستند، نمایش داده شوند. در چنین صورتی، از دستور زیر استفاده میکنیم:
locate zip | grep bin
نکته یی که در کامند فوق باید نظر داشت استفاده از علامت | برای ادغام کردن ۲ دستور مختلف به صورت همزمان است که در ادامه بیشتر با این دستور آشنا می شویم.
آشنایی با کاربرد پایپ ها در لینوکس
فلسفه ی سیستم عامل های مبتنی بر یونیکس این است که امکانی در اختیار کاربران قرار داده شود تا بتوانند با ترکیب دو یا چند کامند ساده، دستورات پیچیده یی خلق کنند. در همین راستا، امکانی در سیستم عامل گنو/لینوکس فراهم شده تا با به کارگیری از علامت | (پایپ به معنی لوله) نیازهای خود را مرتفع سازند:
command1 | command2 | command3
چنین دستوری اصطلاحاً Pipeline (پاپ لاین یا خط لوله) نامیده میشود به طوری که از آن طریق، چندین دستور مختلف در قالب یک دستور اجرا می گردد.
پیش از این گفتیم که دستور locate از دیتابیسی که توسط سیستم ساخته میشود برای یافتن کلیدواژگان جستجو شده استفاده می کند. این دیتابیس نامش updatedb است که بسیاری از توزیعهای لینوکسی آن را به صورت خودکار روزی یک بار اجرا میکنند تا اطلاعات دیتابیس به روز رسانی شود. به هر حال، اگر تمایل داشته باشید با وارد کردن کامند updatedb در ترمینال به صورت دستی، میتوانید این دیتابیس را به روز رسانی کنید (حتماً به خاطر داشته باشید که برای اجرای این دستور نیاز به سطح دسترسی روت خواهید داشت.)
sokanacademy@sokanacademy-inspiron-1545:/$ sudo updatedb
[sudo] password for sokanacademy:
قبل از دستور updatedb از کامند sudo استفاده می کنیم تا بتوانیم سطح دسترسی کاربری را به روت تغییر دهیم: ابتدا از ما خواسته می شود که پسورد روت را وارد کنیم و پس از وارد کردن پسورد، چند ثانیه یی به طول خواهد انجامید تا دیتابیس آپدیت شود.
کاربردهای دستور ls در لینوکس
برای نمایش لیستی از فایل ها و دایرکتوری ها، از دستور ls استفاده می شود؛ دستور ls آپشن های مختلفی دارا است که از جمله ی مهم ترین آن ها می توان به موارد زیر اشاره کرد:
آپشن کاربرد ls -l حرف l از ابتدای واژه ی Long به معنی «طولانی» گرفته شده است. این آپشن فرمتی طولانی از اطلاعات فایل /دایرکتوری ها را نمایش می دهد که از آن جمله می توان به پرمیشن ها، حجم فایل، تاریخ تغییر فایل، مالکیت فایل و ... اشاره کرد. ls -a حرف a از ابتدای کلمه ی All به معنی «همه» گرفته شده و کاری که این آپشن انجام می دهد این است که تمامی فایل ها من جمله فایل های Hiddden یا «پنهان» را نیز نمایش می دهد. ls -d حرف d از ابتدای Directory به معنی «پوشه» گرفته شده است و استفاده از این آپشن صرفا دایرکتوری ها را لیست می کند. ls -R حرف R از ابتدای کلمه ی Recursive به معنی «بازگشتی» گرفته شده و کاری که انجام می دهد این است که تک تک دایرکتوری ها و همچنین کلیه ی محتویات داخل آن را نمایش می دهد.
کاربرد این دستور خیلی ساده است:
ls -option
همان طور که مشاهده می شود، ابتدا دستور ls را می نویسیم سپس اگر قصد استفاده از آپشن خاصی را داشته باشیم، یک فاصله قرار می دهیم یک علامت - می گذاریم و آپشن مد نظر را وارد می کنیم. برای روشن تر شدن نحوه ی به کارگیری از دستور ls، به ذکر چند مثال اکتفا می کنیم. ابتدا وارد مسیر روت شده سپس دستور ls را اجرا می کنیم:
sokanacademy@sokanacademy-inspiron-1545:/$ ls
به عنوان خروجی دستور فوق داریم:
bin Documents initrd.img.old media proc snap usr
boot etc KindleForPC-installer.exe mnt root srv var
cdrom home lib Moradi run sys vmlinuz
dev initrd.img lost+found opt sbin tmp vmlinuz.old
حال قصد داریم تا یک آپشن را هم به همراه دستور ls مورد استفاده قرار دهیم. برای نمایش اطلاعات بیشتری از فایل ها و دایرکتوری های قرار گرفته در روت، از آپشن l- استفاده می کنیم:
sokanacademy@sokanacademy-inspiron-1545:/$ ls -l
به عنوان خروجی دستور فوق داریم:
total 39964
drwxr-xr-x 2 root root 12288 Jul 28 06:28 bin
drwxr-xr-x 3 root root 4096 Jul 28 06:43 boot
drwxr-xr-x 2 root root 4096 Apr 14 2014 cdrom
drwxr-xr-x 22 root root 4640 Jul 29 10:58 dev
-rwxrwxrwx 1 root root 0 Oct 3 2014 Documents
drwxr-xr-x 173 root root 12288 Jul 28 06:43 etc
drwxr-xr-x 3 root root 4096 Apr 14 2014 home
lrwxrwxrwx 1 root root 32 Jul 17 08:05 initrd.img -> boot/initrd.img-4.4.0-31-generic
lrwxrwxrwx 1 root root 32 Jul 4 23:14 initrd.img.old -> boot/initrd.img-4.4.0-28-generic
-rw-r--r-- 1 root root 40790520 Feb 10 2015 KindleForPC-installer.exe
drwxr-xr-x 25 root root 4096 Jul 28 06:25 lib
drwx------ 2 root root 16384 Apr 14 2014 lost+found
drwxr-xr-x 3 root root 4096 Apr 14 2014 media
drwxr-xr-x 2 root root 4096 Apr 22 08:56 mnt
-rwxrwxrwx 1 root root 0 Oct 3 2014 Moradi
drwxr-xr-x 10 root root 4096 Apr 1 06:37 opt
dr-xr-xr-x 255 root root 0 Jul 29 15:25 proc
drwx------ 28 root root 4096 May 22 12:45 root
drwxr-xr-x 38 root root 1160 Jul 29 15:41 run
drwxr-xr-x 2 root root 12288 Jul 28 06:29 sbin
drwxr-xr-x 2 root root 4096 Apr 19 19:01 snap
drwxr-xr-x 2 root root 4096 Oct 16 2013 srv
dr-xr-xr-x 13 root root 0 Jul 29 15:25 sys
drwxrwxrwt 14 root root 20480 Jul 29 16:39 tmp
drwxr-xr-x 11 root root 4096 Mar 3 03:47 usr
drwxr-xr-x 15 root root 4096 Apr 22 09:48 var
lrwxrwxrwx 1 root root 29 Jul 17 08:05 vmlinuz -> boot/vmlinuz-4.4.0-31-generic
lrwxrwxrwx 1 root root 29 Jul 4 23:14 vmlinuz.old -> boot/vmlinuz-4.4.0-28-generic
می بینیم که اطلاعات به مراتب جامع تری در معرض دیدمان قرار می گیرد. علاوه بر این، به خاطر داشته باشیم که به صورت هم زمان از چندین آپشن مختلف هم می توان برای تمامی کامندهای لینوکس استفاده کرد. به عنوان مثال، اگر بخواهیم هم اطلاعات جامعی از فایل/دایرکتوری ها نمایش دهیم و هم فایل های پنهان را نمایش دهیم، می توانیم از کامند زیر استفاده نماییم:
ls -l -a
به عنوان راه کاری جایگزین، می توان هر دو آپشن را در هم ادغام نمود:
ls -la
به عنوان خروجی هر دو کامند فوق داریم:
total 39972
drwxr-xr-x 23 root root 4096 Jul 25 08:32 .
drwxr-xr-x 23 root root 4096 Jul 25 08:32 ..
drwxr-xr-x 2 root root 12288 Jul 28 06:28 bin
drwxr-xr-x 3 root root 4096 Jul 28 06:43 boot
drwxr-xr-x 2 root root 4096 Apr 14 2014 cdrom
drwxr-xr-x 22 root root 4640 Jul 29 10:58 dev
-rwxrwxrwx 1 root root 0 Oct 3 2014 Documents
drwxr-xr-x 173 root root 12288 Jul 28 06:43 etc
drwxr-xr-x 3 root root 4096 Apr 14 2014 home
lrwxrwxrwx 1 root root 32 Jul 17 08:05 initrd.img -> boot/initrd.img-4.4.0-31-generic
lrwxrwxrwx 1 root root 32 Jul 4 23:14 initrd.img.old -> boot/initrd.img-4.4.0-28-generic
-rw-r--r-- 1 root root 40790520 Feb 10 2015 KindleForPC-installer.exe
drwxr-xr-x 25 root root 4096 Jul 28 06:25 lib
drwx------ 2 root root 16384 Apr 14 2014 lost+found
drwxr-xr-x 3 root root 4096 Apr 14 2014 media
drwxr-xr-x 2 root root 4096 Apr 22 08:56 mnt
-rwxrwxrwx 1 root root 0 Oct 3 2014 Moradi
drwxr-xr-x 10 root root 4096 Apr 1 06:37 opt
dr-xr-xr-x 255 root root 0 Jul 29 15:25 proc
drwx------ 28 root root 4096 May 22 12:45 root
drwxr-xr-x 38 root root 1160 Jul 29 15:41 run
drwxr-xr-x 2 root root 12288 Jul 28 06:29 sbin
drwxr-xr-x 2 root root 4096 Apr 19 19:01 snap
drwxr-xr-x 2 root root 4096 Oct 16 2013 srv
dr-xr-xr-x 13 root root 0 Jul 29 16:39 sys
drwxrwxrwt 14 root root 20480 Jul 29 16:39 tmp
drwxr-xr-x 11 root root 4096 Mar 3 03:47 usr
drwxr-xr-x 15 root root 4096 Apr 22 09:48 var
lrwxrwxrwx 1 root root 29 Jul 17 08:05 vmlinuz -> boot/vmlinuz-4.4.0-31-generic
lrwxrwxrwx 1 root root 29 Jul 4 23:14 vmlinuz.old -> boot/vmlinuz-4.4.0-28-generic
همواره به خاطر داشته باشیم که دستور ls محتویات پوشه یی که داخل آن قرار داریم را نمایش می دهد اما همیشه این امکان را داریم تا از هر کجای فایل سیستم لینوکس، محتویات سایر دایرکتوری ها را نیز مشاهده کنیم. به طور مثال فرض کنیم که داخل دایرکتوری هوم قرار داریم اما می خواهیم محتوایات دایرکتوری etc که در اکثر توزیع های لینوکسی وجود دارد را ببینیم. برای این منظور، از کامند زیر استفاده خواهیم کرد:
sokanacademy@sokanacademy-inspiron-1545:/$ ls /etc
کامند فوق کلیه ی محتویات دایرکتوری etc که در روت سیستم قرار دارد را نمایان خواهد ساخت.
نکته |
فایل/دایرکتوری های پنهان یا Hidden به فایل/دایرکتوری هایی گفته میشود که نام آنها با یک . شروع می شود. برای مثال، دایرکتوری fonts. یک دایرکتوری پنهان است. زمانی که اکانت کاربری شما در سیستم عامل گنو/لینوکس ساخته می شود، چندین فایل پنهان در دایرکتوری هوم شما ساخته می شوند که مسئول پیکربندی اکانت شما هستند. علاوه بر این، برخی از اپلیکیشن ها نیز فایل های پیکربندی (Configuration) خود را به عنوان فایل های Hidden در این دایرکتوری قرار می دهند. |
جستجوی دقیق تر با استفاده از Wildcard ها در لینوکس
برای جستجوی دقیقتر، میتوان از Wildcard های زیر استفاده کرد:
وایلدکارد کاربرد ? برای تک تک کاراکترهایی که همخوانی داشته باشند. * برای چند کاراکتر [set] طیفی از کاراکترهایی که می بایست وجود داشته باشند را تعریف می کنیم. [!set] طیفی از کاراکترهایی که نمی بایست وجود داشته باشند را تعریف می کنیم.
برای روشنتر شدن کاربرد وایلدکاردها، به ذکر چند مثال اکتفا می کنیم؛ برای یافتن کلیه ی فایلهایی که ابتدای آن های با initr شروع شود، سپس یک حرف دیگر به عنوان حرف آخر آنها بوده و پسوند آن هم img. باشد، از دستور زیر استفاده می کنیم:
ls initr?.img
برای یافتن کلیه ی فایلهایی که پسوند آنها img. است از کامند زیر استفاده می کنیم:
ls *.img
برای یافتن کلیه ی فایلهایی که ابتدای آنها با حرف initr شروع شده و حرف بعدی آن یکی از حروف مابین a تا z بوده و پسوند فایل هم img. باشد، از دستور زیر استفاده می کنیم:
ls initr[a-z].img
برای یافتن کلیه ی فایلهایی که ابتدای آنها با حرف initr شروع شده و حرف بعدی آن یکی از حروف مابین e تا k نباشد و پسوند فایل هم img. باشد، از دستور زیر استفاده می کنیم:
ls initr[!e-k].img
یافتن فایلها و دایرکتوری ها از طریق کامند لاین لینوکس
دستور find یکی از دستورات پرکاربرد در لینوکس برای ادمین های سیستم است. این دستور، فایل سیستم لینوکس را میگردد و کلیه ی فایلها و یا دایرکتوری هایی که با معیارهای در نظر گرفته شده همخوانی داشته باشد را مییابد.
زمانی که هیچ آرگومانی برای دستور find در نظر گرفته نشود، این دستور کلیه ی آیتم هایی را لیست میکند که در دایرکتوری قرار گرفته در آن -و کلیه ی دایرکتوری های زیرشاخه ی آن- با فیلترهای مد نظرمان همخوانی داشته باشند. دستور find دارای آپشن های مختلفی است که رایج ترین آنها عبارتند از:
آپشن کاربرد name- برای فایلهایی که دارای الگوی خاصی در نامشان هستند. iname- بزرگی و کوچکی حروف را نادیده میگیرد. type- فایلهای یافته شده را بر اساس نوع فایل محدود می سازد؛ مثلاً برای محدود کردن به دایرکتوری ها، از حرف d و برای محدود کردن به فایلهای معمولی از حرف f استفاده میشود.
برای روشنتر شدن کاربرد این کامند، چند مثال می زنیم. برای جستجوی کلیه ی فایلها و دایرکتوری های تحت عنوان gcc در دایرکتوری usr/ از کامند زیر استفاده می شود:
find /usr -name gcc
برای جستجوی صرفاً دایرکتوری های تحت عنوان gcc در دایرکتوری usr/ از دستور زیر استفاده می شود:
find /usr -type d -name gcc
و برای جستجوی فایلهای معمولی تحت عنوان test1 در دایرکتوری usr/ هم از دستور زیر استفاده می شود:
find /usr -type f -name test1
پیش از این گفتیم که اگر آرگومان خاصی برای دستور find در نظر نگیریم، این دستور مسیری که داخل آن قرار داریم را جستجو میکند اما همانطور که در کامندهای فوق می بینیم، مسیر usr/ را به عنوان دایرکتوری قابل جستجو در نظر گرفتهایم که علاوه بر این دایرکتوری، کلیه ی دایرکتوری های زیرشاخه ی آن نیز جستجو خواهند شد.
کاربردهای پیشرفته ی دستور find
یکی از موارد استفاده ی کاربردی دستور find برای اجرای دستوراتی روی فایلهایی است که با معیارهای جستجوی ما همخوانی دارند. آپشن exec- این امکان را به کاربران لینوکس میدهد تا دستورات مد نظر خود را روی فایلها اعمال کنند. به طور مثال، برای یافتن کلیه ی فایلهایی که پسوند آنها txt. است و روی دسکتاپ داخل پوشه یی تحت عنوان test هستند از کامند زیر استفاده می شود:
find -name "*.txt" -exec rm {} ';'
علامت های {} محلی برای ذخیره سازی فایلهای جستجو شده است. در ارتباط با این دستور حتماً به خاطر داشته باشیم که می بایست دستور خود را با ';' به پایان برسانیم (البته در عوض از علامت های ;\ هم میتوانیم استفاده کنیم.) به عنوان راهکاری جایگزین برای دستور exec، از دستوری تحت عنوان ok- نیز میتوان استفاده کرد. کاربرد این دو دستور کاملاً به یکدیگر شبیه است با این تفاوت که در صورت استفاده از دستور ok- اجازه ی اجرای دستور باید از طرف کاربر صادر شود؛ مزیت دستور ok- این است که هرگز سهواً اقدام به اجرای دستوارتی مخرب -همچون پاک کردن- نخواهیم پرداخت.
یافتن فایلها بر اساس حجم
گاهی اوقات کاربران لینوکسی نیاز دارند تا بر اساس حجم فایلها، اقدام به جستجو کنند که چنین کاری با استفاده از دستور find به سادگی امکانپذیر است:
find / -size 0
به عنوان مثالی دیگر، برای یافتن فایلهای بزرگتر از ۱۰ مگابایت، می بایست از دستور زیر استفاده کرد:
find / -size +10M
این دستور کلیه ی فایل های قرار گرفته در فایل سیستم روت که بیش از ۱۰ مگابایت حجم داشته باشند را خواهد یافت.