استفاده از دستورات خطفرمانی در لینوکس همیشه کارها را بسیار آسان کردهاند. این دستورات قادرند تا اکثر کارهای روزمره شما را انجام دهند بدون آنکه به نرمافزارهای گرافیکی نیاز داشت. در برخی از موارد سرعت انجام کارها توسط این ابزار بسیار بیشتر از ابزار گرافیکی خواهند بود. به عنوان نمونه در هنگامی که بر روی چندینفایل مختلف اعمالی را اعمال میکنید؛ یا زمانیکه میخواهید چندین کار تکراری را پشت سر هم انجام دهید، این اسکریپتها و دستورات خط فرمانی هستند که کارهای شما را سریعتر انجام خواهند داد.
در زیر به چهار مورد از ترفندهای کاربردی مورد نیاز برای عموم کاربران گنو/لینوکس و یونیکس خواهیم پرداخت که برای استفاده از دستورات tar، mkdir و kill بهکار خواهند آمد. در این ترفندها قصد داریم تا نحوه استفاده از این دستورات را در شرایط مختلف و گوناگون بررسی کنیم که در حالت عادی ممکن است همگی شما برای انجام این کارها وقت تقریبا بیشتری را صرف کرد؛ اما با استفاده از این روش شما کافی است تا دستورات فوق را در خط فرمان اجرا کرده و منتظر شد تا خروجی مورد نظر توسط آنان تولید شده و کارتان تمام شود.
۱− ایجاد چند پوشه در یک دایرکتوری مشابه
به عنوان مثال پوشهای را در شاخه خانگی کاربر جاری ایجاد نمودهاید؛ سپس میخواهید چندین پوشه دیگر را نیز در آن پوشه ایجاد کرده و یا حتی در برخی موارد این کار را برای پوشههای داخلی نیز تکرار کنید و چندین پوشه دیگر را نیز در داخل آن پوشهها ایجاد کنید. چنین کارهایی به کدهای زیاد و تکراری بالایی نیاز دارند. به عنوان نمونه شما باید ابتدا پوشه اول را ایجاد کنید؛ سپس پوشه دوم و پوشه سوم تا الی آخر را ایجاد کنید که باید هر یک را جداگانه و با چندین خط دستور انجام دهید. به طور عادی در دستور نوشته شده زیر، که معمولا همگی این دستورات برای ایجاد پوشههایی در پوشهای یکسان به کار میروند؛ ما از چندین دستور «mkdir» پشت سر هم استفاده کردهایم. (برای انجام عمل فوق از دستور زیر استفاده میکنیم.)
$ cd /home/$USER/Desktop $ mkdir tecmint $ mkdir tecmint/etc $ mkdir tecmint/lib $ mkdir tecmint/usr $ mkdir tecmint/bin $ mkdir tecmint/tmp $ mkdir tecmint/opt $ mkdir tecmint/var $ mkdir tecmint/etc/x1 $ mkdir tecmint/usr/x2 $ mkdir tecmint/usr/x3 $ mkdir tecmint/tmp/Y1 $ mkdir tecmint/tmp/Y2 $ mkdir tecmint/tmp/Y3 $ mkdir tecmint/tmp/Y3/z
همانطور که مشاهده میکنید، دستورات فوق شامل چندین خط دستور به صورت پشت سر هم است که با بالا رفتن تعداد پوشهها نیز باید تعداد خطوط کد بیشتری را وارد کرد. برای کم کردن این دستورات و استفاده از یک خط کد برای انجام این کار قادر به استفاده از روش دیگری نیز خواهید بود که در آن، دستور «mkdir» با مولفههای دیگری استفاده شده است و با یک خط کد قادر است نتیجه دستور بالا را تولید کند.
$ mkdir -p /home/$USER/Desktop/tecmint/{etc/x1,lib,usr/{x2,x3},bin,tmp/{Y1,Y2,Y3/z},opt,var}
سپس با استفاده از دستور «tree» قادر خواهید بود خروجی ایجاد شده را مشاهده کنید. که همانطور که مشاهده خواهید کرد دستور فوق از خروجی یکسانی با دستور اول برخوردار است.
$ tree tecmint
استفاده از دستور فوق فقط مختص به مورد مذکور نیست و همانطور که اشاره کردیم برای موارد پیچیدهتر و تو در تو نیز قابل تغییر و سفارشیسازی است. حتی اگر قادر به نوشتن اسکریپتهای بش «Bash» و شلاسکریپتهای دیگر «Shell Scripts» نیز هستید؛ خواهید توانست تا از ترفند فوق در داخل یک اسکریپت استفاده کنید. به عنوان نمونه اگر میخواهید در یک اسکریپت چندین پوشه را در یک پوشه مادر ایجاد کنید؛ با استفاده از دستور فوق و استفاده از متغیرها و دستورات حلقه در زبانهای اسکریپتی مانند بش، اساچ «SH» و … به راحتی قادر خواهید بود؛ موارد پیچیدهتر را نیز به راحتی انجام دهید.
۲− ایجاد فایل متنی و قرار دادن مقادیر در آن
راههای زیادی برای ایجاد یک فایل و درج مقادیر در آن استفاده شده است؛ ار موارد گرافیکی تا موارد خطفرمانی که به طور مشخص برای ایجاد یک فایل متنی و نوشتن متنی دلخواه در آن معمولا از ویرایشگرهای متنی ساده استفاده میشود. بااینحال برای ایجاد چنین فایلی و نوشتن مقادیری خاص در آن در خط فرمان شبهیونیکسها مانند بیاسدی، اواس ده و گنو/لینوکس معمولا از سه دستور مختلف استفاده میشود. در اولین مرحله شما باید ابتدا فایل را ایجاد کرد که معمولا با دستور touch انجام میشود.
$ touch /home/$USER/Desktop/test
سپس بعد از ایجاد فایل با دستور فوق، با یک ویرایشگر متنی ساده و خطفرمانی مانند نانو «nano»، وی«Vi» و ویم «Vim» فایل را گشوده و مقادیر مورد نظر را داخل آن وارد کرد.
$ nano /home/$USER/Desktop/test
بعد از وارد کردن مقادیر دلخواه میتوان با کلید میانبر کنترل + اکس «Ctrl + X» بر روی کیبرد و نوشتن کلمه وای «Y»، مقادیر نوشته شده را در داخل فایل ذخیره کرد. با این حال روشی آسانتر نیز وجود دارد که تمامی وارد فوق را یکجا و به راحتی و بدون نیاز به پیرایشگری خاص انجام خواهد داد. در این ترفند میتوان از دستور کَت «cat» استفاده کرد که با نوشتن یک خط دستور و وارد کردن مقادیر دلخواه و سپس فشردن کلید میانبر کنترل + دی «Ctrl + D»، مقادیر وارد شده را در فایلی دلخواه ذخیره خواهد کرد.
[ehsan@ETARCH Desktop]$ cat << EOF > /home/$USER/Desktop/test.cpp > #include <iostream> > using namespace std; > int main(int argc, char* argv[]){ > cout << "Hello World!"; > } > bash: warning: here-document at line 9 delimited by end-of-file (wanted `EOF')
شاید در حالت عادی متوجه تفاوت زیادی بین روش اول و روش فوق نشوید، اما اگر بخواهید با اسکریپتنویسی مقادیری را در یک فایل بریزید، یکی از روشها همین روش خواهد بود با این حال روشهای دیگری نیز برای ایجاد و قرار دادن مقادیر به یک فایل متنی در بش و حتی زبانهای برنامهنویسی وجود دارند؛. در انتها و برای مشاهده مقادیر ذخیره شده در فایل متنی ذخیره شده، همواره میتوان با استفاده از دستور کَت «cat» نیز به مقادیر فایلها دسترسی داشت.
[ehsan@ETARCH Desktop]$ cat test.cpp #include <iostream> using namespace std; int main(int argc, char* argv[]){ cout << "Hello World!"; }
۳− استخراج فایلها و پوشهها از یک آرشیو به صورت مستقیم
در برخی مواقع ممکن است پیشآمد باشد که برنامه خاصی را از اینترنت بارگیری نمودهاید. به طور معمول آن برنامهها به صورت آرشیو فشرده در قالب تار «tar.x» عرضه شدهاند. برای آنکه این فایل را از حالت فشرده خارج کرده و سپس به شاخه «opt» برده و برنامه را اجرا کنید؛ باید ابتدا با دستور زیر آرشیو فوق را از حالت فشرده خارج کرد. که برای اینکار از دستورات زیر استفاده میشود.( به دلخواه میتوان یا انتقال داد و یا نسخهبرداری «کپی» کرد.)
$ cp firefox-39.0.2.tar.bz2 /opt/ یا انتقال دهیم $ mv firefox-39.0.2.tar.bz2 /opt/
سپس باید با دستور تغییر شاخه، وارد شاخه و پوشه «opt» شد.
$ cd /opt/
و دست آخر با استفاده از دستور tar، آرشیو مورد نظر را از حالت فشرده خارج نمود.
# tar -jxvf firefox-39.0.2.tar.bz2
با این حال میتوان ابتدا آرشیو را از حالت فشرده خارج نموده و سپس پوشه ایجاد شده را به داخل شاخه opt نسخهبرداری «کپی» کرد. .( به دلخواه میتوان یا انتقال داد و یا کپی کرد.)
$ tar -jxvf firefox-39.0.2.tar.bz2 $ cp -R firefox/ /opt/ یا انتقال دهیم $ mv firefox/ /opt/
همانطور که مشاهده میکنید در دو روش فوق نیز زمان نسبتا زیادی از کاربر صرف اجرای کارهای پشت سر هم شده است. در اینمورد و برای برای صرفه جویی در زمان میتوان از مولفههای نرمافزار و دستور «tar» بهره جست. دستور «tar» دارای کلمه کلیدی «C-» است که به راحتی قادر است آرشیو داده شده را در مکان دلخواه از حالت فشرده خارج کند.
$ tar -jxvf firefox-39.0.2.tar.bz2 -C /opt/
اکثر افراد برای انجام نصب برنامههای بارگزاری شده از اینترنت که به صورت آرشیو شده برای بارگزاری قرار گرفتهاند، بهجای انجام عمل فوق از دستورات اول و دوم استفاده میکنند که تقریبا به یکی از عادات آنان تبدیل شده است؛ در حالی که با استفاده از یک کلید (مولفه) ساده میتوان چندین کار را با یک دستور انجام داد.
4- چگونه یک فرآیند را به شکلی سنتی متوقف کنیم
معمولا برای یافتن یک فرآیند از بین چندین فرآیند ابتدا دستور «ps -A» اجرا می شود تا به لیستی از فرآیندهای در حال اجرا دسترسی داشت. سپس با استفاده از لولهکشی «پایپلاینینگ» به دستور «grep» به راحتی میتوانیم موردی خاص را در لیست پیدا کنیم. مثلا تمامی فرآیندهای مرتبط با آپاچی ۲:
$ ps -A | grep -i apache2
بعد از اجرای دستور فوق چند فرآیند مرتبط با آپاچی ۲ را مشاهده خواهید کرد که در کنار آنان مقادیر «PID» قرار دارند. با استفاده از مقادیر کنار نام فرآیندها، میتوان این پردازندهها را متوقف کرد «کشت».
1006 ? 00:00:00 apache2 2702 ? 00:00:00 apache2 2703 ? 00:00:00 apache2 2704 ? 00:00:00 apache2 2705 ? 00:00:00 apache2 2706 ? 00:00:00 apache2 2707 ? 00:00:00 apache2
همچنین بعد از انجام دستور فوق و مشخص شدن خروجی مشابه با خروجی بالا، با استفاده از دستوری که در زیر آمده است قادر خواهید بود تا فرآیندهای لیست شده در بالا را با استفاده از مقادیر کنار آنان متوقف کنید.
kill 1006 2702 2703 2704 2705 2706 2707
بعد از انجام مراحل فوق و برای آزمودن صحت کار دستورات فوق میتوان با استفاده از دستور اول مشخص کرد که آیا تمامی فرآیندهای آپاچی ۲، متوقف شدهاند یا که دستور فوق با موفقیت اجرا نشده و فرآیندهای مرتبط با نرمافزار آپاچی ۲ هنوز در حال اجرا هستند.
$ ps -A | grep -i apache2
با این حال میتوان از دستورات دیگری مثل «pgrep» و «pkill» نیز استفاده کرد که تقریبا کاربردی مشابه با دستورات قبلی را دارند، با این تفاوت که برای کاربران سادهتر بوده و درک آنان برای افراد مبتدی نیز آسانتر است. برای این کار ابتدا دستور «pgrep» را اجرا کرده تا تمامی فرآیندهای مرتبط با آپاچی ۲ را در یک لیست مرتب شده درج کند.
$ pgrep apache2
بعد از اجرای دستور فوق خروجی زیر به دست میآید که مقادیر PID در آن به صورت لیستشده قرار دارند. همانطور که مشاهده میکنید، در این دستور فقط مقادیر PID قابل مشاهده هستند.
15396 15400 15401 15402 15403 15404 15405
بااینحال میتوانید از دستور فوق به صورت زیر استفاده کنید؛ با اجرای دستور زیر نام تمامی فرآیندهای مرتبط نیز کنار مقادیر PID درج خواهد شد.
$ pgrep -l apache2
خروجی دستور فوق بعد از اجرا به شکل زیر خواهد بود.
15396 apache2 15400 apache2 15401 apache2 15402 apache2 15403 apache2 15404 apache2 15405 apache2
نکته: برای تهیه لیستی از فرآیندهای مرتبط با برنامههای دیگر کافی است اسم اجرایی آنان را وارد نماییم. مثلا برای مرورگر فایرفاکس باید بنویسیم «firefox»؛ و نه «Mozilla Firefox»، که نامی اشتباه است.
برای متوقف کردن تمامی فرآیندهای فوق فقط کافی است، دستور زیر را اجرا کنید که بدون نیاز به دریافت مقادیر PID قادر است، فرآیندهای مرتبط با یک برنامه را متوقف کند.
# pkill apache2
با استفاده از دستور «killall» نیز میتوانید کار مشابه دستور بالا را انجام دهید. به عنوان مثال با اجرای دستور زیر خواهید توانست برنامه پخشکننده فیلم MPV را به طور کامل متوقف کنید.
killall mpv
اگر میخواهید تمامی فرآیندهای اجرا شده توسط کاربری خاص را نیز متوقف کنید، دستور مذکور بسیار کاربردی خواهد بود. با دستور زیر میتوان تمامی فرآیندهای اجرا شده توسط کاربری خاص را متوقف نمود. برای این کار کافی است دستور زیر را با مولفه «user–» و نام کاربر به کار گیرید.
killall --user naghi
دستور زیر نیز برای مشخص کردن اینکه آیا اعمال انجام شده توسط دستورات مذکور انجام شدهاند به کار میرود که اگر خروجی آنان شامل مورد خاصی نبود و لیستی خالی را شامل میشد؛ مشخص است که اعمال بالا به درستی کار خود را انجام دادهاند.
$ pgrep -l apache2
دستورات خطفرمانی در گنو/لینوکس و شبهیونیکسها و حتی سیستمعامل اواس ده مختص به مواردی محدود نیستند به صورتی که بتوان آنان را حتی در چند مقاله پوشش داد. این دستورات بسیار زیاد هستند و شامل گزینهها و مولفههای فراوانی میشوند که برای پوشش همه آنان باید چندین جلد کتاب نوشت و هر یک را به تفصیل توضیح داد. با این حال همواره اشاره به رخی نکات کاربردی و ترفندهایی عمومی برای کاربران همواره مفید بوده و باعث علاقه کابران تازه کار و غیر آشنا به گنو/لینوکس برای یادگیری اینچنین مواردی خواهد شد.
در هر صورت همواره باید به یاد داشت که برای استفاده از خط فرمان و نوشتن اسکریپت نیازی به دانش فنی بالایی ندارید و حتی نیاز ندارید که همه موارد را از بر بود، بلکه باید بتوانید از این دستورات در مواقع لزوم استفاده کرده و در صورت نیاز با کمک گرفتن از راهنما و صفحات «Man» موجود در توزیع خود به درستی استفاده کنید.