terminal در لینوکس چیست و آشنایی با تاریخچه و جزئیات ترمینال لینوکس
لینوکس نیز مثل سیستم عامل های معروف Microsoft Windows و macOS دارای رابط کاربری گرافیکی است.
در این نوشته درباره رابط کاربری گرافیکی صحبت نمیشود بلکه با مفهوم ترمینال و کنسول در لینوکس آشنا خواهید شد.
در این آموزش با اصطلاحات console, tty, pty, ptm, pts و terminal در لینوکس بصورت کامل آشنا خواهید شد.
در ضمن می توانید از این لینک سایر آموزشهای لینوکس را مشاهده و مطالعه کنید.
مفهوم terminal
terminal از کلمه terminate می آید که پایان کار یا پایان فرایند ارتباطی را مشخص می کند.
در ادامه متوجه خواهید شد داستان جالب ترمینال یا terminal در لینوکس از کجا شروع شده است!
teletype
در سالهای بین 1830 تا 1830 میلادی ماشینهای teletypewriter یا teleprinter یا teletype یا TTY ساخته و توسعه داده شدند.
این ماشین تحریر الکترومکانیکی، پیامهای تایپ شده بوسیله صفحه کلید را از طریق سیم به مکانهای دور ارسال میکرد.
پیامها در مقصد بر روی کاغذ چاپ میشدند که انقلابی در تلگراف بود چون دیگر نیازی به Morse نبود.
رمزگذاری در teletype
پیام ها رمزگذاری و ارسال می شدند ، سپس دریافت ، رمزگشایی و چاپ می شدند.
چندین روش برای رمزگذاری و رمزگشایی پیام ها وجود داشت.
baud rate
یکی از معروفترین و پرکاربردترین آنها، baud rate است که توسط Emile Baudot در 1874 میلادی ثبت اختراع شد.
رمزگذاری کاراکتری baud rate مربوط به 89 سال قبل از رمزگذاری کاراکتری ASCII بوده است.
Baudot
رمزگذاری Baudot سرانجام به نزدیکترین مورد به یک استاندارد در رمزگذاری teleprinter تبدیل شد.
توسط اکثر سازندگان پذیرفته شد. طراحی سخت افزاری اصلی Baudot همانند کلیدهای پیانو فقط پنج کلید داشت.
اپراتور ملزم به یادگیری یک ترکیب کلید خاص برای هر حرف بود.
سرانجام ، سیستم رمزگذاری Baudot با طرح بندی صفحه کلید سنتی جفت شد.
ASCII
هنگامی که ASCII در سال 1963 ایجاد شد، توسط تولیدکنندگان teletype پذیرفته شد.
با وجود اختراع و استفاده گسترده از تلفن، انواع teletype هنوز کاربردی بودند.
Telex
Telex یک شبکه گسترده جهانی از انواع مختلف teletypes بود که اجازه ارسال پیامهای نوشتاری به سراسر جهان را میداد.
آنها وسیله اصلی انتقال پیام های نوشتاری در دوره پس از جنگ جهانی دوم تا زمان رونق دستگاه fax در دهه 1980 بودند.
کامپیوترها نیز در حال پیشرفت بودند. آنها قادر به تعامل با کاربران در زمان واقعی و پشتیبانی از چندین کاربر بودند.
روش دسته ای قدیمی کار ناکافی بود. مردم نمی خواستند 24 ساعت یا بیشتر منتظر نتایج خود باشند.
ساختن کارتهای پانچ شده و انتظار ۲۴ ساعته برای نتایج دیگر قابل قبول نبود.
به دستگاهی با کارایی بالا نیاز داشتند که بتوانند دستورالعملها را وارد کنند و نتیجه را برای آنها ارسال کند.
استفاده مجدد از Teletype
teletype بعنوان یک دستگاه ورودی/خروجی بهترین گزینه بود.
این وسیله ای بود که اجازه می داد پیام ها تایپ، رمزگذاری، ارسال، دریافت، رمزگشایی و چاپ شوند.
چه اهمیتی برای teletype داشت اگر دستگاهی که در انتهای اتصال قرار داشت از نوع teletype نباشد ؟
مهم این بود که teletype با همان زبان رمزگذاری با دستگاه انتهای اتصال صحبت میکرد و میتوانست پیام را دریافت و ارسال کند.
البته دستگاه مقصد نیز کم و بیش از یک صفحه کلید استاندارد استفاده می کرد.
console
در آن دوران teletype وسیله پیش فرض برای تعامل با کامپیوترهای mainframe و mini شد.
سرانجام دستگاه های الکترومکانیکی با دستگاههای الکترونیکی شبیه سازی شده جایگزین شدند.
در این دستگاهها، لامپ پرتوی کاتدی یا Cathode Ray Tube (CRT) جایگزین کاغذ لوله ای یا همان paper rolls شدند.
آنها در هنگام ارسال پاسخ از کامپیوتر نمی لرزند در صورتی که در دستگاههای الکترومکانیکی لرزش وجود داشت.
قابلیتهایی مثل حرکت موس داخل صفحه نمایش، پاک کردن صفحه و پررنگ کردن متن که تا آن زمان غیرممکن بودِ، امکانپذیر شد.
DEC VT05 که video terminal است نمونه اولیه teletype مجازی بود در سال 1974 میلادی توسط شرکت Digital Equipment Corporation معرفی شد.
DEC VT100 معروف ترین و پرفروش ترین video terminal بود که در سال 1978 میلادی معرفی شد.
terminal در لینوکس
در محیط دسکتاپ های سیستم عامل لینوکسی و شبه لینوکسی مثل Mac، پنجره terminal در لینوکس و برنامه های کاربردی مثل Xterm و Konsole نمونه هایی از teletype مجازی هستند که بصورت نرمافزاری شبیه سازی شده اند.
tty در ترمینال لینوکس
در لینوکس، tty، اتصالهای مستقیم به کامیوتر مثل اتصال موس و کیبورد از طریق پورتهای سریال را نمایش میدهد.
اتصال هایی که در سخت افزار شبیه سازی شده اند.
tty کوتاه شده کلمه teletype میباشد.
زمانی که در دسکتاپ یا محیط گرافیکی لینوکس هستید با فشرده ctrl + alt + F1 به tty1 متصل میشوید.
زدن ctrl + alt + F2 برای اتصال به tty2 و ctrl + alt + F3 برای اتصال به tty3 و … با توجه به تنظیمات کرنل امکانپذیر است.
مثال
در تصویر زیر که مربوط به terminal در لینوکس است یک اتصال tty با نام tty1 وجود دارد.
این اتصال مربوط به پروسه login به ترمینال و زمان شروع اتصال 2021-01-01 22:13 بوده است.
id فرایند یا (process id ( pid آن 811 میباشد و id=tty1 برای توضیحات بیشتر استفاده شده است.
1 |
who -Hau |
اطلاعات بیشتر درباره فرایند یا process در ترمینال لینوکس
در تصویر زیر میتوان اطلاعات بیشتری از فرایند 811 را مشاهده کرد که نام process یا فرایند آن agetty است.
1 |
cat /proc/811/status |
دستور tty در ترمینال لینوکس
با دستور tty می توان نام فایل ترمینال متصل شده به standard input یا ورودی استاندارد را مشاهده کرد.
pty و ptm و pts در ترمینال لینوکس
در لینوکس، pts، اتصال های غیر مستقیم به کامپیوتراز طریق یک سرویس لینوکسی را نمایش میدهد.
اتصال هایی که در نرم افزار شبیه سازی شده اند.
برای مثال، اتصالی که از طریق سرویسهایی مثل SSH وFTP و TELNET به کامپیوتر انجام میشود.
مثال دیگر برای زمانی است که در محیط گرافیکی لینوکس یک ترمینال را باز میکنید.
pty کوتاه شده PseudoTerminal interfaces میباشد.
pts کوتاه شده PseudoTerminal Slave میباشد
ptm کوتاه شده PseudoTerminal Master میباشد.
pty و ptm و pts با یکدیگر معنا پیدا میکنند.
pty در ترمینال لینوکس
pty از یک جفت دستگاه های کاراکتر مجازی تشکیل شده است که یک کانال ارتباطی ۲ طرفه را فراهم میکند.
یک سمت این کانال master یا همان ptm است و سمت دیگر slave یا همان pts می باشد.
شبه ترمینال slave شبیه یک ترمینال کلاسیک عمل میکند.
فرایندی که قصد اتصال به ترمینال دارد، سمت slave را باز میکند و توسط برنامهای هدایت میشود تا سمت master را باز کند.
هر چیزی که در سمت master بعنوان ورودی ترمینال نوشته میشود برای سمت slave قابل خواندن است.
برای مثال زمانی که کلیدهای ترکیبی control-C در صفحه کلید را میزنید یک interrupt signal یا SIGINT یا سیگنال قطع از سمت master برای گروه فرایند که در بک گراند و در سمت slave است ارسال می شود تا آن فرایند را توسط پردازشگر یا cpu قطع کند.
برعکس این مورد نیز امکانپذیر است یعنی وروی که وارد سمت slave می شود قابل خواندن برای سمت master است.
جریان داده بین master و slave دقیقا مثل جریان داده در ترمینال واقعی بصورت غیرهمزمان یا asynchronously است.
داده هایی که در سمت slave نوشته میشود همیشه سریعا قابل خواندن یا در دسترس سمت master نیست و برعکس.
یعنی داده هایی در سمت master نوشته میشود همیشه سریعا قابل خواندن یا در دسترس slave نیست.
مثال 1
در ردیف زرد رنگ، کاربر root در2021-01-06 10:14 وارد ترمینال شده و بصورت خودکار پوسته bash فعال شده است.
علامت – به این معناست که شبه ترمینال pts/0 قابل wirte نیست.
شبه ترمینال فعلی که کاربر دستور را اجرا کرده است pts/3 می باشد.
شبه ترمینال slave با شماره 0 یعنی pts/0 ایجاد شده است که زمان idle یا بیکاری آن یک ثانیه است.
pid و آدرس ip کاربر نیز مشخص است.
مثال 2
در ردیف سبز رنگ، شبه ترمینال های مربوط به فرایندهای مرده یا dead processes را مشاهده می کنید.
۲ عدد pts/2 میبینید که دلیل آن ایجاد انها در زمانهای متفاوت بوده است یعنی در زمانی که دومی ایجاد شده است مورد اول یک فراینده مرده بوده است.
term مربوط به کلمه terminate است و مقدار 0 یعنی با موفقیت terminate و exit انجام شده است.
به منظور مشاهده معنای کدها، می توانید به این لینک مراجعه کنید.
مثال 3
در ردیف قرمز رنگ، علامت + به معنای قابل write بودن شبه کنسول pts/3 است که در تصویر دوم کاملا مشخص است.
تعداد شبه ترمینال های مجازی pty در زمان کامپایل کرنل از طریق CONFIG_UNIX98_PTYS قابل تنظیم است.
برای مشاهده حداکثر تعداد مجاز شبه ترمینال های مجازی pty می توانید از دستور زیر استفاده کنید:
1 |
cat /proc/sys/kernel/pty/max |
برای مشاهده تعداد شبه ترمینال های pty که در حال حاضر فعال هستند می توانید از دستور زیر استفاده کنید:
1 |
cat /proc/sys/kernel/pty/nr |
API های terminal در لینوکس
دو API با نامهای BSD و System V برای شبه ترمینال وجود دارند که برنامههای جدید از System V استفاده میکنند.
از نام UNIX 98 برای نام System V نیز استفاده می کنند.
UNIX 98 با فراخوانی تابع posix_openpt دستگاه کپی master یا master clone device یعنی dev/ptmx/ را باز میکند.
فایل dev/ptmx/ بعنوان یک دستگاه multiplexer یک فایل کاراکتری است که برای ایجاد جفت های ptm وpts استفاده میشود.
زمانی که فرایندی فایل dev/ptmx/ را باز میکند شبه ترمینال ptm باز میشود ولی قبل از باز شدن شبه ترمینال pts، مالکیت و سطح سترسی (permission) شبه ترمینال pts با تابع grantpt تغییر و با تابع unlockpt قفل آن باز میشود.
در ادامه شبه ترمینال pts با فرخوانی تابع سیستمی open و بازگردانی نام pts توسط تابع ptsname در مسیر dev/pts/ باز میشود.
اصطلاح dumb terminal برای زمانی است که در جلوی رایانه نشستهاید و در محیط متنی ترمینال آن فقط ورودی میگیرید.
در واقع کار اصلی در یک رایانه قوی و قدرتمند دیگر انجام میشود و فقط خروجی آن را مشاهده میکنید.
نرم افزار Windows Terminal یک ترمینال برای سیستم عامل ویندوز نسخه 10 است که از این لینک قابل دانلود است.
سخن پایانی
برچسبها: cmd, command, command line, console, gnu/linux, linux, terminal, آموزش لینوکس, ترمینال, خط فرمان, کنسول, لینوکس