هر چقدر که محیطهای گرافیکی و برنامههای پر زرق و برق در لینوکس وارد شوند باز هم خط فرمان جایگاه خاص خود را دارد و هرگز آن را از دست نخواهد داد. در این مجموعه مطالب که بخش اول را در این شماره میخوانید، قرار است ۵۰ دستور متداول و پر کاربرد لینوکسی را مرور کنیم. البته اینها فقط دستورات لینوکسی نیستند بلکه به احتمال دستورات متداول دیگری نیز در لینوکس وجود دارند که در این مطلب از قلم افتادهاند.
دستور tar
gnu tar محبوبترین و پر استفادهترین برنامه برای فشردهسازی و استخراج بستههای مختلف به فرمتهای گوناگون است. در اینجا چند مثال از این برنامه را خواهید دید:
ساخت یک فایل بایگانی با فرمت tar.
tar cvf directory_name.tar directory_name_path/
استخراج یک آرشیو با فرمت tar.
tar xvf file_name.tar
اما گاهی پیش میآید که میخواهیم مطلع شویم درون یک فایل فشرده چه فایلها و پوشههایی وجود دارد. سادهترین راهحل استخراج این فایل و مشاهده محتویات آن است اما زمانی که حجم فایل سنگین باشد و هارددیسک فضای کافی نداشته باشد؛ این راهحل عملی نیست. راهحل حرفهایتر استفاده از tar به همراه سوئیچ t برای مشاهده محتویات یک فایل فشرده یا tar شده است:
tar tvf archive_name.tar
tar در حقیقت برای یک تکهکردن فایلها یا پوشهها برای انتقال بهتر به کار میرود و در عمل هیچ فشردهسازی انجام نمیدهد (همانند zip) اما بهتر است بدانید بهترین و جدیدترین متدها و توسعههای فشردهسازی متنباز بهصورت سوئیچها و گزینههایی در این برنامه وجود دارند.
سوئیچ z برای فشردهسازی یا استخراج فرمت gz (که برنامه gzip نیز آن را فراهم میکند)، سوئیچ j برای استفاده در فرمت bz2 (برنامه bzip2 آن را فراهم میکند) و سوئیچ J برای استفاده از فرمت xz به کار میرود. برای نمونه، میتوان مثالهای زیر را استفاده کرد:
tar cvfz directory_name.tar.gz directory_name_path/
tar xvfj file_name.tar.bz2
اگر بخواهید از متدهای پیشرفتهتر فشردهسازی مانند lzma استفاده کنید میتوانید از گزینهای به همین عنوان (–lzma) استفاده کنید. Gnu tar گزینهها و سوئیچهای فراوان و متنوعی دارد که میتواند تمامی نیازهای یک کاربر یا مدیر سیستم حرفهای را تأمین کند. برای دیدن تمامی سوئیچها و آپشنها میتوان به راهنمای برنامه یا مستندات آنلاین پروژه گنو مراجعه کرد.
grep
اگر تاکنون نیاز به مشاهده یک دستور یا یک کلمه در خروجی بسیار مفصل ترمینال یا یک فایل متنی بلند بالا داشته باشید، بهطور حتم، از grep نیز استفاده کردهاید. Grep ورودی را (از ورودی استاندارد ترمینال) میگیرد و خطوطی مشخص شده را نمایش میدهد. در حقیقت grep نوعی فیلترسازی را انجام میدهد.
grep -i “the” demo_file
دستور فوق، خطوط دارای the را در فایل متنی demo_file پیدا کرده و نمایش میدهد. سوئیچ i به grep میگوید که the را بهصورت case in-sensitive (غیر حساس به حروف بزرگ و کوچک) جستوجو کند. فرض کنید نیاز دارید تا در یک فایل متنی یک واژه را جستوجو کنید اما مطمئن نیستید که این واژه به همان معنی و مفهوم که مورد نظر شما است به کار رفته یا خیر. در این مواقع میتوان از grep به این صورت استفاده کرد:
grep -A ۳ -i “example” demo_text
ممکن است بدترین حالت این باشد که به دنبال یک کلمه یا جمله میگردید اما مطمئن نیستید این واژه یا رشته در کدام یک از فایلها قرار دارد. سوئیچ r و * دستور grep برای این مواقع هستند:
grep -r “word” *
find
اگر فکر کردهاید فقط برنامههای جستوجوی گرافیکی با آن زرق و برق منوها و نوار ابزارهای شلوغشان هستند که میتوانند شما را به فایل/پوشه گمشدهتان برسانند اشتباه کردهاید. find دستوری است که با سرعت بسیار بالاتر نسبت به برنامههای گرافیکی هارددیسک شما را میگردد و با سوئیچها و گزینههای زیاد خود باعث میشود زودتر به هدفتان برسید.
find -iname “MyCProgram.c”
نکته: اگرچه امکان اجرای تمامی دستورات فوق توسط هر کاربری وجود داشت (و find نیز اینگونه است) اما از این جهت کاربر root اجازه خواندن تمامی پوشهها و فایلها را دارد، برای جستوجوی کاملتر بهتر است این دستور را توسط کاربر ریشه اجرا کنید.
دستور فوق باعث جستوجو برای MyCProgram.c در پوشه جاری میشود و البته iname به find میگوید که به دنبال فایل مورد نظر بدون حساسیت به حروف کوچک و بزرگ آن بگردد. در مثال بعدی، find به دنبال فایل/فایلهای مورد نظر در مسیر / میگردد و البته پس از پیدا کردن آنها، دستور md5sum را روی آنها اجرا کرده و md5 را محاسبه و در خروجی نمایش میدهد.
find / -iname “MyCProgram.c” -exec md5sum {} \;
مثال آخر نیز باعث جستوجو برای پیدا کردن تمامی فایلهای خالی در پوشه خانگی کاربر اجرا کننده دستور میشود:
find ~ -empty
اگر بخواهیم یک سوئیچ پر کاربرد دیگر در find نام ببریم، باید از سوئیچ type- نام ببریم که میتواند به دنبال file،directory ،socket و… ( با استفاده از حروف s برای socket، d برای directory و f برای file) بگردد.
ssh
بدون شک ssh شناخته شدهترین و پر استفادهترین دستور لینوکسی برای مدیریت راه دور سرورها است. در حالت ساده میتوان با استفاده از ssh با کاربر مورد نظر به سرور راه دور لاگین کرد:
ssh -l root remotehost.example.com
میتوان برای مشخص کردن کاربر، از شیوه زیر نیز استفاده کرد:
ssh root@remotehost.example.com
اما اگر بهصورت ساده از دستوری مانند ssh remotehost.example.com استفاده کنید، ssh با کاربر اجرا کننده دستور سعی در ورود به سرور ریموت میکند. پر واضح است که به جای نام سرور، میتوان از آیپی آن نیز استفاده کرد. اگر در اتصال به سرور راه دور مشکل دارید، میتوانید از سوئیچ v- برای اشکالزدایی (debug) استفاده کنید. اگر باز هم مشکل پیدا نشد vv- میتواند کمک بیشتری کند اما اگر باز هم متوجه خطا یا مشکل پیشآمده نشدید، باید آخرین تیر ترکش یعنی سوئیچ vvv- را امتحان کنید. اما اگر سروری دسترسی راه دور با استفاده از رمزعبور را بسته بود باید چه کرد؟
ssh برای این مشکل، استفاده از key را پیشنهاد میدهد. به کمک سوئیچ i- و کلید عمومی سرور میتوان به راحتی بدون نیاز به رمزعبور به سرور راه دور متصل شد:
ssh -i /home/ali/id_dsa root@1.2.3.4
sed
میدانید که امکان ویرایش فایلی که توسط برنامه دیگری در حال ویرایش است توسط ویرایشگرهای متنی متداول وجود ندارد. اما sed (سرنام stream editor) راهحل خوبی دارد و بدون نیاز به باز کردن یک فایل متنی میتواند تغییرات مورد نیازمان را روی آن فایل انجام و فایل را ذخیره کند.
شاید دیدهاید که فایلهای متنی ویندوزی در لینوکس بهطور کامل در یک خط نمایش داده میشوند (با ذخیره فایل در ویندوز با تنظیمات پیش فرض). اگر میخواهید خطوط بهصورت صحیح نمایش داده شود، باید در پایان هر خط ویندوزی یک r\n\ اضافه کنید. Sed این کار را بهراحتی برای شما انجام میدهد:
sed “s/.$//” filename
به طورحتم، از این مثال هم متوجه شدید که دستور sed، شکل و شمایل یا بهاصطلاح syntax عجیبی دارد اما کارهای عجیبی نیز انجام میدهد. به عنوان مثال دستور زیر، محتویات فایل متنی را از انتها به ابتدا نمایش میدهد:
sed -n “۱!G;h;$p” theTextFile.txt
فرض کنید مدیر سیستمی هستید که اسکریپتی نوشتهاید و میخواهید به روش غیرمعمول و به قول معروف «لقمه را دور سر گرداندن» ببینید، این اسکریپت چند خط دارد. مثال sed زیر جلوی هر خط غیر خالی شماره آن را میگذارد:
sed “/./=” theScript.sh | sed “N; s/\n/ /”
awk
awk نیز یک زبان عجیب و غریب برنامهنویسی است که پیادهسازی آزاد آن، gawk ( سر حرف GNU awk) است. awk بیشتر برای پردازش و تطبیق متن با الگوی مورد نظر به کار میرود. به عنوان مثال دستور زیر، یکی از خطوط برنامه را که چند بار تکرار شدهاند نگه میدارد و بقیه را پاک میکند:
awk “!($۰ in array) { array[$0]; print }” temp
یا به عنوان یک نمونه دیگر میتوان دستور زیر را مثال زد که خطوطی از فایل etc/passwd/ را که داری شناسه کاربری (uid) و گروه کاربری (gid) یکسان باشند را نمایش میدهد:
awk -F “:” “$۳==$۴″ passwd.txt
فهم دستور زیر کمی سادهتر است؛ نمایش فیلدهای دلخواه یک فایل:
awk “{print $2,$5;}” employee.txt
vim
vim و nano از محبوبترین برنامههای ویرایشگر متن خط فرمانی هستند. کار با nano نسبت به vim سادهتر است اما برای کار با vim باید ترفندهای این برنامه را بلد باشید. هر چند کار با vim به اندازه nano ساده نیست اما سر خورههای لینوکسی درد میکند برای چنین برنامههایی. در دستور زیر، vim فایل متنی filename.txt را باز میکند و به خط ۱۴۳ آن میرود:
vim +۱۴۳ filename.txt
دستور زیر باعث باز شدن فایل متنی در vim شده و به نخستین واژه جستوجو شده پرش میکند. برای رفتن به واژههای بعدی مطابق با این کلمه باید کلید n و برای رفتن به واژههای قبلی باید N را زد:
vim +/search-term filename.txt
مطمئناً تمامی فایلهای متنی را نمیتوان در مد خواندن/نوشتن باز کرد و بعضی را باید با احتیاط کامل و فقط به صورت خواندنی باز کرد تا مبادا در اثر اشتباه، فایل تنظیمات یک سرویس خراب شد و آن سرویس از کار بیفتد یا برای دفعات بعدی شروع به کار نکند:
vim -R /etc/passwd
diff
همانگونه که میشود از نام این دستور حدس زد، از این دستور برای مقایسه بین دو فایل استفاده میشود. استفاده از diff برای پی بردن به تفاوتهای بین دو نسخه از یک اسکریپت یا سورس کد یک برنامه بسیار مفید و ساده است.
$diff -w name_list.txt name_list_new.txt
۲c2,3
< John Doe — > John M Doe
> Jason Bourne
دستور فوق با حذف فضاهای خالی (space) دو فایل را از نظر تغییرات و تفاوتها مقایسه میکند. استفاده از diff نیاز به توضیح و تفسیر بیشتری ندارد.
sort
نام sort نیز به اندازه کافی گویای کاربرد آن است. اما ذکر چند مثال از استفادههای این دستور خالی از لطف نیست.
sort names.txt
استفاده از این دستور به همراه فایل متنی که در آن واژههایی نوشته شده است (بهصورت هر کلمه در یک خط) باعث نمایش ترتیب این کلمهها به صورت صعودی (به ترتیب حروف الفبا) میشود. به کمک سوئیچ r- میتوان ترتیب نمایش را از صعودی به نزولی تغییر داد:
sort -r names.txt
از دیگر سوئیچهای این برنامه میتوان به b- برای حذف فضای سفید ابتدای هر خط، f- برای نادیده گرفتن حروف کوچک و بزرگ و R- برای مرتب سازی اتفاقی اشاره کرد.
export
export برای صدور متغیرهای محیطی خط فرمان به گونهای که توسط سایر برنامهها در آن شل (ترمینال خط فرمان) قابل استفاده باشد به کار میرود. استفاده از export بدون هیچ گزینهای باعث نمایش تمامی متغیرهای محیطی میشود. دستور زیر برای لیست کردن متغیرهای مرتبط با oracle استفاده شده است:
$ export | grep ORACLE
declare -x ORACLE_BASE=”/u01/app/oracle”
declare -x ORACLE_HOME=”/u01/app/oracle/product/10.2.0″
declare -x ORACLE_SID=”med”
declare -x ORACLE_TERM=”xterm”
برای تعریف یک متغیر محیطی به گونهای که در سایر برنامهها نیز قابل استفاده باشد، میتوان به این صورت از export استفاده کرد.
export ORACLE_HOME=/u01/app/oracle/product/10.2.0