یکی از پرسشهای مهمی که برای بیشتر مبتدیان حوزه DevOps پیش میآید این است که چه مقدار دانش لینوکس برای متخصص شدن در این حوزه نیاز است. این هدف اصلی ما از نوشتن این مطلب است چرا که ما قصد داریم حداقل دانش لینوکسی برای متخصصین دوآپس را به شما معرفی کنیم.
پیش از هرچیزی این مسئله را بگوییم که شما قبل از مطالعه ادامه این مقاله نیاز دارید تا با یکسری بدیهیات آشنا شوید. اول از همه اینکه شما نیاز دارید که به خوبی با اکوسیستم لینوکس، توزیعهای مختلف و دلایل نیازمندی آن آشنا شوید و پس از آن با نصب کردن لینوکس روی سیستم عامل و مواردی از این دست آشنا شوید. این موضوعات پایهای، مواردی هستند که هر فردی که در حوزه کامپیوتر کار میکند نیاز دارد که با آنها آشنایی داشته باشد بنابراین مختص به متخصصین دوآپس نیست.
حال که به صورت کلی این موارد را ذکر کردیم بیایید با حداقل دانش لینوکسی برای متخصصی دوآپس آشنا شویم:
۱- ساختار و فایل سیستم لینوکس
پیش از هر چیزی نیاز است که با ساختار و فایل سیستم خود لینوکس آشنا شوید. در ادامه ما مهمترین موضوعات مربوط به این ساختار را به شما معرفی میکنیم:
دایرکتوری روت یا Root Directory: مهمترین دایرکتوری لینوکس، دایرکتوری روت بوده و تمام ساختار مربوط به فایلهای لینوکس در این دایرکتوری قرار دارد. بسیار مهم است که شما دایرکتوری روت و تمام زیر دایرکتوریها مانند etc، var، home
و… را بشناسید و با وظیفه و کار هر کدام آشنا شوید.
File Types: در قدم بعدی باید با انواع نوعی فایلها در لینوکس آشنا شوید. برای مثال فایلهای عادی، دایرکتوریها، لینکهای سیمبولیک، فایلهای دیوایس و… .
Path Variables: درک کردن مسیرها و متغیر PATH قدم بعدی شماست. زمانی که شما در فایل سیستم لینوکس مشغول کاوش هستید میتوانید از Absolute Path و Relative Path استفاده کنید. همچنین برای نشان دادن مسیری که در آن هستید میتوانید از pwd
استفاده کنید.
pwd # خروجی /Users/flavius/Workspace/example
منظور از Absolute Path مسیرهای مشخصی هستند که با دایرکتوری روت شروع میشوند اما Relative Path به مسیرهایی گفته میشوند که مربوط به همان مسیری هستند که شما در آن قرار گرفتهاید. دو نمونه از آدرس دهی به هر کدام از این مسیرها را در زیر میتوانید مشاهده بکنید:
وضعیتی یا دایرکتوری که در آن قرار گرفتهایم به شکل زیر است:
ls # فایلها و دایرکتوریهای موجود در مسیر کنونی a b c dir
حال براساس این وضعیت میتوانیم به دو صورت زیر عمل بکنیم:
# Relative Path cd dir # Absolute Path cd /Users/flavius/Workspace/example/dir
اما متغیر PATH ارتباطی با این دو نوع Relative و Absolute ندارد، این موارد در واقع تنظیمات محیطی یا environment setting لینوکس هستند که برای تعیین محل فایلهای اجرایی استفاده میشوند. در زیر نحوه تعیین یا ست کردن یک متغیر PATH را میتوانید مشاهده بکنید:
# Example setting of the PATH variable export PATH=$PATH:/new/directory/path
دسترسیهای فایل: یکی از مهمترین موضوعاتی که نیاز است به خوبی با آن آشنا شوید بحث دسترسیها و مدیریت کردن این موارد است. برای این موضوع نیاز است تا با مفاهیم user، group و دیگر دسترسیها آشنا شوید و سپس سراغ یادگیری دستوراتی مانند chmod
، chown
و chgrp
بروید. قبل از اینکه سراغ مثالهایی از این دستورات برویم، بیایید به نمونههایی از دسترسیها نگاه کنیم:
ls -la drwxr-xr-x 6 flavius staff 192 Aug 27 15:42 . drwxr-xr-x 127 flavius staff 4064 Aug 27 15:42 .. -rw-r--r-- 1 flavius staff 0 Aug 27 15:42 a -rw-r--r-- 1 flavius staff 0 Aug 27 15:42 b -rw-r--r-- 1 flavius staff 0 Aug 27 15:42 c drwxr-xr-x 2 flavius staff 64 Aug 27 15:42 dir
با وارد کردن دستور ls -la
میتوانید تمام فایلها و دایرکتوریهای موجود در دایرکتوری کنونیتان همراه با دسترسیهای آنها را ببینید. اولین ستونی که در خروجی مشاهده میکنید اطلاعات مربوط به دسترسیها در آن قرار دارد. اگر دسترسی با حرف d شروع شود به این معناست که ساختار مربوطه یک دایرکتوری است. دو مورد اول و مورد آخر در مثال بالا به این شکل هستند.
حروف دیگر نیز هر کدام نماینده یک نوع دسترسی هستند. برای مثال r دسترسی خواندن یا Read، حرف W دسترسی نوشتن یا Write و حرف x دسترسی اجرا کردن یا Execute را نمایندگی میکنند.
اگر به دقت نگاه کنید میبینید که برای هر فایل ۹ حالت وجود دارد در صورتی که ما کلا سه حالت مجوز دسترسی داریم. دلیل وجود این ۹ مورد که در واقع در سه قسمت دسته بندی میشود، تعریف ترکیب این مجوزها برای سه گروه مختلف است.
- سه مورد اول مربوط به owner یا صاحب فایل است که برای فایل اول یعنی a مجوز خواندن و نوشتن پیادهسازی شده است.
- سه مورد دوم مربوط به group یا گروه است که برای فایل اول یعنی a فقط مجوز خواندن در نظر گرفته شده است.
- سه مورد سوم مربوط به others یا دیگران (حالتهایی غیر از دو حالت اول) میشود که برای فایل اول یعنی a نیز فقط مجوز خواندن در نظر گرفته شده است.
حال برای ادامه دادن به فهم موضوع دسترسیها نیاز است که کمی مسائل ریاضی را با همدیگر حل بکنیم. برای این مسئله ابتدا لازم است بدانید که هر کدام از این سه حالت در واقع نماینده یک مقدار باینری (صفر و یک) هستند. اگر مقداری برای هر کدام از این حالتها وجود داشته باشد به معنای وجود یک بیت فعال یا ۱ است و اگر خط تیره وجود داشت به معنای بیت غیر فعال یا صفر است. برای درک بهتر این قضیه به مثالهای زیر توجه کنید:
r--
به معنای ۱۰۰ در باینری است. (چرا که r فعال و w و x غیر فعال هستند.)rw-
به معنای ۱۱۰ در باینری است.r-x
به معنای ۱۰۱ در باینری است.
حال برای درک دستورات بعدی نیاز است که ابتدا این اعداد باینری را به سیستم دهدهی تبدیل کنیم. برای این مسئله هم یک فرمول بسیار ساده وجود دارد. شما باید از طرف راست اعداد را در دو به توان جایگاه عدد (از صفر شروع میشود) ضرب کرده و با عدد بعدی جمع بکنید. به مثالهای زیر توجه کنید:
۱۰۰ → ۰ * ۲⁰ + ۰ * ۲¹+ ۱ * ۲² = ۰ + ۰ + ۴ = ۴
۱۱۰ → ۰ * ۲⁰ + ۱ * ۲¹ + ۱ * ۲² = ۰ + ۲ + ۴ = ۶
اگر کمی با این فرمول کار بکنید به این نتیجه خواهید رسید که مقدار دهدهی r برابر با ۶، مقدار w برابر با ۴ و مقدار x برابر با ۱ است. حال اگر یک فایل دسترسی همه این موارد را فعال کرده باشد در نهایت به عدد ۷ خواهیم رسید.
حال این موارد را یاد گرفتیم تا شیوه استفاده از دستور chmod
در ترمینال را یاد بگیریم چرا که شما برای دسترسی دادن به فایلها و… نیاز دارید که این موضوع را حتما یاد بگیرید. برای درک کار با این دستور با مثال پیش خواهیم رفت تا عملا شیوه استفاده آن را یاد بگیرید. به دستور زیر دقت کنید:
chmod g+w a
در دستور بالا ما دسترسی w را به Group برای فایل a دادهایم. در کد بالا chmod دستور پایهای ماست، g نماینده group و w نماینده دسترسی Write و a نیز نام فایل ماست.
حال اگر بخواهیم به صورت جامعتر و پیشرفتهتر دسترسی بدهیم میتوانیم به صورت مستقیم برای هر سه گروه (صاحب، گروه و دیگران) با استفاده از سیستم دهدهی دسترسیها را صادر کنیم:
chmod 664 a
در دستور بالا عدد اول برای owner، عدد دوم برای group و عدد سوم برای others در نظر گرفته شده است. در نتیجه صاحب اصلی و گروه مجوز خواندن و نوشتن را دارند و در نهایت دیگران نیز دسترسی خواندن را دریافت کردهاند.
همچنین اگر قصد داشته باشیم که دسترسی کامل به فایل a را برای همگان صادر کنیم میتوانیم به دو صورت زیر این کار را انجام بدهیم:
chmod ugo+wx a chmod 777 a
۲- دستورات پایه خط فرمان یا CLI
برای اینکه به خوبی بتوانید با لینوکس ارتباط برقرار کنید باید به خوبی کار با خط فرمان یا ترمینال لینوکس را بلد باشید. در ادامه موضوعات پایهای و البته بسیار مهم خط فرمان را معرفی میکنیم که شما نیاز دارید به خوبی با آنها آشنایی پیدا کرده و روی آنها مسلط شوید:
- دستورات پایهای: دستورات ابتدایی و پایهای شامل مواردی مانند
ls
،cd
،cat
،echo
،mkdir
وrm
میشود. - دستورات مربوط به مدیریت فایلها: برای مدیریت و پیدا کردن فایلها باید با دستورات
cp
،mv
،find
،tar
وzip
آشنایی داشته باشید. - دستکاری متون: برای اینکه بتوانید روی متون کار بکنید نیاز است که با دستورات
grep
،awk
،sed
وcut
آشنایی پیدا کنید. - شبکه: یکسری دستورات پایهای برای کار با شبکه وجود دارد باید کار کردن با آنها را نیز یاد بگیرید. این دستورات شامل
netstat
،ifconfig
،curl
وping
میشود.
در ادامه به صورت بسیار کوتاه با هر کدام از این دستورات آشنا خواهید شد:
# لیست محتوای دایرکتوری کنونی در قالب یک لیست طولانی ls -l # لیست محتوای دایرکتوری کنونی به همراه فایلها و دایرکتوریهای مخفی ls -la # ورود به دایرکتوری documents از طریق دایرکتوری /home cd /home/user/documents # ورود به دایرکتوری قبلی cd .. # نمایش محتوای فایل filename.txt در محیط ترمینال cat filename.txt # چاپ جمله Hello, World! در ترمینال echo "Hello, World!" # ایجاد دایرکتوری جدید با نام new_directory در دایرکتوری کنونی mkdir new_directory # حذف فایلی با نام file_to_delete.txt rm file_to_delete.txt # حذف کامل دایرکتوری directory_to_delete. در استفاده از این دستور احتیاط کنید. rm -r directory_to_delete # کپی محتوای source.txt داخل فایل destination.txt cp source.txt destination.txt # تغییر نام oldname.txt به newname.txt mv oldname.txt newname.txt # جستجو در دایرکتوری /home/user برای فایلی با نام target.txt find /home/user -name target.txt # ایجاد یک فایل فشردهسازی شده با نام backup.tar.gz از دایرکتوری backup tar -czvf backup.tar.gz backup/ # ایجاد یک فایل zip از دو فایل file1.txt و file2.txt zip archive.zip file1.txt file2.txt # جستجو برای رشته "example" در فایل filename.txt grep "example" filename.txt # چاپ یا نمایش محتوای ستون دوم یک فایل - جداسازی به وسیله کاما awk -F ',' '{print $2}' filename.txt # جایگزین کردن کلمه apple با orange در filename.txt sed 's/apple/orange/' filename.txt # استخراج ستون سوم از فایل filename.txt cut -d ':' -f 3 filename.txt # نمایش تمام شبکههای فعال netstat -a # نمایش پیکربندی مربوط به تمام شبکهها ifconfig # نمایش اطلاعات رابط شبکهها ip addr show # دریافت محتوای وبسایت مورد نظر curl www.example.com # ارسال یک درخواست برای موجود یا در دسترس بودن آدرس مورد نظر ping www.example.com
۳- مدیریت پکیجها
توزیعهای مختلف لینوکس از پکیج منیجرهای مختلف استفاده میکنند، برخی از آنها البته به صورت مشترک از یک ابزار استفاده میکنند اما به صورت کلی میتوانیم بگوییم که سه ابزار پر استفاده برای مدیریت پکیجها وجود دارد که شامل موارد زیر میشود:
apt
که برای توزیعهای مبتنی بر دبیان و اوبونتو استفاده میشود.yum
وdnf
که برای توزیعهای مبتنی بر ردهت و CentOS استفاده میشود.zipper
که برای توزیعهای مبتنی بر SUSE استفاده میشود.
در ادامه روش نصب، حذف و بروزرسانی پکیجها در هر کدام این پکیج منیجرها را خواهید دید:
# Installs a package. apt-get/yum/dnf/zypper install package_name # Removes a package. apt-get/yum/dnf/zypper remove package_name # Update packages apt-get/yum/dnf/zypper update
۴- مدیریت پروسسها
یکی دیگر از تواناییهای مهمی که متخصصین دوآپس باید داشته باشند، مدیریت کردن پروسسها در لینوکس است. به صورت بسیار پایهای شما باید چگونگی لیست کردن، از بین بردن و اولویت دادن به پروسسها را از طریق خط فرمان و ابزارهایی مانند ps
، top
، htop
و kill
را بلد باشید. در زیر نمونه و توضیحات لازم برای کار با هر کدام این ابزارها را مشاهده خواهید کرد:
# نمایش پردازشهای فعلی ps aux # نمایش لیست پردازشهای فعلی به صورت بلادرنگ یا Real-Time top # نسخهای ارتقا یافته از دستور top که به صورت تعاملی عمل میکند htop # بستن یا از بین بردن پردازشی با آیدی ۱۲۳۴ kill 1234
۵- کار با ادیتور VI
VI یک ویرایشگر متنی محبوب در لینوکس است که به صورت پیشفرض روی بیشتر توزیعها وجود دارد. این ویرایشگر را میتوانید از طریق ترمینال فراخوانی کنید که البته کار با آن ممکن است کمی چالش برانگیز باشد. برای ویرایشگر VI چندین حالت و مُد مختلف وجود دارد که سه مورد از این حالتها عبارتند از:
- حالت عادی یا Normal Mode: این مورد، حالت شروع و پیشفرض است. در این حالت شما امکان پیمایش متن، حذف، ویرایش و کپی کردن متن را در اختیار دارید.
- حالت وارد کردن یا Insert Mode: در این حالت شما قابلیت وارد کردن متون جدید به یک فایل را در اختیار دارید.
- حالت دستوری یا Command Mode: در این حالت شما میتوانید متن مورد نظر را ذخیره کنید، از ویرایشگر خارج شوید و کارهایی از این دست را انجام دهید.
# باز کردن فایلی با نام example.txt با استفاده از ویرایشگر vi - در صورتی که این فایل وجود نداشته باشد ساخته خواهد شد. vi example.txt # فعال کردن حالت Insert Mode i # ذخیره کردن تغییرات و خارج شدن :wq # خارج شدن بدون ذخیره تغییرات :q! # جستجو برای رشته example /example # تعیین کردن عدد مربوط به خطوط :set_number
۶- مدیریت گروهها و کاربران
یکی از مهمترین کارهایی که قادر به انجام دادن آن باشید مدیریت گروهها و کاربران است. مدیریت به این معنا که بتوانید کاربران و گروههای جدید را اضافه، حذف و ویرایش کنید. برای اینکار نیز باید کار با دستوراتی مانندuseradd
، usermod
، groupadd
و… را بلد باشید. همچنین در ادامه این موارد نیاز است که درک خوبی از فایلهایی مانند /etc/passwd
و /etc/group
پیدا کنید.
# Add a new user named 'newuser' with a home directory useradd -m newuser # Modify 'newuser' to have the login shell as /bin/tcsh usermod -s /bin/tcsh newuser # Add a new group named 'newgroup' groupadd newgroup # Add 'newuser' to the 'newgroup' usermod -aG newgroup newuser
۷- اسکریپتنویسی یا Shell Scripting
برای اینکه توانایی خودکارسازی برخی از امور را داشته باشید نیاز است که با Bash و اسکریپتنویسی به خوبی آشنایی داشته باشید. شما باید یاد بگیرید که چگونه از متغیرها، حلقهها و دستورات شرطی در محیط بَش استفاده کنید. برای اینکار نیز نیاز دارید که حتما از یک دوره آموزشی استفاده کنید.
۸- درک Root و Sudo
به زبان ساده منظور از Root همان مدیر کلی سیستم است. Root به صورت نامحدود به همه چیز دسترسی دارد و میتواند هر دستوری را نیز اجرا کند. باید مراقب باشید که به درستی از این دسترسی استفاده کنید در غیر اینصورت با کوچکترین اشتباه ممکن است دادههای حیاتی را از دست بدهید و یا آسیب جبران ناپذیری به سیستم خود وارد کنید. از طرفی دیگر، اگر هکرها به روت یا Root دسترسی پیدا کنند به راحتی میتوانند کلیت سیستم را از بین ببرند.
برای اینکه سیستم شما در امنیت باشد توزیعهای لینوکس به شما پیشنهاد میدهند که در کنار اکانت Root یک اکانت استاندارد نیز داشته باشید و با آن کارهایتان را انجام بدهید. هر زمان که به دسترسی روت نیز نیاز داشتید بجای اینکه اکانتتان را تغییر دهید کافیست دستور sudo را در ابتدای دستور مورد نظر قرار دهید. Sudo مخفف Super User Do است که به معنای انجام یک کار از طریق کاربر روت است. زمانی که شما این دستور را وارد کنید از شما یک پسورد دریافت میکند که همان پسورد روت است. در این حالت شما تا زمانی که به این پسورد دسترسی نداشته باشید نمیتوانید کارهای روت را انجام دهید.
فایل /etc/sudores
شکلدهنده اصلی این دستور است، بنابراین تمام تنظیمات اصلی مربوط به این دستور در این فایل قرار دارد. مطمئن شوید که هیچگاه این فایل را دستکاری نمیکنید مگر اینکه واقعا بدانید که چه هدفی دارید. همچنین برای اینکه در امنیت کامل این فایل را ویرایش نمایید از دستور visudo
استفاده کنید.
# Elevate privileges for a command: sudo <command> # Editing sudo configuration safely: sudo visudo
۹- پیامهای لاگینگ یا Logging
یکی دیگر از تواناییهایی که باید داشته باشید توانایی خواندن پیامهای لاگینگ است. در لینوکس، فایلهای .log
در دایرکتوری /var/log
قرار میگیرند. همچنین ابزارهایی که به شما در خواندن این دست از فایلها کمک میکنند عبارت هستند از: less
، tail
و head
.
# View contents of a file.txt with navigation capabilities less file.txt # Display the last 10 lines of file.txt tail file.txt # Display the first 10 lines of file.txt head file.txt # Display the last 5 lines of file.txt tail -n 5 file.txt # Display the first 5 lines of file.txt head -n 5 file.txt
۱۰- مقدمات کار با شبکه
کار با شبکه و درک مفاهیم مرتبط با آن یکی از اصلیترین موضوعاتیست که باید به صورت عمیق آن را بلد باشید. مفاهیمی مانند آدرسهای آیپی، subnet، پورتها و پروتکلها. البته قرار نیست درک بسیار عمیقی از تمام مفاهیم مدیریت شبکه در لینوکس پیدا کنید اما مواردی که گفته شدند موضوعات پایهای هستند که نیاز است در آنها سر رشته داشته باشید.
۱۱- کار با SSH
SSH یکی از مهمترین ابزارها برای مدیریت ریموت است. به عنوان یک متخصص دوآپس حتما باید کار با SSH را بلد باشید و بتوانید با جنبههای مختلف آن کار بکنید. برای مثال ورود به سیستم به صورت ریموت، استفاده از scp برای انتقال فایلها و آشنایی با SSH Keys و… .
شما میتوانید یک SSH Key را با استفاده از دستور ssh-keygen ایجاد کنید. این کار باعث میشود که یک دایرکتوری جدید با نام .ssh ایجاد شده و دو کلید (یک کلید خصوصی و یک کلید عمومی) در آن ایجاد شود. برای اینکه به صورت بیسیک و پایهای با SSH آشنا شوید پیشنهاد میکنم مطلب «SSH چیست و چگونه کار میکند؟» را مطالعه نمایید.
۱۲- دیسک و ذخیرهسازی
آخرین موضوعی که در این مقاله به عنوان یکی از نکات کلیدی لینوکس برای متخصصین DevOps از آن صحبت میکنیم، چگونگی مدیریت فضاهای ذخیرهسازی و هارد دیسک است. برای مثال، برای اینکه بتوانید وضعیت و فضای دیسک را مشاهده کنید میتوانید از دستوراتی مانند df و du استفاده کنید، همچنین برای مدیریت فایل سیستمها و پارتیشنبندی میتوانید از دستورات fdisk و mkfs
استفاده نمایید.
در پایان
یادگیری لینوکس یکی از مهمترین کارهاییست که شما به عنوان یک مبتدی در حوزه DevOps باید در آن تبحر پیدا کنید. مطمئن باشید که لینوکس به عنوان یک دوست خوب همواره میتواند به شما کمک بکند و در نهایت در جاهای مختلفی برای شما مفید خواهد بود.
در این مطلب از وبسایت پچیم ما سعی کردیم ۱۲ مورد از مهمترین حوزههای لینوکس که باید در آنها تخصص پیدا کنید را به شما معرفی کنیم. برای اینکه به یک متخصص تبدیل شوید مطمئن شوید که این ۱۲ مورد را به خوبی یاد بگیرید.