Linux چیست؟ آموزش کامل لینوکس و Ubuntu از صفر برای برنامه‌نویسی و هوش مصنوعی

در این آموزش Linux و Ubuntu را از صفر یاد می‌گیرید؛ از Terminal، فایل‌ها و Permission تا نصب Package، مدیریت Process و اجرای Python. در پایان یک ابزار خط فرمان هوش مصنوعی با API درواره می‌سازیم.

Share
Linux چیست؟ آموزش کامل لینوکس و Ubuntu از صفر برای برنامه‌نویسی و هوش مصنوعی


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

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

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

Linux چیست؟

Linux یک Kernel متن‌باز است. Kernel هسته‌ای است که میان سخت‌افزار و نرم‌افزار قرار می‌گیرد و منابعی مانند پردازنده، حافظه، فضای ذخیره‌سازی، Network و دستگاه‌های ورودی و خروجی را مدیریت می‌کند.

آنچه در مکالمات روزمره «سیستم‌عامل لینوکس» نامیده می‌شود، معمولاً مجموعه‌ای شامل موارد زیر است:

  • Linux Kernel
  • ابزارهای خط فرمان
  • Package Manager
  • کتابخانه‌های سیستمی
  • سرویس‌های پس‌زمینه
  • محیط دسکتاپ، در صورت نیاز
  • برنامه‌های کاربردی

ترکیب این اجزا یک Linux Distribution یا توزیع لینوکس را تشکیل می‌دهد.

توزیع Linux چیست؟

Distribution یا Distro نسخه‌ای آماده از Linux است که Kernel را همراه با ابزارها، Package Manager و تنظیمات مشخص ارائه می‌کند.

توزیع‌های شناخته‌شده عبارت‌اند از:

  • Ubuntu
  • Debian
  • Fedora
  • Linux Mint
  • Arch Linux
  • Rocky Linux
  • AlmaLinux
  • openSUSE

هر توزیع هدف، چرخه انتشار و روش مدیریت Package متفاوتی دارد. برای مثال، Ubuntu و Debian از خانواده Packageهای deb و ابزار APT استفاده می‌کنند؛ درحالی‌که Fedora و برخی توزیع‌های دیگر از ابزارهایی مانند DNF بهره می‌برند.

در این مقاله از Ubuntu استفاده می‌کنیم، زیرا برای یادگیری، برنامه‌نویسی و اجرای پروژه‌های سروری انتخاب رایجی است.

Ubuntu چیست؟

Ubuntu یک توزیع Linux مبتنی بر Debian است که در نسخه‌های Desktop و Server ارائه می‌شود.

Ubuntu Desktop دارای محیط گرافیکی است و برای استفاده روزمره، برنامه‌نویسی و یادگیری مناسب است. Ubuntu Server معمولاً بدون محیط دسکتاپ نصب می‌شود و بیشتر از طریق Terminal یا SSH مدیریت می‌شود.

تفاوت اصلی آن‌ها در بسته‌ها و محیط اولیه است؛ هر دو بر پایه Ubuntu ساخته شده‌اند و بسیاری از دستورات این مقاله در هر دو اجرا می‌شوند.

چرا Linux برای برنامه‌نویسان مهم است؟

بسیاری از محیط‌های Production روی Linux اجرا می‌شوند. حتی اگر برنامه را در ویندوز یا macOS توسعه دهید، احتمال زیادی وجود دارد که نسخه نهایی آن روی یک Linux Server، Container یا پلتفرم Cloud اجرا شود.

مزایای Linux برای توسعه‌دهندگان:

  • دسترسی قدرتمند به Terminal
  • نصب و مدیریت ساده ابزارهای توسعه
  • سازگاری مناسب با Python، Node.js، Go، Java و زبان‌های دیگر
  • اجرای طبیعی ابزارهایی مانند Git، Docker و SSH
  • مناسب برای Automation و Shell Script
  • مصرف منابع قابل‌کنترل
  • استفاده گسترده در سرورها
  • امکان شخصی‌سازی محیط توسعه
  • پشتیبانی مناسب از ابزارهای متن‌باز
  • شباهت محیط توسعه به بسیاری از سرورهای Production

چرا Linux برای هوش مصنوعی مهم است؟

بخش زیادی از ابزارهای Machine Learning و زیرساخت هوش مصنوعی ابتدا برای Linux توسعه یا روی آن آزمایش می‌شوند.

Linux در این کاربردها دیده می‌شود:

  • اجرای Python و Jupyter
  • آموزش و Inference مدل‌ها
  • مدیریت GPU و Driver
  • اجرای API مدل
  • ساخت Pipeline داده
  • اجرای Docker Container
  • راه‌اندازی Queue و Worker
  • اجرای پایگاه داده و Vector Database
  • استقرار Agentهای هوش مصنوعی
  • استفاده از سرورهای ابری
  • اجرای ابزارهای MLOps

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

تفاوت Linux و Unix چیست؟

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

بسیاری از مفاهیمی که در Linux می‌بینید، ریشه در فرهنگ Unix دارند:

  • ابزارهای کوچک و تخصصی
  • اتصال ابزارها با Pipe
  • فایل‌محوربودن بسیاری از منابع
  • استفاده گسترده از متن ساده
  • مدیریت چندکاربره
  • Permissionهای فایل
  • Shell و فرمان‌های خطی

macOS نیز یک سیستم Unix-based محسوب می‌شود؛ به همین دلیل تعداد زیادی از دستورات Terminal در macOS و Linux شبیه یکدیگرند، هرچند کاملاً یکسان نیستند.

روش‌های استفاده از Linux

برای یادگیری Linux چند گزینه دارید.

نصب Ubuntu روی کامپیوتر

می‌توانید Ubuntu را به‌عنوان سیستم‌عامل اصلی نصب کنید. این روش بیشترین دسترسی را به Linux می‌دهد، اما نصب سیستم‌عامل و تغییر پارتیشن‌ها می‌تواند روی داده‌های دستگاه اثر بگذارد.

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

استفاده از ماشین مجازی

با یک Virtual Machine می‌توانید Ubuntu را داخل سیستم‌عامل فعلی اجرا کنید. این روش برای یادگیری کم‌ریسک‌تر است، زیرا سیستم‌عامل اصلی شما تغییر نمی‌کند.

استفاده از WSL در ویندوز

Windows Subsystem for Linux یا WSL امکان اجرای محیط Linux در ویندوز را فراهم می‌کند.

در نسخه‌های پشتیبانی‌شده ویندوز، PowerShell را با سطح دسترسی مناسب باز کنید:

wsl --install -d Ubuntu

پس از نصب و Restart احتمالی، Ubuntu را باز و نام کاربری Linux خود را ایجاد کنید.

نسخه WSL:

wsl --version

مشاهده توزیع‌های نصب‌شده:

wsl --list --verbose

استفاده از Linux Server

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

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

Terminal چیست؟

Terminal برنامه‌ای است که ورودی متنی شما را به Shell می‌فرستد و خروجی فرمان‌ها را نمایش می‌دهد.

در محیط گرافیکی Ubuntu معمولاً می‌توانید Terminal را از فهرست برنامه‌ها باز کنید. میان‌بر رایج آن نیز چنین است:

Ctrl + Alt + T

روی Ubuntu Server، پس از ورود مستقیماً با محیط خط فرمان روبه‌رو می‌شوید.

Shell چیست؟

Shell برنامه‌ای است که فرمان‌های شما را تفسیر و اجرا می‌کند. Bash یکی از Shellهای رایج در Linux است، اما Shellهای دیگری مانند Zsh، Fish و Dash نیز وجود دارند.

مشاهده Shell فعلی:

echo "$SHELL"

مشاهده نام Process مربوط به Shell فعلی:

ps -p $$ -o comm=

بررسی نسخه Bash:

bash --version

Prompt در Terminal چیست؟

در Terminal ممکن است چیزی شبیه این ببینید:

amir@ubuntu:~/projects$

معمولاً اجزای آن عبارت‌اند از:

  • amir: نام کاربر
  • ubuntu: نام سیستم
  • ~/projects: مسیر فعلی
  • $: کاربر معمولی

در برخی محیط‌ها علامت # نشان‌دهنده Shell کاربر Root است. کاربر Root دسترسی گسترده‌ای دارد و اجرای اشتباه یک فرمان با این سطح دسترسی می‌تواند تغییرات جدی ایجاد کند.

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

برخلاف ویندوز که معمولاً Driveهایی مانند C: و D: دارد، ساختار فایل Linux از مسیر ریشه آغاز می‌شود:

/

چند مسیر مهم:

  • /home: پوشه کاربران
  • /home/username: پوشه شخصی یک کاربر
  • /etc: فایل‌های تنظیمات سیستم
  • /var: داده‌های متغیر مانند Log و Cache
  • /var/log: بسیاری از فایل‌های Log
  • /tmp: فایل‌های موقت
  • /usr: برنامه‌ها و کتابخانه‌های نصب‌شده
  • /opt: بعضی نرم‌افزارهای اضافی
  • /srv: داده برخی سرویس‌ها
  • /root: پوشه شخصی کاربر Root
  • /bin و /usr/bin: فرمان‌ها و برنامه‌های اجرایی
  • /dev: نمایش فایل‌مانند دستگاه‌ها
  • /proc: اطلاعات Processها و Kernel

برای کارهای روزمره بهتر است پروژه‌های شخصی را داخل پوشه Home خود نگه دارید:

/home/username/projects

مسیر مطلق و مسیر نسبی

مسیر مطلق از / شروع می‌شود:

/home/amir/projects/ai-cli

مسیر نسبی از پوشه فعلی محاسبه می‌شود:

projects/ai-cli

علامت‌های مهم مسیر:

  • . یعنی پوشه فعلی
  • .. یعنی پوشه والد
  • ~ یعنی Home کاربر فعلی
  • / یعنی ریشه فایل‌سیستم

اولین دستورات Linux

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

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

pwd

pwd مخفف Print Working Directory است.

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

ls

نمایش جزئیات:

ls -l

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

ls -la

فایل‌ها و پوشه‌هایی که نام آن‌ها با نقطه آغاز می‌شود، معمولاً مخفی در نظر گرفته می‌شوند:

.env
.git
.config

تغییر پوشه

cd projects

بازگشت به پوشه والد:

cd ..

رفتن به Home:

cd ~

یا فقط:

cd

ساخت پوشه

mkdir projects

ساخت مسیر چندمرحله‌ای:

mkdir -p ~/projects/darvareh-ai-cli

گزینه -p پوشه‌های والد موردنیاز را نیز ایجاد می‌کند.

ساخت فایل خالی

touch notes.txt

کپی فایل

cp notes.txt notes-backup.txt

کپی پوشه:

cp -r source-folder backup-folder

جابه‌جایی یا تغییر نام

تغییر نام:

mv notes.txt linux-notes.txt

انتقال فایل:

mv linux-notes.txt ~/projects/

حذف فایل و پوشه

حذف فایل:

rm sample.txt

حذف پوشه و محتوای آن:

rm -r sample-directory

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

برای درخواست تأیید پیش از حذف فایل:

rm -i sample.txt

مشاهده محتوای فایل‌ها

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

cat README.md

مشاهده فایل طولانی

less README.md

در less:

  • کلیدهای جهت برای حرکت
  • / برای جست‌وجو
  • n برای نتیجه بعدی
  • q برای خروج

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

head -n 20 app.log

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

tail -n 20 app.log

دنبال‌کردن تغییرات فایل Log:

tail -f app.log

برای خروج از حالت دنبال‌کردن:

Ctrl + C

راهنمای رسمی Ubuntu نیز برای مشاهده Logها از ابزارهایی مانند cat، less، head و tail استفاده می‌کند. جزئیات بیشتر در راهنمای مشاهده Log در Ubuntu آمده است.

ویرایش فایل در Terminal

یکی از ویرایشگرهای ساده برای شروع Nano است:

nano notes.txt

در Nano:

  • ذخیره: Ctrl + O
  • تأیید نام فایل: Enter
  • خروج: Ctrl + X
  • جست‌وجو: Ctrl + W

برای ویرایش کد می‌توانید از VS Code، PyCharm، Vim، Neovim یا ویرایشگر دلخواه خود نیز استفاده کنید.

جست‌وجو در فایل‌ها

جست‌وجوی یک عبارت داخل فایل:

grep "error" app.log

جست‌وجوی بدون حساسیت به حروف کوچک و بزرگ:

grep -i "error" app.log

نمایش شماره خط:

grep -n "error" app.log

جست‌وجوی بازگشتی در یک پوشه:

grep -R "DARVAREH_MODEL_ID" .

برای پروژه‌های برنامه‌نویسی بزرگ، ابزار rg یا Ripgrep معمولاً سریع و کاربردی است:

rg "DARVAREH_MODEL_ID"

در صورت نصب نبودن:

sudo apt update
sudo apt install ripgrep

پیداکردن فایل‌ها

جست‌وجوی فایل‌های Python در پوشه فعلی:

find . -type f -name "*.py"

جست‌وجوی پوشه‌ای با نام مشخص:

find ~/projects -type d -name "venv"

مشاهده محل یک فرمان:

which python3

یا:

command -v python3

Pipe در Linux چیست؟

Pipe خروجی یک فرمان را به ورودی فرمان بعدی می‌فرستد. علامت Pipe چنین است:

|

نمونه:

ps aux | grep python

فرمان اول Processها را نمایش می‌دهد و فرمان دوم فقط خط‌های شامل python را نگه می‌دارد.

شمارش فایل‌های Python:

find . -type f -name "*.py" | wc -l

مشاهده ده Process اول از نظر مصرف حافظه:

ps aux --sort=-%mem | head

قدرت خط فرمان Linux تا حد زیادی از ترکیب ابزارهای کوچک با Pipe به دست می‌آید.

Redirect چیست؟

Redirect خروجی فرمان را داخل فایل می‌نویسد.

نوشتن و جایگزین‌کردن محتوا:

echo "Hello Linux" > output.txt

افزودن به انتهای فایل:

echo "New line" >> output.txt

ارسال خطا به فایل:

python3 app.py 2> error.log

ارسال خروجی عادی و خطا به یک فایل:

python3 app.py > app.log 2>&1

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

اجرای چند فرمان

اجرای فرمان دوم فقط در صورت موفقیت فرمان اول:

mkdir -p project && cd project

اجرای فرمان دوم در هر صورت:

command_one ; command_two

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

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

نمایش توضیح کوتاه:

ls --help

نمایش Manual:

man ls

جست‌وجو در Manual با / انجام می‌شود و با q خارج می‌شوید.

نمایش نوع فرمان:

type cd

این دستور مشخص می‌کند یک نام مربوط به برنامه، Alias، Function یا فرمان داخلی Shell است.

کاربر Root و sudo

Linux یک سیستم چندکاربره است. کاربر Root بالاترین سطح دسترسی را دارد.

sudo یک فرمان را با سطح دسترسی مدیریتی اجرا می‌کند:

sudo apt update

هر فرمانی را با sudo اجرا نکنید. ابتدا بفهمید فرمان چه کاری انجام می‌دهد و چرا به دسترسی مدیریتی نیاز دارد.

برای مشاهده کاربر فعلی:

whoami

مشاهده شناسه و گروه‌ها:

id

نمایش کاربرانی که وارد سیستم شده‌اند:

who

Permission در Linux چیست؟

هر فایل و پوشه دارای Owner، Group و Permission است.

نمایش Permissionها:

ls -l

نمونه:

-rwxr-xr-- 1 amir developers 420 Aug 10 10:30 run.sh

سه Permission اصلی:

  • r: خواندن یا Read
  • w: نوشتن یا Write
  • x: اجرا یا Execute

سطوح دسترسی برای سه گروه تعریف می‌شوند:

  • Owner
  • Group
  • Others

در نمونه بالا:

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

تغییر Permission با chmod

اجرایی‌کردن یک Script برای مالک فایل:

chmod u+x run.sh

حذف مجوز اجرا از سایر کاربران:

chmod o-x run.sh

حالت عددی نیز وجود دارد:

chmod 750 run.sh

در این حالت:

  • مالک: خواندن، نوشتن و اجرا
  • گروه: خواندن و اجرا
  • سایر کاربران: بدون دسترسی

به‌صورت عمومی و بدون نیاز واقعی از Permission بسیار باز مانند 777 استفاده نکنید.

مالکیت فایل با chown

مشاهده مالک:

ls -l file.txt

تغییر مالکیت معمولاً به دسترسی مدیریتی نیاز دارد:

sudo chown username:groupname file.txt

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

Package Manager چیست؟

Package Manager ابزار نصب، به‌روزرسانی و حذف نرم‌افزارها و وابستگی‌های آن‌هاست.

Ubuntu از APT استفاده می‌کند.

به‌روزرسانی فهرست Packageها:

sudo apt update

جست‌وجوی Package:

apt search python3-venv

مشاهده اطلاعات:

apt show python3-venv

نصب Package:

sudo apt install python3-venv

حذف Package:

sudo apt remove package-name

apt update نرم‌افزارها را به‌تنهایی ارتقا نمی‌دهد؛ فقط اطلاعات Packageهای موجود در Repositoryها را تازه می‌کند.

نصب ابزارهای موردنیاز پروژه

برای پروژه این مقاله:

sudo apt update
sudo apt install python3 python3-venv python3-pip git curl

بررسی نسخه‌ها:

python3 --version
pip3 --version
git --version
curl --version

بهتر است کتابخانه‌های پروژه Python را داخل Virtual Environment نصب کنید و Packageهای پروژه را با sudo pip داخل Python سیستمی نصب نکنید.

Process در Linux چیست؟

هر برنامه در حال اجرا یک Process است و شناسه‌ای به نام PID دارد.

مشاهده Processها:

ps aux

جست‌وجوی Processهای Python:

ps aux | grep python

نمایش زنده مصرف منابع:

top

اگر htop نصب باشد، رابط خواناتری ارائه می‌کند:

htop

نصب:

sudo apt install htop

اجرای برنامه در پس‌زمینه

اجرای برنامه و نگه‌داشتن Terminal:

python3 app.py &

نمایش Jobهای Shell فعلی:

jobs

برگرداندن Job به Foreground:

fg

توقف برنامه Foreground:

Ctrl + C

برای سرویس‌های دائمی Production، تنها استفاده از & کافی نیست. ابزارهایی مانند systemd، Docker یا Process Manager برای مدیریت Restart، Log و چرخه عمر برنامه مناسب‌ترند.

متوقف‌کردن Process

ارسال سیگنال خاتمه معمولی:

kill PROCESS_ID

پیداکردن PID:

pgrep -af python

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

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

kill -9 PROCESS_ID

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

بررسی حافظه، پردازنده و فضای دیسک

فضای فایل‌سیستم:

df -h

اندازه یک پوشه مشخص:

du -sh ~/projects

حافظه:

free -h

اطلاعات پردازنده:

lscpu

اطلاعات Kernel:

uname -a

اطلاعات توزیع:

cat /etc/os-release

نمایش مدت‌زمان روشن‌بودن سیستم:

uptime

بررسی Network

نمایش آدرس‌های Network:

ip address

آزمایش DNS و ارتباط:

ping -c 4 example.com

دریافت Headerهای HTTP:

curl -I https://darvareh.ir

آزمایش Base URL درواره:

curl -I https://api.darvareh.ir

مشاهده Portهای در حال Listen:

ss -lnt

مشاهده Port همراه با Process، در صورت داشتن دسترسی لازم:

sudo ss -lntp

Environment Variable چیست؟

Environment Variable مقدار تنظیماتی است که Process از محیط دریافت می‌کند.

ساخت متغیر موقت در Shell فعلی:

export APP_ENV="development"

مشاهده مقدار:

echo "$APP_ENV"

اجرای یک فرمان با متغیر موقت:

APP_ENV="test" python3 app.py

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

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

متغیر PATH

PATH فهرستی از پوشه‌هایی است که Shell برای پیداکردن فرمان‌ها جست‌وجو می‌کند.

echo "$PATH"

وقتی می‌نویسید:

python3

Shell مسیرهای موجود در PATH را بررسی می‌کند تا فایل اجرایی python3 را پیدا کند.

مشاهده مسیر:

command -v python3

برای افزودن موقت یک پوشه:

export PATH="$HOME/.local/bin:$PATH"

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

پروژه عملی: ساخت ابزار خط فرمان هوش مصنوعی در Linux

در این پروژه برنامه‌ای می‌سازیم که سؤال را از Terminal دریافت می‌کند و پاسخ یکی از مدل‌های هوش مصنوعی درواره را نمایش می‌دهد.

ساختار پروژه:

darvareh-ai-cli/
├── ai_cli.py
├── requirements.txt
├── .env.example
├── .env
├── .gitignore
└── run_ai.sh

ساخت پوشه پروژه

mkdir -p ~/projects/darvareh-ai-cli
cd ~/projects/darvareh-ai-cli

بررسی مسیر:

pwd

ساخت Virtual Environment

python3 -m venv .venv

فعال‌سازی:

source .venv/bin/activate

پس از فعال‌سازی معمولاً نام محیط در ابتدای Prompt دیده می‌شود:

(.venv) amir@ubuntu:~/projects/darvareh-ai-cli$

طبق مستندات رسمی Python venv، Virtual Environment محیطی جدا برای Python و Packageهای هر پروژه ایجاد می‌کند و معمولاً نباید وارد Source Control شود.

خروج از محیط:

deactivate

فعال‌سازی دوباره:

source .venv/bin/activate

ساخت requirements.txt

openai>=1.68,<3.0
python-dotenv>=1.1,<2.0

نصب وابستگی‌ها:

python -m pip install --upgrade pip
python -m pip install -r requirements.txt

مشاهده Packageهای نصب‌شده:

python -m pip list

ساخت فایل .env.example

DARVAREH_API_KEY=YOUR_DARVAREH_API_KEY
DARVAREH_MODEL_ID=YOUR_MODEL_ID

در درواره ثبت‌نام کنید و کلید API بسازید. شناسه مدل موردنظر نیز در صفحه مدل‌های درواره قابل مشاهده است.

ساخت فایل تنظیمات محلی:

cp .env.example .env

فایل را ویرایش کنید:

nano .env

مقدارهای واقعی:

DARVAREH_API_KEY=YOUR_DARVAREH_API_KEY
DARVAREH_MODEL_ID=YOUR_MODEL_ID

Permission فایل را محدود کنید:

chmod 600 .env

مشاهده Permission:

ls -l .env

خروجی باید نشان دهد فقط مالک امکان خواندن و نوشتن دارد:

-rw------- 1 username username ...

ساخت .gitignore

.env
.env.*
!.env.example

.venv/
__pycache__/
*.py[cod]

*.log

بررسی نادیده‌گرفته‌شدن .env بعد از فعال‌کردن Git:

git init
git check-ignore -v .env

ساخت ai_cli.py

import argparse
import os
import sys

from dotenv import load_dotenv
from openai import OpenAI


def build_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(
        description="دستیار خط فرمان هوش مصنوعی با API درواره"
    )

    parser.add_argument(
        "prompt",
        nargs="+",
        help="پرسش یا درخواست شما",
    )

    parser.add_argument(
        "--temperature",
        type=float,
        default=0.3,
        help="مقدار Temperature بین 0 و 2",
    )

    parser.add_argument(
        "--max-tokens",
        type=int,
        default=800,
        help="حداکثر تعداد Token خروجی",
    )

    return parser


def main() -> int:
    load_dotenv()

    parser = build_parser()
    args = parser.parse_args()

    if not 0 <= args.temperature <= 2:
        parser.error("--temperature must be between 0 and 2")

    if not 1 <= args.max_tokens <= 4000:
        parser.error("--max-tokens must be between 1 and 4000")

    api_key = os.getenv("DARVAREH_API_KEY")
    model_id = os.getenv("DARVAREH_MODEL_ID")

    if not api_key:
        print(
            "خطا: متغیر DARVAREH_API_KEY تنظیم نشده است.",
            file=sys.stderr,
        )
        return 1

    if not model_id:
        print(
            "خطا: متغیر DARVAREH_MODEL_ID تنظیم نشده است.",
            file=sys.stderr,
        )
        return 1

    prompt = " ".join(args.prompt).strip()

    client = OpenAI(
        api_key=api_key,
        base_url="https://api.darvareh.ir/v1",
        timeout=60,
        max_retries=2,
    )

    try:
        response = client.chat.completions.create(
            model=model_id,
            messages=[
                {
                    "role": "system",
                    "content": (
                        "You are a helpful Persian assistant. "
                        "Answer clearly, accurately and concisely in Persian."
                    ),
                },
                {
                    "role": "user",
                    "content": prompt,
                },
            ],
            temperature=args.temperature,
            max_tokens=args.max_tokens,
        )

        answer = response.choices[0].message.content

        if not answer:
            print(
                "مدل پاسخ قابل استفاده‌ای برنگرداند.",
                file=sys.stderr,
            )
            return 2

        print(answer)
        return 0

    except Exception as exc:
        print(
            f"خطا در دریافت پاسخ: {type(exc).__name__}",
            file=sys.stderr,
        )
        return 3

    finally:
        client.close()


if __name__ == "__main__":
    raise SystemExit(main())

Base URL رسمی درواره:

https://api.darvareh.ir/v1

Endpoint مورد استفاده:

https://api.darvareh.ir/v1/chat/completions

اجرای برنامه

python ai_cli.py "Linux چیست؟"

تعیین Temperature:

python ai_cli.py \
  --temperature 0.2 \
  "سه تفاوت Linux و Windows را توضیح بده"

تعیین حداکثر Token:

python ai_cli.py \
  --max-tokens 1200 \
  "یک برنامه یادگیری Linux برای چهار هفته بنویس"

ذخیره پاسخ در فایل:

python ai_cli.py \
  "دستورات مهم Linux را خلاصه کن" \
  > linux-cheatsheet.txt

مشاهده فایل:

less linux-cheatsheet.txt

ساخت Shell Script برای اجرای ساده‌تر

فایل run_ai.sh:

#!/usr/bin/env bash

set -euo pipefail

SCRIPT_DIR="$(
  cd -- "$(dirname -- "${BASH_SOURCE[0]}")"
  pwd
)"

exec \
  "$SCRIPT_DIR/.venv/bin/python" \
  "$SCRIPT_DIR/ai_cli.py" \
  "$@"

اجرایی‌کردن:

chmod u+x run_ai.sh

اجرا:

./run_ai.sh "Bash Script چیست؟"

این Script مسیر خودش را پیدا می‌کند و از Python داخل Virtual Environment پروژه استفاده می‌کند؛ بنابراین لازم نیست هر بار محیط را به‌صورت دستی فعال کنید.

افزودن ابزار به PATH

ابتدا یک پوشه مخصوص فرمان‌های شخصی بسازید:

mkdir -p ~/.local/bin

یک Symbolic Link ایجاد کنید:

ln -s \
  "$HOME/projects/darvareh-ai-cli/run_ai.sh" \
  "$HOME/.local/bin/darvareh-ai"

اگر ~/.local/bin داخل PATH نیست:

export PATH="$HOME/.local/bin:$PATH"

حالا اجرا کنید:

darvareh-ai "سه دستور مهم Git را توضیح بده"

برای دائمی‌کردن PATH در Bash، خط مربوط را به انتهای ~/.bashrc اضافه کنید:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

بارگذاری تنظیمات:

source ~/.bashrc

پیش از افزودن خودکار هر متن به فایل تنظیمات Shell، محتوای آن را بررسی کنید تا خط تکراری یا اشتباه ساخته نشود:

tail -n 10 ~/.bashrc

استفاده از Pipe با ابزار هوش مصنوعی

نسخه فعلی برنامه Prompt را از آرگومان خط فرمان می‌گیرد. می‌توانیم خروجی یک فرمان را با Command Substitution به آن بدهیم.

برای مثال، خلاصه‌سازی اطلاعات سیستم:

darvareh-ai \
  "این اطلاعات Linux را توضیح بده: $(uname -a)"

تحلیل خلاصه فضای دیسک:

darvareh-ai \
  "این خروجی فضای دیسک را توضیح بده: $(df -h)"

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

ساخت Alias

می‌توانید یک Alias کوتاه بسازید:

alias ai='darvareh-ai'

استفاده:

ai "تفاوت Process و Thread چیست؟"

برای دائمی‌کردن:

echo "alias ai='darvareh-ai'" >> ~/.bashrc
source ~/.bashrc

قبل از انتخاب نام Alias مطمئن شوید فرمان مهم دیگری با همان نام وجود ندارد:

type ai

بررسی Exit Code

برنامه ما در موفقیت عدد صفر و در خطا عددی غیرصفر برمی‌گرداند.

اجرا:

darvareh-ai "Ubuntu چیست؟"

مشاهده Exit Code آخرین فرمان:

echo $?

قاعده رایج Linux:

  • 0: موفق
  • غیر صفر: خطا یا وضعیت ویژه

این رفتار برای استفاده از برنامه در Shell Script و Automation مهم است.

ساخت یک Script برای ذخیره پاسخ‌ها

فایل save_answer.sh:

#!/usr/bin/env bash

set -euo pipefail

if [[ $# -eq 0 ]]; then
  echo "Usage: $0 <prompt>" >&2
  exit 1
fi

OUTPUT_DIR="$HOME/ai-answers"
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
OUTPUT_FILE="$OUTPUT_DIR/answer-$TIMESTAMP.txt"

mkdir -p "$OUTPUT_DIR"

darvareh-ai "$@" > "$OUTPUT_FILE"

echo "Saved to: $OUTPUT_FILE"

اجرایی‌کردن:

chmod u+x save_answer.sh

اجرا:

./save_answer.sh "یک چک‌لیست یادگیری Python بنویس"

مشاهده آخرین فایل‌ها:

ls -lt ~/ai-answers | head

در این Script:

  • set -e اجرای Script را پس از خطای فرمان متوقف می‌کند.
  • set -u استفاده از متغیر تعریف‌نشده را خطا می‌داند.
  • set -o pipefail خطای هر بخش Pipeline را قابل تشخیص می‌کند.
  • متغیرها داخل Double Quote قرار گرفته‌اند تا فاصله در مسیر یا متن مشکل ایجاد نکند.

مدیریت Log برنامه

ارسال خروجی عادی به فایل:

darvareh-ai "یک متن آزمایشی بنویس" > answer.log

ارسال خطا:

darvareh-ai > error.log 2>&1

مشاهده زنده Log:

tail -f error.log

برای Logهای واقعی مراقب باشید Prompt، پاسخ، API Key یا داده شخصی بدون ضرورت ذخیره نشود.

فشرده‌سازی پروژه

ساخت فایل آرشیو بدون .env و Virtual Environment:

tar \
  --exclude=".env" \
  --exclude=".venv" \
  --exclude="__pycache__" \
  -czf darvareh-ai-cli.tar.gz \
  .

مشاهده محتوای آرشیو بدون Extract:

tar -tzf darvareh-ai-cli.tar.gz

قبل از ارسال فایل آرشیو، فهرست آن را بررسی کنید تا Secret یا فایل غیرضروری داخل آن نباشد.

دستورات کاربردی روزانه Linux

مسیر و فایل

pwd
ls -la
cd DIRECTORY
mkdir -p DIRECTORY
touch FILE
cp SOURCE DESTINATION
mv SOURCE DESTINATION

مشاهده محتوا

cat FILE
less FILE
head -n 20 FILE
tail -n 20 FILE
tail -f FILE

جست‌وجو

grep -n "TEXT" FILE
grep -R "TEXT" DIRECTORY
find DIRECTORY -type f -name "*.py"

سیستم

uname -a
cat /etc/os-release
uptime
free -h
df -h
du -sh DIRECTORY

Process

ps aux
pgrep -af python
top
kill PID

Network

ip address
ss -lnt
curl -I URL
ping -c 4 HOST

Package

sudo apt update
apt search PACKAGE
apt show PACKAGE
sudo apt install PACKAGE

Permission

ls -l FILE
chmod u+x SCRIPT
chmod 600 SECRET_FILE

Python

python3 --version
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
deactivate

خطاهای رایج Linux

خطای command not found

نمونه:

python: command not found

محل فرمان را بررسی کنید:

command -v python
command -v python3

در بسیاری از توزیع‌ها باید از python3 استفاده کنید:

python3 --version

خطای Permission denied

ممکن است فایل مجوز اجرا نداشته باشد:

ls -l run_ai.sh
chmod u+x run_ai.sh
./run_ai.sh "سلام"

ممکن است مسیر یا فایل متعلق به کاربر دیگری باشد. به‌جای استفاده فوری از sudo، ابتدا مالکیت و Permission را بررسی کنید.

خطای No such file or directory

مسیر فعلی:

pwd

فایل‌ها:

ls -la

اگر مسیر دارای فاصله است، آن را داخل Quote قرار دهید:

cd "My Projects"

فعال‌نشدن Virtual Environment

بررسی وجود فایل فعال‌سازی:

ls -l .venv/bin/activate

فعال‌سازی:

source .venv/bin/activate

اگر .venv ناقص است، وابستگی python3-venv را نصب و محیط را دوباره در مسیر تازه ایجاد کنید.

نصب Package در Python اشتباه

مسیر Python:

which python

مسیر pip:

which pip

هر دو باید به .venv اشاره کنند:

/home/username/projects/project/.venv/bin/python
/home/username/projects/project/.venv/bin/pip

برای کاهش ابهام:

python -m pip install -r requirements.txt

اشغال‌بودن Port

نمایش Processهای Listen:

ss -lnt

برای Port مشخص:

ss -lnt | grep ":8000"

اگر لازم است Process را متوقف کنید، ابتدا هویت آن را بررسی کنید و سپس سیگنال معمول خاتمه ارسال کنید.

پرشدن فضای دیسک

df -h

بررسی اندازه پوشه‌های Home:

du -h --max-depth=1 "$HOME"

قبل از حذف فایل‌ها، نوع، مسیر و اهمیت آن‌ها را بررسی کنید. Log، Backup یا داده برنامه ممکن است برای بازیابی یا عیب‌یابی ضروری باشد.

متغیر محیطی پیدا نمی‌شود

echo "$DARVAREH_MODEL_ID"

اگر از .env استفاده می‌کنید، مطمئن شوید برنامه از مسیر درست اجرا می‌شود و load_dotenv() فعال است.

بررسی نام متغیر بدون چاپ مقدار Secret:

python -c \
'import os; from dotenv import load_dotenv; load_dotenv(); print(bool(os.getenv("DARVAREH_API_KEY")))'

خطای اتصال API

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

  • اتصال اینترنت برقرار باشد.
  • Base URL دقیق باشد.
  • کلید API معتبر باشد.
  • شناسه مدل درست باشد.
  • کیف پول اعتبار کافی داشته باشد.
  • Timeout شبکه رخ نداده باشد.

Base URL صحیح:

https://api.darvareh.ir/v1

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

اجرای تمام فرمان‌ها با sudo

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

کپی‌کردن فرمان بدون فهمیدن آن

قبل از اجرا، به‌خصوص درباره فرمان‌هایی که فایل حذف می‌کنند، Permission تغییر می‌دهند یا از اینترنت Script دریافت می‌کنند، عملکرد فرمان را بررسی کنید.

کارکردن مستقیم با کاربر Root

برای کار روزمره از کاربر عادی استفاده و فقط در موارد لازم از sudo کمک بگیرید.

نصب Packageهای Python در محیط سیستم

برای هر پروژه Virtual Environment جدا بسازید.

قراردادن API Key در کد

روش نامناسب:

api_key = "کلید واقعی"

روش مناسب:

api_key = os.getenv("DARVAREH_API_KEY")

ثبت .env در Git

فایل .env را داخل .gitignore قرار دهید:

.env
.env.*
!.env.example

استفاده از Permission باز

به‌جای chmod 777، حداقل Permission لازم را تعیین کنید.

نداشتن Backup

Linux و Git جایگزین Backup کامل داده نیستند. اطلاعات مهم باید نسخه پشتیبان مستقل و قابل بازیابی داشته باشند.

مسیر یادگیری Linux برای برنامه‌نویسان

مرحله اول: مفاهیم پایه

  • فایل‌سیستم
  • مسیر مطلق و نسبی
  • pwd
  • ls
  • cd
  • mkdir
  • cp
  • mv
  • مشاهده فایل‌ها

مرحله دوم: کار با متن

  • cat
  • less
  • head
  • tail
  • grep
  • find
  • Pipe
  • Redirect

مرحله سوم: سیستم و Package

  • APT
  • Process
  • Memory
  • Disk
  • Network
  • Environment Variable

مرحله چهارم: Permission و کاربران

  • Owner
  • Group
  • Read، Write و Execute
  • chmod
  • chown
  • sudo

مرحله پنجم: ابزارهای توسعه

  • Git
  • Python Virtual Environment
  • SSH
  • Docker
  • Bash Script
  • ویرایشگر کد

مرحله ششم: اجرای پروژه واقعی

  • ساخت API
  • مدیریت Log
  • Environment Variable
  • اجرای Process
  • Reverse Proxy
  • Container
  • Deployment

پرسش‌های متداول

Linux چیست و چه کاربردی دارد؟

Linux پایه بسیاری از سیستم‌عامل‌ها و زیرساخت‌های سروری است و در برنامه‌نویسی، Cloud، DevOps، شبکه، پایگاه داده، Embedded System و هوش مصنوعی استفاده می‌شود.

آیا Ubuntu همان Linux است؟

Ubuntu یک Distribution مبتنی بر Linux است. Linux به‌طور دقیق‌تر نام Kernel است و Ubuntu مجموعه‌ای کامل از Kernel، ابزارها و Packageها را ارائه می‌کند.

آیا Linux برای برنامه‌نویسی بهتر از Windows است؟

پاسخ به نوع پروژه بستگی دارد. Linux برای توسعه Backend، سرور، Cloud، Container و بسیاری از ابزارهای متن‌باز محیط طبیعی‌تری فراهم می‌کند. Windows نیز برای بسیاری از زبان‌ها و ابزارها مناسب است و با WSL می‌تواند محیط Linux را در اختیار توسعه‌دهنده قرار دهد.

آیا یادگیری Linux سخت است؟

بخش ابتدایی نیاز به تمرین دارد، اما برای کار روزمره لازم نیست صدها فرمان حفظ کنید. با یادگیری حدود ۲۰ تا ۳۰ فرمان و استفاده منظم از --help و man می‌توانید کار را آغاز کنید.

آیا Linux فقط با Terminal کار می‌کند؟

خیر. توزیع‌هایی مانند Ubuntu Desktop و Linux Mint محیط گرافیکی کامل دارند. بااین‌حال، Terminal یکی از مهم‌ترین ابزارهای Linux برای برنامه‌نویسان و مدیران سرور است.

Bash چیست؟

Bash یک Shell و زبان Scripting است که فرمان‌ها را اجرا و امکان Automation کارهای تکراری را فراهم می‌کند.

تفاوت Terminal و Shell چیست؟

Terminal رابط دریافت ورودی و نمایش خروجی است. Shell برنامه‌ای است که فرمان‌های واردشده را تفسیر و اجرا می‌کند.

آیا برای هوش مصنوعی به Linux نیاز داریم؟

برای استفاده از ابزارهای آنلاین و APIها الزام مطلق وجود ندارد، اما Linux در اجرای سرور، مدل محلی، GPU، Docker، Pipeline داده و زیرساخت هوش مصنوعی بسیار رایج است.

آیا پروژه مقاله به GPU نیاز دارد؟

خیر. برنامه فقط از طریق API درواره به مدل متصل می‌شود و پردازش مدل روی زیرساخت ارائه‌دهنده انجام می‌شود.

آیا می‌توان از مدل‌های مختلف در پروژه استفاده کرد؟

بله. مقدار DARVAREH_MODEL_ID را با شناسه مدل دیگری از صفحه مدل‌های درواره جایگزین و برنامه را دوباره اجرا کنید.

آیا API Key را می‌توان در .bashrc قرار داد؟

از نظر فنی امکان‌پذیر است، اما فایل تنظیمات Shell ممکن است توسط ابزارهای دیگر خوانده یا در Backup ذخیره شود. برای پروژه محلی، فایل .env با Permission محدود و خارج از Git روش قابل‌کنترل‌تری است. در Production از Secret Manager محیط استقرار استفاده کنید.

چگونه بفهمیم چه نسخه‌ای از Ubuntu نصب است؟

cat /etc/os-release

یا در برخی نصب‌ها:

lsb_release -a

چگونه فرمان قبلی را پیدا کنیم؟

کلیدهای بالا و پایین History را مرور می‌کنند.

جست‌وجوی تعاملی:

Ctrl + R

نمایش History:

history

فرمان‌هایی که Secret را مستقیماً در خط فرمان قرار می‌دهند ممکن است وارد History شوند.

آیا Linux آنتی‌ویروس نمی‌خواهد؟

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

چک‌لیست عملی پایان آموزش

اگر مراحل مقاله را انجام داده باشید، باید بتوانید:

  • Terminal را باز کنید.
  • مسیر فعلی را پیدا کنید.
  • فایل و پوشه بسازید.
  • فایل‌ها را کپی و جابه‌جا کنید.
  • محتوای فایل را مشاهده و جست‌وجو کنید.
  • از Pipe و Redirect استفاده کنید.
  • Package نصب کنید.
  • Permission فایل را بخوانید و تغییر دهید.
  • Processها را بررسی کنید.
  • وضعیت Memory و Disk را ببینید.
  • Virtual Environment بسازید.
  • کتابخانه Python نصب کنید.
  • Environment Variable مدیریت کنید.
  • Shell Script ساده بنویسید.
  • ابزار خط فرمان هوش مصنوعی را اجرا کنید.
  • با API درواره از یک مدل هوش مصنوعی پاسخ بگیرید.

جمع‌بندی

Linux یکی از پایه‌های اصلی برنامه‌نویسی، سرور، Cloud، DevOps و هوش مصنوعی است. برای شروع لازم نیست تمام جزئیات Kernel یا مدیریت پیشرفته سرور را بدانید. شناخت فایل‌سیستم، Terminal، Permission، Process، Package Manager و چند فرمان اصلی برای آغاز کافی است.

در این مقاله علاوه بر مفاهیم Linux و Ubuntu، یک پروژه عملی با Python ساختیم که از طریق آدرس زیر به API درواره متصل می‌شود:

https://api.darvareh.ir/v1

با این پروژه می‌توانید از Terminal سؤال بپرسید، خروجی را در فایل ذخیره کنید، آن را در Shell Script به کار ببرید و مدل مورد استفاده را بدون تغییر معماری اصلی برنامه عوض کنید.

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

منابع تکمیلی

مقالات مرتبط

برای مطالعه شرایط استفاده و محدودیت‌های مسئولیت، صفحه «سلب مسئولیت» را مشاهده کنید.

Read more

اتوماسیون هوش مصنوعی چیست؟ کاربردها و آموزش ساخت AI Automation

اتوماسیون هوش مصنوعی چیست؟ کاربردها و آموزش ساخت AI Automation

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

Agentic Commerce چیست؟ آینده خرید با ایجنت هوش مصنوعی

Agentic Commerce چیست؟ آینده خرید با ایجنت هوش مصنوعی

Agentic Commerce شیوه‌ای جدید برای خرید اینترنتی است که در آن ایجنت هوش مصنوعی می‌تواند نیاز کاربر را بفهمد، محصولات را جست‌وجو و مقایسه کند و فرایند خرید را پیش ببرد. در این راهنما با معماری، UCP، ACP و پیاده‌سازی آن با API درواره آشنا می‌شوید.