دستور راه اندازی پس زمینه لینوکس. نحوه اجرای یک برنامه در لینوکس حذف مشاغل معلق

وظایف و فرآیندها

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

/home/larry# ps PID TT STAT TIME Command 24 3 S 0:03 (bash) 161 3 R 0:00 ps /home/larry#

لطفا توجه داشته باشید که به طور پیش فرض دستور psلیستی از آن دسته از فرآیندهایی را نشان می دهد که متعلق به کاربری است که آن را راه اندازی کرده است. برای مشاهده تمام فرآیندهای در حال اجرا در سیستم، باید دستور را صادر کنید ps -a . اعداد پردازش(شناسه فرآیند یا PID)، که در ستون اول فهرست شده اند، اعداد منحصر به فردی هستند که سیستم به هر فرآیند در حال اجرا اختصاص می دهد. آخرین ستون با عنوان COMMAND نام فرمان در حال اجرا را نشان می دهد. در این مورد، لیست شامل فرآیندهایی است که توسط کاربر لری راه اندازی شده است. بسیاری از فرآیندهای دیگر در سیستم در حال اجرا هستند، آنها لیست کاملبا دستور قابل مشاهده است ps-aux. با این حال، در بین دستورات اجرا شده توسط کاربر larry، فقط bash (پوسته فرمان برای کاربر larry) و خود فرمان وجود دارد. ps. پوسته bash را می توان مشاهده کرد که همزمان با دستور اجرا می شود ps. زمانی که کاربر دستور را وارد کرد ps، پوسته bash شروع به اجرای آن کرد. بعد از تیم psکار خود را به پایان رسانده است (جدول فرآیند نمایش داده می شود)، کنترل به فرآیند bash برمی گردد. سپس پوسته bash یک اعلان نمایش می دهد و منتظر یک دستور جدید است.

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

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

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

حالت پیش زمینه و پس زمینه

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

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

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

دو سیگنال - شماره 9 ( کشتن) و 19 ( متوقف کردن) - همیشه توسط سیستم پردازش می شود. اولین مورد از آنها برای از بین بردن این روند مورد نیاز است (از این رو نام). علامت متوقف کردن تعلیق می کند process: در این حالت، فرآیند از جدول پردازش حذف نمی شود، اما تا زمانی که سیگنال 18 را دریافت نکند، اجرا نمی شود. ادامه) - پس از آن به کار خود ادامه می دهد. در پوسته فرمان لینوکس، سیگنال متوقف کردنرا می توان با استفاده از یک دنباله فرار به فرآیند فعال منتقل کرد Ctrl -ز .

سیگنال شماره 15 ( مدت، اصطلاح) باعث قطع شدن کار می شود. در وقفه(وقفه) روند کار می میرد. کارها معمولاً با یک توالی فرار قطع می شوند Ctrl -سی. هیچ راهی برای بازیابی یک کار قطع شده وجود ندارد. همچنین باید توجه داشته باشید که برخی از برنامه ها سیگنال را قطع می کنند مدت، اصطلاح(با استفاده از یک کنترلر)، به طوری که فشار دادن یک کلید ترکیبی Ctrl -سی(o) ممکن است فرآیند را فوراً متوقف نکند. این کار به این منظور انجام می شود که برنامه بتواند آثاری از کار خود را قبل از اتمام آن از بین ببرد. در عمل برخی از برنامه ها را نمی توان به این شکل قطع کرد.

انتقال به پس زمینه و از بین بردن مشاغل

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

/home/larry# بله y y y y y

توالی چنین خطوطی به طور نامحدود ادامه خواهد داشت. شما می توانید این فرآیند را با ارسال یک سیگنال وقفه، یعنی با فشار دادن، از بین ببرید Ctrl -سی. حالا بیایید کارها را متفاوت انجام دهیم. برای جلوگیری از نمایش این توالی بی پایان روی صفحه، خروجی استاندارد دستور yes را به /dev/null هدایت می کنیم. همانطور که ممکن است بدانید، دستگاه /dev/null به عنوان یک "سیاه چاله" عمل می کند: تمام داده های ارسال شده به این دستگاه از بین می روند. با استفاده از این دستگاه، خلاص شدن از شر خروجی بیش از حد برخی از برنامه ها بسیار راحت است.

/home/larry# بله > /dev/null

حالا چیزی روی صفحه نمایش داده نمی شود. با این حال، درخواست پوسته نیز بازگردانده نمی شود. این به این دلیل است که دستور yes همچنان در حال اجرا است و پیام های خود را شامل حروف y به /dev/null ارسال می کند. شما همچنین می توانید این وظیفه را با ارسال سیگنال وقفه از بین ببرید.

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

یکی از راه‌های قرار دادن یک فرآیند در پس‌زمینه، اضافه کردن یک & به انتهای دستور است. مثال:

/home/larry# بله > /dev/null & + 164 /home/larry#

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

بنابراین اکنون یک فرآیند بله داریم که در پس‌زمینه اجرا می‌شود و به طور مداوم یک جریان از yها را به دستگاه /dev/null ارسال می‌کند. برای اطلاع از وضعیت این فرآیند، باید دستور را اجرا کنید شغل ها، که یک دستور داخلی پوسته است.

/home/larry# jobs + در حال اجرا بله >/dev/null & /home/larry#

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

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

حالا بیایید دستور را وارد کنیم شغل هادوباره برای بررسی نتیجه عمل قبلی:

/home/larry# jobs خاتمه یافت بله >/dev/null

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

شما همچنین می توانید یک کار را با استفاده از شماره شناسایی فرآیند (PID) بکشید. این شماره همراه با شماره شناسایی شغلی، هنگام شروع کار نشان داده می شود. در مثال ما، مقدار PID 164 بود، بنابراین دستور 164 را بکشمعادل دستور خواهد بود کشتن % 1. هنگام استفاده از PID به عنوان آرگومان برای فرمان kill، نیازی به وارد کردن کاراکتر "%" نیست.

توقف و از سرگیری کارها

بیایید ابتدا فرآیند را با دستور yes در پیش زمینه شروع کنیم، همانطور که قبلا انجام شد:

/home/larry# بله > /dev/null

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

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

/home/larry# بله > /dev/null Ctrl -ز+ متوقف شد بله >/dev/null /home/larry#

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

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

/home/larry# fg بله >/dev/null

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

/home/larry# bg + بله $>$/dev/null & /home/larry#

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

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

بین مشاغل پس زمینه و مشاغل معلق تفاوت زیادی وجود دارد. یک کار معلق کار نمی کند - هیچ پولی برای آن خرج نمی شود قدرت پردازشپردازنده این کار هیچ عملی را انجام نمی دهد. یک کار معلق مقدار مشخصی از RAM کامپیوتر را اشغال می کند؛ پس از مدتی، هسته این قسمت از حافظه را به بیرون پمپ می کند. HDD « poste restante" در مقابل، یک کار پس‌زمینه در حال اجرا است، از حافظه استفاده می‌کند، و کارهایی را انجام می‌دهد که ممکن است بخواهید انجام دهید، اما ممکن است همزمان روی برنامه‌های دیگری کار کنید.

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

/home/larry# بله و

در اینجا خروجی استاندارد به دستگاه /dev/null هدایت نشده است، بنابراین یک جریان بی پایان از کاراکترهای y روی صفحه چاپ می شود. این موضوع به دلیل ترکیب کلید نمی تواند متوقف شود Ctrl -سیبر مشاغل در پس زمینه تأثیر نمی گذارد. برای متوقف کردن این خروجی، باید از دستور استفاده کنید fg، که وظیفه را در پیش زمینه قرار می دهد و سپس با یک ترکیب کلید کار را از بین می برد Ctrl -سی .

اجازه دهید یک نکته دیگر را بیان کنیم. معمولا توسط تیم fgو تیم bgبر روی مشاغلی که اخیراً به حالت تعلیق درآمده اند تأثیر می گذارد (اگر دستور را وارد کنید، این مشاغل با علامت + در کنار شماره شغل مشخص می شوند. شغل ها). اگر یک یا چند کار به طور همزمان در حال اجرا هستند، مشاغل را می توان با تعیین دستورات به عنوان آرگومان در پیش زمینه یا پس زمینه قرار داد. fgیا دستورات bgشماره شناسایی آنها (شناسه شغلی). مثلا دستور fg % 2کار شماره 2 را در جلو و فرمان قرار می دهد bg % 3شغل شماره 3 را در پس زمینه قرار می دهد. از PID به عنوان آرگومان فرمان استفاده کنید fgو bgممنوع است.

علاوه بر این، برای آوردن یک کار به پیش زمینه، می توانید به سادگی شماره آن را مشخص کنید. بله تیم %2 معادل دستور خواهد بود fg % 2 .

مهم است که به یاد داشته باشید که تابع کنترل شغل متعلق به پوسته است. تیم ها fg , bgو شغل هاهستند تیم های داخلیپوسته ها اگر به دلایلی از پوسته فرمانی استفاده می کنید که از توابع مدیریت شغل پشتیبانی نمی کند، این دستورات (و مشابه) را در آن پیدا نخواهید کرد.

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

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

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

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

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

باز کردن آرشیو در پس‌زمینه

$ tar -czf home.tar.gz .

کلیک Cntr+Z، سپس دستورات را وارد کنید

$bg$ شغل

راه دوم اضافه کردن یک & در انتهای دستور است که به سیستم می گوید دستور را در پس زمینه اجرا کند.

$ tar -czf home.tar.gz . &$ شغل

این روش به فرآیندها اجازه می دهد تا در پس زمینه اجرا شوند، با این حال، STDIN, STDOUT, STDERRهنوز به ترمینال متصل هستند. حالا بیایید مطمئن شویم که فرآیند حتی زمانی که ترمینال بسته است اجرا می شود.

اجرای یک فرآیند پس از بستن پنجره ترمینال
برای ادامه دادن فرآیند حتی پس از بستن پنجره ترمینال، می توانیم از دستور استفاده کنیم انکار کردن. این فرآیند را از پوسته پنجره ترمینال "خارج" می کند و پس از آن حتی پس از بسته شدن پنجره کنسول اجرا می شود.
بیایید به مثالی از استفاده از دستور استاندارد نگاه کنیم rsync، بیایید سعی کنیم آن را در پس‌زمینه اجرا کنیم و فرآیند را از ترمینال جدا کنیم.

$ sudo rsync Templates/* /var/www/html/ & $ jobs $ disown -h %1 $ jobs

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

$ nohup tar -czf iso.tar.gz الگوها/* و مشاغل $

چگونه یک فرآیند را از ترمینال کنترل لینوکس جدا کنیم
برای جدا کردن کامل فرآیند از ترمینال کنترل، می‌توانید از دستوری نیز استفاده کنید که هنگام استفاده از رابط کاربری گرافیکی (GUI) به عنوان مثال مرورگر فایرفاکس، مؤثر باشد.

فایرفاکس $/dev/null &

که در سیستم لینوکس(و تقریباً در تمام سیستم های یونیکس) /dev/null یک فایل دستگاه خاص است که به آن "دستگاه تهی" نیز می گویند. نوشتن بر روی آن بدون توجه به مقدار اطلاعات ثبت شده با موفقیت انجام می شود؛ خواندن از آن معادل خواندن انتهای فایل (EOF) است.

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

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

سیگنال های لینوکس

در لینوکس، بیش از سه دوجین سیگنال وجود دارد که توسط سیستم یا برنامه های کاربردی تولید می شود. در اینجا لیستی از متداول ترین موارد استفاده شده است که مطمئناً هنگام توسعه اسکریپت ها مفید خواهند بود خط فرمان.
کد سیگنال
نام
شرح
1
SIGHUP
بستن ترمینال
2
SIGINT
سیگنال توقف فرآیند توسط کاربر از ترمینال (CTRL + C)
3
SIGQUIT
سیگنال توقف فرآیند توسط کاربر از ترمینال (CTRL + \) با تخلیه حافظه
9
SIGKILL
خاتمه بی قید و شرط فرآیند
15
SIGTERM
سیگنال درخواست خاتمه فرآیند
17
SIGSTOP
اجبار یک فرآیند به تعلیق اما خاتمه نیافته است
18
SIGTSTP
توقف یک فرآیند از ترمینال (CTRL+Z) اما خاموش نشدن
19
SIGCONT
اجرای فرآیندی که قبلا متوقف شده بود را ادامه دهید

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

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

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

ارسال سیگنال به اسکریپت ها

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

خاتمه دادن به یک فرآیند

ترکیبی کلیدهای CTRL+C سیگنال SIGINT را تولید می کند و آن را به تمام فرآیندهای در حال اجرا در پوسته ارسال می کند و باعث خاتمه آنها می شود.

بیایید دستور زیر را در پوسته اجرا کنیم:

100 دلار خواب
پس از آن با کلید ترکیبی CTRL + C کار آن را کامل می کنیم.


یک فرآیند را از صفحه کلید خاتمه دهید

توقف موقت این روند

ترکیب کلید CTRL + Z سیگنال SIGTSTP را تولید می کند که فرآیند را به حالت تعلیق در می آورد اما آن را خاتمه نمی دهد. چنین فرآیندی در حافظه باقی می ماند و می توان کار آن را از سر گرفت. بیایید دستور را در پوسته اجرا کنیم:

100 دلار خواب
و با کلید ترکیبی CTRL + Z به طور موقت آن را متوقف کنید.


فرآیند را متوقف کنید

عدد در براکت مربع شماره کاری است که پوسته به فرآیند اختصاص می دهد. پوسته فرآیندهای در حال اجرا در آن را به عنوان کارهایی با اعداد منحصر به فرد در نظر می گیرد. اولین فرآیند شماره 1، دوم - 2 و غیره اختصاص داده می شود.

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

با دستور زیر می توانید کارهای معلق را مشاهده کنید:

Ps –l


فهرست وظیفه یا لیست کار

در ستون S که وضعیت فرآیند را نمایش می دهد، T برای فرآیندهای معلق نمایش داده می شود. این نشان می دهد که فرمان یا به حالت تعلیق درآمده یا در حالت ردیابی است.

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

تماس او به این شکل است:

ID process را بکش

رهگیری سیگنال

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

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

بیایید به مثالی نگاه کنیم که نشان می‌دهد چگونه دستور trap کدی را که باید اجرا شود و فهرستی از سیگنال‌ها را مشخص می‌کند که با فاصله‌ها از هم جدا شده‌اند و می‌خواهیم آنها را رهگیری کنیم. در این مورد فقط یک سیگنال است:

#!/bin/bash trap "echo " Trapped Ctrl-C"" SIGINT echo این یک اسکریپت آزمایشی است count=1 در حالی که [ $count -le 10 ] echo "Loop #$count" sleep 1 count=$(($ شمارش + 1)) انجام شد
دستور trap استفاده شده در این مثال خروجی می دهد پیام متنیهر زمان که سیگنال SIGINT را تشخیص دهد، که می تواند با فشار دادن Ctrl + C روی صفحه کلید تولید شود.


رهگیری سیگنال

هر بار که CTRL + C را فشار می دهید، اسکریپت به جای اینکه اجازه دهد پوسته آن را خاتمه دهد، دستور echo را که هنگام فراخوانی trace مشخص شده است، اجرا می کند.

هنگام فراخوانی فرمان trap می توانید سیگنال خروج اسکریپت را با استفاده از نام سیگنال EXIT رهگیری کنید:

#!/bin/bash trap "echo Goodbye..." EXIT count=1 while [ $count -le 5 ] echo "Loop #$count" sleep 1 count=$(($count + 1)) انجام شد


رهگیری سیگنال خروج اسکریپت

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

اصلاح سیگنال های رهگیری و لغو رهگیری

برای تغییر سیگنال های رهگیری شده توسط اسکریپت، می توانید دستور trap را با پارامترهای جدید اجرا کنید:

#!/bin/bash trap "echo "Ctrl-C is trapped." SIGINT count=1 while [ $count -le 5 ] echo "Loop #$count" sleep 1 count=$(($count + 1) ) done trap "echo "I modified trap!" SIGINT count=1 while [ $count -le 5 ] do echo "Second Loop #$count" sleep 1 count=$(($count + 1)) انجام شد


اصلاح رهگیری سیگنال

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

رهگیری سیگنال را نیز می توان با اجرای دستور trap، ارسال دو خط تیره و نام سیگنال لغو کرد:

#!/bin/bash trap "echo "Ctrl-C is trapped." SIGINT count=1 while [ $count -le 5 ] echo "Loop #$count" sleep 1 count=$(($count + 1) ) تله انجام شده -- SIGINT echo "من فقط تله را حذف کردم" count=1 در حالی که [ $count -le 5 ] echo "Second Loop #$count" sleep 1 count=$(($count + 1)) انجام شد
اگر اسکریپت قبل از لغو رهگیری سیگنالی دریافت کند، آن را همانطور که در آن مشخص شده است پردازش می کند تیم فعلیتله بیایید اسکریپت را اجرا کنیم:

$ ./myscript
و CTRL + C را روی صفحه کلید فشار دهید.


سیگنال قبل از لغو رهگیری قطع شد.

اولین فشار دادن CTRL + C در زمان اجرای اسکریپت، زمانی که رهگیری سیگنال در حال اجرا بود، رخ داد، بنابراین اسکریپت دستور echo اختصاص داده شده به سیگنال را اجرا کرد. پس از اینکه اجرا به دستور unhook رسید، دستور CTRL + C طبق معمول کار کرد و اسکریپت را خاتمه داد.

اجرای اسکریپت های خط فرمان در پس زمینه

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

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

#!/bin/bash count=1 در حالی که [ $count -le 10 ] خواب 1 count=$(($count + 1)) انجام شد
بیایید آن را با مشخص کردن کاراکتر علامت (&) بعد از نام اجرا کنیم:

$ ./myscipt &
این باعث می شود که به عنوان یک فرآیند پس زمینه اجرا شود.


اجرای یک اسکریپت در پس زمینه

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

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


فهرست فرآیندها

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

اگر بخواهید اسکریپت پس از بستن ترمینال به اجرای خود ادامه دهد چه؟

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

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

بیایید این تکنیک را هنگام اجرای اسکریپت خود اعمال کنیم:

Nohup./myscript &
این همان چیزی است که به ترمینال خروجی خواهد شد.


تیم نوهاپ

دستور nohup یک فرآیند را از ترمینال جدا می کند. این به این معنی است که فرآیند ارجاع به STDOUT و STDERR را از دست خواهد داد. برای اینکه داده های خروجی توسط اسکریپت از دست نرود، nohup به طور خودکار پیام هایی را که در STDOUT و STDERR می رسند به فایل nohup.out هدایت می کند.

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

مشاهده تکالیف

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

#!/bin/bash count=1 در حالی که [ $count -le 10 ] echo "Loop #$count" خواب 10 count=$(($count + 1)) انجام شد
بیایید آن را اجرا کنیم:

$ ./myscript
و با کلید ترکیبی CTRL + Z به طور موقت آن را متوقف کنید.


اجرای و مکث یک اسکریپت

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

$ ./myscript > outfile &
با اجرای دستور jobs، اطلاعاتی در مورد اسکریپت تعلیق شده و اسکریپت در حال اجرا در پس زمینه خواهیم دید.


دریافت اطلاعات در مورد اسکریپت ها

سوئیچ -l هنگام فراخوانی دستور jobs نشان می دهد که ما به اطلاعاتی در مورد شناسه های فرآیند نیاز داریم.

شروع مجدد مشاغل معلق

برای راه اندازی مجدد اسکریپت در پس زمینه، می توانید از دستور bg استفاده کنید.

بیایید اسکریپت را اجرا کنیم:

$ ./myscript
CTRL + Z را فشار دهید که اجرای آن به طور موقت متوقف می شود. بیایید دستور زیر را اجرا کنیم:

$bg


دستور bg

اسکریپت اکنون در پس‌زمینه اجرا می‌شود.

اگر چندین کار تعلیق شده دارید، می توانید شماره کار را به دستور bg ارسال کنید تا یک کار خاص دوباره راه اندازی شود.

برای راه اندازی مجدد یک کار در حالت عادیاز دستور fg استفاده کنید:

برنامه ریزی برای اجرای اسکریپت ها

لینوکس چند راه برای اجرای اسکریپت های bash در یک زمان معین ارائه می دهد. اینها دستورات و زمانبندی کار cron هستند.

دستور at به شکل زیر است:

در زمان [-f نام فایل]
این دستور بسیاری از فرمت های زمانی را تشخیص می دهد.

  • استاندارد، به عنوان مثال ساعت و دقیقه را نشان می دهد - 10:15.
  • استفاده از نشانگرهای AM/PM، قبل یا بعد از ظهر، به عنوان مثال - 22:15.
  • استفاده از اسامی خاص مانند اکنون , ظهر , نیمه شب .
دستور at علاوه بر اینکه می‌تواند زمان اجرای یک کار را مشخص کند، می‌تواند با استفاده از یکی از فرمت‌های پشتیبانی‌شده آن، تاریخ ارسال کند.
  • یک قالب استاندارد تاریخ که در آن تاریخ با استفاده از الگوهای MMDDYY، MM/DD/YY، یا DD.MM.YY نوشته می شود.
  • یک نمایش متنی از تاریخ، به عنوان مثال، 4 ژوئیه یا 25 دسامبر، در حالی که می توان سال را مشخص کرد یا می توانید بدون آن انجام دهید.
  • ضبط مثل الان + 25 دقیقه.
  • مشاهده ضبط فردا ساعت 22:15
  • نوع ضبط 10:15 + 7 روز.
بیایید به این موضوع عمیق تر نرویم، بیایید به یک مورد استفاده ساده برای دستور نگاه کنیم:

$ در -f ./myscript اکنون


زمان بندی کارها با استفاده از دستور at

سوئیچ -M هنگام فراخوانی برای ارسال خروجی اسکریپت به آن استفاده می شود پست الکترونیک، اگر سیستم بر اساس آن پیکربندی شده باشد. در صورت ارسال پست الکترونیکغیر ممکن است، این سوئیچ به سادگی خروجی را سرکوب می کند.

برای مشاهده لیست کارهایی که در انتظار اجرا هستند می توانید از دستور atq استفاده کنید:


لیست وظایف معلق

حذف مشاغل معلق

دستور atrm به شما این امکان را می دهد که یک کار معلق را حذف کنید. هنگام تماس با آن، شماره کار را مشخص کنید:

18 دلار atrm


حذف یک شغل

اسکریپت ها را بر اساس برنامه اجرا کنید

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

لینوکس یک ابزار crontab دارد که به شما امکان می دهد اسکریپت هایی را که باید به طور منظم اجرا شوند، برنامه ریزی کنید.

Crontab در پس‌زمینه اجرا می‌شود و بر اساس داده‌های به اصطلاح جداول cron، کارهای زمان‌بندی شده را اجرا می‌کند.

برای مشاهده جدول کار cron موجود، از دستور زیر استفاده کنید:

$ crontab –l
هنگام برنامه‌ریزی یک اسکریپت برای اجرا بر اساس یک زمان‌بندی، crontab داده‌هایی را درباره زمانی که کار باید اجرا شود در قالب زیر می‌پذیرد:

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

دستور 30 ​​10 * * *
در اینجا، علامت عام "*" مورد استفاده برای فیلدهای روز ماه، ماه و روز هفته نشان می دهد که cron باید دستور را هر روز از هر ماه در ساعت 10:30 صبح اجرا کند.

برای مثال، اگر می خواهید اسکریپت هر دوشنبه در ساعت 4:30 بعد از ظهر اجرا شود، باید ورودی زیر را در جدول وظایف ایجاد کنید:

دستور 30 ​​16 * * 1
شماره گذاری روزهای هفته از 0 شروع می شود، 0 به معنای یکشنبه، 6 به معنای شنبه است. در اینجا یک مثال دیگر است. در اینجا دستور در ساعت 12 ظهر روز اول هر ماه اجرا می شود.

دستور 00 12 1 * *
ماه ها از 1 شروع می شوند.
برای افزودن ورودی به جدول، باید crontab را با سوئیچ -e فراخوانی کنید:

Crontab –e
سپس می توانید دستورات تولید برنامه را وارد کنید:

30 10 * * * /home/likegeeks/Desktop/myscript
به لطف این دستور، اسکریپت هر روز ساعت 10:30 فراخوانی می شود. اگر با خطای «منبع موقتاً در دسترس نیست» مواجه شدید، دستور زیر را به صورت روت اجرا کنید:

$ rm -f /var/run/crond.pid
می‌توانید راه‌اندازی دوره‌ای اسکریپت‌ها را با استفاده از cron حتی ساده‌تر با استفاده از چندین دایرکتوری خاص سازماندهی کنید:

/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
قرار دادن فایل اسکریپت در یکی از آنها باعث می شود که به ترتیب ساعتی، روزانه، هفتگی یا ماهانه اجرا شود.

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

می‌توانید راه‌اندازی اسکریپت‌ها را بر اساس رویدادهای مختلف، مانند ورود کاربر یا راه‌اندازی پوسته، خودکار کنید. می توانید در مورد فایل هایی که در چنین شرایطی پردازش می شوند مطالعه کنید. به عنوان مثال، این فایل ها عبارتند از:

$HOME/.bash_profile $HOME/.bash_login $HOME/.profile
برای اجرای یک اسکریپت در هنگام ورود، فراخوانی آن را در فایل .bash_profile قرار دهید.

در مورد اجرای اسکریپت ها هنگام باز کردن ترمینال چطور؟ فایل .bashrc به شما در سازماندهی این امر کمک می کند.

نتایج

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

خوانندگان عزیز! آیا از ابزارهایی برای برنامه‌ریزی اسکریپت‌های خط فرمان برای اجرا در یک زمان‌بندی استفاده می‌کنید؟ اگر بله، لطفاً در مورد آنها به ما بگویید.

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

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

فرمان و نام اسکریپت & /path/to/command arg1 arg2 & command-1 | command-2 arg1 & command-1 | command-2 -arg1 -arg2 >/path/to/output &

برای اجرای برنامه ها در پس زمینه بدون مسدود کردن پنجره ترمینال، باید از مربی ویژه "&" استفاده کنید. پس از مشخص کردن نام فرمان، گزینه‌ها و پارامترهای ورودی، این کاراکتر را در انتهای خط قرار دهید. که در نمای کلیاین دنباله را می توان به عنوان "command_name -option input_parameter &" وارد کرد.

ls ~/* > ~/test-file.txt &
18960

پس از فشار دادن دکمه Enter، برنامه به طور خودکار در پس زمینه شروع می شود. در این حالت، ترمینال خطی را با محتوای زیر نمایش می‌دهد «[task_number] process_identifier» و از شما می‌خواهد دستور جدیدی را وارد کنید.

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

دستور زیر را اجرا کنید:

نمونه ای از خروجی داده ها:

در حال اجرای find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
+ اجرای grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &

شناسه های سفارش کجا هستند

برای نمایش شناسه‌های پردازش برای شناسه‌های شغلی علاوه بر کست‌های استاندارد، گزینه -l را پاس کنید:

نمونه ای از خروجی داده ها:

7307 در حال اجرای Find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
+ 7324 اجرای grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &

برای نمایش فقط شناسه های پردازش، وارد کنید:

نمونه ای از خروجی داده ها:

اجرای دستورات در حال اجرا در پس زمینه را متوقف کنید

برای خاتمه دادن به اجبار یا با ظرافت یک فرآیند، از دستور kill استفاده کنید. نحو به شرح زیر است:

PID را بکش
کشتن -15 PID
کشتن -9 PID
فرآیند killall-Name-Here
killall -15 process-Name-Here
killall -9 process-Name-Here

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

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

find / -name .ini 2> ~/results.txt &
19090
fg 1
bash: fg: کار به پایان رسید
+ خروج 1 find / -name .ini 2> ~/results.txt

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

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

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

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

اکنون به سراغ راه اندازی برنامه ها می رویم.

اجرای برنامه ها در ترمینال

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

/path/to/file/programگزینه ها

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

توسعه دهندگان راه حلی را ارائه کرده اند. یک متغیر PATH ایجاد شد که تمام مسیرهای پوشه‌هایی را که معمولاً برنامه‌ها در آنها قرار دارند - /bin، /sbin، /usr/bin، /usr/sbin و غیره ذخیره می‌کند. با دستور زیر می توانید محتویات آن را مشاهده کنید:

وقتی نام یک برنامه را تایپ می کنید، سیستم در تمام پوشه ها از PATH فایل اجرایی با آن نام را جستجو می کند و اگر آن را پیدا کرد، آن را اجرا می کند. اگر چنین فایلی وجود نداشته باشد، پیام "command not found" نمایش داده می شود. بنابراین، برای راه اندازی یکی از برنامه های سیستم، فقط نام آن را تایپ کنید فایل اجرایی، مثلا:

و می توانید پارامترها را پس از یک فاصله ارسال کنید:

وقتی برنامه در این دایرکتوری ها نیست، باید مسیر کامل آن را مشخص کنید:

/usr/local/bin/ls1

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

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

variable_name = دستور مقدار

مثلا:

EDITOR=nano visudo

به طور پیش فرض، این دستور تنظیمات را در ویرایشگر Vim باز می کند، اما با این متغیر محیطیتنظیمات در ویرایشگر نانو باز می شود.

اجرای برنامه ها به عنوان کاربر دیگر

شما قبلاً می دانید که چگونه برنامه را در آن اجرا کنید ترمینال لینوکس، سایر کاربران چطور؟ در ویندوز، اجرای برنامه‌ها به‌عنوان یک مدیر کاملاً رایج است تا برنامه بتواند حقوق دسترسی بیشتری در سیستم به دست آورد. در لینوکس از ابزار sudo برای این کار استفاده می شود. نام او را می توان به عنوان رمزگشایی کرد سجادوگر تو ser انجام دادن- تغییر کاربر و اجرا به‌طور پیش‌فرض، ابزار دستوری را به‌عنوان superuser root اجرا می‌کند:

دستور sudo
سودو هوامی

اما با استفاده از گزینه -u، می توانید برنامه را همانطور که هر کاربری وارد سیستم شده است اجرا کنید:

دستور نام کاربری sudo -u
sudo -u postgres whoami

دستور whoami (who am I) نام کاربر فعلی را نمایش می دهد.

نحوه اجرای برنامه در پس زمینه

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

نام برنامه &

مثلا:

dd if=/dev/zero of=~/تعداد فایل=100000 و

سیستم PID، شناسه منحصربه‌فرد برنامه را خروجی می‌دهد که می‌توانید از آن برای بستن آن استفاده کنید:

نحوه اجرای اسکریپت در لینوکس

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

مترجم /path/to/file/programگزینه ها

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

python hellowrld.py

و برنامه های جاوا باید به این صورت راه اندازی شوند:

java -jar program.jar

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

یا فقط مسیر اسکریپت را تایپ کنید:

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

sudo chmod u+x ./script.sh

بنابراین، برای اکثر برنامه های تفسیر شده، اسکریپت های sh ساده ایجاد شده اند که می توانند به سرعت راه اندازی شوند.

اجرای برنامه های لینوکس در رابط کاربری گرافیکی

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

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

اجرای اسکریپت ها در رابط گرافیکی. می توانید تمام میانبرهای منو را در پوشه /usr/share/applications/ پیدا کنید. هر برنامه ای را می توان با دوبار کلیک کردن از اینجا راه اندازی کرد. اما بیایید ببینیم داخل میانبر چیست؛ برای انجام این کار، آن را در یک ویرایشگر متن باز کنید:


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

نتیجه گیری

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