Bash / Pipe ба redirect

Pipe ба redirect

Bash-н хамгийн хүчирхэг онцлогуудын нэг бол командуудыг хоорондоо холбох чадвар юм. Pipe ба redirect ашигласнаар олон командыг нэгтгэж, нарийн төвөгтэй ажлыг товч байдлаар хийж чадна.

Redirect гэж юу вэ?

Та өмнөх хичээлд > ба >> тэмдгийг үзсэн. Эдгээр нь командын гаралтыг (stdout) файл руу чиглүүлдэг.

Бас алдааны гаралт (stderr) гэж байдаг:

bash
# Стандарт гаралтыг файлд хадгалах
ls /home > output.txt

# Алдааны гаралтыг файлд хадгалах (2> гэж бичнэ)
ls /байхгүй-зам 2> errors.txt

# Хоёуланг нэг файлд хадгалах
ls /home /байхгүй-зам > all.txt 2>&1

# Алдааны мэдэгдлийг нуух (устгах)
ls /байхгүй-зам 2> /dev/null

/dev/null бол "хар нүх" — тийш явуулсан бүх зүйл алга болдог. Дэлгэцэнд харуулахыг хүсэхгүй алдааг нуухад ашиглана.

Стандарт оролт (stdin)

< тэмдэг нь командын оролтыг файлаас авдаг:

bash
# sort командын оролтыг файлаас авах
sort < names.txt

# Хоёуланг нэгтгэх: оролтыг файлаас авч, гаралтыг файлд хадгалах
sort < names.txt > sorted-names.txt

Pipe гэж юу вэ?

| тэмдэг нь нэг командын гаралтыг нөгөө командын оролт болгодог. Энэ бол pipe юм.

bash
# ls-н гаралтыг grep-т дамжуулах
ls /etc | grep "conf"

# Гаралтыг хуудас хуудсаар харах
ls -la | less

# Хэдэн файл байгааг тоолох
ls | wc -l

Pipe нь хоолойн ус шиг — нэг командаас гарсан "ус" дараагийн командад ордог.

Pipe-г гинж болгох

Хэдэн pipe-г дараалан холбож болно:

bash
# Файлаас уншиж, эрэмбэлж, давхардлыг хасаж, тоолох
cat names.txt | sort | uniq | wc -l

# Файлын хамгийн олон ашиглагдсан үгийг олох
cat essay.txt | tr ' ' '\n' | sort | uniq -c | sort -rn | head -10

# Процессуудаас зөвхөн "bash" агуулсныг харах
ps aux | grep bash

Жишээ script:

bash
#!/bin/bash

# Лог файлаас алдааны мөрүүдийг гарган, тоолох
echo "=== Алдааны тайлан ==="

error_count=$(grep "ERROR" app.log | wc -l)
echo "Нийт алдаа: $error_count"

echo ""
echo "=== Сүүлийн 5 алдаа ==="
grep "ERROR" app.log | tail -5

tee — гаралтыг хоёр газар илгээх

tee нь гаралтыг дэлгэц болон файлд нэгэн зэрэг бичдэг:

bash
# Дэлгэцэнд харуулж, файлд ч хадгална
ls -la | tee file-list.txt

# Файлд нэмж бичих горим
ls -la | tee -a file-list.txt

Практик жишээнүүд

bash
# Системийн хамгийн их CPU ашигладаг 5 процессыг харах
ps aux | sort -k3 -rn | head -6

# Нэг файлаас давхардсан мөрүүдийг хасаж шинэ файлд хадгалах
sort data.txt | uniq > clean-data.txt

# Интернэтийн хаягуудыг файлаас уншиж, curl-аар татах
cat urls.txt | while read url; do
  curl -s "$url" -o "$(basename $url)"
  echo "Татаж авлаа: $url"
done

Дараагийн хичээлд:

grep командыг дэлгэрэнгүй судална — файл ба гаралтаас хэрэгтэй мөрүүдийг маш хурдан хайх, шүүх хамгийн хэрэгтэй хэрэгсэл.