Linux Experts
223 subscribers
11 photos
2 videos
20 links
A place where commits tell stories 📖, and bugs are features

Ctrl + Alt + Explore 🚀


Contact: @su_root_sh
Group: @Linux_ex
Download Telegram
📚 Orphan Reaping

در سیستم‌عامل‌های مبتنی بر یونیکس و لینوکس، orphan reaping (جمع‌آوری فرایند ‌های یتیم) به فرآیند خودکار مدیریت و پاک‌سازی پروسه‌های یتیم (orphan processes) توسط سیستم init (PID 1) اشاره دارد. پروسه یتیم زمانی ایجاد می‌شود که پروسه والد (parent process) قبل از پروسه فرزند (child process) خاتمه یابد یا کرش کند؛ در این حالت، کرنل لینوکس PPID (Parent Process ID) پروسه فرزند را به ۱ تغییر می‌دهد و init را به عنوان والد جدید آن معرفی می‌کند. این مکانیسم، بخشی از مدیریت پروسه‌ها (process management) در فضای کاربر است و تضمین می‌کند که پروسه‌های یتیم بدون نظارت رها نشوند، که می‌تواند منجر به نشت منابع (resource leaks) یا ناپایداری سیستم شود.

🔖 مکانیسم ایجاد و مدیریت Orphan Processes
پروسه‌های یتیم از طریق سیستم‌کال fork() ایجاد می‌شوند، جایی که والد پروسه جدیدی می‌سازد اما قبل از اتمام کار فرزند، خود را با exit() خاتمه می‌دهد. کرنل لینوکس بلافاصله PPID را به init تنظیم می‌کند تا از orphan شدن جلوگیری شود این یک ویژگی POSIX-compliant است. init system (مانند SysVinit یا systemd) مسئولیت reaping را بر عهده دارد، که شامل:
⦁ پذیرش (Adoption): init به عنوان والد جدید عمل می‌کند و پروسه یتیم را نظارت می‌کند.
⦁ جمع‌آوری (Reaping): هنگامی که پروسه یتیم خاتمه می‌یابد، init وضعیت خروج آن (exit status) را با استفاده از سیگنال SIGCHLD (Child Signal) دریافت می‌کند. سپس، init پروسه را "reap" می‌کند، یعنی ورودی آن را از جدول پروسه‌ها (process table) حذف می‌کند، منابع حافظه (memory)، فایل‌های باز (file descriptors) و ورودی‌های دیگر را آزاد می‌سازد، و از انباشت پروسه‌های مرده (dead processes) جلوگیری می‌کند. این فرآیند با توابع wait() یا waitpid() در سطح والد شبیه‌سازی می‌شود، اما init آن را به صورت خودکار انجام می‌دهد.

در systemd فرایند reaping پیشرفته‌تر است و از cgroups (control groups) برای نظارت بر منابع استفاده می‌کند، در حالی که در SysVinit، init به طور مداوم SIGCHLD را هندل می‌کند تا orphans را مدیریت کند. بدون reaping، orphans می‌توانند به zombie processes (پروسه‌های زامبی) تبدیل شوند، که ورودی در process table اشغال می‌کنند بدون مصرف منابع، اما در مقیاس بزرگ باعث PID exhaustion میشود

🔖 تفاوت با Zombie Reaping
توجه: orphan reaping را با zombie reaping (جمع‌آوری پروسه‌های زامبی) اشتباه نگیرید: zombie زمانی است که فرزند قبل از والد خاتمه می‌یابد، اما والد وضعیت آن را نخوانده و پروسه در حالت "زامبی" (terminated but entry retained) می‌ماند. والد با wait() در حقیقت zombie را reap میکند.
اگر والد خاتمه یابد، init zombie را به عنوان orphan مدیریت و reap می‌کند. هر دو reaping برای حفظ پایداری سیستم (system stability) و جلوگیری از resource leaks ضروری‌اند، اما orphans در حال اجرا هستند، در حالی که zombies مرده‌اند.

🔖 شناسایی و جلوگیری از Orphan Processes
برای شناسایی orphans، از دستور
ps -eo pid,ppid,cmd | grep '^[ ]*[0-9]*[ ]*1' 

استفاده کنید

خروجی پروسه‌هایی با PPID=1 (غیر از init خود) را نشان می‌دهد. در سطح برنامه‌نویسی، برای جلوگیری از orphans، والد باید از wait() یا handler برای SIGCHLD استفاده کند تا فرزندان را قبل از خروج خود خاتمه دهد. در محیط‌های کانتینری (مانند Docker)، init-like پروسه‌ها (مانند tini) برای reaping orphans استفاده می‌شوند تا PID 1 را شبیه‌سازی کنند.

در نهایت، orphan reaping یک مکانیسم resilient در لینوکس است که تضمین می‌کند سیستم از پروسه‌های بی‌سرپرست آسیب نبیند و منابع بهینه مدیریت شوند، به ویژه در محیط‌های سرور و ابری با پروسه‌های متعدد.


🔘 @linux_exp | #linux #orphan_reaping #init
🔥421👍1
⚡️aria2 ابزار سبک ولی قدرتمند برای دانلود

‏aria2 یه ابزار خط فرمانه که برای دانلود از پروتکل‌های مختلف مثل HTTP ،FTP ،BitTorrent و Metalink طراحی شده.
مزیتش اینه که می‌تونه فایل رو به چند بخش تقسیم کنه و هر بخش رو هم‌زمان از چند اتصال مختلف بگیره؛ همین باعث می‌شه دانلودها سریع‌تر و پایدارتر انجام بشن.

یک نمونۀ ساده:
aria2c https://example.com/file.iso


اگه بخواید از تمام ظرفیت اینترنت استفاده کنید، می‌تونید تعداد اتصال‌ها و بخش‌ها رو زیاد کنید و در عین حال تلاش نامحدود برای ادامۀ دانلود در صورت قطع ارتباط فعال کنید:
aria2c \
--max-connection-per-server=16 \
--split=16 \
--max-tries=0 \
https://example.com/file.iso

🔹‏ ‎--max-connection-per-server تعداد اتصال‌های هم‌زمان به سرور
🔹‏ ‎--split تعداد بخش‌هایی که فایل به اون تقسیم می‌شه
🔹‏ ‎--max-tries=0 یعنی در صورت خطا تا بی‌نهایت بار تلاش مجدد انجام بشه

برای وقتی که چند تا لینک دارید، کافیه همه رو خط به خط تو فایلی مثل links.txt بنویسید و اجرا کنید:
aria2c --input-file=links.txt


‏aria2 پشت صحنۀ خیلی از ابزارهای دانلودمثل uGet،‏ Motrix،‏ Persepolis (در نسخه‌های قدیمی)، و حتی بعضی مدیرهای دانلود گرافیکی سبک برای سرور یا NAS استفاده شده.
تو دنیای لینوکس هم معمولاً داخل اسکریپت‌های خودکار یا نصب بسته‌ها ازش استفاده می‌شه چون دقیق، قابل‌اسکریپت‌نویسی و کم‌مصرفه.

وقتی با aria2 دانلود می‌کنید، کنار هر فایل در حال دانلود یه فایل موقت با پسوند .aria2 ساخته می‌شه. این فایل شامل اطلاعات پیشرفت دانلود، بخش‌های دریافت‌شده و وضعیت اتصالاته.

اگه دانلود به هر دلیلی قطع بشه (مثلاً اینترنت قطع شه یا سیستم ریستارت شه)، تا زمانی که فایل .aria2 حذف نشده باشه، می‌تونید همون دستور قبلی رو دوباره اجرا کنید تا دانلود از همون‌جا ادامه پیدا کنه.

🔘 @linux_exp | #linux #commandline #tools
🔥731👏1
🔹 آشنایی با jq — چاقوی سوئیسی برای JSON!

اگه زیاد با فایل‌ها یا خروجی‌های JSON سر و کار دارین، احتمالاً می‌دونین خوندن و فیلتر کردنش با ابزارهای معمول مثل grep یا awk زیاد جالب از آب در نمیاد!

اینجاست که jq به دردتون می‌خوره. ‏jq یه ابزار خط فرمانه که می‌تونه داده‌های JSON رو بخونه، فیلتر کنه، تغییر بده یا حتی قالبشونو عوض کنه.

مثلاً با یه دستور ساده می‌تونین فقط یه فیلد خاص رو از یه فایل JSON بزرگ بیرون بکشین:
cat data.json | jq '.users[].name'


یا حتی صرفاً فقط داده‌ها رو مرتب و رنگی چاپ کنین تا راحت‌تر خونده بشن:
cat data.json | jq


برای کسایی که با APIها، داده‌های ساختاریافته یا اسکریپت‌های خودکار کار می‌کنن، jq یه ابزار واقعاً نجات‌دهنده‌ست.

در ضمن اگه می‌خواستین سریع‌تر عمل کنین می‌تونین جاش jaq بزنین


🔘 @linux_exp | #linux #commandline #tools
👍4🔥4🥰1😁1🍌1
🔥3
📂 مفهوم File Descriptor

در لینوکس، File Descriptor یا به اختصار FD یک عدد صحیحه که سیستم‌عامل برای دسترسی به هر فایل، سوکت، یا حتی ورودی/خروجی (مثل کیبورد و ترمینال) استفاده می‌کنه.
وقتی یک پروسه فایلی رو باز می‌کنه، کرنل یک عدد بهش اختصاص میده که همون File Descriptor هست (توی عکس بالا خیلی خوب به تصویر کشیده شده میتونید مراحل رو دنبال کنید)

دستور lsof (کوتاه شده List Open Files) نشون می‌ده چه فایل‌هایی توسط چه پروسه‌هایی باز هستن.

به طور استاندار هر پروسه، سه fd مهم داره:

0 → stdin (ورودی)
1 → stdout (خروجی)
2 → stderr (خطا)

گاها ازشون استفاده کردیم ولی شاید دقت نکردیم دقیقا دارن چی کار می‌کنن. مثلا وقتی خروجی و ارور یه دستور رو می‌فرستیم توی یک فایل:

ls /etc > out.txt 2>&1


دستور بالا متشکل از 2 ریدایرکت هست:

🔹 بخش اول: (ls /etc > out.txt)
خروجی یا FD 1 متعلق به پروسه (دستور ls) ریخته میشه توی فایل out.txt

🔸 بخش دوم: (‎2>&1)
اگر اروری پیش بیاد، اون رو هم میفرسته همونجایی که خروجی (دسکریپتور 1) فرستاده شده.

توی تصویر بالا یک تکه کد پایتون هم هست که بصورت مصور و کامیک‌طور محاوره بین پروسه و کرنل رو نشون داده.

به طور کلی File Descriptor یه عدد ساده هست، اما در واقع پل ارتباطی بین برنامه و کرنل برای کار با فایل‌ها و منابع I/O محسوب می‌شه.


🔘 @linux_exp | #linux #fd #file_descriptor
👍5🔥4🆒31
از کدوم استفاده می‌کنید؟
Anonymous Poll
67%
Desktop Environment
33%
Window Manager
اطلاعیۀ تیم آرچ برای کاربران waydroid

تو نگارش‌های پیش از v1.5.4-2 بستۀ waydroid آرچ لینوکس، فایل‌های کش .pyc موقع اجرا ساخته می‌شدن که توسط پکمن شناسایی نمی‌شدن. این مشکل تو نگارش v1.5.4-3 برطرف شده و این فایل‌ها در حین فرایند بسته‌بندی ساخته میشن.

در نتیجه موقع ارتقا ممکنه بسته با فایل‌های ساخته‌شدۀ بدون مالک نگارش‌های پیشین تداخل داشته باشه. اگه موقع به‌روزرسانی به خطاهایی شبیه به این برخوردین:
error: failed to commit transaction (conflicting files)
waydroid: /usr/lib/waydroid/tools/__pycache__/__init__.cpython-313.pyc exists in filesystem
waydroid: /usr/lib/waydroid/tools/actions/__pycache__/__init__.cpython-313.pyc exists in filesystem
waydroid: /usr/lib/waydroid/tools/actions/__pycache__/app_manager.cpython-313.pyc exists in filesystem

می‌تونین با دستور زیر این فایل‌هارو به‌طور امن بازنویسی کنین:
pacman -Syu --overwrite /usr/lib/waydroid/tools/\*__pycache__/\*


#linux #archlinux #packaging #news
🔘 @linux_exp ~> Source
6👍3🤷‍♂2
Linux Experts
اطلاعیۀ تیم آرچ برای کاربران waydroid تو نگارش‌های پیش از v1.5.4-2 بستۀ waydroid آرچ لینوکس، فایل‌های کش .pyc موقع اجرا ساخته می‌شدن که توسط پکمن شناسایی نمی‌شدن. این مشکل تو نگارش v1.5.4-3 برطرف شده و این فایل‌ها در حین فرایند بسته‌بندی ساخته میشن. در…
💢 معرفی Waydroid

‏Waydroid یه پروژۀ متن‌باز و آزاده که به شما اجازه می‌ده سیستم‌عامل اندروید رو مستقیم داخل لینوکس اجرا کنید، بدون این‌که نیازی به شبیه‌سازی کامل سخت‌افزار (مثل Android Studio Emulator یا VirtualBox) داشته باشید.

در واقع Waydroid از فناوری LXC (Linux Containers) استفاده می‌کنه تا یه محیط اندروید واقعی رو داخل یه کانتینر سبک اجرا کنه. چون این کانتینر از هستۀ لینوکس میزبان شما استفاده می‌کنه (نه یه کرنل جداگانه)، کارایی خیلی بالاتری نسبت به شبیه‌سازها داره. تا حدی که اپ‌های اندرویدی تقریبا با سرعت بومی اجرا می‌شن و از GPU واقعی سیستم برای شتاب گرافیکی استفاده می‌کنن.

با Waydroid می‌تونید اپ‌های اندروید رو کنار اپ‌های لینوکسی باز کنید، بینشون جابه‌جا بشید یا اونا رو توی دسکتاپ خودتون پین کنید، از امکاناتی مثل صدا، شبکه و تاچ استفاده کنید.

اما Waydroid محدودیتی هم داره که به ویلند(Wayland) وابسته‌ست. چون ویلند دسترسی مستقیم‌تر و مدرن‌تری به رندرینگ و compositor سیستم می‌ده و بهتر می‌تونه گرافیک‌های OpenGL و Vulkan رو بین میزبان و اندروید به اشتراک بذاره.
در مقابل، X11 ساختار قدیمی‌تری داره و برای این نوع یکپارچگی گرافیکی و شتاب GPU مناسب نیست. به همین خاطر، Waydroid در حال حاضر فقط روی محیط‌هایی که ویلند دارن (مثل گنوم یا پلاسما) به‌درستی کار می‌کنه.

‏TL;DR
‏Waydroid یه راه سریع و یکپارچه برای اجرای اندروید روی لینوکسه که از کانتینر استفاده می‌کنه، نه شبیه‌سازی؛ و چون برای رندر گرافیک به ویلند وابسته‌ست، فقط روی سیستم‌هایی که ویلند دارن اجرا می‌شه.


🔘 @linux_exp | #linux #waydroid #wayland #android
👍5🔥32🆒1
💢 توی ساب‌ردیت r/scams یک نفر پست گذاشته که چطور بعد از اجرای یه فایل مخرب، اطلاعتش از Password Manager مرورگر (کروم) دزدیده شده؛ چون کروم پسوردها رو به صورت plain text ذخیره میکنه!

داستان به این شکل بوده که مهاجم با ادعای بازی‌ساز بودن پیام میده به قربانی و ازش میخواد که بازیش رو تست کنه. قربانی فایل بازی رو میده به آنتی‌ویروس و اونم میگه مشکلی نیست؛ فایل رو اجرا می‌کنه و ازش خواسته میشه به خاطر اینکه انجین بازی درست کار کنه اون رو به صورت administrator ران کنه o_0

فرد این کار رو انجام میده و اولین اتفاقی که میوفته:

یک پنجره cmd باز میشه و مینویسه که برای مسیر زیر در آنتی‌ویروس یک exception ساخته شد:

..AppData\Google\Chrome\Cookies

اینجا آنتی‌ویروس دیگه مزاحم برنامه نمیشه و در نتیجه به داده‌های داخلی کروم (مثل کوکی و پسوردها) دسترسی پیدا میکنه.

بعدش مهاجم توی دیسکورد شروع به اخاذی می‌کنه و برای اثبات، از فایل پسوردها اسکرین‌شات می‌فرسته — که همشون plain text بودن! جزییات بیشتر رو میتونید توی خود پست بخونید.

💠 نتیجه‌گیری

هدف بیشتر آگاهی از وضعیت کروم و مرورگر ها بود که اکثرا پسورد رو لوکال و بدون رمزنگاری نگه می‌دارن. اگه برنامه‌ای بتونه به اون مسیرها دسترسی پیدا کنه (مثل اتفاق بالا)، عملا کل زندگیتون روی اینترنت در اختیار مهاجم قرار میگیره.

راههای مختلفی واسه حل این مشکل هست (مثل استفاده از پسورد منیجری که انکریپتد هست یا به کل استفاده نکردن ازشون) اما بخش مهم تر این هست که از تهدید احتمالی مطلع باشید.


🔘 @linux_exp | #vulnerability #chrome #fyi
👍53🔥3🆒1
♨️ Debian Libre Live؛ دبیان تا حد ممکن آزاد 

پروژه Debian Libre Live که به‌تازگی معرفی شده، با هدف ارائه ایمیج لایو و نصاب دبیان که تا حد ممکن از هرگونه مؤلفه غیرآزاد (به‌ویژه firmware) خالی باشه طراحی شده. این پروژه برای معماری amd64 و arm64 هست و بر پایه همون نسخه اصلیه با تفاوت اینکه اجزای non‑free از اون حذف شده تا کاربرانی که به آزادی نرم‌افزار و شفافیت حساس هستند بتونن نسخه‌ای نزدیک به دبیان رسمی رو بدون اتکا به نرم‌افزارهای close source، اجرا و نصب کنن. 

این پروژه نقطه مقابل رای‌گیری سال ۲۰۲۲ دبیان هست برای قرار دادن firmwareهای غیرآزاد در ایمیج‌های رسمی.

ایمیجی مشابه Debian Live معمولی، اما بدون مؤلفه های غیرآزاد.


🔸 از اینجا میتونید ایمیج تازه پخته شده رو بگیرید.


🔘 @linux_exp | #debian #libre #fyi
🔥7
😂😂

🔗 source
🔘 @linux_exp | #fun #arch
😁9🌚1🙈1