تجربیات کامند لاینی – شماره یک – بکآپ گیری از gitea

اگر نمیدونید Unix time چیه این رو بخونید: لینک

امروز توی کارم موقع Backup گیری از gitea نیازمند این بودم که تاریخ دو تا فایل رو با هم به صورت چشمی مقایسه کنم و ببینم دقیقا ساعت و روزش کی بوده.اسم فایل های بک آپ از gitea این شکلیه:

gitea-dump-1482906742.zip

یک کامند خیلی خوب به اسم date تو لینوکس داریم که کلا برای کار با تاریخ ها و format کردنش و این چیزاست. (date از ابزار های gnu هستش)

حالا برای این که بفهمم دقیقا هر فایل ماله چه تاریخیه و بتونم خیلی مرتب ببینمشون تو ترمینالم، این کار رو کردم:

این فایل چه کار میکنه؟

  • اولین خط رو اصطلاحا بهش میگن shebang. اینجاها دربارش بیشتر بخونین: لینک ۱لینک ۲
  • خط ۷،‌ یک env برای اون process ایجاد میکنه که توش گفته timezone رو بزار تهران، چون بعدا تو نمایش نیاز داریم تاریخ به وقت محلی ایران باشه.
  • خطوط ۹ تا ۱۱ هم یک رشته از کاربر میگیره که در اصل باید آدرس نگهداری فایل های backup از gitea باشه.
  • خطوط ۱۴ تا انتها هم چند مرحله کار انجام میده:
    • اول یک for میزنه روی تمام فایل هایی که پترن اسمشون “gitea*.zip” باشه. یعنی اولش gitea داره بعدش هر چیزی میتونه باشه و آخرش هم با .zip تموم میشه.
    • بعد تمام اون فایل ها رو داخل حلقه داریمشون با اسم متغیری به نام file
    • اول میگیم اسم همون فایل رو نمایش بده. echo -n $file ” => “ این یعنی بدون شکستن خط، اسم فایل و بعدش یک فلش رو نمایش بده. همین!
  • وقتی بین کامندهای لینوکسی یک خط صاف میزاریم، اصطلاحا داریم بین دستورات، داده ها رو pipe میکنیم. خودمونی ترش یعنی داریم دست به دست میکنیمشون بین برنامه های مختلف. اینجا بیشتر دربارش بخونین.
  • تو خط ۱۶ گفتیم اسم فایل رو، بین چند تا برنامه pipe کنه. اولین مرحله اسم فایل رو میده به کامند grep. یعنی این کار رو میکنه: grep -o -E ‘[0-9]+’ . این معنیش اینه که میخوایم از تو اسم اون فایله فقط بخش اعدادشو بکشیم بیرون. دو تا option هم داره.option اول یعنی -E کارش اینه که بگه از سازوکار regex استفاده کنه برای تطبیق دادن و option بعدی یعنی o فقط داده هایی که match میشن رو نمایش میده و بقیه رو بیخیال میشه. یعنی بعد از اجرای این مراحل باید فقط بخش عددی اسم فایل رو داشته باشیم. که خب باز این هم پاس داده میشه به مرحله بعدی برای پردازش های دیگه.
  • sed کامندیه که کارش پردازش متنه. من باهاش به اول همه اعدادی که از مرحله قبل بیرون اومدن، یک @ اضافه کردم. و باز بقیه کار رو پاس میدیم به کامند date. چرا این کار رو باید بکنیم؟ چون کامند بعدی یعنی date مدلش این شکلیه: date -d “@1482906942” . یعنی unixtime رو میگیره و تبدیل میکنه به تاریخ معمولی
  • کامند date هم کارش اینه که اون عدده رو میگیره (که یک unix time عه) و تبدیلش میکنه به یک رشته تاریخ قابل خوندن توسط انسان که مدل کارش رو پاراگراف بالاتر گفتم.

البته راه های ساده تری هم هستند مثلا:

cd /tmp && ls -l gitea*

ولی خب گاهی حل کردن مسائل به شیوه های دیگه میتونه باعث بشه دوباره بعضی مسائل تو ذهنمون مرور بشه.


به زودی سعی میکنم مطالب بیشتری درباره regex و پردازش متن توسط دستورات لینوکس قرار بدم. چون به شدت مهم و کاربردی هستند.

بازدیدها: 16

۲ دیدگاه

  1. جالب بود.
    اگه بتونی همین طور با مثال های عملی و ساده، لینوکس خط فرمانشو توضیح بدی. من یکی کلی مدیونت میشم.(بقیه هم که یاد بگیرن همینطور)

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *