Linux
لینوکس سیستمعاملی متنباز
(Open Source)
و رایگان است که به ثبات، امنیت و تطبیقپذیری بالا شهرت دارد. این سیستمعامل در سال 1991 توسط لینوس تروالدز که در آن زمان دانشجوی دانشگاه هلسینکی فنلاند بود ساخته شد. تروالدز در ابتدا این پروژه را به عنوان یک سرگرمی آغاز کرد ولی رفتهرفته این پروژه رنگ و بوی جدی تر شدن به خود گرفت و تبدیل به یکی از بهترین و پرکاربردترین سیستمعاملهای جهان شد.
به دلیل متنباز بودن این سیستمعامل که توسط جامعه اینترنتی مورد استقبال قرار گرفته بود؛ به تدریج توزیعهای مختلفی از سوی کامیونیتیهای مختلف برای آن عرضه شد که از جمله آنها میتوان به اوبونتو
(Ubuntu)،
فدورا
(Fedora)،
دبین
(Debian)
و ... اشاره کرد که هرکدام از آنها ویژگیهای مخصوص به خود را داشته و از جهاتی بر دیگر توزیعها برتری دارند.
امروزه سیستمعامل لینوکس در طیف وسیعی از کاربردها از رایانههای شخصی و سرورها گرفته تا سیستمهای نهفته
(Embedded Systems)
و تلفنهای همراه استفاده میشود. استفاده گسترده از این سیستمعامل در حوزه مهندسی نرمافزار باعث میشود تا آشنایی با آن از الزامات ورود به دنیای مهندسی نرمافزار و باشد.
معمولا لینوکس را با نام گنو/لینوکس میشناسند زیرا لینوکس به تنهایی یک هسته سیستمعامل است و در کنار ابزارهای گنو استفاده میشود. برای فهم بهتر این نام و آشنایی بیشتر با تاریخ این سیستمعامل میتوانید به کتاب لینوکس و زندگی مراجعه کنید.
ساختار سلسله مراتبی فایلسیستم لینوکس
در سیستمعامل لینوکس استاندارد سلسلهمراتبی فایلسیستم
(Filesystem Hierarchy Standard)
ساختار دایرکتوریها را تعیین میکند. بدین شکل که فایلسیستم را میتوان به درختی وارونه تشبیه کرد که یک ریشه داشته و تعدادی شاخه از آن خارج شده است. هر کدام از این شاخهها یک دایرکتوری است که به ذخیره دسته خاصی از اطلاعات و فایلها اختصاص یافته. این ساختار به صورت خلاصه در تصویر زیر قابل مشاهده است.
برای آشنایی بیشتر و عمیقتر با این ساختار میتوانید از منبع زیر
استفاده کنید:
دستورات شل
شل یا محیط خط فرمان لینوکس نرمافزاری است که به کاربران اجازه میدهد تا از یک طریق خط فرمان
(Command Line Interface)
با سیستم عامل لینوکس
تعامل کنند. با استفاده از ترمینال لینوکس، کاربر میتواند دستورات مختلفی را به سیستم عامل ارسال کرده و اعمال مختلفی مانند مدیریت فایلها و پوشهها، نصب و پاک کردن برنامهها، کنترل کاربران و دستگاههای جانبی و… را انجام دهد.
با وجود اینکه در محیط گرافیکی لینوکس میتوانیم همانند ویندوز با ماوس و کیبورد کار کنیم ولی خط فرمان لینوکس با حذف پیچیدگیهای گرافیکی به ما اجازه میدهد که تمام کارهای خود را با نوشتن دستورات متنی انجام دهیم. با استفاده از خط فرمان میتوانیم به طور مستقیم و با سرعت بالا با سیستمعامل در ارتباط بوده و با سرعت و جزئیات بیشتر به تمام دستورات دسترسی داشته باشیم.
برای آشنایی با مهمترین دستورات ترمینال لینوکس میتوانید به به منابع زیر مراجعه کنید.
- 25 Basic Linux Commands For Beginners
- 60 Essential Linux Commands (نیازی به تسلط بر روی تمامی این دستورات نیست اما خوب است که آنها را بشناسید.)
در زمان اجرای شل، متغیرهای خاصی از پیش تعریف شدهاند که اطلاعات مفیدی از جمله نام کاربری، مسیر فعلی و ... ر ا در اختیار ما قرار میدهند. یکی از این متغیرها، متغیر
$PATH
است. این متغیر به شل میگوید که برای پیدا کردن فایل اجرایی یک دستور خاص باید چه دایرکتوریهایی را جستوجو کند.
کنترل نحوه اجرای دستورات
گاهی اوقات ممکن است که بخواهیم یک دستور را به شرط اجرا یا اجرا نشدن یک دستور دیگر اجرا کنیم و یا خروجی یک دستور را به عنوان ورودی به یک دستور دیگر بدهیم. یکی از ویژگیهای کاربردی خط فرمان لینوکس، که برای پاسخگویی به این نیاز طراحی شده، امکان کنترل نحوه اجرای دستورات است. برای آشنایی بیشتر با این قابلیت که به آن Command Chaining میگویند، میتوانید از این منابع استفاده کنید:
- Chaining Commands in Linux
- Working with pipes on the Linux command line
پس از مطالعه منابع ذکر شده، سعی کنید با اجرای چندین دستور به شکلهای مختلف، چیزهایی که آموختید را تست کنید.
کنترل دسترسی توسط ترمینال
یکی از مهمترین نیازمندیهای هر سازمانی امنیت اطلاعات است. لینوکس برای مدیریت دسترسی به فایلهایی که بر روی دستگاه وجود دارد به ما اجازه میدهد که برای هر فایل یک صاحب و یک گروه تعیین کرده و دسترسیهای مختلفی را برای صاحب فایل، گروه فایل و بقیه کاربران مشخص کنیم. به کمک این ویژگی میتوانیم با ایجاد محدودیتهایی برای کاربران از سواستفاده آنها از فایلها و پوشهها جلوگیری کنیم. برای آشنایی بیشتر با این امکان به Linux chmod and chown – How to Change File Permissions and Ownership in Linux مراجعه کنید.
نصب، بروزرسانی و حذف پکیجهای خارجی در لینوکس
معمولا در ابتدای نصب سی ستم عامل لینوکس، بعضی از ابزار پرکاربرد نیز همراه با آن نصب میشوند تا به نیازهای کاربر پاسخ دهند اما هر کاربر متناسب با نیازهای خود به ابزارهایی نیاز دارد که لزوما پیش از این روی سیستم عامل نصب نشده اند. از این رو نیاز داریم که این پکیجها را از طریق Package manager نصب و مدیریت کنیم. توزیعهای مختلف از Package manager های منحصر بهفردی استفاده میکنند. برای آشنایی مختصر با هر یک از این Package managerها و نحوه کار با آنها میتوانید از منبع زیر استفاده کنید:
ویرایش فایلهای متنی
در زمان استفاده از یک سیستمعامل ممکن است به ایجاد یا تغییر فایلهای متنی نیاز پیدا کنیم. در این مواقع است که نقش ویرایشگرهای فایلهای متنی یا
Text Editor
پررنگتر میشود. در سیستمعامل لینوکس طیف وسیعی از ویرایشگرهای متن وجود دارد که بر حسب نیاز و سلیقه میتوانید آنها را انتخاب کرده و استفاده کنید. از معروفترین ویرایشگرهای متن موجود برای سیستمعاملهای مبتنی بر لینوکس میتوان به
Vim, Emacs
و
Nano
اشاره کرد که به علت پیچیدگی نسبی ویرایشگرهای
Vim و Emacs
در اینجا تنها به توضیح ویرایشگر
Nano
بسنده میکنیم.
ویرایشگر
nano،
یک ویرایشگر رایگان، متنباز و مبتنی بر خط فرمان
(Command Line)
است که در ایجاد و ویرایش فایلهای متنی به ما کمک میکند.
با استفاده از منبع زیر، این ویرایشگر را نصب کرده و با قابلیتهای آن آشنا شوید:
اسکریپت نویسی
تا اینجای کار، با دستورات خط فرمان آشنا شده و کاربردها و قابلیتهای آنها را شناختید. گاهی لازم است یک فعالیت تکراری که شامل تعداد زیادی دستور است را در زمانهای مختلفی اجرا کنیم. در این مواقع میتوانیم این دستورات را به صورت یک اسکریپت نوشته و اجرا کنیم. اسکریپت مجموعهای از دستورات خط فرمان است که در یک فایل نوشته شدهاند و قابلیت اجرا شدن دارند.
Shebang
اسکریپتهایی که برای اجرا در شل مینویسیم مانند بقیه فایلهای تکست هستند. برای همین برای
اجرای آنها نیاز داریم که به خط فرما ن بگوییم باید به چه زبانی اجرا شوند.
برای انجام این کار از دستور خاصی که به
Shebang
معروف است استفاده میکنیم.
Shebang
که با کاراکترهای
#!
نمایش داده میشود،
به شلی که فایل تکست را اجرا میکند میگوید که این فایل باید بوسیله چه ابزاری اجرا شود. برای مثال اگر بخواهیم اسکریپتی که نوشتهایم با شل
Bash
اجرا شود، میتوانیم اسکریپت خود را اینگونه بنویسیم:
#!/bin/bash
echo "Hello, CodeStar!"
شلها برای پیدا کردن فایل اجرایی مشخص شده در
Shebang
تنها از آدرسهای دقیق استفاده میکنند. در سیستمهای مختلف ممکن است که آدرس فایل اجرایی شلی که برای اجرای اسکریپت
استفاده میشود متفاوت باشد. برای مثال
ممکن است آدرس شل
Bash
در یک سیستم
/bin/bash
و در سیستم دیگر
/usr/bin/bash
باشد. برای سازگاری اسکریپتهایمان با این آدرسهای مختلف میتوانیم از
env
که معمولا در آدرس
/usr/bin/env
قرار دارد استفاده کنیم. این دستور با خواندن مقدار
$PATH
میتواند دستور دلخواه ما را از آدرس صحیح پیدا کرده و اجرا کند.
#!/usr/bin/env bash
echo "Hello, CodeStar!"
آرگومانها و متغیرها
متغیرها
در شل برای تعریف متغیر ابتدا نام آن متغیر را نوشته و سپس با گذاشتن علامت مساوی مقدار مورد نظر
آن متغیر را تعریف میکنیم. همچنین برای خواندن متغیرها علامت
$
را در ابتدای نام آنها قرار میدهیم.
برای مثال:
name="CodeStar"
echo "Hello, $name!"
آرگومانها
در هر اسکریپت میتوان از آرگومانهایی که هنگام اجرای اسکریپت به آن داده میشود استفاده کرد. نکته قابل توجه آن است که متغیر 0 به صورت پیشفرض برابر با نام اسکریپت اجرا شده تعریف شده است.
عبارات شرطی
همانند زبانهای بر نامهنویسی در اسکریپتنویسی نیز میتوان از عبارات شرطی استفاده کرد و بنابر شرایط مختلفی که ممکن است در هنگام اجرای یک اسکریپت به وجود بیاید؛ تصمیمات مختلفی گرفت.
حلقه
علاوه بر عبارات شرطی، حلقهها نیز در اسکریپتنویسی قابل استفاده هستند و میتوانیم برای انجام کارهایی که نیاز به تکرار دارند از آنها استفاده کنیم.
مثال:
for ((i = 1 ; i <= 5 ; i++ )); do
echo "Hello"
done
for i in $(seq 1 5); do
echo "Hello"
done
برای بهتر یاد گرفتن اسکریپتنویسی در شل میتوانید از منبع زی ر کمک بگیرید:
تمرین
- با استفاده از ابزارهایی که در این بخش با آنها آشنا شدید، معمای The Command Line Murders را حل کنید.
- اسکریپتی بنویسید که با بررسی تمام برنچهای یک ریپازیتوری گیت و تمام فایلهای درون
هر برنچ، فایلهایی که در آنها کلمه
TODO
به کار رفته است را پیدا کرده و نام آنها را به همراه مسیر و برنچ مربوطه چاپ کند.