My folder vip
76 subscribers
202 photos
82 videos
622 files
499 links
آرشیو یادگیری هک/امنیت

اینجا فولدر شخصی من برای یادگیری و ثبت مطالب Linux، Networking و Cyber Security است.

🔐 LPIC | Network+ | CEH | SANS
🐧 Linux & System Administration
🌐 Networking & Troubleshooting
💻 Python & Security Tools
🧪 Labs | CTF | Prac
Download Telegram
مقدمه Lpic 1 ( intro)

=======

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

قسمت دو

Linux در اصل یک Kernel (هسته سیستم‌عامل) است که توسط Linus Torvalds توسعه داده شد.
Kernel به‌تنهایی برای ساخت یک سیستم‌عامل کامل کافی نبود و به ابزارها و برنامه‌های دیگری نیاز داشت.
بسیاری از این ابزارهای پایه در پروژه GNU توسعه داده شده بودند.
ترکیب GNU + Linux باعث شکل‌گیری سیستم‌هایی شد که معمولاً به آن‌ها GNU/Linux می‌گوییم.
خلاصه:
GNU = ابزارها و برنامه‌های پایه
+
Linux = Kernel
↓
GNU/Linux

مثلاً Debian، Ubuntu و AlmaLinux توزیع‌های GNU/Linux هستند.

وبسایت های مهم

دانلود کرنل لینوکس
kernel.org
پروژه گنو
GNU.ORG
—————————
کامند زیر
uname -a
اطلاعات Kernel را نمایش می‌دهد

=============

قسمت سوم

برای تست و تمرین بهتر است یک محیط مجازی (Virtual Lab) داشته باشیم تا در صورت خرابی، به سیستم اصلی آسیب نرسد.
نرم‌افزارهای معروف مجازی‌سازی:
VMware Workstation
Oracle VirtualBox

در این دوره از VMware Workstation برای ساخت ماشین‌های مجازی استفاده می‌کنیم.
——————————————-

توزیع‌های مختلف Linux 🐧
در این دوره بیشتر با دو خانواده کار می‌کنیم:
1. خانواده Red Hat
AlmaLinux
RHEL
Fedora
دانلود AlmaLinux: AlmaLinux
2. خانواده Debian
Debian
Ubuntu
Kali Linux
دانلود Debian: Debian
در ادامه دوره بیشتر تمرکز ما روی AlmaLinux و Debian خواهد بود.


================

قسمت چهارم - نصب ماشین مجازی


Custom → آخرین نسخه Workstation
Installer Disk → گزینه Use ISO
Operating System → Linux → AlmaLinux
نام VM و محل ذخیره فایل‌ها را انتخاب کنید.
CPU و RAM را متناسب با سیستم خود انتخاب کنید.
هنگام نصب می‌توانید منابع بیشتری اختصاص دهید تا نصب سریع‌تر انجام شود.
Network: روی NAT
I/O Controller: گزینه پیش‌فرض LSI Logic
Virtual Disk: SATA
Disk: گزینه Create a new virtual disk
Disk Size / Partition: به مقدار دلخواه و متناسب با نیاز VM انتخاب کنید.
در پایان تنظیمات را بررسی و Finish کنید.

===================


قسمت پنجم نصب AlmaLinux

Language: روی English بگذارید.
Time & Date: منطقه زمانی را تنظیم کنید.
Keyboard: English (US)
Installation Destination: فقط هارد موردنظر را انتخاب کنید.
Software Selection: حالت Server
Network & Host Name: کارت شبکه را ON کنید و در صورت نیاز Hostname را تنظیم کنید.
Root Password: رمز Root را تعیین کنید.
User Creation: یک کاربر معمولی هم بسازید.
تنظیمات نصب را یک‌بار بررسی کنید و سپس Begin Installation را بزنید.
بعد از اتمام نصب، Reboot کنید و ISO را جدا کنید.
بعد از نصب
برای بررسی و انجام آپدیت‌ها:
dnf update

برای خاموش کردن سیستم:
halt -p



Snapshot
قبل از تغییرات مهم در ماشین مجازی می‌توانید Snapshot بگیرید تا در صورت خراب شدن تنظیمات، سیستم را به همان نقطه برگردانید.

====================

قسمت ششم نصب Debian

Language: English
Location: Iran
Keyboard: English (US)
Hostname: دست نزنید
Domain Name: خالی بگذارید
Root Password: رمز دلخواه
User: یک کاربر معمولی بسازید
Partitioning:
Guided — use entire disk
All files in one partition
Disk: دیسک موردنظر را انتخاب کنید
Write changes to disk: ابتدا No برای بررسی؛ بعد از اطمینان Yes
Package Manager: تنظیمات پیش‌فرض مناسب است
Mirror: در صورت وجود، Iran
Proxy: خالی
Package Usage Survey: No
Software Selection:
SSH server ✅
Standard system utilities ✅
Desktop Environment ❌
GRUB: Yes
GRUB Location: خود دیسک، مثلاً /dev/sda
نصب را تمام کنید و Reboot بزنید.

======================
قسمت هفتم — اتصال به سرور لینوکس از ویندوز 🐧

در لینوکس برای دیدن IP:
ip a

در Windows CMD ابتدا IP را Ping کنید:
ping YOUR_IP

سپس با SSH متصل شوید:
ssh root@YOUR_IP

رمز Root را وارد کنید تا وارد سرور شوید.
==========================

قسمت هفتم - قسمت آخر INTRO : اتصال به سرور لینوکس از ویندوز

در لینوکس برای دیدن IP:
ip a

در Windows CMD ابتدا IP را Ping کنید:
ping YOUR_IP

سپس با SSH متصل شوید:
ssh root@YOUR_IP

رمز Root را وارد کنید تا وارد سرور شوید.

====================

حتی اگر Debian یا AlmaLinux را با محیط گرافیکی (GUI) نصب کرده باشید، باز هم می‌توانید با SSH به آن وصل شوید. ✅

تفاوت فقط این است که:
اگر GUI نصب باشد:
محیط دسکتاپ دارید + می‌توانید SSH هم استفاده کنید.

نسخه Server/Minimal:
محیط گرافیکی ندارید و بیشتر با Terminal کار می‌کنید؛ SSH هم می‌تواند فعال باشد.

نکته مهم این است که SSH به داشتن یا نداشتن GUI وابسته نیست؛ باید سرویس SSH روی سیستم نصب و فعال باشد.

مثلاً در Debian:
systemctl status ssh

و در AlmaLinux معمولاً:
systemctl status sshd

پس انتخاب Server را به این دلیل انجام دادیم که برای دوره LPIC و مدیریت سرور، محیط بدون GUI سبک‌تر و مناسب‌تر است.
👏1
فصل اول دوره الپیک
===============================

قسمت اول
—————————
Terminal چیست؟
Terminal محیطی برای ارتباط و کار با سیستم‌عامل لینوکس است که از طریق آن می‌توانیم دستورات را اجرا و سیستم را مدیریت کنیم.
—————————
Shell چیست؟
Shell یک رابط بین کاربر و Kernel است که دستورات کاربر را دریافت، تفسیر و اجرا می‌کند
—————————
Bash چیست؟
Bash (Bourne Again Shell) یکی از معروف‌ترین Shellهای لینوکس است و علاوه بر اجرای دستورات، امکان Shell Scripting را هم فراهم می‌کند.
—————————
انواع Shell
bash
sh
csh / tcsh
ksh
zsh
fish
—————————
Bash Script چیست؟
فایلی شامل مجموعه‌ای از دستورات Bash است که می‌توان آن‌ها را به‌صورت خودکار و پشت‌سرهم اجرا کرد.
مثلاً:
#!/bin/bash
echo "Hello Linux"

—————————
Command چیست؟
Command یا دستور، فرمانی است که به Shell می‌دهیم تا یک عملیات مشخص را انجام دهد.
مثلاً:
ls

برای نمایش فایل‌ها و پوشه‌ها.
pwd

برای نمایش مسیر فعلی.
whoami

برای نمایش کاربر فعلی.
👏1
فصل اول دوره الپیک
===============================

قسمت دوم — آدرس‌دهی در لینوکس 🐧

——————
pwd

مخفف Print Working Directory است و مسیر کامل پوشه‌ای که در حال حاضر داخل آن هستیم را نمایش می‌دهد.
pwd

مثال:
/home/alireza

یعنی در حال حاضر داخل مسیر /home/alireza قرار داریم.

=====================

قسمت سوم —فرمان های مقدماتی بخش اول 🐧
——————

uname
نمایش نام سیستم‌عامل.
uname


uname -a

نمایش اطلاعات کامل سیستم و Kernel.
uname -a


uname --help

نمایش راهنمای دستور uname.
uname --help


—————-

cd
— تغییر مسیر
cd /

رفتن به مسیر ریشه /
cd ..

رفتن یک پوشه به عقب.
cd -

برگشتن به مسیر قبلی.
———————
ls — نمایش فایل‌ها و پوشه‌ها
ls

نمایش فایل‌ها و پوشه‌های مسیر فعلی.
ls -a

نمایش تمام فایل‌ها، حتی فایل‌های مخفی.

=====================

قسمت چهارم —فرمان های مقدماتی بخش دوم 🐧
——————

همه‌چیز در لینوکس فایل است؛ حتی Deviceها و بسیاری از منابع سیستم به‌صورت فایل نمایش داده می‌شوند.
————-

Built-in چیست؟
دستورهایی که داخل خود Shell وجود دارند و نیازی به فایل اجرایی جداگانه ندارند.
مثال:
cd
type


—————-

more و less
برای نمایش محتوای فایل به‌صورت صفحه‌به‌صفحه:
more file.txt
less file.txt

less امکانات بیشتری برای جست‌وجو و حرکت دارد.

—————-
head

نمایش ابتدای فایل:
head file.txt

نمایش تعداد مشخصی خط:
head -n 5 file.txt


—————-
tail

نمایش انتهای فایل:
tail file.txt

نمایش تعداد مشخصی خط:
tail -n 5 file.txt


—————-
cat

نمایش محتوای فایل:
cat file.txt

نمایش همراه با شماره خط:
cat -n file.txt


—————-
type

مشخص می‌کند یک Command از چه نوعی است:
type cd
type ls

مثلاً ممکن است نشان دهد cd یک Shell Built-in است.

=====================

قسمت پنجم —ایجاد یک فایل 🐧
——————

echo
برای چاپ متن در Terminal:
echo "hello"

نمایش همه موارد موجود در مسیر با *:
echo *


————————
علامت >
برای Redirect کردن خروجی به داخل فایل استفاده می‌شود.
echo "alireza" > test

اگر فایل وجود نداشته باشد، ساخته می‌شود؛ اگر وجود داشته باشد، محتوای قبلی پاک و جایگزین می‌شود.
——————————
touch
برای ایجاد فایل خالی:
touch test

مثلاً:
touch test.txt

فایل test.txt ساخته می‌شود.

حالا با دستور زیر مثلا alireza زیر فایل test ساخته میشود
echo "alireza" > test
👏4
قسمت ششم — متغیرها 🐧
——————————

Variable محلی برای نگهداری اطلاعات در Shell است؛ مثل متن، عدد یا مسیر.

env
نمایش متغیرهای محیطی:
env


-------------
echo

نمایش مقدار یک متغیر:
echo $HOME
echo $SHELL

$HOME → مسیر Home کاربر
$SHELL → Shell پیش‌فرض کاربر

——————————
SHLVL

تعداد سطح‌های Shell فعلی را نشان می‌دهد:
echo $SHLVL


---------------
export

یک متغیر را به Environment Variable تبدیل می‌کند تا Shellهای فرزند نیز آن را داشته باشند:
export NAME=Alireza

به‌صورت پیش‌فرض متغیرهای ساخته‌شده در Shell Local هستند؛ با export به محیط فرزند منتقل می‌شوند.
PS1
ظاهر Prompt ترمینال را مشخص می‌کند:
echo $PS1


------------------
PATH

مسیرهایی را مشخص می‌کند که Shell برای پیدا کردن دستورات در آن‌ها جست‌وجو می‌کند:
echo $PATH

مثلاً وقتی می‌نویسیم:
ls

Shell مسیرهای موجود در PATH را برای پیدا کردن دستور ls بررسی می‌کند.

====================

قسمت هفتم — لاگ فعالیت شما 🐧

—————

history
نمایش دستورهایی که قبلاً اجرا کرده‌ایم:
history

اجرای یک دستور از History

مثلاً:
!343

دستور شماره 343 را دوباره اجرا می‌کند.

نکته
اگر قبل از یک Command یک Space بگذارید، در History ذخیره نمی‌شود؛ البته این رفتار به تنظیم HISTCONTROL بستگی دارد.

———————————-
$HISTFILE
مشخص می‌کند History در کدام فایل ذخیره شود:
echo $HISTFILE

معمولاً:
~/.bash_history


------------------
history -c

پاک کردن History فعلی Shell:
history -c



history -r

خواندن History از فایل:
history -r



history -w

نوشتن History فعلی در فایل:
history -w



.bash_history

فایل معمول ذخیره History مربوط به Bash است:
~/.bash_history

نکته:

history
برای مدیریت History داخل Shell است و

.bash_history
معمولاً محل ذخیره دائمی آن روی دیسک است.


====================

قسمت هشتم — کمک گرفتن 🐧

—————

-h
در بسیاری از دستورات، -h برای نمایش Help کوتاه استفاده می‌شود:
ls -h

البته -h در همه دستورات معنی یکسانی ندارد؛ مثلاً در ls معمولاً خروجی را خواناتر می‌کند.
————————
--help
روش عمومی‌تر برای گرفتن راهنمای دستور:
ls --help

معمولاً Syntax، Optionها و کاربرد دستور را نمایش می‌دهد.
————————
man
مخفف Manual است و مستندات کامل یک دستور را نمایش می‌دهد:
man ls

داخل man می‌توانی:
↑ ↓ → حرکت
/word → جست‌وجو
n → نتیجه بعدی
q → خروج
man man
راهنمای خود دستور man:
man man

man -k
برای جست‌وجوی کلمه در عنوان و توضیحات Manualها:
man -k passwd

دستورهای مرتبط با passwd را پیدا می‌کند.
————————
echo $?
نمایش Exit Status آخرین دستور اجراشده:
echo $?

معمولاً:
0     → موفق
1+ → خطا / وضعیت غیرموفق

مثال:
ls
echo $?

اگر ls با موفقیت اجرا شود، معمولاً 0 می‌بینیم.

====================
❤1👏1
قسمت نهم — ویرایشگر فایل های متنی 🐧

—————

در لینوکس برای ایجاد و ویرایش فایل‌های متنی از Editorها استفاده می‌کنیم.
vi
ویرایشگر استاندارد و قدیمی لینوکس:
vi test.txt

دو حالت مهم دارد:
Command Mode → اجرای دستورات
Insert Mode → نوشتن متن
ورود به حالت نوشتن:
i

خروج:
Esc

ذخیره و خروج:
:wq

خروج بدون ذخیره:
:q!


---------------
vim

نسخه پیشرفته‌تر vi با امکانات بیشتر:
vim test.txt

در سرورها و محیط‌های حرفه‌ای بسیار پرکاربرد است.

—————————-
nano
ویرایشگر ساده‌تر و مناسب افراد تازه‌کار:
nano test.txt

در پایین صفحه میانبرها نمایش داده می‌شوند.
Ctrl + O → ذخیره
Ctrl + X → خروج
Ctrl + W → جست‌وجو
برای LPIC باید حداقل vi/vim را بلد باشیم، چون ممکن است روی سرور فقط همین Editor در دسترس باشد.


=====================

قسمت دهم — شروع کار با vi 🐧

—————
vi سه حالت اصلی دارد:
1. Command Mode
حالت پیش‌فرض برای اجرای دستورات و حرکت داخل فایل.
vi test.txt

h → چپ
j → پایین
k → بالا
l → راست
0 → ابتدای خط
$ → انتهای خط
gg → ابتدای فایل
G → انتهای فایل
dd → حذف خط
yy → کپی خط
p → Paste
u → Undo
Ctrl + r → Redo
/text → جست‌وجو
n → نتیجه بعدی
x → حذف یک کاراکتر
2. Insert Mode
برای نوشتن و ویرایش متن.
از Command Mode:
i → نوشتن از محل فعلی
a → نوشتن بعد از کاراکتر فعلی
o → ایجاد خط جدید زیر خط فعلی
O → ایجاد خط جدید بالای خط فعلی

برای برگشت به Command Mode:
Esc

3. Ex Mode
برای ذخیره، خروج و دستورات مدیریتی فایل.
ابتدا : بزنید:
:w      ذخیره
:q خروج
:wq ذخیره و خروج
:q! خروج بدون ذخیره
:w! ذخیره اجباری
:x ذخیره و خروج

دستورات مهم‌تر vi
dw      حذف یک کلمه
D حذف از محل فعلی تا انتهای خط
dG حذف تا انتهای فایل
cw تغییر یک کلمه
cc تغییر کل خط
C تغییر تا انتهای خط
r جایگزینی یک کاراکتر
R ورود به حالت Replace
J چسباندن خط بعدی به خط فعلی
. تکرار آخرین دستور

نکته مهم
برای خروج از هر حالت و برگشت به Command Mode:
Esc

پس ترتیب اصلی را این‌طور به خاطر بسپار:
Command Mode → i → Insert Mode → Esc → Command Mode → : → Ex Mode


=====================

قسمت یازدهم — شروع کار با nano 🐧

—————

nano یک ویرایشگر متنی ساده و مناسب برای ویرایش فایل‌ها در لینوکس است.
باز کردن یا ایجاد فایل
nano test.txt

دستورات مهم Nano
Ctrl + O → ذخیره فایل
Ctrl + X → خروج
Ctrl + W → جست‌وجو
Ctrl + K → حذف/بریدن یک خط
Ctrl + U → برگرداندن خط Cut شده
Ctrl + G → نمایش راهنما
Ctrl + C → نمایش موقعیت Cursor
Ctrl + _ → رفتن به شماره خط مشخص
Alt + U → Undo
Alt + E → Redo
ذخیره و خروج
بعد از ویرایش:
Ctrl + O
Enter
Ctrl + X

یعنی:
Save → تأیید نام فایل → Exit

=====================
👍1👏1
قسمت دوازدهم — پردازش فایل ها 🐧

—————
. فرمان cat

دستور cat مخفف Concatenate است و برای نمایش، ترکیب و ایجاد فایل‌های متنی استفاده می‌شود.
نمایش محتویات فایل
cat alireza1

مثلاً:
ali
reza
linux

—————-
نمایش چند فایل پشت سر هم
cat alireza1 alireza2

محتوای alireza1 و سپس alireza2 نمایش داده می‌شود.
—————-

ترکیب دو فایل در فایل جدید
cat alireza1 alireza2 > alireza3

یعنی:
alireza1 + alireza2 → alireza3

مثلاً:
cat file1.txt file2.txt > file3.txt

⚠️ اگر alireza3 از قبل وجود داشته باشد، محتوای قبلی آن پاک و جایگزین می‌شود.
—————-
نمایش فایل جدید
cat alireza3

—————-
اضافه کردن به انتهای فایل
برای اضافه کردن محتوا بدون پاک کردن محتوای قبلی:
cat alireza1 alireza2 >> alireza3

تفاوت:
>

جایگزین می‌کند.
>>

به انتهای فایل اضافه می‌کند.

—————-
نمایش شماره خطوط
cat -n alireza1

مثلاً:
1  ali
2 reza
3 linux

—————-
گزینه‌های مهم cat:
cat -n file

شماره‌گذاری خطوط
cat -b file

شماره‌گذاری خطوط غیرخالی
cat -A file

نمایش کاراکترهای مخفی

=—————————=

فرمان paste
دستور paste فایل‌ها را خط‌به‌خط کنار یکدیگر قرار می‌دهد.
فرض کنیم:
alireza1
Ali
Reza
Hassan

alireza2
20
25
30

حالا:
paste alireza1 alireza2

خروجی:
Ali     20
Reza 25
Hassan 30

یعنی برخلاف cat که فایل‌ها را پشت سر هم قرار
—————-
ذخیره خروجی
paste alireza1 alireza2 > alireza4

بعد:
cat alireza4


——————
تغییر جداکننده
به‌صورت پیش‌فرض جداکننده Tab است.
می‌توانیم با -d جداکننده تعیین کنیم:
paste -d ',' alireza1 alireza2

خروجی:
Ali,20
Reza,25
Hassan,30

مثلاً برای ::
paste -d ':' alireza1 alireza2

———————

فرمان od

od مخفف Octal Dump است.
برای مشاهده محتوای فایل به شکل عددی و مخصوصاً بررسی داده‌های باینری استفاده می‌شود.
od alireza1

محتوای فایل را به صورت اعداد اکتال نمایش می‌دهد.
—————-
نمایش Hexadecimal
od -x alireza1

گزینه -x داده‌ها را به صورت Hexadecimal نمایش می‌دهد.
مثلاً:
0000000 6c41 0a69 6572

—————-
نمایش ASCII
od -c alireza1

کاراکترها را نمایش می‌دهد.
نمایش Hex + ASCII
یکی از حالت‌های کاربردی:
od -Ax -tx1z alireza1

برای بررسی فایل‌های باینری و کاراکترهای مخفی بسیار مفید است.

=—————————=

فرمان split
split برای تقسیم کردن یک فایل بزرگ به چند فایل کوچک‌تر استفاده می‌شود.
مثلاً:
split alireza.txt

به صورت پیش‌فرض فایل را به بخش‌هایی تقسیم می‌کند.
فایل‌هایی شبیه:
xaa
xab
xac
xad

ساخته می‌شوند.
——————
تقسیم بر اساس تعداد خطوط
مثلاً هر فایل حداکثر 100 خط داشته باشد:
split -l 100 alireza.txt

یا:
split --lines=100 alireza.txt


————————

تعیین Prefix
به‌صورت پیش‌فرض نام فایل‌ها با x شروع می‌شود.
می‌توانیم خودمان Prefix تعیین کنیم:
split -l 100 alireza.txt part_

خروجی:
part_aa
part_ab
part_ac

———————-

تقسیم بر اساس حجم
مثلاً هر قسمت 1MB:
split -b 1M alireza.txt

یا:
split --bytes=1M alireza.txt

مثلاً 500KB:
split -b 500K alireza.txt


———————-

تقسیم به تعداد مشخص فایل
با -n:
split -n 5 alireza.txt

فایل را به 5 قسمت تقسیم می‌کند.

—————————-

ترکیب دوباره فایل‌های split شده
اگر فایل‌ها:
xaa
xab
xac

باشند:
cat xaa xab xac > original.txt

یا:
cat xa* > original.txt


=——————————=

5. فرمان sort
sort برای مرتب کردن خطوط فایل استفاده می‌شود.
مثلاً:
cat names.txt

Reza
Ali
Hassan
Mohammad

حالا:
sort names.txt

خروجی:
Ali
Hassan
Mohammad
Reza

——————

مرتب‌سازی برعکس
sort -r names.txt


فرض کنیم:
100
20
5
30

اگر بزنیم:
sort numbers.txt

ممکن است ترتیب لغوی بگیریم:
100
20
30
5

برای مرتب‌سازی عددی:
sort -n numbers.txt

نتیجه:
5
20
30
100


—————-

حذف خطوط تکراری هنگام Sort
sort -u names.txt

u یعنی Unique.

=—————————-=

فرمان uniq
uniq خطوط تکراری را حذف می‌کند.
مثلاً:
Ali
Ali
Reza
Reza
Reza
Hassan

اجرای:
uniq names.txt

نتیجه:
Ali
Reza
Hassan

⚠️ نکته بسیار مهم LPIC:
uniq فقط تکرارهای پشت سر هم را حذف می‌کند.
مثلاً:
Ali
Reza
Ali

با:
uniq file

هیچ Aliای حذف نمی‌شود.

برای حذف تمام موارد تکراری:
sort file | uniq

یا کوتاه‌تر:
sort -u file

تعداد تکرارها
uniq -c names.txt

مثلاً:
2 Ali
3 Reza
1 Hassan

فقط خطوط تکراری
uniq -d names.txt
👏1
فرمان ln
ln برای ایجاد Link بین فایل‌ها استفاده می‌شود.
دو نوع اصلی Link داریم:
Hard Link
Symbolic Link

Hard Link
ln alireza.txt backup.txt

حالا دو نام برای یک داده داریم:
alireza.txt
backup.txt
↓
همان inode

اگر یکی را حذف کنیم، داده تا زمانی که لینک دیگری وجود دارد باقی می‌ماند.

—————————

Symbolic Link
با -s:
ln -s alireza.txt shortcut.txt

ساختار:
shortcut.txt → alireza.txt

برای دیدن:
ls -l

مثلاً:
shortcut.txt -> alireza.txt

تفاوت مهم
ln file hard

Hard Link
ln -s file soft


——————————

فرمان less
برای مشاهده فایل‌های بزرگ استفاده می‌شود.
less /var/log/syslog

برخلاف cat لازم نیست کل فایل را یک‌جا روی صفحه نمایش دهد.
کلیدهای مهم:
Space       صفحه بعد
b صفحه قبل
↑ یک خط بالا
↓ یک خط پایین
g ابتدای فایل
G انتهای فایل
q خروج
/word جستجو
n نتیجه بعدی جستجو
N نتیجه قبلی

مثلاً:
less /var/log/syslog

بعد:
/ssh

برای پیدا کردن ssh.

———————————-

فرمان more
مشابه less است:
more file.txt

برای حرکت:
Space       صفحه بعد
Enter یک خط جلو
q خروج

تفاوت معروف:
less
امکانات بیشتری دارد و معمولاً انتخاب بهتری برای مشاهده فایل‌های بزرگ است.


—————————————

فرمان head
برای نمایش ابتدای فایل استفاده می‌شود.
head file.txt

به‌صورت پیش‌فرض 10 خط اول را نمایش می‌دهد.
نمایش 5 خط اول
head -n 5 file.txt

یا:
head -5 file.txt

نمایش تعداد بایت
head -c 20 file.txt

20 بایت اول را نمایش می‌دهد.

——————————-


فرمان tail
برعکس head، انتهای فایل را نمایش می‌دهد.
tail file.txt

10 خط آخر را نمایش می‌دهد.
5 خط آخر
tail -n 5 file.txt


———————————

⭐️ دستورات مهمی که برای LPIC-1 باید مسلط باشی
cat
cat -n
paste
paste -d
od
od -x
split
split -l
split -b
split -n
sort
sort -n
sort -r
sort -u
uniq
uniq -c
uniq -d
ln
ln -s
less
more
head
tail
tail -f

و از همه مهم‌تر، ترکیب این دستورات با | و > و >> است؛ چون در مباحث بعدی LPIC مرتب با آنها کار خواهیم کرد.
👏2
مهم‌ترین کاربرد tail در مدیریت سرور 🔥
گزینه -f:
tail -f /var/log/syslog

یعنی فایل را زنده دنبال کن.
هر چیزی که به انتهای فایل اضافه شود، بلافاصله نمایش داده می‌شود.
این برای مشاهده Live Log بسیار مهم است.
مثلاً:
tail -f /var/log/auth.log

برای مشاهده لحظه‌ای لاگ‌های احراز هویت.
خروج:
Ctrl + C
👏1
ترکیب دستورات 🔥
قدرت واقعی این دستورات زمانی مشخص می‌شود که آنها را با Pipe (|) ترکیب کنیم.
مثلاً:
cat names.txt | sort | uniq

یعنی:
cat
↓
خواندن فایل
↓
sort
↓
مرتب کردن
↓
uniq
↓
حذف تکراری‌ها

یا:
sort names.txt | uniq -c

تعداد تکرار هر نام را نشان می‌دهد.
👏1
یک مثال واقعی‌تر
فرض کن لاگ SSH داریم:
cat /var/log/auth.log | grep "Failed" | sort | uniq -c

این زنجیره:
auth.log
↓
پیدا کردن Failed
↓
مرتب کردن
↓
شمردن موارد تکراری

برای Linux Administration و Security بسیار مهم است.
👏2
قسمت سیزدهم — خلاصه کردن فایل ها 🐧

——————

wc
برای شمارش خط، کلمه و کاراکتر/بایت فایل استفاده می‌شود:
wc ali

فقط تعداد خطوط:
wc -l ali

——————————————
cut

برای جدا کردن بخش‌هایی از هر خط استفاده می‌شود.
مثلاً فایل /etc/passwd با : جدا شده است:
cut -d ":" -f 1-7 /etc/passwd

ذخیره خروجی در فایل:
cut -d ":" -f 1-7 /etc/passwd > user_shell

-d → مشخص کردن جداکننده
-f → انتخاب Field

————————

md5sum
برای تولید MD5 Hash فایل:
md5sum alireza


-----
sha256sum

برای تولید SHA-256 Hash:
sha256sum alireza


----------
sha512sum

برای تولید SHA-512 Hash:
sha512sum alireza

Hash برای بررسی Integrity فایل کاربرد دارد؛ اگر محتوای فایل تغییر کند، Hash آن نیز تغییر می‌کند.


==================

قسمت چهاردهم — جستجو با فرمان grep 🐧

——————
خط (Line) چیست؟
در فایل‌های متنی، هر بخش از متن که با Enter از بخش بعدی جدا شود، یک Line محسوب می‌شود.

grep چیست؟
grep برای جستجو و پیدا کردن متن، کلمه یا الگو (Pattern) داخل فایل‌ها و خروجی دستورات استفاده می‌شود.
ساختار کلی:
grep [option] "pattern" file

مثال‌های ساده

جستجوی یک کلمه در فایل:
grep "root" /etc/passwd


جستجوی بدون حساسیت به حروف بزرگ و کوچک:
grep -i "root" /etc/passwd


نمایش شماره خط:
grep -n "root" /etc/passwd


جستجوی چند کلمه:
grep -E "root|admin|user" /etc/passwd


جستجو در خروجی یک Command

با Pipe:
ps aux | grep ssh

یعنی خروجی ps aux را به grep می‌دهیم تا فقط خطوط مربوط به ssh نمایش داده شوند.

مدل‌های مهم جستجو با grep

1. جستجوی معمولی
grep "linux" file.txt


2. جستجوی معکوس —
-v
خطوطی که شامل کلمه نیستند:
grep -v "linux" file.txt


3. جستجوی بدون حساسیت —
-i
grep -i "Linux" file.txt


4. نمایش شماره خط —
-n
grep -n "linux" file.txt


5. جستجوی کلمه کامل —
-w
grep -w "root" /etc/passwd

مثلاً root را پیدا می‌کند ولی root123 را Match نمی‌کند.

6. جستجوی بازگشتی — -r
جستجو داخل پوشه و زیرپوشه‌ها:
grep -r "password" /etc/


7. نمایش تعداد Matchها — -c
grep -c "root" /etc/passwd


ترکیب چند Option
grep -in "error" logfile

یعنی:
-i → حساس نبودن به حروف
-n → نمایش شماره خط
"error" → عبارت جستجو
logfile → فایل موردنظر

نکته مهم

grep فقط برای جستجوی یک کلمه نیست؛ می‌توانیم با Regular Expression (Regex) الگوهای پیچیده‌تر هم جستجو کنیم.
مثلاً:
grep -E "^[0-9]+" file.txt

خط‌هایی را پیدا می‌کند که با یک یا چند عدد شروع می‌شوند.
=======================
❤1👏1
قسمت پانزدهم — redirect 🐧

stdin
— ورودی استاندارد
معمولاً ورودی از Keyboard گرفته می‌شود.
cat

هر چیزی تایپ کنید، cat دریافت و نمایش می‌دهد. برای پایان:
Ctrl + D

stdout — خروجی استاندارد
خروجی عادی برنامه در Terminal نمایش داده می‌شود:
ls

stderr — خطای استاندارد
پیغام‌های خطا از stderr خارج می‌شوند:
ls /abc

Redirection با >
خروجی stdout را داخل فایل می‌فرستد.
echo "hello" > test.txt

اگر فایل وجود داشته باشد، محتوای قبلی جایگزین می‌شود.

>> — اضافه کردن به فایل
echo "hello" >> test.txt

محتوای جدید به انتهای فایل اضافه می‌شود.

< — گرفتن ورودی از فایل
cat < test.txt

یعنی محتوای test.txt به‌عنوان stdin وارد cat می‌شود.
مثال:
tr " " ":" < no

تمام Spaceهای ورودی را به : تبدیل می‌کند.

2> — انتقال خطا
شماره stderr برابر 2 است:
ls /abc 2> error.txt

خروجی خطا داخل error.txt ذخیره می‌شود.

2>> — اضافه کردن خطا
ls /abc 2>> error.txt

خطا را به انتهای فایل اضافه می‌کند.

1> — انتقال stdout
شماره stdout برابر 1 است:
ls 1> output.txt

معادل این است:
ls > output.txt

انتقال stdout و stderr همزمان
روش رایج:
command > output.txt 2> error.txt

یا در Bash:
command &> all.txt

یعنی خروجی عادی و خطا هر دو داخل یک فایل می‌روند.

اضافه کردن stdout و stderr به یک فایل
command >> all.txt 2>&1

اینجا:
stdout → all.txt
stderr → stdout → all.txt

ترتیب مهم است.

2>&1 چیست؟
یعنی:
stderr
را به همان جایی بفرست که

stdout
می‌رود.

مثلاً:
command > output.txt 2>&1

هم خروجی معمولی و هم خطا داخل output.txt ذخیره می‌شوند.

&> در Bash
روش کوتاه‌تر:
command &> output.txt

هر دو مورد را Redirect می‌کند:
stdout + stderr → output.txt

/dev/null
یک فایل ویژه است که هر چیزی داخل آن Redirect شود، دور ریخته می‌شود.
command > /dev/null

فقط خروجی عادی حذف می‌شود.
برای حذف خطا:
command 2> /dev/null

برای حذف هر دو:
command &> /dev/null

این مورد در مدیریت سرور و اسکریپت‌نویسی خیلی مهم است.

=============================

قسمت شانزدهم — pipe 🐧
————————

قسمت شانزدهم — Pipe 🐧
Pipe (|) برای انتقال خروجی یک دستور به‌عنوان ورودی دستور بعدی استفاده می‌شود.
ساختار:
command1 | command2

یعنی:
command1 → stdout → | → stdin → command2

مثال‌های ساده
نمایش فایل‌ها و جستجوی یک مورد:
ls | grep "test"

نمایش پردازش‌های مربوط به SSH:
ps aux | grep ssh

شمارش تعداد فایل‌ها:
ls | wc -l

نمایش کاربران دارای Shell خاص:
cat /etc/passwd | grep "/bin/bash"

چند Pipe پشت سر هم
می‌توانیم چند دستور را به هم متصل کنیم:
cat /etc/passwd | grep "/bin/bash" | cut -d ":" -f 1

اینجا:
cat
↓
grep
↓
cut

یعنی ابتدا فایل خوانده می‌شود، سپس خطوط موردنظر پیدا می‌شوند و در نهایت فقط Field اول نمایش داده می‌شود.
Pipe با > ترکیب می‌شود
ps aux | grep ssh > ssh.txt

خروجی grep داخل فایل ssh.txt ذخیره می‌شود.

تفاوت Pipe و Redirection
command > file

خروجی را به فایل می‌فرستد.
command1 | command2

خروجی دستور اول را به ورودی دستور دوم می‌دهد.

نکته مهم
Pipe معمولاً روی stdout کار می‌کند؛ یعنی خروجی استاندارد را به stdin دستور بعدی منتقل می‌کند.

stdin  →  0
stdout → 1
stderr → 2

مثال کاربردی LPIC:
cat /etc/passwd | grep root | cut -d ":" -f 1

خروجی هر مرحله وارد مرحله بعدی می‌شود.

================

قسمت هفدهم — sed 🐧
————

sed (Stream Editor) برای جستجو، حذف، جایگزینی و ویرایش متن در فایل‌ها استفاده می‌شود؛ بدون اینکه لازم باشد فایل را با Editor باز کنیم.
جایگزینی متن
sed 's/unix/linux/' file.txt

اولین unix در هر خط را به linux تبدیل می‌کند.
جایگزینی همه موارد در هر خط
sed 's/unix/linux/g' file.txt

g یعنی همه موارد.
جایگزینی و ذخیره تغییرات در فایل
sed -i 's/unix/linux/g' file.txt

-i یعنی تغییرات مستقیماً داخل فایل اعمال شود.
حذف یک خط
مثلاً حذف خط سوم:
sed '3d' file.txt

حذف چند خط
sed '2,5d' file.txt

خطوط ۲ تا ۵ را حذف می‌کند.
نمایش یک خط خاص
sed -n '5p' file.txt

فقط خط پنجم را نمایش می‌دهد.
نمایش محدوده‌ای از خطوط
sed -n '2,5p' file.txt

خطوط ۲ تا ۵ را نمایش می‌دهد.
اضافه کردن متن
قبل از خط سوم:
sed '3i\Hello' file.txt

بعد از خط سوم:
sed '3a\Hello' file.txt

مثال جذاب 🔥
فرض کنید فایل این باشد:
unix is great
unix is free
unix is powerful

با:
sed -i 's/unix/Linux/g' file.txt

تبدیل می‌شود به:
Linux is great
Linux is free
Linux is powerful

خلاصه دستورات مهم
s   → جایگزینی
g → همه موارد
-i → اعمال تغییر روی فایل
d → حذف
p → نمایش
-n → جلوگیری از نمایش خودکار
i → اضافه کردن قبل از خط
a → اضافه کردن بعد از خط

نکته LPIC: یکی از مهم‌ترین کاربردهای sed، ویرایش سریع فایل‌های کانفیگ و استفاده در Shell Script است.

================
👏1
قسمت هیجدهم - کار با xargs
—————————

xargs
خروجی یک دستور را می‌گیرد و به‌عنوان Argument به دستور دیگری می‌دهد.
ساختار کلی:
command | xargs [options] command

دستورات و Optionهای مهم xargs
-n → تعداد Argument در هر اجرا:
echo "1 2 3 4 5" | xargs -n 2 echo

هر بار ۲ Argument به echo می‌دهد.
-I → مشخص کردن محل قرارگیری Argument:
echo "ali reza" | xargs -n 1 -I {} echo "Hello {}"

{} با مقدار ورودی جایگزین می‌شود.
-d → مشخص کردن جداکننده:
echo "ali:reza:amir" | xargs -d ":" echo

-0 → دریافت ورودی با Null Separator؛ معمولاً همراه find -print0 برای نام فایل‌های دارای فاصله:
find . -type f -print0 | xargs -0 ls

-a → خواندن ورودی از فایل:
xargs -a users.txt echo

-r → اگر ورودی خالی بود، دستور را اجرا نکن:
cat empty.txt | xargs -r echo

-t → قبل از اجرا، دستور ساخته‌شده را نمایش بده:
echo "file1 file2" | xargs -t rm

-p → قبل از اجرای هر دستور تأیید می‌گیرد:
echo "file1 file2" | xargs -p rm

-L → تعداد خطوط ورودی در هر اجرا:
printf "ali\nreza\namir\n" | xargs -L 1 echo

-P → اجرای موازی چند Process:
cat urls.txt | xargs -n 1 -P 4 ping -c 1

یعنی حداکثر ۴ کار همزمان اجرا می‌شوند.
-s → حداکثر اندازه Command ساخته‌شده:
echo "1 2 3" | xargs -s 20 echo

-E → مشخص کردن رشته پایان ورودی:
echo "1 2 STOP 3 4" | xargs -E STOP echo

🔥 مثال مهم: حذف هزاران فایل
find /tmp -type f -name "*.log" -print0 | xargs -0 rm

یا اگر می‌خواهی با هر فایل جداگانه اجرا شود:
find /tmp -type f -name "*.log" -print0 | xargs -0 -n 1 rm

ترکیب‌های خیلی کاربردی
find . -type f -name "*.txt" -print0 | xargs -0 wc -l

تعداد خطوط فایل‌های TXT.
find . -type f -name "*.log" -print0 | xargs -0 -P 4 gzip

فشرده‌سازی موازی با ۴ Process.
خلاصه برای حفظ کردن
-n   تعداد Argument در هر اجرا
-I جایگزین کردن Argument
-d تعیین جداکننده
-0 ورودی Null-separated
-a خواندن از فایل
-r اجرا نکردن در ورودی خالی
-t نمایش دستور قبل از اجرا
-p تأیید قبل از اجرا
-L تعداد خطوط در هر اجرا
-P اجرای موازی
-s محدودیت اندازه Command
-E تعیین پایان ورودی

مهم‌ترین ترکیب LPIC:
find + xargs -0 مخصوصاً برای کار با تعداد زیادی فایل و نام فایل‌های دارای فاصله بسیار کاربردی است.
👏1
تا رو فعلاً حفظ کن:
1️⃣ Redirection — انتقال خروجی و ورودی
>       خروجی → فایل (جایگزین)
>> خروجی → فایل (اضافه)
< ورودی ← فایل
2> خطا → فایل
2>> خطا → فایل (اضافه)

مثال:
ls > list.txt
echo hello >> list.txt
cat < list.txt
ls /abc 2> error.txt

================

2️⃣ Pipe | — اتصال دستورات
command1 | command2

یعنی:
خروجی دستور اول → ورودی دستور دوم
ls | grep txt
ps aux | grep ssh
cat /etc/passwd | grep root

حتی می‌توانی چندتا را زنجیره کنی:
cat /etc/passwd | grep bash | cut -d ":" -f 1

================

3️⃣ sed — تغییر متن ✏️
sed 's/old/new/' file

تغییر اولین مورد در هر خط.
sed 's/old/new/g' file

تغییر همه موارد.
sed -i 's/old/new/g' file

تغییر مستقیم داخل فایل.
حذف خط:
sed '3d' file

نمایش خط:
sed -n '3p' file

پس:
sed = جستجو + تغییر + حذف + نمایش متن

===================

4️⃣ xargs — دادن خروجی به دستور بعدی 📦
command1 | xargs command2

مثال:
echo "a.txt b.txt" | xargs rm

یعنی:
a.txt b.txt
↓
xargs
↓
rm

برای تعداد زیاد فایل:
find . -name "*.log" | xargs rm

روش امن‌تر برای اسم فایل‌های دارای فاصله:
find . -name "*.log" -print0 | xargs -0 rm

چند Option مهم:
-n  → تعداد ورودی در هر اجرا
-I → مشخص کردن جای ورودی
-0 → ورودی امن با Null
-P → اجرای موازی
-r → اگر ورودی خالی بود اجرا نکن

🔥 خلاصه نهایی
>       خروجی → فایل
| خروجی → دستور بعدی
sed ویرایش متن
xargs خروجی → Argument دستور

اگر همین چهار مفهوم را خوب یاد بگیری، بخش بزرگی از کار با Shell و Linux برات خیلی راحت‌تر میشه.
👏1
tr — تبدیل یا حذف کاراکترها 🔄
tr برای جایگزینی، تبدیل و حذف کاراکترها استفاده میشه.
تبدیل Space به ::
echo "ali reza" | tr " " ":"

خروجی:
ali:reza

تبدیل حروف کوچک به بزرگ:
echo "hello" | tr 'a-z' 'A-Z'

خروجی:
HELLO

حذف یک کاراکتر:
echo "hello123" | tr -d '0-9'

خروجی:
hello

حذف Space:
echo "ali reza" | tr -d ' '

مثال با فایل:
tr " " ":" < file.txt

🧠 مهم‌ترین‌ها:
tr "a" "b"     → جایگزینی
tr 'a-z' 'A-Z' → تبدیل حروف کوچک به بزرگ
tr -d "x" → حذف کاراکتر


==============================
tee — نمایش + ذخیره همزمان 📺

tee خروجی را هم روی صفحه نشان می‌دهد و هم داخل فایل می‌نویسد.
echo "hello" | tee test.txt

هم hello را می‌بینی، هم داخل test.txt ذخیره می‌شود.
اضافه کردن به انتهای فایل:
echo "hello" | tee -a test.txt

مثال:
ls | tee list.txt

خروجی ls هم نمایش داده می‌شود و هم داخل list.txt ذخیره می‌شود.
🧠 خلاصه:
tr    → تبدیل / جایگزینی / حذف کاراکتر
tee → نمایش خروجی + ذخیره در فایل

مثلاً این ترکیب خیلی خوبه:
cat file.txt | tr 'a-z' 'A-Z' | tee result.txt

یعنی:
فایل → تبدیل حروف به بزرگ → نمایش روی صفحه → ذخیره در result.txt.
👏1
شروع فصل دوم
================
قسمت نوزده - مقدمه
———————-
در این فصل ما نصب برنامه ها رو یاد میگیریم
مخصوصا zabbix و mux

==================
قسمت بیست - مفاهیم نصب
———-
1️⃣ دسته‌بندی توزیع‌ها
دو خانواده مهم:
Red Hat → AlmaLinux, Rocky, RHEL, Fedora
Debian → Debian, Ubuntu, Linux Mint

2️⃣ نصب Online و Offline
Online  → دانلود Package از Repository
Offline → نصب Package موجود روی سیستم

3️⃣ Repository (مخزن)
جایی که Packageها و اطلاعات مربوط به آن‌ها نگهداری می‌شوند.
مثلاً در Debian:
/etc/apt/sources.list

4️⃣ Source Code
کد اصلی برنامه که انسان می‌تواند آن را بخواند و در صورت نیاز Compile کند.
Source Code
↓
Compiler
↓
Binary

5️⃣ Binary
فایل قابل اجرای برنامه است که سیستم می‌تواند مستقیماً اجرا کند.
مثلاً:
/usr/bin/ls

🧠 خلاصه
Repository → محل دریافت Package
Package → بسته نرم‌افزاری
Source Code → کد اصلی برنامه
Binary → فایل قابل اجرای برنامه
Online → دریافت از اینترنت
Offline → نصب از فایل موجود

نکته مهم: در لینوکس معمولاً نرم‌افزار را مستقیماً از سایت‌های مختلف دانلود نمی‌کنیم؛ بهتر است از Package Manager و Repository معتبر توزیع استفاده کنیم.
==============
👏1
قسمت بیست‌ویک — نصب نرم‌افزار از Source 🐧
————————————

tmux چیست؟

tmux یک Terminal Multiplexer است؛ اجازه می‌دهد چند Session و Terminal را داخل یک اتصال SSH مدیریت کنیم و اگر SSH قطع شد، برنامه‌ها همچنان اجرا بمانند.
⚠️ برای تمرین بهتره روی VM تستی نصب کنید، نه سرور اصلی.


1️⃣ تشخیص سیستم‌عامل
cat /etc/os-release

اطلاعات توزیع، نسخه و نام سیستم‌عامل را نمایش می‌دهد.

2️⃣ نصب ابزارهای لازم
dnf install git

نصب git.

dnf groupinstall "Development Tools"

ابزارهای لازم برای Compile کردن Source Code را نصب می‌کند.
مثلاً gcc، make و ابزارهای توسعه.

برای automake:
dnf install automake


3️⃣ دریافت Source Code
git clone URL

یک Repository را از Git دریافت می‌کند.
مثلاً:
git clone https://github.com/tmux/tmux.git
cd tmux


4️⃣ آماده‌سازی و نصب از Source
معمولاً روند کلی:
Source Code
↓
Configure
↓
make
↓
make install

در پروژه‌هایی مثل tmux ممکن است ابتدا نیاز باشد:
sh autogen.sh

سپس:
./configure
make
sudo make install

configure → بررسی سیستم و ساخت تنظیمات نصب
make → Source Code را Compile می‌کند
make install → فایل‌های ساخته‌شده را نصب می‌کند

5️⃣جستجوی Package با dnf
dnf search tmux

برای جستجوی Packageهای مرتبط با tmux در Repositoryهاست.

برای دیدن اطلاعات یک Package:
dnf info tmux

و برای نصب:
dnf install tmux

🧠 خلاصه
cat /etc/os-release → تشخیص سیستم‌عامل
git clone → دریافت Source
dnf search → جستجوی Package
./configure → آماده‌سازی
make → Compile
make install → نصب


نکته:
نصب با dnf install tmux با نصب از Source فرق دارد؛ در حالت اول Package Manager نسخه آماده را از Repository نصب می‌کند، اما در حالت دوم خودت Source Code را Compile می‌کنی.

==========================

قسمت بیست و دو — rpm and deb 🐧
————————
دو فرمت اصلی Package در لینوکس:
Red Hat → .rpm
Debian → .deb

ساختار کلی:
package-name-version-release.architecture.rpm
package-name-version-release.architecture.deb

مثلاً:
tmux-3.x.x-1.x86_64.rpm

دانلود Package بدون نصب

در AlmaLinux / Red Hat:
dnf download tmux

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

برای Debian معمولاً:
apt download tmux

فایل .deb را دانلود می‌کند.

نصب RPM
rpm -ivh package.rpm

یا روش پیشنهادی:
dnf install ./package.rpm

نصب DEB
dpkg -i package.deb

یا:
apt install ./package.deb


sudo -i
چیست؟ 👑
sudo -i

یک Login Shell با دسترسی Root باز می‌کند.

یعنی بعد از اجرای آن:
whoami

خروجی:
root

تفاوت مهم:
sudo command   → فقط همان دستور با دسترسی root

sudo -i → وارد محیط root می‌شوی

برای خروج:
exit

🧠 خلاصه:
.rpm → Red Hat / AlmaLinux
.deb → Debian / Ubuntu

rpm → مدیریت مستقیم RPM
dpkg → مدیریت مستقیم DEB

dnf → Package Manager در AlmaLinux
apt → Package Manager در Debian/Ubuntu

sudo -i → ورود به Shell با دسترسی root


==================
👏1
قسمت بیست و سه — install debian 🐧
————————————————

اول مخازن را به‌روز می‌کنیم:
apt update

نصب Package:
apt install tmux

نصب بدون پرسش:
apt install -y tmux

حذف:
apt remove tmux

حذف کامل همراه Configuration:
apt purge tmux

آپدیت Packageها:
apt upgrade

جستجوی Package:
apt search tmux

اطلاعات Package:
apt show tmux

لیست Packageهای نصب‌شده:
apt list --installed

——————————
2️⃣ نصب بدون Repository با dpkg
اگر فایل .deb داشته باشیم:
dpkg -i package.deb

اگر Dependency کم بود:
apt install -f

حذف Package:
dpkg -r tmux

حذف کامل:
dpkg -P tmux

بررسی نصب بودن:
dpkg -l tmux

جستجو بین Packageهای نصب‌شده:
dpkg -l | grep tmux

نمایش اطلاعات:
dpkg -s tmux

نمایش فایل‌هایی که یک Package نصب کرده:
dpkg -L tmux

بررسی اینکه یک فایل متعلق به کدام Package است:
dpkg -S /usr/bin/tmux

——————-

3️⃣ su -l چیست؟ 👑
su -l

برای ورود به حساب کاربر دیگر با محیط Login کامل است.
برای ورود به Root:
su -l

یا کوتاه‌تر:
su -

بعد رمز Root را می‌خواهد.
بررسی:
whoami

خروج:
exit

تفاوت:
su -l       → ورود به Root با محیط Login
sudo -i → ورود به Root با sudo

——————————

4️⃣ اگر apt update خطا داد
یکی از علت‌های رایج در Debian این است که Repository مربوط به DVD/ISO فعال باشد.
فایل مخازن:
nano /etc/apt/sources.list

اگر خطی شبیه این دیدی:
deb cdrom:[Debian ...]

آن را Comment کن:
# deb cdrom:[Debian ...]

یعنی # اول خط بگذار.
بعد:
apt update

————————-

🧠 خلاصه:
apt     → مدیریت Package از Repository
dpkg → مدیریت مستقیم فایل .deb
apt update → بروزرسانی لیست مخازن
apt install → نصب
apt remove → حذف
apt purge → حذف کامل
dpkg -i → نصب .deb
dpkg -r → حذف
dpkg -l → لیست/وضعیت Package
dpkg -L → فایل‌های Package
su -l → ورود به کاربر با Login کامل


نکته:
در Debian امروزی معمولاً تنظیمات Repositoryها ممکن است علاوه بر /etc/apt/sources.list در فایل‌های داخل /etc/apt/sources.list.d/ هم باشند.
👏1
قسمت بیست و چهار — install redhat 🐧
———————

حالا همین مباحث قسمت قبل را در AlmaLinux / Red Hat انجام می‌دهیم.
1️⃣ نصب از Repository با dnf
آپدیت مخازن:
dnf check-update

نصب:
dnf install tmux

حذف:
dnf remove tmux

جستجو:
dnf search tmux

اطلاعات Package:
dnf info tmux

آپدیت Packageها:
dnf update

لیست Packageهای نصب‌شده:
dnf list installed


———————————-

2️⃣ مدیریت مستقیم RPM با rpm
نصب فایل .rpm:
rpm -ivh package.rpm

آپدیت:
rpm -Uvh package.rpm

حذف:
rpm -e package-name

بررسی نصب بودن:
rpm -q tmux

نمایش اطلاعات:
rpm -qi tmux

نمایش فایل‌های نصب‌شده توسط Package:
rpm -ql tmux

پیدا کردن اینکه یک فایل متعلق به کدام Package است:
rpm -qf /usr/bin/tmux

نمایش Packageهای نصب‌شده:
rpm -qa


————————-

🧠 تفاوت مهم
Red Hat / AlmaLinux

dnf → مدیریت Package و Dependency از Repository
rpm → مدیریت مستقیم فایل‌های .rpm

مثلاً:
dnf install tmux

از Repository نصب می‌کند.
اما:
rpm -ivh tmux.rpm

مستقیماً فایل RPM را نصب می‌کند.
مقایسه با Debian
Debian              Red Hat

apt install dnf install
dpkg -i rpm -ivh
apt remove dnf remove
apt search dnf search
dpkg -l rpm -qa
dpkg -L rpm -ql
dpkg -S rpm -qf

نکته مهم LPIC: در Red Hatهای جدید مثل AlmaLinux، dnf ابزار اصلی مدیریت Package است؛ yum در بسیاری از سیستم‌ها به dnf اشاره می‌کند.

———————————

در AlmaLinux / Red Hat فایل‌های Repository معمولاً اینجا هستند:
/etc/yum.repos.d/

دیدن Repositoryها
ls /etc/yum.repos.d/

معمولاً فایل‌هایی با پسوند .repo می‌بینی.
برای ویرایش:
nano /etc/yum.repos.d/almalinux.repo

یا اگر فایل دیگری بود:
nano /etc/yum.repos.d/اسم-فایل.repo

بعد از تغییر Repository:
dnf clean all
dnf makecache
dnf update

🧠 حفظ کن:
Debian:
/etc/apt/sources.list
/etc/apt/sources.list.d/

Red Hat:
/etc/yum.repos.d/*.repo

اگر AlmaLinux 9 داری و dnf خطای Repository می‌دهد، اول این را بزن:
dnf repolist

تا ببینی کدام Repository مشکل دارد.
👏1
قسمت بیست و پنج - snap and app image

——————————-

گاهی نرم‌افزار در Repository رسمی توزیع وجود ندارد؛ چند روش دیگر داریم:
1️⃣ Repository خود پروژه
بعضی پروژه‌ها Repository اختصاصی دارند.
Repository رسمی Linux
↓
Repository خود پروژه
↓
نصب Package

مزیتش این است که معمولاً نسخه جدیدتر نرم‌افزار را دریافت می‌کنیم.
———————

2️⃣ نصب از Source Code
کد برنامه را دریافت و خودمان Compile می‌کنیم:
Source Code
↓
configure
↓
make
↓
make install

———————-

3️⃣ Snap چیست؟
Snap یک سیستم Package Management است که توسط Canonical ساخته شده.
برنامه‌ها به‌صورت Snap Package نصب می‌شوند و وابستگی‌های موردنیازشان را تا حد زیادی همراه خود دارند.
نصب:
snap install tmux

دیدن Packageها:
snap list

حذف:
snap remove tmux

————————

4️⃣ ابزارهای مشابه Snap
سیستم‌های دیگری هم برای نصب نرم‌افزار وجود دارند، مثل:
Snap
Flatpak
AppImage

مثلاً Flatpak:
flatpak install flathub org.gimp.GIMP


————————

5️⃣ AppImage چیست؟
AppImage یک روش اجرای نرم‌افزار است که معمولاً بدون نصب سنتی Package اجرا می‌شود.
مثلاً:
chmod +x program.AppImage
./program.AppImage

یعنی:
AppImage
↓
Executable File
↓
اجرا

🧠 خلاصه
Repository        → نصب از مخزن
Source Code → دریافت کد و Compile
Snap → Package مستقل
Flatpak → Package مستقل
AppImage → فایل اجرایی قابل حمل


نکته:
Snap و Flatpak بیشتر روی محیط‌های Desktop دیده می‌شوند، ولی در بعضی سرورها هم قابل استفاده‌اند. برای سرورهای Linux معمولاً اولویت با Package Manager رسمی مثل dnf و apt است.

======================
👏1