دستورات لینوکس برای برنامهنویسان؛ راهنمای عملی ترمینال
دستورات لینوکس پرکاربرد برای برنامهنویسان با مثال: کار با فایل، جستوجو با grep و find، پایپ، مجوزها، فرایندها، شبکه و مدیریت بسته در ترمینال.

فهرست مطالب
- چرا برنامهنویس باید با ترمینال راحت باشد؟
- ساختار دستورها و دیدن راهنما
- حرکت در سیستم فایل
- ساخت، کپی، جابهجایی و حذف فایل
- دیدن محتوای فایلها و دنبال کردن لاگ
- جستوجو با grep و find
- پایپ و تغییر مسیر خروجی
- مجوزهای فایل: chmod، chown و sudo
- فرایندها و سرویسها
- شبکه، SSH و انتقال فایل
- فضای دیسک و فشردهسازی
- متغیرهای محیطی و alias
- مدیریت بسته با apt و آینههای داخلی
- یک اسکریپت Bash کوچک و امن
- عیبیابی سرور در پنج قدم
- جدول مرجع سریع دستورات لینوکس
- قدم بعدی
کار با دستورات لینوکس (Linux Commands) مهارتی است که هر برنامهنویس دیر یا زود به آن نیاز پیدا میکند، چون سرورها، کانتینرها و بیشتر سیستمهای CI روی لینوکس اجرا میشوند. در این راهنما پرکاربردترین دستورهای ترمینال را با مثالهایی از کار روزمرهی توسعهدهندهها مرور میکنیم؛ از جابهجایی بین پوشهها تا جستوجو در لاگ و مدیریت سرویسها.
مثالها روی Ubuntu و پوستهی Bash نوشته شدهاند، اما در بیشتر توزیعها و حتی ترمینال مک هم کار میکنند.
چرا برنامهنویس باید با ترمینال راحت باشد؟
رابط گرافیکی برای کارهای روزمره کافی است، اما وقتی با SSH به یک سرور وصل میشوید یا داخل یک کانتینر هستید، فقط خط فرمان (Command Line) در اختیار دارید. ترمینال این مزیتها را هم دارد:
- ترکیبپذیری: دستورهای کوچک با پایپ به هم وصل میشوند و کارهای بزرگ را انجام میدهند.
- خودکارسازی: هر دستوری که در ترمینال اجرا میکنید، میتواند در یک اسکریپت یا پایپلاین CI هم اجرا شود.
- سرعت: جستوجو در هزاران فایل یا لاگ چندگیگابایتی در ترمینال چند ثانیه طول میکشد.
کاربران ویندوز میتوانند با WSL (Windows Subsystem for Linux) یک توزیع لینوکس واقعی را کنار ویندوز اجرا کنند؛ کافی است در PowerShell با دسترسی مدیر دستور wsl --install را بزنید.
ساختار دستورها و دیدن راهنما
بیشتر دستورها این شکل را دارند: نام فرمان، سپس گزینهها (Options) و بعد آرگومانها (Arguments):
ls -la /var/log
man grep # full manual, press q to quit
grep --help # short summary of options
چند میانبر که از روز اول وقتتان را نجات میدهد:
- Tab: نام فایل و دستور را کامل میکند.
- Ctrl+R: در تاریخچهی دستورهای قبلی جستوجو میکند.
- Ctrl+C: دستور در حال اجرا را متوقف میکند.
- Ctrl+L یا
clear: صفحه را پاک میکند.
دستور history هم فهرست دستورهای اخیر را با شماره نشان میدهد. اگر دستوری را فراموش کردید که دیروز روی سرور زدید، معمولاً همینجا پیدایش میکنید. یادتان باشد رمز عبوری که مستقیم در خط فرمان تایپ شود، در همین تاریخچه ذخیره میشود؛ پس رمزها را هرگز بهصورت آرگومان دستور ننویسید.
حرکت در سیستم فایل
pwd # print current directory
ls -lah # list all files with sizes in human-readable form
cd ~/projects/api # go to a directory
cd .. # one level up
cd - # back to the previous directory
علامت ~ به پوشهی خانهی کاربر اشاره میکند. فایلهایی که نامشان با نقطه شروع میشود، مثل .env یا .gitignore، فایل پنهان هستند و فقط با گزینهی -a دیده میشوند.
ساخت، کپی، جابهجایی و حذف فایل
mkdir -p src/utils # create nested directories
touch src/utils/helpers.py # create an empty file
cp config.example.yml config.yml
cp -r assets/ backup-assets/
mv old-name.txt new-name.txt
rm notes.txt
rm -r build/
هشدار: دستور
rmفایل را به سطل زباله نمیبرد و مستقیم حذف میکند. پیش از هرrm -rمسیر را باlsببینید، مخصوصاً وقتی در مسیر متغیری مثل$DIRبه کار رفته است؛ اگر متغیر خالی باشد، نتیجه میتواند فاجعهبار باشد.
دیدن محتوای فایلها و دنبال کردن لاگ
cat package.json # print the whole file
less app.log # scroll through a long file, q to quit
head -n 20 data.csv # first 20 lines
tail -n 50 app.log # last 50 lines
tail -f app.log # follow new lines as they are written
دستور tail -f یکی از پرکاربردترین ابزارهای عیبیابی است: لاگ را باز نگه دارید، درخواست را دوباره بفرستید و خطا را همان لحظه ببینید.
جستوجو با grep و find
grep داخل محتوای فایلها جستوجو میکند. طبق راهنمای رسمی، گزینهی -r پوشهها را بازگشتی میگردد، -n شمارهی خط را نشان میدهد و -i حروف بزرگ و کوچک را یکی حساب میکند:
grep -rn "console.log" src/
grep -i "error" app.log
grep -rn --include="*.py" "def main" .
find فایلها را بر اساس ویژگیهایشان پیدا میکند؛ نام، نوع و زمان تغییر:
find . -name "*.log" # files by name pattern
find . -type d -name node_modules # directories only
find /var/log -name "*.gz" -mtime +30 # older than 30 days
پیش از اضافه کردن گزینهی حذف به find، همیشه یک بار دستور را بدون آن اجرا کنید تا فهرست فایلها را ببینید.
پایپ و تغییر مسیر خروجی
قدرت واقعی دستورات لینوکس در ترکیب آنهاست. علامت | یا پایپ (Pipe) خروجی یک دستور را به ورودی دستور بعدی میدهد و > خروجی را در فایل مینویسد:
ls src | wc -l # count entries
npm test > test-output.txt 2>&1 # save stdout and stderr to a file
echo "export ENV=dev" >> .envrc # append instead of overwrite
یک مثال واقعی: پیدا کردن ده IP با بیشترین درخواست در لاگ دسترسی Nginx:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -n 10
awk ستون اول (IP) را جدا میکند، sort آنها را کنار هم میچیند، uniq -c تکرارها را میشمارد و sort -rn نتیجه را بهترتیب نزولی مرتب میکند.
مجوزهای فایل: chmod، chown و sudo
خروجی ls -l چیزی شبیه -rwxr-xr-- نشان میدهد: سه حرف اول مجوز مالک، سه حرف بعد مجوز گروه و سه حرف آخر مجوز بقیه است. r یعنی خواندن، w نوشتن و x اجرا.
chmod +x deploy.sh # make a script executable
chmod 644 config.yml # owner read/write, others read
chmod 755 scripts/ # owner full, others read/execute
sudo chown -R www-data:www-data /var/www/app
sudo فقط همان یک دستور را با دسترسی مدیر اجرا میکند. هرگز برای حل خطای دسترسی سراغ chmod 777 نروید؛ این کار به همهی کاربران سیستم اجازهی نوشتن میدهد و یک حفرهی امنیتی آشکار است.
فرایندها و سرویسها
ps aux | grep node # find running node processes
top # live CPU and memory usage (htop is friendlier)
kill 12345 # ask process 12345 to stop gracefully
kill -9 12345 # force kill, only as a last resort
روی سرورهایی که از systemd استفاده میکنند، سرویسها با systemctl مدیریت میشوند و لاگشان با journalctl:
sudo systemctl status nginx
sudo systemctl restart nginx
journalctl -u nginx -f # follow the service logs
شبکه، SSH و انتقال فایل
curl -I https://example.com # show response headers only
ss -tulpn # which ports are listening
ssh-keygen -t ed25519 # create an SSH key pair
ssh deploy@203.0.113.10 # connect to a server
scp dist.tar.gz deploy@203.0.113.10:/tmp/
دستور ss -tulpn وقتی بهکار میآید که برنامه با خطای «port already in use» بالا نمیآید و میخواهید ببینید کدام فرایند پورت را گرفته است. نام فرایندهای متعلق به کاربران دیگر فقط با دسترسی مدیر نمایش داده میشود؛ پس اگر ستون فرایند خالی بود، دستور را با sudo اجرا کنید.
فضای دیسک و فشردهسازی
df -h # free space per disk
du -sh * | sort -h # size of each item in the current directory
tar -czf backup.tar.gz src/ # create a compressed archive
tar -xzf backup.tar.gz # extract it
متغیرهای محیطی و alias
echo $PATH
export API_URL="http://localhost:8000"
echo 'alias gs="git status"' >> ~/.bashrc
source ~/.bashrc
متغیری که با export تعریف شود، فقط تا بسته شدن همان ترمینال باقی میماند. برای ماندگاری آن را در ~/.bashrc بنویسید، اما رمزها و توکنها را هرگز در فایلهایی که در Git ثبت میشوند قرار ندهید.
مدیریت بسته با apt و آینههای داخلی
در Ubuntu و Debian نرمافزارها با apt نصب میشوند:
sudo apt update # refresh package lists
sudo apt install htop tree
sudo apt upgrade # install available updates
دقت کنید apt update فقط فهرست بستهها را تازه میکند و چیزی نصب نمیکند؛ نصب بهروزرسانیها کار apt upgrade است. برای پیدا کردن نام دقیق یک بسته از apt search و برای دیدن نسخه و توضیحات آن از apt show استفاده کنید.
نکته برای کاربران ایران: Launchpad، فهرست رسمی آینههای Ubuntu، بخشی برای ایران دارد که چند آینهی داخلی با اتصال HTTPS در آن ثبت شدهاند. در Ubuntu 24.04 و نسخههای بعدی، نشانی مخزن در فایل
/etc/apt/sources.list.d/ubuntu.sourcesو در فیلدURIs:قرار دارد. پیش از ویرایش از فایل نسخهی پشتیبان بگیرید (sudo cpبه نام دیگر)، فقط نشانی مخزن اصلی را با یکی از آینههای همان فهرست رسمی عوض کنید و بعدsudo apt updateرا بزنید. امضای بستهها همچنان با کلید رسمی Ubuntu بررسی میشود.
یک اسکریپت Bash کوچک و امن
وقتی چند دستور را مرتب تکرار میکنید، وقت نوشتن اسکریپت است. این اسکریپت از یک پوشهی لاگ، آرشیو فشرده با تاریخ و ساعت میسازد:
#!/usr/bin/env bash
set -euo pipefail
SOURCE_DIR="${1:?usage: backup-logs.sh <log-directory>}"
STAMP="$(date +%Y%m%d-%H%M%S)"
ARCHIVE="logs-${STAMP}.tar.gz"
tar -czf "$ARCHIVE" -C "$SOURCE_DIR" .
echo "Created $ARCHIVE ($(du -h "$ARCHIVE" | cut -f1))"
آن را در فایل backup-logs.sh ذخیره کنید، با chmod +x backup-logs.sh اجراییاش کنید و با ./backup-logs.sh /var/log/myapp اجرا کنید. خط set -euo pipefail سه محافظ مهم را روشن میکند: اسکریپت با اولین خطا متوقف میشود، استفاده از متغیر تعریفنشده خطا حساب میشود و شکست هر بخش از پایپ نادیده گرفته نمیشود. عبارت ${1:?...} هم اگر آرگومان داده نشود، پیام راهنما را چاپ میکند و اسکریپت را متوقف میکند. متغیرها را همیشه داخل گیومهی دوتایی بنویسید تا مسیرهای دارای فاصله درست کار کنند.
عیبیابی سرور در پنج قدم
فرض کنید پیام آمده که API روی سرور پاسخ نمیدهد. ترتیب منطقی بررسی با همین دستورات لینوکس این است:
- سرویس زنده است؟ با
systemctl status myappوضعیت و چند خط آخر لاگ را ببینید. - چه خطایی ثبت شده؟ با
journalctl -u myapp -n 100صد خط آخر را بخوانید؛ اگر اپلیکیشن در فایل لاگ مینویسد،tail -n 100روی همان فایل. - پورت باز است؟ با
ss -tulpnمطمئن شوید برنامه روی پورت درست گوش میدهد. - منابع تمام نشده؟
df -hبرای دیسک پر وtopبرای مصرف بالای CPU یا حافظه. - از بیرون چه دیده میشود؟ با
curl -Iروی نشانی سرویس، پاسخ HTTP را مستقیم ببینید.
بیشتر مشکلات رایج، از دیسک پرشده تا پورت اشغال و خطای تنظیمات، در همین پنج قدم پیدا میشوند. عادت کنید پیش از هر تغییری اول ببینید و بعد دست ببرید.
جدول مرجع سریع دستورات لینوکس
| کار | دستور |
|---|---|
| مسیر فعلی | pwd |
| فهرست فایلها با جزئیات | ls -lah |
| جستوجوی متن در پروژه | grep -rn "text" . |
| پیدا کردن فایل | find . -name "*.py" |
| دنبال کردن لاگ | tail -f app.log |
| اجرایی کردن اسکریپت | chmod +x script.sh |
| فرایندهای در حال اجرا | ps aux |
| پورتهای باز | ss -tulpn |
| فضای دیسک | df -h |
| وضعیت سرویس | systemctl status nginx |
قدم بعدی
با همین دستورها میتوانید سراغ ابزارهای بزرگتر بروید. اگر سرور شخصی دارید، راهنمای راهاندازی و امنسازی سرور Ubuntu قدم منطقی بعدی است. آموزش Git و GitHub از صفر تقریباً همهاش در ترمینال میگذرد و آموزش Docker برای توسعهدهندگان نشان میدهد این مهارتها داخل کانتینر چطور به کار میآیند. اگر تازه برنامهنویسی را شروع کردهاید، اسکریپتهای کوچک آموزش پایتون از صفر را هم از همین ترمینال اجرا کنید تا هر دو مهارت همزمان قوی شوند.




دیدگاهها
دیدگاهها پس از بررسی تحریریه منتشر میشوند. توهین، تبلیغ و لینکهای بیربط حذف میشوند؛ نقد فنی و مستند همیشه خوشآمد است.
هنوز کسی چیزی ننوشته. اولین دیدگاه را شما ثبت کنید.