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

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

برای شروع من از 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

یکی از ابزارهای قدیمی ولی خیلی underrated توی لینوکس apropos هستش

برای پیدا کردن دستورها بر اساس توضیح (description) استفاده میشه، نه اسم دقیقشون.
در واقع توی دیتابیس man pageها سرچ میکنه و هر دستوری که توضیحش شامل اون کلمه باشه رو لیست میکنه…

اگه اسم دستور یادت رفته ولی میدونی چیکار میکرده apropos دقیقاً همون چیزیه که لازم میشه.

جستجوی دستور بر اساس کاربرد

apropos archive

خروجی می‌تونه چیزهایی مثل این باشه

tar (1)     - an archiving utility
zip (1)     - package and compress files

جستجوی دستورهای مرتبط با network

apropos network

فرض کن میخوای بدونی چه دستورهایی برای کار با processها هست ولی اسمشون یادت رفته

apropos process

جستجوی دقیق‌تر با regex

apropos '^git'

محدود کردن خروجی

apropos -s 1 file

(فقط دستورات section 1 از man page)

معادل ساده‌تر

man -k keyword

(apropos در اصل همون man -k هستش)

یه نکته مهم
اگه خروجی خالی بود، احتمالاً دیتابیس man به‌روز نیس

sudo mandb

2 Likes