دستورهای ضروری لینوکس که هر برنامهنویسی باید بداند
با اطمینان در سیستم لینوکس جابهجا شوید، جستوجو کنید، بررسی کنید و آن را مدیریت کنید. گشتی کاربردی در دستورهایی که برنامهنویسان هر روز از آنها استفاده میکنند.
در این صفحه
چه روی یک سرور ابری دیپلوی کنید، چه داخل Docker کار کنید و چه فقط از ترمینالِ مکتان استفاده کنید، دیر یا زود دستورهای لینوکس را تایپ خواهید کرد. خبر خوب این است که چند ده دستور بیشترِ کارهای روزانه را پوشش میدهند.
هر بخش در ادامه دستورها، گزینههایی که واقعاً به کار میبرید و مثالهایی از دنیای واقعی را نشان میدهد.
جابهجایی در سیستم فایل#
pwd # where am I?
ls -lah # list everything: long format, hidden files, human-readable sizes
cd /var/log # go to an absolute path
cd .. # up one level
cd - # jump back to the previous directory
cd # go home (same as cd ~)تکمیل خودکار با Tab ساعتها صرفهجویی میکند
چند حرف اول نام یک فایل یا پوشه را تایپ کنید و Tab را بزنید. شل آن را برایتان کامل میکند یا اگر بیش از یک گزینه وجود داشته باشد، گزینهها را نشان میدهد.
ساختن، کپی، جابهجایی و حذف#
mkdir -p projects/blog/src # create nested directories in one go
touch notes.txt # create an empty file (or update its timestamp)
cp config.yml config.yml.bak # copy a file
cp -r src/ backup/ # copy a directory recursively
mv draft.md posts/final.md # move and/or rename
rm old.log # delete a file
rm -r build/ # delete a directory and everything in itسطل بازیافتی در کار نیست
rm فوراً و برای همیشه حذف میکند. پیش از اجرای rm -r مسیرها را دوباره بررسی کنید، مخصوصاً با wildcardها یا sudo. افزودن -i باعث میشود rm پیش از هر حذف از شما بپرسد.
خواندن فایلها#
cat package.json # print a whole (short) file
less /var/log/syslog # scroll through a long file (q to quit, / to search)
head -n 20 app.log # first 20 lines
tail -n 50 app.log # last 50 lines
tail -f app.log # follow new lines as they're written, great for live logsجستوجو داخل فایلها با grep#
grep خطهایی را پیدا میکند که با یک الگو مطابقت دارند. یکی از مفیدترین ابزارهایی است که یاد خواهید گرفت:
grep "ERROR" app.log # lines containing ERROR
grep -i "timeout" app.log # case-insensitive
grep -rn "TODO" src/ # search recursively, show line numbers
grep -v "DEBUG" app.log # lines that do NOT match
grep -c "404" access.log # count matching linesپیدا کردن فایلها با find#
find . -name "*.py" # all Python files below the current directory
find /var/log -name "*.log" -mtime -1 # .log files modified in the last 24 hours
find . -type f -size +100M # files bigger than 100 MB
find . -type d -name node_modules # directories named node_modulesپایپ و تغییر مسیر: ترکیب دستورها#
قدرت واقعی خط فرمان از زنجیر کردن ابزارهای کوچک به هم میآید. پایپ | خروجیِ یک دستور را به ورودیِ دستور بعدی میفرستد:
# Top 5 IP addresses hitting your web server
cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head -5آن را از چپ به راست بخوانید: فیلد اول (آدرس IP) هر خط را بردار، آدرسها را مرتب کن، تکراریها را بشمار، بر اساس تعداد از بیشترین مرتب کن و پنج مورد اول را نشان بده.
تغییر مسیر (redirection) خروجی را به فایلها میفرستد:
ls -la > files.txt # write output to a file (overwrites it)
echo "done" >> build.log # append to a file
npm test > test.log 2>&1 # capture both normal output and errors
wc -l < data.csv # use a file as input: counts its linesمجوزها با chmod و chown#
ls -l را اجرا کنید تا خطهایی شبیه این ببینید:
-rwxr-xr-- 1 deploy www-data 2048 Oct 12 09:30 deploy.shرشتهٔ مجوزها به سه گروه سهتایی تقسیم میشود: مالک (rwx)، گروه (r-x) و بقیه (r--). اینجا r یعنی خواندن، w یعنی نوشتن و x یعنی اجرا.
chmod +x deploy.sh # make a script executable
chmod 644 index.html # owner: read/write, everyone else: read-only
chmod 755 scripts/ # owner: full access, everyone else: read and enter
sudo chown -R www-data:www-data /var/www/site # change owner and group recursivelyحالتهای عددی با هم جمع میشوند: خواندن = ۴، نوشتن = ۲ و اجرا = ۱. پس 7 یعنی ۴+۲+۱ (rwx)، 5 یعنی ۴+۱ (r-x) و 4 یعنی فقط خواندن.
فرایندها: چه چیزی در حال اجراست؟#
ps aux | grep node # find running node processes
top # live view of CPU and memory use (q to quit)
kill 12345 # politely ask process 12345 to stop
kill -9 12345 # force it to stop (last resort)بسیاری از سیستمها htop را هم دارند؛ جایگزینی خوشدستتر و رنگی برای top.
دیسک و حافظه#
df -h # free disk space per filesystem
du -sh * # size of each item in the current directory
du -sh * | sort -h # ...sorted from smallest to largest
free -h # memory usageمبانی شبکه#
curl https://example.com # fetch a page
curl -I https://example.com # headers only: check status codes and caching
curl -X POST -H "Content-Type: application/json" \
-d '{"name": "Ada"}' https://httpbin.org/post
sudo ss -tlnp # which programs are listening on which ports
ping -c 4 example.com # is the host reachable?کار روی سرورهای راه دور#
ssh user@203.0.113.10 # log in to a server
scp report.pdf user@203.0.113.10:~/ # copy a file to it
rsync -avz ./site/ user@203.0.113.10:/var/www/site/ # sync a whole directory efficientlyگرفتن راهنما#
لازم نیست همهٔ گزینهها را حفظ کنید، چون سیستم خودش را مستند کرده است:
man grep # the full manual (q to quit)
grep --help # a quick summary of options
history | grep docker # find that command you ran last weekو بهترین میانبُر: Ctrl+R را بزنید و شروع به تایپ کنید تا تاریخچهٔ دستورهایتان را بهصورت تعاملی جستوجو کنید.
جمعبندی#
| کار | دستورها |
|---|---|
| جابهجایی | pwd، ls، cd |
| مدیریت فایل | mkdir، touch، cp، mv، rm |
| خواندن فایل | cat، less، head، tail -f |
| جستوجو | grep، find |
| ترکیب | پایپ، >، >>، 2>&1 |
| مجوزها | chmod، chown |
| سیستم | ps، top، kill، df، du، free |
| شبکه | curl، ss، ssh، rsync |
یک ترمینال باز کنید و همانطور که میخوانید هر دستور را امتحان کنید. هدف اصلی، حافظهٔ عضلانی است و ظرف یک هفته تعجب خواهید کرد که چطور قبلاً بدون این دستورها کار میکردید.