نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • اشتباهات
  • دستورات پوسته اوبونتو نحوه خودکارسازی عملیات پشتیبان گیری "برنامه ریزی شده".

دستورات پوسته اوبونتو نحوه خودکارسازی عملیات پشتیبان گیری "برنامه ریزی شده".

به محض اینکه به آن رسید دستگاه لینوکسو کار کم و بیش حرفه ای با این سیستم عامل، در مثال ها بلافاصله خط فرمان ظاهر می شود و شروع به تسلط می کند. از آن به راحتی می توان نتیجه گرفت که این رابط اصلی (و استاندارد) مدیریت سیستم در لینوکس است. همان خواننده زیرک مطمئناً تعجب خواهد کرد - چه کسی دستورات وارد شده را اجرا می کند خط فرمان? پاسخ "سیستم" نادرست است: لینوکس یک شی جداگانه به نام "سیستم" ندارد. سیستم سیستمی است که از اجزای متعددی تشکیل شده است که با یکدیگر تعامل دارند.

پاسخ صحیح، طبق معمول، پیچیده تر است. سیستم عامل به طور خاص مورد نیاز است تا برنامه ها بدون فکر کردن به جزئیات دستگاه رایانه و جزئیات آن، از پردازنده و هارد دیسک (مثلاً در سطح "فایل باز" و نه توالی دستورات، نوشته شوند. برای حرکت دادن سر هارد دیسک). سیستم عامل خود سخت افزار را مدیریت می کند و برنامه ها را با "زبان" سطح نسبتاً بالایی از انتزاع ارائه می دهد که تمام نیازهای آنها را پوشش می دهد، به اصطلاح. API. اما چنین زبانی برای دستورات کاربر مناسب نیست، زیرا هنوز هم سطح پایینی دارد (برای حل ساده ترین کار کاربر، باید چندین عملیات از این دست را انجام دهید) و فقط با نوشتن یک برنامه (اغلب) می توانید از آن استفاده کنید. به زبان C). نیاز به اختراع زبان مدیریت سیستم دیگری - سطح بالاتر و راحت تر - برای کاربر وجود دارد. تمام دستوراتی که می توان در خط فرمان وارد کرد به این زبان فرموله شده است.

نتیجه گیری از آن برای خواننده زیرک آسان است رسیدگیاین دستورات، ترجمه آنها به زبان سیستم عامل، نیز باید برخی باشد برنامه ویژه، و با آن است که کاربر در حین کار با خط فرمان یک گفتگو انجام می دهد. پس چنین است: این برنامه نامیده می شود مترجم خط فرمانیا پوسته فرمان("پوسته"). دقیقاً به این دلیل "پوسته" نامیده می شود که تمام مدیریت سیستم به گونه ای انجام می شود که گویی "از داخل" آن است: کاربر به زبانی که برای او مناسب است (با استفاده از خط فرمان متنی) با آن ارتباط برقرار می کند و او با سایر بخش های سیستم در ارتباط است. راحت آنهازبان ( فراخوانی توابع برنامه ریزی شده).

البته چندین مفسر دستور در لینوکس وجود دارد. ساده‌ترین آنها، که در نسخه‌های اولیه یونیکس ظاهر شد، به نام نویسنده آن، استفان بورن، sh یا "Bourne Shell" نامیده می‌شود. با گذشت زمان - هر جا ممکن بود - با یکی قوی تر، bash جایگزین شد، "Bourne Again Shell" (2) bash در همه چیز، به خصوص در ویژگی ها، از sh پیشی گرفت. ویرایشخط فرمان. علاوه بر sh و bash، "The Z Shell"، zsh، ممکن است روی سیستم نصب شود. اکثرمفسر فرمان قدرتمند امروزی (شوخی نیست، 22 هزار خط مستند)، یا tcsh، نسخه به روز شده و همچنین بسیار قدرتمند C Shell قدیمی، که دستور دستور آن شبیه به زبان برنامه نویسی C است.

نحو خط فرمان

پس این زبان کاربرپسندتر چیست؟ بیشتر از همه، ارتباط در این زبان شبیه یک گفتگوی مکتوب با سیستم است - تبادل متنی به نوبه خود. عبارت کاربر در این زبان یک دستور است، هر دستور یک خط جداگانه است. تا زمانی که فشرده شود وارد، رشته را می توان ویرایش کرد، سپس به پوسته منتقل می شود. پوسته جدا می کنددستور دریافت شده - آن را به زبان اشیا و توابع سیستم ترجمه می کند و سپس برای اجرا به سیستم ارسال می کند.

نتیجه اجرای دستورات بسیار زیاد نیز متنی است که به عنوان "پاسخ" به کاربر داده می شود. در حالی که نیازی نیست، تیم می تواند کار خود را کاملاً بی سر و صدا انجام دهد. علاوه بر این، اگر شرایط خاصی در حین اجرای دستور رخ داده باشد (مثلاً یک خطا)، پوسته در پاسخ به کاربر گنجانده می شود. پیام های تشخیصی.

فرمان و گزینه ها

ساده ترین دستور شامل یک کلمه واحد است، مانند دستور cal که تقویم ماه جاری را نمایش می دهد.

$cal
ژوئن 2008
یکشنبه دوشنبه سه شنبه چهارشنبه پنج شنبه جمعه شنبه
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

$

مثال 1. دستور cal


و اگر باید تقویم ماه آینده را ببینید؟ درست است، شما نباید یک دستور جداگانه برای این اختراع کنید، cal کار را به خوبی انجام می دهد، فقط رفتار آن باید کمی اصلاح شود:

7 دلار 2008
جولای 2008
یکشنبه دوشنبه سه شنبه چهارشنبه پنج شنبه جمعه شنبه
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

مثال 2. دستور cal با پارامترها


به نظر می رسد که دستور cal 7 2008 حداقل از دو بخش تشکیل شده است - دستور cal واقعی و "همه چیز دیگر". این استراحت که از دستور پیروی می کند نامیده می شود مولفه های(یا استدلال ها) و به منظور تغییر رفتار دستور معرفی می شوند. در بیشتر موارد، هنگام تجزیه خط فرمان اولینکلمه به عنوان نام دستور در نظر گرفته می شود و بقیه پارامترهای آن هستند.

کلمات

هنگام تجزیه خط فرمان، پوسته از مفهوم استفاده می کند جدا کننده(حائل، جداکننده). جداکننده شخصیتی است که کلمات را از هم جدا می کند. بنابراین خط فرمان دنباله است کلمات(که مهم هستند) و جداکننده ها(که مهم نیست). برای پوسته، جداکننده ها عبارتند از کاراکتر فاصله، کاراکتر تب و کاراکتر خط جدید. تعداد جداکننده های بین دو کلمه مجاور مهم نیست.

برای گرفتن جداکننده داخلکلمات (و رشته تحدید شده حاصل به صورت یکیپارامتر)، کل رشته فرعی باید با نقل قول های تک یا دو احاطه شود: $ اکو یک دو سه
یک دو سه
$ echo یک "دو سه"
یک دو سه
$ echo "یک
>
> اوه بنابراین، بعدی چیست؟
> اوه، نقل قول ها را فراموش کردم!"

مثال 3. نقل قول در خط فرمان


همه موارد بالا به این معنی است که دستور به تعداد پارامترها دارد کلماتاز نقطه نظر پوسته آن را در خط فرمان دنبال می کند. اولین کلمه در تریپل به دستور به عنوان پارامتر اول و دوم به عنوان دوم و ... در حالت اول دستور echo ارسال می شود. سهپارامترهای "یک"، "دو" و "سه" هستند. او آنها را بیرون آورد و با فاصله آنها را از هم جدا کرد. در حالت دوم، پارامترها بودند دو: "یک" و "دو سه". در نتیجه اینها دوپارامترها نیز با فاصله از هم جدا شده اند. در مورد سوم، پارامتر فقط بود یکی- از آپستروف آغازین ""یک" تا پایانی "...فراموش کردم!" ". در تمام مدت زمانی که bash در حال تایپ بود، به کمک یک اشاره ">" صادر کرد - نشانه ای از تایپ خط فرمان، اما در حالت تایپ محتوای نقل قول ها.

کلیدها

برای حل مشکلات مختلف، اقدامات مشابه باید کمی متفاوت انجام شود. به عنوان مثال، برای همگام سازی کار در نقاط مختلفدر جهان، بهتر است از زمان یکسان برای همه (به وقت گرینویچ) استفاده کنید و روز کاری خود را - به وقت محلی (با در نظر گرفتن تغییر منطقه زمانی و تفاوت بین زمان زمستان و تابستان) سازماندهی کنید. دستور date هر دو بار را نشان می دهد، فقط به یک پارامتر "-u" اضافی (معروف به "--universal") برای کار در GMT نیاز دارد.


دوشنبه 16 ژوئن 18:03:44 MSD 2008
$ date -u
دوشنبه 16 ژوئن 14:03:46 UTC 2008

مثال 4. دستور تاریخ با کلید


چنین پارامترهایی نامیده می شوند اصلاح کننده های اجرایا کلیدها(گزینه ها) . کلید متعلق به این دستور خاص است و به خودی خود معنایی ندارد، به همین دلیل با سایر پارامترها (به عنوان مثال، نام فایل، اعداد) که دارای آن هستند تفاوت دارد. خود رابه معنای مستقل از هر دستوری. هر فرمان می تواند مجموعه ای از کلیدها را تشخیص دهد و رفتار خود را متناسب با آن تغییر دهد. در نتیجه، سوئیچ "همان"، به عنوان مثال، " -s" می تواند به معنای چیزهای کاملاً متفاوتی برای دستورات مختلف باشد.

هیچ استاندارد سفت و سختی برای قالب کلیدها وجود ندارد، اما توافقاتی وجود دارد که نقض آن در زمان ما ناپسند است. ابتدا، اگر پارامتر با "-" شروع شود، این است - کلید تک حرفی. "-" معمولا با یک کاراکتر منفرد دنبال می شود که معمولاً یک حرف است که نشان دهنده عمل یا ویژگی است که این سوئیچ به دستور می دهد. این امر تشخیص کلیدها را از سایر پارامترها آسان تر می کند - هم برای کاربر هنگام تایپ خط فرمان و هم برای برنامه نویس، نویسنده فرمان.

ثانیاً، مطلوب است که نام کلید باشد معنی دار- به عنوان یک قاعده، این حرف اول نام عمل یا ویژگی است که با کلید مشخص می شود. به عنوان مثال، سوئیچ "-a" در انسان و که از کلمه آمده است. آ ll" (همه)، و رفتار این دستورات را تغییر می دهد به طوری که آنها شروع به نشان دادن اطلاعاتی می کنند که معمولاً خاموش است. و در cal and who دستور می دهد، معنای کلید "-m" متفاوت است:

$ who -m
methody tty1 20 سپتامبر 13:56 (localhost)
$ cal -m
ژوئن 2008
دوشنبه سه شنبه چهارشنبه پنج شنبه جمعه شنبه یکشنبه
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

مثال 5. استفاده از سوئیچ -m در دستورات مختلف


برای چه کسی، گزینه -m به معنای " م e، که "I" است، و در نتیجه، چه کسی شبیه به whoami کار می کند. و برای cal، کلید "-m" فرمانی برای صدور یک تقویم است که به عنوان روز اول محاسبه می شود. دوشنبهمروز")، همانطور که در روسیه مرسوم است.

خاصیت کلید از یک سو بسیار کوتاه و از سوی دیگر آموزنده بودن نامیده می شود. مخفف. نه تنها کلیدها، بلکه نام رایج ترین دستورات لینوکس نیز این ویژگی را دارند.

ثالثاً گاهی اوقات کلید رفتار دستور را تغییر می دهد به گونه ای که تفسیر پارامتر زیر این کلید در خط فرمان نیز تغییر می کند. به نظر می رسد کلید است خودمیک پارامتر می گیرد، بنابراین کلیدهایی از این نوع فراخوانی می شوند پارامتریک. به عنوان یک قاعده، پارامترهای آنها نام فایل برای برنامه های مختلف، ویژگی های عددی و موارد دیگر است. ارزش هایبرای عبور به فرمان -s 00:00
date: قادر به تنظیم تاریخ نیست: عملیات مجاز نیست
دوشنبه 16 ژوئن 00:00:00 MSK 2008
تاریخ $
دوشنبه 16 ژوئن 18:30:53 MSK 2008

مثال 6. با استفاده از date -s


گزینه -s دستور date به شما امکان تنظیم را می دهد زمان سیستمبه مقداری که به عنوان پارامتر این کلید مشخص شده است. با این حال، در این مثالاین عملیات شکست خورد، همانطور که در خروجی مشهود است پیغام خطا. برای تغییر ساعت سیستم به امتیازاتی نیاز است مدیر سیستمو در مثال ما، این دستور از طرف یک کاربر معمولی اجرا شد. با این حال، تاریخ همچنان زمانی را نشان می‌دهد که باید تنظیم می‌شد، حتی اگر ساعت سیستم بدون تغییر باقی بماند.

حفظ اختصارات کلیدی زمانی که تیم آنها را دارد سخت است. خیلی زیادزیاد. چند نامه الفبای لاتین(به عنوان مثال، "s" یا "o") اغلب استفاده می شود، و می تواند به عنوان مخفف چندین دستور به طور همزمان باشد، و برخی (مثلا، "z") - به ندرت، به سختی می توان به یک دستور معنی دار رسید. نام برای آنها برای این مورد، دیگری وجود دارد کلمه کاملقالب: کلید با شروع می شود دوعلامت "-" به دنبال آن کاملنام نهادی که نشان می دهد. به عنوان مثال، کلید "-help" (مشابه با " -h"): $ head -- help
استفاده: سر [KEY]... [FILE]...
10 خط اول هر FILE را در خروجی استاندارد چاپ می کند.
اگر چندین FILES مشخص شده باشد، ابتدا یک هدر با نام فایل چاپ می کند.
اگر FILE داده نشود یا به عنوان - داده شود، ورودی استاندارد را می خواند.

آرگومان های مورد نیاز برای کلیدهای طولانی برای کلیدهای کوتاه نیز لازم است.
-c، --bytes=[-]N اولین N بایت هر فایل را چاپ می کند.
آخرین بایت هر فایل
-n، --lines=[-]N پرینت N خط اول هر فایل، نه 10.
اگر N قبل از `- باشد، همه را به جز N چاپ کنید
آخرین خطوط هر فایل
-q، --quiet، --silent سرصفحه ها را با نام فایل چاپ نکنید
-v، --verbose همیشه سرصفحه ها را با نام فایل چاپ می کند
--help نشان دادن این کمک و خروج
--نسخه نمایش اطلاعات نسخه و خروج

N می تواند پسوند ضربی داشته باشد: b 512, k 1024, m 1024*1024.

گزارش اشکالات در .

مثال 7. کلید کمک است


می بینید که برخی از کلیدهای هد هم فرمت تک حرفی و هم فرمت کامل دارند و برخی فقط فرمت کامل کلمه دارند. معمولاً اینطور است: کلیدهای پرکاربرد دارای مخفف هستند، اما کلیدهای نادر ندارند. ارزش هایپارامتریک تمام قدمرسوم است که کلیدها را نه به عنوان پارامتر خط فرمان بعدی، بلکه با کمک " = ارسال کنید معنی” مستقیماً بعد از کلید.

چهارم، توافق‌های کم‌تر سخت اما محبوبی در مورد آن وجود دارد معنیکلیدها کلید "-h" (" اچ elp") معمولاً (اما افسوس که نه همیشه) باعث صدور دستورات می شود اشاره مختصر. در نهایت، ممکن است لازم باشد به دستور منتقل شود پارامتر نه کلید، شروع با "-". برای انجام این کار، باید از کلید "-" استفاده کنید: $ head -1 -filename-with-
head: گزینه نامعتبر -- f
برای اطلاعات بیشتر «head --help» را امتحان کنید توصیف همراه با جزئیات.
$ head -1 -- -filename-with-
خط اول فایل -filename-with-

مثال 8. پارامتر غیر کلیدی که با "-" شروع می شود


کلید " -- " (اولین " - " نشانه کلید است، دومی خود کلید است) معمولاً از تفسیر همه گزینه های خط فرمان بعدی به عنوان سوئیچ، صرف نظر از اینکه با "-" شروع می شوند یا نه، مانع می شود. نه تنها پس از " -- " سر موافقت کرد که -filename-with- نام فایل باشد.

خلاصه داستان

با توجه به موارد فوق، واضح است که هر دستور زبان کوچک خود را دارد - شامل آن دسته از کلیدها و پارامترهای مورد نیاز و اختیاری است که دستور می پذیرد و تفسیر می کند. برای دریافت یک نمای کلی از قابلیت های فرمان، اسناد مختلف لینوکس ارائه می شود خلاصه- فهرستی مختصر از تمام پارامترهای فرمان ممکن. چیزی شبیه این به نظر می رسد:

Cal [-smjy13] [سال]

مثال 9. خلاصه دستور cal


خلاصه به دست می دهد رسمی شدشرح نحوه استفاده از شی (با این مورد- چگونه و با چه پارامترهایی دستور cal را اجرا کنیم). پارامترها به همان ترتیبی که باید در خط فرمان وارد شوند فهرست می شوند، پارامترهای اختیاری معمولاً در پرانتز آورده می شوند، پارامترهای اجباری اصلاً بدون پرانتز، و کلیدها در یک پارامتر برای فشردگی جمع آوری می شوند که در آن هر حرف یک عدد است. کلید جداگانه مثال بالا به این صورت است: دستور cal no پارامترهای مورد نیاز، سوئیچ های (اختیاری) (-s، -m، و غیره) و یک پارامتر سال اختیاری وجود دارد که ممکن است قبل از یک ماه اختیاری باشد (اما یک ماه بدون سال نمی تواند مشخص شود).

دستورات از کجا می آیند؟

پس از پایان خواندن بخش قبل، خواننده زیرک باید چیزی شبیه به این فکر می کرد: بله، خوب، با دستورات و پارامترها (یعنی گرامر خط فرمان) کمی آن را فهمیدیم، اکنون ما را با لیستی از تمام دستورات لینوکس مسلح کنید ( به عبارت دیگر، یک فرهنگ لغت)، و بیایید دست به کار شویم. چرا چنین لیستی در هیچ کجا منتشر نمی شود؟ به طور دقیق تر، لیست های مختلفی از دستورات وجود دارد، و همه آنها به وضوح ناقص هستند و در همه چیز همگرا نیستند. پاسخ به این سوال دو بخش دارد.

بخش 1: دستورات و ابزارهای کمکی

شل، یک مفسر دستور، یک "پوسته" نه تنها برای کاربر، بلکه برای دستورات است: او تقریباً هیچ دستوری را اجرا نمی کند، آنها را به سیستم منتقل می کند. وظیفه آن تجزیه خط فرمان، استخراج دستور و پارامترها از آن و سپس اجرا است سودمندی- برنامه ای که نام آن با نام دستور یکی است.

اگر به مفسر فرمان "از داخل" نگاه کنید، کار با خط فرمان چیزی شبیه به این است: کاربر یک رشته (فرمان) را وارد می کند، پوسته آن را می خواند، گاهی اوقات آن را به تبدیل می کند. قوانین خاص، رشته به دست آمده را به یک فرمان و پارامترها تقسیم می کند و سپس برنامه کاربردی را راه اندازی می کند و این پارامترها را به آن ارسال می کند. ابزار، به نوبه خود، پارامترها را تجزیه و تحلیل می کند، کلیدهای میان آنها را برجسته می کند، و آنچه را که خواسته شده انجام می دهد، به طور همزمان داده ها را برای کاربر نمایش می دهد، پس از آن پایان می یابد. در پایان برنامه، کار مفسر فرمان "retreated" از سر گرفته می شود، دوباره خط فرمان را می خواند، آن را تجزیه می کند، فرمان را فراخوانی می کند ... این کار تا زمانی ادامه می یابد که کاربر به پوسته فرمان دهد. سرامدنخود (با استفاده از فرمان خروج یا کاراکتر کنترل Ctrl+D).

با این حال، برخی از دستورات (کوچکتر) هنوز توسط پوسته به تنهایی و بدون فراخوانی هیچ گونه ابزاری اجرا می شوند. برخی از مفیدترین دستورات در bash تعبیه شده‌اند، حتی اگر به‌عنوان ابزارهای کاربردی در دسترس باشند (مانند اکو). دستور داخلی نیز به همین صورت عمل می کند، اما از آنجایی که اجرای آن زمان بسیار کمتری می برد، در صورت امکان، مفسر دستور آن را انتخاب می کند. در bash، نوع دستور را می توان با استفاده از دستور type تعیین کرد. دستورات bash بومی نامیده می شوند ساخته شده در(فرمان داخلی) و برای برنامه های کاربردی چاپ می کند مسیر، حاوی نام دایرکتوری حاوی فایل با برنامه مربوطه و نام این برنامه است. کلید "-a" (" آ ll" البته) باعث خروجی نوع می شود همهگزینه های ممکن برای تفسیر فرمان و سوئیچ " -t " - نوع فرمان را به جای مسیر چاپ می کند.

$type date
اطلاعات /bin/date است
اکو نوع $
echo یک پوسته داخلی است
$ نوع -a اکو
echo یک پوسته داخلی است
echo /bin/echo است
$type -a -t echo
ساخته شده در
فایل

مثال 10. تعریف نوع فرمان


چند دستور بومی در مفسر فرمان وجود دارد. اساساً اینها اپراتورهای زبان برنامه نویسی و سایر ابزارهای کنترل خود مفسر هستند. تمام دستوراتی که کار معنی‌داری را برای کاربر انجام می‌دهند در لینوکس به صورت نمایش داده می‌شوند تاسیسات فردی. در اینجا بخش اول از پاسخ به سوال در مورد همه است دستورات لینوکس: تعداد آنها به تعداد برنامه (ابزار) نوشته شده برای لینوکس وجود دارد. لیست آنها لیستی از ابزارهای نصب شده در سیستم است و در سیستم های مختلفمتفاوت خواهد بود.

قسمت دوم: هر چیزی راهنمای خودش را دارد

هر شی از سیستم: همه خدمات رفاهی، همه شیاطینلینوکس، تمامی امکانات هسته هاو کتابخانه ها، ساختار اکثریت فایل های پیکربندی در نهایت، بسیاری از مفاهیم نظری اما مهم باید با مستنداتی همراه شوند که هدف و نحوه استفاده از آنها را توضیح دهد. بنابراین کاربر سیستم مورد نیاز نیست حفظ کردنتمام تعاملات ممکن با او کافی فهمیدناصول اولیه ساختار آن و قادر به یافتن اطلاعات مرجع. انیشتین در این باره گفت: "چرا آنچه را که همیشه می توانید در یک کتاب مرجع جستجو کنید، حفظ کنید؟"

اکثر مختلفاطلاعات مفید در صفحات دستی (manpages). هر صفحه از کتابچه راهنمای کاربر (برای اختصار - فقط "دستی") به هر یک از شی های سیستم اختصاص داده شده است. برای مشاهده صفحه مرد، man را تایپ کنید یک شی : $ مرد کال
راهنمای دستورات عمومی CAL(1) BSD CAL(1)

نام
cal - یک تقویم را نمایش می دهد

خلاصه
cal [-smjy13] [سال]

شرح
Cal یک تقویم ساده را نمایش می دهد. اگر آرگومان ها مشخص نشده باشند،
ماه جاری نمایش داده می شود. گزینه ها به شرح زیر است:
. . .

مثال 11. مشاهده صفحه راهنما


"صفحه دستی" معمولا بیش از یک صفحه است صفحه نمایش. برای سهولت خواندن، انسان برنامه صفحه بندی متن را اجرا می کند، کمتر . کنترل برنامه کمتر ساده است: صفحات با یک فاصله ورق می زنند، و زمانی که از خواندن خسته می شوید، باید "q" (خروج) را فشار دهید. همچنین می توانید با کلیدها ورق بزنید. صفحه به بالا / صفحه پایین، برای تغییر به یکیخط جلو می تواند استفاده شود واردیا فلش رو به پایین، و یک خط پیکان عقب - بالا. انتقال به ابتدا و انتهای متن به ترتیب با دستورات "g" و "G" (Go) انجام می شود. لیست کاملآنچه می توانید با متن کمتر انجام دهید با دستور "H" (Help) نمایش داده می شود.

صفحه مرد شامل زمینه های- بخش های استاندارد که شی را از زوایای مختلف توصیف می کند. هنگام خواندن راهنما برای اولین بار، ارزش آن را دارد که با NAME (توضیح مختصری از شی) و DESCRIPTION (توضیحات مفصل شی، برای استفاده از آن کافی است) شروع کنید. یکی از مهمترین قسمت های دستی در انتهای متن قرار دارد. اگر کاربر در حین خواندن NAME یا DESCRIPTION متوجه شد که آنچه را که به دنبال آن بود در دفترچه راهنما پیدا نکرده است، ممکن است بخواهد ببیند آیا وجود دارد یا خیر. دیگرکتابچه های راهنما یا سایر منابع اطلاعاتی در همین موضوع. فهرستی از این منابع در قسمت SEE ALSO موجود است:

$ مرد مرد
. . .
S.E.ALSO
apropos(1)، whatis(1)، less(1)، groff(1)، man.conf(5).
. . .

مثال 12. همچنین به قسمت راهنمایی مراجعه کنید


فیلد SEE ALSO حاوی پیوندهایی به کتابچه‌های راهنمای کمتر، groff (قالب‌کننده صفحه دستی)، ساختار است. فایل پیکربندیبرای man، و همچنین دو دستور همراه، whatis و apropos، که به شما کمک می کند کتابچه راهنمای مورد نیاز خود را پیدا کنید. هر دوی آنها بر روی یک پایگاه داده متشکل از فیلدهای NAME تمام صفحات دستی در سیستم کار می کنند. تفاوت بین این دو در این است که whatis فقط در میان نام اشیا جستجو می کند (در ترک کردبخش هایی از فیلدهای NAME)، و مناسب - در سرتاسر پایگاه داده. در نتیجه whatis یک لیست دریافت می کند توضیحات کوتاهاشیاء با نام ها، که شامل کلمه جستجو می شود، در حالی که apropos لیستی دارد که در آن این کلمه وجود دارد ذکر شده.

ممکن است چندین شی در سیستم وجود داشته باشد متفرقهنوع، اما با همان نام. اغلب، به عنوان مثال، نام ها منطبق هستند تماس های سیستمی(کارکرد هسته ها) و ابزارهایی که به شما امکان می دهند از این توابع از خط فرمان استفاده کنید. هنگام مراجعه به دفترچه راهنما برای یک شی سیستم، مرسوم است که شماره بخش را بلافاصله بعد از نام شیء در پرانتز قرار دهید، که حاوی دفترچه راهنمای این شی است: man(1), less(1), passwd(5) . با این فرمت می توان به راحتی تشخیص داد که منظور از کتابچه راهنمای کاربر چیست.

سیستم دستی لینوکس دارای 9 بخش است که هر بخش شامل صفحات دستی برای اشیا است. نوع خاصی. هر بخش شامل یک راهنما به نام "مقدمه" است که شامل نمای کلیو مثال ها نشان می دهد که به چه نوع اشیایی مربوط می شود این بخش. با دستور whatis intro می توان لیستی از بخش ها را با عنوان به دست آورد.

به‌طور پیش‌فرض، انسان به تمام بخش‌ها نگاه می‌کند و نشان می‌دهد اولین بار پیدا شدراهنمایی با نام داده شده. برای مشاهده دفترچه راهنمای یک شی از یک بخش خاص، باید شماره بخش را به عنوان اولین پارامتر فرمان man مشخص کنید، به عنوان مثال، man 8 passwd.

منبع دیگر اطلاعات در مورد لینوکس و برنامه های سازنده آن، زیرسیستم اطلاعات است. صفحه کتابچه راهنمای کاربر، علیرغم فراوانی پیوندها از انواع مختلف، یک متن "خطی" باقی می ماند که فقط ساختار منطقی دارد. سند اطلاعات یک ابرمتن واقعی است که در آن تعداد زیادی وجود دارد صفحات کوچکدر یک درخت ادغام شد هر بخش از سند اطلاعات همیشه فهرستی از محتویات دارد که از آن می توانید مستقیماً به بخش فرعی مورد نظر بروید و از آنجا همیشه می توانید به عقب برگردید. علاوه بر این، یک سند اطلاعات نیز می تواند خوانده شود مداوممتن، بنابراین هر زیربخش دارای پیوندهایی به زیربخش های قبلی و بعدی است. می توان حدس زد که راهنمای دقیقنحوه پیمایش بین صفحات در اطلاعات با دستور info info قابل دسترسی است. دستور info که بدون پارامتر وارد شده است، از کاربر فهرستی از تمام اسناد اطلاعاتی نصب شده در سیستم را می خواهد.

اگر یک شیء سیستم هیچ سندی در قالب مرد یا اطلاعات نداشته باشد، خوب نیست. در این صورت می توان امیدوار بود که داشته باشد اسناد پشتیبانی، که متأسفانه فرمت استانداردی ندارد، بسیار کمتر به کتابچه های راهنما برای سایر اشیاء در سیستم پیوند می دهد. چنین اسنادی (و همچنین نمونه هایی از نحوه استفاده از شی) معمولاً در پوشه /usr/share/doc/ قرار می گیرند. شی_نام .

اسناد عمدتاً به زبان انگلیسی ساده نوشته شده است. اگر انگلیسی نیست زبان مادریبرای نویسنده مستندات، این کار ساده تر خواهد بود. سنت نوشتن به زبان انگلیسی ناشی از سهم قابل توجه ایالات متحده در توسعه است علوم کامپیوتربه طور کلی و لینوکس به طور خاص. علاوه بر این، انگلیسی در حال تبدیل شدن به زبان ارتباطات بین المللی در همه زمینه ها است، نه تنها در محاسبات. نیاز به نوشتن به زبانی که برای اکثر کاربران کم و بیش قابل درک باشد به دلیل توسعه مداوم لینوکس است. این نیست که صفحه راهنما قابل ترجمه نیست، بلکه باید ترجمه شود هر زمانوقتی شیئی که توصیف می کند تغییر می کند! به عنوان مثال، انتشار نسخه جدیدی از یک محصول نرم افزاری با تغییر در قابلیت ها و ویژگی های عملکرد آن و در نتیجه نسخه جدیدی از مستندات همراه است. سپس ترجمهاین مستندات به یک "هدف متحرک"، یک کار سیزیفی تبدیل می شود.

با این حال، برخی از به روزترین راهنماها هنوز در ترجمه روسی وجود دارند. جدیدترین نسخه های چنین ترجمه هایی به روسی در بسته man-pages-ru جمع آوری شده است - فقط این بسته را نصب کنید و آن دسته از راهنماهایی که ترجمه برای آنها وجود دارد به طور پیش فرض به زبان روسی در man نمایش داده می شود.

متغیرهای محیطی

علاوه بر پارامترهای ارسال شده در خط فرمان، در لینوکس راه دیگری برای تغییر رفتار برنامه وجود دارد - برای انجام این کار، از متغیرهای محیطی. برای توضیح نحوه عملکرد متغیرهای محیطی، به اطلاعاتی در مورد نحوه تعامل فرآیندها در لینوکس نیاز داریم.

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

فرآیندها بازیگران اصلی سیستم هستند. هنگامی که کاربر دستوراتی را در خط فرمان صادر می کند، فرآیندهای جدید برای اجرای این دستورات (ابزارهای خارجی و غیره) توسط یک فرآیند دیگر راه اندازی می شوند - همان مفسر دستوری که با کاربر ارتباط برقرار می کند و دستورات را از او دریافت می کند.

ایجاد یک فرآیند توسط فرآیند دیگر نامیده می شود محصول فرآیندو در دو مرحله رخ می دهد: اول، الف کپی دقیقمنبع، والدینفرآیند (فراخوانی سیستم ()) و سپس کپی فرآیند با یک نسخه جدید جایگزین می شود. کودک(سیستم فراخوانی exec()). اکنون برای ما مهم است که این جایگزینی تمام خواص فرآیند اصلی و به ویژه محیط زیست را حفظ کند.

بیایید به کار مفسر دستور برگردیم: هنگام اجرای یک دستور، ابزار مورد نظر را به عنوان یک پردازش فرزند راه اندازی می کند، منتظر می ماند تا عملیات آن به پایان برسد (با استفاده از یک فراخوانی دیگر سیستم، صبر کنید ()، نتیجه را تجزیه و تحلیل می کند و به کار خود ادامه می دهد. ابزار در حال اجرا دو نوع اطلاعات را از فرآیند والد (پوسته) دریافت می کند: گزینه های خط فرمان(نه به شکلی که کاربر وارد کرده است، بلکه پس از پردازش طبق قوانین مفسر فرمان، در قالب یک لیست متوالی) و محیطیعنی تمام متغیرها و مقادیر آنها که در محیط فرآیند والد تعریف شده است.

می توان از همین ابزار استفاده کرد همانروش، اما در یک محیط اصلاح شده - و نتایج متفاوتی تولید کنید. کاربر می تواند با اختصاص مقداری مقدار به متغیر محیطی در خط فرمان، محیط یک فرآیند در حال اجرا را به صراحت تغییر دهد. جلونام فرمان مفسر فرمان، با دیدن " = " در داخل اولین کلمه خط فرمان، به این نتیجه می رسد که این یک عملیات انتساب است، نه یک نام فرمان، و به یاد می آورد که چگونه محیط دستور زیر را تغییر دهد.

تاریخ $
دوشنبه 16 ژوئن 06:28:30 بعد از ظهر MSK 2008
$ LC_TIME = تاریخ C
دوشنبه 16 ژوئن 18:28:51 MSK 2008

مثال 13. ابزار تاریخ از متغیر محیطی LC_TIME استفاده می کند


متغیر محیطی LC_TIME به شما می گوید که هنگام نمایش تاریخ و زمان از یک زبان خاص استفاده کنید و مقدار "C" با زبان "سیستم استاندارد" (اغلب انگلیسی) مطابقت دارد.

متغیرهایی که پوسته بشتعریف می کند بعد ازاستارت‌آپ‌ها به محیط تعلق ندارند و در نتیجه توسط فرآیندهای کودک به ارث نمی‌رسند. به متغیر بشمحاصره شده بود، باید صادراتدستور صادرات: $ LC_TIME=C
تاریخ $
دوشنبه 16 ژوئن 06:29:17 بعد از ظهر MSK 2008
$ صادرات LC_TIME=C
تاریخ $
دوشنبه 16 ژوئن 18:29:38 MSK 2008

مثال 14. صادرات متغیرهای پوسته به محیط


در طول یک جلسه کاربر، پوسته یک محیط نسبتاً غنی دریافت می کند که تنظیمات خود را به آن اضافه می کند. اکثر متغیرهای از پیش تعریف شده یا توسط خود پوسته یا توسط ابزارهای سیستم استفاده می شوند، بنابراین تغییر آنها باعث می شود که پوسته یا ابزارها کمی متفاوت عمل کنند. مشاهده محیط در بشبا کمک امکان پذیر است دستورات را تنظیم کنید.

مقدار هر متغیر در bash را می توان با نام دسترسی داشت: به جای ساخت $ متغیر_نامپوسته جایگزین مقدار این متغیر خواهد شد. به عنوان مثال، برای مشاهده مقدار یک متغیر، کاربر می تواند دستور echo $ را وارد کند متغیر_نام .

پژواک $PATH
/home/methody/bin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/usr/games

مثال 15. نمایش مقدار یک متغیر


متغیر محیطی PATH کاملاً قابل توجه است. این شامل فهرستی از دایرکتوری ها است که با دو نقطه از هم جدا شده اند. اگر دستور روی خط فرمان یک دستور پوسته بومی (مانند cd) نباشد و به صورت نمایش داده نشود مسیربه یک فایل اجرایی (مانند /bin/ls یا ./script)، سپس پوسته این دستور را در میان نام فایل‌های اجرایی در همه فهرست‌های PATH و فقط در آنها جستجو می‌کند. به همین دلیل، اگر فایل های اجرایی در دایرکتوری فعلی باشند و دایرکتوری فعلی در PATH نباشد، نمی توانند به سادگی با نام اجرا شوند. در چنین مواقعی می توانید از کوتاه ترین مسیر ممکن یعنی “ ./ ” استفاده کنید (مثلاً فراخوانی اسکریپت ./script).

متغیرهای محیطی موثر بر عملکرد ناهمسانآب و برق، بسیار زیاد. به عنوان مثال، متغیرهای خانواده LC_ (فهرست کامل آنها توسط دستور محلی ارائه می شود) که زبانی را که پیام های تشخیصی در آن نمایش داده می شود، استانداردهای قالب تاریخ، واحدهای ارز، اعداد، روش های تبدیل رشته و غیره را تعیین می کنند. نیاز به ویرایش فایل دارد، این فایل به برنامه ارسال می شود که مسیر آن در متغیر EDITOR (معمولا /usr/bin/vi) ذخیره می شود، و اگر نیاز به باز کردن یک فایل html داشته باشید، بسیاری از ابزارهای کمکی برنامه مشخص شده را فراخوانی می کنند. در متغیر BROWSER برای این کار. در نهایت، برخی از متغیرها مانند UID، USER، یا PWD به سادگی حاوی اطلاعات مفیدی هستند که می توانند به روش های دیگر بازیابی شوند.

مجموعه غیر استاندارد گزینه ها: who am i همان کاری را انجام می دهد که who -m .

  • آموزش

چرا و برای چه کسی مقاله است؟

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

هیچ گونه بازگویی ماناس (اسناد) وجود نخواهد داشت و مقاله به هیچ وجه خواندن آنها را لغو یا جایگزین نمی کند. در عوض، من در مورد چیزهای اصلی (فرمان ها، تکنیک ها و اصول) صحبت خواهم کرد که شما باید از همان ابتدای کار در آن متوجه شوید. پوسته یونیکسکارآمد و دلپذیر کار کند.

این مقاله به محیط‌های کامل یونیکس مانند، با پوسته کامل (ترجیحا zsh یا bash) و طیف نسبتاً گسترده‌ای از برنامه‌های استاندارد می‌پردازد.

پوسته چیست

پوسته (شل، با نام مستعار "خط فرمان"، با نام مستعار CLI، مستعار "کنسول"، مستعار "ترمینال"، مستعار "پنجره سیاه با حروف سفید") یک رابط متنی برای برقراری ارتباط با سیستم عامل است (خوب، به طور دقیق آن را بیان کنید. برنامه، که چنین رابطی را ارائه می دهد، اما اکنون این تفاوت قابل توجه نیست).

به طور کلی، کار از طریق پوسته به این صورت است: کاربر (یعنی شما) دستوری را از صفحه کلید وارد می کند، Enter را فشار می دهد، سیستم دستور را اجرا می کند، نتیجه اجرا را روی صفحه می نویسد و دوباره منتظر دستور بعدی می ماند. وارد شود.

نمای معمولیپوسته:

پوسته راه اصلی برای تعامل با تمام سیستم های سرور مشابه یونیکس است.

سیستم های خط فرمان کجا یافت می شوند؟

جایی که یک پوسته یونیکس می تواند منتظر شما باشد، گزینه های محبوب:
  • macOS (bash)؛
  • دسترسی از راه دور به سرور برای کار یا برای یک پروژه وب شخصی؛
  • سرور فایل خانگی با دسترسی از راه دور.
  • اوبونتو، PC-BSD در لپ تاپ/رومیزی - سیستم های یونیکس مانندامروزه نصب و استفاده آسان است.

حل چه کارهایی با پوسته معقول است؟

وظایف طبیعی که پوسته برای آنها مناسب، مفید و ضروری است:
  • کار تعاملی در ترمینال:
    • کامپایل، اجرای کارها از طریق make;
    • مقایسه فایل های متنی؛
    • تجزیه و تحلیل سریع داده هاک (تعداد IPهای منحصر به فرد در گزارش، توزیع رکوردها بر حسب ساعت/دقیقه و غیره)؛
    • اقدامات انبوه یکباره (کشتن بسیاری از فرآیندها؛ اگر با یک سیستم کنترل نسخه کار می کنید، دسته ای از فایل ها را معکوس یا حل کنید).
    • تشخیص آنچه در سیستم اتفاق می افتد (سمافورها، قفل ها، فرآیندها، توصیفگرها، فضای دیسک و غیره)؛
  • اسکریپت نویسی:
    • اسکریپت‌هایی را تنظیم کنید که نمی‌توانید برای اجرای آن‌ها به مفسرهای دیگر اعتماد کنید - نه برای مبتدیان.
    • توابع برای سفارشی کردن پوسته تعاملی (تأثیر بر درخواست، تغییر دایرکتوری، تنظیم متغیرهای محیط) - همچنین برای مبتدیان کاملاً مناسب نیست.
    • اسکریپت های یکبار مصرف مانند رمزگذاری فایل های انبوه.
    • فایل های ایجاد شده

کاملاً اولین قدم ها

شروع به کار: ورود و خروج

مطمئن شوید که دقیقاً می دانید پوسته را چگونه شروع کنید و چگونه از آن خارج شوید.

اگر در دستگاهی هستید که اوبونتو را نصب کرده است، باید برنامه ترمینال را راه اندازی کنید. در پایان کار می توانید به سادگی پنجره را ببندید.

در MacOS، ترمینال را نیز راه اندازی کنید.

برای دسترسی به یک سرور راه دور، از ssh (اگر MacOS، Ubuntu یا سیستم یونیکس دیگری به صورت محلی دارید) یا putty (اگر ویندوز دارید) استفاده کنید.

من کی هستم، کجا هستم؟

دستورات زیر را اجرا کنید:
  • نام میزبان - نام ماشین (سرور) که در حال حاضر در آن هستید را نشان می دهد.
  • Whoami - ورود شما (نام شما در سیستم) را نمایش می دهد.
  • tree -d / |less - تصویر شبه نگاری درخت دایرکتوری روی ماشین. خروج از اسکرول - q ;
  • pwd - فهرستی را که در حال حاضر در آن هستید نمایش می دهد. در خط فرمان شما نمی توانید "درست مثل آن" باشید، شما لزوما در یک دایرکتوری هستید (= دایرکتوری فعلی، دایرکتوری کار). احتمالاً دایرکتوری فعلی کار در اعلان شما نمایش داده می شود.
  • ls - لیست فایل های موجود در دایرکتوری فعلی. ls /home - لیستی از فایل ها در دایرکتوری مشخص شده.

تاریخچه فرمان (تاریخچه)

یک ویژگی مهم یک خط فرمان کامل، تاریخچه دستورات است.

چند دستور را اجرا کنید: hostname، ls، pwd، whoami. حالا کلید up را فشار دهید. دستور قبلی در خط ورودی ظاهر شد. از کلیدهای بالا و پایین می توان برای حرکت به جلو و عقب در طول تاریخ استفاده کرد. وقتی به نام میزبان بروید، Enter را فشار دهید - دستور دوباره اجرا خواهد شد.

دستورات تاریخ را می توان نه تنها دوباره اجرا کرد، بلکه ویرایش کرد. در تاریخچه به دستور ls بروید، کلید -l را به آن اضافه کنید (معلوم شد ls -l، یک فاصله قبل از منهای وجود دارد، اما نه بعد از آن). Enter را فشار دهید - دستور اصلاح شده اجرا می شود.

پیمایش در تاریخ، ویرایش و اجرای مجدد دستورات معمولی ترین اقدامات هنگام کار در خط فرمان هستند، به آن عادت کنید.

کپی پیست

خط فرمان بسیار متن محور است: دستورات متن هستند، داده های ورودی برای اکثر برنامه های استاندارد متن است، نتیجه کار اغلب متن است.

نکته مهم در مورد متن این است که می توان آن را کپی و پیست کرد و این برای خط فرمان نیز صادق است.

تاریخ اجرا +"%y-%m-%d، %A" را امتحان کنید
آیا آن را کاملاً دستی وارد کرده اید یا از مقاله کپی کرده اید؟ مطمئن شوید که می توانید آن را کپی کنید، آن را در ترمینال پیست کرده و اجرا کنید.

بعد از اینکه نحوه استفاده از man را یاد گرفتید، مطمئن شوید که می‌توانید دستورات مثال را از راهنما کپی و اجرا کنید. برای بررسی، به راهنمای برنامه تاریخ در بخش EXAMPLES نگاه کنید، اولین مثال ارائه شده را کپی کرده و اجرا کنید (در صورت لزوم. : علامت دلار بخشی از دستور نیست، این یک تصویر شرطی از اعلان ورودی است).

نحوه دقیق کپی کردن متن از ترمینال و چسباندن آن به ترمینال به سیستم شما و تنظیمات آن بستگی دارد، بنابراین، متأسفانه، ارائه یک دستورالعمل جهانی کار نخواهد کرد. در اوبونتو این را امتحان کنید: کپی فقط انتخاب ماوس است، چسباندن دکمه وسط ماوس است. اگر کار نمی کند، یا اگر سیستم دیگری دارید - به اینترنت نگاه کنید یا از دوستان با تجربه تر بپرسید.

کلیدها و گزینه ها

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

[ایمیل محافظت شده]: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf
اگر سوئیچ -l را اضافه کنید، اطلاعات دقیق برای هر فایل نمایش داده می شود:

[ایمیل محافظت شده]: ~/shell-survival-quide> ls -l مجموع 332 -rw-rw-r-- 1 آکیرا 198 فوریه 13 11:48 Makefile -rw-rw-r-- 1 آکیرا آکیرا 15107 14 فوریه 22:26 shell -first-steps.md -rw-rw-r-- 1 akira akira 146226 فوریه 13 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 فوریه 13 11:45 shell-survival -quide.md -rw-rw-r-- 1 akira akira 146203 13 فوریه 11:35 shell-survival-quide.pdf
این یک وضعیت بسیار معمولی است: اگر اصلاح کننده های ویژه (سوئیچ ها، گزینه ها، پارامترها) به فراخوانی فرمان اضافه شوند، رفتار فرمان تغییر می کند. مقایسه کنید: tree / and tree -d / , hostname و hostname -f .

علاوه بر این، دستورات می توانند نام فایل ها، دایرکتوری ها یا فقط رشته های متنی را به عنوان پارامتر بگیرند. تلاش كردن:

ls -ld /home ls -l /home grep root /etc/passwd

مرد

man - راهنمایی در مورد دستورات و برنامه های موجود در دستگاه شما و همچنین تماس های سیستمی و کتابخانه استاندارد C.

سعی کنید: من گرپ، من آتوی، من چدیر، مرد من.

اسکرول به جلو و عقب با دکمه های "بالا"، "پایین"، "PageUp"، "PageDown" انجام می شود و خروج از نمای راهنما با دکمه q انجام می شود. جستجوی متن خاص در مقاله راهنما: / (اسلش جلو) را فشار دهید، متن جستجو را تایپ کنید، Enter را فشار دهید. حرکت به رخدادهای بعدی - کلید n.

همه مقالات راهنما به دسته‌هایی تقسیم می‌شوند. مهمترین:

  • 1 - برنامه های اجراییو دستورات پوسته (wc، ls، pwd و غیره)؛
  • 2 - تماس های سیستمی (fork، dup2 و غیره)
  • 3 - توابع کتابخانه (printf، scanf، cos، exec).
لازم است مشخص شود که در موارد تصادفی نام، کمک از کدام دسته باید نشان داده شود. برای مثال، man 3 printf یک تابع از کتابخانه استاندارد C را توصیف می کند، و man 1 printf یک برنامه کنسولی به همین نام را توصیف می کند.

با دستور man -k می‌توانید فهرستی از تمام مقالات کمکی موجود در دستگاه را مشاهده کنید. (نقطه نیز بخشی از تیم است).

کمتر

هنگامی که در یک پنجره ترمینال کوچک قرار دارید، باید یک بسیار را مشاهده کنید متن طولانی(محتوای یک فایل، یک مرد طولانی و غیره)، از برنامه های ویژه "پیجر" (از کلمه صفحه / صفحه، یعنی صفحه بندی) استفاده کنید. محبوب‌ترین اسکرول کمتر است، و این چیزی است که هنگام خواندن mans، اسکرول را برای شما فراهم می‌کند.

سعی کنید و رفتار را مقایسه کنید:

cat /etc/bash.bashrc cat /etc/bash.bashrc |کمتر

می توانید فایل را فوراً در پارامترهای زیر به پیمایش منتقل کنید:

کمتر /etc/bash.bashrc

به بالا و پایین بروید - دکمه های "بالا"، "پایین"، "PageUp"، "PageDown"، خروج - دکمه q. جستجوی متن خاص: / (اسلش جلو) را فشار دهید، متن جستجو را وارد کنید، Enter را فشار دهید. حرکت به رخدادهای بعدی - کلید n. (آیا دستورات مربوط به انسان را می شناسید؟ جای تعجب نیست که کمتر برای نمایش کمک نیز استفاده می شود.)

حقوق

مجموعه ای از "حقوق" با هر فایل یا دایرکتوری مرتبط است: حق خواندن فایل، حق نوشتن روی فایل، حق اجرای فایل. همه کاربران به سه دسته تقسیم می شوند: مالک فایل، گروه مالک فایل، همه کاربران دیگر.

می توانید مجوزهای فایل را با ls -l مشاهده کنید. مثلا:

> ls -l Makefile -rw-r--r-- 1 دانش آموزان akira 198 فوریه 13 11:48 Makefile
این خروجی به این معنی است که مالک (akira) می‌تواند فایل را بخواند و بنویسد، گروه (دانش‌آموزان) فقط می‌توانند بخوانند، و همه افراد دیگر در کاربر نیز می‌توانند فقط بخوانند.

اگر در حین کار پیغام رد مجوز دریافت کردید، به این معنی است که مجوزهای کافی برای شی مورد نظر برای کار با آن ندارید.

در man chmod بیشتر بخوانید.

STDIN، STDOUT، خطوط لوله (لوله)

هر برنامه در حال اجرا 3 مرتبط دارد نخ استانداردداده: جریان داده ورودی STDIN، جریان داده خروجی STDOUT، جریان خروجی خطا STDERR.

برنامه wc را اجرا کنید، Good day today را تایپ کنید، Enter را فشار دهید، Good day را تایپ کنید، Enter را فشار دهید، Ctrl+d را فشار دهید. برنامه wc آماری از تعداد حروف، کلمات و خطوط در متن و خروج شما نشان می دهد:

> wc روز خوب امروز روز خوب 2 5 24
در این حالت شما به برنامه STDIN یک متن دو خطی دادید و سه عدد را در STDOUT دریافت کردید.

اکنون دستور head -n3 /etc/passwd را اجرا کنید، باید چیزی شبیه به این باشد:

> head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x: 2:2:bin:/bin:/usr/sbin/nologin
در این مورد، برنامه head چیزی از STDIN نخواند اما سه خط به STDOUT نوشت.

به این شکل فکر کنید: یک برنامه لوله ای است که STDIN در آن جریان دارد و STDOUT خارج می شود.

مهمترین ویژگی خط فرمان یونیکس این است که برنامه های "لوله" را می توان به هم متصل کرد: خروجی (STDOUT) یک برنامه را می توان به عنوان ورودی (STDIN) به برنامه دیگر ارسال کرد.

چنین ساخت و ساز از برنامه های متصل به انگلیسی لوله (لوله)، در روسی - نوار نقاله یا لوله نامیده می شود.

ترکیب برنامه ها در خط لوله با علامت | انجام می شود (نوار عمودی)

دستور head -n3 /etc/passwd |wc را اجرا کنید، چیزی شبیه به این دریافت خواهید کرد:

> head -n3 /etc/passwd |wc 3 3 117
اتفاقی که افتاد این بود: برنامه head سه خط متن را به STDOUT خروجی داد، که بلافاصله وارد ورودی برنامه wc شد، که به نوبه خود تعداد کاراکترها، کلمات و خطوط متن حاصل را شمارش کرد.

می توانید هر تعداد برنامه را که دوست دارید در یک خط لوله ترکیب کنید. به عنوان مثال، می توانید یک برنامه wc دیگر را به خط لوله قبلی اضافه کنید، که تعداد کلمات و حروف در خروجی اولین wc را شمارش می کند:

> head -n3 /etc/passwd |wc |wc 1 3 24

کامپایل خطوط لوله (لوله ها) در هنگام کار بر روی خط فرمان امری بسیار متداول است. برای مثالی از نحوه انجام این کار در عمل، به بخش Compiling a One-Line Pipeline مراجعه کنید.

تغییر مسیر I/O

خروجی (STDOUT) یک برنامه نه تنها می تواند به یک برنامه دیگر منتقل شود، بلکه به سادگی در یک فایل نوشته می شود. این تغییر جهت با > (بیشتر از علامت) انجام می شود:

تاریخ > /tmp/today.txt
در نتیجه اجرای این دستور، فایل /tmp/today.txt روی دیسک ظاهر می شود. محتویات آن را با cat /tmp/today.txt مشاهده کنید

اگر فایلی با همین نام قبلا وجود داشته باشد، محتوای قدیمی آن از بین خواهد رفت. اگر فایل وجود نداشت، ایجاد می شود. دایرکتوری که فایل در آن ایجاد می شود باید قبل از اجرای دستور وجود داشته باشد.

اگر نمی خواهید فایل را بازنویسی کنید، اما خروجی را به انتهای آن اضافه کنید، از >> استفاده کنید:

تاریخ >> /tmp/today.txt
آنچه اکنون در فایل نوشته شده را بررسی کنید.

علاوه بر این، می توانید هر فایلی را به جای STDIN به برنامه منتقل کنید. تلاش كردن:

دستشویی

وقتی چیزی مشخص نیست چه باید کرد

اگر با رفتار سیستمی مواجه شدید که نمی‌دانید، یا می‌خواهید به نتیجه خاصی برسید، اما نمی‌دانید چگونه، به شما توصیه می‌کنم به ترتیب زیر عمل کنید (به هر حال، این نه تنها در مورد پوسته‌ها صدق می‌کند):
  • سوال یا کار را تا حد امکان واضح فرموله کنید - هیچ چیز دشوارتر از حل "نمی دانم چیست" نیست.
  • به یاد داشته باشید که اگر قبلاً با مشکل مشابه یا مشابه روبرو شده اید - در این مورد، ارزش آن را دارد که راه حلی را امتحان کنید که آخرین بار کار کرده است.
  • Man-s مناسب را بخوانید (اگر متوجه شده اید که man-ها در مورد شما مناسب هستند) - ممکن است نمونه های مناسبی از استفاده از دستورات، گزینه های ضروری یا پیوندهایی به دستورات دیگر پیدا کنید.
  • در مورد آن فکر کنید: آیا می توان کار را کمی تغییر داد؟ - شاید با کمی تغییر شرایط، مشکلی را دریافت کنید که قبلاً می دانید چگونه آن را حل کنید.
  • سوال تعریف شده خود را در یک موتور جستجو بپرسید - شاید بتوان پاسخ را در Stack Overflow یا سایت های دیگر یافت.
اگر هیچ یک از موارد فوق کمک نکرد - از یک معلم، یک همکار یا دوست با تجربه راهنمایی بخواهید. و از پرسیدن سؤالات «احمقانه» نترسید - ندانستن شرم آور نیست، نپرسیدن شرم آور است.

اگر مشکل دشواری را حل کرده اید (به تنهایی، با استفاده از اینترنت یا افراد دیگر) - راه حل خود را بنویسید تا اگر شما یا رفقایتان دوباره با همان مشکل مواجه شدید. می توانید به صورت ساده ضبط کنید فایل متنی، در Evernote، در شبکه های اجتماعی به اشتراک بگذارید.

روش های کار

کپی و جایگذاری کنید- از man-s، از مقالات در StackOverflow، و غیره. خط فرمان شامل متن است، از آن استفاده کنید: کپی کنید و از نمونه های دستور استفاده کنید، یافته های موفق را برای حافظه یادداشت کنید، آنها را در توییتر و وبلاگ ها منتشر کنید.

دستور قبلی را از تاریخ خارج کنید، دستور دیگری را به خط لوله اضافه کنید، اجرا کنید، تکرار کنید.سانتی متر. همچنین به بخش "تدوین خط لوله یک خط" مراجعه کنید.

دستورات پایه

  • تغییر دایرکتوری: cd ;
  • مشاهده محتویات فایل ها : گربه , کمتر , سر , دم ;
  • دستکاری فایل: cp , mv , rm ;
  • فهرست دایرکتوری: ls , ls -l , ls -lS ;
  • ساختار دایرکتوری: tree , tree -d (شما می توانید یک دایرکتوری را به عنوان پارامتر ارسال کنید).
  • جستجوی فایل: پیدا کردن. -نام ... ؛

تجزیه و تحلیل

  • wc , wc -l ;
  • sort -k - مرتب سازی بر اساس فیلد مشخص شده.
  • مرتب سازی -n - مرتب سازی عددی.
  • تفاوت - مقایسه فایل ها.
  • grep , grep -v , grep -w , grep "\ " , grep -E - جستجوی متن;
  • uniq , uniq -c - رشته های منحصر به فرد;
  • awk - در نوع awk "(print $1)"، برای اینکه تنها قسمت اول هر خط باقی بماند، $1 را می توان به $2، $3، و غیره تغییر داد.

تشخیص سیستم

  • ps axuww - اطلاعاتی در مورد فرآیندها (برنامه های در حال اجرا) در حال اجرا بر روی دستگاه.
  • بالا - نمای تعاملی از منابع فشرده ترین فرآیندها.
  • df - فضای دیسک استفاده شده و آزاد؛
  • du - اندازه کل فایل ها در دایرکتوری (به صورت بازگشتی با زیر شاخه ها)؛
  • strace، ktrace - که سیستم آن را فرآیند در حال ساخت می نامد.
  • lsof - از چه فایل هایی استفاده می کند.
  • netstat -na , netstat -nap - چه پورت ها و سوکت هایی در سیستم باز هستند.

ممکن است برخی از برنامه ها را نداشته باشید، آنها باید علاوه بر نصب شوند. علاوه بر این، برخی از گزینه های این برنامه ها فقط برای کاربران ممتاز در دسترس هستند (ریشه "y").

اجرای عمده و نیمه اتوماتیک

ابتدا از این بخش رد شوید، وقتی به اسکریپت نویسی ساده پوسته رسیدید به این دستورات و ساختارها نیاز خواهید داشت.
  • تست - بررسی شرایط؛
  • در حالی که خواندن - چرخه از طریق خطوط STDIN ;
  • xargs - جایگزینی رشته ها از STDIN به پارامترهای برنامه مشخص شده.
  • seq - تولید دنباله های اعداد طبیعی.
  • () - خروجی چندین دستور را ترکیب کنید.
  • ; - یکی پس از دیگری انجام دهید.
  • && - اگر اولین فرمان با موفقیت کامل شود، اجرا شود.
  • || - در صورت عدم موفقیت دستور اول اجرا شود.
  • tee - خروجی برنامه تکراری به STDOUT و یک فایل روی دیسک.

متفرقه

  • تاریخ - تاریخ فعلی؛
  • curl - سند را در url مشخص شده دانلود می کند و نتیجه را در STDOUT می نویسد.
  • لمس - به روز رسانی تاریخ اصلاح فایل.
  • کشتن - ارسال سیگنال به فرآیند.
  • true - هیچ کاری انجام نمی دهد، true را برمی گرداند، برای سازماندهی حلقه های ابدی مفید است.
  • sudo - یک دستور را به صورت root "a" اجرا کنید.

تدوین خط لوله یک خطی

بیایید به یک مثال از یک کار واقعی نگاه کنیم: ما می خواهیم تمام فرآیندهای task-6-server که از طرف کاربر فعلی اجرا می شوند را از بین ببریم.

مرحله 1.
درک کنید که کدام برنامه تقریباً داده های لازم را تولید می کند، حتی اگر به شکل خالص آن نباشد. برای وظیفه ما، ارزش دریافت لیستی از تمام فرآیندهای موجود در سیستم را دارد: ps axuww. اجرا کن.

گام 2
با چشمان خود به داده های دریافتی نگاه کنید، فیلتری ایجاد کنید که برخی از داده های غیر ضروری را بیرون می اندازد. اغلب این grep یا grep -v است. با استفاده از کلید "Up"، دستور قبلی را از تاریخچه خارج کنید، یک فیلتر اختراع شده را به آن اختصاص دهید و آن را اجرا کنید.

Ps axuww |grep `whoami`
- فقط فرآیندهای کاربر فعلی.

مرحله 3
مرحله 2 را تکرار کنید تا به داده های تمیزی که می خواهید برسید.

"
- تمام فرآیندهای با نام مورد نظر (به علاوه، شاید، موارد اضافی مانند vim task-6-server.c و غیره)،

Ps axuww |grep `whoami` | grep "\ " | grep -v vim ps axuww |grep `whoami` | grep "\ " | grep -v vim | grep -v کمتر
- فقط پردازش هایی با نام دلخواه

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v less |awk "(print $2)"

بخش‌هایی از فرآیندهای مورد نیاز، مرحله 3 تکمیل شد

مرحله 4
از یک کنترل کننده نهایی مناسب استفاده کنید. با استفاده از کلید "Up" دستور قبلی را از تاریخچه خارج می کنیم و پردازشی را اضافه می کنیم که حل مشکل را کامل می کند:

  • |wc -l برای شمارش تعداد فرآیندها.
  • >pids برای نوشتن pids در یک فایل.
  • |xargs فرآیندهای کشتن -9 را می کشد.

وظایف برای آموزش

آیا می خواهید مهارت های جدیدی را تمرین کنید؟ کارهای زیر را امتحان کنید:
  • لیستی از تمام فایل ها و دایرکتوری ها را در فهرست اصلی خود دریافت کنید.
  • دریافت لیستی از تمام مقالات مرد از دسته 2 (تماس های سیستمی)؛
  • شمارش کنید که کلمه grep چند بار در صفحه grep man ظاهر می شود.
  • شمارش تعداد فرآیندهایی که در حال حاضر به عنوان ریشه در حال اجرا هستند.
  • پیدا کنید کدام دستور در حداکثر تعداد دسته های کمکی (man) وجود دارد.
  • شمارش کنید که کلمه var چند بار در صفحه ya.ru آمده است.
نکته: به find , grep -o , awk "(print $1) "، عبارات منظم در grep، curl -s نیاز دارید.

بعد چه چیزی را مطالعه کنیم؟

اگر شروع به دوست داشتن خط فرمان کردید، متوقف نشوید، به بهبود مهارت های خود ادامه دهید.

در اینجا چند برنامه وجود دارد که اگر در خط فرمان زندگی می کنید، قطعاً مفید خواهند بود:

  • با گزینه های پیچیده پیدا کنید
  • مناسب
  • پیدا کردن
  • شبکه راه دور
  • نت کت
  • tcpdump
  • rsync
  • صفحه نمایش
  • zgrep، zless
  • visudo
  • crontab -e
  • ارسال ایمیل
همچنین ارزش یادگیری یک زبان برنامه نویسی مانند perl یا python یا حتی هر دو را در طول زمان دارد.

چه کسی به آن نیاز دارد؟

آیا ارزش آن را دارد که امروز خط فرمان و اسکریپت نویسی پوسته را یاد بگیریم؟ قطعا ارزشش را دارد. من فقط چند نمونه از الزامات فیس بوک را برای نامزدهایی که می خواهند در FB شغلی پیدا کنند، بیان می کنم.

=====================================================

کار آزمایشگاهی شماره 1 (زمان تکمیل - 3 ساعت)

موضوع: "مقدمه ای برپوسته

1. مقدمه ای بر پوسته

شل یک مفسر دستور (پردازنده فرمان) است که به عنوان رابط بین کاربر و هسته یونیکس عمل می کند. سولاریس سه پوسته اصلی را ارائه می دهد:

    پوسته پیش فرض Bourne /sbin/sh است

    پوسته C -- /bin/csh

    پردازنده فرمان Korn--./bin/ksh

علاوه بر موارد ذکر شده، Solaris پوسته های اضافی نیز ارائه می دهد:

    پوسته J -- /sbin/jsh

    محدود Korn l -- / usr/ bin/rsh

    T-shell -- /usr/bin/tcsh

    گنو بورن دوباره -- /usr/bin/bash

    پوسته Z - usr/bin/zsh

انتخاب پوسته یک موضوع ترجیح شخصی است.

2. دستورات را اجرا کنید

هر دستوری در یونیکس شامل نام برنامه ای که قرار است راه اندازی شود (فرمان)، گزینه ها (سوئیچ ها) و آرگومان هایی است که به برنامه ارسال می شود. جداکننده های خط فرمان فضاها یا تب ها هستند.

مثال

$ /bin/ping –t 10 192.168.2.13

بحث و جدل

پوسته اعلان

اگر مسیر فایل اجرایی هنگام شروع برنامه مشخص نشده باشد، سیستم عامل به طور متوالی از طریق دایرکتوری های مشخص شده در متغیر PATH نگاه می کند. اگر برنامه ای با همین نام در فهرست مرور شده وجود داشته باشد، برای اجرا راه اندازی می شود. دایرکتوری کاری فعلی هنگام جستجوی برنامه ها جستجو نمی شود مگر اینکه در متغیر PATH تنظیم شده باشد.

! به دلایل امنیتی، به یک مدیر توصیه می شود که دایرکتوری فعلی کاربر و دایرکتوری های خانگی (شخصی) کاربر را به متغیر PATH اضافه نکند.

مثال ها

راه اندازی برنامه با مسیر کامل

$ / usr/ محلی/ صندوقچه/ من_ برنامه

راه اندازی یک برنامه از دایرکتوری بالاتر (والد).

$ ../ محلی/ صندوقچه/ من_ برنامه

راه اندازی برنامه از دایرکتوری فعلی

$ ./ من_ برنامه

3. شخصیت های خاص در پوسته

برخی از شخصیت ها در پوسته معانی خاصی دارند.

3.1. الگوهای تولید نام فایل

? (علامت سوال)با هر کاراکتری به جز اولین نقطه مطابقت دارد.

(پرانتز مربع)گروهی از نمادها را تعریف کنید (یک نماد از گروه انتخاب می شود).

- (علامت منهای")محدوده کاراکترهای معتبر را تعریف می کند.

! (علامت تعجب)گروهی از شخصیت های زیر را رد می کند.

* (نماد ستاره)با هر تعداد کاراکتر به جز نقطه اول مطابقت دارد.

3.2. نمادهای تغییر مسیر I/O

< - تغییر مسیر ورودی؛

>, >> - تغییر مسیر خروجی؛

2>, 2>> - تغییر مسیر پیام های خطا؛

| - نوار نقاله

3.3. نمادهای عام

$variable_nameq - جایگزینی متغیر؛

$(فرمان)یا "فرمان" -تعویض فرمان؛

~ - جایگزینی تایلد.

4. جستجو کنید

برای جستجوی سریع فایل‌ها و دایرکتوری‌ها، از دستور Whereis و برای عمیق‌تر از دستور find (جستجوی فایل‌هایی که نیازهای مشخص شده را دارند؛) استفاده می‌شود.

5. ویرایشگر متن vi

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

ویرایشگر vi 3 حالت کار دارد (شکل را ببینید).

ورود به ویرایشگر vi

خروج از vi

علامت "~" (tilde) در موقعیت اول خطوط خالی (غیر موجود) فایل را مشخص می کند.

حالت اصلی حالت فرمان است که در آن دستورات با فشردن دنباله خاصی از کلیدها وارد می شوند (به هیچ وجه روی صفحه نمایش داده نمی شوند).

حرکت در متن در حالت فرمان با استفاده از فلش ها و کلیدها انجام می شود (ترک کرد) (پایین)، (بالا)، (به سمت راست).

برخی از دستورات vi در جدول ذکر شده است.

خط فعلی را حذف کنید

خط فعلی را در کلیپ بورد کپی کنید

حرکت مکان نما

قرار دادن کاراکترهای مشخص شده با مکان نما در بافر

یک خط جدید در پایین وارد کنید

یک خط جدید در بالا وارد کنید

بعد از مکان نما اضافه کنید

بعد از خط فعلی اضافه کنید

چسباندن قبل از مکان نما

درج قبل از خط فعلی

جایگزینی یک کاراکتر با یک کاراکتر وارد شده از صفحه کلید

چسباندن متن از کلیپ بورد

. (نقطه)

آخرین دستور اجرا شده را دوباره انجام دهید

لغو آخرین فرمان

تمام تغییرات در خط فعلی را لغو کنید

کاراکتر بالای مکان نما را حذف کنید

در حالت ورودی، تمام کاراکترهای تایپ شده روی صفحه کلید در متن درج می شوند.

در حالت آخرین خط، دستوری که تایپ می کنید در آخرین خط صفحه نمایش داده می شود.

6. کمک کنید

یونیکس دارای یک کتابچه راهنمای الکترونیکی است که حاوی توضیحاتی در مورد هدف دستورات، نحو آنها، نمونه هایی از استفاده و غیره است. این کتابچه راهنمای کاربر با دستور man فراخوانی می شود:

7. دستورات اصلی پوسته

که- نمایش اطلاعات در مورد کاربران فعال

اکو- خروجی پیام ها به ترمینال؛

بنر- خروجی پیام ها به ترمینال با حروف بزرگ؛

مرد- تماس با سیستم کمک آنلاین؛

تاریخ - خروجی تاریخ جاری؛

نوشتن- انتقال پیام ها به ترمینال کاربر دیگر؛

پیام– اجازه/ممنوعیت نمایش پیام از سایر کاربران؛

پست الکترونیکی- ارسال/دریافت نامه

اخبار- آشنایی با اخبار سامانه؛

pwd- نمایش نام مسیر مطلق دایرکتوری کاری فعلی؛

سی دی- تغییر دایرکتوری کاری؛

ls- نمایش اطلاعات در مورد محتویات فهرست؛

mkdir- ایجاد یک فهرست؛

rmdir- حذف یک فهرست؛

لمس كردن– به روز رسانی مهر زمانی فایل؛

cp– کپی کردن فایل ها

گربه- ادغام و نمایش محتویات فایل ها.

بیشتر- صفحه بندی محتوای فایل

mv - انتقال یا تغییر نام یک فایل؛

rm- حذف یک فایل؛

نام مستعار- ایجاد نام مستعار؛

tr- تغییر شخصیت؛

خروج- تکمیل جریان پوسته-ولی؛

سه راهی- رهگیری نتایج خط لوله؛

قطع کردن - انتخاب فیلدها از یک رشته؛

grep- جستجو بر اساس الگو؛

pr– خروجی فایل به خروجی استاندارد در فرمت مشخص شده؛

مرتب سازی- مرتب سازی؛

سر– خروجی خطوط اول فایل

دم- خروجی آخرین خطوط فایل.

دستشویی- شمارش تعداد کاراکترها، کلمات و خطوط.

خواندن, اکو - خواندن و نمایش مقادیر متغیر؛

تست- ارزیابی ارزش عبارت؛

expr, اجازه دهید- محاسبه عبارات حسابی؛

8. پوسته-برنامه ها

شل به شما اجازه می دهد تا دنباله ای از دستورات را در یک فایل ذخیره کنید و سپس آن را اجرا کنید. برای اجرای یک فایل با یک برنامه پوسته برای اجرا، باید حق اجرا را به حقوق دسترسی اضافه کنید:

$ chmod +x program_file_name

انشعاب در برنامه های پوسته با استفاده از عملگرها سازماندهی می شود:

اگر-پس-دیگر

عبارات حلقه:

تمرینات

1. کدام یک از دستورات زیر باعث نمایش پیام خوشامدگویی بر روی صفحه می شود؟ چه چیزی نیستند؟ چرا؟

$ پژواک سلام

$ پژواک سلام

$ پژواک سلام، جهان

$ بنر سلام

$ بنر سلام، جهان

2. یک پیام را از چند خط با استفاده از دستورات چاپ کنید اکوو بنر

3. خروجی تاریخ در دو خط: در خط اول - روز، ماه، سال، در خط دوم - زمان فعلی، ارائه خروجی با یک نظر.

4. استفاده از دستور نوشتن، به کنسول پیام دهید. پیام ها را به چندین ترمینال به طور همزمان ارسال کنید.

5. استفاده از دستور پیام، تعیین کنید که آیا پیام ها در ترمینال شما مجاز هستند یا خیر. پیام ها را غیر فعال کنید اگر کسی بخواهد برای شما پیامی ارسال کند، واکنش سیستم چه خواهد بود؟

6. نام خود را نام ببرید HOME-کاتالوگ

7. زیردرخت دایرکتوری ها را با استفاده از دستورات از فهرست /export/home شروع کنید. سی دی، lsو pwd.

8.. در خود ایجاد کنید HOME-دایرکتوری های فرعی فرم:

گل های میوه

انگور گلابی سیب رز قاصدک بنفش

سبز تیره

9. بودن در شما HOME-directory، زیر شاخه های زیر را با استفاده از یک خط فرمان ایجاد کنید:

آ ب پ ت

10. بودن در شما HOME-directory، تمام زیر شاخه های دایرکتوری را حذف کنید آ.

11. بودن در HOMEدایرکتوری، یک فایل ایجاد کنید مکینتاش در کاتالوگ موجود سیبو چندین فایل در دایرکتوری ها تاریکو سبز. وارد کاتالوگ شوید fپایین می آورد. بودن در دایرکتوری fپایین می آورد, همه زیر شاخه ها را کپی کنید fخرابه هاهمراه با فایل هایی که در آنها وجود دارد به دایرکتوری ایجاد شده مخصوص سبد.

12. بودن در کاتالوگ fپایین می آورد، دایرکتوری را حذف کنید fخرابه ها.

13. فایل را بخوانید .مشخصاتبا استفاده از دستورات گربهو بیشتر.

14. ایجاد کنید HOME- فایل متنی دایرکتوری myfileاز چند خط با دستور گربهیک فایل متنی ایجاد کنید مyافایل،با نوشتن همان خطوط در آن. چند تا فایل گرفتی؟ چرا؟

15. محتویات فایل ایجاد شده در وظیفه 2.2 را مشاهده کنید myfile. فایل را کپی کنید myfileبرای تشکیل پرونده مایکپیمحتویات هر دو فایل را مشاهده کنید.

16. فایل را جابجا کنید مایکپیبرای کاتالوگ کردن گل ها.

17. بودن در HOMEدایرکتوری، یک پیوند ایجاد کنید مترyارتباط دادندر هر فایل مایکپیواقع در دایرکتوری گل ها. مشاهده فایل لینک

18. یک خط به فایل اضافه کنید منارتباط دادن. کدام یک از فایل ها منارتباط دادن، منکپی 🀄، منفایل تغییر کرد؟ چرا؟

19. برای تعیین تعداد لینک ها از چه دستوری می توان استفاده کرد؟ تعداد لینک های فایل ها را تعیین کنید منارتباط دادن، منکپی 🀄، منفایل.

فایل را حذف کنید مایکپی. چه اتفاقی برای فایل لینک افتاد؟ تعداد لینک های فایل ها را تعیین کنید منارتباط دادن، منفایل.

20. یک نام مستعار ایجاد کنید کارگردانکه محتویات دایرکتوری فعلی را در قالب توسعه یافته چاپ می کند.

21. از سیستم خارج شوید و دوباره وارد شوید. آیا نام مستعار کار می کند؟ کارگردان? برای اینکه نام مستعار بین جلسات "از بین نرود" چه باید کرد؟

22. یک نام مستعار ایجاد کنید نقطهکه فهرستی از فایل‌ها را در فهرست کار چاپ می‌کند که نام آنها با نقطه شروع می‌شود.

23. استفاده از دستور لمس كردن، فایل هایی را در یک فهرست جدید با نام هایی ایجاد کنید که در همان زمان:

قالب آ* مطابقت 5 فایل;

قالب * آهمسان 4 فایل;

قالب ??.? همسان 3 فایل;

قالب * aa* همسان 2 فایل;

قالب؟؟؟ 1 فایل مطابقت دارد.

24. برای انجام موارد زیر چه دستوری باید وارد شود:

الف) نمایش نام همه فایل ها که با نقطه شروع می شوند.

ب) نمایش نام تمام فایل هایی که به آن ختم می شوند «.txt»;

ج) نام تمام فایل های حاوی کلمه را چاپ کنید "من";

25. همه حروف کوچک را در یک فایل داده شده به حروف بزرگ و در فایل دیگر همه حروف بزرگ را به حروف کوچک تغییر دهید. تمام فضاهای تکراری را از فایل حذف کنید.

26. فایلی به نام ایجاد کنید * . فقط این فایل را حذف کنید هنگام استفاده از کاراکترهای تولید نام فایل مراقب باشید!

27. یک فایل با علامت فاصله در نام آن ایجاد کنید. چگونه چنین فایلی را حذف کنیم؟

28. استفاده از دستور گربهبا اضافه کردن محتوای اصلی به انتهای همان فایل، محتوای فایل را دو برابر کنید. به دایرکتوری بروید گل ها. به فایل اضافه کنید فهرستفهرست محتویات دایرکتوری گل ها.مشاهده محتویات یک فایل

29. سعی کنید با دستور بخوانید گربهفایل موجود نیست واکنش سیستم چیست؟ همین کار را با هدایت پیام های خطا به یک فایل انجام دهید خطای من. چه چیزی را روی صفحه می بینید؟ مشاهده فایل خطای من.

30. یک خط لوله ایجاد کنید تا فقط نام ها و مجوزهای فایل هایی را که در حال حاضر در دایرکتوری کاری شما هستند فهرست کند.

31. خط لوله ساخته شده را طوری تغییر دهید که لیست در یک فایل ذخیره شود فهرستمال تو HOMEدایرکتوری، و فقط تعداد فایل های موجود در لیست نمایش داده شد.

32. نمایش محتویات یک فایل /etc/passwd، بر اساس قسمت نام کاربری مرتب شده است.

33. یک نام مستعار ایجاد کنید وارد شده استبر، که لیستی از اسامی کاربرانی که در حال حاضر وارد سیستم شده اند را به ترتیب حروف الفبا نمایش می دهد.

33. بیرون بیاورید تاریخ فعلیروی صفحه با حروف بزرگ با استفاده از دستورات تاریخو بنر

34. به یک متغیر اختصاص دهید من هستمنام ثبت نام شما یکی دیگر را اجرا کنید پوسته. آیا این متغیر را می بینید؟ برای دیدن آن در تولید شده چه باید کرد پوسته? مقدار یک متغیر را تغییر دهید من هستمدر تولید شده است پوسته. خروج تخم ریزی شد پوسته. به مقدار این متغیر در نسخه اصلی نگاه کنید پوسته. نتیجه را توضیح دهید.

35. بنویسید پوسته-برنامه اطلاعاتکه از کاربر می خواهد نام، آدرس، روز، ماه و سال تولد را وارد کرده و این اطلاعات را به ترتیب معکوس نمایش دهد.

36. بنویسید پوسته- برنامه ای که دعوت نامه ای برای وارد کردن یک عدد نمایش می دهد، عدد وارد شده را در یک متغیر ذخیره می کند Yو یک پیام چاپ کنید "Y بزرگتر از 7 است"اگر ارزش Yبزرگتر از 7 و "Y استنه بزرگتر نسبت به. تا 7” در غیر این صورت.

37. یک برنامه پوسته بنویسید که آمار زیر را نمایش دهد:

الف) نام شما؛

ب) تعداد آرگومان هایی که با آنها راه اندازی شده است.

ج) هر یک از آرگومان های خود و طول آرگومان را به کاراکتر چاپ می کند.

38. بنویسید پوسته-برنامه ای که تعداد آرگومان های خط فرمان را تعیین می کند و اگر تعداد آرگومان ها برابر با سه نباشد، پیغام خطا صادر می کند یا اگر تعداد آنها برابر با سه باشد، خود آرگومان ها را صادر می کند.

39. بنویسید پوسته- برنامه ای که دعوت نامه ای برای وارد کردن یک شناسه کاربر صادر می کند، شناسه را برای مطابقت با موارد استفاده شده در سیستم بررسی می کند و نمایش می دهد. نام و نام خانوادگیHOMEدایرکتوری یا در مورد شناسه نامعتبر، پیام خطا صادر کنید.

40. یک برنامه پوسته بنویسید سلام، پاسخ زیر را به آرگومان های خط فرمان ارائه می دهد:

بحث و جدل "-d"- برنامه دستور را اجرا خواهد کرد تاریخ;

بحث و جدل "-l"- برنامه محتویات دایرکتوری فعلی را نمایش می دهد.

    اگر هیچ آرگومان یا آرگومان نامعتبر در خط فرمان وجود نداشته باشد، برنامه راهنمای گزینه های خود را نمایش می دهد.

41. یک برنامه بنویسید کلمات، که از کاربر می خواهد تا یک کلمه را وارد کند تا زمانی که یک کلمه را وارد کند پایان. تمام کلمات وارد شده را به خاطر بسپارید. بعد از وارد کردن کلمه پایانتمام کلمات وارد شده را روی صفحه نمایش دهید.

42. اعلان سیستم را طوری تغییر دهید که نام مسیر کامل دایرکتوری کاری فعلی را شامل شود .

43. یک برنامه بنویسید ویروس، که یک کپی اجرایی از خود با نام دیگری ایجاد می کند و سپس خود را حذف می کند.

44. یک برنامه بنویسید ویروس2 ، که دایرکتوری فعلی را برای برنامه های زبان دستور جستجو می کند و دستوری برای نمایش کلمه به متن آنها اضافه می کند مبتلا شده!”.

45. یک برنامه بنویسید ویروس3 ، که کد خود را به برنامه های زبان دستوری که پیدا می کند اضافه می کند تا برنامه های دیگر را آلوده کند.

46. ​​یک برنامه بنویسید ویروس4 با تغییر ویروس خود به طوری که در صورت آلوده شدن، کد آلوده کننده از برنامه آلوده کننده حذف شود.

47. یک برنامه بنویسید آنتی ویروس، که تمام برنامه های پوسته آلوده به ویروس شما را پیدا می کند.

48. برنامه توسعه یافته را طوری تغییر دهید که نه تنها برنامه های آلوده را در دایرکتوری مشخص شده پیدا کند، بلکه آنها را "درمان" کند و نسخه آلوده را در یک فایل جدید ذخیره کند که انتهای آن به نام آن است. . vir، و حذف ویژگی execute از چنین فایلی.

49. یک برنامه بنویسید ویروس5 ، که:

الف) فقط در صورتی که کاربر دستور را وارد کرده باشد، برنامه های پوسته موجود در فهرست فعلی و زیرشاخه های آن را با ویروس آلوده می کند. ls;

ب) مانند یک تیم رفتار کنید ls، بدون ارائه چیزی در ترمینال کار خود.

50. برنامه virus6 را بر اساس برنامه ها بنویسید ویروس2 -ویروس5 ، که کد آلوده کننده آن توسط برنامه توسعه یافته توسط شما قابل شناسایی نبود آنتی ویروس، و آلودگی در هر مقدار از متغیر رخ می دهد مسیر.

51. یک برنامه بنویسید سوپر ویروسکه راه اندازی آن فایل های شما را به ویروس توسعه یافته در کار قبلی آلوده می کند و هر بار که وارد سیستم می شوید سعی می شود فایل های رفقای شما آلوده شود. برنامه سوپر ویروس پس از اولین اجرا خود را پاک می کند.

52. یک برنامه بنویسید سوپر آنتی ویروس، که تمامی فایل های دایرکتوری مشخص شده و زیرشاخه های آن را از تمامی ویروس های توسعه یافته شناسایی و کاملاً «درمان» می کند (در صورت مشخص شدن گزینه مربوطه).

پوسته زبان فرمان (در ترجمه - shell, shell) در واقع یک زبان برنامه نویسی سطح بسیار بالایی است. در این زبان کاربر کامپیوتر را کنترل می کند. معمولاً پس از ورود به سیستم، شروع به تعامل با یک پوسته می کنید. نشانه ای که پوسته (پوسته) آماده دریافت دستورات است، درخواست کننده ای است که توسط آن به صفحه نمایش داده می شود. در ساده ترین حالت، این یک دلار ("$") است. Shell یک زبان دستوری ضروری و تنها نیست (اگرچه زبانی است که در POSIX استاندارد شده است - استاندارد سیستم های تلفن همراه). به عنوان مثال، زبان cshell بسیار محبوب است، همچنین kshell، bashell و دیگران وجود دارد. علاوه بر این، هر کاربر می تواند زبان فرمان خود را ایجاد کند. این می تواند به طور همزمان با زبان های دستوری مختلف در یک نمونه از سیستم عامل کار کند. shell یکی از بسیاری از دستورات یونیکس است. یعنی مجموعه دستورات "شل" شامل دستور "sh" است - مفسر "شل" را فراخوانی می کند. اولین "پوسته" به طور خودکار هنگام ورود به سیستم فراخوانی می شود و درخواست کننده را نمایش می دهد. پس از آن، می توانید هر دستوری را برای اجرا فراخوانی کنید، از جمله دوباره خود "شل"، که یک پوسته جدید در داخل پوسته قدیمی برای شما ایجاد می کند. به عنوان مثال، اگر فایل "file_1" را در ویرایشگر آماده کنید:

اکو سلام!

سپس یک فایل متنی معمولی حاوی دستور "echo" خواهد بود که پس از اجرا، هر آنچه در سمت راست آن نوشته شده روی صفحه نمایش داده می شود. می توانید فایل "file_1" را با دستور "chmod 755 file_1" قابل اجرا کنید. اما می توان آن را با فراخوانی صریح دستور "sh" ("پوسته") انجام داد:

Sh file_1

ش< file1

فایل را می توان در نمونه "پوسته" فعلی نیز اجرا کرد. برای این یک دستور خاص وجود دارد "." (نقطه)، یعنی

فایل_1

از آنجایی که یونیکس یک سیستم چند کاربره است، حتی می‌توانید روی یک رایانه شخصی به طور موازی، مثلاً روی 12 صفحه (انتقال از صفحه به صفحه ALT / کلید عملکرد)، با داشتن یک کاربر جدید (یا همان) در هر صفحه با پوسته فرمان او همچنین می توانید تعداد زیادی پنجره را در حالت گرافیکی X-Window باز کنید و هر پنجره می تواند کاربر خاص خود را با پوسته فرمان خود داشته باشد... عنصر اصلی زبان پوسته دستور است.

ساختارهای فرماندهی:

دستورات شل معمولاً فرمت زیر را دارند:

<имя команды> <флаги> <аргумент(ы)>

مثلا:

ls -ls /usr/bin

در جایی که ls نام دستور برای صدور محتویات دایرکتوری است، -ls پرچم ها هستند ("-" نشانه پرچم ها، l یک قالب طولانی، s اندازه فایل ها در بلوک ها است)، /usr/bin. دایرکتوری است که دستور برای آن اجرا می شود.این دستور محتویات پوشه /usr/bin را با فرمت طولانی نمایش می دهد و در عین حال اطلاعات مربوط به اندازه هر فایل را در بلوک ها اضافه می کند.تنوع در ارائه آرگومان ها .تعداد دستوراتی که دارای فرمت های عجیب و غریب هستند شامل دستورات "در حال اجرا" مانند cc - فراخوانی کامپایلر C، tar - کار با آرشیو، dd - کپی کردن یک فایل با تبدیل، یافتن - جستجوی فایل ها و تعدادی دیگر به عنوان یک قاعده ، اولین کلمه پوسته به عنوان یک دستور در نظر گرفته می شود، بنابراین در خط فرمان

کلمه اول توسط پوسته به عنوان یک فرمان (concatenate) رمزگشایی می شود، که فایلی به نام "cat" (کلمه دوم) واقع در فهرست فعلی را نمایش می دهد. تغییر جهت فرمان ورودی استاندارد (ورودی) - "stdin" در سیستم عامل یونیکس از صفحه کلید ترمینال انجام می شود و خروجی استاندارد (خروجی) - "stdout" به صفحه ترمینال هدایت می شود. نیز وجود دارد فایل استانداردپیام های تشخیصی - "stderr" که کمی بعدا مورد بحث قرار خواهد گرفت. دستوری که می تواند روی ورودی و خروجی استاندارد عمل کند FILTER نامیده می شود. کاربر ابزار مناسبی برای هدایت ورودی و خروجی به سایر فایل ها (دستگاه ها) دارد. نمادهای ">" و ">>" نشان دهنده تغییر مسیر خروجی است. ls >file_1 دستور "ls" فایل‌های موجود در فهرست فعلی را فهرست می‌کند و آن را در فایل "file_1" قرار می‌دهد (به جای نمایش آن بر روی صفحه). اگر فایل "file_1" قبلا وجود داشته باشد، توسط فایل جدید بازنویسی می شود.

Pwd >>file_1

دستور pwd نام کاملاً واجد شرایط دایرکتوری فعلی را تشکیل می دهد و آن را در انتهای فایل "file_1" قرار می دهد. اگر فایل خالی نباشد، ">>" به آن اضافه می شود. نمادها "<" и "<<" обозначают перенаправление ввода.

Wc-l

تعداد خطوط فایل file_1 را می شمارد و نمایش می دهد.

ویرایش فایل_2<

فایل "file_2" را با استفاده از ویرایشگر، مستقیماً از ترمینال ایجاد می کند. انتهای ورودی با کاراکتر سمت راست تعیین می شود.<<" (т. е. "!"). То есть ввод будет закончен, когда первым в очередной строке будет "!". Можно сочетать перенаправления. Так

Wc-l file_4

Wc -l >file_4

به همین ترتیب انجام می شود: تعداد خطوط فایل "file_3" شمارش می شود و نتیجه در فایل "file_4" قرار می گیرد. تسهیلاتی که خروجی استاندارد یک دستور را با ورودی استاندارد فرمان دیگر ترکیب می کند، PIPELINE نامیده می شود و با نوار عمودی "|" نشان داده می شود.

Ls | wc -l

لیست فایل های دایرکتوری فعلی به ورودی دستور "wc" ارسال می شود که تعداد خطوط دایرکتوری را نمایش می دهد. یک خط لوله همچنین می تواند بیش از دو دستور را ترکیب کند، زمانی که همه آنها، احتمالاً به جز اولین و آخرین، فیلتر هستند:

Cat file_1 | grep -hresult | مرتب سازی | cat -b > file_2

این خط لوله از فایل "file_1" ("cat") تمام خطوط حاوی کلمه "نتیجه" ("grep") را انتخاب می کند، خطوط حاصل را مرتب می کند ("مرتب سازی") و سپس شماره ("cat -b") و نتیجه را در فایل "file_2" خروجی بگیرید. از آنجایی که دستگاه های یونیکس با فایل های خاصی نمایش داده می شوند، می توان از آنها در تغییر مسیرها استفاده کرد. فایل های ویژه در دایرکتوری "/dev" قرار دارند. به عنوان مثال، "lp" - چاپ؛ "کنسول" - کنسول؛ "ttyi" - i-امین ترمینال؛ "تهی" - فایل ساختگی (خالی) (دستگاه). سپس، برای مثال،

Ls > /dev/lp

محتویات دایرکتوری فعلی و file_1 را چاپ می کند< /dev/null обнулит файл "file_1".

مرتب سازی فایل_1 | tee /dev/lp | دم -20

در این صورت فایل "file_1" مرتب و چاپ می شود و 20 خط آخر نیز روی صفحه نمایش داده می شود. اجازه دهید به خروج از تغییر مسیر برگردیم. فایل های استاندارد شماره گذاری می شوند:

0 - stdin، 1 - stdout 2 - stderr. اگر نمی‌خواهید پیام خطا روی صفحه نمایش داده شود، می‌توانید آن را از روی صفحه به فایلی که مشخص کرده‌اید هدایت کنید (یا با هدایت آن به فایل «دستگاه خالی» - /dev/null، آن را به طور کلی «پرتاب» کنید. به عنوان مثال هنگام اجرای دستور

Cat file_1 file_2

که باید محتویات فایل های "file_1" و "file_2" را به ترتیب روی صفحه نمایش دهد، به عنوان مثال موارد زیر را در اختیار شما قرار می دهد.

111111 222222 cat: f2: چنین فایل یا دایرکتوری وجود ندارد

جایی که 111111 222222 محتویات فایل "file_1" است و فایل "file_2" وجود ندارد، همانطور که توسط فرمان "cat" در فایل تشخیصی استاندارد گزارش شده است، به طور پیش فرض، و همچنین خروجی استاندارد نشان داده شده توسط صفحه نمایش. اگر نمی‌خواهید چنین پیامی روی صفحه نمایش داده شود، می‌توانید آن را به فایلی که مشخص کرده‌اید هدایت کنید:

Cat file_1 file_2 2>f-err

پیام های خطا (همانطور که با تغییر مسیر "2>" نشان داده شده است) به فایل "f-err" ارسال می شود. به هر حال، می توانید با استفاده از ساختار، تمام اطلاعات را به یک فایل "ff" ارسال کنید

Cat file_1 file_2 >>ff 2>ff

شما می توانید نه تنها تعیین کنید که کدام یک از فایل های استاندارد تغییر مسیر دهید، بلکه می توانید به کدام فایل استاندارد تغییر مسیر دهید.

Cat file_1 file_2 2>>ff 1>&2

در اینجا ابتدا "stderr" (در حالت ضمیمه) به فایل "ff" هدایت می شود و سپس خروجی استاندارد به "stderr" هدایت می شود که در حال حاضر فایل "ff" است. یعنی نتیجه مشابه قبلی خواهد بود. ساختار "1>&2" - به این معنی است که علاوه بر تعداد فایل استانداردی که باید به آن تغییر مسیر دهید، باید "&" را در جلو قرار دهید. کل ساختار بدون فاصله نوشته شده است.<- закрывает стандартный ввод. >- خروجی استاندارد را می بندد. فایل های فرمان برای اینکه یک فایل متنی به عنوان دستور استفاده شود، چندین احتمال وجود دارد. اجازه دهید ویرایشگر فایلی به نام "cmd" ایجاد کند که حاوی یک خط از فرم زیر است:

تاریخ؛ pwd; ls

می‌توانید پوسته را به‌عنوان یک فرمان فراخوانی کنید، که با «sh» مشخص می‌شود، و آن را به‌عنوان یک فایل «cmd»، یا به‌عنوان آرگومان یا به‌عنوان ورودی هدایت‌شده، ارسال کنید.

$ sh cmd

$sh

هر یک از این دستورات تاریخ، سپس نام دایرکتوری فعلی و سپس محتویات دایرکتوری را چاپ می کند. یک گزینه جالب تر و راحت تر برای کار با یک فایل دسته ای تبدیل آن به یک فایل اجرایی است. فقط آن را به یک دستور تبدیل کنید که با تغییر کد امنیتی به دست می آید. برای این کار باید اجازه اجرای این فایل را بدهید. مثلا،

Chmod 711cmd

کد امنیتی "rwx__x__x" را ایجاد می کند. سپس یک تماس ساده

منجر به اجرای همان سه دستور می شود. نتیجه یکسان خواهد بود اگر فایل با محتوا

تاریخ؛ pwd; ls

به صورت: date pwd ls نمایش داده می شود زیرا شکست خط نیز یک جداکننده در یک دنباله دستوری است. بنابراین، فایل های اجرایی نه تنها می توانند فایل هایی باشند که در نتیجه کامپایل و اسمبلی به دست می آیند، بلکه فایل هایی هستند که به زبان پوسته نوشته شده اند. آنها در حالت تفسیر با استفاده از مفسر پوسته اجرا می شوند.

اشکال زدایی فایل های دسته ای

SHELL از دو مکانیسم برای اشکال زدایی فایل های دسته ای استفاده می کند. اولین مورد: set -v خطوط فایل دسته ای را هنگام خواندن چاپ می کند. این حالت هنگام جستجوی خطاهای نحوی استفاده می شود. برای استفاده از آن، نیازی به تغییر فایل دسته ای ندارید، به عنوان مثال: sh -v proc... که در آن proc نام فایل دسته ای است. سوئیچ -v را می توان همراه با سوئیچ -n برای جلوگیری از اجرای دستورات زیر استفاده کرد (دستور set -n ترمینال را تا زمانی که پرچم EOF وارد شود مسدود می کند). دستور set -x هنگام اجرا دستورات را با خطوط برنامه در ترمینال چاپ شده و مقادیر متغیر جایگزین متغیرها می‌کند. برای غیرفعال کردن سوئیچ‌های -x و -v، می‌توانید از دستور set استفاده کنید - و برای تنظیم - مقدار مناسب را به متغیر ماکرو اختصاص دهید. محیط پوسته (متغیرها و پارامترها) می توانید فایل های دسته ای را به زبان پوسته بنویسید و با استفاده از دستور "chmod" آنها را قابل اجرا کنید. پس از آن، آنها هیچ تفاوتی با سایر دستورات سیستم عامل یونیکس ندارند.

متغیرهای پوسته

نام متغیر پوسته یک دنباله شروع حروف از حروف، اعداد و زیرخط است. مقدار متغیر پوسته یک رشته کاراکتری است. این واقعیت که تنها دو نوع داده در پوسته وجود دارد: یک رشته کاراکتر و یک فایل متنی، از یک سو، مشارکت کاربران نهایی را که قبلا هرگز برنامه نویسی نکرده اند، آسان می کند و از سوی دیگر، باعث ایجاد برخی موارد می شود. اعتراض درونی در میان بسیاری از برنامه نویسانی که به تنوع بیشتر و انعطاف بیشتر ابزارهای زبانی عادت دارند. با این حال، جالب است که مشاهده کنید که چگونه برنامه نویسان کلاس بالا با تسلط بر "قواعد بازی" پوسته، برنامه ها را چندین برابر سریعتر از C در آن می نویسند، اما جالب است که در برخی موارد این برنامه ها کار می کنند. حتی سریعتر از موارد اجرا شده در C. نام متغیر شبیه مفهوم سنتی یک شناسه است، یعنی. نام می تواند دنباله ای از حروف، اعداد و زیرخط باشد که با یک حرف یا زیرخط شروع می شود. عملگر انتساب "=" می تواند برای تخصیص مقادیر به متغیرها استفاده شود.

Var_1=13 - "13" یک عدد نیست، بلکه یک رشته دو رقمی است. var_2="UNIX OS" - دو گیومه (" ") در اینجا مورد نیاز است زیرا یک فاصله در رشته وجود دارد.

روش های دیگری نیز برای تخصیص مقادیر به متغیرهای پوسته وجود دارد. بنابراین، برای مثال، ورودی

DAT=`تاریخ

باعث می شود دستور "date" ابتدا اجرا شود (کوتاه های عقب نشان می دهد که ابتدا دستور محصور شده باید اجرا شود) و نتیجه اجرای آن به جای چاپ روی خروجی استاندارد، به عنوان مقدار یک متغیر در نظر گرفته می شود. این مورد "DAT". همچنین می‌توانید با استفاده از دستور «خواندن»، مقداری را به یک متغیر اختصاص دهید، که اجازه می‌دهد مقدار متغیر از صفحه نمایش (صفحه‌کلید) در حالت گفتگو دریافت شود. معمولاً دستور «خواندن» در یک فایل دسته‌ای با دستور «echo» همراه است که به شما امکان می‌دهد نوعی پیام را روی صفحه از قبل چاپ کنید. مثلا:

echo -n "یک عدد سه رقمی وارد کنید:" x را بخوانید

هنگام اجرای این قطعه از یک فایل دسته ای، پس از نمایش پیام

یک عدد سه رقمی وارد کنید:

مفسر متوقف می شود و منتظر می ماند تا مقداری از صفحه کلید وارد شود. اگر مثلاً "753" را وارد کنید، این مقدار تبدیل به مقدار متغیر "x" می شود. یک دستور "خواندن" می تواند مقادیر چندین متغیر را به طور همزمان بخواند (تخصیص). اگر تعداد متغیرها در "خواندن" بیشتر از مقدار وارد شده باشد (با فاصله از هم جدا شده اند)، به بقیه یک رشته خالی اختصاص داده می شود. اگر مقادیر ارسال شده بیشتر از متغیرها در دستور "خواندن" باشد، مقادیر اضافی نادیده گرفته می شوند. هنگام دسترسی به یک متغیر پوسته، باید قبل از نام با نماد "$" قرار دهید. بنابراین دستور echo $var_2 echo var_2 روی صفحه نمایش داده می شود

سیستم عامل یونیکس var_2 در حال فرار

بیایید نگاهی دقیق تر به تکنیک های فرار مورد استفاده در پوسته بیندازیم. کاراکترهای فرار عبارتند از گیومه های دوتایی (" ")، نقل قول های تکی (" ") و بک اسلش (\). عمل آنها از مثال ها مشخص است: می توانید چندین تکلیف را در یک خط بنویسید.

X=22 y=33 z=$x A="$x" B="$x" C=\$x D="$x + $y + $z" E="$x + $y + $z "F=$x\ +\ $y\ +\ $z

(تخصیص G=$x+$y به دلیل فاصله ها اجرا نمی شد) سپس

پژواک A = $A B = $B C = $C اکو D = $D E = $E F = $F ارزیابی پژواک eval A = $A ارزیابی پژواک eval B = $B ارزیابی پژواک ارزشی C = $C

روی صفحه نمایش داده می شود

A = 22 B = $x C = $x D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22 ارزیابی شده A = 22 ارزیابی شده B = 22 ارزیابی شده C = 22

بیایید چند مثال بیشتر در رابطه با فرار از شکست خطوط ارائه دهیم. اجازه دهید به متغیر "string" مقدار "array" 2x3 اختصاص داده شود: abc def توجه داشته باشید که برای جلوگیری از اختصاص فاصله های اضافی، خط دوم آرایه از موقعیت اول خط بعدی شروع می شود: string="abc def" سپس وجود دارد. سه روش برای نوشتن متغیر در دستور "echo" وجود دارد. file_1 echo "str_1 str_2" > file_2 cat file_1 file_2 فایل های یکسان پی در پی file_1 و file_2 را ارائه می دهد: str_1 str_2 str_1 str_2 همچنین توجه داشته باشید که اسلش (\) نه تنها از کاراکتری که به دنبال آن است فرار می کند، که به شما امکان می دهد از آن استفاده کنید. نمادهای خاصدرست مانند کاراکترهایی که خودشان را نشان می‌دهند (می‌تواند از خود فرار کند - \\)، اما در یک فایل دسته‌ای، یک بک اسلش به شما امکان می‌دهد خطوط را به یک (فرار از انتهای خط) متصل کنید. به عنوان مثال، مثال خط فرمان که قبلا داده شد:

Cat file_1 | grep -hresult | مرتب سازی | cat -b > file_2

را می توان در یک فایل دسته ای نوشت

Cat file_1 | grep -h \result | مرتب سازی | cat -b > file_2

به هر حال، نماد خط لوله نیز اثر ادامه خط فرمان را ارائه می دهد. در این مورد، ممکن است نتیجه زیباتری به دست آورد، به عنوان مثال:

Cat file_1 | grep -hresult | مرتب سازی | cat -b > file_2

دستکاری متغیرهای پوسته اگرچه متغیرهای پوسته در مورد کلیبه عنوان رشته درک می شوند، یعنی "35" یک عدد نیست، بلکه یک رشته از دو کاراکتر "3" و "5" است، در برخی موارد می توان آنها را به طور متفاوتی، به عنوان مثال، به عنوان اعداد صحیح تفسیر کرد. دستور "expr" امکانات مختلفی دارد. بیایید برخی از آنها را با مثال هایی توضیح دهیم: اجرای یک فایل دسته ای:

X=7 y=2 a=`expr $x + $y` ; echo a=$a a=`expr $a + 1` ; echo a=$a b=`expr $y - $x` ; echo b=$b c=`expr $x "*" $y` ; echo c=$c d=`expr $x / $y` ; echo d=$d e=`expr $x % $y` ; echo e=$e

روی صفحه نمایش داده خواهد شد

A=9 a=10 b=-5 c=14 d=3 e=1

عملیات ضرب ("*") باید فرار شود، زیرا در پوسته این نماد به عنوان یک کاراکتر خاص درک می شود، به این معنی که هر دنباله ای از کاراکترها را می توان جایگزین این مکان کرد. با دستور "expr" نه تنها عملیات حسابی (عدد صحیح) امکان پذیر است، بلکه عملیات رشته ای نیز امکان پذیر است:

A=`expr "cocktail" : "cock"` ; echo $A B=`expr "cocktail" : "tail"` ; echo $B C=`expr "cocktail" : "cook"` ; echo $C D=`expr "cock" : "cocktail"` ; پژواک $D

اعداد روی صفحه نمایش داده می شوند که تعداد کاراکترهای منطبق در رشته ها (از ابتدا) را نشان می دهد. خط دوم نمی تواند طولانی تر از خط اول باشد:

4 0 0 0

صادر کردن متغیرها یونیکس مفهوم فرآیند را دارد. یک فرآیند زمانی رخ می دهد که یک دستور برای اجرا اجرا شود. به عنوان مثال، هنگام تایپ "r" روی صفحه کلید "، فرآیند "p" ایجاد می شود. به نوبه خود، "p" می تواند فرآیندهای دیگر را ایجاد کند. فرض کنید که "p" "p1" و "p2" را فراخوانی می کند، که به طور متوالی فرآیندهای مربوطه را ایجاد می کنند. هر فرآیند دارای محیط خاص خود است - a مجموعه ای از متغیرهای موجود برای آن به عنوان مثال، قبل از اجرای "p" قبلاً یک محیط وجود داشت که در آن برخی از متغیرها قبلاً تعریف شده بودند. اجرای "p" یک محیط جدید ایجاد می کند که در آن "p1" و "p2" ایجاد می شوند. در فرآیندی که در آن اعلان می شوند، محلی هستند، یعنی جایی که مقادیر به آنها اختصاص داده می شود. برای اینکه آنها در دسترس سایر فرآیندهای ایجاد شده باشند، باید به طور صریح ارسال شوند. برای این، از دستور داخلی "export" استفاده می شود. .

مولفه های

پارامترها را می توان به فایل دسته ای منتقل کرد. پوسته از پارامترهای موقعیتی استفاده می کند (به عنوان مثال، ترتیب ظاهر شدن آنها مهم است). در یک فایل دستوری، متغیرهای مربوط به پارامترها (مشابه متغیرهای پوسته) با کاراکتر "$" شروع می شوند و به دنبال آن یکی از ارقام از 0 تا 9 می آید: اجازه دهید "examp-1" با "cock" فراخوانی شود و پارامترهای "دم". این پارامترها با نام های استاندارد «1» و «2» وارد محیط جدید می شوند. متغیر (استاندارد) با نام "0" نام محاسبه فراخوانده شده را نگه می دارد. هنگام دسترسی به پارامترها، علامت دلار "$" قبل از رقم قرار می گیرد (مانند هنگام دسترسی به متغیرها): $0 مربوط به نام فایل دسته ای داده شده است. پارامتر اول $1. $2 پارامتر دوم است و به همین ترتیب. از آنجایی که تعداد متغیرهایی که می توان پارامترها را به آنها منتقل کرد به یک رقم محدود می شود، یعنی. 9 ("0"، همانطور که قبلا ذکر شد معنای خاصی دارد)، سپس برای انتقال بیشترپارامترها، از یک فرمان خاص "shift" استفاده می شود. دستور "set" رویکردی عجیب به پارامترها می دهد. به عنوان مثال، قطعه

b را با اکو اول=$1 ثانیه=$2 سوم=3$ تنظیم کنید

روی صفحه نمایش داده خواهد شد

اول=آ دوم=ب سوم=ج

آن ها دستور "set" مقادیر پارامترها را تنظیم می کند. اتفاقاً این بسیار راحت است. به عنوان مثال، دستور "date" تاریخ فعلی را نشان می دهد، بگویید "Mon May 01 12:15:10 2000"، شامل پنج کلمه، سپس

تنظیم «تاریخ» echo $1 $3 $5

روی صفحه نمایش داده خواهد شد

دوشنبه 01 2000

دستور "set" همچنین به شما اجازه می دهد تا اجرای برنامه را کنترل کنید، به عنوان مثال: set -v خطوطی را که توسط پوسته به ترمینال قابل خواندن هستند را خروجی می دهد. set +v حالت قبلی را لغو می کند. set -x دستورات را قبل از اجرا در ترمینال چاپ می کند. set +x حالت قبلی را لغو می کند. دستور "set" بدون پارامتر وضعیت محیط نرم افزار را در ترمینال چاپ می کند.

جایگزینی مترجم پوسته

قبل از تفسیر و اجرای مستقیم دستورات موجود در فایل های دسته ای، پوسته اجرا می کند انواع مختلفجایگزینی: 1. جایگزینی نتایج. تمام دستورات محصور شده در بک نقل قول اجرا شده و نتیجه در جای خود جایگزین می شود. 2. جایگزینی مقادیر پارامترها و متغیرها. یعنی کلماتی که با "$" شروع می شوند با مقادیر متناظر متغیرها و پارامترها جایگزین می شوند. 3. تفسیر شکاف ها. فضاهای فرار نادیده گرفته می شوند. 4. نسل نام فایل. کلمات برای وجود کاراکترهای خاص ("*"، "?"، "") در آنها بررسی می شوند و نسل های مربوطه انجام می شود. محیط نرم افزار هر فرآیند دارای محیطی است که در آن اجرا می شود. شل از تعدادی متغیر محیطی استفاده می کند. اگر دستور "set" را بدون پارامتر تایپ کنید، صفحه نمایش اطلاعاتی در مورد تعدادی از متغیرهای استاندارد ایجاد شده در هنگام ورود به سیستم (و به همه فرآیندهای جدید شما "از طریق وراثت" منتقل می شود) و همچنین متغیرهایی که توسط فرآیندهای شما ایجاد و صادر شده است را نشان می دهد. . نوع خاص و محتوای اطلاعات ارائه شده تا حد زیادی به این بستگی دارد نسخه یونیکساستفاده شده و نحوه نصب سیستم

نتیجه اجرای دستور set بدون پارامتر (کامل نیست):

HOME=/root PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11: IFS= LOGNAME=sae MAIL=/var/spool/mail/sae PWD=/home/ sae/STUDY/SHELL PS1=$(PWD):" "PS2=> SHELL=/bin/bash

اجازه دهید در مورد مقادیر متغیرها نظر بدهیم. HOME=/root نام دایرکتوری خانگی است که کاربر پس از ورود به سیستم در آن به پایان می رسد. یعنی با تایپ صحیح نام کاربری و رمز عبور در دایرکتوری «/root» قرار می گیرم. PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - این متغیر دنباله‌ای از فایل‌ها را تنظیم می‌کند که "پوسته" یک فرمان را جستجو می‌کند. نام فایل ها در اینجا با دو نقطه از هم جدا می شوند. دنباله مرور با ترتیب نام ها در دنباله مطابقت دارد. اما در ابتدا جستجو در میان دستورات به اصطلاح داخلی انجام می شود. دستورات داخلی شامل دستورات پرکاربرد مانند «echo»، «cd»، «pwd»، «date» می‌شود. پس از آن، سیستم در دایرکتوری "/bin" نگاه می کند، که ممکن است حاوی دستورات "sh"، "cp"، "mv"، "ls" و غیره باشد. سپس دایرکتوری "/usr/bin" با دستورات "cat"، "cc"، "expr"، "nroff"، "man" و بسیاری دیگر. علاوه بر این، جستجو در دایرکتوری فعلی ("."، یا نام دیگری "خالی"، یعنی "") انجام می شود، جایی که دستوراتی که نوشته اید به احتمال زیاد در آن قرار دارند. پس از تایپ خط فرمان و فشار دادن "شل" (پس از انجام تعویض های لازم) نام مربوط به دستور را می شناسد و آن را در فهرست های فهرست شده در PATH جستجو می کند. اگر دستور خارج از این دایرکتوری ها قرار گیرد، یافت نمی شود. اگر چندین دستور با همین نام، سپس فهرستی که ابتدا در دایرکتوری مشاهده شده قرار دارد فراخوانی می شود. PATH مانند سایر متغیرها را می توان به راحتی با اضافه کردن، مرتب کردن مجدد یا حذف دایرکتوری ها تغییر داد. IFS= (Internal Field Separator) کاراکترهایی را فهرست می کند که برای جداسازی کلمات (فیلدها) استفاده می شوند. اینها "فضا"، "تب" و "فید خط" هستند، بنابراین در اینجا چیزی در سمت چپ انتساب قابل مشاهده نیست و دو خط اشغال شده است. LOGNAME = ریشه - نام ورود ("نام کاربری"). MAIL=/var/spool/mail/root نام فایلی است که نامه (ایمیل) را دریافت می کند. PWD=/root - نام دایرکتوری فعلی PS1=$(PWD):" " - نوع promter. در این حالت، پرومتر نام دایرکتوری فعلی، یک دونقطه و یک فاصله را نمایش می دهد. یعنی "/root:" اینجا خواهد بود. PS2=> - این پرومتر (در اینجا ">") به عنوان یک دعوت برای ادامه تایپ کردن (در خط بعدی) یک دستور ناتمام استفاده می شود. به عنوان مثال، براکت باز را تایپ کنید "(" و پس از فشار دادن که در خط بعدیشما این پرومتر را خواهید دید. اگر هنوز نمی‌دانید چه کاری باید انجام دهید، براکت بسته شدن ")" را تایپ کنید و ناپدید می‌شود. SHELL=/bin/sh - این متغیر پوسته ای را که کاربر استفاده می کند را مشخص می کند. در این مورد از پوسته استاندارد ("sh") استفاده می شود. محیط اولیه به طور خودکار در هنگام ورود با استفاده از فایل هایی مانند "/etc/rc" و "/etc/.profile" تنظیم می شود. یکی از راه‌های تغییر ساده محیط (مانند مسیر جستجوی فرمان، نمای درخواست‌کننده، نمای پوسته، رنگ صفحه، و غیره) قرار دادن این اطلاعات در فهرست اصلی خود در یک فایل تخصصی ".profile" (نمایه $(HOME)/. است. ) با اختصاص مقادیر مورد نظرمتغیرهای محیطی. یعنی این فایل را در ویرایشگر فراخوانی کنید و هر چه می خواهید بنویسید). سپس با هر بار ورود، این فایل به صورت خودکار اجرا شده و یک محیط جدید راه اندازی می شود. این فایل باید در شما قرار داشته باشد دایرکتوری HOME(دایرکتوری ورود به سیستم). توجه داشته باشید که نام فایل هایی که با نقطه شروع می شوند معمولاً وضعیت خاصی دارند. بنابراین، آنها با یک دستور ساده "ls" روی صفحه نمایش داده نمی شوند - باید این دستور را با پرچم "-a" فراخوانی کنید. ضمناً با دستور "rm *" بی رویه از بین نمی روند. خود مفسر پوسته به طور خودکار مقادیری را به متغیرها (پارامترهای) زیر اختصاص می دهد: ? مقدار بازگشتی توسط آخرین دستور؛ شماره فرآیند $؛ ! شماره فرآیند پس زمینه؛

  1. تعداد پارامترهای موقعیتی ارسال شده به پوسته؛
  • لیست پارامترها به عنوان یک خط.

@ لیست گزینه ها به عنوان مجموعه ای از کلمات. - پرچم ها به پوسته منتقل شدند. هنگام دسترسی به این متغیرها (یعنی هنگام استفاده از آنها در یک فایل دسته ای - یک برنامه پوسته)، باید "$" را در جلو قرار دهید. نقش مهمی در ایجاد فایل های منحصر به فرد توسط متغیر ویژه "$$" ایفا می شود که مقدار آن با تعداد فرآیندی که این محاسبه را انجام می دهد مطابقت دارد. هر محاسبه جدیدی که توسط کامپیوتر انجام می شود، یک یا چند فرآیند را آغاز می کند که به طور خودکار اعداد را به ترتیب دریافت می کنند. بنابراین، با استفاده از شماره فرآیند به عنوان نام فایل، می توان مطمئن شد که هر کدام فایل جدیدیک نام جدید خواهد داشت (به جای نام موجود نوشته نمی شود). مزیت آن نیز عیب اصلی این روش نام گذاری فایل ها است. معلوم نیست چه نام هایی به پرونده ها اختصاص داده خواهد شد. و اگر در چارچوب این فرآیند امکان یافتن یک فایل "بدون جستجو" وجود داشته باشد، یعنی با مراجعه به آن با استفاده از $$، آنگاه می توان چنین فایل هایی را به راحتی از دست داد. این باعث ایجاد مشکلات اضافی در هنگام اشکال زدایی برنامه ها می شود. فراخوانی مترجم پس از ورود کاربر به سیستم (با استفاده از فرمان ورود)، مترجم زبان SHELL فراخوانی می شود. اگر دایرکتوری ورود کاربر حاوی یک فایل .profile باشد، قبل از اینکه حداقل یک فرمان از ترمینال دریافت شود، مفسر این فایل را اجرا می کند (فرض می شود که فایل .profile حاوی دستوراتی است). سوئیچ های زیر را می توان در طول تماس مشخص کرد: -c string دستورات از رشته مشخص شده خوانده می شوند. دستورات -s از ورودی استاندارد خوانده می شوند. پیام های مترجم در فایل تشخیصی استاندارد نوشته می شوند. -i حالت تعاملی. اگر اولین کاراکتر پارامتر "0" - باشد، دستورات از فایل .profile خوانده می شوند.

ساختارهای برنامه===

مانند هر زبان برنامه نویسی، ممکن است نظراتی در متن زبان پوسته وجود داشته باشد. برای این کار از کاراکتر "#" استفاده می شود. هر چیزی که در خط (در فایل دسته ای) در سمت چپ این نماد قرار دارد توسط مفسر به عنوان یک نظر درک می شود. مثلا،

# این یک نظر است.

همانطور که در هر زبان رویه ایبرنامه نویسی به زبان پوسته دارای عملگرهایی است. تعدادی از اپراتورها به شما امکان می دهند ترتیب اجرای دستورات را کنترل کنید. در چنین اپراتورهایی، اغلب لازم است که شرایط را بررسی کنید، که جهت ادامه محاسبات را تعیین می کند.

دستور test(").

دستور تست بررسی می کند که آیا یک شرط خاص برآورده شده است یا خیر. با استفاده از این دستور (توکار)، دستورهای انتخاب زبان پوسته و حلقه تشکیل می‌شوند. دو فرمت فرمان ممکن:

شرایط آزمایشی

[ شرایط. شرط ]

ما از گزینه دوم استفاده خواهیم کرد. به جای نوشتن کلمه "test" قبل از شرط، شرط را در پرانتز قرار می دهیم که برای برنامه نویسان بیشتر آشناست. در واقع، پوسته این دستور را از براکت باز "[" به عنوان کلمه مربوط به دستور "test" تشخیص خواهد داد. بین براکت ها و شرایط موجود در آنها باید فاصله وجود داشته باشد. همچنین باید بین مقادیر و کاراکتر مقایسه یا عملیات فاصله وجود داشته باشد. پوسته از شرایط مختلف "انواع" استفاده می کند. شرایط بررسی فایل: -f فایل "file" یک فایل معمولی است. فایل -d "فایل" - دایرکتوری. فایل -c "file" یک فایل خاص است. فایل -r اجازه خواندن فایل "فایل" را دارد. فایل -w مجوز نوشتن در فایل "فایل" را دارد. فایل -s "فایل" خالی نیست.

شرایط بررسی رشته: str1 = str2 رشته های "str1" و "str2" مطابقت دارند. str1 != str2 رشته های "str1" و "str2" مطابقت ندارند. -n رشته str1 "str1" وجود دارد (غیر خالی). -z str1 رشته "str1" وجود ندارد (خالی). مثال ها.

x="چه کسی کیست"; صادرات x; [ "who is who" = "$x" ]; اکو $؟ 0 x=abc ; صادرات x ; [ abc = "$x" ] ; اکو $؟ 0 x=abc ; صادرات x ; [ -n "$x" ] ; اکو $؟ 0 x="" ; صادرات x ; [ -n "$x" ] ; اکو $؟ یکی

علاوه بر این، دو مقدار شرط استاندارد وجود دارد که می توان به جای شرط از آنها استفاده کرد (نیازی به پرانتز نیست). شرایط مقایسه اعداد صحیح: x -eq y "x" برابر با "y" است، x -ne y "x" برابر با "y" نیست، x -gt y "x" بزرگتر از "y" است، x -ge y "x" بزرگتر یا مساوی "y" است، x -lt y "x" کمتر از "y" است، x -le y "x" کمتر یا مساوی "y" است. شرایط پیچیده: با استفاده از عملیات منطقی معمولی اجرا شد: ! (نه) مقدار کد خروج را معکوس می کند. -o (یا) با "OR" منطقی مطابقت دارد. -a (و) با AND منطقی مطابقت دارد.

عبارت "اگر" مشروط

به طور کلی، عبارت «اگر» ساختاری دارد

اگر شرط است، لیست کنید

در اینجا «الف» مخفف «اگر دیگر» است و می‌تواند همراه با کامل، یعنی. تودرتوی تعداد دلخواه عبارات «اگر» (و همچنین سایر عبارات) مجاز است. یقیناً «فهرست» در هر مورد باید در زمینه معین معنادار و قابل پذیرش باشد. کوتاه ترین ساختار این اپراتور

اگر شرط است، fi را لیست کنید

اگر شرط برآورده شود (به عنوان یک قاعده، این کسی است که کد تکمیل "0" را دریافت کرده است، سپس "لیست" اجرا می شود، در غیر این صورت از آن صرف نظر می شود. مثال ها. اجازه دهید "if-1" نوشته شود

اگر [ $1 -gt $2 ]

سپس pwd else echo $0: سلام!

سپس با تماس با if-1 12 11 /home/sae/STUDY/SHELL و if-1 12 13 if-1 می دهد: سلام!

اپراتور تماس ("مورد")

دستور انتخاب "مورد" ساختار زیر را دارد:

رشته مورد در

الگو) فهرست دستورات؛; الگو) فهرست دستورات؛; ... الگو) لیست دستورات;;

در اینجا "case"، "in" و "esac" کلمات کمکی هستند. یک "رشته" (می تواند یک کاراکتر باشد) با یک "الگو" مقایسه می شود. سپس "لیست فرمان" ردیف انتخاب شده اجرا می شود. به طور غیر معمول به انتهای خطوط انتخاب ";;" نگاه کنید، اما در اینجا بنویسید ";" این یک اشتباه خواهد بود برای هر جایگزین، چندین دستور را می توان اجرا کرد. اگر این دستورات در یک خط نوشته شوند، کاراکتر ";" به عنوان جداکننده دستور استفاده خواهد شد. به طور معمول، آخرین خط انتخاب دارای الگوی "*" است که به معنای "هر مقدار" در ساختار "case" است. این رشته در صورتی انتخاب می شود که مقدار متغیر (در اینجا $z) با هیچ یک از الگوهای نوشته شده قبلی که توسط براکت ")" مشخص شده است مطابقت نداشته باشد. مقادیر به ترتیبی که نوشته شده اند جستجو می شوند.

بیانیه حلقه شمارش ("برای")

عملگر حلقه "for" ساختار زیر را دارد:

برای نام

لیست do از دستورات انجام شده در جایی که "for" یک کلمه تابعی است که نوع چرخه را تعریف می کند، "do" و "done" کلمات خدماتی هستند که بدنه چرخه را برجسته می کنند. اجازه دهید دستور "lsort" با یک فایل دسته ای نمایش داده شود

برای i در file_1 file_2 file_3 proc_sort $i done را انجام دهید

در این مثال، نام "i" نقش یک پارامتر حلقه را بازی می کند. این نام را می توان به عنوان یک متغیر پوسته در نظر گرفت که مقادیر لیست شده (i=file_1، i=file_2، i=file_3) را به ترتیب به آن اختصاص می دهد و دستور "proc_sort" در یک حلقه اجرا می شود. فرم "for i در *" اغلب استفاده می شود، به معنای "برای همه فایل های موجود در فهرست فعلی". اجازه دهید "proc_sort" به نوبه خود با یک فایل دسته ای نمایش داده شود

گربه 1 دلار | مرتب سازی | tee /dev/lp > $(1)_sorted

آن ها فایل های مشخص شده به صورت متوالی مرتب می شوند، نتایج مرتب سازی چاپ می شوند ("/dev/lp") و به فایل های file_1_sorted file_2_sorted و file_3_sorted ارسال می شوند.

عبارت حلقه با شرط true ("while")

ساختار "while" که محاسبات را نیز ارائه می دهد، زمانی ترجیح داده می شود که لیست دقیق مقادیر پارامترها از قبل مشخص نباشد یا این لیست باید در نتیجه محاسبات در یک حلقه به دست آید. دستور حلقه "while" ساختار زیر را دارد:

در حالی که شرط

فهرستی از دستورات انجام شده در جایی که "while" یک کلمه تابعی است که نوع حلقه را با یک شرط واقعی تعریف می کند. لیست دستورات در بدنه حلقه (بین «do» و «انجام شد») تکرار می شود تا زمانی که شرط درست باشد (یعنی کد خروج آخرین فرمان در بدنه حلقه «0» باشد) یا حلقه از قسمت قطع شود. در داخل با دستورات ویژه ("شکستن"، "ادامه"، یا "خروج"). اولین باری که وارد حلقه می شوید، شرط باید رعایت شود. دستور "break [n]" به شما امکان می دهد از حلقه خارج شوید. اگر "n" وجود نداشته باشد، معادل "شکستن 1" است. "n" تعداد حلقه های تو در تو را برای خروج از آنها نشان می دهد، به عنوان مثال، "break 3" - خروج از سه حلقه تو در تو. بر خلاف دستور "break"، دستور "continue [n]" فقط اجرای حلقه فعلی را خاتمه می دهد و به START حلقه باز می گردد. همچنین می تواند با یک پارامتر باشد. به عنوان مثال، "ادامه 2" به معنای خروج به ابتدای دومین حلقه تودرتو (اگر از عمق شمارش شود) است. دستور "exit [n]" به شما اجازه می دهد تا به طور کلی با یک کد بازگشتی "0" یا "n" از رویه خارج شوید (اگر پارامتر "n" مشخص شده باشد). این دستور نه تنها در حلقه ها قابل استفاده است. حتی در یک توالی خطی از دستورالعمل‌ها، توقف اجرای محاسبه (جاری) در یک نقطه معین می‌تواند در اشکال‌زدایی مفید باشد.

عبارت حلقه با شرط نادرست ("تا")

عملگر حلقه "تا" ساختار زیر را دارد:

تا شرط

do لیستی از دستورات انجام شده در جایی که "تا" یک کلمه تابعی است که نوع حلقه را با یک شرط نادرست تعریف می کند. لیست دستورات موجود در بدنه حلقه (بین «do» و «انجام شد») تا زمانی که شرط نادرست باشد یا حلقه از داخل با دستورات خاصی قطع شود («شکستن»، «ادامه» یا «خروج») تکرار می شود. . اولین باری که وارد حلقه می شوید، شرط نباید درست باشد. تفاوت با عملگر "while" در این است که شرط حلقه برای نادرستی بررسی می شود (برای کد خروج غیر صفر آخرین فرمان بدنه حلقه) پس از اجرای هر (از جمله اولین!) دستورات، بررسی می شود. بدنه حلقه مثال.

تا انجام غلط

x را بخوانید اگر [$x = 5] سپس به اندازه کافی اکو انجام دهید. break else پژواک برخی دیگر fi

اینم برنامه با حلقه بی پایانمنتظر می ماند تا کلمات وارد شوند (تکرار عبارت "some more" روی صفحه) تا زمانی که "5" وارد شود. پس از آن، "کافی" صادر می شود و دستور "break" اجرای حلقه را خاتمه می دهد.

بیانیه خالی

عبارت خالی دارای قالب است

:

هیچ کاری نکردن مقدار "0" را برمی گرداند.

توابع پوسته

این تابع به شما امکان می دهد لیستی از دستورات پوسته را برای اجرای بعدی آماده کنید. شرح تابع به نظر می رسد:

Name() (لیست فرمان)

پس از آن فراخوانی تابع با نام انجام می شود. هنگامی که تابع اجرا می شود، هیچ فرآیند جدیدی ایجاد نمی شود. در محیط فرآیند مربوطه اجرا می شود. آرگومان های تابع به پارامترهای موقعیتی آن تبدیل می شوند. نام تابع پارامتر null آن است. می توانید اجرای یک تابع را با عبارت "return [n]" قطع کنید، جایی که (اختیاری) "n" کد بازگشتی است.

مدیریت وقفه ("تله")

گاهی اوقات لازم است از اجرای برنامه در برابر وقفه محافظت شود. وقفه‌هایی که اغلب با آن‌ها مواجه می‌شوند به شرح زیر هستند، مربوط به سیگنال‌ها: 0 خروج از مفسر، 1 رها کردن (قطع شدن مشترک راه دور)، 2 ، 9 کشتن (رهگیری نشد) ، 15 اعدام پایان. برای محافظت در برابر وقفه، یک دستور "trap" وجود دارد که دارای فرمت:

سیگنال های "فهرست فرمان" را به دام بیندازید

اگر وقفه‌هایی در سیستم رخ دهد که سیگنال‌های آن با فاصله در "سیگنال‌ها" فهرست شده‌اند، "فهرست دستورات" اجرا می‌شود و پس از آن (اگر دستور "خروج" در لیست دستورات اجرا نشد، کنترل کنید. به نقطه شکست باز می گردد و اجرای فایل دسته ای ادامه می یابد. به عنوان مثال، اگر می خواهید قبل از قطع اجرای برخی از فایل های دسته ای، فایل های موجود در "/tmp" را حذف کنید، می توانید با دستور "trap" این کار را انجام دهید:

تله "rm /tmp/* ؛ خروج 1" 1 2 15

که مقدم بر دستورات دیگر فایل است. در اینجا پس از حذف فایل ها، «خروج» از فایل دسته ای انجام می شود.

  • آموزش

چرا و برای چه کسی مقاله است؟

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

هیچ گونه بازگویی ماناس (اسناد) وجود نخواهد داشت و مقاله به هیچ وجه خواندن آنها را لغو یا جایگزین نمی کند. در عوض، من در مورد چیزهای اصلی (فرمان ها، ترفندها و اصول) صحبت خواهم کرد که شما باید از همان ابتدای کار در پوسته یونیکس بدانید تا بتوانید به طور موثر و دلپذیر کار کنید.

این مقاله به محیط‌های کامل یونیکس مانند، با پوسته کامل (ترجیحا zsh یا bash) و طیف نسبتاً گسترده‌ای از برنامه‌های استاندارد می‌پردازد.

پوسته چیست

پوسته (شل، با نام مستعار "خط فرمان"، با نام مستعار CLI، مستعار "کنسول"، مستعار "ترمینال"، مستعار "پنجره سیاه با حروف سفید") یک رابط متنی برای برقراری ارتباط با سیستم عامل است (خوب، به طور دقیق آن را بیان کنید. برنامه، که چنین رابطی را ارائه می دهد، اما اکنون این تفاوت قابل توجه نیست).

به طور کلی، کار از طریق پوسته به این صورت است: کاربر (یعنی شما) دستوری را از صفحه کلید وارد می کند، Enter را فشار می دهد، سیستم دستور را اجرا می کند، نتیجه اجرا را روی صفحه می نویسد و دوباره منتظر دستور بعدی می ماند. وارد شود.

ظاهر پوسته معمولی:

پوسته راه اصلی برای تعامل با تمام سیستم های سرور مشابه یونیکس است.

سیستم های خط فرمان کجا یافت می شوند؟

جایی که یک پوسته یونیکس می تواند منتظر شما باشد، گزینه های محبوب:
  • macOS (bash)؛
  • دسترسی از راه دور به سرور برای کار یا برای یک پروژه وب شخصی؛
  • سرور فایل خانگی با دسترسی از راه دور.
  • اوبونتو، PC-BSD روی لپ‌تاپ/رومیزی - امروزه نصب و استفاده از سیستم‌های مشابه یونیکس آسان است.

حل چه کارهایی با پوسته معقول است؟

وظایف طبیعی که پوسته برای آنها مناسب، مفید و ضروری است:
  • کار تعاملی در ترمینال:
    • کامپایل، اجرای کارها از طریق make;
    • مقایسه فایل های متنی؛
    • تجزیه و تحلیل سریع داده هاک (تعداد IPهای منحصر به فرد در گزارش، توزیع رکوردها بر حسب ساعت/دقیقه و غیره)؛
    • اقدامات انبوه یکباره (کشتن بسیاری از فرآیندها؛ اگر با یک سیستم کنترل نسخه کار می کنید، دسته ای از فایل ها را معکوس یا حل کنید).
    • تشخیص آنچه در سیستم اتفاق می افتد (سمافورها، قفل ها، فرآیندها، توصیفگرها، فضای دیسک و غیره)؛
  • اسکریپت نویسی:
    • اسکریپت‌هایی را تنظیم کنید که نمی‌توانید برای اجرای آن‌ها به مفسرهای دیگر اعتماد کنید - نه برای مبتدیان.
    • توابع برای سفارشی کردن پوسته تعاملی (تأثیر بر درخواست، تغییر دایرکتوری، تنظیم متغیرهای محیط) - همچنین برای مبتدیان کاملاً مناسب نیست.
    • اسکریپت های یکبار مصرف مانند رمزگذاری فایل های انبوه.
    • فایل های ایجاد شده

کاملاً اولین قدم ها

شروع به کار: ورود و خروج

مطمئن شوید که دقیقاً می دانید پوسته را چگونه شروع کنید و چگونه از آن خارج شوید.

اگر در دستگاهی هستید که اوبونتو را نصب کرده است، باید برنامه ترمینال را راه اندازی کنید. در پایان کار می توانید به سادگی پنجره را ببندید.

در MacOS، ترمینال را نیز راه اندازی کنید.

برای دسترسی به یک سرور راه دور، از ssh (اگر MacOS، Ubuntu یا سیستم یونیکس دیگری به صورت محلی دارید) یا putty (اگر ویندوز دارید) استفاده کنید.

من کی هستم، کجا هستم؟

دستورات زیر را اجرا کنید:
  • نام میزبان - نام ماشین (سرور) که در حال حاضر در آن هستید را نشان می دهد.
  • Whoami - ورود شما (نام شما در سیستم) را نمایش می دهد.
  • tree -d / |less - تصویر شبه نگاری درخت دایرکتوری روی ماشین. خروج از اسکرول - q ;
  • pwd - فهرستی را که در حال حاضر در آن هستید نمایش می دهد. در خط فرمان شما نمی توانید "درست مثل آن" باشید، شما لزوما در یک دایرکتوری هستید (= دایرکتوری فعلی، دایرکتوری کار). احتمالاً دایرکتوری فعلی کار در اعلان شما نمایش داده می شود.
  • ls - لیست فایل های موجود در دایرکتوری فعلی. ls /home - لیستی از فایل ها در دایرکتوری مشخص شده.

تاریخچه فرمان (تاریخچه)

یک ویژگی مهم یک خط فرمان کامل، تاریخچه دستورات است.

چند دستور را اجرا کنید: hostname، ls، pwd، whoami. حالا کلید up را فشار دهید. دستور قبلی در خط ورودی ظاهر شد. از کلیدهای بالا و پایین می توان برای حرکت به جلو و عقب در طول تاریخ استفاده کرد. وقتی به نام میزبان بروید، Enter را فشار دهید - دستور دوباره اجرا خواهد شد.

دستورات تاریخ را می توان نه تنها دوباره اجرا کرد، بلکه ویرایش کرد. در تاریخچه به دستور ls بروید، کلید -l را به آن اضافه کنید (معلوم شد ls -l، یک فاصله قبل از منهای وجود دارد، اما نه بعد از آن). Enter را فشار دهید - دستور اصلاح شده اجرا می شود.

پیمایش در تاریخ، ویرایش و اجرای مجدد دستورات معمولی ترین اقدامات هنگام کار در خط فرمان هستند، به آن عادت کنید.

کپی پیست

خط فرمان بسیار متن محور است: دستورات متن هستند، داده های ورودی برای اکثر برنامه های استاندارد متن است، نتیجه کار اغلب متن است.

نکته مهم در مورد متن این است که می توان آن را کپی و پیست کرد و این برای خط فرمان نیز صادق است.

تاریخ اجرا +"%y-%m-%d، %A" را امتحان کنید
آیا آن را کاملاً دستی وارد کرده اید یا از مقاله کپی کرده اید؟ مطمئن شوید که می توانید آن را کپی کنید، آن را در ترمینال پیست کرده و اجرا کنید.

بعد از اینکه نحوه استفاده از man را یاد گرفتید، مطمئن شوید که می‌توانید دستورات مثال را از راهنما کپی و اجرا کنید. برای بررسی، به راهنمای برنامه تاریخ در بخش EXAMPLES نگاه کنید، اولین مثال ارائه شده را کپی کرده و اجرا کنید (در صورت لزوم. : علامت دلار بخشی از دستور نیست، این یک تصویر شرطی از اعلان ورودی است).

نحوه دقیق کپی کردن متن از ترمینال و چسباندن آن به ترمینال به سیستم شما و تنظیمات آن بستگی دارد، بنابراین، متأسفانه، ارائه یک دستورالعمل جهانی کار نخواهد کرد. در اوبونتو این را امتحان کنید: کپی فقط انتخاب ماوس است، چسباندن دکمه وسط ماوس است. اگر کار نمی کند، یا اگر سیستم دیگری دارید - به اینترنت نگاه کنید یا از دوستان با تجربه تر بپرسید.

کلیدها و گزینه ها

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

[ایمیل محافظت شده]: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf
اگر سوئیچ -l را اضافه کنید، اطلاعات دقیق برای هر فایل نمایش داده می شود:

[ایمیل محافظت شده]: ~/shell-survival-quide> ls -l مجموع 332 -rw-rw-r-- 1 آکیرا 198 فوریه 13 11:48 Makefile -rw-rw-r-- 1 آکیرا آکیرا 15107 14 فوریه 22:26 shell -first-steps.md -rw-rw-r-- 1 akira akira 146226 فوریه 13 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 فوریه 13 11:45 shell-survival -quide.md -rw-rw-r-- 1 akira akira 146203 13 فوریه 11:35 shell-survival-quide.pdf
این یک وضعیت بسیار معمولی است: اگر اصلاح کننده های ویژه (سوئیچ ها، گزینه ها، پارامترها) به فراخوانی فرمان اضافه شوند، رفتار فرمان تغییر می کند. مقایسه کنید: tree / and tree -d / , hostname و hostname -f .

علاوه بر این، دستورات می توانند نام فایل ها، دایرکتوری ها یا فقط رشته های متنی را به عنوان پارامتر بگیرند. تلاش كردن:

ls -ld /home ls -l /home grep root /etc/passwd

مرد

man - راهنمایی در مورد دستورات و برنامه های موجود در دستگاه شما و همچنین تماس های سیستمی و کتابخانه استاندارد C.

سعی کنید: من گرپ، من آتوی، من چدیر، مرد من.

اسکرول به جلو و عقب با دکمه های "بالا"، "پایین"، "PageUp"، "PageDown" انجام می شود و خروج از نمای راهنما با دکمه q انجام می شود. جستجوی متن خاص در مقاله راهنما: / (اسلش جلو) را فشار دهید، متن جستجو را تایپ کنید، Enter را فشار دهید. حرکت به رخدادهای بعدی - کلید n.

همه مقالات راهنما به دسته‌هایی تقسیم می‌شوند. مهمترین:

  • 1 - برنامه های اجرایی و دستورات پوسته (wc، ls، pwd و غیره)؛
  • 2 - تماس های سیستمی (fork، dup2 و غیره)
  • 3 - توابع کتابخانه (printf، scanf، cos، exec).
لازم است مشخص شود که در موارد تصادفی نام، کمک از کدام دسته باید نشان داده شود. برای مثال، man 3 printf یک تابع از کتابخانه استاندارد C را توصیف می کند، و man 1 printf یک برنامه کنسولی به همین نام را توصیف می کند.

با دستور man -k می‌توانید فهرستی از تمام مقالات کمکی موجود در دستگاه را مشاهده کنید. (نقطه نیز بخشی از تیم است).

کمتر

هنگامی که شما نیاز به مشاهده یک متن بسیار طولانی در یک پنجره ترمینال کوچک دارید (محتویات یک فایل، یک مرد طولانی و غیره)، از برنامه های ویژه "پیجر" استفاده می شود (از کلمه صفحه / صفحه، یعنی صفحه بندی). محبوب‌ترین اسکرول کمتر است، و این چیزی است که هنگام خواندن mans، اسکرول را برای شما فراهم می‌کند.

سعی کنید و رفتار را مقایسه کنید:

cat /etc/bash.bashrc cat /etc/bash.bashrc |کمتر

می توانید فایل را فوراً در پارامترهای زیر به پیمایش منتقل کنید:

کمتر /etc/bash.bashrc

به بالا و پایین بروید - دکمه های "بالا"، "پایین"، "PageUp"، "PageDown"، خروج - دکمه q. جستجوی متن خاص: / (اسلش جلو) را فشار دهید، متن جستجو را وارد کنید، Enter را فشار دهید. حرکت به رخدادهای بعدی - کلید n. (آیا دستورات مربوط به انسان را می شناسید؟ جای تعجب نیست که کمتر برای نمایش کمک نیز استفاده می شود.)

حقوق

مجموعه ای از "حقوق" با هر فایل یا دایرکتوری مرتبط است: حق خواندن فایل، حق نوشتن روی فایل، حق اجرای فایل. همه کاربران به سه دسته تقسیم می شوند: مالک فایل، گروه مالک فایل، همه کاربران دیگر.

می توانید مجوزهای فایل را با ls -l مشاهده کنید. مثلا:

> ls -l Makefile -rw-r--r-- 1 دانش آموزان akira 198 فوریه 13 11:48 Makefile
این خروجی به این معنی است که مالک (akira) می‌تواند فایل را بخواند و بنویسد، گروه (دانش‌آموزان) فقط می‌توانند بخوانند، و همه افراد دیگر در کاربر نیز می‌توانند فقط بخوانند.

اگر در حین کار پیغام رد مجوز دریافت کردید، به این معنی است که مجوزهای کافی برای شی مورد نظر برای کار با آن ندارید.

در man chmod بیشتر بخوانید.

STDIN، STDOUT، خطوط لوله (لوله)

هر برنامه در حال اجرا دارای 3 جریان داده استاندارد مرتبط با خود است: جریان ورودی STDIN، جریان خروجی STDOUT، جریان خطا STDERR.

برنامه wc را اجرا کنید، Good day today را تایپ کنید، Enter را فشار دهید، Good day را تایپ کنید، Enter را فشار دهید، Ctrl+d را فشار دهید. برنامه wc آماری از تعداد حروف، کلمات و خطوط در متن و خروج شما نشان می دهد:

> wc روز خوب امروز روز خوب 2 5 24
در این حالت شما به برنامه STDIN یک متن دو خطی دادید و سه عدد را در STDOUT دریافت کردید.

اکنون دستور head -n3 /etc/passwd را اجرا کنید، باید چیزی شبیه به این باشد:

> head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x: 2:2:bin:/bin:/usr/sbin/nologin
در این مورد، برنامه head چیزی از STDIN نخواند اما سه خط به STDOUT نوشت.

به این شکل فکر کنید: یک برنامه لوله ای است که STDIN در آن جریان دارد و STDOUT خارج می شود.

مهمترین ویژگی خط فرمان یونیکس این است که برنامه های "لوله" را می توان به هم متصل کرد: خروجی (STDOUT) یک برنامه را می توان به عنوان ورودی (STDIN) به برنامه دیگر ارسال کرد.

چنین ساخت و ساز از برنامه های متصل به انگلیسی لوله (لوله)، در روسی - نوار نقاله یا لوله نامیده می شود.

ترکیب برنامه ها در خط لوله با علامت | انجام می شود (نوار عمودی)

دستور head -n3 /etc/passwd |wc را اجرا کنید، چیزی شبیه به این دریافت خواهید کرد:

> head -n3 /etc/passwd |wc 3 3 117
اتفاقی که افتاد این بود: برنامه head سه خط متن را به STDOUT خروجی داد، که بلافاصله وارد ورودی برنامه wc شد، که به نوبه خود تعداد کاراکترها، کلمات و خطوط متن حاصل را شمارش کرد.

می توانید هر تعداد برنامه را که دوست دارید در یک خط لوله ترکیب کنید. به عنوان مثال، می توانید یک برنامه wc دیگر را به خط لوله قبلی اضافه کنید، که تعداد کلمات و حروف در خروجی اولین wc را شمارش می کند:

> head -n3 /etc/passwd |wc |wc 1 3 24

کامپایل خطوط لوله (لوله ها) در هنگام کار بر روی خط فرمان امری بسیار متداول است. برای مثالی از نحوه انجام این کار در عمل، به بخش Compiling a One-Line Pipeline مراجعه کنید.

تغییر مسیر I/O

خروجی (STDOUT) یک برنامه نه تنها می تواند به یک برنامه دیگر منتقل شود، بلکه به سادگی در یک فایل نوشته می شود. این تغییر جهت با > (بیشتر از علامت) انجام می شود:

تاریخ > /tmp/today.txt
در نتیجه اجرای این دستور، فایل /tmp/today.txt روی دیسک ظاهر می شود. محتویات آن را با cat /tmp/today.txt مشاهده کنید

اگر فایلی با همین نام قبلا وجود داشته باشد، محتوای قدیمی آن از بین خواهد رفت. اگر فایل وجود نداشت، ایجاد می شود. دایرکتوری که فایل در آن ایجاد می شود باید قبل از اجرای دستور وجود داشته باشد.

اگر نمی خواهید فایل را بازنویسی کنید، اما خروجی را به انتهای آن اضافه کنید، از >> استفاده کنید:

تاریخ >> /tmp/today.txt
آنچه اکنون در فایل نوشته شده را بررسی کنید.

علاوه بر این، می توانید هر فایلی را به جای STDIN به برنامه منتقل کنید. تلاش كردن:

دستشویی

وقتی چیزی مشخص نیست چه باید کرد

اگر با رفتار سیستمی مواجه شدید که نمی‌دانید، یا می‌خواهید به نتیجه خاصی برسید، اما نمی‌دانید چگونه، به شما توصیه می‌کنم به ترتیب زیر عمل کنید (به هر حال، این نه تنها در مورد پوسته‌ها صدق می‌کند):
  • سوال یا کار را تا حد امکان واضح فرموله کنید - هیچ چیز دشوارتر از حل "نمی دانم چیست" نیست.
  • به یاد داشته باشید که اگر قبلاً با مشکل مشابه یا مشابه روبرو شده اید - در این مورد، ارزش آن را دارد که راه حلی را امتحان کنید که آخرین بار کار کرده است.
  • Man-s مناسب را بخوانید (اگر متوجه شده اید که man-ها در مورد شما مناسب هستند) - ممکن است نمونه های مناسبی از استفاده از دستورات، گزینه های ضروری یا پیوندهایی به دستورات دیگر پیدا کنید.
  • در مورد آن فکر کنید: آیا می توان کار را کمی تغییر داد؟ - شاید با کمی تغییر شرایط، مشکلی را دریافت کنید که قبلاً می دانید چگونه آن را حل کنید.
  • سوال تعریف شده خود را در یک موتور جستجو بپرسید - شاید بتوان پاسخ را در Stack Overflow یا سایت های دیگر یافت.
اگر هیچ یک از موارد فوق کمک نکرد - از یک معلم، یک همکار یا دوست با تجربه راهنمایی بخواهید. و از پرسیدن سؤالات «احمقانه» نترسید - ندانستن شرم آور نیست، نپرسیدن شرم آور است.

اگر مشکل دشواری را حل کرده اید (به تنهایی، با استفاده از اینترنت یا افراد دیگر) - راه حل خود را بنویسید تا اگر شما یا رفقایتان دوباره با همان مشکل مواجه شدید. می توانید در یک فایل متنی ساده، در Evernote ضبط کنید، در شبکه های اجتماعی منتشر کنید.

روش های کار

کپی و جایگذاری کنید- از man-s، از مقالات در StackOverflow، و غیره. خط فرمان شامل متن است، از آن استفاده کنید: کپی کنید و از نمونه های دستور استفاده کنید، یافته های موفق را برای حافظه یادداشت کنید، آنها را در توییتر و وبلاگ ها منتشر کنید.

دستور قبلی را از تاریخ خارج کنید، دستور دیگری را به خط لوله اضافه کنید، اجرا کنید، تکرار کنید.سانتی متر. همچنین به بخش "تدوین خط لوله یک خط" مراجعه کنید.

دستورات پایه

  • تغییر دایرکتوری: cd ;
  • مشاهده محتویات فایل ها : گربه , کمتر , سر , دم ;
  • دستکاری فایل: cp , mv , rm ;
  • فهرست دایرکتوری: ls , ls -l , ls -lS ;
  • ساختار دایرکتوری: tree , tree -d (شما می توانید یک دایرکتوری را به عنوان پارامتر ارسال کنید).
  • جستجوی فایل: پیدا کردن. -نام ... ؛

تجزیه و تحلیل

  • wc , wc -l ;
  • sort -k - مرتب سازی بر اساس فیلد مشخص شده.
  • مرتب سازی -n - مرتب سازی عددی.
  • تفاوت - مقایسه فایل ها.
  • grep , grep -v , grep -w , grep "\ " , grep -E - جستجوی متن;
  • uniq , uniq -c - رشته های منحصر به فرد;
  • awk - در نوع awk "(print $1)"، برای اینکه تنها قسمت اول هر خط باقی بماند، $1 را می توان به $2، $3، و غیره تغییر داد.

تشخیص سیستم

  • ps axuww - اطلاعاتی در مورد فرآیندها (برنامه های در حال اجرا) در حال اجرا بر روی دستگاه.
  • بالا - نمای تعاملی از منابع فشرده ترین فرآیندها.
  • df - فضای دیسک استفاده شده و آزاد؛
  • du - اندازه کل فایل ها در دایرکتوری (به صورت بازگشتی با زیر شاخه ها)؛
  • strace، ktrace - که سیستم آن را فرآیند در حال ساخت می نامد.
  • lsof - از چه فایل هایی استفاده می کند.
  • netstat -na , netstat -nap - چه پورت ها و سوکت هایی در سیستم باز هستند.

ممکن است برخی از برنامه ها را نداشته باشید، آنها باید علاوه بر نصب شوند. علاوه بر این، برخی از گزینه های این برنامه ها فقط برای کاربران ممتاز در دسترس هستند (ریشه "y").

اجرای عمده و نیمه اتوماتیک

ابتدا از این بخش رد شوید، وقتی به اسکریپت نویسی ساده پوسته رسیدید به این دستورات و ساختارها نیاز خواهید داشت.
  • تست - بررسی شرایط؛
  • در حالی که خواندن - چرخه از طریق خطوط STDIN ;
  • xargs - جایگزینی رشته ها از STDIN به پارامترهای برنامه مشخص شده.
  • seq - تولید دنباله های اعداد طبیعی.
  • () - خروجی چندین دستور را ترکیب کنید.
  • ; - یکی پس از دیگری انجام دهید.
  • && - اگر اولین فرمان با موفقیت کامل شود، اجرا شود.
  • || - در صورت عدم موفقیت دستور اول اجرا شود.
  • tee - خروجی برنامه تکراری به STDOUT و یک فایل روی دیسک.

متفرقه

  • تاریخ - تاریخ فعلی؛
  • curl - سند را در url مشخص شده دانلود می کند و نتیجه را در STDOUT می نویسد.
  • لمس - به روز رسانی تاریخ اصلاح فایل.
  • کشتن - ارسال سیگنال به فرآیند.
  • true - هیچ کاری انجام نمی دهد، true را برمی گرداند، برای سازماندهی حلقه های ابدی مفید است.
  • sudo - یک دستور را به صورت root "a" اجرا کنید.

تدوین خط لوله یک خطی

بیایید به یک مثال از یک کار واقعی نگاه کنیم: ما می خواهیم تمام فرآیندهای task-6-server که از طرف کاربر فعلی اجرا می شوند را از بین ببریم.

مرحله 1.
درک کنید که کدام برنامه تقریباً داده های لازم را تولید می کند، حتی اگر به شکل خالص آن نباشد. برای وظیفه ما، ارزش دریافت لیستی از تمام فرآیندهای موجود در سیستم را دارد: ps axuww. اجرا کن.

گام 2
با چشمان خود به داده های دریافتی نگاه کنید، فیلتری ایجاد کنید که برخی از داده های غیر ضروری را بیرون می اندازد. اغلب این grep یا grep -v است. با استفاده از کلید "Up"، دستور قبلی را از تاریخچه خارج کنید، یک فیلتر اختراع شده را به آن اختصاص دهید و آن را اجرا کنید.

Ps axuww |grep `whoami`
- فقط فرآیندهای کاربر فعلی.

مرحله 3
مرحله 2 را تکرار کنید تا به داده های تمیزی که می خواهید برسید.

"
- تمام فرآیندهای با نام مورد نظر (به علاوه، شاید، موارد اضافی مانند vim task-6-server.c و غیره)،

Ps axuww |grep `whoami` | grep "\ " | grep -v vim ps axuww |grep `whoami` | grep "\ " | grep -v vim | grep -v کمتر
- فقط پردازش هایی با نام دلخواه

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v less |awk "(print $2)"

بخش‌هایی از فرآیندهای مورد نیاز، مرحله 3 تکمیل شد

مرحله 4
از یک کنترل کننده نهایی مناسب استفاده کنید. با استفاده از کلید "Up" دستور قبلی را از تاریخچه خارج می کنیم و پردازشی را اضافه می کنیم که حل مشکل را کامل می کند:

  • |wc -l برای شمارش تعداد فرآیندها.
  • >pids برای نوشتن pids در یک فایل.
  • |xargs فرآیندهای کشتن -9 را می کشد.

وظایف برای آموزش

آیا می خواهید مهارت های جدیدی را تمرین کنید؟ کارهای زیر را امتحان کنید:
  • لیستی از تمام فایل ها و دایرکتوری ها را در فهرست اصلی خود دریافت کنید.
  • دریافت لیستی از تمام مقالات مرد از دسته 2 (تماس های سیستمی)؛
  • شمارش کنید که کلمه grep چند بار در صفحه grep man ظاهر می شود.
  • شمارش تعداد فرآیندهایی که در حال حاضر به عنوان ریشه در حال اجرا هستند.
  • پیدا کنید کدام دستور در حداکثر تعداد دسته های کمکی (man) وجود دارد.
  • شمارش کنید که کلمه var چند بار در صفحه ya.ru آمده است.
نکته: به find , grep -o , awk "(print $1) "، عبارات منظم در grep، curl -s نیاز دارید.

بعد چه چیزی را مطالعه کنیم؟

اگر شروع به دوست داشتن خط فرمان کردید، متوقف نشوید، به بهبود مهارت های خود ادامه دهید.

در اینجا چند برنامه وجود دارد که اگر در خط فرمان زندگی می کنید، قطعاً مفید خواهند بود:

  • با گزینه های پیچیده پیدا کنید
  • مناسب
  • پیدا کردن
  • شبکه راه دور
  • نت کت
  • tcpdump
  • rsync
  • صفحه نمایش
  • zgrep، zless
  • visudo
  • crontab -e
  • ارسال ایمیل
همچنین ارزش یادگیری یک زبان برنامه نویسی مانند perl یا python یا حتی هر دو را در طول زمان دارد.

چه کسی به آن نیاز دارد؟

آیا ارزش آن را دارد که امروز خط فرمان و اسکریپت نویسی پوسته را یاد بگیریم؟ قطعا ارزشش را دارد. من فقط چند نمونه از الزامات فیس بوک را برای نامزدهایی که می خواهند در FB شغلی پیدا کنند، بیان می کنم.

برترین مقالات مرتبط