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

    پوسته چیست و چرا به آن نیاز است

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

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

    تقریبا در همه توزیع های لینوکسپوسته bash به طور پیش‌فرض به کاربران اختصاص داده می‌شود (Bourne Again SHell یکی دیگر از پوسته‌های Bourne است؛ Steve Bourne نویسنده اولین مورد است. پوسته فرماندر یونیکس - sh). در واقع به یک استاندارد غیر رسمی تبدیل شده است و بهبود یافته است عملکردبه طور مستمر ادامه می یابد. پوسته های فرمان دیگری نیز وجود دارد - tcsh (نسخه C-shell)، ksh (Korn Shell)، zsh و غیره. - هر کدام مزایا و معایب خاص خود را دارند و همچنین گروه های طرفداران خاص خود را دارند. با این حال، bash برای عموم مردم آشناتر است سطوح مختلفآموزش، به همین دلیل آن را انتخاب کردم. همچنین شایان ذکر است که مهم نیست که پوسته های مختلف چه قابلیت هایی دارند، همه آنها با مولد ایدئولوژیک خود - Bourn Shell (sh) سازگار هستند. به عبارت دیگر، یک اسکریپت نوشته شده برای sh در هر پوسته مدرن به درستی کار خواهد کرد (برعکس، به طور کلی، درست نیست).

    مزایای خط فرمان

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

    پوسته فرمان به عنوان یک زبان برنامه نویسی

    بنابراین، پوسته را می توان به عنوان یک زبان برنامه نویسی و به عنوان محیط نرم افزاراعدام در همان زمان البته این زبان تالیف نمی شود، بلکه تفسیر می شود. این امکان استفاده از متغیرها را فراهم می کند: سیستم یا خود. توالی اجرای دستورات برنامه با استفاده از ساختارهای بررسی شرایط و انتخاب گزینه مناسب تغییر می کند: if-then-else و case. حلقه‌های while، while و for به شما امکان می‌دهند تا اقدامات تکراری را خودکار کنید. ترکیب گروه های دستورات در بلوک های منطقی امکان پذیر است. حتی می توانید توابع واقعی را با پارامترهایی که به آنها ارسال می شود بنویسید. بنابراین، تمام علائم و ویژگی های یک زبان برنامه نویسی تمام عیار وجود دارد. بیایید سعی کنیم از این کار سود مضاعفی ببریم - در کنار یادگیری اصول برنامه نویسی، کار روزانه خود را خودکار می کنیم.

    سلام دنیا! سیستم پشتیبان گیری ساده

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

    #!/bin/bash # # پشتیبان گیری از دایرکتوری ها و فایل ها از فهرست اصلی # این اسکریپت پوسته را می توان به طور خودکار با cron # cd $HOME اجرا کرد اگر [ ! -d archives ] then mkdir archives fi cur_date=`date +%Y%m%d%H%M` if [ $# -eq 0 ] ; سپس tar czf بایگانی$(cur_date).tar.gz پروژه ها bin other tar czf archive$(cur_date).tar.gz $* fi if [ $? = 0] ; سپس mv archive$(cur_date).tar.gz $HOME/archives echo "$cur_date - پشتیبان گیری با موفقیت انجام شد." other echo "$cur_date - ERROR در حین تهیه نسخه پشتیبان." فی

    هر دستور اسکریپت (اسکریپت - اسکریپت، بنابراین برنامه های پوسته فراخوانی می شوند) با یک رشته شناسه شروع می شود، که در آن مفسر دستور به صراحت با مسیر کامل آن مشخص شده است. مسیر کامل یک لیست متوالی از همه دایرکتوری ها است که با ریشه شروع می شود، که برای رسیدن به فایل مورد نظر باید وارد کنید و البته نام این فایل. ثبت مسیر کامل برای شناسایی منحصر به فرد هر فایل در سلسله مراتب سیستم فایل بسیار مهم است.

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

    کامنت ها با یک خط خالی دنبال می شوند. برای پوسته معنایی ندارد و هیچ اقدامی انجام نمی شود. در اسکریپت ها معمولاً خطوط خالی درج می شود تا کد را راحت تر خوانده شود.

    سرانجام به اولین تیم "واقعی" رسیدیم. این به شما امکان می دهد دایرکتوری را تغییر دهید (تغییر دایرکتوری)، یعنی. از دایرکتوری فعلی به دایرکتوری دیگری که به عنوان آرگومان به دستور ارسال شده است حرکت کنید. در بیشتر موارد، دایرکتوری هدف به طور واضح مشخص می شود، به عنوان مثال، پروژه های cd /tmp یا cd، اما در مورد ما، از متغیر سیستم از پیش تعریف شده HOME استفاده می شود - این شامل مسیر کامل به دایرکتوری اصلی کاربر فعلی است که در آن از طرف اسکریپت فرمان در حال اجرا است. این ما را از ایجاد تغییرات در کد هر بار که کاربر تغییر می‌دهد، نجات می‌دهد، زیرا دستور هر کسی را به فهرست شخصی‌اش برمی‌گرداند. علامت دلار "$" در جلوی نام متغیر به این معنی است که شما باید مقدار موجود در این متغیر را استخراج کرده و به جای نام آن در خط فرمان جایگزین کنید. نکته قابل توجه این است که در زبان فرمانپوسته حروف مهم هستند، به عنوان مثال. HOME، Home و home سه متغیر متفاوت هستند. طبق قرارداد، حروف بزرگ نشان دهنده نام متغیرهای سیستم هستند: HOME، PATH، EDITOR و غیره. این قرارداد مانع از ایجاد متغیرهای خود با نام از کاربران نمی شود حروف بزرگاما چرا با زیر پا گذاشتن هنجارها و قوانین پذیرفته شده عمومی زندگی خود را پیچیده کنید؟ همچنین توصیه نمی شود که مقادیر متغیرهای سیستم را تغییر دهید مگر اینکه کاملاً ضروری باشد. به طور کلی، ما از یک قانون ساده پیروی می کنیم: از متغیرهای سیستم فقط برای خواندن استفاده می کنیم و در صورت نیاز، نام آن را با حروف کوچک می نویسیم.

    اولین دستور ما می توانست به طور خلاصه تر نوشته شود:

    سی دی ~

    در اینجا نماد "~" همچنین به معنی فهرست اصلی کاربر فعلی است. کهنه سربازان خط فرمان به طور خلاصه تر بیان می کنند:

    سی دی

    نکته این است که وقتی هیچ آرگومانی به دستور cd داده نمی شود، به دایرکتوری خانه تغییر می کند.

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

    اگر<условие>سپس<одна или несколько команд>فی

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

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

    اگر[! -d آرشیو ] در صورت تست! -d آرشیو

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

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

    F - آیا یک فایل معمولی با نام داده شده وجود دارد یا خیر.

    R - آیا حق خواندن از آن برای فایل داده شده تعیین شده است یا خیر.

    W - آیا فایل مشخص شده حق نوشتن روی آن را دارد یا خیر.

    X - آیا حق اجرای آن برای فایل داده شده تعیین شده است یا خیر.

    S - آیا فایل مشخص شده دارای اندازه غیر صفر است یا خیر.

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

    اگر[! -d archives] اگر دایرکتوری بایگانی (در فهرست فعلی) وجود ندارد، سپس اجرای بلوک فرمان را شروع کنید: بایگانی های mkdir دایرکتوری بایگانی را ایجاد می کنند (در دایرکتوری فعلی) و بلوک فرمان را پایان می دهند.

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

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

    ten=10 string="این یک خط متن است"

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

    %Y سال جاری به شکل کامل است، یعنی. چهار رقمی (به عنوان مثال، 2009)؛

    %m - عدد ماه جاری(به عنوان مثال، 09 - برای سپتامبر)؛

    %d - تعداد روز جاری؛

    %H ساعت جاری در قالب 24 ساعته است.

    %M دقیقه جاری است.

    بنابراین، اگر دستور را اجرا کنید

    cur_date=`تاریخ +%Y%m%d%H%M`

    10 سپتامبر 2009 در ساعت 22:45، cur_date روی مقدار رشته "200909102245" تنظیم می شود. هدف از این ترفند ایجاد یک نام فایل آرشیو منحصر به فرد و غیر تکراری است. اگر قصد دارید چندین نمونه از برنامه را در عرض یک دقیقه اجرا کنید، می‌توانید با اضافه کردن ثانیه‌های جاری نیز منحصربه‌فرد بودن نام‌ها را بهبود ببخشید. چگونه؟ کتابچه راهنمای ابزار تاریخ (man date) را بررسی کنید - هیچ چیز پیچیده ای در مورد آن وجود ندارد.

    قبل از شروع ایجاد یک فایل آرشیو، باید مشخص کنیم که کدام دایرکتوری ها را در آن ذخیره خواهیم کرد. برای انعطاف‌پذیری بیشتر، می‌توانیم مجموعه‌ای از دایرکتوری‌ها را مشخص کنیم که به‌طور پیش‌فرض بایگانی می‌شوند، اما امکان جایگزینی این مجموعه را با فهرستی از دایرکتوری‌های ارسال شده به عنوان آرگومان به اسکریپت فرمان ما فراهم می‌کنیم. برای انجام این کار، از متغیرهای پوسته ویژه استفاده می شود: $# - تعداد پارامترهای ارسال شده به اسکریپت و $* - همه پارامترهای ارسال شده، که در قالب یک خط نوشته شده اند.

    اگر [$# -eq 0 ] ; سپس

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

    tar czf آرشیو$(cur_date).tar.gz پروژه ها bin

    دستور ایجاد یک فایل آرشیو و فشرده سازی این فایل. خود ابزار tar فشرده نمی شود، بلکه فقط تمام فایل ها و دایرکتوری های داده شده را در یک فایل tar جمع می کند. اولین پرچم - c (ایجاد - ایجاد) برای این منظور در نظر گرفته شده است. فشرده سازی توسط یک برنامه خارجی انجام می شود - در اینجا gzip است که توسط پرچم دوم - z نامیده می شود. اگر سیستم شما بیش از برنامه موثرفشرده سازی bzip2، می توانید با تغییر دستور به صورت زیر از آن استفاده کنید:

    tar cjf archive$(cur_date).tar.bz2 projects bin

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

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

    tar czf archive$(cur_date).tar.gz $*

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

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

    mv archive$(cur_date).tar.gz $HOME/archives

    و پیام مربوطه را صادر کنید:

    echo "$cur_date - پشتیبان گیری با موفقیت انجام شد."

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

    echo "$cur_date - ERROR در حین تهیه نسخه پشتیبان."

    این کار اسکریپت فرمان ما را کامل می کند.

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

    chmod 750 bckp

    و اجرا:

    ./bckp

    برای پشتیبان گیری از دایرکتوری های پیش فرض و

    ./bckp docs progs کار می کند

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

    می توانید فایل bckp را در یکی از دایرکتوری های مشخص شده در متغیر سیستم PATH قرار دهید. ترجیح داده شده ترین مکان ها /usr/local/bin یا $HOME/bin در صورت داشتن یکی هستند. پس از آن، می توانید bckp را به عنوان یک دستور سیستم اجرا کنید.

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

    چند کلمه در مورد اتوماسیون پشتیبان. برای این منظور سیستم زمانبندی cron، که دستورالعمل های کار را از یک فایل crontab ویژه می خواند. برای تعریف چنین دستورالعمل هایی، باید فایل crontab خود را با دستور زیر ایجاد و ویرایش کنید:

    crontab -e

    دستورالعمل ها در قالب کاملاً تعریف شده نوشته شده اند (فیلدها با فاصله از هم جدا می شوند):

    دستور دقیقه ساعت روز_ماه_ماه_روز_هفته_

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

    30 23 10,20,30 * * /usr/local/bin/bckp

    یعنی اسکریپت پشتیبان (باید مسیر کامل این فایل را مشخص کنید) در ساعت 23:30 روزهای 10، 20 و 30 هر ماه بدون توجه به روز هفته اجرا می شود. (ستاره ها کل محدوده مقادیر مجاز را نشان می دهند، در این مورد: هر ماه در قسمت چهارم، هر روز از هفته در قسمت پنجم)

    اگر خلاصه‌های هفتگی را ترجیح می‌دهید و سیستم شما 24/7 کار می‌کند، برنامه‌ریزی پشتیبان‌گیری در ساعات غیر اوج مصرف منطقی است:

    0 5 * * 3.5 /usr/local/bin/bckp

    اینجا پشتیبان گیریساعت 5 صبح روزهای چهارشنبه و جمعه هر ماه (ستاره در قسمت چهارم) بدون در نظر گرفتن تعداد (ستاره در قسمت 3) ایجاد می شود.

    شما می توانید در مورد تمام پیچیدگی های زمان بندی در کرونتاب مرد 5 بخوانید.

    نتایج و نتیجه گیری

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

    دانلود منابع

    static.content.url=http://www.website/developerworks/js/artrating/

    شناسه مقاله=458335

    ArticleTitle=مبانی برنامه نویسی پوسته

    • آموزش

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

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

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

    این مقاله به محیط‌های یونیکس مانند کامل، با پوسته کاملاً کاربردی (ترجیحا 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" را امتحان کنید
    آیا آن را کاملاً دستی وارد کرده اید یا از مقاله کپی کرده اید؟ مطمئن شوید که می توانید آن را کپی کنید، آن را در ترمینال Paste کرده و اجرا کنید.

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

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

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

    در حین تحقیق در مورد تاریخچه فرمان، قبلاً با این واقعیت مواجه شده اید که دستور 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 akira 198 فوریه 13 11:48 Makefile -rw-rw-r-- 1 akira akira 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.

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

    لازم به ذکر است که در موارد انطباق اسامی از کدام دسته کمک باید نشان داده شود. به عنوان مثال، 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 "(چاپ $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 کار کنند را بیان می کنم.

    مترجم فرمان

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

    مفسر فرمان command.com در سیستم عامل های ویندوز 9x گنجانده شده است، csh، ksh و سایرین پوسته های محبوب یونیکس در ویندوز NT هستند.

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

    کارکرد

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

    فراخوانی به سیستم یا برنامه کاربردی و همچنین ساختارهای کنترلی به عنوان دستور تفسیر می شوند. علاوه بر این، پوسته مسئول گسترش الگوهای نام فایل و تغییر مسیر و اتصال ابزار I/O است.

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

    مفسر دستور استاندارد

    پیاده سازی ها و در دسترس بودن

    جایگزین، گزینه ها

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

    برخی از سیستم‌عامل‌های جایگزین دارای مفسر زبان دسته‌ای خود هستند (مانند زبان فایل دسته‌ای Microsoft Windows NT، زبان OS/2 و غیره)

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

    پوسته گرافیکی

    پوسته های گرافیکی برای ویندوز OC

    نسخه های اخیر ویندوز از Windows Explorer IDE به عنوان پوسته خود استفاده می کنند. Windows Explorer یک محیط مدیریت بصری است که شامل دسکتاپ، منوی شروع، نوار وظیفه و ویژگی های مدیریت فایل است. نسخه های اولیه ویندوز 3.xx شامل یک مدیر برنامه به عنوان یک پوسته گرافیکی است.

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

    • پوسته استون
    • BB4Win
    • BBlean
    • قاهره (در دست توسعه)
    • کروما
    • Emerge Desktop
    • ژئوشل
    • Packard Bell Navigator
    • مدیر برنامه
    • دسکتاپ ایمن
    • SharpE
    • دسکتاپ Talisman
    • گام برد
    • مایکروسافت باب

    همچنین ببینید

    بنیاد ویکی مدیا 2010 .

    ببینید "Command Shell" در فرهنگ های دیگر چیست:

      - (انگلیسی پوسته یونیکس، اغلب فقط "شل" یا "sh") یک مفسر فرمان مورد استفاده در سیستم عامل های خانواده یونیکس، که در آن کاربر ... ویکی پدیا

      این اصطلاح معانی دیگری دارد، به آرزو مراجعه کنید. wish (Windowing Shell) یک پوسته دستوری ساده اسکریپت یا تعاملی یونیکس برای X Window System و Mac OS X است. توانایی کنترل اجزای ... ... ویکی پدیا را در اختیار کاربران قرار می دهد.

      - ... ویکیپدیا

      درخواست مترجم خط فرمان به اینجا هدایت می شود. یک مقاله جداگانه با موضوع "مترجم خط فرمان" مورد نیاز است. ظاهر پوسته (eng. Co ... ویکی پدیا

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

      پوسته یونیکس (پوسته انگلیسی یونیکس، اغلب فقط "شل" یا "sh") یک مفسر دستوری است که در سیستم عامل های خانواده پوسته های سازگار POSIX استفاده می شود که قدمت آن به پوسته Bourne که در نسخه 7 یونیکس ظاهر شد، برمی گردد. محتویات 1.. . ... ویکیپدیا

      پوسته یونیکس (پوسته انگلیسی یونیکس، اغلب فقط "شل" یا "sh") یک مفسر دستوری است که در سیستم عامل های خانواده پوسته های سازگار POSIX استفاده می شود که قدمت آن به پوسته Bourne که در نسخه 7 یونیکس ظاهر شد، برمی گردد. محتویات 1.. . ... ویکیپدیا

      پوسته یونیکس (پوسته انگلیسی یونیکس، اغلب فقط "شل" یا "sh") یک مفسر دستوری است که در سیستم عامل های خانواده پوسته های سازگار POSIX استفاده می شود که قدمت آن به پوسته Bourne که در نسخه 7 یونیکس ظاهر شد، برمی گردد. محتویات 1.. . ... ویکیپدیا

    کتاب ها

    • اسکریپت های پوسته لینوکس، OS X و یونیکس. راهنما، تیلور دیو. اسکریپت های شل از زمان اولین کامپیوترها به مدیران سیستم و برنامه نویسان کمک می کنند تا کارهای روتین را خودکار کنند. از زمان انتشار اولین…

    همانطور که در بالا ذکر شد، برای ساخت الگوریتم های دلخواه، داشتن عملگرهای بررسی شرایط ضروری است. پوسته ضربه شدیداز بیانیه های انتخابی پشتیبانی می کند اگرسپسدیگری و موردو همچنین عملگرهای حلقه برای,در حالی که, تا زمان، آن را به یک زبان برنامه نویسی قدرتمند تبدیل کرده است.

    5.8.1 اپراتورها اگرو تست(یا )

    ساخت اپراتور شرطی به شکل کمی ساده شده به این صورت است:

    if list1 سپس list2 else list3 fi

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

    اپراتور اگرمقدار بازگردانده شده توسط دستورات از را بررسی می کند لیست 1. اگر چندین دستور در این لیست وجود داشته باشد، مقداری که توسط آخرین دستور در لیست برگردانده شده است بررسی می شود. اگر این مقدار 0 باشد، دستورات از لیست 2; اگر این مقدار غیر صفر باشد، دستورات از لیست 3. مقدار بازگردانده شده توسط چنین دستور ترکیبی اگر، با مقدار بازگردانده شده توسط آخرین دستور در دنباله در حال اجرا مطابقت دارد.

    فرمت فرمان کامل اگربه نظر می رسد:

    if list then list [ elif list then list ] ... [ else list ] fi

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

    به عنوان بیانی که بلافاصله بعد از آن می آید اگریا elif، دستور اغلب استفاده می شود تستکه می توان آن را با کروشه نیز نشان داد. تیم تستبرخی از عبارت ها را ارزیابی می کند و در صورت درست بودن عبارت 0 و در غیر این صورت 1 را برمی گرداند. عبارت به برنامه منتقل می شود تستبه عنوان یک استدلال به جای نوشتن

    بیان تست،

    می توانید عبارت را در پرانتز قرار دهید:

    [ اصطلاح ].

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

    در خاتمه، مثالی از استفاده از عملگر ارائه می دهیم اگر:

    اگر [-e textmode2.htm]; سپس

    حالت متنی ls*

    دیگر

    pwd

    در مورد اپراتور تست(یا […]) باید صحبت خاصی داشته باشیم.

    5.8.2 اپراتور تستو مشروط

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

      یک فایل

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

      فایل B

    درست است اگر فایلوجود دارد و یک فایل ویژه دستگاه بلوک است.

      فایل C

    درست است اگر فایلوجود دارد و یک فایل ویژه دستگاه کاراکتر است.

      فایل D

    درست است اگر فایلوجود دارد و یک دایرکتوری است.

      فایل E

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

      فایل F

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

      فایل G

    درست است اگر نام فایل باشد فایلوجود دارد و بیت تغییر گروه آن تنظیم شده است.

      فایل H یا فایل -L

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

      فایل K

    درست است اگر نام فایل باشد فایلوجود دارد و روی بیت "چسبنده" تنظیم شده است.

      فایل P

    درست است اگر نام فایل باشد فایلوجود دارد و هست لوله به نام(FIFO).

      فایل R

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

      فایل S

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

      Tfd

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

      فایل u

    درست است اگر نام فایل باشد فایلوجود دارد و دارای تنظیم بیت کاربر تغییر است.

      فایل w

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

      فایل X

    درست است اگر نام فایل باشد فایلوجود دارد و قابل اجرا است.

      درباره فایل

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

      فایل G

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

      فایل S

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

      فایل N

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

      file1 -nt file2

    درست است اگر فایل فایل 1دارای زمان اصلاح دیرتر از file2.

      file1 -ot file2

    درست است اگر فایل فایل 1بزرگتر از file2.

      file1 -ef file2

    درست است اگر فایل ها فایل 1و file2شماره دستگاه و inode یکسانی دارند(اینود).

      درباره Optname

    اگر گزینه shell فعال باشد درست است نام انتخابی. برای توضیحات به صفحه bash man مراجعه کنید.

      Zstring

    اگر طول رشته صفر باشد درست است.

      رشته N

    اگر طول رشته غیر صفر باشد درست است.

      string1 == string2

    اگر رشته ها مطابقت داشته باشند درست است. بجای == می تواند به کار رود = .

      string1 !== string2

    درست است اگر رشته ها مطابقت نداشته باشند.

      رشته 1< string2

    درست است اگر رشته رشته 1از نظر لغوی مقدم بر رشته است رشته 2(برای منطقه فعلی).

      string1 > string2

    درست است اگر رشته رشته 1از نظر لغوی بعد از رشته می آید رشته 2(برای منطقه فعلی).

      arg1 OP arg2

    اینجا OP- اوه سپس یکی از عملیات مقایسه حسابی: معادله(برابر) -نه(نا برابر)، -آن(کمتر از)، -le(کمتر یا مساوی) -gt(بیشتر)، -GE(بیشتر یا مساوی). از اعداد صحیح مثبت یا منفی می توان به عنوان آرگومان استفاده کرد.

    از این عبارات شرطی ابتدایی، می توانید عبارات پیچیده دلخواه خود را با استفاده از عملیات منطقی NEGATIVE، AND و OR بسازید:

      !(اصطلاح)

    عملگر نفی بولی

      express1 -a express2

    عملگر بولی و(و). اگر هر دو عبارت درست باشند درست است.

      بیان1 -o بیان2

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

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

    5.8.3 اپراتور مورد

    فرمت اپراتور مورداست:

    کلمه موردی در لیست [ [(] الگوی [ | الگوی ] ...) ;; ] ... اساک

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

    مثال عبارت case زیر از اسکریپت سیستم /etc/rc.d/rc.sysinit گرفته شده است.

    مورد "$UTC" در

    بله | درست است)

    CLOCKFLAGS="$CLOCKFLAGS -u";

    CLOCKDEF="$CLOCKDEF (utc)";

    نه | نادرست)

    CLOCKFLAGS="$CLOCKFLAGS --localtime";

    CLOCKDEF="$CLOCKDEF (محلی)";

    اساک

    اگر متغیر بله یا true، سپس اولین جفت دستور اجرا می شود و اگر مقدار آن no یا false باشد، جفت دوم اجرا می شود.

    5.8.4 اپراتور انتخاب کنید

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

    انتخاب نام [word; ]do list انجام شده

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

    در اینجا یک اسکریپت کوچک است:

    #!/bin/sh

    echo "کدام سیستم عامل را ترجیح می دهید؟"

    var را در "Linux" "Gnu Hurd" "Free BSD" "Other" انتخاب کنید. انجام دادن

    زنگ تفريح

    انجام شده

    echo "آیا $var را انتخاب می کنید"

    چه سیستم عاملی را ترجیح می دهید؟
    1) لینوکس
    2) GnuHurd
    3) FreeBSD
    4) دیگر
    #?

    هر یک از 4 عدد پیشنهادی (1،2،3،4) را فشار دهید. برای مثال، اگر عدد 1 را وارد کنید، پیام زیر را مشاهده خواهید کرد:

    "شما لینوکس را انتخاب می کنید"

    5.8.5 اپراتور برای

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

    برای نام در کلمات لیست انجام شد.

    قوانین ساخت لیست دستورات ( فهرست) مانند عملگر هستند اگر.

    مثال. اسکریپت زیر فایل های foo_1، foo_2 و foo_3 را ایجاد می کند:

    برای یک در 1 2 3 ; انجام دادن

    foo_$a را لمس کنید

    انجام شده

    به طور کلی، دستور for دارای فرمت زیر است:

    برای نام [در کلمه; ]do list انجام شده

    ابتدا کلمه نازل می شود کلمهبا توجه به قوانین بسط بیان بالا. سپس یک متغیر ناممقادیر حاصل به نوبه خود اختصاص داده می شوند و هر بار لیست دستورات l ist. اگر " در کلمه" حذف می شود، سپس لیست دستورات فهرستبرای هر پارامتر موقعیتی که داده می شود یک بار اجرا می شود.

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

    برای یک دلار (دنباله 1 10) ; انجام دادن

    cat file_$a

    انجام شده

    این دستور محتویات 10 فایل را روی صفحه نمایش می دهد: " file_1، ...، "file_10".

    5.8.6 اپراتورها در حالی کهو تا زمان

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

    در حالی که list1 انجام لیست2 انجام شد.

    در حالی که [-d mydirectory]; انجام دادن

    ls -l mydirectory >> logfile

    echo -- SEPARATOR -- >> logfile

    خواب 60

    انجام شده

    چنین برنامه ای تا زمانی که دایرکتوری وجود دارد، هر دقیقه محتویات دایرکتوری "mydirectory" را ثبت می کند.

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

    تا لیست1 انجام لیست2 انجام شود.

    تفاوت این است که نتیجه هنگام اجرای لیستی از دستورات برمی گردد لیست 1، با نفی گرفته می شود: لیست 2در صورتی اجرا می شود که آخرین دستور موجود در لیست باشد لیست 1وضعیت خروج غیر صفر را برمی گرداند.

    5.8.7 توابع

    نحو

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

    نام تابع () (لیست)

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

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

    استدلال ها

    هنگامی که یک تابع برای اجرا فراخوانی می شود، آرگومان های تابع تبدیل می شوند پارامترهای موقعیتی(پارامترهای موقعیتی)در طول اجرای تابع آنها به عنوان نامگذاری شده اند $n، جایی که nتعداد آرگومانی است که می خواهیم به آن دسترسی داشته باشیم. شماره گذاری آرگومان ها از 1 شروع می شود، بنابراین $1 اولین استدلال است. همچنین می‌توانیم همه استدلال‌ها را به‌طور هم‌زمان با $* و تعداد آرگومان های استفاده شده $# . پارامتر موقعیت 0 تغییر نمی کند.

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

    متغیرهای محلی (محلی)

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

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

    seq()

    محلی I=$1;

    در حالی که [ $2 != $I ]; انجام دادن

    echo -n "$I";

    I=$(($I + 1))

    انجام شده؛

    اکو 2 دلار

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

    تابع فاکتوریل حقیقت

    یک مثال دیگر:

    حقیقت()

    اگر [ $1 = 0 ]; سپس

    echo1;

    دیگر

    echo $(($1 * $(واقعیت $(($1 - 1)))))

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

    V. Kostromin (kos در rus-linux dot net) - 5.8. Shell به عنوان یک زبان برنامه نویسی

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

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

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

    شکل 3.1. رابط خط فرمان

    دسترسی همزمان به سیستم

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

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

    که در سیستم عاملسوئیچ لینوکس بین کنسول های مجازی در حالت متنی با استفاده از یک کلید ترکیبی انجام می شود alt-F1,alt-F2و غیره در این مورد، هر کنسول مجازی با یک نام خاص مشخص می شود: "tty1"، "tty2"، و غیره. هر ترکیب دارای یک کنسول مجازی شماره گذاری شده مربوط به آن است. هر کدام از این کنسول ها با کنسول های خود مرتبط هستند پایانه، که با یک فایل دستگاه با نام مناسب مشخص می شود (به عنوان مثال /dev/tty1).

    نسخه های مدرن یونیکس رابط های گرافیکی کاربر را در اختیار کاربران قرار می دهد که گزینه های خط فرمان را نیز ارائه می دهد. این قابلیت با استفاده از پایانه های گرافیکی- برنامه های ویژه ای که ترمینال متنی را در یک پنجره گرافیکی شبیه سازی می کنند.

    همچنین می توان چندین زیرسیستم گرافیکی را راه اندازی کرد، سپس جابجایی بین آنها مانند جابجایی بین کنسول های مجازی - یک ترکیب کلید انجام می شود. ctrl-alt-F1.

    شکل 3.2. کنسول های مجازی و گرافیکی

    هر دستگاه ترمینال خود را دارد ممکن هاورودی و خروجی اطلاعات نمونه هایی از این قابلیت ها عبارتند از: تعداد رنگ های نمایشگر، قابلیت حرکت مکان نما و تغییر اندازه صفحه نمایش، مجموعه کاراکترهای کنترلی و غیره. پایانه ها بر اساس تقسیم می شوند. انواع: مجموعه ای از ویژگی های تنظیم شده در یک فایل پیکربندی خاص. نمونه هایی از انواع عبارتند از: tty (تله تایپ) یا xterm (ترمینال گرافیکی). نوع ترمینال به صراحت در نام دستگاه ترمینال مشخص شده است (به عنوان مثال /dev/tty1). تمام تنظیمات نوع ترمینال در پوشه /etc/termcap قرار دارند.