۱۴۰۵ مهر ۱۵, چهارشنبه
دلار آمریکا۲۶۲٬۲۰۵▼ ۲٫۵۲٪یورو۲۹۴٬۸۳۰▼ ۲٫۸۴٪درهم امارات۷۱٬۷۷۶▼ ۲٫۲۹٪سکه امامی۲۶۷٬۳۸۵٬۰۰۰▼ ۱٫۶۹٪طلای ۱۸ عیار (گرم)۲۶٬۲۶۷٬۶۰۰▼ ۱٫۷۹٪انس طلا۴٬۱۱۶ $▼ ۱٫۱۴٪تتر۲۶۲٬۶۷۸▼ ۲٫۴۱٪بیت‌کوین۸۳٬۷۰۹ $▼ ۲٫۳٪اتریوم۲٬۵۸۴ $▼ ۴٫۲۶٪سولانا۱۱۷٫۵۵ $▼ ۳٫۰۱٪اپل۳۳۳٫۶۳ $▲ ۰٫۲۲٪انویدیا۲۳۹٫۲۴ $▲ ۰٫۱۴٪مایکروسافت۵۲۹٫۳۰ $▲ ۰٫۷۸٪آلفابت (گوگل)۳۴۷٫۶۸ $▲ ۰٫۳۵٪تسلا۳۸۰٫۶۸ $▲ ۰٫۵۲٪شاخص نزدک۲۷٬۶۰۰ $▲ ۰٫۴۵٪
نرخ ارز

دستورات لینوکس برای برنامه‌نویسان؛ راهنمای عملی ترمینال

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

کاور گرافیکی DevNA با عنوان «Linux CLI»: دستورات ضروری ترمینال برای برنامه‌نویس‌ها
کاور گرافیکی DevNA با عنوان «Linux CLI»: دستورات ضروری ترمینال برای برنامه‌نویس‌ها
فهرست مطالب
  1. چرا برنامه‌نویس باید با ترمینال راحت باشد؟
  2. ساختار دستورها و دیدن راهنما
  3. حرکت در سیستم فایل
  4. ساخت، کپی، جابه‌جایی و حذف فایل
  5. دیدن محتوای فایل‌ها و دنبال کردن لاگ
  6. جست‌وجو با grep و find
  7. پایپ و تغییر مسیر خروجی
  8. مجوزهای فایل: chmod، chown و sudo
  9. فرایندها و سرویس‌ها
  10. شبکه، SSH و انتقال فایل
  11. فضای دیسک و فشرده‌سازی
  12. متغیرهای محیطی و alias
  13. مدیریت بسته با apt و آینه‌های داخلی
  14. یک اسکریپت Bash کوچک و امن
  15. عیب‌یابی سرور در پنج قدم
  16. جدول مرجع سریع دستورات لینوکس
  17. قدم بعدی

کار با دستورات لینوکس (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 روی سرور پاسخ نمی‌دهد. ترتیب منطقی بررسی با همین دستورات لینوکس این است:

  1. سرویس زنده است؟ با systemctl status myapp وضعیت و چند خط آخر لاگ را ببینید.
  2. چه خطایی ثبت شده؟ با journalctl -u myapp -n 100 صد خط آخر را بخوانید؛ اگر اپلیکیشن در فایل لاگ می‌نویسد، tail -n 100 روی همان فایل.
  3. پورت باز است؟ با ss -tulpn مطمئن شوید برنامه روی پورت درست گوش می‌دهد.
  4. منابع تمام نشده؟ df -h برای دیسک پر و top برای مصرف بالای CPU یا حافظه.
  5. از بیرون چه دیده می‌شود؟ با 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 برای توسعه‌دهندگان نشان می‌دهد این مهارت‌ها داخل کانتینر چطور به کار می‌آیند. اگر تازه برنامه‌نویسی را شروع کرده‌اید، اسکریپت‌های کوچک آموزش پایتون از صفر را هم از همین ترمینال اجرا کنید تا هر دو مهارت هم‌زمان قوی شوند.

$ devna rate --article

—
هنوز رأیی ثبت نشده
  1. ۵۰
  2. ۴۰
  3. ۳۰
  4. ۲۰
  5. ۱۰

این مطلب چقدر به کارتان آمد؟

روی ستاره‌ها بزنید

واکنش شما

اولین نفری باشید که واکنش نشان می‌دهد.

پرسش‌های پرتکرار

برای یادگیری دستورات لینوکس حتماً باید لینوکس نصب کنم؟

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

فرق sudo با کاربر root چیست؟

root کاربر مدیر با دسترسی کامل است. sudo فقط همان یک دستور را با دسترسی مدیر اجرا می‌کند و بقیه‌ی کار با کاربر عادی ادامه پیدا می‌کند. این روش امن‌تر است و در لاگ سیستم هم ثبت می‌شود.

چطور راهنمای یک دستور لینوکس را ببینم؟

man و پس از آن نام دستور (مثلاً man grep) راهنمای کامل را باز می‌کند. برای خلاصه‌ی سریع، بیشتر دستورها گزینه‌ی --help هم دارند.

آیا فایل حذف‌شده با rm در لینوکس قابل بازگشت است؟

نه. rm فایل را به سطل زباله نمی‌برد و مستقیم حذف می‌کند و راه بازگشت ساده‌ای وجود ندارد. پیش از rm -r مسیر را با ls بررسی کنید و از داده‌های مهم نسخه‌ی پشتیبان داشته باشید.

منابع

  1. Ubuntu – The Linux command line for beginners
  2. grep(1) – Linux manual page
  3. find(1) – Linux manual page
  4. Ubuntu 24.04 LTS release notes – deb822 sources
  5. Launchpad – Official Ubuntu archive mirrors

خطایی در این مطلب دیدید؟ به تحریریه گزارش دهید؛ اصلاحیه‌ها طبق اصول تحریریه ثبت می‌شوند.

دیدگاه‌ها

۰/۲٬۰۰۰

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

$ comments --count۰

هنوز کسی چیزی ننوشته. اولین دیدگاه را شما ثبت کنید.

مطالب مرتبط