لینوکسمبتدی

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

با اطمینان در سیستم لینوکس جابه‌جا شوید، جست‌وجو کنید، بررسی کنید و آن را مدیریت کنید. گشتی کاربردی در دستورهایی که برنامه‌نویسان هر روز از آن‌ها استفاده می‌کنند.

پنجرهٔ ترمینالی که دستورهای ls، grep و tail را اجرا می‌کند
در این صفحه

چه روی یک سرور ابری دیپلوی کنید، چه داخل Docker کار کنید و چه فقط از ترمینالِ مک‌تان استفاده کنید، دیر یا زود دستورهای لینوکس را تایپ خواهید کرد. خبر خوب این است که چند ده دستور بیشترِ کارهای روزانه را پوشش می‌دهند.

هر بخش در ادامه دستورها، گزینه‌هایی که واقعاً به کار می‌برید و مثال‌هایی از دنیای واقعی را نشان می‌دهد.

جابه‌جایی در سیستم فایل#

Bash
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 را بزنید. شل آن را برایتان کامل می‌کند یا اگر بیش از یک گزینه وجود داشته باشد، گزینه‌ها را نشان می‌دهد.

ساختن، کپی، جابه‌جایی و حذف#

Bash
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 پیش از هر حذف از شما بپرسد.

خواندن فایل‌ها#

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

Bash
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#

Bash
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

پایپ و تغییر مسیر: ترکیب دستورها#

قدرت واقعی خط فرمان از زنجیر کردن ابزارهای کوچک به هم می‌آید. پایپ | خروجیِ یک دستور را به ورودیِ دستور بعدی می‌فرستد:

Bash
# Top 5 IP addresses hitting your web server
cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head -5

آن را از چپ به راست بخوانید: فیلد اول (آدرس IP) هر خط را بردار، آدرس‌ها را مرتب کن، تکراری‌ها را بشمار، بر اساس تعداد از بیشترین مرتب کن و پنج مورد اول را نشان بده.

access.log⁧خطوط خام لاگ⁩ cut -d' ' -f1⁧آدرس‌های IP⁩ sort⁧IPهای مرتب‌شده⁩ uniq -c⁧تعداد + IP⁩ sort -rn⁧بیشترین در ابتدا⁩ head -5⁧۵ مورد برتر⁩
هر دستور داده را تغییر می‌دهد و از طریق پایپ به دستور بعدی می‌فرستد

تغییر مسیر (redirection) خروجی را به فایل‌ها می‌فرستد:

Bash
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 را اجرا کنید تا خط‌هایی شبیه این ببینید:

Text
-rwxr-xr-- 1 deploy www-data 2048 Oct 12 09:30 deploy.sh

رشتهٔ مجوزها به سه گروه سه‌تایی تقسیم می‌شود: مالک (rwx)، گروه (r-x) و بقیه (r--). این‌جا r یعنی خواندن، w یعنی نوشتن و x یعنی اجرا.

Bash
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 یعنی فقط خواندن.

فرایندها: چه چیزی در حال اجراست؟#

Bash
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.

دیسک و حافظه#

Bash
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

مبانی شبکه#

Bash
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?

کار روی سرورهای راه دور#

Bash
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

گرفتن راهنما#

لازم نیست همهٔ گزینه‌ها را حفظ کنید، چون سیستم خودش را مستند کرده است:

Bash
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

یک ترمینال باز کنید و همان‌طور که می‌خوانید هر دستور را امتحان کنید. هدف اصلی، حافظهٔ عضلانی است و ظرف یک هفته تعجب خواهید کرد که چطور قبلاً بدون این دستورها کار می‌کردید.