لینوکس هندبوک شماره 26.16: ترفندهای Bash Arrays، دستور mapfile و ابزارهای خفن

سلام! این شماره از خبرنامه شاید کوتاه باشه، ولی کلی نکتهی باحال و بهموقع توش داریم که به کارِت میاد. حتماً تا انتها همراهمون باش تا ترفندهای خفن Bash و کلی خبر جذاب از دنیای متنباز رو با هم مرور کنیم.
اگر توی OpenCode Console اکانت داری، بهتره اول از همه بری سراغ بخش اخبار. یه نفوذ امنیتی ممکنه باعث لو رفتن API keys مربوط به سرویسهای شخص ثالث شده باشه و عوض کردن سریعشون توی این وضعیت، مثل آب روی آتشه!
بحث یادگیری این هفتهی ما اختصاص داره به Bash arrays و یه روش فوقالعاده راحت برای پر کردن آرایهها مستقیماً از خروجی یک دستور به کمک mapfile.
🧵 یک متغیر و کلی مقدار با Bash Arrays
بیشتر اسکریپتها با متغیرهای ساده شروع میشن. اما یه روزی میرسه که مجبوری یه لیست کامل از فایلها، سرورها یا نامهای کاربری رو نگهداری کنی و اینجاست که آرایهها یا همون arrays به دادت میرسن.
servers=("web01" "web02" "db01")
echo "${servers[0]}" # اولین عنصر
echo "${#servers[@]}" # تعداد کل عناصر
servers+=("cache01") # اضافه کردن یک عنصر جدید به انتهاشمارهگذاری یا همون indexing توی آرایهها از صفر شروع میشه و استفاده از آکولادها کاملاً واجبه. وگرنه دستور echo $servers[0] به جای مقدار مورد نظر، عبارت web01[0] رو چاپ میکنه که اصلاً چیزی نیست که بخوای.
بخش گیجکننده ماجرا معمولاً بحث quoting یا همون استفاده از نقلقولهاست. همیشه حواست باشه که موقع کار با حلقهها از "${servers[@]}" با دو تا دابل کووتیشن استفاده کنی. این کار باعث میشه هر عنصر به عنوان یک کلمهی مستقل در نظر گرفته بشه؛ مثلاً اگر یه فایل به اسم my file.txt داشته باشی، سالم و سرجاش باقی میمونه. کووتیشن رو برداری، Bash اون رو به دو بخش my و file.txt تبدیل میکنه!
حتی میتونی از بخشهای خاصی از آرایه اسلایس بگیری. دستور "${servers[@]:1:2}" دو تا عنصر رو از ایندکس شماره ۱ بهت تحویل میده.
وقتی اعداد به عنوان کلید کار راهپز نیستن، میتونی از associative array استفاده کنی که کلمات رو به مقادیر نگاشت میکنه، دقیقاً مثل یک دیکشنری:
declare -A port=([ssh]=22 [http]=80 [https]=443)
echo "${port[https]}" # خروجی عدد 443 استخب، حالا چطور میشه یه آرایه رو مستقیماً با خروجی یک دستور پر کرد؟ این همون ترفند جذاب این هفتست!
💡 ترفند سریع ترمینال
دستور mapfile بهت اجازه میده خروجی یک دستور رو مستقیماً داخل یک آرایه لود کنی؛ بدون اینکه نیازی به حلقههای پیچیده و زشت while read داشته باشی. به این مثال نگاه کن:
mapfile -t files < <(find . -name "*.log")دستور بالا توی پوشه فعلی (.) و تمام زیرپوشههای اون میگرده تا فایلهایی که پسوند .log دارن رو پیدا کنه و مسیرشون رو به عنوان عناصر یک آرایه در Bash به اسم files ذخیره کنه.
حالا خیلی راحت میتونی به هر کدوم از نتایج به شکل files[0] یا files[1] دسترسی داشته باشی.
echo "${files[0]}"
⌛ آخرین فرصت: تخفیفهای فوقالعاده برای سرورها و امنیت

یه یادآوری سریع از هفته پیش: تخفیفهای مربوط به دورههای امنیتی Linux Foundation در حال به پایان رسیدنه.
اگر سرور، کانتینر یا پایپلاین مدیریت میکنی، باید بلد باشی چطور اونها رو امن کنی. داشتن مدرک معتبر بهترین راه برای ثابت کردن این مهارت به کارفرماست.
مدرک CKS گزینهای عالی برای کسانی است که با Kubernetes کار میکنند. میتونید پکیجهای آموزشی رو با تخفیفهای عالی تهیه کنید و بعد از آمادگی کامل، توی آزمون شرکت کنید.
📦 معرفی ابزار Self-hosted: itsaplan
itsaplan یک پلتفرم مدیریت پروژهی متنباز و قابل میزبانی روی سرور شخصی (Self-hosted) است که بهطور ویژه برای تیمهایی که در کنار ایجنتهای هوش مصنوعی کار میکنند طراحی شده است.
🛠️ ابزار جدید ترمینال: lazyenv
lazyenv یک رابط مبتنی بر ترمینال برای مشاهده، ویرایش و مدیریت فایلهای .env است که کار با متغیرهای محیطی را در توسعه محلی و کانتینرها فوقالعاده ساده میکند.
📰 اخبار مهم لینوکس و دنیای فناوری
- یک نفوذ امنیتی در OpenCode Console ممکن است کلیدهای API شخص ثالث را در معرض خطر قرار داده باشد.
- گوگل پشتیبانی از مدلهای محلی (Local Models) را به Antigravity SDK اضافه کرد.
- کلادفلر پروژه Void را به صورت متنباز منتشر کرد.
- تلاش تحلیلگران هاروارد نشان میدهد که با آسانتر شدن کدنویسی به کمک هوش مصنوعی، تمرکز اصلی روی فرآیندهای بازبینی کد خواهد بود.
- یک خطای گزارشدهی امنیتی باعث افشای آسیبپذیریهای اصلاحنشده Linux Kernel در لیست ایمیل عمومی شد.
- گیتهاب قابلیت بررسی خودکار سازگاری لایسنسهای متنباز را فعال کرد.
- گوگل پروژه TorchTPU را متنباز کرد تا اجرای کارهای سنگین PyTorch روی TPUها راحتتر شود.
- بنیاد PyTorch از اضافه شدن ۹ عضو جدید به خانواده خود خبر داد.
😂 طنز گیکها

💌 کلام پایانی
اگر نظری دربارهی این شماره داری یا میخوای تجربهت رو از کار با لینوکس بگی، حتماً نظراتت رو با ما به اشتراک بذار!




