آشنایی با معماری سیستم در لینوکس

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

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

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

کرنل (Kernel) در معماری سیستم در لینوکس

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

کرنل لینوکس در چهار حالت کلی عمل می‌کند: مدیریت حافظه (Memory Management)، مدیریت فرآیندها (Process Management)، مدیریت دستگاه‌ها (Device Management) و مدیریت سیستم فایل (File System Management).

برخی از دستورات مرتبط با کرنل در معماری سیستم در لینوکس

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

مثال: دستور زیر خروجی نسخه کرنل سیستم را نشان می‌دهد.

uname -r

دستور dmesg: نمایش پیام‌های کرنل که به مشکلات یا وضعیت سخت‌افزار اشاره دارند. این دستور زمانی استفاده می‌شود که نیاز به بررسی پیام‌های کرنل دارید، مخصوصاً برای عیب‌یابی سیستم و دستگاه‌های سخت‌افزاری. هر زمان که دستگاهی متصل یا جدا می‌شود، یا یک مشکل سخت‌افزاری رخ می‌دهد، پیام‌هایی در خروجی dmesg ظاهر می‌شوند.
مثلا هنگامی که یک دستگاه USB یا درایو جدید به سیستم وصل می‌کنید و می‌خواهید مطمئن شوید که سیستم آن را شناسایی کرده است میتوانید از این دستور استفاده کنید.

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

dmesg | less

دستور sysctl: مدیریت و تغییر پارامترهای کرنل در حین اجرا. این دستور زمانی استفاده می‌شود که بخواهید پارامترهای کرنل را در زمان اجرا تغییر دهید. این دستور برای بهینه‌سازی عملکرد سیستم یا تغییر برخی از تنظیمات امنیتی کرنل مفید است. همچنین از آن برای تنظیمات پیشرفته شبکه و حافظه استفاده می‌شود.
مثلا وقتی که نیاز دارید اندازه‌ی بافر شبکه (buffer size) را تغییر دهید یا پارامترهای مرتبط با TCP را بهبود بخشید میتوانید از این دستور استفاده کنید.

مثال: این دستور لیست پارامترهای کرنل را نمایش می‌دهد.

sysctl -a

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

مثال: این دستور ماژول مشخصی را در کرنل بارگذاری می‌کند.

modprobe

دستور lsmod: از این دستور برای نمایش ماژول‌های بارگذاری شده کرنل استفاده می‌شود. هنگامی که بخواهید ببینید چه ماژول‌هایی در حال حاضر در کرنل بارگذاری شده‌اند. این دستور لیستی از تمام ماژول‌های کرنل و منابع مورد استفاده توسط آنها را نمایش می‌دهد.
مثلا اگر نیاز به بررسی دارید که آیا یک ماژول خاص (مثلاً درایور سخت‌افزاری) بارگذاری شده است یا نه.
مثال:

lsmod

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

کرنل از طریق این دستورات مدیریت می‌شود و پیام‌ها و وضعیت آن را می‌توان برای عیب‌یابی و نظارت بررسی کرد.

پوسته (Shell) در معماری سیستم در لینوکس

پوسته یا “Shell” در معماری سیستم در لینوکس به عنوان واسطی عمل می‌کند که ارتباط بین کاربر و هسته (Kernel) را فراهم می‌کند. پوسته دستورات کاربر را دریافت کرده و آن‌ها را برای اجرا به سیستم‌عامل ارسال می‌کند.

دو نوع پوسته در معماری سیستم در لینوکس وجود دارد: پوسته تعاملی که کاربران به‌صورت مستقیم دستورات خود را وارد می‌کنند و نتیجه را مشاهده می‌کنند و پوسته اسکریپت‌نویسی که دستورات را از یک فایل اسکریپت می‌خواند و اجرا می‌کند. پرکاربردترین پوسته در لینوکس Bash (Bourne Again Shell) است که بسیاری از کاربران از آن برای اجرای دستورات، نوشتن اسکریپت‌ها و مدیریت سیستم استفاده می‌کنند.

دستور مرتبط با Shell در معماری سیستم در لینوکس

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

exec /bin/bash

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

source (یا .): این دستور برای بارگذاری و اجرای اسکریپت‌های موجود در یک فایل بدون ایجاد یک پوسته جدید استفاده می‌شود. به این صورت که اسکریپت در پوسته فعلی اجرا می‌شود و تغییرات محیط (مثل تغییرات در متغیرها) حفظ می‌شوند. مثال کاربردی:

source script.sh

یا

. script.sh

این دستور اسکریپت script.sh را در پوسته فعلی اجرا می‌کند. اگر متغیرهای محیطی یا تغییراتی در اسکریپت اعمال شود، این تغییرات در پوسته فعلی باقی می‌مانند.

cd: این دستور برای تغییر دایرکتوری جاری در پوسته استفاده می‌شود. با اجرای این دستور، دایرکتوری جاری که فرآیندها در آن اجرا می‌شوند، تغییر می‌کند. مثال کاربردی:

cd /var/log

این دستور دایرکتوری جاری را به /var/log تغییر می‌دهد.

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

export PATH=$PATH:/usr/local/bin

این دستور مسیر /usr/local/bin را به متغیر محیطی PATH اضافه می‌کند، که اجازه می‌دهد تا فایل‌های اجرایی در این مسیر به راحتی فراخوانی شوند.

env: برای مشاهده یا تنظیم متغیرهای محیطی استفاده می‌شود. همچنین می‌توان با استفاده از این دستور یک فرآیند جدید را با تنظیمات محیطی خاص اجرا کرد. مثال کاربردی:

env

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

env VAR=value command

unset: این دستور برای حذف متغیرهای محیطی یا توابع پوسته استفاده می‌شود. اگر نیاز باشد متغیری از محیط حذف شود، از این دستور استفاده می‌کنید. مثال کاربردی:

unset MY_VARIABLE

این دستور متغیر MY_VARIABLE را از محیط حذف می‌کند.

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

alias ll=’ls -la’

با این دستور، هر بار که ll را در پوسته وارد کنید، دستور ls -la اجرا می‌شود.

bg و fg: این دستورات برای مدیریت فرآیندهای پس‌زمینه و پیش‌زمینه استفاده می‌شوند. از bg برای ارسال یک فرآیند به پس‌زمینه و از fg برای بازگرداندن آن به پیش‌زمینه استفاده می‌شود. مثال کاربردی:
ارسال فرآیند به پس‌زمینه:

bg %1

بازگرداندن فرآیند به پیش‌زمینه:

fg %1

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

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

معماری سیستم در لینوکس به گونه‌ای است که مدیریت ذخیره‌سازی و دسترسی به داده‌ها در لینوکس از طریق سیستم فایل‌ها (File Systems) انجام می‌شود. سیستم فایل وظیفه سازماندهی، ذخیره‌سازی و مدیریت فایل‌ها و دایرکتوری‌ها را بر عهده دارد.

انواع مختلفی از سیستم فایل‌ها در لینوکس وجود دارد، مانند ext4 (پرکاربردترین سیستم فایل)، XFS (مناسب برای حجم بالا و عملکرد بالا)، و btrfs (با قابلیت‌های پیشرفته مانند snapshot و RAID). هر سیستم فایل ویژگی‌های خاص خود را دارد و بسته به نیازهای ذخیره‌سازی و کارایی سیستم، انتخاب می‌شود.

دسترسی به فایل‌ها و دایرکتوری‌ها در لینوکس از طریق مجوزهای دسترسی (Permissions) و مالکیت (Ownership) کنترل می‌شود.

سرویس‌ها و دیمن‌ها در معماری سیستم در لینوکس

در معماری سیستم در لینوکس سرویس‌ها (services) و دیمن‌ها (daemons) برنامه‌هایی هستند که در پس‌زمینه اجرا می‌شوند و وظایف خاصی را بدون تعامل مستقیم با کاربر انجام می‌دهند.

دیمن‌ها معمولاً با راه‌اندازی سیستم شروع به کار می‌کنند و به‌صورت مداوم فعال هستند تا به درخواست‌های سیستم یا شبکه پاسخ دهند. سرویس‌ها می‌توانند شبکه، مدیریت فایل‌ها، پایگاه‌های داده، و بسیاری از کارهای سیستم‌عامل را مدیریت کنند. دیمن‌ها معمولاً با پسوند d شناخته می‌شوند (مثل sshd که مدیریت اتصالات SSH را انجام می‌دهد).

در لینوکس، سرویس‌ها و دیمن‌ها با استفاده از سیستم مدیریت فرآیندهای سیستم مانند systemd مدیریت می‌شوند.

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

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

سیستم‌عامل لینوکس به کمک کرنل و ابزارهای مدیریتی، فرآیندها را مدیریت و کنترل می‌کند. هر فرآیند دارای یک شناسه منحصر به فرد (PID) است و می‌تواند در حالات مختلفی مانند در حال اجرا (running)، منتظر (waiting) یا متوقف (stopped) باشد. کاربران و مدیران سیستم می‌توانند فرآیندهای فعال را مشاهده، متوقف، پایان دهند یا اولویت اجرای آنها را تغییر دهند. مدیریت صحیح فرآیندها می‌تواند به بهبود کارایی سیستم و رفع مشکلات نرم‌افزاری کمک کند.

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

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

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

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

دستور free اطلاعات مربوط به استفاده از حافظه سیستم را نمایش می‌دهد، از جمله حافظه اصلی (RAM)، حافظه swap، و حافظه در دسترس. مثال: نمایش وضعیت حافظه

free -h

این دستور وضعیت حافظه را به صورت خوانا (human-readable) نشان می‌دهد، که به کاربر امکان می‌دهد میزان استفاده از حافظه و حافظه آزاد را بررسی کند.

دستور vmstat نیز برای مشاهده وضعیت حافظه و عملکرد سیستم استفاده می‌شود و اطلاعات دقیقی درباره مصرف CPU، حافظه، و Swap ارائه می‌دهد. مثال: مشاهده آمار دقیق سیستم

vmstat 5

این دستور هر 5 ثانیه اطلاعاتی درباره مصرف حافظه و عملکرد سیستم را به‌روز می‌کند و کمک می‌کند تا مشکلات مربوط به حافظه و عملکرد سیستم شناسایی شود.
این ابزارها به مدیران سیستم کمک می‌کنند تا مصرف حافظه را بهینه کرده و مشکلات احتمالی را به سرعت شناسایی و حل کنند.

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

در معماری سیستم در لینوکس تنظیمات شبکه نقش مهمی در ارتباط بین سیستم‌ها و تبادل داده‌ها ایفا می‌کند. لینوکس از پروتکل‌های شبکه‌ای استاندارد مانند TCP/IP پشتیبانی می‌کند و ابزارهای متعددی برای مدیریت و پیکربندی شبکه فراهم می‌کند.

از طریق رابط‌های شبکه‌ای، سیستم می‌تواند به شبکه‌های محلی (LAN) یا شبکه‌های گسترده (WAN) متصل شود. سیستم‌عامل لینوکس از دیمن‌ها و سرویس‌های شبکه‌ای مانند SSH، DNS، DHCP، و HTTP برای مدیریت اتصالات شبکه و انتقال داده‌ها استفاده می‌کند.

ابزارهایی مانند ifconfig و ip برای مدیریت رابط‌های شبکه و آدرس‌های IP به کار می‌روند، در حالی که ابزارهایی مانند ping، netstat، و traceroute برای بررسی وضعیت شبکه و رفع مشکلات اتصال استفاده می‌شوند.

مدیریت دستگاه‌ها (Device Management) در معماری سیستم در لینوکس

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

این فایل‌ها به عنوان واسطی بین کرنل و دستگاه‌های فیزیکی عمل می‌کنند و کاربران می‌توانند با استفاده از دستورات مختلف به این دستگاه‌ها دسترسی داشته باشند یا آن‌ها را پیکربندی کنند. سیستم‌های مدیریت دستگاه مانند udev به‌طور خودکار دستگاه‌های جدید را شناسایی و تنظیمات اولیه آن‌ها را اعمال می‌کنند. ابزارهای مختلفی مانند lsblk، lspci، و dmesg برای مشاهده و مدیریت دستگاه‌های متصل به سیستم مورد استفاده قرار می‌گیرند.

دستور lsblk برای نمایش اطلاعات مربوط به دستگاه‌های ذخیره‌سازی (بلوک‌ها) استفاده می‌شود و نشان می‌دهد که کدام دستگاه‌های ذخیره‌سازی به سیستم متصل هستند و به چه فایل‌سیستم‌هایی متصل شده‌اند.

مثال: نمایش دستگاه‌های ذخیره‌سازی

lsblk

دستور lspci لیستی از دستگاه‌های متصل به گذرگاه PCI را نمایش می‌دهد که شامل کارت‌های شبکه، کارت‌های گرافیکی و سایر سخت‌افزارها است.

مثال : نمایش دستگاه‌های متصل به PCI

lspci

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

مدیریت کاربر (User Management)

لینوکس از مدل چندکاربری (multi-user) پشتیبانی می‌کند و هر کاربر در سیستم دسترسی‌های خاص خود را دارد. مدیریت کاربران و گروه‌ها یکی از بخش‌های مهم امنیتی سیستم است.

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

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

فایل‌های مهمی مانند /etc/passwd و /etc/shadow اطلاعات مربوط به کاربران و رمزهای عبور را ذخیره می‌کنند. همچنین، ابزارهایی مانند useradd، usermod و userdel برای مدیریت کاربران مورد استفاده قرار می‌گیرند.

ورودی/خروجی (I/O Management)

در معماری سیستم در لینوکس سیستم ورودی/خروجی مسئولیت مدیریت عملیات ورودی/خروجی داده‌ها را دارد. کرنل این فرآیندها را از طریق دستگاه‌های مختلف مدیریت می‌کند. ورودی/خروجی (I/O) در معماری سیستم عامل لینوکس به ارتباط بین برنامه‌ها و دستگاه‌های سخت‌افزاری مانند کیبورد، نمایشگر، دیسک‌های ذخیره‌سازی و شبکه اشاره دارد.

لینوکس برای مدیریت I/O از مفهوم فایل‌ها و جریان‌های داده استفاده می‌کند، به این معنا که همه چیز در لینوکس، حتی دستگاه‌های فیزیکی، به عنوان فایل مدیریت می‌شود.

جریان‌های ورودی و خروجی (stdin، stdout، stderr) به ترتیب برای خواندن داده از ورودی، نوشتن داده به خروجی و نمایش پیام‌های خطا به کار می‌روند. همچنین، مدیران سیستم از دستورات و ابزارهایی مانند cat، echo، tee و redirect برای کنترل و تغییر مسیر ورودی و خروجی داده‌ها بین فایل‌ها، دستگاه‌ها و برنامه‌ها استفاده می‌کنند.

دستور cat برای نمایش محتوا یا ترکیب فایل‌ها و همچنین برای تغییر مسیر ورودی/خروجی استفاده می‌شود. مثال: خواندن و نمایش محتوای یک فایل

cat /etc/passwd

دستور tee داده‌ها را همزمان به یک فایل و خروجی استاندارد می‌نویسد. مثال: نوشتن خروجی یک فرمان به یک فایل و نمایش آن روی صفحه

ls | tee output.txt

این دستورات به کاربران اجازه می‌دهند تا داده‌ها را به‌طور کارآمدی بین بخش‌های مختلف سیستم منتقل کنند و I/O را کنترل کنند.

لایه امنیتی (Security Layer) در معماری سیستم در لینوکس

لینوکس امنیت داخلی بالایی دارد که شامل کنترل دسترسی‌ها، امنیت شبکه، رمزنگاری و سیاست‌های امنیتی است. معماری سیستم در لینوکس به گونه‌ای است که لایه امنیتی (Security Layer) مسئول محافظت از سیستم و داده‌ها در برابر دسترسی‌های غیرمجاز و حملات است.

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

خواندن (read)، نوشتن (write) و اجرا (execute). همچنین، ابزارهای امنیتی پیشرفته‌تری مانند SELinux (Security-Enhanced Linux) و AppArmor به‌صورت افزونه‌هایی در برخی توزیع‌های لینوکس وجود دارند که امنیت سیستم را از طریق سیاست‌های اجباری (Mandatory Access Control) کنترل می‌کنند.

علاوه بر این، سرویس‌هایی مانند فایروال (iptables، firewalld) و سیستم‌های تشخیص نفوذ (Fail2ban) به محافظت بیشتر از سیستم کمک می‌کنند.

دستور chmod برای تغییر سطح دسترسی فایل‌ها و دایرکتوری‌ها استفاده می‌شود.

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

chmod 700 filename

دستور iptables برای تنظیم قوانین فایروال و کنترل ترافیک شبکه استفاده می‌شود.

مثال: اجازه دادن به ترافیک HTTP

sudo iptables -A INPUT -p tcp –dport 80 -j ACCEPT

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