# | Just My Logs
125 subscribers
5 photos
1 video
3 files
45 links
I post interesting things that I can read and actually benefit from.

Я делюсь интересным, что реально полезно читать
Download Telegram
📁 Where Are systemd Service Files Stored?
If you're working with Linux, you've probably used systemd to manage services like Nginx, Apache, Docker, or custom applications.
But where are the actual service files stored? 🤔
The main locations are:
/etc/systemd/system/

🔹 Custom services and local configurations
/usr/lib/systemd/system/

🔹 Service files installed by packages
/lib/systemd/system/

🔹 System service files on some Linux distributions
/run/systemd/system/

🔹 Runtime and temporary unit files
💡 Want to find the exact location of a service?
Instead of searching manually, simply run:
systemctl show -p FragmentPath nginx.service

You can also inspect the service configuration with:
systemctl cat nginx.service

And if you want to customize an existing service, it's better to use:
sudo systemctl edit nginx

This creates an override without directly modifying the original service file.
Understanding these paths makes managing and troubleshooting systemd services much easier. 🐧⚙️
#Linux #systemd #SysAdmin #DevOps


@JustMyLogss
Open Code Review is an AI-powered code review CLI tool. It originated as Alibaba Group's internal official AI code review assistant — over the past two years, it has served tens of thousands of developers and identified millions of code defects. After thorough validation at massive scale, we incubated it into an open source project for the community



https://github.com/alibaba/open-code-review
توی این پست می‌خوایم با یکی از مفاهیم قدیمی ولی مهم در لینوکس آشنا بشیم:
Chroot Jail
کلمه‌ی chroot مخفف عبارت زیر است:
Change Root

در لینوکس، هر پردازش یک مسیر ریشه (Root Directory) دارد که معمولاً با / مشخص می‌شود.
این مسیر تعیین می‌کند یک برنامه از کجا شروع به دیدن فایل‌ها و دایرکتوری‌های سیستم کند.
در حالت عادی، یک پردازش می‌تواند ساختار اصلی سیستم را ببیند:
/
├── bin
├── etc
├── home
├── usr
├── var
└── root

اما با استفاده از Chroot می‌توان Root یک پردازش را تغییر داد.
مثلاً:
/var/jail
├── bin
├── etc
├── lib
└── home

بعد از اجرای برنامه داخل این محیط، مسیر /var/jail برای آن برنامه تبدیل به / می‌شود.
یعنی برنامه فکر می‌کند در یک سیستم جدا اجرا می‌شود، در حالی که همچنان روی همان سیستم اصلی قرار دارد.
چرا به آن Jail می‌گویند؟
Jail یعنی «زندان».
چون یک کاربر یا سرویس داخل یک محدوده مشخص قرار می‌گیرد و فقط همان محیط را مشاهده می‌کند.
مثلاً یک کاربر FTP:
بدون Chroot:
FTP User
|
+-- کل فایل سیستم

با Chroot:
FTP User
|
+-- /home/user
|
+-- فایل‌های خودش

در این حالت کاربر دیگر به مسیرهایی مثل:
/etc
/usr
/root

سیستم اصلی دسترسی ندارد.
اجرای Chroot
ساختار کلی دستور:
chroot /path/to/new/root command

مثلاً:
sudo chroot /var/jail /bin/bash

با این دستور، محیط Bash داخل Jail اجرا می‌شود و فقط فایل‌های موجود در همان محیط را مشاهده می‌کند.
کاربردهای Chroot Jail

1) محدود کردن سرویس‌ها
یکی از رایج‌ترین استفاده‌های Chroot، محدود کردن سرویس‌هایی مثل FTP است تا در صورت وجود مشکل، دسترسی آن‌ها به کل سیستم محدود شود.

2) تعمیر سیستم لینوکس
یکی از کاربردهای حرفه‌ای Chroot، تعمیر سیستم‌هایی است که دیگر بوت نمی‌شوند.
با استفاده از Live Linux:
mount /dev/sda2 /mnt
chroot /mnt

بعد می‌توان کارهایی مثل:
update-grub
passwd
apt update

را انجام داد.
3) ساخت محیط تست
با Chroot می‌توان یک محیط لینوکسی آزمایشی ساخت، بدون اینکه سیستم اصلی تغییر کند.
مثلاً:
Ubuntu Host
|
+---- Debian Chroot

نکته امنیتی مهم
Chroot یک Sandbox کامل نیست.
Chroot فقط دید پردازش نسبت به فایل‌سیستم را تغییر می‌دهد.
اما:
❌ Kernel جدا ایجاد نمی‌کند
❌ Processها را کاملاً جدا نمی‌کند
❌ منابع سیستم را محدود نمی‌کند
به همین دلیل نباید آن را با Container یا Virtual Machine اشتباه گرفت.
Escape از Chroot
یکی از موضوعات مهم امنیتی، بررسی امکان خروج از محیط Chroot است.
دلیل اصلی این است که Chroot همچنان از همان Kernel سیستم اصلی استفاده می‌کند:
Host Kernel
|
+-- Normal Process
|
+-- Chroot Process

همچنین مدیریت Deviceها در مسیر:
/dev

بسیار مهم است.
چون قرار دادن Deviceهای حساس مثل:
/dev/mem
/dev/sda

می‌تواند امنیت محیط را کاهش دهد.

@JustMyLogss
❤2
A Telegram bot that uses an unofficial Truecaller API to look up phone number information instantly. It's an alternative for occasional use of Truecaller than running their app in background all the time.



https://github.com/ni554n/truecallerjs_bot
Forwarded from cyru55 team
⭕️ FSearch

یک ابزار جستجوی بسیار قدرتمند، شبیه برنامه Everything ویندوز؛ اما بسیار قویتر، سریعتر و حتی دارای قابلیت‌های بیشتر

✅ Open Source
📝 C

🔻Features
▫️Instant (as you type)
▫️Wildcard support
▫️RegEx support
▫️Filter support
▫️Include,exclude folders
▫️Sort by name,path,size
▫️Customizable interface
▫️Advanced syntax Operators:
AND, OR, NOT, Grouping, etc


⬇️ Download
☑️ Ubuntu PPA
  ☑️ Arch AUR
  ☑️ Fedora/RHEL
  ☑️ Debian
  ☑️ FreeBSD
🔥2
Forwarded from Linuxor ?
This media is not supported in your browser
VIEW IN TELEGRAM
اگه با ترمینال داری برنامه می‌نویسی اینجارو از دست نده توش کلی انیمشین برای لودینک ترمینال هستش.

نکته جالبش اینه که spinnerها stateless طراحی شدن و برنامتون رو کند نمی‌کنن. خود کتابخونه thread یا event loop جدا راه نمی‌ندازه؛ تو با tick مشخص می‌کنی انیمیشن کِی جلو بره. این باعث می‌شه خیلی راحت با event loop و معماری برنامه‌ت هماهنگش کنی:

github.com/ratatui/ratatui-spinner

@Linuxor
Forwarded from CleverDevs (Mammad)
یه نفر اومده و یه موزیک پلیر لینوکس به اسم sung با cpp و qt نوشته که طراحی زیبا و ویژگی های باحالی داره
این موزیک پلیر هم سرویس هایی مثل Youtube رو ساپورت میکنه هم میتونید خودتون یه موزیک سرور (مثل jellyfin و Subsonic) راه بندازید و با این کلاینت بهش وصل بشید
یا اصلا میتونید از موزیک های لوکال خودتون استفاده کنید

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

اوپن سورسه و برای نصب و استفاده میتونید به گیت هابش سر بزنید

https://github.com/yappologistic/Sung

#tools #music | <Yappologistic>
@CleverDevs - @CleverDevsGp
OOP در پایتون چیست؟
OOP مخفف Object-Oriented Programming یا «برنامه‌نویسی شیءگرا» است.
پایتون یک زبان شیءگراست و به ما اجازه می‌دهد کدهای خود را با استفاده از Class و Object ساختاربندی کنیم.
مزایای OOP:
ساختار منظم‌تر برنامه
نگهداری و دیباگ آسان‌تر کد
امکان استفاده مجدد از کد
کاهش کدهای تکراری
کمک به رعایت اصل DRY
اصل DRY مخفف Don't Repeat Yourself است؛ یعنی سعی کنیم یک بخش از کد را چندین بار تکرار نکنیم و در صورت نیاز، آن را داخل یک تابع یا کلاس قرار داده و دوباره استفاده کنیم.
Class و Object چیست؟
کلاس را می‌توانیم مانند یک نقشه یا الگو برای ساخت Object در نظر بگیریم.
برای مثال:
Fruit یک Class است.
و:
Apple
Banana
Mango
می‌توانند Objectهایی بر اساس آن باشند.
مثال دیگر:
Car → Class
Volvo، Audi و Toyota → Object
متد __init__()
متد __init__() هنگام ایجاد یک Object به صورت خودکار اجرا می‌شود و معمولاً برای مقداردهی اولیه به ویژگی‌های Object استفاده می‌شود.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

p1 = Person("Emil", 36)

print(p1.name)
print(p1.age)

خروجی:
Emil
36

در این مثال، Object به نام p1 ایجاد شده و مقدار name برابر Emil و مقدار age برابر 36 است.
پارامتر self چیست؟
self به Object فعلی اشاره می‌کند و با استفاده از آن می‌توانیم به ویژگی‌ها و متدهای همان Object دسترسی داشته باشیم.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def greet(self):
print("Hello, my name is " + self.name)

p1 = Person("Emil", 25)
p1.greet()

خروجی:
Hello, my name is Emil

در اینجا self.name به ویژگی name مربوط به همان Object اشاره می‌کند.
یک مثال ساده با کلاس Dog
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age

def bark(self):
print(self.name + " says Woof!")

d1 = Dog("Buddy", 3)

d1.bark()

خروجی:
Buddy says Woof!

در این مثال:
Dog → Class
d1 → Object
name و age → Properties
bark() → Method
__init__() → متد مقداردهی اولیه
self → اشاره به Object فعلی
مفاهیم مهم OOP در پایتون:
Classes و Objects
__init__()
self
Properties و Methods
Inheritance
Polymorphism
Encapsulation
Inner Classes
در ادامه یادگیری OOP، این مفاهیم به ما کمک می‌کنند برنامه‌های بزرگ‌تر را به بخش‌های کوچک‌تر و قابل مدیریت تقسیم کنیم و کدی بنویسیم که استفاده مجدد، توسعه و نگهداری آن ساده‌تر باشد.


@JustMyLogss
🔥1
In-Place Upgrade یا Clean Installation؟
وقتی قرار هست یک Windows Server رو به نسخه جدیدتر ارتقا بدیم، معمولاً با دو انتخاب روبه‌رو هستیم:
In-Place Upgrade
یا
Clean Installation + Migration
در نگاه اول شاید تفاوتشون فقط روش نصب ویندوز به نظر بیاد، ولی در محیط واقعی، انتخاب بین این دو می‌تونه روی Downtime، سرویس‌ها، Applicationها و حتی مدیریت سرور در آینده تأثیر بذاره.
In-Place Upgrade
در این روش، همون Server فعلی رو مستقیماً به نسخه جدید ارتقا می‌دیم.
مثلاً:
Windows Server 2019 → Windows Server 2022
مزیت اصلی این روش اینه که بخش زیادی از Configuration، Roleها، Featureها و Applicationهای فعلی حفظ میشن.
در نتیجه معمولاً Migration کمتری داریم و Downtime هم می‌تونه کمتر باشه.
اما یک نکته مهم وجود داره:
In-Place Upgrade قرار نیست محیط فعلی رو تمیز کنه.
اگر روی Server از قبل Configuration اشتباه، Dependency قدیمی، سرویس ناسازگار یا حتی یک مشکل ناشناخته وجود داشته باشه، ممکنه بعد از Upgrade هم همچنان وجود داشته باشه.
یعنی عملاً محیط فعلی رو با تمام وابستگی‌هاش وارد نسخه جدید می‌کنیم.
Clean Installation
اینجا رویکرد کاملاً متفاوت هست.
یک Windows Server جدید رو از صفر نصب می‌کنیم و بعد سرویس‌ها و اطلاعات موردنیاز رو به محیط جدید منتقل می‌کنیم.
این روش طبیعتاً کار بیشتری داره، اما یک مزیت مهم داره:
از ابتدا دقیقاً می‌دونیم چه چیزی روی Server جدید نصب و Configure شده.
در واقع Clean Install فقط نصب مجدد Windows نیست؛ می‌تونه فرصتی باشه برای اینکه Configurationهای قدیمی و غیرضروری رو هم شناسایی و حذف کنیم.
البته Migration هم بدون دردسر نیست.
مواردی مثل:
• Permissionها
• Certificateها
• DNS
• Firewall Rules
• Scheduled Tasks
• Service Dependencies
• Application Configuration
• Backup و Monitoring Agentها
همگی باید قبل از Migration بررسی بشن.
پس کدوم روش رو انتخاب کنیم؟
جوابش به شرایط Server بستگی داره.
اگر Server وضعیت Stable داشته باشه، Applicationها با نسخه جدید سازگار باشن، Dependencyها مشخص باشن و Downtime محدودی داشته باشیم، In-Place Upgrade می‌تونه انتخاب مناسبی باشه.
اما اگر Server قدیمی و پیچیده باشه، Configurationهای زیادی داشته باشه یا دقیقاً ندونیم چه چیزهایی طی سال‌ها روی اون تغییر کرده، ساختن یک Server جدید و Migration کردن سرویس‌ها کنترل بیشتری روی محیط نهایی میده.
در نهایت، چیزی که قبل از Upgrade اهمیت بیشتری از خود Upgrade داره، Preparation و Recovery Plan هست.
قبل از شروع باید بدونیم:
چه چیزهایی باید Backup بشن؟
چه Dependencyهایی داریم؟
چقدر Downtime قابل قبوله؟
اگر Upgrade شکست خورد، Rollback چطور انجام میشه؟
و مهم‌تر از همه، آیا Backup واقعاً قابل Restore هست؟
چون داشتن Backup با داشتن یک Backup قابل بازیابی، دو چیز کاملاً متفاوت هستن.
#WindowsServer #SysAdmin #Infrastructure #Server #InPlaceUpgrade #CleanInstall


@JustMyLogss
🔥1
BIOS در مقابل UEFI؛ تفاوت نسل قدیم و جدید Firmware

وقتی یک سیستم را روشن می‌کنیم، قبل از اینکه ویندوز یا هر سیستم‌عامل دیگری اجرا شود، یک Firmware وظیفه راه‌اندازی اولیه سخت‌افزار و آماده‌کردن سیستم برای Boot شدن را بر عهده دارد.

دو فناوری اصلی در این زمینه BIOS و UEFI هستند. BIOS سال‌ها استاندارد اصلی سیستم‌های کامپیوتری بود، اما امروزه UEFI تقریباً جایگزین آن شده است.
در ادامه مهم‌ترین تفاوت‌های این دو را بررسی می‌کنیم.

1. زمان معرفی
BIOS از سال 1981 در کامپیوترهای شخصی مورد استفاده قرار گرفت و برای چندین دهه استاندارد اصلی فرآیند Boot سیستم بود.
در مقابل، اولین مشخصات UEFI در سال 2002 منتشر شد و به‌عنوان نسل جدیدتر Firmware برای رفع محدودیت‌های BIOS طراحی شد.

2. رابط کاربری
یکی از تفاوت‌های قابل مشاهده بین BIOS و UEFI، رابط کاربری آن‌هاست.
در BIOS معمولاً با یک محیط Text-Based مواجه هستیم که بیشتر با استفاده از صفحه‌کلید کنترل می‌شود.
اما UEFI می‌تواند یک رابط گرافیکی (GUI) داشته باشد و علاوه بر صفحه‌کلید، از Mouse نیز پشتیبانی کند.
به همین دلیل تنظیمات UEFI معمولاً برای کاربران ساده‌تر و قابل فهم‌تر است.

3. معماری و محدودیت حافظه
BIOS یک Firmware قدیمی با معماری 16-bit است و در زمان Boot با محدودیت‌های زیادی در دسترسی به حافظه مواجه می‌شود.
UEFI معماری مدرن‌تری دارد و می‌تواند در حالت 32-bit یا 64-bit اجرا شود؛ بنابراین محدودیت‌های حافظه و محیط اجرایی آن بسیار کمتر از BIOS است.
این موضوع یکی از دلایل اصلی طراحی UEFI برای سخت‌افزارهای مدرن‌تر است.

4. پشتیبانی از Partition
یکی از مهم‌ترین تفاوت‌های BIOS و UEFI مربوط به نحوه Boot شدن از روی دیسک است.
BIOS معمولاً با MBR (Master Boot Record) استفاده می‌شود.
MBR محدودیت‌هایی دارد که یکی از مهم‌ترین آن‌ها محدودیت حجم دیسک قابل استفاده برای Partition Table، در حالت متداول، حدود 2TB است.
در مقابل، UEFI از GPT (GUID Partition Table) پشتیبانی می‌کند.
GPT برای دیسک‌های بسیار بزرگ‌تر طراحی شده و محدودیت 2 ترابایتی MBR را ندارد.
بنابراین در سیستم‌های جدید، ترکیب:
UEFI + GPT
استاندارد رایج‌تری محسوب می‌شود.

5. امنیت
BIOS به‌صورت ذاتی قابلیت‌های امنیتی مدرن زیادی ندارد.
در مقابل، UEFI امکان استفاده از قابلیت‌هایی مانند Secure Boot را فراهم می‌کند.
Secure Boot در زمان Boot شدن سیستم، صحت و اعتبار اجزای نرم‌افزاری مورد استفاده برای راه‌اندازی سیستم را بررسی می‌کند و می‌تواند از اجرای Bootloaderهای غیرمجاز جلوگیری کند.
این قابلیت در سیستم‌های جدید و مخصوصاً محیط‌های سازمانی اهمیت زیادی دارد.
6. Performance و سرعت Boot
BIOS به دلیل معماری قدیمی‌تر و محدودیت‌های موجود، فرآیند Boot مدرن و بهینه‌ای ندارد.
UEFI برای سخت‌افزارهای جدید طراحی شده و می‌تواند فرآیند Boot را سریع‌تر و بهینه‌تر انجام دهد.
به همین دلیل در بسیاری از سیستم‌های امروزی، استفاده از UEFI Boot باعث کاهش زمان راه‌اندازی سیستم نسبت به Legacy BIOS می‌شود.



@JustMyLogss
🔥1