پرش به مطلب اصلی

Linux

Tux - Linux mascot

لینوکس سیستم‌عاملی متن‌باز (Open Source) و رایگان است که به ثبات، امنیت و تطبیق‌پذیری بالا شهرت دارد. این سیستم‌عامل در سال 1991 توسط لینوس تروالدز که در آن زمان دانشجوی دانشگاه هلسینکی فنلاند بود ساخته شد. تروالدز در ابتدا این پروژه را به عنوان یک سرگرمی آغاز کرد ولی رفته‌رفته این پروژه رنگ و بوی جدی تر شدن به خود گرفت و تبدیل به یکی از بهترین و پرکاربردترین سیستم‌عامل‌های جهان شد.
به دلیل متن‌باز بودن این سیستم‌عامل که توسط جامعه اینترنتی مورد استقبال قرار گرفته بود؛ به تدریج توزیع‌های مختلفی از سوی کامیونیتی‌های مختلف برای آن عرضه شد که از جمله آن‌ها می‌توان به اوبونتو (Ubuntu)، فدورا (Fedora)، دبین (Debian) و ... اشاره کرد که هرکدام از آن‌ها ویژگی‌های مخصوص به خود را داشته و از جهاتی بر دیگر توزیع‌ها برتری دارند. امروزه سیستم‌عامل لینوکس در طیف وسیعی از کاربرد‌ها از رایانه‌های شخصی و سرورها گرفته تا سیستم‌های نهفته (Embedded Systems) و تلفن‌های همراه استفاده می‌شود. استفاده گسترده از این سیستم‌عامل در حوزه مهندسی نرم‌افزار باعث می‌شود تا آشنایی با آن از الزامات ورود به دنیای مهندسی نرم‌افزار و باشد.

اطلاعات بیشتر

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

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

در سیستم‌عامل لینوکس استاندارد سلسله‌مراتبی فایل‌سیستم (Filesystem Hierarchy Standard) ساختار دایرکتوری‌ها را تعیین می‌کند. بدین شکل که فایل‌سیستم را می‌توان به درختی وارونه تشبیه کرد که یک ریشه داشته و تعدادی شاخه از آن خارج شده است. هر کدام از این شاخه‌ها یک دایرکتوری است که به ذخیره دسته خاصی از اطلاعات و فایل‌ها اختصاص یافته. این ساختار به صورت خلاصه در تصویر زیر قابل مشاهده است.
برای آشنایی بیشتر و عمیق‌تر با این ساختار می‌توانید از منبع زیر استفاده کنید:

Linux Hierarchy Standard Picture

دستورات شل

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

اطلاعات بیشتر

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

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

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

کنترل دسترسی توسط ترمینال

یکی از مهم‌ترین نیازمندی‌های هر سازمانی امنیت اطلاعات است. لینوکس برای مدیریت دسترسی به فایل‌هایی که بر روی دستگاه وجود دارد به ما اجازه می‌دهد که برای هر فایل یک صاحب و یک گروه تعیین کرده و دسترسی‌های مختلفی را برای صاحب فایل، گروه فایل و بقیه کاربران مشخص کنیم. به کمک این ویژگی می‌توانیم با ایجاد محدودیت‌هایی برای کاربران از سواستفاده آن‌ها از فایل‌ها و پوشه‌ها جلوگیری کنیم. برای آشنایی بیش‌تر با این امکان به 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 به صورت پیش‌فرض برابر با نام اسکریپت اجرا شده تعریف شده است.

Shell Arguments Table Picture

عبارات شرطی

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

Shell Conditional Expressions Picture

حلقه

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

Shell Loop Expression Picture

مثال:

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 به کار رفته است را پیدا کرده و نام آن‌ها را به همراه مسیر و برنچ مربوطه چاپ کند.