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

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

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

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

mkdir

$ mkdir example

این کامند برای ایجاد یک دایرکتوری جدید، در صورتی که قبلاً ایجاد نشده باشد، استفاده می‌شود که مخفف واژگان Make Directory است. در مثال فوق، mkdir یک فولدر خالی تحت عنوان example در هر مسیری که قرار داشته باشیم، خواهد ساخت. 

ls

$ ls 
dir1 dir2 dir3

کامند ls لیست محتوای دایرکتوری (به صورت پیش‌فرض، استفاده از این دستور محتوای دایرکتوری فعلی را نشان می‌دهد) را نشان می‌دهد.

cd

$ cd example

کامند cd مخفف واژگان Change Directory است که جهت تغییر دایرکتوری مورد استفاده قرار می‌گیرد. فرض کنیم که در مسیر Desktop قرار داریم و روی دسکتاپ هم فولدری داریم تحت عنوان example. برای وارد شدن به این فولدر، صرفاً کافی است تا دستور فوق را وارد نماییم. حال اگر مجدد تمایل داشته باشیم تا به مسیر دسکتاپ وارد شویم، می‌توانیم از دستور .. cd استفاده نماییم (در واقع، دستور .. cd ما را یک پوشه به عقب بازمی‌گرداند).

اکنون فرض کنیم که در مسیر دسکتاپ قرار داریم اما می‌خواهیم مستقیماً وارد پوشهٔ www پکیج LAMP شویم؛ برای این منظور می‌بایست ابتدا یک اسپیس (فاصله) پس از 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 خواهد شد). در صورتی که بخواهیم قبل از 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 به دقت استفاده کنیم چرا که پس از حذف یک فایل، امکان بازگردادن آن وجود نخواهد داشت. در چنین شرایطی، اگر بخواهیم که قبل از عملی شدن کامند 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$ کرده‌ایم (نیاز به توضیح نیست که 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 است که جهت افزایش یا کاهش پرمیشن‌ (مُد) یک فایل یا دایرکتوری مورد استفاده قرار می‌گیرد. در لینوکس پرمیشن‌ها را به ۲ شکل می‌شود تعریف کرد: یا از طریق حروف الفبای از پیش تعریف شده و یا از طریق اعداد تعریف شدهٔ ۰ تا ۷ که برای روشن‌تر شدن نحوهٔ کاربرد این کامند، یک مثال می‌زنیم.

فرض کنیم فایلی داریم تحت عنوان myFile و این در حالی است که قصد داریم پرمیشن‌های Write ،Read و Execute را به ترتیب به معانی «خواندن»، «نوشتن» و «اجرا کردن» را برای User (کاربر که خودمان باشیم) به این فایل اختصاص دهیم. همچنین قصد داریم برای Group (گروه کاربری) هم فقط پرمیشن‌های «خواندن» و «اجرا کردن» را در نظر بگیریم و در نهایت هم برای Other (سایر کاربران) هم فقط و فقط پرمیشن خواندن را در نظر بگیریم:

$ chmod u=rwx,g=rx,o=r myfile

پیش از این گفتیم که ۲ راه مختلف برای اختصاص پرمیشن به فایل‌ها و دایرکتوری‌ها داریم که یکی از طریق حروف الفبای اختصاص داده شده و دیگری از طریق اعداد است که در مثال فوق راه‌کار اول را اتخاذ کرده‌ایم. می‌بینیم که ابتدا حروف ابتدایی g ،u و o که به ترتیب مخفف واژگان Group ،User و Other هستند را نوشته، یک علامت = قرار داده و پرمیشن‌ها را در نظر گرفته‌ایم سپس بدون هیچ فاصله‌ای یک علامت کاما قرار داده و پرمیشن‌های دیگر را در نظر گرفته‌ایم و در نهایت هم نام فایلمان را نوشته‌ایم. حال اگر بخواهیم همین پرمیشن‌ها را با استفاده از اعداد در نظر بگیریم، خواهیم داشت:

$ chmod 754 myfile

در کامند فوق، اعداد ۷، ۵ و ۴ به ترتیب مختص کاربر، گروه‌ کاربری و سایر کاربران است و این در حالی است که هر یک از این اعداد جمع جبری اعداد ۰، ۱، ۲ و ۴ است؛ به عبارت دیگر، ۰ نشاگر این است که هیچ پرمیشنی اختصاص نخواهد یافت، ۱ برای پرمیشن Execute است، ۲ برای پرمیشن Write است و ۴ هم برای پرمیشن Read است.

با این تفاسیر و در نظر گرفتن این نکته که قبل از این گفتیم قرار است برای User هر ۳ پرمیشن «خواندن»، «نوشتن» و «اجرا کردن» را اختصاص دهیم، عدد ۷ را نوشته‌ایم که جمع جبری اعداد 1+2+4 یا به عبارتی (read+write+execute) است، برای Group عدد ۵ را نوشته‌ایم که جمع جبری اعداد 1+0+4 یا به عبارتی (read+no write+execute) است و در نهایت هم برای Other عدد ۴ را نوشته‌ایم  که جمع جبری اعداد 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 از حالت آرشیو هم می‌بایست از دستور زیر استفاده کنیم:

$ tar -xvf archive.tar
file1
file2

آپشن x مخفف Extract (استخراج کردن) است که در این صورت، فایل archive.tar را در محلی که در آن قرار گرفته‌ایم از حالت فشرده خارج می‌سازد.

zip

$ zip original.zip original

کامند zip کاربردی همچون tar دارد و برای فشرده‌سازی فایل‌ها و دایرکتوری‌ها مورد استفاده قرار می‌گیرد. همان‌طور که در کامند فوق مشخص است، با استفاده از کامند zip ابتدا نامی برای فایل فشرده همچون original.zip انتخاب نموده سپس فولدری که قصد داریم زیپ شود، original، را وارد کرده‌ایم. کامند unzip هم برای خارج کردن فایل‌هایی که دارای فرمت zip. هستند از حالت فشرده است:

$ unzip original.zip

در واقع، کامند فوق این وظیفه را دارا است تا فایلی فشرده تحت عنوان original.zip را در همان دایرکتوری که قرار داریم، از حالت زیپ خارج سازد.

خاموش و ری‌استارت کردن سیستم
علاوه بر دکمه‌هایی که روی سیستم برای خاموش یا ری‌استارت کردن سیستم وجود دارند، در لینوکس با استفاده از کامندهای در نظر گرفته شده برای این کار نیز می‌توان به عملکردی یکسان دست یافت.

reboot

$ reboot

کامند reboot نیاز به سطح دسترسی روت دارد. چنانچه پرمیشن‌های روت را داشته باشیم، با وارد کردن کامند فوق در ترمینال و اینتر کردن، سیستم ری‌استارت خواهد شد.

poweroff

$ poweroff

کامند poweroff کاری دقیقاً مشابه دکمهٔ پاور سیستم می‌کند و سیستم را کاملاً خاموش می‌سازد.

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