اگر به دنیای برنامهنویسی، امنیت، سرور و ابزارهای Developer علاقه داشته باشید، احتمالاً خیلی زود با Linux و محیطی به نام Terminal روبهرو میشوید. برخلاف تصور بعضی از کاربران، Linux فقط یک سیستمعامل مخصوص هکرها یا سرورها نیست؛ بلکه یک محیط قدرتمند برای Programming، Development، Networking و System Administration محسوب میشود.
یکی از مهمترین دلایلی که Linux بین برنامهنویسها محبوب شده، کنترل زیادی است که در اختیار کاربر قرار میدهد. شما میتوانید تقریباً همهچیز را از طریق Terminal مدیریت کنید؛ از ساختن یک فایل ساده گرفته تا نصب Package، اجرای Script، مدیریت Process و حتی برقراری ارتباط با یک Remote Server.
در این آموزش قرار است از مفاهیم پایه شروع کنیم و قدمبهقدم با محیط Linux آشنا شویم.
Linux دقیقاً چیست؟
Linux در اصل یک Kernel است؛ یعنی هستهای که وظیفه مدیریت سختافزار، Memory، CPU، Processها و ارتباط بین نرمافزارها و سختافزار را بر عهده دارد.
سیستمهایی مثل Ubuntu، Debian، Fedora، Arch Linux و Linux Mint در واقع Distribution یا همان Distro هستند که Kernel لینوکس را همراه با مجموعهای از ابزارها، Packageها و نرمافزارهای مختلف ارائه میکنند.
برای مثال اگر تازه وارد Linux شدهاید، Ubuntu میتواند انتخاب مناسبی باشد، چون Community بزرگی دارد و برای بسیاری از مشکلات، Documentation و Tutorialهای زیادی پیدا میشود.
آشنایی با Terminal
یکی از مهمترین ابزارهایی که باید یاد بگیرید، Terminal است.
در محیط گرافیکی معمولاً برای باز کردن یک Folder روی آن Double Click میکنید، اما در Terminal میتوانید همین کار را با یک Command انجام دهید.
مثلاً:
cd Documents
دستور cd مخفف Change Directory است و برای جابهجایی بین پوشهها استفاده میشود.
اگر بخواهید ببینید الان در چه مسیری قرار دارید، میتوانید از دستور زیر استفاده کنید:
pwd
خروجی چیزی شبیه این خواهد بود:
/home/user/Documents
این مسیر به شما میگوید که Terminal در حال حاضر در کدام Directory قرار دارد.
مشاهده فایلها و پوشهها
برای مشاهده محتوای یک Directory معمولاً از ls استفاده میکنیم:
ls
اما ls فقط نام فایلها را نمایش میدهد. اگر اطلاعات بیشتری مثل Permission، Owner و File Size بخواهید، میتوانید از:
ls -la
استفاده کنید.
گزینه -l اطلاعات را به شکل جزئیتر نمایش میدهد و -a باعث میشود فایلهای Hidden نیز نمایش داده شوند.
در Linux فایلهای Hidden معمولاً با . شروع میشوند.
مثلاً:
.bashrc
.config
.cache
ساخت Folder جدید
برای ساخت یک Directory جدید میتوانیم از mkdir استفاده کنیم:
mkdir projects
حالا اگر دوباره ls را اجرا کنید، پوشه projects را خواهید دید.
برای ورود به آن:
cd projects
و برای برگشتن یک مرحله به عقب:
cd ..
دو نقطه در Linux به معنی Parent Directory هستند.
ساخت و مدیریت فایل
برای ساخت یک فایل خالی میتوانید از touch استفاده کنید:
touch hello.py
حالا یک فایل به نام hello.py ساخته شده است.
برای مشاهده محتوای یک فایل متنی میتوان از cat استفاده کرد:
cat hello.py
اگر فایل خالی باشد، چیزی نمایش داده نمیشود.
برای نوشتن داخل فایل هم میتوانید از Editorهایی مثل nano، Vim یا Neovim استفاده کنید.
برای مثال:
nano hello.py
اگر هنوز با Vim آشنا نیستید، Nano گزینه سادهتری برای شروع است.
Permission در Linux
یکی از ویژگیهای مهم Linux سیستم Permission آن است.
اگر دستور زیر را اجرا کنید:
ls -l
ممکن است چیزی شبیه این ببینید:
-rw-r--r-- 1 user user 1200 hello.py
قسمت اول یعنی:
-rw-r--r--
Permission فایل را مشخص میکند.
سه Permission اصلی عبارتاند از:
r= Readw= Writex= Execute
برای مثال یک فایل Python معمولاً لازم نیست مستقیماً Execute شود، چون میتوانیم آن را با Python Interpreter اجرا کنیم:
python3 hello.py
اما برای Scriptهایی که قرار است مستقیماً اجرا شوند، میتوان Permission مربوط به Execute را فعال کرد.
اجرای اولین Python Script
حالا که فایل hello.py را ساختهایم، داخل آن کد زیر را قرار میدهیم:
print("Hello, CYZ3N!")
سپس در Terminal اجرا میکنیم:
python3 hello.py
اگر همهچیز درست باشد، خروجی زیر را مشاهده میکنید:
Hello, CYZ3N!
همین مثال ساده نشان میدهد که چرا Terminal برای برنامهنویسها اهمیت زیادی دارد.
شما میتوانید بدون باز کردن یک IDE سنگین، Script خود را اجرا کنید، خروجی را ببینید و در صورت وجود Error آن را بررسی کنید.
Python Virtual Environment چیست؟
وقتی وارد پروژههای جدیتر Python میشوید، خیلی زود با مفهوم Virtual Environment روبهرو خواهید شد.
فرض کنید یک پروژه به نسخه خاصی از یک Package نیاز دارد و پروژه دیگری به نسخه متفاوتی از همان Package احتیاج دارد.
اگر همه Packageها را به صورت Global نصب کنید، احتمالاً خیلی زود با Conflict مواجه میشوید.
راهحل استفاده از Virtual Environment است.
ابتدا یک محیط مجازی ایجاد کنید:
python3 -m venv .venv
بعد آن را فعال کنید:
source .venv/bin/activate
اگر فعالسازی موفق باشد، معمولاً نام محیط مجازی در ابتدای Terminal نمایش داده میشود:
(.venv) user@linux:~/projects$
حالا Packageهایی که نصب میکنید فقط برای همین پروژه در دسترس خواهند بود.
برای مثال:
pip install requests
و بعد میتوانید در Python از آن استفاده کنید:
import requests
response = requests.get("https://example.com")
print(response.status_code)
این روش باعث میشود پروژههای مختلف Python از یکدیگر جدا بمانند.
Package Manager چیست؟
در Linux معمولاً نرمافزارها را به صورت دستی از هر سایتی دانلود نمیکنیم.
بسته به Distribution شما، Package Manager متفاوت است.
در Ubuntu و Debian معمولاً از apt استفاده میشود:
sudo apt update
این دستور لیست Packageها را بهروزرسانی میکند.
برای نصب یک نرمافزار:
sudo apt install git
بعد میتوانید بررسی کنید که Git نصب شده است:
git --version
مثلاً خروجی ممکن است چیزی شبیه این باشد:
git version 2.45.2
چرا Git برای برنامهنویس مهم است؟
Git یکی از مهمترین ابزارهای Development است.
با Git میتوانید تغییرات پروژه را Track کنید و در صورت نیاز به نسخه قبلی برگردید.
برای شروع یک Repository جدید:
git init
سپس فایلهای پروژه را به Git اضافه کنید:
git add .
و یک Commit بسازید:
git commit -m "Initial commit"
Commit در واقع یک Snapshot از وضعیت پروژه در یک لحظه مشخص است.
اگر بعداً تغییری ایجاد کنید، Git میتواند به شما نشان دهد چه چیزی تغییر کرده است.
برای مشاهده وضعیت:
git status
این دستور یکی از Commandهایی است که احتمالاً بارها در طول روز استفاده خواهید کرد.
Processها در Linux
هر برنامهای که در Linux اجرا میشود معمولاً به صورت یک Process فعالیت میکند.
برای مشاهده Processها میتوانید از:
ps aux
استفاده کنید.
برای مشاهده لحظهای Processها نیز ابزارهایی مثل:
top
یا:
htop
وجود دارند.
htop معمولاً رابط کاربری خواناتری دارد و میتوانید مصرف CPU و RAM برنامهها را به صورت زنده مشاهده کنید.
این موضوع مخصوصاً زمانی مهم است که یک برنامه یا Server رفتار غیرعادی داشته باشد.
Terminal فقط برای Command نیست
یکی از اشتباهات رایج این است که Terminal را فقط یک ابزار برای اجرای Commandها بدانیم.
در واقع Terminal میتواند یک محیط کامل برای Automation باشد.
فرض کنید هر روز باید چند فایل را Rename کنید.
به جای اینکه تکتک فایلها را با File Manager تغییر نام دهید، میتوانید با یک Bash Script این کار را خودکار کنید.
مثلاً:
for file in *.txt
do
mv "$file" "backup_$file"
done
این Script روی فایلهای .txt موجود در Directory اجرا میشود و نام آنها را با backup_ شروع میکند.
قدرت واقعی Linux زمانی مشخص میشود که چند Command ساده را با هم ترکیب کنید و یک Workflow بسازید.
Pipe چیست؟
یکی از جذابترین قابلیتهای Shell، استفاده از Pipe است.
علامت Pipe این است:
|
Pipe خروجی یک Command را به عنوان ورودی Command بعدی ارسال میکند.
مثلاً:
ls -la | grep ".py"
در اینجا خروجی ls -la وارد grep میشود و فقط خطوطی که شامل .py هستند نمایش داده میشوند.
این قابلیت باعث میشود بتوانید Commandهای کوچک و ساده را مثل قطعات Lego کنار هم قرار دهید.
مدیریت فایلهای بزرگ
فرض کنید یک Log File بسیار بزرگ دارید و میخواهید فقط آخرین خطوط آن را مشاهده کنید.
میتوانید از:
tail logfile.log
استفاده کنید.
یا برای مشاهده زنده Log:
tail -f logfile.log
حالا هر خط جدیدی که به فایل اضافه شود، در Terminal نمایش داده خواهد شد.
این تکنیک در Server Administration، Web Development و Debugging بسیار کاربردی است.
چند Command مهم که بهتر است بلد باشید
در مسیر یادگیری Linux بهتر است این Commandها را کمکم یاد بگیرید:
pwd
ls
cd
mkdir
touch
cp
mv
rm
cat
less
head
tail
grep
find
chmod
chown
ps
top
kill
curl
wget
ssh
git
لازم نیست همه آنها را در یک روز حفظ کنید.
مهمتر از حفظ کردن Syntax این است که بدانید چه زمانی باید از هر ابزار استفاده کنید.
SSH چیست؟
اگر بخواهید به یک Remote Server متصل شوید، احتمالاً از SSH استفاده خواهید کرد.
ساختار ساده یک اتصال SSH معمولاً به شکل زیر است:
ssh username@server_ip
بعد از وارد کردن Password یا استفاده از SSH Key، وارد محیط Remote Machine میشوید.
از اینجا به بعد تقریباً همان Commandهایی را دارید که روی سیستم شخصی خود استفاده میکردید.
این یکی از دلایلی است که یادگیری Terminal اهمیت زیادی دارد؛ چون وقتی وارد دنیای Server میشوید، Terminal دیگر یک ابزار جانبی نیست و تبدیل به یکی از اصلیترین Interfaceهای شما میشود.
جمعبندی
یادگیری Linux در ابتدا ممکن است کمی عجیب به نظر برسد. مخصوصاً اگر سالها فقط با محیطهای Graphical کار کرده باشید.
اما بعد از مدتی متوجه میشوید که بسیاری از کارهایی که قبلاً با چندین Click انجام میدادید، با یک Command ساده قابل انجام هستند.
از طرف دیگر، Linux پایه بسیار خوبی برای یادگیری موضوعاتی مثل Python، Networking، Cyber Security، Web Development، Docker، Git و Server Administration ایجاد میکند.
قرار نیست از همان روز اول تمام Commandها را حفظ کنید. بهتر است یک پروژه کوچک بسازید و در طول انجام آن، هر بار ابزار جدیدی یاد بگیرید.
مثلاً یک پروژه Python ایجاد کنید، برای آن Virtual Environment بسازید، Git را فعال کنید، چند فایل ایجاد کنید، Permissionها را بررسی کنید و در نهایت پروژه را روی یک Remote Server اجرا کنید.
در این حالت Linux دیگر فقط مجموعهای از Commandهای خشک نخواهد بود؛ بلکه تبدیل به بخشی از Workflow روزانه شما میشود.
و شاید مهمترین چیزی که باید از این آموزش به خاطر بسپارید این باشد:
Learn the tools.
Understand the system.
Build something.
Break it.
Fix it.
Repeat.
همین چرخه است که به مرور شما را از یک کاربر معمولی به یک Developer حرفهایتر تبدیل میکند.