-->

آموزش لینوکس صفر تا صد – Ubuntu 25

آموزش لینوکس صفر تا صد – Ubuntu 25 با داریوش حقیقی! اگر قصد دارید لینوکس را از پایه یاد بگیرید و بدون هیچ پیش‌زمینه‌ای به سطح حرفه‌ای برسید، این آموزش برای شما طراحی شده است. در این مقاله تمام مفاهیم مهم لینوکس را از نصب سیستم‌عامل تا مدیریت کاربران، خط فرمان، امنیت، شبکه، مدیریت سرویس‌ها، برنامه‌نویسی Bash و ابزارهای توسعه بررسی خواهیم کرد. اگرچه تمامی آموزش‌های عملی این راهنما بر پایه Ubuntu 25 انجام می‌شوند، اما در طول مقاله با مهم‌ترین توزیع‌های لینوکس نیز آشنا خواهید شد تا بتوانید مناسب‌ترین گزینه را برای دسکتاپ، برنامه‌نویسی، سرور، امنیت، DevOps یا استفاده روزمره انتخاب کنید. هدف این راهنما تنها آموزش چند دستور نیست، بلکه درک کامل اکوسیستم لینوکس و نحوه کار آن است تا پس از پایان آموزش بتوانید با اعتماد به نفس در اکثر توزیع‌های لینوکسی کار کنید. ساختار مقاله به صورت مرحله‌به‌مرحله از مباحث مقدماتی تا موضوعات پیشرفته تنظیم شده و تمامی مفاهیم به زبان ساده همراه با مثال‌های عملی توضیح داده می‌شوند.

لینوکس چیست

لینوکس یک سیستم‌عامل متن‌باز و چندکاربره است که بر پایه هسته یا Kernel لینوکس ساخته شده و امروزه در میلیون‌ها سرور، رایانه شخصی، ابررایانه، تجهیزات شبکه، تلفن همراه، دستگاه‌های اینترنت اشیا و سامانه‌های صنعتی مورد استفاده قرار می‌گیرد. برخلاف بسیاری از سیستم‌عامل‌های انحصاری، لینوکس توسط هزاران توسعه‌دهنده در سراسر جهان توسعه داده می‌شود و هر فرد یا سازمانی می‌تواند کد منبع آن را بررسی، تغییر یا توزیع کند. همین ویژگی باعث شده است که لینوکس از نظر امنیت، پایداری، انعطاف‌پذیری و قابلیت شخصی‌سازی شهرت بسیار بالایی داشته باشد. در واقع زمانی که از لینوکس صحبت می‌کنیم، معمولاً منظور مجموعه‌ای از نرم‌افزارها شامل هسته لینوکس، ابزارهای GNU، محیط گرافیکی، مدیر بسته و برنامه‌های کاربردی است که در قالب یک توزیع در اختیار کاربر قرار می‌گیرند. شناخت این ساختار از همان ابتدا باعث می‌شود تفاوت میان Kernel و Distribution را بهتر درک کنید و هنگام انتخاب توزیع مناسب دچار سردرگمی نشوید.

جدول مطالب

تاریخچه لینوکس

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

سیر تکامل لینوکس از یک هسته متن‌باز تا زیرساخت اصلی اینترنت، ابررایانه‌ها، سرویس‌های ابری و سیستم‌عامل اندروید به‌صورت تصویری.
این تصویر تاریخچه لینوکس را از آغاز پروژه لینوس توروالدز در سال ۱۹۹۱ تا نقش آن در سرورها، رایانش ابری، اندروید و مراکز داده نمایش می‌دهد.

امروزه شرکت‌های بزرگی مانند IBM، Intel، AMD، Google، Oracle، Canonical، Red Hat و بسیاری دیگر در توسعه لینوکس مشارکت دارند. بخش بزرگی از اینترنت، سرویس‌های ابری، مراکز داده، ابررایانه‌ها و حتی سیستم‌عامل اندروید بر پایه هسته لینوکس ساخته شده‌اند که نشان‌دهنده اهمیت این فناوری در دنیای امروز است.

هسته لینوکس

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

توزیع لینوکس چیست

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

بخش وظیفه نمونه
Kernel مدیریت سخت‌افزار Linux Kernel
Package Manager مدیریت نرم‌افزارها APT ،DNF ،Pacman
Desktop Environment محیط گرافیکی GNOME ،KDE ،XFCE
Utilities ابزارهای سیستمی GNU Tools

خانواده دبیان

خانواده Debian یکی از قدیمی‌ترین و پایدارترین شاخه‌های لینوکس محسوب می‌شود و بسیاری از توزیع‌های محبوب جهان بر پایه آن ساخته شده‌اند. ویژگی اصلی این خانواده پایداری، مخازن نرم‌افزاری بزرگ، امنیت مناسب و جامعه کاربری بسیار گسترده است. مدیر بسته APT و بسته‌های DEB در این خانواده استفاده می‌شوند و نصب یا به‌روزرسانی نرم‌افزارها بسیار ساده است. Ubuntu نیز بر پایه Debian توسعه یافته و بسیاری از ویژگی‌های اصلی خود را از آن به ارث برده است. Linux Mint برای کاربران تازه‌کار، Pop!_OS برای برنامه‌نویسان و کاربران حرفه‌ای، Kali Linux برای آزمون نفوذ و Parrot OS برای امنیت سایبری نیز همگی از خانواده Debian هستند. اگر هدف شما یادگیری لینوکس برای استفاده عمومی، توسعه نرم‌افزار یا سرور باشد، این خانواده یکی از بهترین انتخاب‌ها محسوب می‌شود.

توزیع کاربرد اصلی مناسب برای
Ubuntu همه منظوره اکثر کاربران
Debian پایداری بالا سرور
Linux Mint دسکتاپ مبتدیان
Pop!_OS برنامه‌نویسی توسعه‌دهندگان
Kali Linux امنیت متخصصان امنیت

خانواده ردهت

خانواده Red Hat بیشتر در سازمان‌ها، شرکت‌های بزرگ و مراکز داده مورد استفاده قرار می‌گیرد. این توزیع‌ها به دلیل پایداری، پشتیبانی تجاری، امنیت بالا و چرخه انتشار طولانی شهرت دارند. مدیر بسته DNF یا YUM در این خانواده استفاده می‌شود و بسیاری از مدیران سیستم، مهندسان DevOps و متخصصان زیرساخت از این توزیع‌ها بهره می‌برند. Red Hat Enterprise Linux نسخه تجاری این خانواده است، در حالی که Fedora نسخه نوآورانه و آزمایشی محسوب می‌شود. AlmaLinux و Rocky Linux نیز جایگزین‌های رایگان و بسیار محبوب برای RHEL هستند و امروزه در بسیاری از سرورهای سازمانی استفاده می‌شوند.

توزیع مدل انتشار کاربرد
Fedora سریع توسعه و دسکتاپ
RHEL بلندمدت سازمانی
AlmaLinux بلندمدت سرور
Rocky Linux بلندمدت سرور

خانواده آرچ

خانواده Arch Linux با هدف ارائه یک سیستم‌عامل ساده، سبک و کاملاً قابل شخصی‌سازی توسعه یافته است. برخلاف بسیاری از توزیع‌های دیگر، در Arch تقریباً همه چیز توسط خود کاربر تنظیم می‌شود و همین موضوع آن را به گزینه‌ای محبوب برای کاربران حرفه‌ای تبدیل کرده است. این خانواده از مدل انتشار Rolling Release استفاده می‌کند؛ یعنی کاربران همیشه جدیدترین نسخه نرم‌افزارها را دریافت می‌کنند و نیازی به نصب نسخه‌های جدید سیستم‌عامل ندارند. مدیر بسته Pacman یکی از سریع‌ترین مدیران بسته لینوکس است و مخزن AUR نیز هزاران نرم‌افزار اضافی را در اختیار کاربران قرار می‌دهد. Manjaro و EndeavourOS نسخه‌هایی هستند که نصب و استفاده از Arch را برای کاربران عادی ساده‌تر کرده‌اند.

خانواده SUSE

توزیع‌های خانواده SUSE بیشتر در محیط‌های حرفه‌ای، سازمانی و توسعه نرم‌افزار مورد استفاده قرار می‌گیرند. openSUSE Leap بر پایداری تمرکز دارد، در حالی که openSUSE Tumbleweed مانند Arch از مدل Rolling Release استفاده می‌کند و همواره جدیدترین نسخه بسته‌ها را ارائه می‌دهد. ابزار YaST یکی از قدرتمندترین ابزارهای مدیریت سیستم در دنیای لینوکس محسوب می‌شود و بسیاری از تنظیمات پیچیده را بدون نیاز به خط فرمان انجام می‌دهد. این خانواده برای مدیران سیستم، توسعه‌دهندگان و شرکت‌هایی که به ابزارهای مدیریتی پیشرفته نیاز دارند انتخاب بسیار مناسبی است.

سایر توزیع‌ها

علاوه بر خانواده‌های مشهور، توزیع‌های تخصصی دیگری نیز وجود دارند که هر کدام برای هدف خاصی طراحی شده‌اند. Alpine Linux به دلیل حجم بسیار کم و امنیت بالا در کانتینرها و Docker بسیار محبوب است. Gentoo امکان کامپایل کامل سیستم از سورس را فراهم می‌کند و کنترل بی‌نظیری روی عملکرد سیستم ارائه می‌دهد. Slackware یکی از قدیمی‌ترین توزیع‌های لینوکس است که هنوز هم توسط کاربران حرفه‌ای استفاده می‌شود. NixOS با سیستم مدیریت بسته منحصربه‌فرد خود امکان ایجاد محیط‌های کاملاً تکرارپذیر را فراهم می‌کند و در پروژه‌های مدرن DevOps و زیرساخت به تدریج محبوب‌تر می‌شود. شناخت این توزیع‌ها باعث می‌شود تصویر کامل‌تری از اکوسیستم لینوکس به دست آورید، حتی اگر در عمل از Ubuntu استفاده کنید.

چرا اوبونتو 25

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

مقایسه تصویری مزایای Ubuntu 25 و نمایش مفاهیم مشترک لینوکس که یادگیری سایر توزیع‌ها مانند Debian، Fedora و Arch را آسان می‌کند.
مقایسه تصویری مزایای Ubuntu 25 و نمایش مفاهیم مشترک لینوکس که یادگیری سایر توزیع‌ها مانند Debian، Fedora و Arch را آسان می‌کند.

یادگیری Ubuntu به معنای محدود شدن به یک توزیع نیست، زیرا بیشتر مفاهیم پایه مانند ساختار فایل‌ها، دستورات ترمینال، مدیریت کاربران، مجوزها، فرآیندها، شبکه و امنیت در تقریباً تمام توزیع‌های لینوکس یکسان هستند. به همین دلیل پس از یادگیری کامل Ubuntu 25 می‌توانید با صرف زمان کوتاهی روی Debian، Fedora، Arch Linux، openSUSE یا سایر توزیع‌ها نیز کار کنید.

روش یادگیری لینوکس

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

نیازمندی‌های نصب

قبل از نصب Ubuntu 25 بهتر است از مناسب بودن سخت‌افزار سیستم خود اطمینان حاصل کنید. اگرچه لینوکس نسبت به بسیاری از سیستم‌عامل‌های دیگر سبک‌تر است، اما داشتن سخت‌افزار مناسب تجربه بسیار روان‌تری ایجاد می‌کند. برای استفاده روزمره حداقل چهار گیگابایت حافظه RAM پیشنهاد می‌شود، اما هشت گیگابایت یا بیشتر عملکرد بسیار بهتری خواهد داشت. استفاده از حافظه SSD سرعت بوت، نصب نرم‌افزارها و اجرای برنامه‌ها را به شکل محسوسی افزایش می‌دهد. همچنین بهتر است پردازنده‌ای ۶۴ بیتی و حداقل ۳۰ گیگابایت فضای خالی برای نصب در اختیار داشته باشید. اگر قصد برنامه‌نویسی، اجرای Docker، ماشین مجازی یا محیط‌های توسعه را دارید، حافظه و فضای ذخیره‌سازی بیشتری در نظر بگیرید تا در آینده با محدودیت مواجه نشوید.

قطعه حداقل پیشنهادی
پردازنده ۲ هسته ۴ هسته یا بیشتر
RAM ۴ گیگابایت ۸ تا ۱۶ گیگابایت
فضای دیسک ۳۰ گیگابایت ۶۰ گیگابایت یا بیشتر
ذخیره‌سازی HDD SSD یا NVMe

روش‌های نصب

لینوکس را می‌توان به روش‌های مختلفی نصب و اجرا کرد و انتخاب هر روش به هدف شما بستگی دارد. اگر برای اولین بار قصد یادگیری دارید، استفاده از ماشین مجازی ساده‌ترین گزینه است زیرا بدون تغییر سیستم اصلی می‌توانید تمام قابلیت‌های لینوکس را آزمایش کنید. اگر می‌خواهید لینوکس را در کنار ویندوز داشته باشید، نصب Dual Boot انتخاب مناسبی است و هنگام روشن شدن رایانه می‌توانید سیستم‌عامل مورد نظر خود را انتخاب کنید. نصب مستقیم روی رایانه بهترین عملکرد را ارائه می‌دهد و برای استفاده دائمی پیشنهاد می‌شود. همچنین اجرای Live USB این امکان را فراهم می‌کند که بدون نصب، محیط اوبونتو را اجرا کرده و سازگاری سخت‌افزار را بررسی کنید. هر یک از این روش‌ها مزایا و محدودیت‌های خاص خود را دارند که در ادامه آموزش به صورت کامل بررسی خواهند شد.

روش مزیت کاربرد
Virtual Machine بدون تغییر سیستم آموزش
Dual Boot همراه ویندوز استفاده روزانه
نصب کامل بیشترین سرعت کاربران دائمی
Live USB بدون نصب آزمایش اولیه

محیط دسکتاپ

پس از نصب Ubuntu 25 اولین بخشی که مشاهده می‌کنید محیط دسکتاپ GNOME است. این محیط وظیفه نمایش پنجره‌ها، منوها، نوار وضعیت، اعلان‌ها و برنامه‌های گرافیکی را بر عهده دارد. برخلاف تصور برخی کاربران، محیط گرافیکی بخشی جدا از هسته لینوکس است و می‌توان آن را تغییر داد. به عنوان مثال KDE Plasma، XFCE، Cinnamon، MATE و LXQt از محبوب‌ترین محیط‌های دسکتاپ لینوکس هستند که هر کدام ظاهر، امکانات و میزان مصرف منابع متفاوتی دارند. GNOME به دلیل سادگی، طراحی مدرن، پایداری و یکپارچگی بالا به عنوان محیط پیش‌فرض Ubuntu انتخاب شده است و برای اکثر کاربران گزینه بسیار مناسبی محسوب می‌شود.

محیط ویژگی مناسب برای
GNOME مدرن اکثر کاربران
KDE Plasma قابل شخصی‌سازی کاربران حرفه‌ای
XFCE سبک سیستم‌های قدیمی
Cinnamon شبیه ویندوز کاربران تازه‌کار

ساختار فایل‌ها

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

پوشه‌های اصلی

هر دایرکتوری در لینوکس هدف مشخصی دارد و آشنایی با آن‌ها باعث می‌شود هنگام عیب‌یابی یا مدیریت سیستم سریع‌تر عمل کنید. پوشه /home محل فایل‌های کاربران است، /etc تنظیمات سیستم را نگهداری می‌کند، /var شامل فایل‌های متغیر مانند لاگ‌ها است، /usr بیشتر برنامه‌های نصب‌شده را در خود جای می‌دهد و /boot فایل‌های موردنیاز برای راه‌اندازی سیستم را ذخیره می‌کند. همچنین دایرکتوری /tmp برای فایل‌های موقت، /dev برای دستگاه‌ها و /proc اطلاعات مربوط به هسته و پردازش‌ها را نمایش می‌دهد. شناخت این ساختار یکی از پایه‌ای‌ترین مهارت‌های هر کاربر لینوکس محسوب می‌شود.

مسیر کاربرد اهمیت
/home فایل کاربران بسیار زیاد
/etc تنظیمات سیستم بسیار زیاد
/usr برنامه‌ها زیاد
/var لاگ و داده‌های متغیر زیاد
/boot راه‌اندازی سیستم مهم
/tmp فایل‌های موقت متوسط
/dev دستگاه‌ها مهم
/proc اطلاعات هسته مهم

تجربه واقعی کاربران

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

ترمینال لینوکس چیست

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

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

ترمینال در حقیقت برنامه‌ای است که امکان ارسال دستور به Shell را فراهم می‌کند و Shell نیز این دستورات را برای Kernel تفسیر و اجرا می‌کند. بسیاری از کاربران تازه‌کار در ابتدا از محیط متنی ترمینال واهمه دارند، اما پس از مدتی متوجه می‌شوند که انجام بسیاری از کارها با چند دستور بسیار سریع‌تر از جستجو در منوهای گرافیکی است. یادگیری صحیح ترمینال پایه ورود به مباحثی مانند مدیریت سرور، DevOps، برنامه‌نویسی، امنیت، Docker و Kubernetes محسوب می‌شود، بنابراین در این بخش با مهم‌ترین مفاهیم آن آشنا خواهید شد.

باز کردن ترمینال

در Ubuntu 25 چندین روش برای اجرای ترمینال وجود دارد و بهتر است از همان ابتدا میانبرهای اصلی را یاد بگیرید. سریع‌ترین روش استفاده از کلیدهای Ctrl + Alt + T است که تقریباً در تمام نسخه‌های اوبونتو کار می‌کند. همچنین می‌توانید از منوی برنامه‌ها عبارت Terminal را جستجو کرده و آن را اجرا کنید. پس از باز شدن پنجره، معمولاً نام کاربر، نام سیستم و مسیر فعلی نمایش داده می‌شود که به آن Prompt گفته می‌شود. هر دستوری که پس از Prompt وارد می‌کنید توسط Shell پردازش خواهد شد. در ادامه مقاله تقریباً تمامی مثال‌ها داخل همین محیط اجرا می‌شوند، بنابراین بهتر است از همین حالا با ظاهر و رفتار آن آشنا شوید.

ساختار دستورات

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

command [options] [arguments]

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

شناخت مسیر فعلی

در هر لحظه از کار با ترمینال داخل یک دایرکتوری قرار دارید که به آن Current Working Directory گفته می‌شود. بسیاری از دستورات روی فایل‌ها و پوشه‌های موجود در همین مسیر اجرا می‌شوند، بنابراین آگاهی از مکان فعلی اهمیت زیادی دارد. دستور pwd مسیر کامل دایرکتوری جاری را نمایش می‌دهد و یکی از اولین دستوراتی است که هر کاربر لینوکس باید یاد بگیرد. هنگام مدیریت پروژه‌ها یا فایل‌های سیستمی، بررسی مسیر فعلی از بروز اشتباهاتی مانند حذف فایل‌های اشتباه جلوگیری می‌کند.

pwd

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

نمایش فایل‌ها

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

ls
ls -l
ls -a
ls -lh

گزینه -l اطلاعات کامل فایل‌ها را نمایش می‌دهد، -a فایل‌های مخفی را نیز نشان می‌دهد و -h اندازه فایل‌ها را به صورت خواناتر مانند MB یا GB نمایش می‌دهد. ترکیب این گزینه‌ها در مدیریت فایل‌ها بسیار رایج است.

تغییر دایرکتوری

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

cd Documents
cd ..
cd ~
cd /etc
cd -

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

ساخت فایل و پوشه

یکی از اولین مهارت‌هایی که باید یاد بگیرید ایجاد فایل‌ها و دایرکتوری‌های جدید است. دستور mkdir برای ساخت پوشه و دستور touch برای ایجاد فایل خالی استفاده می‌شود. این ابزارها علاوه بر ایجاد فایل، در بسیاری از اسکریپت‌ها، پروژه‌های برنامه‌نویسی و تنظیمات سیستمی نیز کاربرد دارند. بهتر است از همان ابتدا ساختار پروژه‌های خود را با استفاده از این دستورات مدیریت کنید تا وابسته به محیط گرافیکی نباشید.

mkdir Project
mkdir Images
touch notes.txt
touch config.conf

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

کپی و انتقال

مدیریت فایل‌ها بدون دستورات کپی و انتقال تقریباً غیرممکن است. دستور cp فایل یا پوشه را کپی می‌کند و دستور mv برای انتقال یا تغییر نام فایل‌ها استفاده می‌شود. این ابزارها در مدیریت پروژه‌ها، تهیه نسخه پشتیبان و سازماندهی فایل‌ها نقش بسیار مهمی دارند. در بسیاری از مواقع کاربران حرفه‌ای به جای استفاده از File Manager تنها با همین دو دستور صدها فایل را مدیریت می‌کنند.

cp file.txt backup.txt
cp -r Project ProjectBackup
mv file.txt Documents/
mv old.txt new.txt

گزینه -r برای کپی پوشه‌ها به همراه تمام زیرشاخه‌ها استفاده می‌شود. همچنین دستور mv علاوه بر انتقال فایل، برای تغییر نام آن نیز کاربرد دارد.

حذف فایل‌ها

حذف فایل‌ها در لینوکس با دستور rm انجام می‌شود و برخلاف بسیاری از محیط‌های گرافیکی، فایل حذف‌شده معمولاً به سطل بازیافت منتقل نمی‌شود. به همین دلیل باید هنگام استفاده از این دستور دقت زیادی داشته باشید. برای حذف پوشه‌ها نیز می‌توان از گزینه بازگشتی استفاده کرد، اما اجرای اشتباه آن ممکن است حجم زیادی از اطلاعات را حذف کند. کاربران حرفه‌ای معمولاً قبل از حذف، مسیر فعلی را با دستور pwd و محتویات پوشه را با ls بررسی می‌کنند تا از بروز اشتباه جلوگیری شود.

rm file.txt
rm -r Project
rm -rf Temp

گزینه -r حذف بازگشتی پوشه‌ها را فعال می‌کند و -f بدون دریافت تأیید عملیات را انجام می‌دهد. این گزینه بسیار قدرتمند است و باید با احتیاط استفاده شود.

اشتباه رایج کاربران

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

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

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

cat file.txt
less file.txt
more file.txt
head file.txt
tail file.txt

دستور cat کل فایل را نمایش می‌دهد، less امکان جابه‌جایی داخل فایل‌های بزرگ را فراهم می‌کند، head ابتدای فایل و tail انتهای فایل را نمایش می‌دهد. در محیط‌های سروری، استفاده از less و tail بسیار رایج‌تر از cat است زیرا حجم فایل‌های لاگ معمولاً بسیار زیاد است.

ویرایش فایل‌ها

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

ویرایشگر مزیت سطح کاربر
Nano یادگیری آسان مبتدی
Vim بسیار قدرتمند حرفه‌ای
Emacs قابل توسعه پیشرفته
Gedit گرافیکی عمومی

کار با Nano

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

nano file.txt
nano /etc/hosts
nano ~/.bashrc

برای ذخیره فایل معمولاً از کلیدهای Ctrl + O و برای خروج از برنامه از Ctrl + X استفاده می‌شود. این میانبرها در پایین صفحه نیز نمایش داده می‌شوند و به راحتی قابل یادگیری هستند.

ویرایش با Vim

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

vim file.txt

پس از باز شدن فایل، با فشردن کلید i وارد حالت Insert می‌شوید و می‌توانید متن را ویرایش کنید. برای خروج از این حالت کلید Esc را فشار دهید و سپس با دستور :wq فایل را ذخیره کرده و خارج شوید. اگر قصد خروج بدون ذخیره را دارید، از دستور :q! استفاده کنید.

مسیرهای مطلق

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

نوع مسیر نمونه ویژگی
مطلق /home/djh/file.txt همیشه از ریشه شروع می‌شود
نسبی Documents/file.txt وابسته به مسیر فعلی

جستجوی فایل

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

find . -name "*.txt"
find /home -name "config*"
find /var -type f

در مثال اول تمام فایل‌های متنی در مسیر فعلی جستجو می‌شوند. در مثال دوم فایل‌هایی که نام آن‌ها با config آغاز می‌شود پیدا خواهند شد و در مثال سوم تمام فایل‌های موجود در مسیر /var نمایش داده می‌شوند.

جستجوی متن

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

grep "error" log.txt
grep -i "ubuntu" file.txt
grep -r "Listen" /etc

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

تمرین عملی

برای تثبیت مفاهیم این بخش، یک پوشه آزمایشی ایجاد کنید و چند فایل متنی مختلف داخل آن بسازید. سپس با استفاده از Nano محتوای آن‌ها را تغییر دهید، با cat و less فایل‌ها را مشاهده کنید، با head و tail ابتدا و انتهای فایل را بررسی نمایید و در نهایت با grep عبارتی خاص را میان آن‌ها جستجو کنید. پس از پایان تمرین، همان فایل‌ها را با Vim نیز باز کنید تا با تفاوت محیط‌های ویرایش آشنا شوید. انجام این تمرین ساده باعث می‌شود تقریباً تمام ابزارهای پایه مدیریت فایل‌های متنی را در محیط واقعی تجربه کنید و برای ورود به مباحث پیشرفته‌تر مانند مجوزها، کاربران و مدیریت سیستم آمادگی کامل داشته باشید.

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

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

راهنمای تصویری مجوزهای فایل در لینوکس شامل ساختار rwx، نقش Owner، Group و Others و مدیریت دسترسی‌ها برای امنیت سیستم.
این تصویر سیستم مجوزها و دسترسی‌ها در لینوکس را با نمایش Permission، مالک، گروه، سایر کاربران و دستورات chmod و chown به‌صورت آموزشی توضیح می‌دهد.

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

ساختار مجوزها

در لینوکس سه سطح دسترسی برای هر فایل یا پوشه تعریف می‌شود. سطح اول مربوط به مالک فایل یا User است، سطح دوم به اعضای گروه یا Group اختصاص دارد و سطح سوم سایر کاربران سیستم یا Others را شامل می‌شود. هر یک از این سطوح می‌توانند سه نوع مجوز شامل خواندن، نوشتن و اجرا را دریافت کنند. هنگام مشاهده اطلاعات فایل‌ها با دستور ls -l این مجوزها به صورت رشته‌ای از حروف نمایش داده می‌شوند و دانستن معنی آن‌ها برای هر مدیر سیستم ضروری است.

حرف معنی کاربرد
r Read خواندن فایل
w Write ویرایش فایل
x Execute اجرای فایل
نداشتن مجوز عدم دسترسی
ls -l

پس از اجرای این دستور، خروجی‌هایی مانند -rwxr-xr-- مشاهده خواهید کرد. بخش اول نوع فایل را مشخص می‌کند و نه کاراکتر بعدی به ترتیب مجوزهای مالک، گروه و سایر کاربران را نمایش می‌دهند.

تغییر مجوزها

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

chmod 755 script.sh
chmod 644 file.txt
chmod +x install.sh
chmod -w notes.txt

مجوز 755 معمولاً برای فایل‌های اجرایی و اسکریپت‌ها استفاده می‌شود، در حالی که 644 برای فایل‌های متنی و تنظیمات بسیار رایج است. گزینه +x فایل را قابل اجرا می‌کند و -w اجازه نوشتن را حذف می‌کند.

مالک فایل

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

chown ali file.txt
chown ali:developers app.conf
chgrp developers app.conf

دستور chown مالک فایل را تغییر می‌دهد و در صورت نیاز می‌تواند گروه را نیز همزمان تغییر دهد. دستور chgrp تنها گروه فایل را تغییر می‌دهد و زمانی کاربرد دارد که مالک همان کاربر باقی بماند.

کاربران لینوکس

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

کاربر Root

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

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

در Ubuntu به جای ورود مستقیم به Root معمولاً از دستور sudo استفاده می‌شود که امنیت بیشتری ایجاد می‌کند و تمامی عملیات مدیریتی را ثبت می‌کند.

استفاده از sudo

دستور sudo به کاربران مجاز اجازه می‌دهد یک دستور را با سطح دسترسی مدیریتی اجرا کنند. این روش نسبت به ورود مستقیم به حساب Root بسیار امن‌تر است زیرا تنها همان دستور با مجوز بالا اجرا می‌شود و پس از پایان عملیات، کاربر به سطح دسترسی عادی بازمی‌گردد. تقریباً تمام آموزش‌های Ubuntu از sudo استفاده می‌کنند و شما نیز در ادامه این مقاله بارها با آن مواجه خواهید شد.

sudo apt update
sudo apt upgrade
sudo reboot
sudo systemctl restart ssh

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

مدیریت کاربران

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

sudo adduser ali
sudo passwd ali
sudo usermod -aG sudo ali
sudo userdel ali

دستور adduser کاربر جدید ایجاد می‌کند، passwd رمز عبور را تغییر می‌دهد، usermod کاربر را به گروه جدید اضافه می‌کند و userdel حساب کاربری را حذف می‌کند. هنگام حذف کاربران باید بررسی کنید که فایل‌های مهم آن‌ها قبلاً پشتیبان‌گیری شده باشند.

مدیریت گروه‌ها

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

sudo groupadd developers
sudo usermod -aG developers ali
groups ali
id ali

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

تجربه شخصی مدیریت کاربران

در محیط‌های واقعی، یکی از رایج‌ترین اشتباهات مدیران تازه‌کار دادن دسترسی بیش از حد به کاربران است. برای مثال ممکن است همه اعضای تیم را به گروه sudo اضافه کنند تا مشکلات دسترسی برطرف شود، اما این کار سطح حمله سیستم را افزایش می‌دهد و احتمال بروز خطاهای انسانی را بیشتر می‌کند. در پروژه‌های حرفه‌ای معمولاً اصل حداقل دسترسی رعایت می‌شود؛ یعنی هر کاربر فقط مجوزهایی را دریافت می‌کند که برای انجام وظایف خود نیاز دارد. این رویکرد علاوه بر افزایش امنیت، مدیریت سیستم را نیز ساده‌تر می‌کند و در صورت بروز مشکل، بررسی فعالیت کاربران بسیار آسان‌تر خواهد بود. رعایت این اصل یکی از مهم‌ترین تفاوت‌های میان مدیریت مبتدی و مدیریت حرفه‌ای سیستم‌های لینوکسی است.

مدیریت نرم‌افزارها

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

Package Manager چیست

Package Manager نرم‌افزاری است که وظیفه نصب، حذف، به‌روزرسانی و مدیریت وابستگی برنامه‌ها را بر عهده دارد. یکی از مشکلات رایج در گذشته این بود که کاربران باید کتابخانه‌ها و پیش‌نیازهای هر برنامه را به صورت دستی نصب می‌کردند، اما مدیر بسته این فرایند را کاملاً خودکار انجام می‌دهد. زمانی که یک برنامه نصب می‌شود، APT تمام وابستگی‌های موردنیاز را بررسی کرده و در صورت نیاز آن‌ها را نیز دانلود و نصب می‌کند. این قابلیت علاوه بر صرفه‌جویی در زمان، احتمال بروز خطاهای نرم‌افزاری را نیز کاهش می‌دهد.

توزیع مدیر بسته فرمت بسته
Ubuntu / Debian APT DEB
Fedora DNF RPM
RHEL / AlmaLinux / Rocky DNF RPM
Arch Linux Pacman pkg.tar.zst
openSUSE Zypper RPM
Alpine Linux APK APK

به‌روزرسانی مخازن

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

sudo apt update

این دستور تنها فهرست بسته‌های موجود را به‌روزرسانی می‌کند و هنوز هیچ نرم‌افزاری نصب یا ارتقا نمی‌یابد. به همین دلیل اجرای آن کاملاً ایمن است و بهتر است قبل از هر نصب یا ارتقای سیستم انجام شود.

ارتقای سیستم

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

sudo apt upgrade
sudo apt full-upgrade

دستور upgrade بسته‌های موجود را بدون حذف بسته‌های دیگر ارتقا می‌دهد، در حالی که full-upgrade در صورت نیاز می‌تواند بسته‌هایی را حذف یا جایگزین کند تا وابستگی‌ها به درستی مدیریت شوند.

نصب برنامه ها در لینوکس

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

آموزش تصویری نصب نرم‌افزار در Ubuntu 25 با مدیر بسته APT و معرفی مزایای مخازن رسمی برای نصب امن و مدیریت وابستگی‌ها.
این تصویر نصب برنامه‌ها در لینوکس اوبونتو ۲۵ را با APT، دستورات apt install، مخازن رسمی، Git، Curl، Htop و Nginx به‌صورت آموزشی نمایش می‌دهد.
sudo apt install git
sudo apt install curl
sudo apt install htop
sudo apt install nginx

در مثال بالا چهار نرم‌افزار پرکاربرد نصب می‌شوند. Git برای مدیریت نسخه، Curl برای ارتباط با سرویس‌های شبکه، Htop برای مشاهده وضعیت سیستم و Nginx به عنوان وب‌سرور استفاده می‌شوند.

حذف نرم‌افزار

گاهی لازم است برنامه‌ای را از سیستم حذف کنید یا فایل‌های تنظیمات آن را نیز پاک نمایید. APT چندین روش برای حذف بسته‌ها ارائه می‌دهد که هر کدام کاربرد متفاوتی دارند. انتخاب روش مناسب باعث می‌شود فضای ذخیره‌سازی آزاد شود و فایل‌های غیرضروری روی سیستم باقی نمانند. همچنین بهتر است پس از حذف نرم‌افزارها، وابستگی‌های بلااستفاده نیز پاک شوند تا سیستم تمیز و بهینه باقی بماند.

sudo apt remove nginx
sudo apt purge nginx
sudo apt autoremove

دستور remove برنامه را حذف می‌کند اما فایل‌های تنظیمات را نگه می‌دارد. دستور purge علاوه بر برنامه، فایل‌های پیکربندی آن را نیز حذف می‌کند و autoremove وابستگی‌هایی را که دیگر موردنیاز نیستند پاک می‌کند.

جستجوی بسته‌ها

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

apt search docker
apt search mysql
apt search php

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

نمایش اطلاعات بسته

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

apt show nginx
apt show git
apt show docker.io

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

APT و سایر مدیرها

اگرچه در این آموزش از APT استفاده می‌کنیم، اما آشنایی با سایر مدیران بسته نیز اهمیت دارد. در Fedora و RHEL معمولاً از DNF استفاده می‌شود، Arch Linux از Pacman بهره می‌برد، openSUSE دارای Zypper است و Alpine Linux نیز از APK استفاده می‌کند. تفاوت اصلی این ابزارها در نحوه مدیریت بسته‌ها، ساختار مخازن و فرمت فایل‌ها است، اما مفهوم کلی نصب، حذف، ارتقا و جستجوی نرم‌افزار تقریباً در تمام آن‌ها یکسان باقی می‌ماند. بنابراین پس از یادگیری APT، مهاجرت به سایر توزیع‌ها بسیار ساده‌تر خواهد بود.

عملیات Ubuntu Arch Linux
به‌روزرسانی apt update pacman -Sy
ارتقا apt upgrade pacman -Syu
نصب apt install pacman -S
حذف apt remove pacman -R

تجربه شخصی مدیریت پکیج ها

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

پردازش چیست

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

نمایش پردازش‌ها

لینوکس ابزارهای متنوعی برای مشاهده پردازش‌های در حال اجرا ارائه می‌دهد. دستور ps اطلاعات پردازش‌ها را به صورت لحظه‌ای نمایش می‌دهد، در حالی که ابزارهایی مانند top و htop وضعیت سیستم را به صورت زنده نمایش می‌دهند. این ابزارها امکان بررسی میزان مصرف CPU، حافظه، زمان اجرا و وضعیت هر پردازش را فراهم می‌کنند و در هنگام شناسایی برنامه‌های پرمصرف یا پردازش‌های معیوب بسیار مفید هستند. استفاده منظم از این ابزارها باعث می‌شود وضعیت سیستم را بهتر درک کنید و در صورت بروز مشکل سریع‌تر علت آن را پیدا کنید.

ps
ps aux
top
htop

دستور ps aux تقریباً تمام پردازش‌های فعال سیستم را نمایش می‌دهد. ابزار top به صورت لحظه‌ای اطلاعات را به‌روزرسانی می‌کند و htop نسخه‌ای گرافیکی‌تر و کاربرپسندتر از top است که در بسیاری از توزیع‌ها قابل نصب است.

پایان پردازش

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

kill 2451
kill -15 2451
kill -9 2451
pkill firefox

سیگنال 15 درخواست پایان عادی را ارسال می‌کند و در بیشتر مواقع بهترین انتخاب است. سیگنال 9 پردازش را به صورت اجباری متوقف می‌کند و تنها زمانی باید استفاده شود که برنامه به هیچ روشی پاسخ ندهد. دستور pkill نیز بر اساس نام برنامه عمل می‌کند و نیازی به دانستن PID ندارد.

سرویس در لینوکس چیست

سرویس یا Service برنامه‌ای است که معمولاً در پس‌زمینه اجرا می‌شود و بدون نیاز به ورود کاربر وظیفه خاصی را انجام می‌دهد. وب‌سرورها، پایگاه‌های داده، سرویس SSH، سرویس چاپ، زمان‌بندی وظایف و بسیاری از اجزای سیستم‌عامل به صورت سرویس اجرا می‌شوند.

راهنمای تصویری مدیریت سرویس‌های لینوکس با Systemd و دستورات systemctl برای کنترل SSH، Nginx، سرویس‌های سیستمی و اجرای خودکار هنگام بوت.
این تصویر مفهوم سرویس در لینوکس و مدیریت سرویس‌ها با Systemd و دستور systemctl را همراه با وضعیت SSH، راه‌اندازی، توقف و راه‌اندازی مجدد نمایش می‌دهد.

در توزیع‌های مدرن لینوکس مدیریت سرویس‌ها بر عهده Systemd است که امکانات گسترده‌ای برای راه‌اندازی، توقف، بررسی وضعیت و اجرای خودکار سرویس‌ها در هنگام بوت سیستم فراهم می‌کند.

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

ابزار اصلی مدیریت سرویس‌ها در Ubuntu 25 دستور systemctl است. با استفاده از این ابزار می‌توان وضعیت هر سرویس را بررسی کرد، آن را راه‌اندازی یا متوقف نمود و مشخص کرد که هنگام روشن شدن سیستم به صورت خودکار اجرا شود یا خیر. تقریباً تمام سرویس‌های مهم لینوکس مانند SSH، Apache، Nginx، Docker و MySQL از طریق همین ابزار مدیریت می‌شوند. یادگیری systemctl یکی از مهم‌ترین مهارت‌های مدیریت سرور است.

sudo systemctl status ssh
sudo systemctl start ssh
sudo systemctl stop ssh
sudo systemctl restart ssh
sudo systemctl reload nginx

دستور status وضعیت سرویس را نمایش می‌دهد، start سرویس را اجرا می‌کند، stop آن را متوقف می‌سازد و restart برای اعمال تنظیمات جدید یا رفع مشکلات موقت استفاده می‌شود. در برخی سرویس‌ها نیز reload بدون قطع ارتباط کاربران، تنظیمات جدید را بارگذاری می‌کند.

اجرای خودکار سرویس

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

sudo systemctl enable ssh
sudo systemctl disable ssh
sudo systemctl is-enabled ssh

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

ثبت رویدادها

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

journalctl
journalctl -xe
journalctl -u ssh
journalctl -f

دستور journalctl لاگ‌های ذخیره‌شده توسط Systemd را نمایش می‌دهد. گزینه -u گزارش‌های مربوط به یک سرویس خاص را فیلتر می‌کند و گزینه -f مانند دستور tail تغییرات جدید را به صورت زنده نمایش می‌دهد.

پایش منابع

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

free -h
df -h
du -sh *
uptime

دستور free -h وضعیت حافظه RAM را نمایش می‌دهد، df -h فضای پارتیشن‌ها را بررسی می‌کند، du حجم فایل‌ها و پوشه‌ها را محاسبه می‌کند و uptime مدت زمان روشن بودن سیستم و میزان بار پردازشی را نمایش می‌دهد.

تجربه شخصی مدیریت سیستم

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

شبکه در لینوکس

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

مشاهده تنظیمات شبکه

اولین قدم در عیب‌یابی شبکه، مشاهده وضعیت کارت‌های شبکه و آدرس‌های IP سیستم است. لینوکس ابزارهای قدیمی و جدیدی برای این کار دارد، اما امروزه مجموعه دستورات ip جایگزین ابزارهای قدیمی مانند ifconfig شده است. این ابزار اطلاعات کاملی درباره رابط‌های شبکه، آدرس‌های IPv4 و IPv6، وضعیت اتصال و مسیرهای شبکه نمایش می‌دهد. تقریباً تمام مدیران سیستم از این دستورات برای بررسی سریع وضعیت ارتباط استفاده می‌کنند.

ip addr
ip link
ip route
hostname -I

دستور ip addr اطلاعات کامل رابط‌های شبکه را نمایش می‌دهد، ip route جدول مسیرهای سیستم را نشان می‌دهد و hostname -I آدرس IP سیستم را به صورت ساده نمایش می‌دهد که برای استفاده روزمره بسیار کاربردی است.

بررسی ارتباط شبکه

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

ping google.com
ping 8.8.8.8
ping -c 4 ubuntu.com

در مثال آخر گزینه -c تعداد درخواست‌ها را مشخص می‌کند. این روش از اجرای بی‌پایان دستور جلوگیری کرده و برای بررسی سریع وضعیت شبکه مناسب است.

بررسی مسیر ارتباط

گاهی ارتباط با مقصد برقرار نمی‌شود اما مشخص نیست مشکل در کدام بخش شبکه قرار دارد. ابزار traceroute مسیر عبور بسته‌ها را از سیستم شما تا مقصد نمایش می‌دهد و مشخص می‌کند درخواست از چه روترهایی عبور کرده است. این اطلاعات برای مدیران شبکه و شرکت‌های ارائه‌دهنده خدمات اینترنت اهمیت زیادی دارد زیرا محل بروز مشکل را دقیق‌تر مشخص می‌کند. هنگام بررسی سرورهای راه دور نیز این ابزار می‌تواند تأخیر یا قطعی در مسیرهای مختلف را آشکار کند.

traceroute google.com
tracepath google.com

در برخی توزیع‌ها ممکن است traceroute به صورت پیش‌فرض نصب نباشد، اما ابزار tracepath معمولاً در دسترس است و اطلاعات مشابهی ارائه می‌دهد.

بررسی پورت‌ها

بسیاری از سرویس‌های شبکه روی پورت‌های مشخصی اجرا می‌شوند. برای مثال وب‌سرور معمولاً از پورت 80 یا 443 و سرویس SSH از پورت 22 استفاده می‌کند. هنگام عیب‌یابی باید بررسی کنید که آیا سرویس موردنظر واقعاً در حال گوش دادن روی پورت صحیح است یا خیر. ابزار ss جایگزین مدرن netstat محسوب می‌شود و اطلاعات بسیار دقیقی درباره اتصال‌های فعال و پورت‌های باز ارائه می‌دهد.

ss -tuln
ss -tunap
ss -ltn

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

SSH چیست

SSH یا Secure Shell یکی از مهم‌ترین فناوری‌های لینوکس برای مدیریت سیستم‌های راه دور است. با استفاده از SSH می‌توان بدون حضور فیزیکی پشت رایانه به سرور متصل شد، دستورات را اجرا کرد، فایل‌ها را منتقل نمود و سرویس‌ها را مدیریت کرد.

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

تقریباً تمام شرکت‌های ارائه‌دهنده سرورهای لینوکسی دسترسی SSH را در اختیار کاربران قرار می‌دهند و بیشتر مدیران سیستم روزانه ساعت‌ها از این ابزار استفاده می‌کنند. ارتباط SSH به صورت رمزنگاری‌شده انجام می‌شود و نسبت به روش‌های قدیمی امنیت بسیار بالاتری دارد.

اتصال با SSH

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

ssh user@192.168.1.10
ssh user@example.com
ssh -p 2222 user@server

اگر سرویس SSH روی پورتی غیر از 22 اجرا شود، با استفاده از گزینه -p می‌توان شماره پورت را مشخص کرد. پس از اولین اتصال، اثر انگشت سرور نمایش داده می‌شود و در صورت تأیید در فایل‌های کاربر ذخیره خواهد شد.

انتقال فایل

علاوه بر اجرای دستورات، SSH امکان انتقال امن فایل‌ها را نیز فراهم می‌کند. ابزار scp یکی از ساده‌ترین روش‌ها برای کپی فایل بین دو سیستم است و از همان پروتکل امن SSH استفاده می‌کند. برای انتقال حجم بالای اطلاعات نیز ابزار rsync انتخاب بهتری است زیرا تنها تغییرات فایل‌ها را منتقل می‌کند و سرعت بالاتری دارد.

scp file.txt user@server:/home/user
scp user@server:/home/user/file.txt .
rsync -av Project/ user@server:/backup

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

فایروال لینوکس

فایروال یکی از مهم‌ترین لایه‌های امنیتی هر سیستم لینوکسی است و وظیفه کنترل ترافیک ورودی و خروجی را بر عهده دارد. اگرچه هسته لینوکس از ابزارهای قدرتمندی مانند Netfilter و nftables پشتیبانی می‌کند، اما در Ubuntu معمولاً از UFW یا Uncomplicated Firewall برای مدیریت ساده‌تر قوانین استفاده می‌شود. استفاده از فایروال باعث می‌شود تنها سرویس‌های ضروری در دسترس باشند و سایر پورت‌ها به صورت پیش‌فرض مسدود شوند. این موضوع احتمال حملات شبکه و دسترسی غیرمجاز را به میزان قابل توجهی کاهش می‌دهد.

مدیریت UFW

UFW رابطی ساده برای مدیریت قوانین فایروال است و بیشتر عملیات تنها با چند دستور انجام می‌شود. قبل از فعال کردن فایروال باید مطمئن شوید که سرویس‌های ضروری مانند SSH مجاز هستند، در غیر این صورت ممکن است ارتباط خود با سرور را از دست بدهید. پس از پیکربندی صحیح، UFW یکی از ساده‌ترین و امن‌ترین روش‌ها برای محافظت از سیستم محسوب می‌شود.

sudo ufw status
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw deny 23

این دستورات وضعیت فایروال را نمایش می‌دهند، آن را فعال می‌کنند و دسترسی به سرویس‌های SSH، HTTP و HTTPS را مجاز می‌سازند. همچنین پورت 23 که مربوط به Telnet است مسدود می‌شود، زیرا این پروتکل قدیمی از نظر امنیتی توصیه نمی‌شود.

تجربه شخصی در شبکه

در پروژه‌های واقعی بسیاری از مشکلاتی که در نگاه اول به نظر نرم‌افزاری می‌رسند، در حقیقت ناشی از تنظیمات اشتباه شبکه یا فایروال هستند. برای مثال ممکن است وب‌سرور کاملاً فعال باشد اما پورت 443 در فایروال بسته باشد یا سرویس SSH روی پورتی متفاوت اجرا شود و مدیر سیستم تصور کند سرویس از کار افتاده است. متخصصان باتجربه معمولاً قبل از تغییر تنظیمات، ابتدا وضعیت IP، جدول مسیرها، پورت‌های باز، سرویس‌های فعال و قوانین فایروال را بررسی می‌کنند. این رویکرد ساختاریافته باعث می‌شود زمان عیب‌یابی به شکل محسوسی کاهش یابد و از اعمال تغییرات غیرضروری که ممکن است مشکلات جدیدی ایجاد کنند جلوگیری شود.

شل Bash چیست

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

بررسی Shell فعال

لینوکس از Shellهای مختلفی مانند Bash، Zsh، Fish و Dash پشتیبانی می‌کند، اما Bash همچنان رایج‌ترین گزینه در بیشتر توزیع‌ها از جمله Ubuntu است. قبل از شروع برنامه‌نویسی Shell بهتر است بررسی کنید که کدام Shell برای حساب کاربری شما فعال است. همچنین آشنایی با نسخه Bash نصب‌شده اهمیت دارد زیرا برخی قابلیت‌ها تنها در نسخه‌های جدیدتر در دسترس هستند. دانستن این اطلاعات هنگام مطالعه مستندات یا اجرای اسکریپت‌های آماده بسیار مفید خواهد بود.

echo $SHELL
bash --version
echo $BASH_VERSION

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

متغیرهای محیطی

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

echo $HOME
echo $USER
echo $PATH
env

متغیر HOME مسیر پوشه خانگی کاربر را مشخص می‌کند، USER نام کاربر فعلی را نمایش می‌دهد و PATH مسیرهایی را نشان می‌دهد که سیستم برای پیدا کردن برنامه‌ها در آن‌ها جستجو می‌کند. دستور env نیز فهرست کامل متغیرهای محیطی فعال را نمایش می‌دهد.

ایجاد متغیر

علاوه بر متغیرهای پیش‌فرض، کاربران می‌توانند متغیرهای اختصاصی خود را نیز ایجاد کنند. این متغیرها برای ذخیره مسیرها، نام پروژه‌ها، کلیدهای موقت یا مقادیر موردنیاز اسکریپت‌ها استفاده می‌شوند. اگر متغیر تنها در نشست فعلی تعریف شود، پس از بستن ترمینال از بین خواهد رفت. برای دائمی کردن متغیرها باید آن‌ها را در فایل‌های پیکربندی Shell مانند .bashrc یا .profile قرار داد.

NAME="DJH"
echo $NAME
export PROJECT="LinuxCourse"
echo $PROJECT

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

اسکریپت Bash

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

اولین اسکریپت

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

#!/bin/bash
echo "Hello Linux"
echo "Welcome to Ubuntu 25"

خط اول که با #! آغاز می‌شود Shebang نام دارد و مشخص می‌کند فایل توسط Bash اجرا شود. دو خط بعدی نیز تنها متن‌هایی را در ترمینال چاپ می‌کنند و ساده‌ترین نمونه یک اسکریپت Bash را تشکیل می‌دهند.

chmod +x hello.sh
./hello.sh

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

ورودی کاربر

بسیاری از اسکریپت‌ها نیاز دارند اطلاعاتی از کاربر دریافت کنند. Bash دستور read را برای این منظور در اختیار قرار می‌دهد و می‌تواند نام، مسیر فایل، شماره نسخه یا هر داده متنی دیگری را دریافت کند. استفاده از ورودی کاربر باعث می‌شود اسکریپت‌ها انعطاف‌پذیرتر باشند و برای شرایط مختلف بدون تغییر کد قابل استفاده شوند.

#!/bin/bash
echo "Enter your name:"
read NAME
echo "Hello $NAME"

در این مثال ابتدا از کاربر درخواست می‌شود نام خود را وارد کند و سپس مقدار واردشده از طریق متغیر NAME در خروجی نمایش داده می‌شود. این مفهوم پایه بسیاری از اسکریپت‌های تعاملی لینوکس است.

شرط‌ها در Bash

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

#!/bin/bash
if [ -f test.txt ]; then
echo "File exists"
else
echo "File not found"
fi

این اسکریپت بررسی می‌کند که آیا فایل test.txt وجود دارد یا خیر. در صورت وجود پیام مناسب نمایش داده می‌شود و در غیر این صورت پیام دیگری چاپ خواهد شد. همین ساختار پایه بسیاری از اسکریپت‌های مدیریتی را تشکیل می‌دهد.

حلقه‌های Bash

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

#!/bin/bash
for FILE in *.txt
do
echo $FILE
done

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

تجربه شخصی اسکریپت‌نویسی

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

ورودی و خروجی

یکی از مهم‌ترین ویژگی‌های لینوکس امکان هدایت ورودی و خروجی دستورات است. هر برنامه در لینوکس دارای سه جریان استاندارد شامل ورودی استاندارد یا Standard Input، خروجی استاندارد یا Standard Output و خروجی خطا یا Standard Error است. به کمک عملگرهای Redirection می‌توان خروجی یک دستور را داخل فایل ذخیره کرد، خروجی خطا را جداگانه ثبت نمود یا ورودی یک برنامه را از فایل دریافت کرد. این قابلیت پایه بسیاری از اسکریپت‌های Bash، ابزارهای مانیتورینگ، سیستم‌های لاگ‌گیری و اتوماسیون محسوب می‌شود. تقریباً تمام کاربران حرفه‌ای لینوکس روزانه از Redirection استفاده می‌کنند و بدون آن مدیریت سیستم بسیار دشوار خواهد بود.

ذخیره خروجی

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

ls > files.txt
date > report.txt
uname -a > system.txt

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

افزودن خروجی

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

date >> report.txt
uptime >> report.txt
df -h >> report.txt

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

مدیریت خطاها

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

find /root 2> errors.txt
find / 2>/dev/null
command > output.txt 2> errors.txt

عدد 2 نشان‌دهنده خروجی خطا یا Standard Error است. فایل /dev/null نیز مقصدی ویژه است که تمام اطلاعات ارسال‌شده به آن دور ریخته می‌شوند و دیگر نمایش داده نخواهند شد.

Pipe چیست

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

استفاده از Pipe

با استفاده از عملگر | می‌توان خروجی هر دستور را مستقیماً به دستور بعدی ارسال کرد. این روش برای فیلتر کردن داده‌ها، شمارش خطوط، مرتب‌سازی اطلاعات و استخراج بخش‌های خاص از خروجی بسیار پرکاربرد است. تقریباً تمام مدیران سیستم از ترکیب Pipe با ابزارهایی مانند grep، sort، uniq، wc و awk استفاده می‌کنند.

ls -l | less
ps aux | grep nginx
history | tail
cat file.txt | sort

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

دستور grep

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

grep root /etc/passwd
ps aux | grep apache
grep -i error log.txt
grep -r mysql /etc

گزینه -i بزرگی و کوچکی حروف را نادیده می‌گیرد و گزینه -r جستجو را در تمام زیرپوشه‌ها انجام می‌دهد. استفاده از grep همراه Pipe یکی از رایج‌ترین الگوهای کاری در لینوکس است.

Cron چیست

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

زمان‌بندی وظایف

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

crontab -e
crontab -l
0 2 * * * /home/user/backup.sh
*/10 * * * * /home/user/check.sh

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

استفاده از Alias

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

alias ll="ls -lah"
alias update="sudo apt update && sudo apt upgrade"
alias cls="clear"

Aliasها معمولاً در فایل .bashrc ذخیره می‌شوند تا پس از هر بار ورود به سیستم به صورت خودکار در دسترس باشند. استفاده از نام‌های کوتاه و معنادار باعث افزایش بهره‌وری هنگام کار با ترمینال خواهد شد.

تجربه شخصی خودکارسازی

در محیط‌های سازمانی، مدیران سیستم به ندرت وظایف تکراری را به صورت دستی انجام می‌دهند. معمولاً مجموعه‌ای از اسکریپت‌های Bash، وظایف Cron، Aliasهای سفارشی و ابزارهای خط فرمان در کنار یکدیگر قرار می‌گیرند تا عملیات روزانه به شکل کاملاً خودکار انجام شود. این رویکرد علاوه بر صرفه‌جویی در زمان، احتمال بروز خطاهای انسانی را نیز به حداقل می‌رساند. برای مثال به جای اجرای دستی ده‌ها دستور برای بررسی سلامت سرور، می‌توان تنها یک اسکریپت را اجرا کرد که وضعیت پردازنده، حافظه، فضای دیسک، سرویس‌ها، لاگ‌ها و نسخه پشتیبان را بررسی کرده و نتیجه را در قالب یک گزارش ذخیره کند. این نوع اتوماسیون یکی از مهم‌ترین مهارت‌هایی است که کاربران حرفه‌ای لینوکس را از کاربران معمولی متمایز می‌کند.

مدیریت فضای ذخیره‌سازی

یکی از مهم‌ترین بخش‌های مدیریت لینوکس، آشنایی با دیسک‌ها، پارتیشن‌ها و سیستم‌های فایل است. تمام اطلاعات سیستم‌عامل، نرم‌افزارها، فایل‌های کاربران، پایگاه‌های داده و نسخه‌های پشتیبان روی فضای ذخیره‌سازی قرار می‌گیرند و هرگونه خطا در این بخش می‌تواند باعث از دست رفتن اطلاعات شود. لینوکس ابزارهای بسیار قدرتمندی برای مدیریت دیسک‌ها در اختیار کاربران قرار می‌دهد و برخلاف بسیاری از سیستم‌عامل‌ها تقریباً تمام عملیات از طریق ترمینال نیز قابل انجام است. شناخت ساختار ذخیره‌سازی علاوه بر افزایش مهارت فنی، هنگام نصب سرور، راه‌اندازی سیستم‌های مجازی، مدیریت RAID، LVM و فضای ابری نیز اهمیت بسیار زیادی دارد. در این بخش با مفاهیم اصلی مدیریت دیسک و فایل‌سیستم در Ubuntu 25 و سایر توزیع‌های لینوکس آشنا خواهید شد.

دیسک و پارتیشن

دیسک فیزیکی همان سخت‌افزاری است که اطلاعات روی آن ذخیره می‌شوند، اما معمولاً این دیسک به چندین بخش منطقی یا Partition تقسیم می‌شود. هر پارتیشن می‌تواند سیستم فایل مستقل، نقطه اتصال و کاربرد متفاوتی داشته باشد. برای مثال ممکن است یک پارتیشن مخصوص سیستم‌عامل، پارتیشن دیگری برای اطلاعات کاربران و پارتیشنی دیگر برای Swap در نظر گرفته شود. این تفکیک مدیریت سیستم را ساده‌تر کرده و در بسیاری از سناریوها امنیت و پایداری را افزایش می‌دهد. در سرورهای حرفه‌ای نیز معمولاً ساختار پارتیشن‌بندی با دقت و بر اساس نیاز پروژه طراحی می‌شود.

مفهوم توضیح نمونه
Disk دیسک فیزیکی /dev/sda
Partition بخش منطقی دیسک /dev/sda1
Filesystem ساختار ذخیره فایل ext4
Mount Point محل اتصال /home

نمایش دیسک‌ها

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

lsblk
sudo fdisk -l
df -h
blkid

دستور lsblk نمایی درختی از دیسک‌ها و پارتیشن‌ها ارائه می‌دهد. fdisk -l اطلاعات دقیق جدول پارتیشن را نمایش می‌دهد، df -h میزان استفاده از فضای ذخیره‌سازی را نشان می‌دهد و blkid شناسه و نوع سیستم فایل هر پارتیشن را مشخص می‌کند.

ایجاد پارتیشن

در صورت اضافه شدن یک دیسک جدید، ابتدا باید پارتیشن مناسب روی آن ایجاد شود. ابزارهای مختلفی برای این کار وجود دارند که fdisk و parted از رایج‌ترین آن‌ها هستند. انتخاب نوع جدول پارتیشن مانند GPT یا MBR به ظرفیت دیسک، نوع سیستم و سازگاری سخت‌افزار بستگی دارد. امروزه برای بیشتر سیستم‌های جدید استفاده از GPT توصیه می‌شود زیرا از دیسک‌های بزرگ و تعداد بیشتری پارتیشن پشتیبانی می‌کند.

sudo fdisk /dev/sdb
sudo parted /dev/sdb
sudo gdisk /dev/sdb

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

ساخت فایل‌سیستم

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

sudo mkfs.ext4 /dev/sdb1
sudo mkfs.xfs /dev/sdb1
sudo mkfs.btrfs /dev/sdb1

در بیشتر رایانه‌های شخصی Ubuntu از ext4 استفاده می‌شود، اما در سرورهای سازمانی ممکن است XFS یا Btrfs انتخاب مناسب‌تری باشد. انتخاب فایل‌سیستم باید بر اساس نیاز پروژه انجام شود.

اتصال پارتیشن

برای استفاده از یک پارتیشن باید آن را به یکی از مسیرهای سیستم متصل یا Mount کنید. پس از اتصال، محتویات پارتیشن از طریق همان مسیر قابل دسترسی خواهند بود. این ویژگی یکی از تفاوت‌های مهم لینوکس با ویندوز است، زیرا در لینوکس همه دستگاه‌های ذخیره‌سازی داخل یک ساختار درختی واحد قرار می‌گیرند و خبری از درایوهای C یا D نیست.

sudo mount /dev/sdb1 /mnt
mount
umount /mnt

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

اتصال دائمی

اگر بخواهید یک پارتیشن پس از هر بار روشن شدن سیستم به صورت خودکار متصل شود، باید اطلاعات آن را در فایل /etc/fstab ثبت کنید. این فایل یکی از مهم‌ترین فایل‌های پیکربندی لینوکس است و هرگونه اشتباه در ویرایش آن ممکن است باعث اختلال در فرآیند بوت شود. بنابراین قبل از ذخیره تغییرات باید صحت اطلاعات واردشده را بررسی کنید.

sudo nano /etc/fstab
UUID=xxxx /data ext4 defaults 0 2

استفاده از UUID نسبت به نام دستگاه مانند /dev/sdb1 مطمئن‌تر است، زیرا ممکن است ترتیب شناسایی دیسک‌ها پس از راه‌اندازی مجدد سیستم تغییر کند، اما UUID ثابت باقی می‌ماند.

فایل سیستم های لینوکس

لینوکس از فایل‌سیستم‌های متنوعی پشتیبانی می‌کند و هر کدام نقاط قوت و کاربردهای خاص خود را دارند. اگرچه ext4 همچنان محبوب‌ترین گزینه برای کاربران Ubuntu است، اما در محیط‌های حرفه‌ای فایل‌سیستم‌هایی مانند XFS، Btrfs و ZFS نیز استفاده گسترده‌ای دارند. شناخت تفاوت‌های آن‌ها به شما کمک می‌کند بهترین انتخاب را برای رایانه شخصی، سرور یا فضای ذخیره‌سازی سازمانی داشته باشید.

مقایسه تصویری فایل‌سیستم‌های لینوکس و مراحل ایجاد LVM از Physical Volume تا Logical Volume برای مدیریت منعطف فضای ذخیره‌سازی.
این تصویر فایل‌سیستم‌های لینوکس شامل ext4، XFS، Btrfs و ZFS را همراه با ساختار LVM، دستورات مدیریتی و کاربرد آن‌ها در سرورها آموزش می‌دهد.
فایل‌سیستم مزایا کاربرد
ext4 پایدار و سریع Ubuntu Desktop و Server
XFS مناسب فایل‌های بزرگ سرورهای سازمانی
Btrfs Snapshot و Copy-on-Write سیستم‌های مدرن
ZFS بازیابی پیشرفته و امنیت داده Storage و Backup

LVM چیست

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

sudo pvcreate /dev/sdb1
sudo vgcreate vg_data /dev/sdb1
sudo lvcreate -L 50G -n lv_backup vg_data

در این مثال ابتدا یک Physical Volume ایجاد می‌شود، سپس Volume Group ساخته می‌شود و در نهایت یک Logical Volume با ظرفیت مشخص ایجاد خواهد شد. این ساختار انعطاف بسیار بیشتری نسبت به پارتیشن‌بندی سنتی فراهم می‌کند.

تجربه شخصی مدیریت دیسک

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

داکر چیست

Docker یکی از مهم‌ترین فناوری‌های مدرن لینوکس است که اجرای برنامه‌ها را در محیط‌های ایزوله و قابل حمل امکان‌پذیر می‌کند. قبل از ظهور Docker، نصب یک برنامه روی چندین سرور معمولاً با مشکلاتی مانند تفاوت نسخه کتابخانه‌ها، وابستگی‌های نرم‌افزاری و ناسازگاری سیستم‌عامل همراه بود. Docker این مشکل را با استفاده از Containerها حل می‌کند. هر کانتینر شامل برنامه، کتابخانه‌ها، تنظیمات و تمام وابستگی‌های موردنیاز است و بدون توجه به محیط اجرا، رفتار یکسانی خواهد داشت. به همین دلیل Docker به یکی از پایه‌های اصلی DevOps، رایانش ابری، میکروسرویس‌ها و توسعه نرم‌افزار تبدیل شده است. اگر قصد ورود به بازار کار لینوکس، برنامه‌نویسی Backend یا مدیریت سرور را دارید، یادگیری Docker تقریباً یک مهارت ضروری محسوب می‌شود.

ماشین مجازی یا کانتینر

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

ویژگی Docker ماشین مجازی
سرعت اجرا بسیار سریع کندتر
مصرف RAM کم زیاد
Kernel مستقل خیر بله
مناسب توسعه عالی خوب
راه‌اندازی چند ثانیه چند دقیقه

نصب Docker

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

sudo apt update
sudo apt install docker.io
sudo systemctl enable docker
sudo systemctl start docker

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

اولین کانتینر

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

docker run hello-world
docker ps
docker ps -a

دستور اول اولین کانتینر را اجرا می‌کند. دستور دوم کانتینرهای در حال اجرا را نمایش می‌دهد و دستور سوم تمام کانتینرها، حتی کانتینرهای متوقف‌شده را نیز فهرست می‌کند.

مدیریت کانتینرها

پس از ایجاد کانتینرها باید بتوانید آن‌ها را مدیریت کنید. Docker ابزارهای مختلفی برای شروع، توقف، حذف و بررسی وضعیت کانتینرها ارائه می‌دهد. یادگیری این دستورات برای هر توسعه‌دهنده یا مدیر سرور ضروری است زیرا تقریباً تمام عملیات روزمره بر پایه همین دستورات انجام می‌شود.

docker start nginx
docker stop nginx
docker restart nginx
docker rm nginx

در مثال بالا یک کانتینر با نام nginx مدیریت می‌شود. بسته به نیاز می‌توانید آن را متوقف، مجدداً اجرا یا به طور کامل حذف کنید. حذف کانتینر تأثیری بر Image اصلی ندارد و در صورت نیاز می‌توان دوباره کانتینر جدید ایجاد کرد.

ماشین مجازی

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

ابزارهای مجازی‌سازی

چندین نرم‌افزار مطرح برای مجازی‌سازی وجود دارد که هر کدام کاربردهای متفاوتی دارند. VirtualBox بیشتر برای آموزش و استفاده شخصی مناسب است، VMware در بسیاری از سازمان‌ها استفاده می‌شود و KVM راهکار رسمی لینوکس برای مجازی‌سازی در سطح سازمانی محسوب می‌شود. انتخاب ابزار مناسب به نیاز پروژه، بودجه و زیرساخت موجود بستگی دارد.

ابزار کاربرد مناسب برای
VirtualBox رایگان آموزش
VMware Workstation حرفه‌ای توسعه
KVM مجازی‌سازی لینوکس سرورها
Proxmox VE مدیریت VM و Container دیتاسنتر

امنیت لینوکس

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

اصول امنیت

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

  • به‌روزرسانی منظم سیستم و نرم‌افزارها
  • استفاده از رمز عبور قوی و منحصربه‌فرد
  • فعال کردن UFW یا فایروال مناسب
  • استفاده از کلید SSH به جای رمز عبور
  • اعطای حداقل سطح دسترسی به کاربران
  • تهیه نسخه پشتیبان منظم
  • بررسی فایل‌های Log
  • غیرفعال کردن سرویس‌های غیرضروری

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

تجربه شخصی فناوری‌های مدرن

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

عیب‌یابی لینوکس

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

بررسی سلامت سیستم

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

این تصویر بررسی سلامت سیستم لینوکس را با نمایش مصرف CPU، حافظه RAM، فضای دیسک، Load Average، وضعیت سرویس‌ها و دستورات systemctl و journalctl آموزش می‌دهد.
این تصویر بررسی سلامت سیستم لینوکس را با نمایش مصرف CPU، حافظه RAM، فضای دیسک، Load Average، وضعیت سرویس‌ها و دستورات systemctl و journalctl آموزش می‌دهد.
top
htop
free -h
df -h
uptime

اگر حافظه RAM تقریباً پر باشد، فضای ذخیره‌سازی به پایان رسیده باشد یا Load Average به طور غیرعادی افزایش یافته باشد، باید ابتدا این مشکلات برطرف شوند و سپس سایر بخش‌های سیستم بررسی شوند.

بررسی سرویس‌ها

اگر یک سرویس مانند وب‌سرور، پایگاه داده یا SSH کار نمی‌کند، اولین اقدام بررسی وضعیت همان سرویس است. بسیاری از خطاها مستقیماً در وضعیت سرویس یا فایل‌های گزارش ثبت می‌شوند و نیازی به حدس زدن علت مشکل وجود ندارد. Systemd ابزارهای بسیار مناسبی برای این کار ارائه می‌دهد.

systemctl status nginx
systemctl status mysql
systemctl restart nginx
journalctl -u nginx

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

بررسی فضای دیسک

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

df -h
du -sh /*
du -sh /var/*
find / -size +500M

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

بررسی لاگ‌ها

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

journalctl -xe
journalctl -f
tail -f /var/log/syslog
tail -f /var/log/auth.log

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

لینوکس برای برنامه‌نویسی

یکی از دلایل محبوبیت لینوکس در میان توسعه‌دهندگان، وجود ابزارهای قدرتمند برنامه‌نویسی و سازگاری عالی با زبان‌های مختلف است. بیشتر فناوری‌های مدرن مانند Python، PHP، Java، Go، Rust، Node.js، Docker، Kubernetes و Git ابتدا برای لینوکس توسعه داده شده‌اند یا بهترین عملکرد خود را روی لینوکس ارائه می‌دهند. به همین دلیل بسیاری از برنامه‌نویسان از Ubuntu یا سایر توزیع‌های لینوکس به عنوان محیط اصلی توسعه استفاده می‌کنند.

ابزارهای توسعه

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

ابزار کاربرد مناسب برای
Git مدیریت نسخه تمام پروژه‌ها
Python برنامه‌نویسی و اسکریپت Backend و AI
Node.js JavaScript وب
PHP توسعه وب WordPress و Laravel
Docker کانتینر DevOps
VS Code ویرایشگر کد همه زبان‌ها

بازار کار لینوکس

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

مسیرهای شغلی

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

شغل مهارت‌های تکمیلی سطح تقاضا
Linux System Administrator Bash، Networking، Security بسیار زیاد
DevOps Engineer Docker، Kubernetes، CI/CD بسیار زیاد
Cloud Engineer AWS، Azure، GCP زیاد
Backend Developer Git، Docker، Database زیاد
Cyber Security Kali، Networking، Linux بسیار زیاد
Site Reliability Engineer Automation، Monitoring زیاد

مدارک لینوکس

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

مدرک سازمان سطح
Linux Essentials LPI مبتدی
LPIC-1 LPI متوسط
RHCSA Red Hat حرفه‌ای
RHCE Red Hat پیشرفته
LFCS Linux Foundation حرفه‌ای
مقایسه توزیع‌های لینوکس
یکی از مهم‌ترین پرسش‌های کاربران تازه‌کار این است که کدام توزیع لینوکس را انتخاب کنند. واقعیت این است که هیچ توزیعی برای همه بهترین نیست و انتخاب مناسب به هدف، سطح مهارت و نوع پروژه بستگی دارد. تمام توزیع‌های لینوکس از هسته مشترک Linux Kernel استفاده می‌کنند، اما در مدیریت بسته‌ها، چرخه انتشار، محیط دسکتاپ، ابزارهای مدیریتی و جامعه کاربری تفاوت دارند. اگر هدف شما یادگیری لینوکس است، بهتر است ابتدا با Ubuntu شروع کنید و سپس بر اساس نیاز با سایر توزیع‌ها آشنا شوید. شناخت تفاوت این توزیع‌ها به شما کمک می‌کند در آینده برای سرور، توسعه نرم‌افزار، امنیت، رایانش ابری یا استفاده روزمره بهترین انتخاب را داشته باشید.

مقایسه محبوب‌ترین توزیع‌ها

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

نمای درختی توزیع‌های لینوکس برای آشنایی سریع با خانواده‌های مختلف، ویژگی‌های کلیدی و بهترین کاربرد هر توزیع در دسکتاپ، سرور و توسعه.
این اینفوگرافیک درختی محبوب‌ترین توزیع‌های لینوکس را شامل Ubuntu، Debian، Fedora، Arch، RHEL، Kali و سایر توزیع‌ها همراه با کاربرد و ویژگی‌های اصلی مقایسه می‌کند.
توزیع ویژگی اصلی مناسب برای
Ubuntu کاربرپسند و پایدار مبتدی، توسعه، سرور
Debian پایداری بسیار بالا سرور و زیرساخت
Linux Mint رابط آشنا برای کاربران ویندوز کاربران خانگی
Fedora فناوری‌های جدید توسعه‌دهندگان
Red Hat Enterprise Linux پشتیبانی سازمانی شرکت‌ها و دیتاسنترها
AlmaLinux جایگزین رایگان RHEL سرور
Rocky Linux سازگار با RHEL سازمان‌ها
Arch Linux کنترل کامل سیستم کاربران حرفه‌ای
Manjaro نسخه ساده‌تر Arch کاربران نیمه‌حرفه‌ای
openSUSE ابزارهای مدیریتی قدرتمند سرور و توسعه
Kali Linux ابزارهای امنیتی تست نفوذ
Pop!_OS بهینه برای توسعه و گرافیک برنامه‌نویسان
Alpine Linux بسیار سبک Docker و Container
Gentoo کامپایل از سورس کاربران بسیار حرفه‌ای

Ubuntu یا Debian

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

Ubuntu یا Fedora

Fedora معمولاً جدیدترین نسخه نرم‌افزارها و فناوری‌های لینوکس را سریع‌تر از Ubuntu ارائه می‌کند و به همین دلیل در میان توسعه‌دهندگان محبوب است. در مقابل Ubuntu به دلیل انتشار نسخه‌های LTS، پایداری بیشتری دارد و برای محیط‌های کاری، سرورها و کاربران مبتدی انتخاب مطمئن‌تری محسوب می‌شود. اگر همیشه به آخرین نسخه نرم‌افزارها نیاز دارید Fedora گزینه جذابی است، اما اگر ثبات و سازگاری برای شما اهمیت بیشتری دارد Ubuntu انتخاب مناسب‌تری خواهد بود.

Ubuntu یا Arch

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

Ubuntu یا Kali

Kali Linux یک توزیع عمومی نیست و تنها برای تست نفوذ، ارزیابی امنیت و تحقیقات سایبری طراحی شده است. این توزیع صدها ابزار امنیتی را به صورت پیش‌فرض در اختیار کاربران قرار می‌دهد، اما برای استفاده روزمره یا یادگیری اولیه لینوکس مناسب نیست. اگر هدف شما یادگیری سیستم‌عامل لینوکس است ابتدا Ubuntu را به خوبی یاد بگیرید و سپس در صورت علاقه به امنیت سایبری، Kali Linux را به عنوان ابزار تخصصی یاد بگیرید.

بهترین توزیع برای شما

اگر هدف شما یادگیری لینوکس از صفر است، Ubuntu بهترین انتخاب خواهد بود. اگر قصد راه‌اندازی سرور پایدار دارید Debian، AlmaLinux یا Rocky Linux گزینه‌های مناسبی هستند.

نقشه راه آموزشی لینوکس با مراحل یادگیری، پروژه‌های عملی و مسیرهای تخصصی شامل DevOps، امنیت، رایانش ابری و مدیریت زیرساخت.
این اینفوگرافیک مسیر حرفه‌ای یادگیری لینوکس را از نصب Ubuntu، ترمینال، Bash، Docker و DevOps تا مدیریت سرور، امنیت و رایانش ابری نمایش می‌دهد.

برای توسعه نرم‌افزار Fedora و Pop!_OS انتخاب‌های جذابی محسوب می‌شوند. اگر علاقه‌مند به امنیت هستید، پس از یادگیری Ubuntu می‌توانید Kali Linux را آغاز کنید و اگر می‌خواهید تمام اجزای سیستم را به صورت دستی مدیریت کنید Arch Linux تجربه بسیار ارزشمندی خواهد بود. انتخاب توزیع باید بر اساس نیاز واقعی انجام شود و نه صرفاً محبوبیت آن در اینترنت.

سوالات متداول

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

  • آیا Ubuntu برای افراد مبتدی مناسب است؟
    بله، Ubuntu ساده‌ترین و محبوب‌ترین توزیع برای شروع یادگیری لینوکس است.
  • آیا لینوکس رایگان است؟
    بیشتر توزیع‌های لینوکس از جمله Ubuntu، Debian، Fedora و Linux Mint کاملاً رایگان هستند.
  • آیا می‌توان لینوکس را کنار ویندوز نصب کرد؟
    بله، با استفاده از Dual Boot می‌توان هر دو سیستم‌عامل را روی یک رایانه نصب کرد.
  • آیا Ubuntu برای برنامه‌نویسی مناسب است؟
    بله، تقریباً تمام زبان‌های برنامه‌نویسی و ابزارهای توسعه روی Ubuntu به‌خوبی پشتیبانی می‌شوند.
  • آیا برای یادگیری لینوکس باید برنامه‌نویس باشم؟
    خیر، آشنایی با برنامه‌نویسی مفید است اما برای شروع ضروری نیست.
  • آیا استفاده از ترمینال اجباری است؟
    برای استفاده روزمره خیر، اما برای مدیریت حرفه‌ای لینوکس یادگیری ترمینال ضروری است.
  • بهترین محیط دسکتاپ چیست؟
    GNOME، KDE Plasma، Cinnamon و XFCE از محبوب‌ترین گزینه‌ها هستند و انتخاب آن‌ها به سلیقه و سخت‌افزار بستگی دارد.
  • آیا لینوکس ویروس می‌گیرد؟
    احتمال آلودگی کمتر از بسیاری از سیستم‌عامل‌ها است، اما رعایت اصول امنیتی همچنان ضروری است.
  • برای سرور کدام توزیع بهتر است؟
    Ubuntu Server، Debian، AlmaLinux، Rocky Linux و RHEL از بهترین گزینه‌ها هستند.
  • یادگیری لینوکس چقدر زمان می‌برد؟
    مبانی لینوکس را می‌توان طی چند هفته یاد گرفت، اما تسلط حرفه‌ای نیازمند تمرین و پروژه‌های عملی مداوم است.
  • آیا Docker جایگزین ماشین مجازی است؟
    خیر، هر دو فناوری کاربردهای متفاوتی دارند و در بسیاری از پروژه‌ها در کنار یکدیگر استفاده می‌شوند.
  • آیا Bash هنوز ارزش یادگیری دارد؟
    بله، Bash همچنان یکی از مهم‌ترین مهارت‌های مدیریت سیستم و DevOps محسوب می‌شود.
  • بهترین روش تمرین لینوکس چیست؟
    استفاده روزانه از Ubuntu در کنار اجرای پروژه‌های واقعی، نوشتن اسکریپت و مدیریت سرویس‌ها بهترین روش یادگیری است.
  • آیا می‌توان بدون حذف ویندوز لینوکس را امتحان کرد؟
    بله، با استفاده از ماشین مجازی مانند VirtualBox یا VMware می‌توانید Ubuntu را بدون تغییر سیستم اصلی اجرا کنید.
  • پس از این آموزش چه مباحثی را یاد بگیرم؟
    پیشنهاد می‌شود Bash، Git، Docker، Networking، Kubernetes، امنیت لینوکس و مدیریت سرور را به ترتیب یاد بگیرید.

مسیر حرفه‌ای یادگیری لینوکس

بیشتر متخصصان لینوکس کار خود را با نصب Ubuntu روی یک رایانه شخصی یا ماشین مجازی آغاز کرده‌اند. در ادامه با Bash، مدیریت فایل‌ها، شبکه، سرویس‌ها و Docker آشنا شده‌اند و سپس وارد حوزه‌هایی مانند DevOps، امنیت، رایانش ابری یا مدیریت زیرساخت شده‌اند. مهم‌ترین عامل موفقیت در این مسیر انجام پروژه‌های واقعی است. نصب یک وب‌سرور، راه‌اندازی Git، ساخت کانتینر Docker، مدیریت کاربران، تهیه نسخه پشتیبان و عیب‌یابی مشکلات واقعی تجربه‌ای ایجاد می‌کند که هیچ کتاب یا دوره آموزشی به تنهایی نمی‌تواند جایگزین آن شود. اگر به صورت منظم تمرین کنید و از پروژه‌های کوچک شروع کنید، در مدت زمان نسبتاً کوتاهی می‌توانید به سطحی برسید که مدیریت سرورهای واقعی و مشارکت در پروژه‌های حرفه‌ای برای شما امکان‌پذیر باشد.

جمع‌بندی داریوش

در این آموزش جامع، مسیر یادگیری لینوکس از مفاهیم پایه تا مباحث پیشرفته را بررسی کردیم. ابتدا با تاریخچه، ساختار و فلسفه لینوکس آشنا شدید، سپس نصب Ubuntu 25، مدیریت فایل‌ها، کاربران، مجوزها، شبکه، سرویس‌ها، Bash، اسکریپت‌نویسی، مدیریت دیسک، فایل‌سیستم‌ها، Docker، ماشین‌های مجازی، امنیت، عیب‌یابی، برنامه‌نویسی، فرصت‌های شغلی و مقایسه مهم‌ترین توزیع‌های لینوکس را یاد گرفتید.

مسیر یادگیری لینوکس Ubuntu 25 با داریوش حقیقی؛ آموزش عملی ترمینال، مدیریت سرور، Docker، شبکه و مهارت‌های ضروری مدیر سیستم.
تصویر آموزش حرفه‌ای لینوکس Ubuntu 25 با داریوش حقیقی در محیطی مدرن، نمایش ترمینال، سرور، Docker، شبکه و مفاهیم مدیریت سیستم برای یادگیری عملی.

اگر این مباحث را به ترتیب تمرین کنید و پروژه‌های واقعی انجام دهید، پایه بسیار محکمی برای ورود به حوزه مدیریت سیستم، DevOps، رایانش ابری، امنیت سایبری و توسعه نرم‌افزار خواهید داشت. مهم‌ترین نکته در یادگیری لینوکس استمرار در تمرین است؛ هرچه بیشتر از ترمینال، Bash و ابزارهای لینوکسی استفاده کنید، مهارت شما سریع‌تر رشد خواهد کرد.

مقالات مرتبط

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

  • آموزش Bash Shell صفر تا صد
  • آموزش دستورات لینوکس از مبتدی تا حرفه‌ای
  • آموزش مدیریت کاربران و Permission در لینوکس
  • آموزش Git در لینوکس
  • آموزش Docker صفر تا صد
  • آموزش Kubernetes برای مبتدیان
  • آموزش Linux Server Administration
  • آموزش امنیت لینوکس و Hardening
داریوش حقیقی
نویسنده و توسعه‌دهنده

داریوش حقیقی

بیش از 20 سال تجربه در حوزه فناوری اطلاعات، طراحی سایت، سئو تکنیکال، مدیریت سرورهای لینوکس و ویندوز، توسعه وردپرس، برنامه‌نویسی، اتوماسیون و هوش مصنوعی. در djh.ir تلاش می‌کنم تجربیات واقعی پروژه‌های اجرایی، آموزش‌های کاربردی و راهکارهای عملی را با زبانی ساده و قابل استفاده منتشر کنم.

20+ سال تجربه
100+ پروژه اجرایی
1000+ ساعت آموزش

نظر و سوالتون رو اینجا بنویسید...

تماس در تلگرام