توی این درس یاد میگیری لینوکس دقیقاً چیست و چرا وقتی میگویند «لینوکس»، گاهی منظورشان فقط یک هسته (kernel) است و گاهی یک توزیع (distribution) کامل مثل Ubuntu. فرق این دو را با آزمایش واقعی میبینی: چهار توزیع کاملاً متفاوت که یک هستهی مشترک دارند. بعد میفهمی GNU و «متنباز» یعنی چه، چهار توزیع معروف (Ubuntu، Debian، Fedora، Alpine) چه فرقی دارند و لینوکس کجاها اجرا میشود. دو دستور اول هم یاد میگیری: uname -a و cat /etc/os-release.
مسئله: لینوکس را همهجا میشنوی، ولی چیست؟
Section titled “مسئله: لینوکس را همهجا میشنوی، ولی چیست؟”اگر تازه با کامپیوتر آشنا شدهای، «لینوکس» را شاید فقط بهعنوان یک سیستمعامل سیاهرنگ با ترمینال شنیدهای. ولی لینوکس زیر پوست خیلی چیزها است: بیشتر سرورهای اینترنت، گوشیهای اندروید، روتر خانهات، و حتی کانتینرهایی که در درسهای بعد (داکر) میسازی. اگر نفهمی لینوکس چه لایههایی دارد، اسمها قاطی میشوند: «Ubuntu لینوکس است؟» «Debian چیست؟» «کرنل چیست؟».
تشبیه: موتور و ماشین
Section titled “تشبیه: موتور و ماشین”هسته (kernel) مثل موتور است: کار اصلی را میکند، یعنی با سختافزار (پردازنده، حافظه، دیسک، شبکه) حرف میزند و منابع را بین برنامهها تقسیم میکند. ولی با موتور تنها نمیشود رانندگی کرد. توزیع (distribution) مثل یک مدل ماشین کامل است: همان موتور (هسته) را میگیرد، بدنه، فرمان، داشبورد و ابزار (شل، دستورها، مدیر بسته، تنظیمات پیشفرض) را کنارش میگذارد و یک محصول قابلاستفاده میسازد. چند شرکت مختلف میتوانند با همان موتور ماشینهای متفاوتی بسازند.
مثالهای عملی
Section titled “مثالهای عملی”مثال ۱: هسته را ببین با uname -a
Section titled “مثال ۱: هسته را ببین با uname -a”دستور uname (مخفف unix name) اطلاعات سیستم را چاپ میکند. -a یعنی «همه» (all). این دستورها را در یک لینوکس واقعی (Ubuntu 24.04) اجرا کردم:
uname -aLinux pc 7.0.14-linuxkit #1 SMP PREEMPT Fri Sep 18 10:19:32 UTC 2026 aarch64 aarch64 aarch64 GNU/Linuxیک خط طولانی با چند بخش است. هر بخش را جدا بگیریم:
echo "نام هسته (-s): $(uname -s)"echo "نام ماشین (-n): $(uname -n)"echo "نسخهی هسته (-r): $(uname -r)"echo "معماری (-m): $(uname -m)"echo "سیستمعامل (-o): $(uname -o)"نام هسته (-s): Linuxنام ماشین (-n): pcنسخهی هسته (-r): 7.0.14-linuxkitمعماری (-m): aarch64سیستمعامل (-o): GNU/LinuxLinux نام هسته است، نسخهی هسته (-r) شمارهای مثل 7.0.14-... است، و معماری (-m) نوع پردازنده را میگوید: x86_64 (پردازندههای معمولی Intel/AMD) یا aarch64 (ARM، مثل مکهای Apple Silicon و Raspberry Pi). GNU/Linux در -o همان ترکیب «هستهی لینوکس + ابزارهای GNU» است (توضیحش پایینتر).
مثال ۲: توزیع را ببین با /etc/os-release
Section titled “مثال ۲: توزیع را ببین با /etc/os-release”اسم توزیع در یک فایل متنی استاندارد است. cat (مخفف concatenate) محتوای فایل را چاپ میکند:
cat /etc/os-releasePRETTY_NAME="Ubuntu 24.04.5 LTS"NAME="Ubuntu"VERSION_ID="24.04"VERSION="24.04.5 LTS (Noble Numbat)"VERSION_CODENAME=nobleID=ubuntuID_LIKE=debianHOME_URL="https://www.ubuntu.com/"SUPPORT_URL="https://help.ubuntu.com/"BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"UBUNTU_CODENAME=nobleLOGO=ubuntu-logoهر خط کلید=مقدار است: PRETTY_NAME اسم قابلخواندن، VERSION_ID شمارهی نسخه، ID شناسهی کوتاه (ubuntu). چون این فایل ساختار ثابت دارد، میتوانی مقدارش را در دستورها به کار ببری:
. /etc/os-releaseecho "این سیستم: $PRETTY_NAME (شناسه: $ID، نسخه: $VERSION_ID)"این سیستم: Ubuntu 24.04.5 LTS (شناسه: ubuntu، نسخه: 24.04)نقطهی اول (.، هممعنی source) فایل را بهعنوان تنظیمات میخواند تا متغیرهایش در shell فعلی بیاید.
مثال ۳: یک هسته، چند توزیع
Section titled “مثال ۳: یک هسته، چند توزیع”اینجا فرق «هسته» و «توزیع» عملی میشود. چهار توزیع مختلف را با داکر اجرا کردم (داکر را در دورهی داکر یاد میگیری؛ فعلاً فقط نتیجه را ببین): از هر کدام میپرسم هستهاش چیست و توزیعش چیست.
for img in ubuntu:24.04 debian:stable-slim fedora:latest alpine; do docker run --rm $img sh -c '. /etc/os-release; printf "%-16s هسته: %-18s توزیع: %s %s\n" "'$img'" "$(uname -r)" "$NAME" "$VERSION_ID"'doneubuntu:24.04 هسته: 7.0.14-linuxkit توزیع: Ubuntu 24.04debian:stable-slim هسته: 7.0.14-linuxkit توزیع: Debian GNU/Linux 13fedora:latest هسته: 7.0.14-linuxkit توزیع: Fedora Linux 44alpine هسته: 7.0.14-linuxkit توزیع: Alpine Linux 3.24.2هسته در هر چهار برابر است (...-linuxkit)، ولی توزیعها چهار تا و متفاوتاند. کانتینرها هستهی ماشین میزبان را قرض میگیرند و فقط «لایهی توزیع» را با خودشان دارند. این همان نمودار لایههاست، به شکل ملموس. (در یک ماشین عادی هر توزیع هستهی خودش را هم دارد، ولی هستهها نسخههایی از همان لینوکساند.)
اگر هستهی دو سیستم یکی باشد ولی توزیعشان Ubuntu و Alpine باشد، چه چیزی فرق میکند؟
هسته مشترک است؛ توزیعها در ابزارها و بستهها فرق دارند.
مثال ۴: توزیعها در ابزار فرق دارند
Section titled “مثال ۴: توزیعها در ابزار فرق دارند”دو تفاوت عملی: مدیر بسته (برنامه نصبکن) و ابزارهای پایه. ببین کدام در هر توزیع هست:
for img in ubuntu:24.04 debian:stable-slim fedora:latest alpine; do docker run --rm $img sh -c 'p=""; for c in apt dnf apk; do command -v $c >/dev/null && p="$p $c"; done; printf "%-16s مدیر بسته:%-5s | ls: %s\n" "'$img'" "$p" "$(ls --version 2>&1 | head -1 | cut -c1-30)"'doneubuntu:24.04 مدیر بسته: apt | ls: ls (GNU coreutils) 9.4debian:stable-slim مدیر بسته: apt | ls: ls (GNU coreutils) 9.7fedora:latest مدیر بسته: dnf | ls: ls (GNU coreutils) 9.10alpine مدیر بسته: apk | ls: ls: unrecognized option: versiUbuntu و Debian از apt، Fedora از dnf و Alpine از apk استفاده میکنند. و در Alpine حتی ls فرق دارد: بهجای ابزارهای GNU از BusyBox (مجموعهی کوچکشده) استفاده میکند و ls --version را نمیشناسد. این ریشهی تفاوتهایی است که گاهی در مقالهها میبینی («روی Alpine کار نمیکند»).
مثال ۵: اطلاعات بیشتر هسته
Section titled “مثال ۵: اطلاعات بیشتر هسته”هسته اطلاعات خودش را در فایلهای مجازی زیر /proc میگذارد (درس ساختار پوشهها). یک نمونه:
cat /proc/versionLinux version 7.0.14-linuxkit (root@buildkitsandbox) (gcc (Alpine 15.2.0) 15.2.0, GNU ld (GNU Binutils) 2.45.1) #1 SMP PREEMPT Fri Sep 18 10:19:32 UTC 2026این خط میگوید هسته با چه کامپایلری و کی ساخته شده. و چند سؤال ساده دربارهی سختافزار:
echo "تعداد هستههای CPU: $(nproc)"echo "کل حافظه: $(grep MemTotal /proc/meminfo | awk '{printf "%.1f", $2/1024/1024}') گیگابایت"تعداد هستههای CPU: 8کل حافظه: 3.8 گیگابایتnproc تعداد پردازندههای قابلاستفاده را میدهد و /proc/meminfo وضعیت حافظه را؛ اینها زنده از هسته میآیند، نه از یک فایل ثابت.
مثال ۶: متنباز یعنی چه؟
Section titled “مثال ۶: متنباز یعنی چه؟”لینوکس با مجوز GPL منتشر میشود. یعنی هر کس میتواند کد را ببیند، تغییر بدهد و منتشر کند (به شرط اینکه تغییرات را هم با همان آزادی منتشر کند). متن مجوزها روی همین سیستم هست:
ls /usr/share/common-licenses | head -8echo "---"head -5 /usr/share/common-licenses/GPL-3Apache-2.0ArtisticBSDCC0-1.0GFDLGFDL-1.2GFDL-1.3GPL--- GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies«متنباز» (open source) یعنی کد منبع در دسترس همه است؛ نه فقط «رایگان». رایگان بودن نتیجهی آن است، ولی ارزش اصلی این است که هر شرکت و فرد میتواند سیستم را بررسی، اصلاح و برای نیاز خودش بسازد. به همین دلیل صدها توزیع وجود دارد و میتوانی بدون اجازهی کسی هر چیزی را که لازم داری عوض کنی.
پشت پرده: «لینوکس» و «GNU/Linux»
Section titled “پشت پرده: «لینوکس» و «GNU/Linux»”اسم لینوکس فقط به هسته برمیگردد که لینوس توروالدز در ۱۹۹۱ شروع کرد. اما هسته تنها بدون ابزار کاری نمیکند. ابزارهای کاربر (شل، ls، cp، grep، کامپایلر gcc، کتابخانهی C و…) را پروژهی GNU (از ۱۹۸۳، شروعشده توسط ریچارد استالمن) ساخته بود. ترکیب این دو یک سیستمعامل کامل شد؛ به همین دلیل بعضیها دقیقتر میگویند GNU/Linux (و دستور uname -o هم همین را چاپ میکند).
در عمل وقتی میگویند «لینوکس نصب کردم» منظورشان یک توزیع است. هر توزیع تصمیم میگیرد: کدام نسخهی هسته، کدام ابزارها، چه مدیر بستهای، هر چند وقت یکبار نسخهی جدید و تا کی بهروزرسانی امنیتی بدهد.
جدولهای مرجع
Section titled “جدولهای مرجع”توزیعهای معروف
Section titled “توزیعهای معروف”| توزیع | خانواده | مدیر بسته | معمولاً برای… |
|---|---|---|---|
| Ubuntu | Debian | apt |
سرور و دسکتاپ؛ پشتیبانی بلندمدت (LTS) و مستندات فراوان؛ شروع خوب برای تازهکارها |
| Debian | Debian | apt |
سرورهای پایدار؛ پایهی خیلی از توزیعهای دیگر (از جمله Ubuntu) |
| Fedora | Red Hat | dnf |
دسکتاپ و توسعه با نرمافزار جدید؛ نسخهی تازه هر چند ماه |
| RHEL / Rocky / Alma | Red Hat | dnf |
سرورهای سازمانی |
| Alpine | مستقل | apk |
کانتینرهای خیلی کوچک (ابزارهای BusyBox و musl بهجای GNU) |
| Arch | مستقل | pacman |
کاربران پیشرفته؛ نصب دستی و نسخههای همیشه جدید |
لینوکس کجاست؟
Section titled “لینوکس کجاست؟”| محیط | نمونه |
|---|---|
| سرور و ابر | بیشتر سرورهای وب، دیتابیسها و سرویسهای ابری؛ همهی ماشینهای سازمانی که کانتینر اجرا میکنند |
| موبایل | اندروید هستهی لینوکس دارد |
| دسکتاپ | Ubuntu، Fedora، Mint و… (سهم کمتر از ویندوز و مک) |
| دستگاههای تعبیهشده | روترها، تلویزیونهای هوشمند، Raspberry Pi |
| ابررایانهها | عملاً همهی ابررایانههای برتر |
| دستور | کار |
|---|---|
uname -a |
همهی اطلاعات هسته در یک خط |
uname -r |
فقط نسخهی هسته |
uname -m |
معماری پردازنده |
cat /etc/os-release |
نام و نسخهی توزیع |
cat /proc/version |
جزئیات ساخت هسته |
اشتباهات رایج
Section titled “اشتباهات رایج”۱) قاطی کردن هسته با توزیع
Section titled “۱) قاطی کردن هسته با توزیع”«لینوکس نسخهی ۲۴.۰۴ دارم» اشتباه است؛ ۲۴.۰۴ نسخهی Ubuntu است و نسخهی هسته چیز دیگری است (مثلاً 6.8 یا 7.0). راهحل: همیشه هر دو را جدا بگو: توزیع (/etc/os-release) و هسته (uname -r).
۲) فرض کردن اینکه همهی دستورها در همهی توزیعها یکیاند
Section titled “۲) فرض کردن اینکه همهی دستورها در همهی توزیعها یکیاند”docker run --rm alpine sh -c 'apt install curl 2>&1 | head -1; echo "--- راه درست در Alpine:"; apk --version'sh: apt: not found--- راه درست در Alpine:apk-tools 3.0.8-r0, compiled for aarch64.apt در Alpine وجود ندارد (not found). راهحل: اول توزیع را بشناس (cat /etc/os-release)، بعد مدیر بستهی مناسبش را به کار ببر.
۳) تایپ اشتباه در فایل os-release
Section titled “۳) تایپ اشتباه در فایل os-release”cat /etc/os-relesecat: /etc/os-relese: No such file or directoryحروف یک فایل را اشتباه نوشتی؛ سیستم میگوید چنین فایل یا پوشهای نیست. راهحل: با کلید Tab نام را کامل کن (درس ترمینال).
۴) باور اینکه «لینوکس = ویندوز بدون گرافیک»
Section titled “۴) باور اینکه «لینوکس = ویندوز بدون گرافیک»”لینوکس برنامههای ویندوز را مستقیم اجرا نمیکند (فایل .exe نمیشناسد) و برنامههای خودش را دارد؛ فرمت فایلها و مسیرها هم فرق دارد (/ بهجای C:\). راهحل: با ذهن تازه شروع کن؛ همین دوره قدمبهقدم میبرد.
۵) نسخهی هسته را ملاک «تازگی» توزیع دانستن
Section titled “۵) نسخهی هسته را ملاک «تازگی» توزیع دانستن”یک توزیع قدیمیتر هم میتواند اصلاحیههای امنیتی هسته را به نسخهی خودش منتقل کند (backport). راهحل: به تاریخ پایان پشتیبانی توزیع نگاه کن، نه فقط عدد هسته.
نام توزیع و نسخهی کرنل سیستم خودت (یا همین محیط) را پیدا کن و در یک جمله بنویس. دو دستور لازم است: یکی برای هسته و یکی برای توزیع.
دیدن جواب
echo "هسته: $(uname -r)". /etc/os-release && echo "توزیع: $PRETTY_NAME"هسته: 7.0.14-linuxkitتوزیع: Ubuntu 24.04.5 LTSتمرین اصلی: پیدا کن در محیط تمرین چه توزیعی و چه معماریای داری، چند هستهی CPU و چقدر حافظه. نتیجه را در یک گزارش سهخطی چاپ کن.
دیدن جواب
. /etc/os-releaseecho "توزیع: $PRETTY_NAME"echo "هسته: $(uname -r) ($(uname -m))"echo "سختافزار: $(nproc) هستهی CPU، $(grep MemTotal /proc/meminfo | awk '{printf "%.1f", $2/1024/1024}') گیگابایت حافظه"توزیع: Ubuntu 24.04.5 LTSهسته: 7.0.14-linuxkit (aarch64)سختافزار: 8 هستهی CPU، 3.8 گیگابایت حافظهثابت کن «یک هسته، چند توزیع» درست است: برای دو توزیع دلخواه (مثلاً Debian و Alpine) هسته و توزیع را چاپ کن و در پایان با یک شرط بنویس «هستهها یکی هستند» یا «متفاوتاند».
دیدن جواب
k1=$(docker run --rm debian:stable-slim uname -r)k2=$(docker run --rm alpine uname -r)d1=$(docker run --rm debian:stable-slim sh -c '. /etc/os-release; echo $NAME')d2=$(docker run --rm alpine sh -c '. /etc/os-release; echo $NAME')echo "$d1 → $k1"echo "$d2 → $k2"[ "$k1" = "$k2" ] && echo "هستهها یکی هستند" || echo "هستهها متفاوتاند"Debian GNU/Linux → 7.0.14-linuxkitAlpine Linux → 7.0.14-linuxkitهستهها یکی هستندآزمونک
Section titled “آزمونک”کدام یک «هسته» است؟
Ubuntu و Debian توزیعاند؛ bash یک shell است.
توزیع (distribution) چیست؟
توزیع محصول کامل و قابلاستفاده است.
در آزمایش مثال ۳ چه دیدیم؟
کانتینرها هستهی میزبان را مشترک میگیرند.
کدام دستور نام توزیع را میدهد؟
uname -r نسخهی هسته را میدهد.
مدیر بستهی Alpine؟
Alpine از apk استفاده میکند.
متنباز بودن لینوکس یعنی…
رایگان بودن نتیجهی متنباز بودن است، نه تعریفش.
جمعبندی
Section titled “جمعبندی”- لینوکس در اصل فقط هسته است (موتور)؛ کاربر عادی با توزیع (ماشین کامل) کار میکند.
- توزیع = هسته + ابزارهای کاربر (GNU) + مدیر بسته + تنظیمات پیشفرض.
- چند توزیع میتوانند هستهی یکسان داشته باشند (آزمایش مثال ۳)؛ فرقشان در ابزار و بستههاست.
uname -aهسته را وcat /etc/os-releaseتوزیع را نشان میدهد.- لینوکس متنباز (GPL) است و روی سرور، موبایل، دستگاههای تعبیهشده و ابررایانهها اجرا میشود.
- همیشه توزیع و نسخهاش را بدان، چون دستورها (مثل مدیر بسته) از توزیعی به توزیع دیگر فرق میکنند.
| دستور | کاری که میکند |
|---|---|
uname -a | همهی اطلاعات هسته |
uname -r | نسخهی هسته |
uname -m | معماری پردازنده |
cat /etc/os-release | نام و نسخهی توزیع |
. /etc/os-release && echo $PRETTY_NAME | نام توزیع در یک خط |
cat /proc/version | جزئیات ساخت هسته |
nproc | تعداد هستههای CPU |
grep MemTotal /proc/meminfo | کل حافظه |