Chaining دستورات لینوکس به معنی، ترکیب چند دستور و اجرایی کردن آنها بر اساس رفتار عملگر مورد استفاده در بین آنها می باشد. Chaining دستورات لینوکسی در حقیقت همانند این است که شما اسکریپت های کوتاه shell را در خود آن شل بنویسید، و آنها را مستقیما از طریق ترمینال اجرا کنید. chaining ممکن است باعث اتوماتیک شدن process شود. علاوه بر این، یک سیستمی که کمتر مورد توجه قرار میگیرد در حقیقت با کمک عملگرهای زنجیره ای (chaining operators) میتواند به شیوه ای systematic بسیار کاربردی شود.
همچنین توصیه میشود مطالعه کنید:
آموزش دستور AWK بخش اول
در این پست درباره موارد استفاده از این عملگرهای chaninig دستور و با استفاده از توصیفات کوتاه و همچنین مثال های مرتبط که قطعا برای شما مفید خواهد بود صحبت خواهیم کرد و برای شما امکان نوشتن کدهای کوتاه و کاربردی در کنار کاهش لود سیستم را فراهم خواهد کرد.
1. عملگر Ampersand (&)
عملکرد ‘&‘ برای اجرای دستور در پس زمینه می باشد. فقط دستور را با یک فاصله و سپس عملگر ‘&‘ تایپ کنید. شما می توانید بیشتر از یک دستور و تنها با یک خط فرمان در پس زمینه اجرا کنید.
یک دستور را در پس زمینه اجرا کنید:
دو دستور را با هم و همزمان در پس زمینه اجرا کنید:
2. عملگر semi-colon (;)
عملگر semi-colon امکان اجرای چندین دستور تنها در یک خط را فراهم می کند و اجرای دستورات به ترتیب خواهد بود.
دستور ترکیبی بالا ابتدا دستورالعمل update را اجرا خواهد کرد و سپس upgrade و در نهایت دایرکتوری test را تحت دایرکتوری جاری ایجاد خواهد کرد.
3. عملگر AND (&&)
عملگر AND (&&) دستور دوم را به شرطی اجرا خواهد کرد که اجرای اولین دستور با موفقیت بوده باشد، وضعیت exit دستور اول 0 (صفر) باشد. این دستور در بررسی وضعیت اجرایی آخرین command بسیار مفید خواهد بود.
برای مثال، من می خواهم سایت linux-zone.org را با استفاده از دستور links در ترمینال مشاهده کنم، اما قبل از آن با استفاده از دستور ping باید بررسی کنم که آیا هاست مورد نظر در دسترس هست یا نیست.
4. عملگر OR (||)
عملگر OR (||) بسیار شبیه به عبارت ‘else‘ در برنامه نویسی است. عملگر بالا امکان اجرا شدن دستور دوم را تنها به شرط fail شدن دستور اول میسر خواهد کرد. وضعیت خروجی دستور اول '1' خواهد بود.
برای مثال، من می خواهم دستور ‘apt-get update‘ را از طریق اکانت non-root (یوزر غیر root) اجرا کنم و اگر دستور اول شکست خورد، سپس دستور دوم "links linux-zone.org" اجرا خواهد شد.
در دستور بالا، به دلیل اینکه کاربر اجازه ی آپدیت سیستم را ندارد، وضعیت و کد خروجی دستور اول '1' خواهد بود و بنابراین دستور آخر ‘links linux-zone.org‘ اجرا خواهد شد.
چه می شود اگر دستور اول با موفقیت و با یک exit status (وضعیت خروجی) '0' اجرا شود؟ بدیهی است! دستور دوم اجرا نخواهد شد.
در اینجا با توجه به اینکه کاربر امکان و اجازه ایجاد فولدر test در دایرکتوری home خود را دارد، قسمت اول دستور با موفقیت اجرا شده و یک وضعیت خروجی '0' بر می گرداند و بنابراین قسمت آخر دستور اجرا نمی شود.
5. عملگر NOT (!)
عملگر NOT (!) بیشتر شبیه به عبارت ‘except‘ است. این دستور همه موارد به جز شرط ها را اجرا خواهد کرد. برای فهم این مورد، یک دایرکتوری با نام ‘tecmint‘ در دایرکتوری home خود ایجاد کنید و به آن cd کنید.
سپس، چندین نوع فایل در فولدر ‘tecmint‘ ایجاد کنید.
تمام فایل هایی که ما در فولدر ‘tecmint‘ ایجاد کرده ایم را ببینید.
حالا تمام فایل ها بجز فایل html را به یکباره حذف کنید.
اکنون برای بررسی صحت عملکرد دستور بالا با استفاده از دستور ls فایل های موجود را لیست کنید.
6. عملگر AND – OR (&& – ||)
عملگر بالا ترکیبی از عملگر های ‘AND‘ و ‘OR‘ می باشد و بیشتر شبیه عبارت ‘if-else‘ می باشد.
به عنوان مثال linux-zone.org را ping کرده و اگر با موفقیت بود عبارت ‘Verified‘ را چاپ کنیم و در غیر اینصورت عبارت ‘Host Down‘ را چاپ کنیم.
نمونه خروجی
حالا، ارتباط اینترنت خود را قطع کرده و مجددا همان دستور را اجرا کنید.
نمونه خروجی
7. عملگر PIPE (|)
عملگر PIPE بسیار مفید است در جایی که خروجی اولین دستور به عنوان یک ورودی برای دستور دوم عمل می کند. به عنوان مثال pipeline خروجی دستور ‘ls -l‘ را به ‘less‘ می دهد و خروجی دستور را می توانید ببینید.
8. عملگر Command Combination {}
با استفاده از این عملگر دو یا چند دستور را ترکیب کنید، دستور دوم به اجرای دستور اول وابسته خواهد شد.
به عنوان مثال، بررسی کنید آیا دایرکتوری ‘bin‘ در دسترس است یا خیر، و خروجی مربوطه را چاپ کند.
9. عملگر پرانتز Precedence ()
عملگر پرانتز (Precedence) این امکان را ایجاد می کند که دستور در پرانتز در اولویت اجرا شود.
در syntax بالا، اگر Command_x1 به درستی انجام نشود چه اتفاقی خواهد افتاد؟ هیچ یک از دستورات Command_x2، Command_x3،Command_x4 اجرا نخواهد شد، به همین دلیل ما از عملگر پرانتز استفاده می کنیم:
در syntax بالا، اگر Command_x1 به درستی انجام نشد (fail شد)، Command_x2 نیز همچنین fail خواهد شد، اما هنوز دستور Command_x3 و Command_x4 با توجه به وضعیت خروجی Command_x3 اجرا می شود.
10. عملگر الحاق Concatenation (\)
عملگر Concatenation (\) همانطور که از نامش مشخص است برای الحاق دستورات بزرگ در چندین خط در شل استفاده می شود. به عنوان مثال دستور زیر فایل متنی test(1).txt را باز خواهد کرد.
همچنین توصیه میشود مطالعه کنید:
آموزش دستور AWK بخش اول
در این پست درباره موارد استفاده از این عملگرهای chaninig دستور و با استفاده از توصیفات کوتاه و همچنین مثال های مرتبط که قطعا برای شما مفید خواهد بود صحبت خواهیم کرد و برای شما امکان نوشتن کدهای کوتاه و کاربردی در کنار کاهش لود سیستم را فراهم خواهد کرد.
1. عملگر Ampersand (&)
عملکرد ‘&‘ برای اجرای دستور در پس زمینه می باشد. فقط دستور را با یک فاصله و سپس عملگر ‘&‘ تایپ کنید. شما می توانید بیشتر از یک دستور و تنها با یک خط فرمان در پس زمینه اجرا کنید.
یک دستور را در پس زمینه اجرا کنید:
کد PHP:
tecmint@localhost:~$ ping *c5 linux-zone.org &
کد PHP:
root@localhost:/home/tecmint# apt-get update & apt-get upgrade &
2. عملگر semi-colon (;)
عملگر semi-colon امکان اجرای چندین دستور تنها در یک خط را فراهم می کند و اجرای دستورات به ترتیب خواهد بود.
کد PHP:
root@localhost:/home/tecmint# apt-get update ; apt-get upgrade ; mkdir test
3. عملگر AND (&&)
عملگر AND (&&) دستور دوم را به شرطی اجرا خواهد کرد که اجرای اولین دستور با موفقیت بوده باشد، وضعیت exit دستور اول 0 (صفر) باشد. این دستور در بررسی وضعیت اجرایی آخرین command بسیار مفید خواهد بود.
برای مثال، من می خواهم سایت linux-zone.org را با استفاده از دستور links در ترمینال مشاهده کنم، اما قبل از آن با استفاده از دستور ping باید بررسی کنم که آیا هاست مورد نظر در دسترس هست یا نیست.
کد PHP:
root@localhost:/home/tecmint# ping -c3 linux-zone.org && links linux-zone.org
4. عملگر OR (||)
عملگر OR (||) بسیار شبیه به عبارت ‘else‘ در برنامه نویسی است. عملگر بالا امکان اجرا شدن دستور دوم را تنها به شرط fail شدن دستور اول میسر خواهد کرد. وضعیت خروجی دستور اول '1' خواهد بود.
برای مثال، من می خواهم دستور ‘apt-get update‘ را از طریق اکانت non-root (یوزر غیر root) اجرا کنم و اگر دستور اول شکست خورد، سپس دستور دوم "links linux-zone.org" اجرا خواهد شد.
کد PHP:
tecmint@localhost:~$ apt-get update || links linux-zone.org
چه می شود اگر دستور اول با موفقیت و با یک exit status (وضعیت خروجی) '0' اجرا شود؟ بدیهی است! دستور دوم اجرا نخواهد شد.
کد PHP:
tecmint@localhost:~$ mkdir test || links linux-zone.org
5. عملگر NOT (!)
عملگر NOT (!) بیشتر شبیه به عبارت ‘except‘ است. این دستور همه موارد به جز شرط ها را اجرا خواهد کرد. برای فهم این مورد، یک دایرکتوری با نام ‘tecmint‘ در دایرکتوری home خود ایجاد کنید و به آن cd کنید.
کد PHP:
tecmint@localhost:~$ mkdir tecmint
tecmint@localhost:~$ cd tecmint
کد PHP:
tecmint@localhost:~/tecmint$ touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html
کد PHP:
tecmint@localhost:~/tecmint$ ls
a.doc a.html a.pdf a.xml b.doc b.html b.pdf b.xml
کد PHP:
tecmint@localhost:~/tecmint$ rm -r !(*.html)
کد PHP:
tecmint@localhost:~/tecmint$ ls
a.html b.html
6. عملگر AND – OR (&& – ||)
عملگر بالا ترکیبی از عملگر های ‘AND‘ و ‘OR‘ می باشد و بیشتر شبیه عبارت ‘if-else‘ می باشد.
به عنوان مثال linux-zone.org را ping کرده و اگر با موفقیت بود عبارت ‘Verified‘ را چاپ کنیم و در غیر اینصورت عبارت ‘Host Down‘ را چاپ کنیم.
کد PHP:
tecmint@localhost:~/tecmint$ ping -c3 linux-zone.org && echo "Verified" || echo "Host Down"
کد PHP:
PING linux-zone.org (212.71.234.61) 56(84) bytes of data.
64 bytes from linux-zone.org (212.71.234.61): icmp_req=1 ttl=55 time=216 ms
64 bytes from linux-zone.org (212.71.234.61): icmp_req=2 ttl=55 time=224 ms
64 bytes from linux-zone.org (212.71.234.61): icmp_req=3 ttl=55 time=226 ms
--- linux-zone.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 216.960/222.789/226.423/4.199 ms
Verified
کد PHP:
tecmint@localhost:~/tecmint$ ping -c3 linux-zone.org && echo "verified" || echo "Host Down"
کد PHP:
ping: unknown host linux-zone.org
Host Down
7. عملگر PIPE (|)
عملگر PIPE بسیار مفید است در جایی که خروجی اولین دستور به عنوان یک ورودی برای دستور دوم عمل می کند. به عنوان مثال pipeline خروجی دستور ‘ls -l‘ را به ‘less‘ می دهد و خروجی دستور را می توانید ببینید.
کد PHP:
tecmint@localhost:~$ ls -l | less
8. عملگر Command Combination {}
با استفاده از این عملگر دو یا چند دستور را ترکیب کنید، دستور دوم به اجرای دستور اول وابسته خواهد شد.
به عنوان مثال، بررسی کنید آیا دایرکتوری ‘bin‘ در دسترس است یا خیر، و خروجی مربوطه را چاپ کند.
کد PHP:
tecmint@localhost:~$ [ -d bin ] || { echo Directory does not exist, creating directory now.; mkdir bin; } && echo Directory exists.
9. عملگر پرانتز Precedence ()
عملگر پرانتز (Precedence) این امکان را ایجاد می کند که دستور در پرانتز در اولویت اجرا شود.
کد PHP:
Command_x1 &&Command_x2 || Command_x3 && Command_x4.
کد PHP:
(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)
10. عملگر الحاق Concatenation (\)
عملگر Concatenation (\) همانطور که از نامش مشخص است برای الحاق دستورات بزرگ در چندین خط در شل استفاده می شود. به عنوان مثال دستور زیر فایل متنی test(1).txt را باز خواهد کرد.
کد PHP:
tecmint@localhost:~/Downloads$ nano test\(1\).txt