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
گاهی وقت لازم هست یک برنامه رو به صورت ایزوله و سندباکس اجرا کنیم. یکی از برنامه هایی که این کار رو انجام میده Firejail هست و هر برنامه رو در یک Namespace جداگانه اجرا می‌کنه.

‌‏Namespace توی لینوکس قابلیتیه برای جداسازی منابع سیستم. هر پردازش داخل فضای مشخص خودش اجرا میشه و دید محدودی نسبت به منابع داره؛ طوری که انگار روی یک سیستم مستقل کار میکنه. این قابلیت برای ایزوله کردن یک پردازش از سایر پردازش‌های سیستم مناسبه.

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

whitelist /opt/maple
whitelist /home/linux_exp/.maplesoft/
net none
private
private-tmp
seccomp
caps.drop all


توضیح تنظیمات پروفایل بالا:

🔹 whitelist: دسترسی فقط به مسیرهای مشخص (مثل cache و مسیری که برنامه قرار داره تا بتونه درست کار کنه)
🔹 net none: قطع کامل اینترنت و شبکه
🔹 private / private-tmp: دایرکتوری ها در یک فایل سیستم موقت روی tmp/ ایجاد میشن
🔹 seccomp: محدود کردن syscallهای مهم
🔹 caps.drop all: حذف همه دسترسی‌های ویژه (حتی با sudo هم امکان کارهایی مثل mount/unmount رو نداره)

بعد از ساخت و ذخیره پروفایل، اون رو همراه با برنامه‌ایی که می‌خوایم اجرا کنیم به Firejail می‌دیم:

firejail --profile=~/.config/firejail/maple.profile maple &

توی مخازن اکثر توزیع ها هستش میتونید نصب و استفاده کنید.

🔘 @linux_exp | #Linux #Firejail
🔥7👍2
LFS : Linux from Scratch

اسمی که حتی برای کاربران چندین ساله گنو/لینوکس ترسناکه اما میتونه یک تفریح خیلی اموزنده باشه.

پروژه LFS در واقع پروژه ایه که به شما نشون میده چجوری مرحله به مرحله سیستم عامل لینوکسی خودتون رو از سورس کد بسازید.

این پروژه این امکان رو به شما میده که با جزییات بسیار دقیق و گاها جالب اشنا بشید و اتفاقاتی که دست به دست هم میدن تا یک سیستم عامل رو بوجود بیارن رو درک کنید.

جامعه هدف LFS بیشتر توسعه دهندگان و کاربران حرفه ای هست که میخوان کنجکاوی خودشون رو ارضا کنن و مهارت هاشون رو به چالش بکشن. اما اینجا محدود نمیشه شما اگه دنبال یک سیستم عامل سفارشی از صفر میگردید جزو جامعه هدف LFS هستید

ریلیز اولیه LFS حدود سال ۱۹۹۹ بود که نشون بده چجوری میشه یک توزیع لینوکسی رو از سورس بیلد گرفت و اون رو ساخت. شاید براتون سوال باشه اگه از صفره ریلیز چی ؟! ریلیز کتاب :)

اگه شماهم دنبال به چالش کشیدن مهارت های خودتون هستید یا میخواید امتحان کنید میتونید کتاب LFS رو بصورت رایگان از [ سایت ] خودش دریافت کنید .

git clone https://git.linuxfromscratch.org/lfs.git lfs-git


🔘 @linux_exp | #linux #lfs
42👍1👻1
Media is too big
VIEW IN TELEGRAM
💢 چطوری یک فلش مموری بوتیبل از ایزوی ویندوز توی لینوکس بسازیم ؟


توی این ویدیوضمن بررسی چالش های این کار، دو ابزار woeUSB و Ventoy رو باهم بررسی کردیم و در اخر Ventoy رو روی یک usb باهم نصب کردیم .

+ مطلب خیلی ساده ایه اما شروعی بود برای محتواهای تصویریمون 🤝 منتظر ویدیو های مفید تر باشید :)


🔘 @linux_exp | #usb #linux #video
🔥42👍1🍾1🆒1
چجوری موقع لاگین شدن از SSH نوتیف دریافت کنیم؟

اگاهی به موقع از لاگین‌های SSH می‌تونه سطح جدیدی از هوشیاری و امنیت رو برای سرورتون فراهم بکنه.

بهترین ابزار برای انجام این کار استفاده از PAM (Pluggable Authentication Module) هستش که میتونیم کار دلخواهمون رو (اینجا فرستادن نوتیف) موقع باز شدن یک نشست (session) توی SSH هندل کنیم

برای انجام این کار سراغ فایل
/etc/pam.d/sshd
برید و بعد خطی که توش session حال حاضر تعریف شده اضافه کنید:
session optional pam_exec.so /usr/local/bin/ssh-login-notify.sh

الان بخش اصلی کار تموم شده و شما باید نوتیفیکیشن دلخواهتون رو با استفاده از اسکریپتی که به PAM دادیم عملی کنید تا بعد هربار ایجاد نشست اسکریپت اجرا بشه و شما متوجه اتفاقات بشید.

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

+ مرحله اخر بصورت استفاده از Gmail SMTP توی منبع ذکر شده میتونید مطالعه کنید :)

[ Source ]

🔘 @linux_exp | #SSH #PAM #linux
🔥9👌52👍1
دیروز یکی از دوستان با وجود اینکه چند گیگ فضای خالی روی سرور داشت، ولی نمی‌تونست فایل ایجاد کنه که مشکل از پر شدن inode های سرور بود.

📌 ‏inode چیه؟


می‌تونیم inode رو مثل کارت شناسایی فایل‌ها توی لینوکس تصور کنیم. هر فایلی که روی سیستم هست یه کارت شناسایی (inode) داره که توش اطلاعات مهم مثل اندازه فایل، محل ذخیره‌سازی فایل روی دیسک، مالک و تاریخ‌ها نوشته شده. یعنی حتی اگه فضای خالی روی هارد باشه، اگه همه کارت‌ها پر شده باشن، سیستم نمی‌تونه فایل جدید بسازه چون دیگه کارت شناسایی جدید برای فایل وجود نداره.

وقتی فایل‌سیستم روی هارد ساخته می‌شه، یه تعداد مشخص inode بهش اختصاص داده می‌شه. یعنی از همون اول تعداد مشخصی کارت شناسایی برای فایل‌ها وجود داره و بعدا به راحتی قابل افزایش نیست.


♨️ مشکل پر شدن چطوری پیش میاد؟

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

پس همیشه خوبه موقع مدیریت سرور حواسمون به inode usage هم باشه، نه فقط فضای خالی هارد. با دستورهایی مثل df -ih می‌تونیم ببینیم چه مقدار inode باقی مونده و قبل از اینکه مشکل جدی بشه، فایل‌های اضافی یا لاگ‌های قدیمی رو پاک کنیم.

معمولا فایل‌های لاگ قدیمی، فایل‌های موقت یا کش‌ها بیشترین inode رو مصرف می‌کنن. حتی دایرکتوری‌ها هم inode دارند! با پاک کردن این فایلها می‌تونید فضای inode رو آزاد کنید و مشکل پر شدن رو حل کنید.


🔘 @linux_exp | #linux #inode
🔥5🥰3👍2👌1🫡1
تو کیبورد استاندار فارسی کاراکترهای کنترلی نوشتاری وجود داره که برای مدیریت جهت و ترتیب نوشتار تو متن‌های چندزبانه (مثل فارسی که راست به چپه و انگلیسی که چپ به راسته) استفاده می‌شه. این کاراکترها برای کنترل درست نمایش متن‌های دوسویه و پیچیده ضرورین و در استاندارد یونیکد تعریف شدن.

LRM (Left-to-Right Mark) و RLM (Right-to-Left Mark):
کاراکترهای نامرئی‌ای که جهت نوشتار رو مشخص می‌کنن و اون رو تغییر می‌دن بدون این‌که چیزی نمایش داده بشه. مثلا RLM باعث می‌شه متن پس از اون راست‌به‌چپ تفسیر بشه و LRM برعکس.

LRO (Left-to-Right Override) و RLO (Right-to-Left Override):
این کاراکترها جهت متن رو به صورت اجباری و override تعیین می‌کنن، یعنی تمام کاراکترهای بعدی تا پایان این حالت، به چینش مشخص شده (چپ به راست یا راست به چپ) نمایش داده می‌شن، حتی اگه مخالف رفتار طبیعی‌شون باشه.

LRE (Left-to-Right Embedding) و RLE (Right-to-Left Embedding):
مشابه LRO/RLO ولی به‌صورت تعبیه (embedding) هستن، یعنی می‌تونن در متن اصلی جهت بخش کوچکی رو تغییر بدن اما این حالت اجباری نیست و رفتار طبیعی کاراکترهارو تغییر نمی‌ده.

بخش کوچک تحت تاثیر در این مورد عموما کاراکترهای خنثی هستن یعنی به‌طور پیش‌فرض جهتی برای چینش‌شون تعیین نشده مثل علائم (+/!->)


PDF (Pop Directional Formatting):
کاراکتری که پایان یک حالت override یا embedding رو نشون می‌ده و کنترل جهت رو به حالت قبل برمی‌گردونه.

مثال:
‏<RLM>‏order کاراکترهای LTR مثلا اعداد پشت هم ۱ ۲ ۳ می‌تونن بشن <LRM>‌‌‎۱ ۲ ۳‌‌‎<RLM>‌‌‏!

تا جایی که فهمیدم تلگرام تو فرستادن کاراکترهای embedding و override مشکل داره.


🔘 @linux_exp | #linux #keyboard #unicode
👍411
♨️ فوتوشاپ خط فرمان!

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

کارهایی مثل تغییر اندازه، بریدن، چرخوندن، اضافه‌کردن متن، تغییر فرمت، یا تنظیم رنگ‌ها رو می‌تونه انجام بده. دستورها ساده‌ان و با چند پارامتر می‌تونن چندین کار پشت‌سر‌هم انجام بدن.
نمونه:
magick input.jpg -resize 800x600 output.jpg

عکس ورودی تغییر اندازه می‌ده و خروجی جدید می‌سازه.

به‌تازگی دستور اصلی که convert بود منسوخ شده و الان به‌جاش باید از magick استفاده بشه.


‏ImageMagick توی سرورها و اسکریپت‌ها زیاد استفاده می‌شه، چون بدون رابط گرافیکی کار می‌کنه و برای پردازش انبوه عکس‌ها خیلی سریع و قابل‌اعتماده.

🔘 @linux_exp | #linux #imagemagick #cli
🔥5🆒3❤‍🔥2👍1🤝1
Linux Experts
😁 🔗 Source 🔘 @linux_exp | #fun
📌 معرفی Linux Mint

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

لینوکس مینت همیشه تلاش کرده تا رضایت کاربران فعلی خودش رو حفظ کنه، نه اینکه صرفا به‌دنبال جذب کاربرهای جدید باشه.
به همین خاطر، به‌جای اعمال تغییرات بزرگ و ناگهانی، روی توسعه پایدار‌ و بهبودهای تدریجی تمرکز داره. نتیجه‌اش اینه که Linux Mint تجربه‌ای آروم، قابل اعتماد و بدون دردسر ارائه می‌ده.


♻️ چرخه انتشار لینوکس مینت

لینوکس مینت در واقع بر دو پایه یا Base عرضه میشه:
🔷 Ubuntu-based (نسخه اصلی)
🔷 Debian-based (LMDE)

هرکدوم از این نسخه‌ها از چرخه انتشار متفاوتی پیروی می‌کنن:

🔵 نسخه‌ مبتنی بر اوبونتو
بیشتر کاربرا از این نسخه استفاده میکنن که شامل دو نوع اپدیت هست:

🔹 Major Release (اصلی):
این نسخه‌ها تقریبا هر دو سال یک‌بار منتشر میشن و معمولا تغییرات بزرگ و مهمی نسبت به نسخه قبل دارن. نمونه:
20 → 21 → 22

🔸 Point Release (فرعی):
برای هر نسخه‌ اصلی، ۳ نسخه‌ فرعی منتشر میشه که فاصله‌ زمانی بین هر کدوم حدود ۶ ماه هست. به‌عنوان مثال:
22.1, 22.2, 22.3

این نسخه‌ها بیشتر شامل بهبودهای جزئی، باگ‌فیکس‌ها، به‌روزرسانی نرم‌افزارها و بعضی ویژگی‌های تازه‌ هستن که تجربه‌ کاربر رو بهتر میکنن بدون اینکه سیستم رو دچار تغییرات اساسی کنن.


🟢 نسخه‌ مبتنی بر دبیان (LMDE)
این نسخه مستقیما روی Debian Stable ساخته میشه، نه اوبونتو. به همین خاطر چرخه‌ انتشارش کندتر و محافظه‌کارانه‌تره هست و آپدیت‌های بزرگ معمولا فقط وقتی میان که دبیان نسخه‌ جدیدی از Stable رو منتشر کنه.

هدف LMDE اینه که اگه روزی اوبونتو غیر قابل استفاده شد، لینوکس مینت همچنان با همون تجربه‌ کاربری قابل ادامه باشه.



🖥 محیط‌های دسکتاپ

لینوکس مینت با چند محیط دسکتاپ (Desktop Environment) مختلف عرضه میشه تا هر کاربر بسته به سلیقه‌اش، ظاهر و تجربه‌ کاربری مورد نظر خودش رو انتخاب کنه:

⚡️ Cinnamon
محیط دسکتاپ اصلی و پیش‌فرض لینوکس مینت هست که توسط تیم خود Mint توسعه داده میشه.  ساده، زیبا و شبیه ویندوز مناسب برای کاربران تازه‌وارد.


🧩 MATE
نسخه مدرن‌شده و فورک GNOME 2 هست؛ سبک‌تر از Cinnamon و مناسب سیستم‌های قدیمی‌تر.
رابط کاربریش کلاسیک‌تره، اما همچنان با ثبات و کارآمد عمل می‌کنه.


🧩 Xfce
سبک‌ترین نسخه لینوکس مینت. مناسب سیستم با سخت‌افزار قدیمی یا منابع محدود. سریع، پایدار و مصرف پایین منابع.


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

🔘@linux_exp | #linux #mint #guide
🔥3👌21👍1
📌 بررسی مخازن اوبونتو

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

🔷 Main
این بخش شامل نرم‌افزارهای آزاد و متن‌بازه که به‌صورت رسمی توسط خود Canonical پشتیبانی می‌شن.
نرم‌افزارهایی مثل GNOME، apt، bash و ابزارهای ضروری سیستم اینجا قرار دارن.


🔶 Universe
این ریپازیتوری شامل نرم‌افزارهای آزاد و متن‌بازه که توسط جامعه کاربری نگهداری می‌شن، نه Canonical.
یعنی آپدیت امنیتی تضمین‌شده نیست، ولی دسترسی به ابزارها و برنامه‌های بسیار بیشتری میده. مثال: htop، neovim، ffmpeg و کلی ابزار محبوب دیگه.


🔴 Restricted
برخی درایورها یا نرم‌افزارهای کاربردی هستن که کد منبعشون آزاد نیست ولی برای عملکرد درست سیستم ضروری هستن.
اوبونتو اینها رو توی بخش Restricted قرار میده.
مثلا درایورهای گرافیکی NVIDIA یا بعضی فریم‌ورک‌های خاص. این مخزن هم مثل main به صورت رسمی پشتیبانی و نظارت میشه.


⚫️ Multiverse
اینجا جاییه برای نرم‌افزارهایی که کد بسته و مجوزهای محدودتری دارن و Canonical به‌صورت رسمی پشتیبانشون نیست.
مثلا نرم‌افزارهایی که مجوز تجاری دارن یا قوانین کپی‌رایت خاصی براشون صدق می‌کنه. نصبش به عهده خود کاربره، چون اوبونتو مسئولیتی در قبالش نداره.

یکی از مثال‌های معروف، libdvdcss هست، کتابخونه‌ایی که برای پخش DVDهای رمزگذاری‌شده (Encrypted DVDs) استفاده میشه و به‌خاطر قوانین مربوط به DRM و کدگذاری رسانه، توی بعضی کشورها استفاده یا توزیعش ممکنه از نظر قانونی مشکل‌دار باشه.


💢 چرا این جداسازی انجام شده؟

همون طور که میشه حدس زد، دلیل اصلی این تقسیم‌بندی، شفافیت و انعطاف‌پذیری هست. اوبونتو با این کار چند هدف رو دنبال می‌کنه:

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

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

🔘 @linux_exp | #linux #ubuntu
👍3211🔥1🆒1
📌 آیا همه توزیع‌های لینوکسی واقعا آزاد (اوپن‌سورس / نرم‌افزار آزاد) هستن؟

توی وبسایت GNU یک مقاله هست با تیتر:
"Free System Distrobution Guidelines (GNU FSDG)"
که توضیح می‌ده فقط برخی از توزیع‌های لینوکسی واقعا کامل آزاد هستن.
چرا؟ چون بیشتر توزیع‌های محبوب (مثل Ubuntu، Fedora یا حتی Debian) معمولا شامل اجزایی هستن که کد منبع بسته دارن. مثلا:

• ‏Firmwareهای غیرآزاد برای کارت صدا، گرافیک یا Wi-Fi
• ‏کدک‌ها و درایورهای اختصاصی
• ‏یا حتی مخازنی (Repositories) که نرم‌افزارهای غیرآزاد داخلشون قرار دارن (راجع بهشون در پست‌های قبل توضیح دادیم).
از دید بنیاد GNU، این یعنی اون توزیع‌ها کامل آزاد نیستن، چون کاربر روی همه بخش‌های سیستم کنترل نداره.

🧭 توزیع‌های مورد تأیید GNU کدامند؟

بنیاد GNU در صفحه رسمی خودش لیستی از توزیع‌هایی رو منتشر کرده که از نظرش ۱۰۰٪ آزاد هستن و تمام معیارهای نرم‌افزار آزاد رو رعایت می‌کنن. از اینجا میتونید این لیست رو ببینید.

برخی از اون‌ها عبارت‌اند از:
🔹 Trisquel: بر پایه اوبونتو، ولی بدون هیچ بخش close source
🔸 PureOS: توسعه‌یافته توسط Purism، با تمرکز بر حریم خصوصی
🔹 Parabola GNU/Linux-libre: نسخه کاملا آزاد از آرچ

تمام این توزیع‌ها از نسخه آزاد کرنل به نام Linux-libre استفاده می‌کنن؛ کرنلی که هرگونه کد بسته (binary blob) ازش حذف شده.

⚖️ چرا این تفاوت مهمه؟

از نگاه GNU، موضوع فقط فنی نیست، اخلاقیه.
نرم‌افزار آزاد فقط به «دسترسی به کد» خلاصه نمیشه، بلکه به آزادی کاربر برای کنترل سیستم خودش مربوطه.
بنیاد GNU معتقده اگر بخشی از سیستم بسته باشه، کاربر در واقع وابسته به شرکت سازنده اون بخشه و از نظر فلسفه‌ آزادی، هنوز واقعا آزاد نیست.

💠 جمع‌بندی

شخصا میگم تا وقتی که از یه توزیع لینوکسی استفاده می‌کنید، مهم نیست کدومه تا همینجاش هم خوب پیش اومدید :)
هرکدوم باهاش راحت‌ترید همون رو استفاده کنید.
این پست هم صرفا برای آشنایی بیشتر با فلسفه و پشت‌صحنه جنبش نرم‌افزار آزاد بود. اگر علاقه به این سبک توزیع ها دارید لیستش رو حتما چک کنید.

🔘 @linux_exp | #gnu #linux #freesoftware #opensource
3👍3❤‍🔥11👏1
📚 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
📂 مفهوم 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
اطلاعیۀ تیم آرچ برای کاربران 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