ویرگول
ورودثبت نام
احمد رفیعی
احمد رفیعیمشاور زیرساخت. موسس سایت آموزشی DockerMe.ir
احمد رفیعی
احمد رفیعی
خواندن ۲۰ دقیقه·۲ سال پیش

چه عمقی از لینوکس برای دواپس لازمه؟

سلام و درود

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

خب یه مروری کنیم پست‌های قبلی رو:

  • دواپس چیه و چرا لازمه؟  اینجا در مورد دواپس و ضرورت استفاده از آن صحبت کردم.

  • چطور اپلیکیشن مناسب کلاد آماده کنیم؟ و اینجا توضیح دادم که چطور می‌تونیم یه اپلیکیشن مناسب کلاد توسعه بدیم.

  • چه عمقی از لینوکس برای دواپس لازمه؟ و اینجا توضیح دادم که کدوم موارد لینوکس برای دواپس الزامی هست که اول سراغ اون موارد بریم.

  • خودکارش کن,مشکلاتت حل میشه در اینجا در مورد اتومیشن و اینکه انسیبل چیه و چه کمکی به ما می‌کنه صحبت کردم.

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

  • در مسیر دواپس به داکر رسیدیم (قسمت اول) تو این پست داکر رو شروع کردیم و اونو معرفی کردیم.

  • در مسیر دواپس اینبار: پشت داکر چه خبره؟ (قسمت دوم) توی این پست در مورد تکنولوژی هایی که داکر ازشون استفاده میکنه توضیح دادیم.

  • تست نوشتن و شروع مسیر CI/CD (قسمت اول) توی این پست انواع تست رو بررسی کردیم و با ابزارهای CI/CD آشنا شدیم و یه مقایسه بین گیت‌لب و جنکینز داشتیم.

  • در مسیر CI/CD گیت رو بررسی می‌کنیم (قسمت دوم) توی این پست قبل ورود به گیت‌لب نیاز بود که گیت و ورژن کنترل سیستم ها رو یه بررسی کنیم.

  • در مسیر ‌CI/CD شناخت گیت‌لب (قسمت سوم) توی این پست اجزای گیت‌لب رو بررسی کردیم و با کامپوننت‌های مختلفی که داره بیشتر آشنا شدیم.

  • در مسیر ‌CI/CD پایپ‌لاین و رانر گیت‌لب (قسمت چهارم) توی این پست پایپ‌لاین و رانر گیت‌لب رو بررسی کردیم.

  • در مسیر CI/CD وریبل، گیت‌آپس و جمع‌بندی (قسمت پنجم) توی این پست وریبل‌های گیت‌لب رو بررسی کردیم و یه معرفی کوتاه از گیت‌آپس و آتودواپس کردیم و در انتها یه مقدار تجربه‌های خودم رو در گیت‌لب باهاتون به اشتراک گذاشتم.

  • در مسیر Observability، الک (قسمت دوم) توی این پست استک قدرتمند ELK رو بررسی کردیم.

  • در مسیر Observability، جمع بندی استک الک (قسمت سوم) توی این پست بقیه کامپوننت‌های استک الک رو بررسی کردیم و fluentd و fluentbit رو مقایسه کردیم و نهایتا یه معرفی هم روی opensearch داشتیم.

  • در مسیر Observability، استک پرومتئوس (قسمت چهارم) توی این پست یه معرفی اولیه داشتیم روی استک پرومتئوس.

  • در مسیر Observability، استک پرومتئوس (قسمت پنجم) توی این پست یه مقدار کامپوننت های استک پرومتئوس رو بیشتر بررسی کردیم.

  • در مسیر Observability، استک ویکتوریا (قسمت ششم) توی این پست استک ویکتوریا رو معرفی کردیم و سعی کردیم با پرومتئوس مقایسه‌اش کنیم.

  • در مسیر Observability، می‌می‌ر (قسمت هفتم) توی این پست در مورد ابزار میمیر از ابزارهای گرافانا توضیح دادیم و کاربردش رو بررسی کردیم.

  • در مسیر Observability، لوکی (قسمت هشتم) توی این پست در مورد ابزار گرافانا برای مدیریت لاگ یعنی لوکی توضیح دادیم و آخرشم یه معرفی کوتاه رو graylog داشتیم.

  • در مسیر Observability، تمپو (قسمت نهم) توی این پست در مورد تریسینگ توضیح دادیم و گرافانا تمپو رو بررسی کردیم و یه معرفی کوتاه روی Jaeger داشتیم

  • در مسیر Observability، گرافانا (قسمت دهم) توی این پست در مورد گرافانا و HA کردنش و همچنین یه سری از ابزارهاش مثل alloy , incident, on-call توضیح دادیم.

  • آغاز مسیر کوبر (قسمت اول) تو این قدم به معرفی ابزارهای ارکستریشن پرداختیم و مدارک کوبرنتیز رو بررسی کردیم.

  • کوبر سینگل ( قسمت دوم ) توی این قدم در مورد kubectl , kubeconfig توضیح دادیم و تعدادی ابزار رو معرفی کردیم که به کمک اونها میتونیم یک کوبرنتیز دمه‌دستی واسه تست‌هامون داشته باشیم.

  • کامپوننت‌های کوبر ( قسمت سوم ) توی این پست کامپوننت‌های مختلف کوبرنتیز رو بررسی کردیم و اجزای نودهای مستر و ورکر رو دونه دونه بررسی کردیم و توضیح دادیم.

  • پادها و مدیریت اونها در کوبرنتیز (قسمت چهارم) توی این پست در مورد پاد توی کوبرنتیز توضیح دادیم و موارد مربوط به اون رو بررسی کردیم.

  • ورک‌لودهای کوبر و مدیریت منابع کوبر (قسمت پنجم) توی این پست در مورد namespaceها توی کوبر توضیح دادیم و انواع ورک‌لود کوبر رو بررسی کردیم.

  • اگه لازم شد کوبر خودش گنده میشه‌! ( قسمت ششم ) توی این پست در مورد سه نوع ورک‌لود‌ مرتبط با scaling به صورت خودکار در کوبرنتیز توضیح دادیم.

  • نتورک کوبر (قسمت هفتم) توی این قسمت انواع سرویس توی کوبرنتیز رو بررسی کردیم و در مورد مفاهیم اینگرس و نتورک پالیسی توضیح دادیم.

  • استورج کوبرنتیز (قسمت هشتم) توی این قسمت در مورد انواع استورج توی کوبرنتیز توضیح دادیم و مفاهیم PV و PVC و Storage Class رو بررسی کردیم.

  • پراب، ریکوئست و لیمیت (قسمت نهم) توی این قسمت موارد مربوط به محدود کردن منابع کانتینر توی کوبرنتیز رو بررسی کردیم و در مورد انواع ‌probe ها توی کوبرنتیز توضیح دادیم.

  • پاد تو نود (قسمت دهم) توی این قسمت درمورد فرآیند انتقال پاد به نود مناسب مفاهیم پیشرفته‌تری مثل affinity و anti-affinity و taint و toleration رو بررسی کردیم.

  • اولویت پاد و امنیت (قسمت یازدهم) توی این قسمت در مورد تعیین اولویت برای پادها و جنبه‌های مختلف امنیت در کوبرنتیز توضیح دادیم.

  • کنترل دسترسی به کوبر (قسمت دوازدهم) توی این قسمت در مورد مراحل دسترسی به api کوبرنتیز صحبت کردیم و بعدش مفاهیمی مثل سرویس اکانت رو توضیح دادیم.

  • دیزاین کلاستر (قسمت سیزدهم) توی این قسمت در مورد طراحی و دیزاین یک کلاستر و روش‌های مختلفی که داره توضیح دادیم و همچنین تفاوت روش‌های مختلف تقسیم منابع در کلاسترها را بررسی کردیم.

  • مالتی تننسی در کوبر (قسمت چهاردهم) توی این قسمت چالش‌های مربوط به داشتن چند مستاجر بر روی کلاستر کوبرنتیز توضیح دادیم.

  • هلم (قسمت پانزدهم) توی این قسمت پکیج منیجر معروف کوبرنتیز یعنی Helm رو بررسی کردیم و در موردش ویژگی‌ها و کاربردهاش توضیح دادیم.

  • سی آر دی و اُپراتور (قسمت شانزدهم) توی این قسمت در مورد اینکه چطوری یه ریسورس کاستوم شده به کلاستر اضافه کنیم توضیح دادیم و مفهوم اُپراتور رو توی کوبر بررسی کردیم.

  • نصب کلاستر با kubeadm (قسمت هفدهم) توی این قسمت قدم به قدم نحوه نصب یک کلاستر کوبرنتیز رو با استفاده از ابزار kubeadm توضیح دادیم.

  • نصب کلاستر با kubespray (قسمت هجدهم) توی این قسمت نحوه نصب کلاستر با یه پروژه خیلی خوب به نام کیوب اسپری که یه انسیبل خفن برای ستاپ کلاستر رائه میده رو توضیح دادیم.

  • نصب کلاستر با rancher (قسمت نوزدهم) توی این قسمت توضیح دادیم که چطور با استفاده از ابزار RKE یک کلاستر کوبرنتیز راه‌اندازی کنیم.

توصیه می‌کنم که حتما این پست‌ها رو هم مطالعه کنید.

چرا لینوکس لازمه و کدوم توزیع:

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

از دلایل خودم بخوام بگم:

  • رایگان و متن باز هست که امکان خیلی مهمی است

  • جامعه‌ی خیلی بزرگی داره و کمک می‌کنه که به راحتی مشکلاتتون حل بشه

  • قابلیت سفارشی سازی خیلی خوبی داره یعنی می‌تونی برای هر کاری به خوبی Customizeاش کنید

  • تمام ابزارهای دواپس خصوصا Cloud و Orchestration برای لینوکس توسعه پیدا کردند

  • به خوبی می‌تونید امنش کنید (Hardening) و می‌تونید کاراییش رو بیشتر کنید (Tuning)

  • خط فرمان (CLI) که خیلی قدرتمنده و هر کاری که بخواید رو می‌تونید اونجا انجام بدید

حالا چه توزیعی رو باید انتخاب کنیم.

انتخاب توزیع از مهمترین تصمیم‌ها بعد از انتخاب سیستم‌عامل است. تو پروژه‌های بزرگ مثل Kubernetes یا Openstack یا Ceph این انتخاب خیلی می‌تونه مسیر پروژه را تغییر بده. پس خیلی مهمه که اول پروژه‌ انتخاب کنید که چه توزیعی از لینوکس رو برای سرورهای‌ خودتون استفاده می‌کنید.


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

حالا دیگه سیستم‌عامل و توزیع اون رو انتخاب کردیم. بریم ببینم چه مواردی رو باید تو لینوکس بدونیم.

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

چه مواردی از لینوکس رو باید بدونیم:

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

Package Management:

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

  • apt (Debian/Ubuntu) or yum (CentOS/RHEL): Package management commands for installing, updating, and removing software packages.

  • dpkg (Debian/Ubuntu) or rpm (CentOS/RHEL): Package management commands for querying package information and managing individual packages.

Process and System Management:

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

  • ps: View running processes.

  • top: Monitor system resources and processes in real-time.

  • htop: interactive process viewer.

  • atop : advanced interactive monitor to view the load on a Linux system.

  • lsof : list open files.

  • kill: Terminate processes.

  • bg: To send a process to the background

  • fg: run a stopped process in the foreground

  • jobs: Display status of jobs​

  • systemctl: Manage system services.

  • jornalctl: Query the systemd journal

  • free: Display system memory usage.

  • uptime: Show system uptime and load averages.

Monitoring, Logging, and viewing file:

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

  • cat: Concatenate and display file contents.

  • grep: Search for patterns in files.

  • head: Display the beginning of a file.

  • tail: Display the end of a file.

  • less: View file contents interactively.

  • sed: Stream editor for text manipulation.

  • awk: Text processing and data extraction tool.

  • nmon : A system monitor tool for Linux and AIX systems.

  • iostat : A tool that reports CPU statistics and input/output statistics for devices, partitions and network filesystems.

  • sar : A system monitor command used to report on various system loads, including CPU activity, memory/paging, device load, network.

  • vmstat : A tool that reports virtual memory statistics.

  • sort : A command-line utility for sorting lines of text files.

  • cut : A command-line utility for cutting sections from each line of files.

  • uniq : A command-line utility for reporting or omitting repeated lines.

  • echo : A command-line utility for displaying a line of text.

  • wc : A command-line utility for printing newline, word, and byte counts for files.

Linux Networking Tools:

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


  • TCP/IP: These are a set of standard rules that allows different types of computers to communicate with each other

  • UDP: UDP (User Datagram Protocol) is a connectionless, unreliable transport layer protocol

  • httpor https: a protocol used for transferring web pages and other resources on the World Wide Web

  • DNS: a protocol that translates human-readable domain names into IP addresses

  • SMTP: a protocol for sending and receiving email

  • POPand IMAP: POP and IMAP are protocols used by email clients to retrieve messages from a server

  • SSH: a protocol that provides secure, encrypted communication between devices over an insecure network

  • SNMP: a protocol used for managing and monitoring network devices, such as routers, switches, and servers

  • BGP: a protocol used to exchange routing information between autonomous systems on the Internet

  • DHCP: a protocol that automates the process of assigning IP addresses to devices on a network

  • ARP: A protocol used to map IP addresses to MAC addresses on a local network

  • FTPor sftp: a protocol designed for transferring files between computers

  • ICMP: a network protocol that is used to send error messages and operational information about network conditions

  • NTP: A protocol used to synchronize the clocks on devices on a network

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

  • ping: Send ICMP echo requests to a host.

  • curl or wget: Download files from the web.

  • ssh: Securely connect to remote systems.

  • scp: Securely copy files between systems.

  • ssh-keygen: OpenSSH authentication key utility

  • netstat or ss: Network statistics and connections.

  • ifconfig or ip: Network interface configuration.

  • telnet: user interface to the TELNET protocol

  • mtror traceroute: network diagnostic tool

  • digor nslookup: DNS lookup utility

  • rsync: a fast, versatile, remote (and local) file-copying tool

  • nmap: Network exploration tool and security / port scanner

  • tcpdump: dump traffic on a network

  • route: show / manipulate the IP routing table

Linux Firewall:

فایروال یا دیواره‌ی آتش یکی از مهمترین موارد تو مدیریت سرورها است. سرور بدون فایروال یعنی خطر از دست دادن سرور و اطلاعات آن. شما تمام سرورهایی که کانفیگ می‌کنید باید دارای فایروال باشند. لینوکس با استفاده از netfilter کرنل فرآیند packet filtering رو برای ما به صورت کامل انجام می‌دهد. اونقدر قوی و کامل است که می‌تونیم لینوکس خودمون رو طوری کانفیگ کنیم که به عنوان فایروال نقش ایفا کند. اینترفیس ارتباط با netfilter ابزار iptables هست. خیلی ابزار قدرتمندی هست و باهاش خیلی خوب می‌شه فایروال لینوکس رو کانفیگ کرد. ابزارهای دیگه مثل ufw یا firewalld کار با iptables رو برای ما ساده‌تر کردن و همه‌ی اونها هم ruleهای iptables می‌زنند. من توصیه می‌کنم حتما حتما کار با iptables رو یاد بگیرد و فایروال تمام سرورهای خودتون رو کانفیگ کنید. به صورت کلی من همیشه دوست دارم مستقیم با خود اون ابزار کار کنم تا یه اینترفیس دیگه جلوی اون بنابراین بهتون توصیه می‌کنم که حتما با خود iptables کار کنید.

  • ufw and firewalld - Firewall management tools.

  • iptables and nftables - Firewall management tools.

File, Directory, and Disk Management:

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

یکی از موارد دیگه دیسک و مدیریت آن است. کار با دیسک خیلی مهمه اینکه چطوری دیسک‌ها رو مدیریت کنیم و چه فایل‌سیستمی رو برای اون انتخاب کنیم خیلی اهمیت داره. مثلا اینکه دیسک خودمون رو چطور پارتیشن‌بندی کنیم. کدوم دایرکتوری‌ها رو تو پارتیشن جدا قرار بدیم. کدوم یکی از اونها رو LVM کنیم. اینها همه موضوعاتی هست که لازمه بهش دید داشته باشیم و بدونیم. براتون یه مثال از تجربه‌ی خودم بزنم. گاهی پیش میاد که تو پروژه لازم می‌شه یه دیسک جدید به سرور اضافه کنیم. نکته‌ی مهم اینه که اگر تو فایل etc/fstab/ پارتیشن‌ها رو با UUID مشخص و معرفی نکرده باشیم ممکنه که سیستم‌عامل ما کلا بوت نشه و دیسک جدید بالاتر از دیسک قبلی قرار بگیره و سیستم‌عامل بخواد از روی اون بوت بشه. پس دونستن این موارد برای کار با لینوکس خیلی اهمیت داره.

  • ls: List files and directories.

  • cd: Change the current directory.

  • pwd: Print the current working directory.

  • mkdir: Create a new directory.

  • rm: Remove files and directories.

  • cp: Copy files and directories.

  • mv: Move or rename files and directories.

  • find: Search for files and directories.

  • chmod: Change file permissions.

  • chown: Change file ownership.

  • lsattr: list file attributes on a Linux second extended file system

  • chattr: change file attributes on a Linux file system

  • fdisk: manipulate disk partition table

  • lsblk: list block devices

  • mkfs: build a Linux filesystem

  • lvm: LVM2 tools

  • df: Display disk space usage.

  • du: Estimate file and directory disk usage.

  • ncdu: NCurses Disk Usage

  • mount: mount a filesystem

  • parted: a partition manipulation program

  • cfdisk: display or manipulate a disk partition table

  • blkid: locate/print block device attributes

Linux Editor:

تو لینوکس همه‌ چیز فایل است. وقتی همه چی فایله پس کار با فایل‌ها خیلی اهمیت پیدا می‌کنه. به صورت کلی من توصیه می‌کنم که حتما شما کار با یه CLI Editor و یک GUI Editor رو بدونید و بهش مسلط باشید. این که شما چه چیزهایی رو انتخاب می‌کنید سلیقه‌ای است اما لازمه که حتما کار با آنها رو بدونید. حتما تو CLI Editor این توصیه رو دارم که حتما ادیتوری رو انتخاب کنید که معمولا روی سرورها نصب است تا همواره بتونید باهاش فایل‌ها رو بررسی و کانفیگ کنید. من خودم پیشنهادم استفاده از vim برای CLI و از Vscode برای GUI هست که هر دو ادیتورهای قدرتمندی هستن. Vscode یکی از معدود محصولات Microsoft هست که من خیلی دوستش دارم و ازش استفاده می‌کنم. :) پس لازمه که حتما کار با ادیتورها رو بدونید و بتونید نیازهای خودتون رو باهاش برطرف کنید.

  • vi: a programmer's text editor

  • vim: Vi IMproved, a programmer's text editor

  • nano: Nano's another editor, inspired by Pico

‌Bash Scripting:

بش اسکریپتینگ یکی از راه‌هایی هست که ما می‌تونیم تسک‌ها و مواردی که تو لینوکس می‌خواهیم انجام بدیم رو خودکار کنیم. این خودکار سازی بهمون کمک می‌کنه که کارهای تکراری که لازمه انجام بشه رو به راحتی انجام بدیم. تو استفاده از بش اسکریپت ما تمام امکانات خط فرمان رو داریم و دستمون کامل بازه. یه نکته‌ی کوچیک بگم اینکه امروزه با قدرتمند شدن Configuration managementها و ظهور Infrastructure as code شاید استفاده و کاربرد bash script کمتر شده باشه اما هنوز برای خیلی از موارد داخل سیستم‌عامل مثل بکاپ گرفتن و .... کاربردی هست و ازش استفاده می‌شه.

Web Servers:

شاید می‌تونست جای وب سرور اینجا نباشه و خودش یه مبحث جداگانه‌ای باشه اما به نظرم با توجه به گستردگی موضوعات اینم اینجا بررسیش کنیم. دونستن وب سرور و کار باهاش خیلی مهمه و لازمه. ما معمولا با استفاده از وب‌سرور سرویس نهایی خودمون رو به کاربر می‌دیم. یکی از بهترین و قوی‌ترین وب‌سرورها جناب Nginx هست که خیلی کار می‌تونید باهاش انجام بدید. شما از nginx می‌تونید برای Reverse proxy، Cache، Load balancer، ایجاد آپلود سرور، ارائه‌ی فایل و فایل سرور و ... استفاده کنید که تو تمام این زمینه‌ها هم از قدرت خوبی برخوردار است.

یه ابزار دیگه هم اینجا بهتون توصیه می‌کنم که یاد بگیرد Traefik است که کمک می‌کنه تا Automatic Configuration داشته باشید. البته اگر از داکر یا پروایدرهای دیگه‌ای که پشتیبانی می‌کنه استفاده کنید. کلا دونستن و کار کردن با یک وب سرور برای کار دواپس به نظرم کاملا الزامی است.

Hardening and Tuning:

همواره لینوکس به صورت عمومی منتشر می‌شه و تقریبا برای استفاده‌ی خاصی سفارشی نشده است. مگر اینکه توزیع خاصی باشه که برای استفاده‌ی خاصی آماده شده باشه. پس به صورت کلی لینوکس برای استفاده‌ی عمومی آماده شده. پس نیازه که سرور لینوکس رو امن و کاربردی کنیم. امن کردن لینوکس یا Hardening یک سری موارد است که کمک می‌کنه که سرور امن‌تر شود. برخی از اقدامات که در هاردنینگ انجام می‌دیم شامل امن‌کردن SSH سرویس، جدا کردن برخی از پارتیشن‌ها، دسترسی فایل‌ها و دایرکتوری‌ها، کانفیگ درست پکیج‌ منیجر، کانفیگ فایروال، کانفیگ audit logging، غیر فعال کردن قابلیت‌هایی که استفاده نمی‌شه و برخی موارد دیگه که از حوصله‌ی این مستند خارجه. یه ابزار بهتون معرفی می‌کنم به اسم Lynis که کمکتون می‌کنه تا سرور لینوکسی خودتون رو Audit کنید و ببنید که الان تو چه وضعیتی از hardening قرار دارید.

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


سخن پایانی:

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

شاد باشید.

linuxdevops
۳۷
۹
احمد رفیعی
احمد رفیعی
مشاور زیرساخت. موسس سایت آموزشی DockerMe.ir
شاید از این پست‌ها خوشتان بیاید