دستورات مفید پوسته

خب این تاپیک ایجاد شده که داخلش دستورات مفید پوسته رو با توضیحات کوتاه و به همراه مثال معرفی کنیم :‌)

برای شروع من از xargs میگم.

دستور: xargs
برای اجرای یک دستور با آرگومان‌هایی که از ورودی استاندارد یا خروجی دستور دیگر گرفته می‌شوند استفاده می‌شود؛ مخصوصاً زمانی که داده‌ها زیاد یا چندخطی باشند.

cat list.txt | xargs rm
find . -name "*.log" | xargs gzip
echo "file1 file2 file3" | xargs -n1 echo "Processing:"
find /var/log -type f | xargs -I{} cp {} /backup/logs/

دستور xargs کمک می‌کند خروجی‌هایی که به‌صورت خطی یا چندتایی هستند، به صورت منظم به دستورات دیگر پاس داده شوند تا مشکل طول زیاد آرگومان‌ها یا کار با فایل‌های زیاد حل شود.

6 Likes

یکی از دستورات مفیدی که به نظرم خوبه بهش اشاره بشه دستور tee هستش.
دستور tee خروجی یک دستور رو همزمان روی صفحه (stdout) نمایش میده و در یک یا چند فایل هم ذخیره میکنه.
یعنی یه جورایی دوشاخه‌ی خروجیه :slight_smile:

کجا کاربرد داره؟
مثلا وقتی ذخیره هم‌زمان خروجی بدون از دست دادن نمایش در ترمینال نیازه
ls -lh /etc | tee etc_list.txt

خروجی لیست etc/ روی صفحه نشون داده میشه و در فایل etc_list.txt ذخیره میشه.

یا افزودن به فایل (append mode) بخواد اتفاق بیوفته
dmesg | tee -a logs.txt

خروجی دستور dmesg به آخر فایل logs.txt اضافه میشه بدون اینکه اطلاعات قبلی پاک بشن.

یا تو نوشتن هم‌زمان در چند فایل خیلی کمک کننده است
echo "Backup started at $(date)" | tee log1.txt log2.txt

و برای استفاده در pipeline برای ثبت مرحله‌ای خروجی هم کاربرد داره
curl -s https://example.com | tee response.html | grep keyword

خروجی هم ذخیره می‌شه و هم فیلتر میشه

نکته جالبی که داره sudo با tee خیلی خوب جفت میشه

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf

چون sudo فقط روی echo اعمال نمیشه، با tee میتونیم به فایل‌های سیستمی هم بنویسیم بدون نیاز به ادیتور

3 Likes

خب یکی از ابزار هایی که این چند مدت باهاش زیاد کار کردم jq بوده.

این یه ابزار خط فرمانه برای پردازش، فیلتر، فرمت دهی، استخراج و تبدیل JSON

خیلی شبیه sed و awk هست، ولی مخصوص JSON استفاده میشه.

مثلا برای زیباسازی دیتای JSON استفاده میشه

cat data.json | jq

یا واسه استخراج یه فیلد مشخص

jq '.name' data.json

برای استخراج مقدار داخل آرایه

jq '.[0].id' data.json

واسه فیلتر کردن داده ها

مثلاً کاربرانی که active=true هستند

jq '.users[] | select(.active == true)' data.json

برای تبدیل JSON به لیست ساده

jq -r '.users[].name' data.json

حذف کردن یه فیلد

jq 'del(.password)' data.json

یه سناریو مثلا این میتونه باشه بخوای لاگ های JSON تو پایپ لاین رو فیلتر کنی

kubectl logs app | jq '.level, .message'
2 Likes