اهمیت نرمافزارهای اپنسورس به خصوص سیستمعاملهای اپنسورسی همچون گنو/لینوکس روز به روز بیشتر شده و لازم است تا خود را برای روزی که این دست نرمافزارها بیش از این فراگیر شوند آماده سازیم. از همین روی، در این پست قصد داریم تا دستورات پایهای و کاربردی ترمینال را معرفی کنیم که هر علاقمندی به لینوکس بهتر است بلد باشد که در دستههای مدیریت فایل، پردازش متن، مدیریت سیستم، مدیریت پروسهها، آرشیو دادهها و ریاستارت کردن سیستم تقسیمبندی شدهاند.
مدیریت فایل
مجموعه دستورات کاربردی که برای مدیریت فایلها مورد استفاده قرار میگیرند عبارتند از:
mkdir
$ mkdir example
این کامند برای ایجاد یک دایرکتوری جدید، در صورتی که قبلاً ایجاد نشده باشد، استفاده میشود که مخفف واژگان Make Directory است. در مثال فوق، mkdir
یک فولدر خالی تحت عنوان example
در هر مسیری که قرار داشته باشیم خواهد ساخت.
ls
$ ls
کامند ls
لیست محتوای دایرکتوری را نشان میدهد (به صورت پیشفرض، استفاده از این دستور محتوای دایرکتوری فعلی را نشان میدهد.)
cd
$ cd example
کامند cd
مخفف واژگان Change Directory است که جهت تغییر دایرکتوری مورد استفاده قرار میگیرد. فرض کنیم که در دسکتاپ قرار داریم و روی دسکتاپ هم فولدری داریم تحت عنوان example
که برای وارد شدن به این فولدر، صرفاً کافی است تا دستور فوق را وارد نماییم. حال اگر مجدد تمایل داشته باشیم تا به مسیر دسکتاپ وارد شویم، میتوانیم از دستور .. cd
استفاده نماییم (در واقع، این کامند ما را یک پوشه به عقب بازمیگرداند.)
اکنون فرض کنیم که در مسیر دسکتاپ قرار داریم اما میخواهیم مستقیماً وارد پوشهٔ www
شویم که داخل var
قرار دارد که برای این منظور باید ابتدا یک اِسپیس (فاصله) پس از cd
قرار داده سپس علامت /
را تایپ میکنیم و در نهایت مسیر مد نظر خود را وارد نماییم. به عنوان مثال، خواهیم داشت:
$ cd /var/www
پس از اینتر کردن، میبینیم که به سادگی وارد پوشهٔ مد نظر شدیم. حال اگر از داخل این مسیر قصد داشته باشیم مجدد وارد مسیر دسکتاپ شویم، میتوانیم از دستور cd ~/Desktop
استفاده کنیم (در واقع علامت ~
نشاندهندهٔ دایرکتوری هوم است که با تایپ ~ cd
بلافاصله به دایرکتوری هوم انتقال خواهیم یافت.) اگر هم بخواهیم به روت سیستمعامل دست بابیم، صرفاً نیاز است تا دستور / cd
را وارد نموده و اینتر نماییم.
pwd
$ pwd
کامند pwd
جهت پیدا کردن نام دایرکتوری فعلی است که مخفف واژگان Print Working Directory میباشد. در واقع، پس از تایپ این دستور و اینتر کردن، محلی که در حال حاضر در آن قرار گرفتهایم در معرض دیدمان قرار میگیرد.
vi
$ vi script.sh
کامند vi
برای باز کردن ادیتور ویم مورد استفاده قرار میگیرد (البته باید روی سیستم نصب باشد که در اکثر توزیعها به صورت پیشفرض نصب است.)
cp
$ cp sample.txt sample_copy.txt
کامند cp
برای کپی کردن فایلها و دایرکتوریها استفاده میشود که مخفف Copy است. در مثال فوق، در دایرکتوری فعلی فایلی داریم تحت عنوان sample.txt
که یک کپی از آن ایجاد کردهایم تحت عنوان sample_copy.txt
و داخل همان دایرکتوری قرار میدهیم (به عنوان یک قانون کلی، در نظر داشته باشیم که اگر پیش از این فایلی تحت عنوان sample_copy.txt
وجود داشته باشد، بدون هیچگونه سؤالی از کاربر، این فایل اصطلاحاً Override خواهد شد.) در صورتی که بخواهیم قبل از اُورراید سیستم از ما سؤال بپرسد، باید از آپشن i-
به صورت زیر استفاده کنیم:
$ cp -i sample.txt sample_copy.txt
که در این صورت، سؤالی به صورت زیر در معرض دیدمان قرار خواهد گرفت:
cp: overwrite 'sample_copy.txt'? yes
و همانطور که ملاحظه میشود، با تایپ کردن yes
و اینتر کردن، این مجوز صادر میشود.
mv
$ mv sample.txt example
کامند mv
مخفف Move است که برای جابهجا کردن یا تغییر نام فایلها به کار میرود. به عنوان مثال، در کامند فوق فایلی تحت عنوان sample.txt
را به داخل فولدری تحت عنوان example
در همان دایرکتوری تغییر مکان دادهایم. حال اگر بخواهیم برای تغییر نام از کامند mv
استفاده کنیم، دستور زیر را مد نظر قرار خواهیم داد:
$ mv sample.txt sample_new.txt
میبینیم که نام فایل اورجینال ما به sample_new.txt
تغییر مییابد.
rm
$ rm sample_new.txt
کامند rm
که مخفف Remove است به منظور حذف فایلها و دایرکتوریها مورد استفاده قرار میگیرد. برای نمونه، در مثال فوق با استفاده از این کامند فایلی تحت عنوان sample_new.txt
حذف خواهد شد (توجه داشته باشیم که این کامند به صورت پیشفرض دایرکتوریها را حذف نخواهد کرد.)
در کل، باید مراقب بود که از کامند rm
به دقت استفاده کنیم چرا که پس از حذف یک فایل، امکان بازگردادن آن وجود نخواهد داشت. در چنین شرایطی، اگر بخواهیم که سیستم از ما سؤالی مبنی بر اطمینان حاصل کردن از تصمیمی که گرفتهایم بپرسد، باید از آپشن i-
که مخفف Interactive است استفاده کنیم:
$ rm -i script.sh
rm: remove regular empty file 'script.sh'? yes
در مثال فوق، قصد داریم فایلی تحت عنوان script.sh
را حذف کنیم اما همانطور که ملاحظه میشود، از آپشن i-
استفاده کردهایم تا قبل اینکه فایل حذف شود، سیستم از ما بپرسد که آیا اطمینان داریم که میخواهیم این فایل را حذف کنیم یا خیر که با تایپ دستور yes
، فرایند حذف فایل تکمیل خواهد شد.
پیش از این گفتیم که کامند rm
به صورت پیشفرض برای حذف دایرکتوریها کار نخواهد کرد و به نظر میرسد منطق پشت چنین رویکردی این باشد که طراحان لینوکس قصد داشتهاند کاری کنند که کاربران به صورت تصادفی یک دایرکتوری با کلیهٔ محتویاتش را پاک نکنند.
حال اگر بخواهیم یک دایرکتوری + فایلهای داخل آن را حذف نماییم، باید با آپشنی تحت عنوان r-
که برگرفته از واژهٔ Recursive (بازگشتی) آشنا شویم. به عبارت دیگر، با در نظر گرفتن این آپشن، تا جایی که داخل یک دایرکتوری پوشههای دیگری وجود داشته باشد و داخل تکتک آنها نیز فایلهای مختلف وجود داشته باشد پیش رفته و کلیهٔ آنها را حذف خواهیم کرد.
برای نمونه، یک دایرکتوری تحت عنوان example
ساخته و داخل آن دایرکتوریهای دیگری تحت عناوین dir2
، dir1
و dir3
میسازیم (داخل این دایرکتوریها هم به هر تعداد که تمایل داشته باشیم میتوانیم فایلهای مختلفی ایجاد کنیم.) حال با استفاده از دستور ls
قصد داریم محتویات دایرکتوری example
را مشاهده کنیم:
$ ls example
dir1 dir2 dir3
اکنون برای حذف دایرکتوری example
و کلیهٔ دایرکتوریهای قرار گرفتهٔ داخل آن، دستور زیر را اجرا میکنیم:
$ rm -r example
میبینیم که هم پوشهٔ example
و هم کلیهٔ دایرکتوریها و فایلهای قرار گرفته داخل این پوشه همگی حذف میشوند.
find
$ find -name "*.php"
./script1.php
./script2.php
اگر در مسیری که قرار داریم دو فایل داشته باشیم تحت عناوین script1.php
و script2.php
و دستور فوق را اجرا کنیم، هر فایلی که نامش حاوی php. باشد یافته خواهد شد (علامت ستاره در اینجا به معنی «همه» است.)
history
$ history
1028 ls
1029 touch script1.php
1031 touch script2.php
1032 ls
1034 find -name "*.php"
1035 history
کامند history
اقدام به لیست کردن دستوراتی میکند که به تازگی استفاده شدهاند (توجه داشته باشیم که ترتیب لیست شدن دستورات از قدیم به جدید است.)
پردازش متن
برای کار با تِکست هم کامندها و ابزارهای بسیاری در لینوکس گنجانده شده است که در ادامه کاربردیترین آنها را مورد بررسی قرار خواهیم داد.
cat
$ cat sample.txt
line 1
line 2
line 3
در یک کلام، اگر از طریق کامندلاین بخواهیم ببینیم که داخل یک فایل چه محتویاتی وجود دارد، از دستور cat
باید استفاده کنیم.
echo
$ echo $HOME
/home/behzadmoradi
دستور echo
برای نمایش محتویات چیزی در محیط ترمینال به کار میرود. همانطور که در مثال فوق مشاهده میشود، با این کامند اقدام به چاپ مقدار ذخیره شده در متغیر HOME$
کردهایم (نیاز به توضیح نیست که این متغیر اصطلاحاً یک Environmental Variable در لینوکس است.)
grep
$ grep "Expression" grep.txt
Global Regular Expression Print
کامند grep
که مخفف واژگان Global Regular Expression Print است برای یافتن و نمایش محتویات چیزی بر اساس الگوی خاصی به کار میرود. فرض کنیم فایلی داریم تحت عنوان grep.txt
که حاوی محتویات Global Regular Expression Print است. حال با دستور فوق، همهٔ واژگان Expression را یافته و به صورت هایتهایت خواهیم دید.
wc
$ wc grep.txt
1 4 32 grep.txt
کامند wc
مخفف واژگان Word Count است که تعداد خطوط قرار گرفته در یک فایل، تعداد کلمات یا تعداد بایتهای یک فایل را نشان میدهد. در مثال فوق، در فایلی تحت عنوان grep.txt
اطلاعاتی همچون ۱ خط، ۴ کلمه و ۳۲ کاراکتر توسط کامند wc
نمایش داده شده است.
sort
$ sort fruits.txt
apple
banana
kiwi
orange
pear
کامند sort
برای مرتبسازی دادههای داخل یک فایل متنی به کار میرود. برای مثال، فایلی ساختهایم تحت عنوان fruits.txt
که داخل آن کلمات kiwi ،pear ،apple ،orange و banana قرار گرفتهاند اما همانطور که در خروجی دستور فوق میبینیم، نام میوهها بر اساس حروف الفبا سُورت (مرتب) شدهاند.
مدیریت سیستم
بسیاری از کارهای سیستمی را از طریق کامندلاین میتوان در لینوکس انجام داد که در ادامه برخی از مهمترین کامندها برای این منظور را معرفی خواهیم کرد.
chmod
$ chmod 744 calculate.sh
کامند chmod
مخفف واژگان Change Mode است که جهت افزایش یا کاهش پرمیشن (مُد) یک فایل یا دایرکتوری مورد استفاده قرار میگیرد. به طور کلی، در لینوکس پرمیشنها را به دو شکل میشود تعریف کرد:
- از طریق حروف الفبای پیشفرض
- از طریق اعداد تعریف شدهٔ 0 تا 7
برای روشنتر شدن نحوهٔ کاربرد این کامند، یک مثال میزنیم. فرض کنیم فایلی داریم تحت عنوان myFile
و این در حالی است که قصد داریم پرمیشنهای Write ،Read و Execute را به ترتیب به معانی «خواندن»، «نوشتن» و «اجرا کردن» را برای User (کاربری که خودمان باشیم) به این فایل اختصاص دهیم. همچنین قصد داریم برای Group (گروه کاربری) هم فقط پرمیشنهای «خواندن» و «اجرا کردن» را در نظر بگیریم و در نهایت هم برای Other (سایر کاربران) فقط و فقط پرمیشن خواندن را در نظر بگیریم:
$ chmod u=rwx,g=rx,o=r myfile
پیش از این گفتیم که دو راه مختلف برای اختصاص پرمیشن به فایلها و دایرکتوریها داریم که یکی از طریق حروف الفبا و دیگری از طریق اعداد است که در مثال فوق راهکار اول را اتخاذ کردهایم. میبینیم که ابتدا حروف ابتدایی g ،u و o که به ترتیب مخفف واژگان Group ،User و Other هستند را نوشته و یک علامت = قرار داده و پرمیشنها را در نظر گرفتهایم سپس بدون هیچ فاصلهای یک علامت کاما قرار داده و پرمیشنهای دیگر را در نظر گرفتهایم و در نهایت هم نام فایلمان را نوشتهایم. حال اگر بخواهیم همین پرمیشنها را با استفاده از اعداد در نظر بگیریم خواهیم داشت:
$ chmod 754 myfile
در کامند فوق، اعداد 7، 5 و 4 به ترتیب مختص کاربر، گروه کاربری و سایر کاربران است و این در حالی است که هر یک از این اعداد جمع جبری اعداد 0، 1، 2 و 4 است؛ به عبارت دیگر، 0 نشانگر این است که هیچ پرمیشنی اختصاص نخواهد یافت، 1 برای پرمیشن Execute است، 2 برای پرمیشن Write است و 4 هم برای پرمیشن Read است.
با این تفاسیر و در نظر گرفتن این نکته که قبل از این گفتیم قرار است برای User هر سه پرمیشن «خواندن»، «نوشتن» و «اجرا کردن» را اختصاص دهیم، عدد 7 را نوشتهایم که جمع جبری اعداد 1+2+4 یا به عبارتی (read+write+execute) است، برای Group عدد 5 را نوشتهایم که جمع جبری اعداد 1+0+4 یا به عبارتی (read+no write+execute) است و در نهایت هم برای Other عدد 4 را نوشتهایم که جمع جبری اعداد 0+0+4 یا به عبارتی (read+no write+no execute) است.
chown
$ chown behzadmoradi myfile.txt
کامند chown
که مخفف واژگان Change Ownership است برای تغییر کاربر یا گروه کاربری که فایل به آن تعلق دارد مورد استفاده قرار خواهد گرفت. در مثال فوق، قصد داریم کاربر مالک فایلی تحت عنوان myfile.txt
را به behzadmoradi تغییر دهیم.
su
$ su behzadmoradi
کامند su
که مخفف واژگان Substitude User است، برای تغییر ID (شناسه) به کاربر روت یا دیگر کاربران مورد استفاده قرار میگیرد. در مثال فوق، قصد داریم تا با کاربری با شناسهٔ behzadmoradi لاگین نماییم. به خاطر داشته باشیم که اگر پس از کامند su
هیچ نام کاربری را وارد ننماییم، سیستم فرض را بر این میگذارد که قصد داریم وارد ناحیهٔ کاربری کاربر روت شویم و از ما پسورد روت را خواهد خواست.
passwd
$ passwd
Changing password for behzadmoradi.
(current) UNIX password:
کامند passwd
برای بهروزرسانی رمزعبور استفاده میشود و این در حالی است که یک کاربر معمولی با استفاده از این کامند میتواند پسورد خود را به سادگی تغییر دهد اما کاربر ادمین میتواند علاوه بر تغییر پسورد خود، پسورد سایر کاربران را نیز آپدیت کند.
همانطور که در کامند فوق ملاحظه میشود، اگر کامند passwd
را بدون هیچ آرگومانی اجرا کنیم، پسورد کاربری که با آن لاگین هستیم آپدیت خواهد شد. برای این منظور، سیستم ابتدا پسورد فعلی را از ما میخواهد که اگر آن را درست وارد نماییم، سپس پسورد جدید را باید وارد نماییم و در نهایت جهت اطمینان بیشتر، پسورد جدید را باید یک بار دیگر وارد نماییم و به همین سادگی پسورد آپدیت خواهد شد.
$ passwd behzadmoradi
Changing password for behzadmoradi.
(current) UNIX password:
اگر هم بخواهیم پسورد کاربر خاصی را آپیدت کنیم، همانطور که در بالا ملاحظه میشود، باید نام کاربری را پس از کامند passwd
نوشته و اینتر نماییم.
who
$ who
کامند who
به ما نشان خواهد داد که چه کاربر یا کاربرانی در حال حاضر در سیستم لاگین هستند.
مدیریت پروسهها
آشنایی با نحوهٔ عملکرد پروسهها در لینوکس و نحوهٔ مدیریت آنها از طریق کامندلاین به عنوان یکی از کارهای لاینفک کاربران لینوکس است که در ادامه قصد داریم کامندهای کاربردی این حوزه را با ذکر مثال توضیح دهیم.
ps
$ ps
PID TTY TIME CMD
7148 pts/1 00:00:00 bash
21922 pts/1 00:00:00 ps
کامند ps
مخفف واژگان Process Status میباشد که این وظیفه را دارا است تا اطلاعاتی در مورد پروسههای فعال سیستمعامل نشان دهد.
kill
$ pidof firefox
23364
کامند kill
همانطور که از نامش پیدا است، برای پایان دادن به یک پروسه مورد استفاده قرار میگیرد. برای روشنتر شدن نحوهٔ بهکارگیری از این کامند، مثالی میزنیم. همانطور که در بالا ملاحظه میشود، پس از اجرای فایرفاکس با استفاده از کامند pidof
، شناسهٔ مرتبط با این نرمافزار را به دست آوردهایم. حال فرض کنیم که به دلایلی قصد داریم تا اجرای فایرفاکس را متوقف سازیم:
$ kill 23364
میبینیم که به محض وارد کردن کامند فوق و اینتر کردن، پنجرهٔ مرورگر فایرفاکس کاملاً بسته میشود (از کامند kill
میتوان برای زمانهایی که سیستم هَنگ میکند استفاده نمود.)
آرشیو دادهها
فارغ از نوع سیستمعامل، کار با فایلهای آرشیو همچون زیپ جزئی از کارهای روزانهٔ کاربران است که در ادامه قصد داریم برخی از کاربردیترین کامندهای مرتبط با زیپ کردن فایلها در لینوکس را مورد بررسی قرار دهیم.
tar
$ tar -cf archive.tar file1 file2
کامند tar
که مخفف واژگان Tape Archive میباشد، نوعی فرمت برای آرشیو کردن دادهها است. در تفسیر کامند فوق باید بگوییم که دو فایل داریم تحت عناوین file1
و file2
که برای آرشیو کردن آنها ابتدا دستور tar
را نوشته سپس آپشن cf-
را نوشتهایم و پس از آن هم نامی برای فایل آرشیوی خود تحت عنوان archive.tar
انتخاب کرده و در نهایت نام فایلهایی که میخواهیم آرشیو شوند را نوشتهایم (به خاطر داشته باشیم که این فایلها باید در مسیر فعلی که در آن قرار داریم وجود داشته باشند.)
در توضیح پیرامون آپشن cf-
باید گفت که آپشن c
این وظیفه را دارا است به کامند tar
دستور دهد که ما قصد ساخت یک آرشیو داریم و آپشن f
هم دستور میدهد که آپشن بعدی، یعنی archive.tar
، نام انتخابی برای فایل آرشیو است. برای خارج کردن فایلی از حالت آرشیو هم باید از دستور زیر استفاده کنیم:
$ tar -xvf archive.tar
file1
file2
آپشن x
مخفف Extract (استخراج کردن) است که در این صورت فایل archive.tar
را در محلی که در آن قرار گرفتهایم از حالت فشرده خارج میسازد.
zip
$ zip original.zip original
کامند zip
کاربردی همچون tar
دارد و برای فشردهسازی فایلها و دایرکتوریها مورد استفاده قرار میگیرد. همانطور که در کامند فوق مشخص است، با استفاده از کامند zip
ابتدا نامی برای فایل فشرده همچون original.zip
انتخاب نموده سپس فولدری که قصد داریم زیپ شود را وارد کردهایم. کامند unzip
هم برای خارج کردن فایلهایی که دارای فرمت زیپ هستند از حالت فشرده است:
$ unzip original.zip
در واقع، کامند فوق این وظیفه را دارا است تا فایلی فشرده تحت عنوان original.zip
را در همان دایرکتوری که قرار داریم، از حالت زیپ خارج سازد.
خاموش و ریاستارت کردن سیستم
علاوه بر دکمههایی که روی سیستم برای خاموش یا ریاستارت کردن دستگاه وجود دارند، در لینوکس با استفاده از کامندهای در نظر گرفته شده برای این کار نیز میتوان به عملکرد یکسانی دست یافت.
reboot
$ reboot
کامند reboot
نیاز به سطح دسترسی روت دارد. چنانچه پرمیشن روت داشته باشیم، با وارد کردن کامند فوق در ترمینال و اینتر کردن، سیستم ریاستارت خواهد شد.
poweroff
$ poweroff
کامند poweroff
کاری دقیقاً مشابه دکمهٔ پاور سیستم میکند و سیستم را کاملاً خاموش میسازد.
نیاز به توضیح است که دستورات ترمینال لینوکس به موارد بالا ختم نشده و بسیار گستردهتر از موارد فوق هستند و این در حالی است کامندهای ذکرشده در این پست صرفاً پرکاربردترین دستورات ترمینال بودند و برای آشنایی بیشتر با محیط کامندلاین لینوکس، میتوانید به دورهٔ آموزش لینوکس در سکان آکادمی مراجعه نمایید.