جادوی گنو/لینوکس؛ از فلسفه هسته متنباز تا تسلط بر خط فرمان (بخش ۱)
اگر دنیای کامپیوتر را به یک کهکشان دیجیتال تشبیه کنیم، لینوکس (Linux) بدون شک شالوده، موتور محرک و بستر نامرئی این کیهان است. از سوپرکامپیوترهای تحقیقاتی ناسا و سرورهای غولپیکر ابری گرفته تا کوچکترین دستگاههای اینترنت اشیاء (IoT) و گوشیهای اندرویدی که روزانه در دست داریم، همگی نبض خود را از این هستهی پایدار و قدرتمند میگیرند.
اما چرا توسعهدهندگان، مهندسان DevOps و معماران نرمافزار اصرار دارند که کار با محیط سیاه و سادهی ترمینال را بر هزاران نرمافزار گرافیکی پر زرقوبرق ترجیح دهند؟ پاسخ در یک کلمه خلاصه میشود: قدرت و آزادی بینهایت.
در این سری مقالات تخصصی در تیوا کد، قصد داریم سفری هیجانانگیز را از پایههای فلسفی لینوکس آغاز کنیم و گامبهگام شما را به یک متخصص اتوماسیون و اسکریپتنویسی شل (Shell Scripting) تبدیل کنیم.
۱. لینوکس چیست؟ تمایز تاریخی میان گنو (GNU) و هسته (Kernel)
بسیاری از افراد به اشتباه لینوکس را یک سیستمعامل مستقل مانند ویندوز تصور میکنند؛ اما از دیدگاه فنی:
لینوکس فقط یک «هسته» (Kernel) است.
هسته لینوکس که اولین بار در سال ۱۹۹۱ توسط دانشجوی فنلاندی، لینوس توروالدز (Linus Torvalds)، توسعه داده شد، پل ارتباطی بین سختافزار (CPU, RAM, Disks) و نرمافزار است. اما یک هسته به تنهایی قابل استفاده توسط انسان نیست؛ برای ساخت یک سیستمعامل کامل، به کامپایلرها، کتابخانهها، ابزارهای مدیریت فایل و پوستهها نیاز بود.
این ابزارها قبلاً توسط پروژه گنو (GNU) به رهبری ریچارد استالمن خلق شده بودند. با پیوند ابزارهای گنو و هسته لینوکس، سیستمعامل یکپارچهای به نام GNU/Linux متولد شد.
+-------------------------------------------------------+
| برنامههای کاربردی / شل (User Space) |
+-------------------------------------------------------+
| کتابخانههای سیستمی (Glibc, APIs) |
+-------------------------------------------------------+
| هسته لینوکس (Linux Kernel - مدیریت منابع) |
+-------------------------------------------------------+
| سختافزار سیستم (Hardware) |
+-------------------------------------------------------+
۲. توزیعهای لینوکس (Distros)؛ کدام مناسب شماست؟
توزیعها یا دیستروها، بستههای آمادهای هستند که هسته لینوکس را در کنار نرمافزارهای سیستمی و مدیر بستهها (Package Managers) ارائه میدهند:
خانواده دبیان (Debian / Ubuntu / Linux Mint): بهترین انتخاب برای توسعهدهندگان وب، هوش مصنوعی و سرورهای عمومی. مدیر بسته:
aptخانواده ردهت (RHEL / Rocky Linux / Fedora): استاندارد بیچونوچرای زیرساختهای اینترپرایز و سازمانی. مدیر بسته:
dnfیاyumخانواده آرچ (Arch Linux / Manjaro): توزیعهای فوقسریع و مینیمال بر پایه Rolling Release مخصوص کاربران حرفهای. مدیر بسته:
pacmanتوزیعهای سبک و خاص (Alpine Linux): بسیار محبوب در کانتینرهای Docker به دلیل حجم کم (کمتر از ۱۰ مگابایت).
۳. ورود به جهان خط فرمان (Command Line & Shell)
محیط گرافیکی (GUI) شما را به گزینههای از پیش تعریف شده توسط طراح محدود میکند، اما خط فرمان (CLI) اجازه میدهد دستورات را همانند کدهای برنامهنویسی با یکدیگر ترکیب کنید.
شل (Shell) برنامهای است که دستورات متنی شما را از کیبورد دریافت کرده و برای اجرا به سیستمعامل تحویل میدهد. محبوبترین شل در دنیای لینوکس Bash (مخفف Bourne Again Shell) و در سالهای اخیر Zsh و Fish هستند.
برای بررسی شل فعلی خود، دستور زیر را در ترمینال بزنید:
echo $SHELL
۴. ساختار سلسلهمراتبی فایلها در لینوکس (FHS)
در لینوکس بر خلاف ویندوز هیچ درایوی مانند :C یا :D وجود ندارد. همه چیز از یک ریشه به نام / (Root) آغاز میشود و سیستم بر اساس یک درخت یکپارچه سازماندهی میگردد:
/binو/usr/bin: دستورات و باینریهای اجرایی استاندارد سیستم./etc: قلب تپندهی فایلهای پیکربندی و تنظیمات سیستم./home: دایرکتوری اختصاصی کاربران عادی (مثلاً/home/tivacode)./var: دادههای متغیر مانند لاگها (/var/log) و فایلهای وبسرور (/var/www)./tmp: فایلهای موقتی که معمولاً پس از ریبوت سیستم پاک میشوند.
۵. جعبهابزار ضروری خط فرمان؛ دستورات حیاتی
برای اینکه سفر اسکریپتنویسی را شروع کنیم، ابتدا باید بتوانیم با چشمان بسته در فایل سیستم حرکت کرده و آن را کنترل کنیم.
۱. ناوبری و موقعیتیابی
# چاپ مسیر دایرکتوری فعلی
pwd
# لیست فایلها و پوشهها به همراه جزئیات کامل و حجم خوانا
ls -lah
# جابهجایی میان پوشهها
cd /var/log
cd .. # یک سطح به عقب
cd ~ # بازگشت به دایرکتوری خانگی (Home)
۲. مدیریت فایلها و دایرکتوریها
# ساخت دایرکتوری تودرتو
mkdir -p projects/tivacode/backend
# ساخت فایل خالی
touch projects/tivacode/backend/server.py
# کپی فایل با حفظ متادیتا
cp -p server.py server_backup.py
# انتقال یا تغییر نام فایل
mv server_backup.py /tmp/
# حذف فایل و پوشه به صورت بازگشتی (با احتیاط استفاده شود)
rm -rf /tmp/test_dir
۳. بررسی محتوای فایلها بدون باز کردن ادیتور
# نمایش کل محتوا
cat /etc/os-release
# نمایش ۱۰ خط ابتدایی یا ۱۰ خط انتهایی
head -n 10 config.json
tail -n 10 /var/log/syslog
# مانیتورینگ زنده لاگها (بسیار کاربردی در دیباگ سرور)
tail -f /var/log/nginx/access.log
۶. درک سیستم دسترسی و مالکیت فایلها (Permissions)
یکی از ارکان اصلی امنیت در لینوکس، ساختار سطوح دسترسی است. هر فایل و پوشه دارای سه دسته دسترسی است:
User (کاربر مالک)
Group (گروه کاربری)
Others (سایر کاربران سیستم)
نوع دسترسیها شامل:
خواندن (
r= 4)نوشتن (
w= 2)اجرا (
x= 1)
هنگامی که خروجی ls -l را مشاهده میکنید:
-rwxr-xr-- 1 tivacode developers 4096 Sep 6 12:00 deploy.sh
کاراکتر اول: - به معنی فایل عادی (d به معنی پوشه).
۳ کاراکتر اول (rwx): دسترسی کامل مالک (Read + Write + Execute = 7).
۳ کاراکتر دوم (r-x): دسترسی گروه (Read + Execute = 5).
۳ کاراکتر سوم (r--): دسترسی دیگران (فقط Read = 4).
برای قابلاجرا کردن یک اسکریپت شل، از دستور chmod استفاده میکنیم:
chmod +x deploy.sh
# یا با فرمت عددی
chmod 755 deploy.sh
جمعبندی و گام بعدی
در این بخش، پایههای مفهومی گنو/لینوکس، ساختار فایلسیستم و دستورات پایه کنترل محیط را فرا گرفتیم. این دستورات الفبای زبانی هستند که قرار است با آن کارهای شگفتانگیزی انجام دهیم.
🔹 در قسمت بعدی (قسمت دوم):
به سراغ قدرت خط لولهها (Pipes)، جریانهای استاندارد ورودی و خروجی (stdin/stdout/stderr) و ابزارهای طلایی پردازش متن نظیر grep، sed و awk خواهیم رفت؛ ابزارهایی که شما را قادر میسازند میلیونها سطر دیتا و لاگ را در کسری از ثانیه فیلتر و تحلیل کنید.
