Linux چیست؟ آموزش کامل لینوکس و Ubuntu از صفر برای برنامهنویسی و هوش مصنوعی
در این آموزش Linux و Ubuntu را از صفر یاد میگیرید؛ از Terminal، فایلها و Permission تا نصب Package، مدیریت Process و اجرای Python. در پایان یک ابزار خط فرمان هوش مصنوعی با API درواره میسازیم.
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: خواندن یا Readw: نوشتن یا Writex: اجرا یا 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 برای برنامهنویسان
مرحله اول: مفاهیم پایه
- فایلسیستم
- مسیر مطلق و نسبی
pwdlscdmkdircpmv- مشاهده فایلها
مرحله دوم: کار با متن
catlessheadtailgrepfind- Pipe
- Redirect
مرحله سوم: سیستم و Package
- APT
- Process
- Memory
- Disk
- Network
- Environment Variable
مرحله چهارم: Permission و کاربران
- Owner
- Group
- Read، Write و Execute
chmodchownsudo
مرحله پنجم: ابزارهای توسعه
- 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 بسازید و مدل مناسب پروژه را از صفحه مدلهای درواره انتخاب کنید.
منابع تکمیلی
- آموزش خط فرمان Linux برای مبتدیان در Ubuntu
- راهنمای نصب Ubuntu Desktop
- راهنمای نصب Ubuntu Server
- مشاهده و پایش Logها در Ubuntu
- مستندات Virtual Environment در Python
مقالات مرتبط
- آموزش هوش مصنوعی با Python و API درواره
- آموزش PyCharm برای برنامهنویسی Python و هوش مصنوعی
- آموزش Anaconda، Miniconda و Conda برای Python
- آموزش Jupyter Notebook و JupyterLab
- آموزش اجرای مدلهای محلی با Ollama
- آموزش Microservices با Python، FastAPI و Docker
- آموزش Nginx و Reverse Proxy برای FastAPI
- ساخت API هوش مصنوعی آماده Production
- آموزش Open WebUI و اتصال به API درواره
- آموزش Cloudflare Workers و ساخت API هوش مصنوعی Serverless
برای مطالعه شرایط استفاده و محدودیتهای مسئولیت، صفحه «سلب مسئولیت» را مشاهده کنید.