آشنایی با کامندهای کاربردی ترمینال در لینوکس‌


اهمیت نرم‌افزارهای اپن‌سورس به خصوص سیستم‌عامل‌های اپن‌سورسی همچون گنو/لینوکس روز به روز بیشتر شده و لازم است تا خود را برای روزی که این دست نرم‌افزارها بیش از این فراگیر شوند آماده سازیم. از همین روی، در این پست قصد داریم تا دستورات پایه‌ای و کاربردی ترمینال را معرفی کنیم که هر علاقمندی به لینوکس بهتر است بلد باشد که در دسته‌های مدیریت فایل، پردازش متن، مدیریت سیستم، مدیریت پروسه‌ها،‌ آرشیو داده‌ها و ری‌استارت کردن سیستم تقسیم‌بندی شده‌اند.

مدیریت فایل‌
مجموعه دستورات کاربردی که برای مدیریت فایل‌ها مورد استفاده قرار می‌گیرند عبارتند از:

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 کاری دقیقاً مشابه دکمهٔ پاور سیستم می‌کند و سیستم را کاملاً خاموش می‌سازد.

نیاز به توضیح است که دستورات ترمینال لینوکس به موارد بالا ختم نشده و بسیار گسترده‌تر از موارد فوق هستند و این در حالی است کامندهای ذکرشده در این پست صرفاً پرکاربردترین دستورات ترمینال بودند و برای آشنایی بیشتر با محیط کامندلاین لینوکس، می‌توانید به دورهٔ آموزش لینوکس در سکان آکادمی مراجعه نمایید.



بهزاد مرادی