فصل چهارم - قسمت سی و نهم - مدیریت کردن فایل ها - intro
——————
بخش اول مدیریت فایل
بخش دوم فشرده سازی و ارشیو کردن و فایل و لینک
بخش سوم سطح دسترسی به فایل ها
بهش چهارم فرمان های جستجور در لینوکس
🧠 نقشه فصل چهار
این فصل خیلی مهمه؛ مخصوصاً Permission + find + tar چون هم در کار واقعی لینوکس زیاد استفاده میشن و هم برای LPIC مهماند
——————
بخش اول مدیریت فایل
بخش دوم فشرده سازی و ارشیو کردن و فایل و لینک
بخش سوم سطح دسترسی به فایل ها
بهش چهارم فرمان های جستجور در لینوکس
🧠 نقشه فصل چهار
فصل ۴
│
├── 1. مدیریت فایل و Directory
│ ├── cp
│ ├── mv
│ ├── rm
│ ├── mkdir
│ └── stat / file
│
├── 2. Archive / Compression / Link
│ ├── tar
│ ├── gzip
│ ├── bzip2
│ ├── xz
│ ├── zip
│ └── ln
│
├── 3. Permission
│ ├── chmod
│ ├── chown
│ ├── chgrp
│ └── umask
│
└── 4. Search
├── find
├── locate
├── which
├── whereis
└── grep
این فصل خیلی مهمه؛ مخصوصاً Permission + find + tar چون هم در کار واقعی لینوکس زیاد استفاده میشن و هم برای LPIC مهماند
👏1
فصل چهارم — قسمت چهلم 🐧
مدیریت فایلها — بخش اول
————
در این قسمت میخوایم یاد بگیریم چطور فایل و Directory بسازیم، ببینیم، کپی کنیم، جابهجا کنیم و حذف کنیم.
—————--
1. ساخت فایل با
سادهترین روش ساخت یک فایل خالی:
حالا:
فایل
————
2. ساخت فایل با ویرایشگر
مثلاً با
داخلش متن بنویس و ذخیره کن.
پس فایل همزمان ساخته و ویرایش میشود.
———————
3. ساخت فایل با
این هم روشی است که قبلاً یاد گرفتیم:
یک فایل خالی میسازد.
یا:
هم فایل را ایجاد میکند و هم داخلش متن مینویسد.
⚠️ اگر فایل از قبل وجود داشته باشد،
برای اضافه کردن متن:
—————-
4. ساخت فایل با
مثلاً:
یک فایل جدید به نام
اما
یعنی اسم
————-
5.
نمایش مسیر فعلی:
مثلاً:
یعنی الان در این Directory هستی.
——————
6.
نمایش محتویات Directory:
نمایش فایلهای مخفی:
نمایش جزئیات:
هر دو:
———————-
Wildcard چیست؟ ⭐️
این قسمت خیلی مهمه.
مثلاً:
یعنی:
مثلاً:
یک مثال دیگر:
یعنی فایلهایی که با
————-
8.
مثلاً:
میتواند پیدا کند:
ولی:
را پیدا نمیکند، چون بین
—————-
دو تا
یعنی:
مثلاً:
—————-
9.
برای انتخاب یک کاراکتر از بین گزینههای مشخص:
یعنی:
پس:
را پیدا میکند.
اما:
نه.
——————
10. ترکیب Wildcard با
مثلاً:
یعنی:
——————
11. ساخت Directory با
یک Directory به نام
——————-
ساخت چند Directory تو در تو
نتیجه:
——————
12. حذف Directory
برای Directory خالی:
⚠️
اگر داخلش فایل داشته باشد، خطا میدهد.
برای حذف Directory همراه محتویات:
——————
13. کپی Directory با
برای کپی کردن Directory باید
یعنی Directory
در نتیجه:
به اینجا کپی میشود:
—————
14. حذف فایلها با
یک فایل:
چند فایل:
با Wildcard:
——————-
⚠️ دستور خطرناک
یعنی:
خیلی مراقب این دستور باش.
قبلش حتماً:
را بزن تا مطمئن شوی در مسیر درست هستی.
و یادت باشد
—————-
🧠 جمعبندی قسمت ۴۰
ساخت:
دیدن:
کپی و انتقال:
حذف:
rm file
rmdir dir
rm -r dir
Wildcard:
* → هر تعداد کاراکتر
? → دقیقاً یک کاراکتر
[abc] → یکی از a یا b یا c
مثلاً:
ls *.txt
ls b?t
ls b??d
ls b[eio]t
این قسمت در واقع پایهی مدیریت فایل در لینوکسه؛ قسمت بعدی میتونیم بریم سراغ file، stat و تفاوت دقیق فایل معمولی، Directory، Link و بقیه نوع فایلها.
مدیریت فایلها — بخش اول
————
در این قسمت میخوایم یاد بگیریم چطور فایل و Directory بسازیم، ببینیم، کپی کنیم، جابهجا کنیم و حذف کنیم.
—————--
1. ساخت فایل با
touchسادهترین روش ساخت یک فایل خالی:
touch alireza
حالا:
ls
فایل
alireza را میبینی.touchاگر فایل وجود نداشته باشد آن را ایجاد میکند؛ اگر وجود داشته باشد معمولاً Timestamp آن را تغییر میدهد.
————
2. ساخت فایل با ویرایشگر
مثلاً با
nano:nano alireza2
داخلش متن بنویس و ذخیره کن.
پس فایل همزمان ساخته و ویرایش میشود.
———————
3. ساخت فایل با
>این هم روشی است که قبلاً یاد گرفتیم:
> alireza3
یک فایل خالی میسازد.
یا:
echo "Hello Linux" > alireza3
هم فایل را ایجاد میکند و هم داخلش متن مینویسد.
⚠️ اگر فایل از قبل وجود داشته باشد،
> محتوای قبلی را پاک و جایگزین میکند.برای اضافه کردن متن:
echo "New line" >> alireza3
—————-
4. ساخت فایل با
cp و mvمثلاً:
cp test.txt backup.txt
یک فایل جدید به نام
backup.txt ایجاد میشود.اما
mv معمولاً فایل جدید ایجاد نمیکند؛ فایل را جابهجا یا Rename میکند:mv passwd alireza88
یعنی اسم
passwd به alireza88 تغییر میکند.————-
5.
pwdنمایش مسیر فعلی:
pwd
مثلاً:
/home/alireza
یعنی الان در این Directory هستی.
——————
6.
lsنمایش محتویات Directory:
ls
نمایش فایلهای مخفی:
ls -a
نمایش جزئیات:
ls -l
هر دو:
ls -la
———————-
Wildcard چیست؟ ⭐️
این قسمت خیلی مهمه.
* یعنی:هر تعداد کاراکتر
مثلاً:
ls *.txt
یعنی:
همه فایلهایی که با
.txtتمام میشوند.
مثلاً:
ali.txt
test.txt
password.txt
یک مثال دیگر:
ls c*
یعنی فایلهایی که با
c شروع میشوند:cat
config
cpuinfo
————-
8.
? چیست؟? یعنی دقیقاً یک کاراکتر.مثلاً:
ls b?t
میتواند پیدا کند:
bat
bet
bit
bot
ولی:
boot
را پیدا نمیکند، چون بین
b و t سه کاراکتر داریم.—————-
دو تا
?ls b??d
یعنی:
b + دو کاراکتر + d
مثلاً:
bond
bird
bard
—————-
9.
[ ] چیست؟برای انتخاب یک کاراکتر از بین گزینههای مشخص:
ls b[eio]t
یعنی:
b + یکی از e/i/o + t
پس:
bet
bit
bot
را پیدا میکند.
اما:
bat
نه.
——————
10. ترکیب Wildcard با
mvمثلاً:
mv *.txt ../
یعنی:
تمام فایلهای
.txtرا به Directory یک سطح بالاتر منتقل کن.
.. یعنی Directory والد.——————
11. ساخت Directory با
mkdirmkdir test
یک Directory به نام
test میسازد.——————-
ساخت چند Directory تو در تو
mkdir -p 1/2/3
نتیجه:
1/
└── 2/
└── 3/
-p باعث میشود Directoryهای والد هم در صورت نبودن ساخته شوند.——————
12. حذف Directory
برای Directory خالی:
rmdir test
⚠️
rmdir فقط Directory خالی را حذف میکند.اگر داخلش فایل داشته باشد، خطا میدهد.
برای حذف Directory همراه محتویات:
rm -r test
——————
13. کپی Directory با
cpبرای کپی کردن Directory باید
-r استفاده کنیم:cp -R /etc/ssh /
یعنی Directory
ssh و محتویاتش را به / کپی کن.در نتیجه:
/etc/ssh
به اینجا کپی میشود:
/ssh
—————
14. حذف فایلها با
rmیک فایل:
rm test.txt
چند فایل:
rm file1 file2 file3
با Wildcard:
rm *.txt
——————-
⚠️ دستور خطرناک
rm -rf *
یعنی:
تمام فایلها و Directoryهای معمولی موجود در مسیر فعلی را بهصورت بازگشتی و بدون سؤال حذف کن.
خیلی مراقب این دستور باش.
قبلش حتماً:
pwd
ls
را بزن تا مطمئن شوی در مسیر درست هستی.
و یادت باشد
* معمولاً فایلهای مخفی که با . شروع میشوند را شامل نمیشود.—————-
🧠 جمعبندی قسمت ۴۰
ساخت:
touch file
nano file
> file
echo "text" > file
mkdir dir
mkdir -p 1/2/3
دیدن:
pwd
ls
ls -la
کپی و انتقال:
cp file backup
cp -r dir backup
mv file newname
حذف:
rm file
rmdir dir
rm -r dir
Wildcard:
* → هر تعداد کاراکتر
? → دقیقاً یک کاراکتر
[abc] → یکی از a یا b یا c
مثلاً:
ls *.txt
ls b?t
ls b??d
ls b[eio]t
این قسمت در واقع پایهی مدیریت فایل در لینوکسه؛ قسمت بعدی میتونیم بریم سراغ file، stat و تفاوت دقیق فایل معمولی، Directory، Link و بقیه نوع فایلها.
👏1
فصل چهارم — قسمت چهلویکم 🐧
فشردهسازی فایلها و ابزارهای آن
———————-
در لینوکس چند ابزار معروف برای کم کردن حجم فایلها داریم:
gzip
bzip2
xz
zip
نکته: معمولاً
————————
1️⃣ gzip
مثلاً:
حالا:
ساخته میشود و فایل اصلی
برای خارج کردن از حالت فشرده:
یا:
——————-
2️⃣ bzip2
نتیجه:
باز کردن:
یا:
————————
3️⃣ xz
نتیجه:
باز کردن:
یا:
———————
4️⃣ zip
اینجا تفاوت مهمی داریم:
فایل اصلی باقی میماند.
برای خارج کردن:
——————
👀 دیدن محتویات بدون خارج کردن از حالت فشرده
این خیلی کاربردیه:
gzip
مثلاً:
bzip2
xz
مثلاً:
یعنی لازم نیست اول فایل را از حالت فشرده خارج کنیم.
———————
⚡️ چند دستور کاربردی
فقط حجم فایلها:
تعداد خطوط:
نمایش حجم خوانا:
—————-
🧠 خلاصه برای حفظ کردن
و برای خواندن مستقیم:
یک نکته مهم: این ابزارها عمدتاً برای فشردهسازی یک فایل هستند. برای اینکه چندین فایل و پوشه را یکجا بستهبندی کنیم، معمولاً در قسمت بعد میرسیم به
فشردهسازی فایلها و ابزارهای آن
———————-
در لینوکس چند ابزار معروف برای کم کردن حجم فایلها داریم:
gzip
bzip2
xz
zip
نکته: معمولاً
xz بیشترین فشردهسازی را بین اینها انجام میدهد، ولی ممکن است کندتر باشد. پس «بهتر» بودن به سرعت و میزان فشردهسازی بستگی دارد.————————
1️⃣ gzip
مثلاً:
cp syslog syslog1
gzip syslog1
حالا:
syslog1.gz
ساخته میشود و فایل اصلی
syslog1 حذف میشود.برای خارج کردن از حالت فشرده:
gunzip syslog1.gz
یا:
gzip -d syslog1.gz
——————-
2️⃣ bzip2
cp syslog syslog2
bzip2 syslog2
نتیجه:
syslog2.bz2
باز کردن:
bunzip2 syslog2.bz2
یا:
bzip2 -d syslog2.bz2
————————
3️⃣ xz
cp syslog syslog3
xz syslog3
نتیجه:
syslog3.xz
باز کردن:
unxz syslog3.xz
یا:
xz -d syslog3.xz
———————
4️⃣ zip
cp syslog syslog4
zip syslog4.zip syslog4
اینجا تفاوت مهمی داریم:
syslog4
syslog4.zip
فایل اصلی باقی میماند.
برای خارج کردن:
unzip syslog4.zip
——————
👀 دیدن محتویات بدون خارج کردن از حالت فشرده
این خیلی کاربردیه:
gzip
zcat file.gz
مثلاً:
zcat syslog1.gz
bzip2
bzcat file.bz2
xz
xzcat file.xz
مثلاً:
xzcat syslog3.xz
یعنی لازم نیست اول فایل را از حالت فشرده خارج کنیم.
———————
⚡️ چند دستور کاربردی
فقط حجم فایلها:
ls -lh
تعداد خطوط:
wc -l file
نمایش حجم خوانا:
ls -lh
—————-
🧠 خلاصه برای حفظ کردن
gzip → .gz → gunzip
bzip2 → .bz2 → bunzip2
xz → .xz → unxz
zip → .zip → unzip
و برای خواندن مستقیم:
.gz → zcat
.bz2 → bzcat
.xz → xzcat
یک نکته مهم: این ابزارها عمدتاً برای فشردهسازی یک فایل هستند. برای اینکه چندین فایل و پوشه را یکجا بستهبندی کنیم، معمولاً در قسمت بعد میرسیم به
tar؛ مثلاً tar.gz.👏1
فصل چهارم — قسمت چهلودوم و قسمت چهلوسوم 🐧
آرشیو کردن و Backup در لینوکس
———————
📦 آرشیو یعنی چی؟
فرض کن داخل یک پوشه 100 تا فایل داری. میخواهی همه را یکجا نگه داری یا منتقل کنی.
بهجای اینکه 100 فایل را جداگانه جابهجا کنی، میتوانی آنها را داخل یک فایل قرار بدهی.
مثلاً:
تبدیل میشود به:
⚠️ آرشیو با فشردهسازی فرق دارد.
ترکیبشان → مثلاً
——————————-
1️⃣ tar — مهمترین ابزار
ساخت آرشیو
مثلاً:
معنی گزینهها:
حالا داریم:
دیدن محتویات
خارج کردن آرشیو
مهمترین گزینههای tar
4️⃣ استخراج در یک مسیر خاص
مثلاً:
یعنی محتویات را داخل
————————-
🔥 tar + gzip
حالا میتوانیم آرشیو را همزمان فشرده کنیم:
باز کردن:
——————-
tar + bzip2
باز کردن:
——————
tar + xz
باز کردن:
🧠 این سه تا را حفظ کن:
————————-
2️⃣ cpio
مثلاً:
اینجا:
برای استخراج:
گزینهها:
مثال واقعی
فرض کن:
میزنیم:
حالا یک فایل داریم:
نکته:
—————————
3️⃣ dd — کپی سطح پایین
اینجا یک تفاوت خیلی مهم داریم.
ولی
مثلاً یک دیسک داریم:
میتوانیم از آن Image بگیریم:
یعنی:
پس:
برگرداندن Image
⚠️ این دستور خیلی خطرناک است؛ اگر
——————
💾 یک مثال کاربردی دیگر با dd
گرفتن Image از یک فلش:
برگرداندن Image به فلش:
——————-
یک مثال خیلی ساده برای ذهن:
tar:
cpio:
dd:
و یادت باشه:
برای دوره LPIC،
آرشیو کردن و Backup در لینوکس
———————
📦 آرشیو یعنی چی؟
فرض کن داخل یک پوشه 100 تا فایل داری. میخواهی همه را یکجا نگه داری یا منتقل کنی.
بهجای اینکه 100 فایل را جداگانه جابهجا کنی، میتوانی آنها را داخل یک فایل قرار بدهی.
مثلاً:
project/
├── a.txt
├── b.txt
├── c.txt
└── image.png
تبدیل میشود به:
project.tar
⚠️ آرشیو با فشردهسازی فرق دارد.
tar → چند فایل را داخل یک فایل جمع میکند.gzip / bzip2 / xz → حجم فایل را کم میکنند.ترکیبشان → مثلاً
tar.gz——————————-
1️⃣ tar — مهمترین ابزار
tar برای آرشیو کردن فایلها و پوشهها استفاده میشود.ساخت آرشیو
مثلاً:
tar -cvf backup.tar /home/alireza
معنی گزینهها:
-c → create ساخت آرشیو
-v → verbose نمایش فایلها
-f → file نام فایل آرشیو
حالا داریم:
backup.tar
دیدن محتویات
tar -tf backup.tar
-t یعنی لیست کردن محتویات.خارج کردن آرشیو
tar -xvf backup.tar
-x یعنی Extract.مهمترین گزینههای tar
-c Create ساخت آرشیو
-x Extract خارج کردن
-t List نمایش محتویات
-v Verbose نمایش جزئیات
-f File مشخص کردن نام فایل
-z gzip استفاده از gzip
-j bzip2 استفاده از bzip2
-J xz استفاده از xz
-C Change dir مشخص کردن محل استخراج
4️⃣ استخراج در یک مسیر خاص
مثلاً:
mkdir /backup
tar -xvf backup.tar -C /backup
یعنی محتویات را داخل
/backup استخراج کن.————————-
🔥 tar + gzip
حالا میتوانیم آرشیو را همزمان فشرده کنیم:
tar -czvf backup.tar.gz /home/alireza
-z یعنی استفاده از gzip.باز کردن:
tar -xzvf backup.tar.gz
——————-
tar + bzip2
tar -cjvf backup.tar.bz2 /home/alireza
باز کردن:
tar -xjvf backup.tar.bz2
——————
tar + xz
tar -cJvf backup.tar.xz /home/alireza
باز کردن:
tar -xJvf backup.tar.xz
🧠 این سه تا را حفظ کن:
tar.gz → z
tar.bz2 → j
tar.xz → J
————————-
2️⃣ cpio
cpio هم برای آرشیو کردن فایلها استفاده میشود، ولی روش کارش کمی متفاوت است.مثلاً:
find /home/alireza -type f | cpio -ov > backup.cpio
اینجا:
find
↓
فایلها را پیدا میکند
↓
cpio
↓
آنها را داخل backup.cpio قرار میدهد
برای استخراج:
cpio -iv < backup.cpio
گزینهها:
-o → ساخت آرشیو
-i → استخراج
-v → نمایش فایلها
مثال واقعی
فرض کن:
/home/alireza/
├── a.txt
├── b.txt
└── c.txt
میزنیم:
find /home/alireza -type f | cpio -ov > backup.cpio
حالا یک فایل داریم:
backup.cpio
نکته:
cpio را بیشتر در سیستمهای قدیمی، بکاپها و بعضی ابزارهای سیستمی میبینی؛ برای کارهای معمول امروزی معمولاً tar کاربردیتر است.—————————
3️⃣ dd — کپی سطح پایین
اینجا یک تفاوت خیلی مهم داریم.
tar با فایلها و پوشهها کار میکند.ولی
dd میتواند داده را بلوکبهبلوک کپی کند.مثلاً یک دیسک داریم:
/dev/sda
میتوانیم از آن Image بگیریم:
dd if=/dev/sda of=/backup/sda.img
یعنی:
if = input file
of = output file
پس:
/dev/sda
↓
↓ dd
↓
sda.img
برگرداندن Image
dd if=/backup/sda.img of=/dev/sda
⚠️ این دستور خیلی خطرناک است؛ اگر
of را اشتباه بزنی، ممکن است کل دیسک را overwrite کنی.——————
💾 یک مثال کاربردی دیگر با dd
گرفتن Image از یک فلش:
dd if=/dev/sdb of=flash.img bs=4M status=progress
برگرداندن Image به فلش:
dd if=flash.img of=/dev/sdb bs=4M status=progress
bs=4M یعنی دادهها را در بلوکهای ۴ مگابایتی منتقل کن.status=progress هم میزان پیشرفت را نشان میدهد.——————-
یک مثال خیلی ساده برای ذهن:
tar:
«این 500 تا فایل رو بذار داخل یک بسته.»
cpio:
«فایلهایی که
findپیدا کرده رو بگیر و آرشیو کن.»
dd:
«هرچی روی این دیسک هست، دقیقاً بلوکبهبلوک کپی کن.»
و یادت باشه:
tar → فایل و پوشه
cpio → فایلها + ورودی از pipe
dd → دیسک، پارتیشن، Image و داده خام
برای دوره LPIC،
tar از این سه تا مهمتر و کاربردیتره و حتماً باید گزینههای c / x / t / v / f / z / j / J رو مسلط بشی.🔥1👏1
🔥 حالا
اینجا میرسیم به قسمت مهم Incremental Backup.
فرض کن یک سرور داری:
امروز از همه Backup میگیری.
فردا فقط
آیا منطقیه دوباره کل 100GB رو Backup کنیم؟
❌ نه.
اینجا Incremental Backup استفاده میکنیم.
————————-
فایل
مثلاً:
اینجا:
Backup دوم
فرض کن فردا فقط یک فایل تغییر کرده:
این بار
——————
🧠 مثال واقعی
روز اول:
Backup:
روز دوم:
Backup:
پس به جای اینکه دوباره 100GB ذخیره کنیم، فقط تغییرات را ذخیره میکنیم.
——————-
⚠️ یک نکته خیلی مهم
فایل
یعنی:
اگر
——————
🔥 Full و Incremental
در
Full Backup
Incremental Backup
در عمل
snar چیست؟اینجا میرسیم به قسمت مهم Incremental Backup.
فرض کن یک سرور داری:
/home/
├── ali.txt
├── test.txt
├── photo.jpg
└── video.mp4
امروز از همه Backup میگیری.
فردا فقط
ali.txt تغییر کرده.آیا منطقیه دوباره کل 100GB رو Backup کنیم؟
❌ نه.
اینجا Incremental Backup استفاده میکنیم.
————————-
snar. چیست؟فایل
.snar یک Snapshot File برای tar است.tar داخل آن اطلاعاتی درباره وضعیت فایلها نگه میدارد تا در Backup بعدی بفهمد:«کدام فایلها از دفعه قبل تغییر کردهاند؟»
مثلاً:
tar -cvf backup-full.tar --listed-incremental=backup.snar /home
اینجا:
backup-full.tar
↓
Backup
backup.snar
↓
اطلاعات وضعیت فایلها
Backup دوم
فرض کن فردا فقط یک فایل تغییر کرده:
tar -cvf backup-inc.tar --listed-incremental=backup.snar /home
این بار
tar با استفاده از backup.snar متوجه میشود چه چیزهایی نسبت به Backup قبلی تغییر کردهاند و فقط همانها را وارد Backup میکند.——————
🧠 مثال واقعی
روز اول:
100GB اطلاعات
Backup:
backup-full.tar
روز دوم:
فقط 2GB تغییر کرده
Backup:
backup-inc.tar
پس به جای اینکه دوباره 100GB ذخیره کنیم، فقط تغییرات را ذخیره میکنیم.
——————-
⚠️ یک نکته خیلی مهم
فایل
.snar خودش Backup اطلاعات نیست.یعنی:
backup.tar ← اطلاعات Backup
backup.snar ← اطلاعات لازم برای تشخیص تغییرات
اگر
.snar را گم کنی، tar وضعیت قبلی را نمیداند و مدیریت Incremental Backup به مشکل میخورد.——————
🔥 Full و Incremental
در
tar میتوانیم سطح Backup را هم مشخص کنیم.Full Backup
tar -cvf full.tar \
--listed-incremental=backup.snar \
/home
Incremental Backup
tar -cvf inc.tar \
--listed-incremental=backup.snar \
/home
در عمل
tar با توجه به فایل snapshot تشخیص میدهد چه چیزهایی باید در آرشیو بعدی قرار بگیرند.❤1👏1
فصل چهارم — قسمت چهل و چهارم 🐧
انواع لینک ها درلینوکس
————————-
🔗 Link در لینوکس
لینک در لینوکس یعنی یک راه دسترسی به یک فایل از طریق نام یا مسیر دیگر.
مثلاً یک فایل داریم:
حالا میتوانیم یک لینک به آن بسازیم که اسم دیگری داشته باشد.
—————————-
1️⃣ inode چیست؟
هر فایل در لینوکس یک inode دارد.
inode اطلاعاتی مثل اینها را نگه میدارد:
مالک فایل
سطح دسترسی
اندازه فایل
زمانها
محل بلوکهای فایل روی دیسک
تعداد لینکها
اما اسم فایل داخل inode ذخیره نمیشود.
میتوانی inode را ببینی:
مثلاً:
یعنی
————————-
2️⃣ stat
برای دیدن اطلاعات کامل فایل:
مثلاً:
چهار زمان مهم:
Access —
آخرین باری که فایل خوانده/دسترسی شده.
Modify —
آخرین باری که محتوای فایل تغییر کرده.
مثلاً:
Change —
آخرین تغییر در Metadata فایل.
مثلاً:
محتوا تغییر نکرده، ولی Metadata تغییر کرده؛ پس
Birth —
زمان ایجاد فایل؛ البته پشتیبانی و نمایش آن به فایلسیستم و سیستمعامل بستگی دارد.
———————
3️⃣ Hard Link
فرض کن:
حالا:
دو اسم داریم:
بررسی:
مثلاً:
میبینی که inode هر دو یکی است.
یعنی
———————
4️⃣ Soft Link / Symbolic Link
حالا:
ساختار:
این بار
ببین:
مثلاً:
اگر:
محتوای
چون هر دو به همان inode و همان داده اشاره میکنند.
———————-
مثال واقعی
اگر:
و بعد:
اما اگر:
حالا
——————-
5️⃣ فرمان
Hard Link
Soft Link
————————-
6️⃣ readlink
برای فهمیدن لینک به چه چیزی اشاره میکند:
مثلاً:
اگر بخواهی مسیر کامل مقصد را ببینی:
مثلاً:
——————
🎯 برای حفظ کردن
Hard Link:
Soft Link:
inode:
انواع لینک ها درلینوکس
————————-
🔗 Link در لینوکس
لینک در لینوکس یعنی یک راه دسترسی به یک فایل از طریق نام یا مسیر دیگر.
مثلاً یک فایل داریم:
touch alireza
حالا میتوانیم یک لینک به آن بسازیم که اسم دیگری داشته باشد.
—————————-
1️⃣ inode چیست؟
هر فایل در لینوکس یک inode دارد.
inode اطلاعاتی مثل اینها را نگه میدارد:
مالک فایل
سطح دسترسی
اندازه فایل
زمانها
محل بلوکهای فایل روی دیسک
تعداد لینکها
اما اسم فایل داخل inode ذخیره نمیشود.
میتوانی inode را ببینی:
ls -i alireza
مثلاً:
123456 alireza
یعنی
alireza به inode شماره 123456 اشاره میکند.————————-
2️⃣ stat
برای دیدن اطلاعات کامل فایل:
stat alireza
مثلاً:
Access: 2026-08-18 18:00
Modify: 2026-08-18 17:30
Change: 2026-08-18 17:30
Birth: 2026-08-18 17:30
چهار زمان مهم:
Access —
atimeآخرین باری که فایل خوانده/دسترسی شده.
Modify —
mtimeآخرین باری که محتوای فایل تغییر کرده.
مثلاً:
echo hello >> alireza
Change —
ctimeآخرین تغییر در Metadata فایل.
مثلاً:
chmod 600 alireza
محتوا تغییر نکرده، ولی Metadata تغییر کرده؛ پس
ctime تغییر میکند.Birth —
btimeزمان ایجاد فایل؛ البته پشتیبانی و نمایش آن به فایلسیستم و سیستمعامل بستگی دارد.
———————
3️⃣ Hard Link
فرض کن:
echo "Hello" > alireza
حالا:
ln alireza ali
دو اسم داریم:
alireza
ali
↓
inode مشترک
↓
محتوای فایل
بررسی:
ls -li alireza ali
مثلاً:
12345 -rw-r--r-- 2 root root ... alireza
12345 -rw-r--r-- 2 root root ... ali
میبینی که inode هر دو یکی است.
یعنی
ali یک کپی از فایل نیست؛ یک نام دیگر برای همان فایل است.———————
4️⃣ Soft Link / Symbolic Link
حالا:
ln -s alireza ali
ساختار:
ali
↓
alireza
↓
inode
↓
datadata
این بار
ali خودش یک فایل مستقل است که مسیر فایل اصلی را نگه میدارد.ببین:
ls -l
مثلاً:
ali -> alireza
اگر:
echo "Bye" >> ali
محتوای
alireza هم تغییر میکند.چون هر دو به همان inode و همان داده اشاره میکنند.
———————-
مثال واقعی
اگر:
ln alireza ali
و بعد:
rm alireza
ali هنوز فایل را دارد.اما اگر:
ln -s alireza ali
rm alireza
حالا
ali تبدیل به Broken Symbolic Link میشود.——————-
5️⃣ فرمان
lnHard Link
ln alireza ali
Soft Link
ln -s alireza ali
————————-
6️⃣ readlink
برای فهمیدن لینک به چه چیزی اشاره میکند:
readlink alireza43439
مثلاً:
alireza
اگر بخواهی مسیر کامل مقصد را ببینی:
readlink -f alireza43439
مثلاً:
/home/alireza
——————
🎯 برای حفظ کردن
Hard Link:
«اسم دوم برای همان فایل»
Soft Link:
«میانبر/آدرس به فایل دیگر»
inode:
«شناسه و اطلاعات اصلی فایل در فایلسیستم»
stat:«اطلاعات و زمانهای مهم فایل»
readlink:«این لینک به کجا اشاره میکند؟»
❤1👏1
فصل چهارم — قسمت چهل و پنجم 🐧
سطح دسترسی ها در لینوکس
—————-
🔐 سطح دسترسیها در لینوکس
در لینوکس هر فایل و دایرکتوری مشخص میکند چه کسی اجازه دارد چه کاری روی آن انجام دهد.
مثلاً:
ممکن است ببینی:
بخش مهم اول:
—————-
1️⃣ سه سطح مالکیت
لینوکس دسترسیها را برای سه گروه بررسی میکند:
مثلاً:
——————-
2️⃣ سه نوع دسترسی
سه Permission اصلی داریم:
برای فایل
برای دایرکتوری
اینجا یک نکته خیلی مهم داریم:
—————————-
3️⃣ تغییر مالک فایل
دستور درست:
نه
مثلاً:
یعنی مالک فایل شود:
——————
تغییر مالک و گروه همزمان
یعنی:
————-
4️⃣ تغییر فقط Group
برای تغییر گروه از:
استفاده میکنیم:
یا با
—————
5️⃣ Permission عددی
احتمالاً اینها را زیاد میبینی:
ارزش Permissionها:
پس:
مثلاً:
یعنی:
پس:
—————-
چند Permission مهم
مثلاً:
——————
6️⃣ umask چیست؟
ببین:
مثلاً:
یعنی سیستم هنگام ساخت فایل/دایرکتوری، بعضی دسترسیها را حذف میکند.
مثلاً معمولاً:
با
پس معمولاً:
میتواند چیزی شبیه:
ایجاد کند.
و:
چیزی شبیه:
ایجاد میکند.
———————
7️⃣
مثلاً:
ممکن است:
برگرداند.
یا:
مثلاً:
—————
🔥 8️⃣ SUID
SUID یعنی:
مثال معروف:
ممکن است ببینی:
اینجا بهجای:
داریم:
این
چرا؟
چون کاربر عادی باید بتواند رمز عبور خودش را تغییر دهد، در حالی که فایلهای مربوط به تغییر رمز عبور نیاز به دسترسیهای خاص دارند.
—————
فعال کردن SUID
یا عددی:
عدد:
—————
🔥 9️⃣ SGID
SGID دو کاربرد دارد، ولی برای دایرکتوریها کاربرد بسیار مهمی دارد.
در دایرکتوری اگر SGID فعال باشد:
مثلاً:
حالا:
گروهش
اگر
گروه فایل هم میتواند:
باشد.
فعال کردن SGID:
یا:
عدد:
—————-
🔥 10️⃣ Sticky Bit
Sticky Bit بیشتر روی دایرکتوریهای اشتراکی استفاده میشود.
مثال معروف:
معمولاً چیزی شبیه:
آخرش:
میبینی.
یعنی کاربران مختلف میتوانند داخل
مثلاً:
Ali نمیتواند همینطوری
فعال کردن Sticky Bit:
یا:
عدد:
——————
🎯 خلاصه کل قسمت
و یک نکته مهم برای LPIC: Permission روی فایل و دایرکتوری یک معنی کاملاً یکسان ندارد؛ مخصوصاً
سطح دسترسی ها در لینوکس
—————-
🔐 سطح دسترسیها در لینوکس
در لینوکس هر فایل و دایرکتوری مشخص میکند چه کسی اجازه دارد چه کاری روی آن انجام دهد.
مثلاً:
ls -l sana.txt
ممکن است ببینی:
-rw-r--r-- 1 alireza users 120 Aug 18 18:00 sana.txt
بخش مهم اول:
-rw-r--r--
—————-
1️⃣ سه سطح مالکیت
لینوکس دسترسیها را برای سه گروه بررسی میکند:
Owner → صاحب فایل
Group → گروه فایل
Others → بقیه کاربران
مثلاً:
-rw-r--r--
│ │ │
│ │ └── Others
│ └───── Group
└──────── Owner
——————-
2️⃣ سه نوع دسترسی
سه Permission اصلی داریم:
r = Read خواندن
w = Write نوشتن
x = Execute اجرا
برای فایل
r → محتویات فایل را بخواند
w → محتویات فایل را تغییر دهد
x → فایل را اجرا کند
برای دایرکتوری
اینجا یک نکته خیلی مهم داریم:
r → لیست محتویات دایرکتوری
w → ایجاد/حذف/تغییر نام فایلها
x → ورود/دسترسی به داخل دایرکتوری
—————————-
3️⃣ تغییر مالک فایل
دستور درست:
chown
نه
chowan.مثلاً:
sudo chown alireza sana.txt
یعنی مالک فایل شود:
alireza
——————
تغییر مالک و گروه همزمان
sudo chown alireza:users sana.txt
یعنی:
Owner → alireza
Group → users
————-
4️⃣ تغییر فقط Group
برای تغییر گروه از:
chgrp
استفاده میکنیم:
sudo chgrp users sana.txt
یا با
chown:sudo chown :users sana.txt
—————
5️⃣ Permission عددی
احتمالاً اینها را زیاد میبینی:
000
644
755
777
ارزش Permissionها:
r = 4
w = 2
x = 1
پس:
rwx = 4+2+1 = 7
rw- = 4+2 = 6
r-x = 4+1 = 5
r-- = 4 = 4
-w- = 2
--x = 1
--- = 0
مثلاً:
chmod 755 test
یعنی:
Owner → rwx = 7
Group → r-x = 5
Others → r-x = 5
پس:
755 = rwxr-xr-x
—————-
چند Permission مهم
000 → هیچ دسترسی
600 → rw-------
644 → rw-r--r--
700 → rwx------
755 → rwxr-xr-x
777 → rwxrwxrwx
مثلاً:
chmod 644 sana.txt
——————
6️⃣ umask چیست؟
umask مشخص میکند فایل یا دایرکتوری جدید بهصورت پیشفرض چه Permissionهایی نداشته باشد.ببین:
umask
مثلاً:
0022
یعنی سیستم هنگام ساخت فایل/دایرکتوری، بعضی دسترسیها را حذف میکند.
مثلاً معمولاً:
File → 666
Directory → 777
با
umask 022:666 - 022 → 644
777 - 022 → 755
پس معمولاً:
touch test
میتواند چیزی شبیه:
-rw-r--r--
ایجاد کند.
و:
mkdir testdir
چیزی شبیه:
drwxr-xr-x
ایجاد میکند.
umaskPermission اضافه نمیکند؛ فقط Permissionهای پیشفرض را محدود میکند.
———————
7️⃣
which چیست؟which مسیر اجرای یک command را پیدا میکند.مثلاً:
which ls
ممکن است:
/usr/bin/ls
برگرداند.
یا:
which python3
مثلاً:
/usr/bin/python3
—————
🔥 8️⃣ SUID
SUID یعنی:
یک فایل اجرایی با Permission صاحب فایل اجرا شود، نه با Permission کاربری که آن را اجرا کرده.
مثال معروف:
ls -l /usr/bin/passwd
ممکن است ببینی:
-rwsr-xr-x
اینجا بهجای:
-rwx
داریم:
-rws
این
s یعنی SUID فعال است.چرا؟
چون کاربر عادی باید بتواند رمز عبور خودش را تغییر دهد، در حالی که فایلهای مربوط به تغییر رمز عبور نیاز به دسترسیهای خاص دارند.
—————
فعال کردن SUID
chmod u+s file
یا عددی:
chmod 4755 file
عدد:
4xxx → SUID
—————
🔥 9️⃣ SGID
SGID دو کاربرد دارد، ولی برای دایرکتوریها کاربرد بسیار مهمی دارد.
در دایرکتوری اگر SGID فعال باشد:
فایلهای جدیدی که داخل آن ساخته میشوند، گروه دایرکتوری را به ارث میبرند.
مثلاً:
mkdir project
chown :developers project
chmod 2775 project
حالا:
project/
گروهش
developers است.اگر
ali داخل آن فایل بسازد:project/test.txt
گروه فایل هم میتواند:
developers
باشد.
فعال کردن SGID:
chmod g+s project
یا:
chmod 2775 project
عدد:
2xxx → SGID
—————-
🔥 10️⃣ Sticky Bit
Sticky Bit بیشتر روی دایرکتوریهای اشتراکی استفاده میشود.
مثال معروف:
ls -ld /tmp
معمولاً چیزی شبیه:
drwxrwxrwt
آخرش:
t
میبینی.
یعنی کاربران مختلف میتوانند داخل
/tmp فایل بسازند، اما هر کاربر معمولاً نمیتواند فایل کاربر دیگری را حذف کند.مثلاً:
/tmp
├── ali.txt ← Ali
├── reza.txt ← Reza
└── test.txt ← Test
Ali نمیتواند همینطوری
reza.txt را حذف کند.فعال کردن Sticky Bit:
chmod +t directory
یا:
chmod 1777 directory
عدد:
1xxx → Sticky Bit
——————
🎯 خلاصه کل قسمت
Owner → صاحب
Group → گروه
Others → بقیه
r = 4
w = 2
x = 1
chmod → تغییر Permission
chown → تغییر Owner
chgrp → تغییر Group
umask → Permission پیشفرض
which → پیدا کردن مسیر command
4xxx → SUID
2xxx → SGID
1xxx → Sticky Bit
و یک نکته مهم برای LPIC: Permission روی فایل و دایرکتوری یک معنی کاملاً یکسان ندارد؛ مخصوصاً
x روی دایرکتوری یعنی امکان عبور/دسترسی به آن، که بعداً در بحث Permissionها خیلی به کارت میآید.👏1
فصل چهارم — قسمت چهل و ششم 🐧
سطح دسترسی با ACL
———————
تا اینجا با
فرض کن فایل
یعنی:
صاحب فایل →
گروه →
بقیه → هیچ دسترسی ندارند.
حالا میخواهیم یک کاربر خاص به اسم reza هم فقط بتواند فایل را بخواند.
اینجاست که ACL به درد میخورد.
—————-
ACL = Access Control List
یعنی میتوانیم برای کاربرها و گروههای خاص، دسترسی جداگانه تعریف کنیم؛ بدون اینکه ساختار اصلی
مثال واقعی 🧠
فرض کن:
با
—————————-
1️⃣ دیدن ACL
فرمان:
مثلاً:
قسمت مهم:
یعنی کاربر
————————
2️⃣ اضافه کردن ACL برای یک کاربر
مثلاً:
یا:
حالا:
و میبینیم:
——————-
3️⃣ دادن دسترسی کامل به یک کاربر
یعنی
را دارد.
——————-
4️⃣ حذف ACL یک کاربر
یعنی ACL مربوط به
———-
5️⃣ ACL برای گروه
مثلاً گروه
—————-
6️⃣ حذف ACL گروه
7️⃣ ACL روی دایرکتوری
اینجا ACL خیلی جذابتر میشود.
فرض کن:
میخواهیم
حالا
دارد.
————————
8️⃣ ACL پیشفرض ⭐️
یک نکته مهم:
اگر روی یک دایرکتوری ACL بگذاری، فایلهایی که بعداً داخلش ساخته میشوند لزوماً ACL موردنظر را نمیگیرند.
برای این کار از Default ACL استفاده میکنیم:
حالا فایلها و دایرکتوریهای جدید داخل
دیدنش:
مثلاً:
_____________
9️⃣ Mask چیست؟ ⚠️
در ACL یک مفهوم مهم داریم:
Mask حداکثر دسترسیای را که برای کاربرهای ACL و گروهها میتوان اعمال کرد مشخص میکند.
مثلاً:
ما به
پس دسترسی مؤثر
برای دیدن دسترسی مؤثر:
ممکن است ببینی:
یعنی ACL نوشته
————————
🔟 حذف تمام ACLها
اگر بخواهیم ACLهای اضافی فایل را پاک کنیم:
——————————————————-
نصب ابزار ACL
اگر
Debian / Ubuntu
RHEL / Fedora
————————————-
سطح دسترسی با ACL
———————
تا اینجا با
rwx کار کردیم؛ ولی یک مشکل داریم:فرض کن فایل
report.txt این شکلی باشد:-rw-r----- 1 ali developers report.txt
یعنی:
صاحب فایل →
aliگروه →
developersبقیه → هیچ دسترسی ندارند.
حالا میخواهیم یک کاربر خاص به اسم reza هم فقط بتواند فایل را بخواند.
اینجاست که ACL به درد میخورد.
—————-
ACL = Access Control List
یعنی میتوانیم برای کاربرها و گروههای خاص، دسترسی جداگانه تعریف کنیم؛ بدون اینکه ساختار اصلی
owner/group/other را خراب کنیم.مثال واقعی 🧠
فرض کن:
report.txt
│
├── ali → rw
├── developers → r
├── reza → r
└── سایر کاربران → ---
با
chmod بهتنهایی این مدل مدیریت دقیق سخت است، ولی ACL دقیقاً برای همین ساخته شده.—————————-
1️⃣ دیدن ACL
فرمان:
getfacl report.txt
مثلاً:
# file: report.txt
# owner: ali
# group: developers
user::rw-
user:reza:r--
group::r--
mask::r--
other::---
قسمت مهم:
user:reza:r--
یعنی کاربر
reza اجازه خواندن فایل را دارد.————————
2️⃣ اضافه کردن ACL برای یک کاربر
مثلاً:
setfacl -m u:reza:r report.txt
یا:
setfacl -m u:reza:r-- report.txt
u یعنی user.حالا:
getfacl report.txt
و میبینیم:
user:reza:r--
——————-
3️⃣ دادن دسترسی کامل به یک کاربر
setfacl -m u:reza:rwx report.txt
یعنی
reza:r → خواندن
w → نوشتن
x → اجرا
را دارد.
——————-
4️⃣ حذف ACL یک کاربر
setfacl -x u:reza report.txt
یعنی ACL مربوط به
reza حذف شود.———-
5️⃣ ACL برای گروه
مثلاً گروه
security را میخواهیم به فایل دسترسی بدهیم:setfacl -m g:security:r-- report.txt
g یعنی group.—————-
6️⃣ حذف ACL گروه
setfacl -x g:security report.txt
7️⃣ ACL روی دایرکتوری
اینجا ACL خیلی جذابتر میشود.
فرض کن:
mkdir /project
میخواهیم
reza داخل این دایرکتوری بتواند فایل ایجاد کند:setfacl -m u:reza:rwx /project
حالا
reza روی /project دسترسی:r → دیدن محتویات
w → ایجاد/حذف فایل
x → ورود به دایرکتوری
دارد.
————————
8️⃣ ACL پیشفرض ⭐️
یک نکته مهم:
اگر روی یک دایرکتوری ACL بگذاری، فایلهایی که بعداً داخلش ساخته میشوند لزوماً ACL موردنظر را نمیگیرند.
برای این کار از Default ACL استفاده میکنیم:
setfacl -d -m u:reza:rwx /project
حالا فایلها و دایرکتوریهای جدید داخل
/project ACL پیشفرض را به ارث میبرند.دیدنش:
getfacl /project
مثلاً:
default:user:reza:rwx
_____________
9️⃣ Mask چیست؟ ⚠️
در ACL یک مفهوم مهم داریم:
mask
Mask حداکثر دسترسیای را که برای کاربرهای ACL و گروهها میتوان اعمال کرد مشخص میکند.
مثلاً:
setfacl -m u:reza:rwx,m:r-- report.txt
ما به
reza گفتیم rwx، ولی mask فقط r-- است.پس دسترسی مؤثر
reza میشود:r--
برای دیدن دسترسی مؤثر:
getfacl report.txt
ممکن است ببینی:
user:reza:rwx #effective:r--
یعنی ACL نوشته
rwx ولی Mask اجازه بیشتر از r-- نمیدهد.————————
🔟 حذف تمام ACLها
اگر بخواهیم ACLهای اضافی فایل را پاک کنیم:
setfacl -b report.txt
-b یعنی حذف ACLهای اضافی.——————————————————-
نصب ابزار ACL
اگر
setfacl یا getfacl نداشتی:Debian / Ubuntu
apt install acl
RHEL / Fedora
dnf install acl
————————————-
👏1
فصل چهارم — قسمت آخر - قسمت چهل و هفتم 🐧
جستجو در لینوکس
——————
در لینوکس چند فرمان مهم برای پیدا کردن برنامه، فایل و مسیر فایلها داریم. مهمترینها:
—————-
1️⃣
وقتی میزنیم:
مثلاً:
یعنی وقتی بنویسیم:
سیستم از این فایل استفاده میکند.
مثال:
🧠 which = این برنامهای که اجرا میکنم کجاست؟
——————-
2️⃣
ممکن است بدهد:
یعنی میتواند محلهای مختلف مربوط به برنامه، مثل:
فایل اجرایی
Source
را نشان دهد.
مثلاً:
🧠 فرق ساده:
—————————
3️⃣
مثلاً دنبال
ممکن است کلی نتیجه بدهد:
مزیت
چرا؟
چون معمولاً از یک Database استفاده میکند و کل دیسک را همان لحظه نمیگردد.
———————
4️⃣
ساختار کلی:
مثلاً:
یعنی:
———————
پیدا کردن فایل با اسم
یا:
یعنی تمام فایلهای
—————
جستجو بدون حساسیت به حروف
———————
پیدا کردن دایرکتوری
———-
——————
پیدا کردن فایل بر اساس حجم
مثلاً فایلهای بزرگتر از 100MB:
یا فایلهای کوچکتر از 10MB:
——————-
پیدا کردن فایل بر اساس زمان
مثلاً فایلهایی که در 1 روز گذشته تغییر کردهاند:
یا:
یعنی فایلهایی که بیشتر از 30 روز از آخرین تغییرشان گذشته.
——————-
پیدا کردن فایل و اجرای دستور روی آن ⭐️
اینجا
مثلاً:
یعنی:
⚠️ این مدل دستورها را روی مسیرهای مهم مثل
——————-
ترکیب
مثلاً:
اینجا:
و:
————————
فصل چهارم هم با همین مفاهیم بسته میشود: مدیریت فایل → فشردهسازی → آرشیو → لینکها → Permission → ACL → جستجو. 🐧🔥
جستجو در لینوکس
——————
در لینوکس چند فرمان مهم برای پیدا کردن برنامه، فایل و مسیر فایلها داریم. مهمترینها:
which
whereis
locate
find
—————-
1️⃣
which — برنامه از کجا اجرا میشود؟وقتی میزنیم:
which bash
مثلاً:
/usr/bin/bash
یعنی وقتی بنویسیم:
bash
سیستم از این فایل استفاده میکند.
مثال:
which python3
which ls
which nano
which ssh
🧠 which = این برنامهای که اجرا میکنم کجاست؟
——————-
2️⃣
whereis — اطلاعات بیشتری درباره برنامهwhereis bash
ممکن است بدهد:
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz
یعنی میتواند محلهای مختلف مربوط به برنامه، مثل:
فایل اجرایی
Source
man pageرا نشان دهد.
مثلاً:
whereis ls
whereis ssh
whereis python3
🧠 فرق ساده:
which → مسیر برنامهای که اجرا میشود
whereis → محلهای مختلف مرتبط با برنامه
—————————
3️⃣
locate — جستجوی سریع فایل ⚡️مثلاً دنبال
passwd هستیم:locate passwd
ممکن است کلی نتیجه بدهد:
/etc/passwd
/etc/pam.d/passwd
/usr/bin/passwd
/usr/share/man/man1/passwd.1.gz
...
مزیت
locate این است که خیلی سریع است.چرا؟
چون معمولاً از یک Database استفاده میکند و کل دیسک را همان لحظه نمیگردد.
———————
4️⃣
find — حرفهایترین جستجو 🔥find خودش واقعاً فایلسیستم را میگردد و میتوانی شرط برای جستجو تعیین کنی.ساختار کلی:
find [مسیر] [شرط]
مثلاً:
find /etc -name passwd
یعنی:
داخل
/etcبگرد و فایلی به نام
passwdپیدا کن.
———————
پیدا کردن فایل با اسم
find / -name "test.txt"
یا:
find /home -name "*.txt"
یعنی تمام فایلهای
.txt داخل /home.—————
جستجو بدون حساسیت به حروف
find /home -iname "alireza.txt"
-iname نسبت به بزرگ/کوچک بودن حروف حساس نیست.———————
پیدا کردن دایرکتوری
find /home -type d -name "test"
d یعنی:directory
———-
find /home -type f -name "*.txt"
f یعنی:file
——————
پیدا کردن فایل بر اساس حجم
مثلاً فایلهای بزرگتر از 100MB:
find / -type f -size +100M
یا فایلهای کوچکتر از 10MB:
find / -type f -size -10M
——————-
پیدا کردن فایل بر اساس زمان
مثلاً فایلهایی که در 1 روز گذشته تغییر کردهاند:
find /home -type f -mtime -1
یا:
find /home -type f -mtime +30
یعنی فایلهایی که بیشتر از 30 روز از آخرین تغییرشان گذشته.
——————-
پیدا کردن فایل و اجرای دستور روی آن ⭐️
اینجا
find خیلی قدرتمند میشود.مثلاً:
find /tmp -type f -name "*.log" -delete
یعنی:
فایلهای
.logداخل
/tmpرا پیدا کن و حذف کن.
⚠️ این مدل دستورها را روی مسیرهای مهم مثل
/ بدون بررسی اجرا نکن.——————-
ترکیب
find با execمثلاً:
find /tmp -type f -name "*.log" -exec ls -lh {} \;اینجا:
{}
↓
فایلی که find پیدا کردهو:
\;
↓
پایان دستور exec
————————
فصل چهارم هم با همین مفاهیم بسته میشود: مدیریت فایل → فشردهسازی → آرشیو → لینکها → Permission → ACL → جستجو. 🐧🔥
👏1
فصل پنجم — قسمت چهل و هشتم - INTRO 🐧
راه اندازی اولیه و مجازی سازی
————————-
در فصل پنجم میخواهیم ببینیم وقتی یک سیستم لینوکسی روشن میشود چه اتفاقی میافتد و چطور میتوانیم روند Boot را مدیریت کنیم. همچنین با مجازیسازی در لینوکس آشنا میشویم.
—————-
1️⃣ تغییر در راهاندازی سیستم و Reboot
یاد میگیریم:
سیستم چطور Boot میشود؟
تغییر وضعیت سیستم
مدیریت سرویسها در زمان Boot
Runlevel / Target
بررسی وضعیت Boot
——————-
2️⃣ نصب و مدیریت Boot Manager
اینجا با Boot Manager آشنا میشویم.
مهمترین چیزی که در لینوکس میبینیم:
مثلاً وقتی سیستم روشن میشود و صفحهای میبینی که میتوانی بین چند Kernel یا سیستمعامل انتخاب کنی، معمولاً GRUB در این قسمت نقش دارد.
————————
3️⃣ مجازیسازی در لینوکس 🖥
میبینیم Virtualization چیست و لینوکس چطور میتواند:
را اجرا کند.
با مفاهیمی مثل:
KVM
QEMU
Virtual Machine
Host / Guest
Hypervisor
آشنا میشویم.
——————
4️⃣ مراحل راهاندازی سیستم 🚀
از لحظهای که دکمه Power را میزنیم تا رسیدن به Login:
این بخش خیلی مهم است چون در فصلهای قبلی هم با بعضی از این مفاهیم برخورد کردیم.
راه اندازی اولیه و مجازی سازی
————————-
در فصل پنجم میخواهیم ببینیم وقتی یک سیستم لینوکسی روشن میشود چه اتفاقی میافتد و چطور میتوانیم روند Boot را مدیریت کنیم. همچنین با مجازیسازی در لینوکس آشنا میشویم.
—————-
1️⃣ تغییر در راهاندازی سیستم و Reboot
یاد میگیریم:
سیستم چطور Boot میشود؟
reboot و shutdownتغییر وضعیت سیستم
مدیریت سرویسها در زمان Boot
Runlevel / Target
بررسی وضعیت Boot
——————-
2️⃣ نصب و مدیریت Boot Manager
اینجا با Boot Manager آشنا میشویم.
مهمترین چیزی که در لینوکس میبینیم:
GRUB
مثلاً وقتی سیستم روشن میشود و صفحهای میبینی که میتوانی بین چند Kernel یا سیستمعامل انتخاب کنی، معمولاً GRUB در این قسمت نقش دارد.
————————
3️⃣ مجازیسازی در لینوکس 🖥
میبینیم Virtualization چیست و لینوکس چطور میتواند:
Linux Host
│
├── VM 1 → Debian
├── VM 2 → Ubuntu
└── VM 3 → Fedora
را اجرا کند.
با مفاهیمی مثل:
KVM
QEMU
Virtual Machine
Host / Guest
Hypervisor
آشنا میشویم.
——————
4️⃣ مراحل راهاندازی سیستم 🚀
از لحظهای که دکمه Power را میزنیم تا رسیدن به Login:
Power ON
↓
BIOS / UEFI
↓
Bootloader (GRUB)
↓
Linux Kernel
↓
initramfs
↓
systemd
↓
Services
↓
Login
این بخش خیلی مهم است چون در فصلهای قبلی هم با بعضی از این مفاهیم برخورد کردیم.
👏1
فصل پنجم — قسمت چهل و نهم 🐧
مراحل راه اندازی در لینوکس
————————-
وقتی دکمه Power را میزنیم، لینوکس یکدفعه اجرا نمیشود؛ چند مرحله پشت سر هم اتفاق میافتد.
🧠 تصویر کلی
حالا مرحلهبهمرحله 👇
————-
1️⃣ روشن شدن سیستم → BIOS / UEFI
اول سیستم روشن میشود و Firmware سختافزار را بررسی میکند.
مثلاً:
در سیستمهای قدیمیتر معمولاً BIOS و در سیستمهای جدیدتر UEFI داریم.
——————
2️⃣ Bootloader → GRUB
بعد Firmware دنبال یک Bootloader میگردد.
در بیشتر سیستمهای Linux:
وظیفه GRUB این است که Kernel لینوکس را پیدا و اجرا کند.
اگر چند سیستمعامل داشته باشی، GRUB میتواند منوی انتخاب هم نشان دهد:
————-
3️⃣ Kernel وارد کار میشود 🧠
GRUB، Kernel لینوکس را در حافظه قرار میدهد و اجرا میکند.
Kernel مسئول مدیریت چیزهایی مثل:
CPU
RAM
Disk
Network
Hardware
Processها
است.
—————-
4️⃣ initramfs
قبل از اینکه سیستم فایل اصلی
راهاندازی میشود.
مثلاً اگر برای پیدا کردن Root Filesystem به یک Driver یا ابزار خاص نیاز باشد، initramfs میتواند آن را فراهم کند.
بعد سیستم به Root Filesystem اصلی منتقل میشود.
——————
systemd 🚀
در سیستمهای مدرن Linux معمولاً:
اولین Process اصلی سیستم است.
PID آن معمولاً:
و میبینی:
systemd سرویسها و بخشهای مختلف سیستم را راهاندازی میکند.
——————-
🔎 دیدن پیامهای Kernel با
بعد از Boot میتوانی پیامهایی که Kernel ثبت کرده را ببینی:
مثلاً:
برای جستجو:
یعنی پیامهای مربوط به USB را پیدا کن.
یا:
🧠 dmesg = پیامهای مربوط به Kernel و Hardware
——————
📖
در سیستمهایی که
برای دیدن لاگها:
لاگهای Boot فعلی:
لاگ Boot قبلی:
فقط خطاهای Boot:
و برای دیدن Kernel:
فرق مهم:
———————-
📁 لاگ Boot کجاست؟
این قسمت را یک مقدار اصلاح کنیم:
در Debian/Ubuntu ممکن است بعضی لاگهای مربوط به Boot در:
باشند، اما وجود
در سیستمهای جدید، برای بررسی Boot بهتر است از:
استفاده کنی.
در بعضی سیستمهای RHEL/Fedora ممکن است فایلهایی مثل:
——————-
🖥 آیا سیستم با UEFI Boot شده؟
یک روش خیلی ساده:
اگر این مسیر وجود داشته باشد، معمولاً یعنی سیستم با UEFI Boot شده.
مثلاً:
اگر پوشههایی مثل این دیدی:
یعنی:
اگر مسیر وجود نداشت:
معمولاً سیستم با حالت Legacy BIOS بوت شده است.
مراحل راه اندازی در لینوکس
————————-
وقتی دکمه Power را میزنیم، لینوکس یکدفعه اجرا نمیشود؛ چند مرحله پشت سر هم اتفاق میافتد.
🧠 تصویر کلی
Power ON
↓
BIOS / UEFI
↓
Bootloader (GRUB)
↓
Kernel
↓
initramfs
↓
systemd
↓
Services
↓
Login
حالا مرحلهبهمرحله 👇
————-
1️⃣ روشن شدن سیستم → BIOS / UEFI
اول سیستم روشن میشود و Firmware سختافزار را بررسی میکند.
مثلاً:
CPU
RAM
Disk
Keyboard
Network
...
در سیستمهای قدیمیتر معمولاً BIOS و در سیستمهای جدیدتر UEFI داریم.
——————
2️⃣ Bootloader → GRUB
بعد Firmware دنبال یک Bootloader میگردد.
در بیشتر سیستمهای Linux:
GRUB
وظیفه GRUB این است که Kernel لینوکس را پیدا و اجرا کند.
اگر چند سیستمعامل داشته باشی، GRUB میتواند منوی انتخاب هم نشان دهد:
Ubuntu
Advanced options for Ubuntu
Windows
————-
3️⃣ Kernel وارد کار میشود 🧠
GRUB، Kernel لینوکس را در حافظه قرار میدهد و اجرا میکند.
Kernel مسئول مدیریت چیزهایی مثل:
CPU
RAM
Disk
Network
Hardware
Processها
است.
—————-
4️⃣ initramfs
قبل از اینکه سیستم فایل اصلی
/ کاملاً در دسترس قرار بگیرد، معمولاً یک محیط موقت به نام:initramfs
راهاندازی میشود.
مثلاً اگر برای پیدا کردن Root Filesystem به یک Driver یا ابزار خاص نیاز باشد، initramfs میتواند آن را فراهم کند.
بعد سیستم به Root Filesystem اصلی منتقل میشود.
——————
systemd 🚀
در سیستمهای مدرن Linux معمولاً:
systemd
اولین Process اصلی سیستم است.
PID آن معمولاً:
ps -p 1
و میبینی:
PID 1
systemd سرویسها و بخشهای مختلف سیستم را راهاندازی میکند.
——————-
🔎 دیدن پیامهای Kernel با
dmesgبعد از Boot میتوانی پیامهایی که Kernel ثبت کرده را ببینی:
dmesg
مثلاً:
dmesg | less
برای جستجو:
dmesg | grep -i usb
یعنی پیامهای مربوط به USB را پیدا کن.
یا:
dmesg | grep -i error
🧠 dmesg = پیامهای مربوط به Kernel و Hardware
——————
📖
journalctl چیست؟در سیستمهایی که
systemd دارند، journal لاگهای سیستم را جمعآوری میکند.برای دیدن لاگها:
journalctl
لاگهای Boot فعلی:
journalctl -b
لاگ Boot قبلی:
journalctl -b -1
فقط خطاهای Boot:
journalctl -b -p err
و برای دیدن Kernel:
journalctl -k
فرق مهم:
dmesg
↓
پیامهای Kernel
journalctl
↓
لاگهای systemd و سرویسها + Kernel و بخشهای مختلف سیستم
———————-
📁 لاگ Boot کجاست؟
این قسمت را یک مقدار اصلاح کنیم:
در Debian/Ubuntu ممکن است بعضی لاگهای مربوط به Boot در:
/var/log/
باشند، اما وجود
/var/log/boot بهصورت ثابت و یکسان در همه نسخهها را نباید فرض کرد.در سیستمهای جدید، برای بررسی Boot بهتر است از:
journalctl -b
استفاده کنی.
در بعضی سیستمهای RHEL/Fedora ممکن است فایلهایی مثل:
/var/log/boot.log
——————-
🖥 آیا سیستم با UEFI Boot شده؟
یک روش خیلی ساده:
ls /sys/firmware/efi
اگر این مسیر وجود داشته باشد، معمولاً یعنی سیستم با UEFI Boot شده.
مثلاً:
ls /sys/firmware/efi
اگر پوشههایی مثل این دیدی:
efivars
fw_platform_size
runtime
...
یعنی:
UEFI ✅
اگر مسیر وجود نداشت:
No such file or directory
معمولاً سیستم با حالت Legacy BIOS بوت شده است.
👏1
فصل پنجم — قسمت پنجاهم 🐧
نگاهی به بوت لودر
—————————-
قبل از GRUB یک نکته را یاد بگیریم:
🧠 Bootloader چیست؟
Bootloader یک برنامه کوچک است که بعد از BIOS/UEFI اجرا میشود و سیستمعامل را برای اجرا آماده میکند.
در لینوکس معروفترین Bootloader:
است.
مثال واقعی:
———————-
1️⃣ تاریخچه GRUB
اول نسخه قدیمیتر را داشتیم:
بعد نسخه جدیدتر آمد:
امروزه تقریباً تمام توزیعهای مدرن Linux از GRUB 2 استفاده میکنند.
——————-
2️⃣ GRUB Legacy چیست؟
GRUB Legacy نسخه قدیمی GRUB است.
ساختار تنظیمات اصلی آن معمولاً:
بود.
مثلاً در آن میتوانستیم مشخص کنیم:
——————-
3️⃣ GRUB 2 چیست؟
GRUB 2 ساختار جدیدتر و قدرتمندتری دارد.
یکی از تفاوتهای مهم:
ولی در:
قرار داریم.
مسیر معمول:
در سیستمهای UEFI ممکن است فایلهای مربوط به GRUB را در مسیرهایی مثل:
هم ببینی.
———————-
4️⃣ فایل
فایل اصلیای که GRUB هنگام Boot از آن برای منوی Boot و تنظیمات استفاده میکند:
مثلاً داخلش ممکن است اطلاعاتی مربوط به:
ببینی.
⚠️ نکته مهم: معمولاً نباید
چرا؟
چون این فایل معمولاً تولیدشده (generated) است و با تغییر تنظیمات اصلی دوباره ساخته میشود.
——————-
5️⃣ تنظیمات اصلی GRUB کجاست؟
یکی از مهمترین فایلها:
مثلاً:
ممکن است چیزی شبیه این ببینی:
معنی:
اولین گزینه Boot به صورت پیشفرض انتخاب شود.
پنج ثانیه منتظر بمان.
پارامترهایی که هنگام اجرای Kernel ارسال میشوند.
————-
6️⃣ تغییر تنظیمات GRUB
مثلاً:
فرض کن:
را تغییر بدهیم:
یعنی منوی GRUB بهجای ۵ ثانیه، ۱۰ ثانیه نمایش داده شود.
اما هنوز کار تمام نشده!
باید تنظیمات جدید را به
در Debian/Ubuntu:
این فرمان معمولاً فایل:
را دوباره تولید میکند.
———————-
🔥 چند دستور کاربردی
دیدن GRUB:
دیدن تنظیمات:
جستجوی Kernel در GRUB:
تولید مجدد در Debian/Ubuntu:
نگاهی به بوت لودر
—————————-
قبل از GRUB یک نکته را یاد بگیریم:
🧠 Bootloader چیست؟
Bootloader یک برنامه کوچک است که بعد از BIOS/UEFI اجرا میشود و سیستمعامل را برای اجرا آماده میکند.
در لینوکس معروفترین Bootloader:
GRUB
است.
مثال واقعی:
Power ON
↓
BIOS / UEFI
↓
GRUB ← اینجا
↓
Linux Kernel
↓
Linux
———————-
1️⃣ تاریخچه GRUB
اول نسخه قدیمیتر را داشتیم:
GRUB Legacy
بعد نسخه جدیدتر آمد:
GRUB 2
امروزه تقریباً تمام توزیعهای مدرن Linux از GRUB 2 استفاده میکنند.
——————-
2️⃣ GRUB Legacy چیست؟
GRUB Legacy نسخه قدیمی GRUB است.
ساختار تنظیمات اصلی آن معمولاً:
/boot/grub/menu.lst
بود.
مثلاً در آن میتوانستیم مشخص کنیم:
کدام Kernel اجرا شود؟
Root filesystem کجاست؟
چه Kernel Parameterهایی ارسال شوند؟
——————-
3️⃣ GRUB 2 چیست؟
GRUB 2 ساختار جدیدتر و قدرتمندتری دارد.
یکی از تفاوتهای مهم:
GRUB Legacy
↓
menu.lst
ولی در:
GRUB 2
↓
grub.cfg
قرار داریم.
مسیر معمول:
/boot/grub/grub.cfg
در سیستمهای UEFI ممکن است فایلهای مربوط به GRUB را در مسیرهایی مثل:
/boot/efi/
هم ببینی.
———————-
4️⃣ فایل
grub.cfg چیست؟فایل اصلیای که GRUB هنگام Boot از آن برای منوی Boot و تنظیمات استفاده میکند:
/boot/grub/grub.cfg
مثلاً داخلش ممکن است اطلاعاتی مربوط به:
Kernel
initrd
root
boot parameters
ببینی.
⚠️ نکته مهم: معمولاً نباید
grub.cfg را مستقیم و دستی ویرایش کنیم.چرا؟
چون این فایل معمولاً تولیدشده (generated) است و با تغییر تنظیمات اصلی دوباره ساخته میشود.
——————-
5️⃣ تنظیمات اصلی GRUB کجاست؟
یکی از مهمترین فایلها:
/etc/default/grub
مثلاً:
cat /etc/default/grub
ممکن است چیزی شبیه این ببینی:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
معنی:
GRUB_DEFAULT=0
اولین گزینه Boot به صورت پیشفرض انتخاب شود.
GRUB_TIMEOUT=5
پنج ثانیه منتظر بمان.
GRUB_CMDLINE_LINUX_DEFAULT
پارامترهایی که هنگام اجرای Kernel ارسال میشوند.
————-
6️⃣ تغییر تنظیمات GRUB
مثلاً:
nano /etc/default/grub
فرض کن:
GRUB_TIMEOUT=5
را تغییر بدهیم:
GRUB_TIMEOUT=10
یعنی منوی GRUB بهجای ۵ ثانیه، ۱۰ ثانیه نمایش داده شود.
اما هنوز کار تمام نشده!
باید تنظیمات جدید را به
grub.cfg اعمال کنیم.در Debian/Ubuntu:
update-grub
این فرمان معمولاً فایل:
/boot/grub/grub.cfg
را دوباره تولید میکند.
———————-
🔥 چند دستور کاربردی
دیدن GRUB:
ls /boot/grub
دیدن تنظیمات:
cat /etc/default/grub
جستجوی Kernel در GRUB:
grep menuentry /boot/grub/grub.cfg
تولید مجدد در Debian/Ubuntu:
update-grub
👏1
فصل پنجم — قسمت پنجاه و یکم 🐧
راه اندازی دستی لینوکس
———————
راهاندازی دستی لینوکس
گاهی فایل تنظیمات GRUB مشکل پیدا میکند یا سیستم نمیتواند بهصورت عادی بوت شود. در این حالت میتوانیم از خود GRUB بهصورت دستی سیستمعامل را بالا بیاوریم.
1. ورود به محیط GRUB
هنگام روشن شدن سیستم، در منوی GRUB معمولاً با فشردن Shift یا در بعضی سیستمها Esc میتوان منوی GRUB را نمایش داد.
سپس:
کلید
———————-
2. دستورات
در محیط GRUB میتوان ماژولهای موردنیاز را بارگذاری کرد:
———————
3. دستور
با:
میتوان دیسکها و پارتیشنهایی که GRUB شناسایی کرده را مشاهده کرد.
مثلاً:
حالا میتوانیم بررسی کنیم کدام پارتیشن شامل فایلهای لینوکس است:
ممکن است چیزهایی مثل این ببینیم:
——————-
4. تعیین Root
اگر پارتیشن موردنظر
یعنی به GRUB میگوییم:
———————-
5. ساخت مجدد فایل تنظیمات GRUB
برای ساخت مجدد فایل
grub2-mkconfig > /boot/grub2/grub.cfg
راه اندازی دستی لینوکس
———————
راهاندازی دستی لینوکس
گاهی فایل تنظیمات GRUB مشکل پیدا میکند یا سیستم نمیتواند بهصورت عادی بوت شود. در این حالت میتوانیم از خود GRUB بهصورت دستی سیستمعامل را بالا بیاوریم.
1. ورود به محیط GRUB
هنگام روشن شدن سیستم، در منوی GRUB معمولاً با فشردن Shift یا در بعضی سیستمها Esc میتوان منوی GRUB را نمایش داد.
سپس:
کلید
e → ویرایش Entry مربوط به لینوکس.———————-
2. دستورات
insmodدر محیط GRUB میتوان ماژولهای موردنیاز را بارگذاری کرد:
insmod linux
insmod gzip
insmod lvm
linux → پشتیبانی از کرنل لینوکسgzip → برای فایلهای فشردهlvm → برای دسترسی به Logical Volumeهای LVM———————
3. دستور
lsبا:
ls
میتوان دیسکها و پارتیشنهایی که GRUB شناسایی کرده را مشاهده کرد.
مثلاً:
(hd0) (hd0,msdos1) (hd0,msdos2)
حالا میتوانیم بررسی کنیم کدام پارتیشن شامل فایلهای لینوکس است:
ls (hd0,msdos1)/
ممکن است چیزهایی مثل این ببینیم:
boot/
etc/
home/
usr/
var/
——————-
4. تعیین Root
اگر پارتیشن موردنظر
hd0,msdos1 باشد:set root=(hd0,msdos1)
یعنی به GRUB میگوییم:
«از این پارتیشن بهعنوان محل فایلهای سیستم استفاده کن.»
———————-
5. ساخت مجدد فایل تنظیمات GRUB
برای ساخت مجدد فایل
grub.cfg در سیستم لینوکسی، دستور درست این است:grub2-mkconfig > /boot/grub2/grub.cfg
👏1
فصل پنجم — قسمت پنجاه و دوم 🐧
single user mode
———————
Single User Mode در AlmaLinux 9
Single User Mode یا حالت تککاربره یک حالت ویژه برای عیبیابی و تعمیر سیستم لینوکس است که در آن سیستم با حداقل سرویسهای لازم اجرا میشود.
🔹 Single User Mode به چه درد میخورد؟
مهمترین کاربردهایش:
بازیابی یا تغییر پسورد Root
تعمیر فایلسیستم
رفع مشکلات بوت
تعمیر تنظیمات سیستم
انجام کارهای مدیریتی وقتی سیستم عادی بالا نمیآید
مثلاً اگر پسورد
————————
روش اول —
مرحله 1 — ورود به GRUB
سیستم را Restart کن.
در صفحه GRUB:
روی AlmaLinux بایست → کلید
—————————
مرحله 2 — پیدا کردن خط Kernel
خطی را پیدا کن که با چیزی شبیه این شروع میشود:
یا:
در انتهای همین خط اضافه کن:
مثلاً:
——————
مرحله 3 — اجرای بوت
بعد از اضافه کردن:
کلید:
را بزن.
سیستم وارد محیط Recovery میشود و معمولاً چیزی شبیه این میبینی:
——————
مرحله 4 — قابل نوشتن کردن
در این مرحله سیستم اصلی معمولاً در
اول آن را Read/Write میکنیم:
————————
مرحله 6 — تغییر پسورد Root
دستور:
پسورد جدید را دو بار وارد کن.
مثلاً:
————————-
مرحله 7 — SELinux
چون در محیط Recovery تغییراتی روی سیستم انجام دادهایم، برای اینکه SELinux در بوت بعدی Contextها را دوباره تنظیم کند:
این فایل به سیستم میگوید:
——————
مرحله 8 — خروج و Restart
ابتدا:
بعد:
سیستم دوباره راهاندازی میشود.
ممکن است به دلیل:
بوت اول کمی بیشتر طول بکشد؛ چون SELinux در حال Relabel کردن فایلهاست.
———————-
روش دوم —
یک روش دیگر برای ورود مستقیم به Shell، اضافه کردن این پارامتر به انتهای خط Kernel است:
یعنی در GRUB:
بعد:
را بزن.
در این روش، Kernel به جای اجرای فرآیند معمول
را اجرا میکند.
سپس بسته به وضعیت Mountها، ممکن است لازم باشد Root filesystem را Read/Write کنی.
مثلاً:
بعد:
و برای SELinux:
سپس:
—————
این پارامتر باعث میشود SELinux در آن بوت به حالت Permissive برود.
یعنی SELinux در آن بوت جلوی عملیات را نمیگیرد، ولی همچنان میتواند موارد نقض Policy را گزارش کند.
مثلاً در بعضی روشهای Recovery ممکن است انتهای خط Kernel اینطور باشد:
اما برای بازیابی معمول پسورد در AlmaLinux 9، روش
——————————
single user mode
———————
Single User Mode در AlmaLinux 9
Single User Mode یا حالت تککاربره یک حالت ویژه برای عیبیابی و تعمیر سیستم لینوکس است که در آن سیستم با حداقل سرویسهای لازم اجرا میشود.
🔹 Single User Mode به چه درد میخورد؟
مهمترین کاربردهایش:
بازیابی یا تغییر پسورد Root
تعمیر فایلسیستم
رفع مشکلات بوت
تعمیر تنظیمات سیستم
انجام کارهای مدیریتی وقتی سیستم عادی بالا نمیآید
مثلاً اگر پسورد
root را فراموش کرده باشیم، میتوانیم از این روش برای تغییر آن استفاده کنیم.————————
روش اول —
rd.break در AlmaLinux 9مرحله 1 — ورود به GRUB
سیستم را Restart کن.
در صفحه GRUB:
روی AlmaLinux بایست → کلید
e را بزن.—————————
مرحله 2 — پیدا کردن خط Kernel
خطی را پیدا کن که با چیزی شبیه این شروع میشود:
linux /vmlinuz-...
یا:
linux16 /vmlinuz-...
در انتهای همین خط اضافه کن:
rd.break
مثلاً:
linux /vmlinuz-... root=/dev/mapper/almalinux-root ro ... rd.break
——————
مرحله 3 — اجرای بوت
بعد از اضافه کردن:
rd.break
کلید:
Ctrl + X
را بزن.
سیستم وارد محیط Recovery میشود و معمولاً چیزی شبیه این میبینی:
switch_root:/#
——————
مرحله 4 — قابل نوشتن کردن
/sysrootدر این مرحله سیستم اصلی معمولاً در
/sysroot قرار دارد.اول آن را Read/Write میکنیم:
mount -o remount,rw /sysroot
————————
مرحله 6 — تغییر پسورد Root
دستور:
passwd root
پسورد جدید را دو بار وارد کن.
مثلاً:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
————————-
مرحله 7 — SELinux
چون در محیط Recovery تغییراتی روی سیستم انجام دادهایم، برای اینکه SELinux در بوت بعدی Contextها را دوباره تنظیم کند:
touch /.autorelabel
این فایل به سیستم میگوید:
«در بوت بعدی فایلها را دوباره با Context مناسب SELinux برچسبگذاری کن.»
——————
مرحله 8 — خروج و Restart
ابتدا:
exit
بعد:
reboot
سیستم دوباره راهاندازی میشود.
ممکن است به دلیل:
touch /.autorelabel
بوت اول کمی بیشتر طول بکشد؛ چون SELinux در حال Relabel کردن فایلهاست.
———————-
روش دوم —
init=/bin/bashیک روش دیگر برای ورود مستقیم به Shell، اضافه کردن این پارامتر به انتهای خط Kernel است:
rw init=/bin/bash
یعنی در GRUB:
linux /vmlinuz-... root=/dev/mapper/almalinux-root ro ... rw init=/bin/bash
بعد:
Ctrl + X
را بزن.
در این روش، Kernel به جای اجرای فرآیند معمول
init، مستقیماً:/bin/bash
را اجرا میکند.
سپس بسته به وضعیت Mountها، ممکن است لازم باشد Root filesystem را Read/Write کنی.
مثلاً:
mount -o remount,rw /
بعد:
passwd root
و برای SELinux:
touch /.autorelabel
سپس:
exec /sbin/reboot
—————
enforcing=0 چیست؟enforcing=0
این پارامتر باعث میشود SELinux در آن بوت به حالت Permissive برود.
یعنی SELinux در آن بوت جلوی عملیات را نمیگیرد، ولی همچنان میتواند موارد نقض Policy را گزارش کند.
مثلاً در بعضی روشهای Recovery ممکن است انتهای خط Kernel اینطور باشد:
rd.break enforcing=0
اما برای بازیابی معمول پسورد در AlmaLinux 9، روش
rd.break بهتنهایی و سپس mount، chroot، passwd و touch /.autorelabel مسیر اصلی و قابلفهمتری است.——————————
👏1
فصل پنجم — قسمت پنجاه و سوم 🐧
single user mode
اما روی الما 10
———————
1️⃣ بوت از ISO
ISO آلما لینوکس 10 را به ماشین وصل کن و سیستم را از روی آن Boot کن.
در منوی اولیه گزینهای شبیه:
را انتخاب کن.
سپس گزینه:
را بزن.
———————
2️⃣ پیدا کردن سیستم نصبشده
محیط Rescue سیستم نصبشده را پیدا میکند و معمولاً از تو میپرسد که آیا میخواهی سیستم نصبشده را Mount کند.
گزینه:
را انتخاب کن.
در این حالت سیستم نصبشده معمولاً در:
Mount میشود.
——————-
3️⃣ ورود به سیستم نصبشده
حالا:
از این لحظه به بعد، انگار وارد سیستم AlmaLinux نصبشده شدهای.
مثلاً:
———————
4️⃣ تغییر پسورد Root
رمز جدید را دو بار وارد کن.
اگر موفق باشد:
————
5️⃣ SELinux
برای اینکه بعد از تغییرات، SELinux هنگام بوت دوباره Contextها را بررسی کند:
—————————-
6️⃣ خروج
بعد سیستم را Restart کن:
ISO/CD را قبل از بوت بعدی از ماشین جدا کن تا دوباره وارد محیط نصب نشود.
——————-
single user mode
اما روی الما 10
———————
1️⃣ بوت از ISO
ISO آلما لینوکس 10 را به ماشین وصل کن و سیستم را از روی آن Boot کن.
در منوی اولیه گزینهای شبیه:
Troubleshooting
را انتخاب کن.
سپس گزینه:
Rescue a AlmaLinux system
را بزن.
———————
2️⃣ پیدا کردن سیستم نصبشده
محیط Rescue سیستم نصبشده را پیدا میکند و معمولاً از تو میپرسد که آیا میخواهی سیستم نصبشده را Mount کند.
گزینه:
1) Continue
را انتخاب کن.
در این حالت سیستم نصبشده معمولاً در:
/mnt/sysroot
Mount میشود.
——————-
3️⃣ ورود به سیستم نصبشده
حالا:
chroot /mnt/sysroot
از این لحظه به بعد، انگار وارد سیستم AlmaLinux نصبشده شدهای.
مثلاً:
passwd root
———————
4️⃣ تغییر پسورد Root
passwd root
رمز جدید را دو بار وارد کن.
اگر موفق باشد:
passwd: all authentication tokens updated successfully.
————
5️⃣ SELinux
برای اینکه بعد از تغییرات، SELinux هنگام بوت دوباره Contextها را بررسی کند:
touch /.autorelabel
—————————-
6️⃣ خروج
exit
بعد سیستم را Restart کن:
reboot
ISO/CD را قبل از بوت بعدی از ماشین جدا کن تا دوباره وارد محیط نصب نشود.
——————-
❤1👏1
فصل پنجم — قسمت پنجاه و چهارم 🐧
systemd
———————
🧠 systemd چیست؟
بعد از اینکه Kernel بالا آمد، سیستم باید بقیه قسمتها را راهاندازی کند؛ مثل:
شبکه
SSH
سرویسها
لاگها
زمان سیستم
سرویسهای مختلف
اینجا Init System وارد عمل میشود.
در لینوکس دو سیستم معروف داریم:
امروزه بیشتر توزیعهای مدرن مثل Debian، Ubuntu، Fedora، RHEL و AlmaLinux از
—————————
🔹 ساختار کلی systemd
نکته مهم:
معمولاً میبینی:
یعنی systemd اولین Process سیستم است.
——————-
🔹 systemctl چیست؟
مهمترین ابزار مدیریت systemd است:
مثلاً:
یا در بعضی سیستمهای Red Hat:
————
🔹 مشاهده Unitها
نمایش Unitهای فعال:
نمایش تمام Unit Fileها:
——————
🔹 Unit چیست؟
در systemd تقریباً همه چیز به صورت Unit مدیریت میشود.
مثلاً:
مثلاً:
——————
دیدن فایل سرویس:
مثلاً:
———————————-
🎯 Target چیست؟
در
در
مثلاً:
مشاهده Target پیشفرض:
مثلاً:
تغییر به حالت متنی:
تغییر به حالت گرافیکی:
——————-
🔥 مدیریت سرویسها
روشن کردن سرویس
خاموش کردن
ریستارت
بررسی وضعیت
بررسی فعال بودن
خروجی مثلاً:
—————-
🔄 اجرا شدن سرویس بعد از روشن شدن سیستم
فعال کردن:
یعنی:
غیرفعال کردن:
—————————
🛑 Power Management
خاموش کردن:
ریبوت:
خاموش کردن با shutdown:
ریبوت با shutdown:
Sleep:
Hibernate:
systemd
———————
🧠 systemd چیست؟
بعد از اینکه Kernel بالا آمد، سیستم باید بقیه قسمتها را راهاندازی کند؛ مثل:
شبکه
SSH
سرویسها
لاگها
زمان سیستم
سرویسهای مختلف
اینجا Init System وارد عمل میشود.
در لینوکس دو سیستم معروف داریم:
SysVinit
systemd
امروزه بیشتر توزیعهای مدرن مثل Debian، Ubuntu، Fedora، RHEL و AlmaLinux از
systemd استفاده میکنند.—————————
🔹 ساختار کلی systemd
BIOS / UEFI
↓
GRUB
↓
Kernel
↓
systemd (PID 1)
↓
Services / Targets / Mounts / ...
نکته مهم:
ps -p 1
معمولاً میبینی:
PID 1
systemd
یعنی systemd اولین Process سیستم است.
——————-
🔹 systemctl چیست؟
مهمترین ابزار مدیریت systemd است:
systemctl
مثلاً:
systemctl status ssh
یا در بعضی سیستمهای Red Hat:
systemctl status sshd
————
🔹 مشاهده Unitها
نمایش Unitهای فعال:
systemctl list-units
نمایش تمام Unit Fileها:
systemctl list-unit-files
——————
🔹 Unit چیست؟
در systemd تقریباً همه چیز به صورت Unit مدیریت میشود.
مثلاً:
.service
.socket
.target
.mount
.timer
.device
مثلاً:
systemctl status sshd.service
——————
دیدن فایل سرویس:
systemctl cat sshd
مثلاً:
[Unit]
Description=OpenSSH server
[Service]
ExecStart=...
[Install]
WantedBy=multi-user.target
———————————-
🎯 Target چیست؟
در
SysVinit چیزی به نام Runlevel داشتیم.در
systemd مفهوم مشابهی با Target داریم.مثلاً:
Runlevel 3
↓
multi-user.target
Runlevel 5
↓
graphical.target
مشاهده Target پیشفرض:
systemctl get-default
مثلاً:
graphical.target
تغییر به حالت متنی:
systemctl set-default multi-user.target
تغییر به حالت گرافیکی:
systemctl set-default graphical.target
——————-
🔥 مدیریت سرویسها
روشن کردن سرویس
systemctl start sshd
خاموش کردن
systemctl stop sshd
ریستارت
systemctl restart sshd
بررسی وضعیت
systemctl status sshd
بررسی فعال بودن
systemctl is-active sshd
خروجی مثلاً:
active
—————-
🔄 اجرا شدن سرویس بعد از روشن شدن سیستم
فعال کردن:
systemctl enable sshd
یعنی:
بعد از Boot سیستم، SSH هم خودکار اجرا شود.
غیرفعال کردن:
systemctl disable sshd
—————————
🛑 Power Management
خاموش کردن:
systemctl poweroff
ریبوت:
systemctl reboot
خاموش کردن با shutdown:
shutdown -h now
ریبوت با shutdown:
shutdown -r now
Sleep:
systemctl suspend
Hibernate:
systemctl hibernate
👏1
فصل پنجم — قسمت پنجاه و پنجم 🐧
send messeage یا ارسال پیام به کاربر
———————
در لینوکس چند روش برای نمایش یا ارسال پیام به کاربر داریم:
———————
1️⃣ پیام قبل از Login — فایل
وقتی کاربر میخواهد از طریق کنسول وارد سیستم شود، محتوای این فایل میتواند نمایش داده شود:
مثلاً:
ویرایش:
🧠 مثال واقعی
میتوانی بنویسی:
———————-
2️⃣ پیام SSH قبل از Login
برای SSH معمولاً از Banner استفاده میکنیم.
یک فایل بساز:
داخلش:
بعد فایل تنظیمات SSH را باز کن:
اضافه کن:
بعد:
حالا وقتی کاربر با SSH وصل شود، قبل از Login این پیام را میبیند.
——————
3️⃣ پیام بعد از Login —
Message Of The Day
یعنی:
در بعضی سیستمها میتوانی:
مثلاً:
بعد از Login نمایش داده میشود.
——————
4️⃣
در سیستمهایی که از
مثلاً:
اگر پیام مربوط به Cockpit را نمیخواهی، میتوانی فایل مربوطه را حذف یا غیرفعال کنی.
مثلاً:
⚠️ اسم و محل فایلهای Cockpit ممکن است بسته به توزیع و نسخه متفاوت باشد؛ قبل از حذف بهتر است محتویات
————————
5️⃣
یکی از مهمترین دستورات این قسمت:
یعنی:
مثلاً:
تمام کاربرانی که در آن لحظه وارد سیستم هستند، پیام را دریافت میکنند.
برای دیدن کاربران:
——————
6️⃣ ارسال پیام به یک کاربر خاص
با
بعد پیام را تایپ کن:
برای پایان:
———————
7️⃣
این دستور برای نمایش Notification گرافیکی در محیط دسکتاپ است.
مثلاً:
یک Notification روی دسکتاپ نمایش داده میشود.
⚠️ این روش برای سرورهای بدون محیط گرافیکی معمولاً کاربردی ندارد.
——————
8️⃣ ارسال Mail
در لینوکس میتوان از ابزارهایی مثل:
برای ارسال ایمیل استفاده کرد.
مثلاً:
اما برای ارسال واقعی ایمیل معمولاً باید یک Mail Transfer Agent (MTA) مثل Postfix تنظیم شده باشد.
send messeage یا ارسال پیام به کاربر
———————
در لینوکس چند روش برای نمایش یا ارسال پیام به کاربر داریم:
قبل از Login
بعد از Login
پیام به یک کاربر خاص
پیام به همه کاربران
پیام از طریق Mail
———————
1️⃣ پیام قبل از Login — فایل
/etc/issueوقتی کاربر میخواهد از طریق کنسول وارد سیستم شود، محتوای این فایل میتواند نمایش داده شود:
cat /etc/issue
مثلاً:
Welcome to Alireza Server
Authorized users only!
ویرایش:
nano /etc/issue
🧠 مثال واقعی
میتوانی بنویسی:
================================
Welcome to My Linux Server
Unauthorized access prohibited
================================
———————-
2️⃣ پیام SSH قبل از Login
برای SSH معمولاً از Banner استفاده میکنیم.
یک فایل بساز:
nano /etc/ssh/banner
داخلش:
********************************
WARNING!
Authorized users only.
********************************
بعد فایل تنظیمات SSH را باز کن:
nano /etc/ssh/sshd_config
اضافه کن:
Banner /etc/ssh/banner
بعد:
systemctl restart sshd
حالا وقتی کاربر با SSH وصل شود، قبل از Login این پیام را میبیند.
——————
3️⃣ پیام بعد از Login —
/etc/motdMOTD یعنی:Message Of The Day
یعنی:
پیام روز برای کاربر.
در بعضی سیستمها میتوانی:
nano /etc/motd
مثلاً:
Welcome Alireza!
This server is managed by IT.
بعد از Login نمایش داده میشود.
——————
4️⃣
/etc/motd.d/در سیستمهایی که از
motd.d پشتیبانی میکنند، میتوان پیامها را به صورت فایلهای جداگانه قرار داد:ls /etc/motd.d/
مثلاً:
nano /etc/motd.d/cockpit
اگر پیام مربوط به Cockpit را نمیخواهی، میتوانی فایل مربوطه را حذف یا غیرفعال کنی.
مثلاً:
rm /etc/motd.d/cockpit
⚠️ اسم و محل فایلهای Cockpit ممکن است بسته به توزیع و نسخه متفاوت باشد؛ قبل از حذف بهتر است محتویات
/etc/motd.d/ را ببینی.————————
5️⃣
wall — پیام به همه کاربرانیکی از مهمترین دستورات این قسمت:
wall
یعنی:
Write ALL → پیام را برای تمام کاربران Login شده ارسال کن.
مثلاً:
echo "Server will reboot in 5 minutes!" | wall
تمام کاربرانی که در آن لحظه وارد سیستم هستند، پیام را دریافت میکنند.
برای دیدن کاربران:
who
——————
6️⃣ ارسال پیام به یک کاربر خاص
با
write میتوانی برای یک کاربر مشخص پیام بفرستی:write ali
بعد پیام را تایپ کن:
Hello Ali
Server will reboot soon.
برای پایان:
Ctrl + D
———————
7️⃣
notify-sendاین دستور برای نمایش Notification گرافیکی در محیط دسکتاپ است.
مثلاً:
notify-send "Warning" "Server will reboot soon!"
یک Notification روی دسکتاپ نمایش داده میشود.
⚠️ این روش برای سرورهای بدون محیط گرافیکی معمولاً کاربردی ندارد.
——————
8️⃣ ارسال Mail
در لینوکس میتوان از ابزارهایی مثل:
برای ارسال ایمیل استفاده کرد.
مثلاً:
echo "Server is down!" | mail -s "Server Alert" admin@example.com
اما برای ارسال واقعی ایمیل معمولاً باید یک Mail Transfer Agent (MTA) مثل Postfix تنظیم شده باشد.
👏1
فصل پنجم — قسمت پنجاه و ششم 🐧
virtualisations مجازی سازی در لینوکس
———————
🧠 مجازیسازی چیست؟
خیلی ساده:
مجازیسازی یعنی یک کامپیوتر فیزیکی را طوری تقسیم کنیم که بتوانیم چند سیستم یا محیط مستقل روی آن اجرا کنیم.
مثلاً یک سرور فیزیکی داریم:
هر VM فکر میکند یک کامپیوتر واقعی دارد.
——————
🔥 دو نوع اصلی مجازیسازی
در آموزشها معمولاً این دو مدل را با Type 1 و Type 2 میشناسیم.
1️⃣ Type 1 — Bare Metal
در این مدل Hypervisor تقریباً مستقیماً روی سختافزار قرار میگیرد.
یعنی سیستمعامل معمولی مثل Windows یا Ubuntu در وسط نیست.
معروفها:
VMware ESXi
Microsoft Hyper-V
Xen
KVM در زیرساختهای لینوکسی
مثلاً:
ESXi را روی یک سرور واقعی نصب میکنی و بعد داخلش چندین VM میسازی.
👉 برای دیتاسنترها بسیار رایج است.
——————
2️⃣ Type 2 — Hosted
اینجا اول یک سیستمعامل معمولی نصب میکنی و بعد نرمافزار مجازیسازی را روی آن نصب میکنی.
معروفها:
VMware Workstation
VirtualBox
VMware Fusion
مثلاً روی لپتاپت Windows داری و:
را اجرا میکنی.
این همان چیزی است که احتمالاً در VMware با آن کار کردهای.
———————
🐳 اما Container چیست؟
اینجا یک تفاوت خیلی مهم داریم.
Container مثل VM یک سیستمعامل کامل جداگانه اجرا نمیکند.
مثلاً:
کانتینرها Kernel سیستم میزبان را Share میکنند.
به همین دلیل معمولاً:
سبکترند
سریعتر بالا میآیند
RAM کمتری مصرف میکنند
برای اجرای Application بسیار مناسباند
معروفترین ابزار:
Docker
و ابزارهای دیگر مثل:
Podman
LXC
containerd
———————
⚔️ VM vs Container
مثلاً میخواهی سه Ubuntu اجرا کنی.
VM:
هر VM معمولاً:
دارد.
Container:
پس Container خیلی سبکتر است.
———————
🧠 یک مثال واقعی
فرض کن یک سرور 64GB RAM داری.
برای ساخت 4 سرور مستقل میتوانی:
با VM:
هرکدام سیستمعامل خودشان را دارند.
با Container:
همه از Kernel میزبان استفاده میکنند.
———————-
⚠️ یک نکته مهم درباره «سطح یک و دو»
Type 1 و Type 2 مربوط به Hypervisor هستند، نه Container.
پس این دستهبندی را قاطی نکن:
🎯 فقط اینو فعلاً حفظ کن:
VM = یک کامپیوتر مجازی کامل
Container = یک محیط ایزوله برای اجرای برنامه
و مهمتر از همه:
virtualisations مجازی سازی در لینوکس
———————
🧠 مجازیسازی چیست؟
خیلی ساده:
مجازیسازی یعنی یک کامپیوتر فیزیکی را طوری تقسیم کنیم که بتوانیم چند سیستم یا محیط مستقل روی آن اجرا کنیم.
مثلاً یک سرور فیزیکی داریم:
Server
CPU: 16 Core
RAM: 64GB
↓
┌───────────────┐
│ VM 1 Ubuntu │
│ VM 2 Debian │
│ VM 3 Windows │
│ VM 4 AlmaLinux│
└───────────────┘
هر VM فکر میکند یک کامپیوتر واقعی دارد.
——————
🔥 دو نوع اصلی مجازیسازی
در آموزشها معمولاً این دو مدل را با Type 1 و Type 2 میشناسیم.
1️⃣ Type 1 — Bare Metal
در این مدل Hypervisor تقریباً مستقیماً روی سختافزار قرار میگیرد.
Hardware
↓
Hypervisor
↓
VM1 VM2 VM3
یعنی سیستمعامل معمولی مثل Windows یا Ubuntu در وسط نیست.
معروفها:
VMware ESXi
Microsoft Hyper-V
Xen
KVM در زیرساختهای لینوکسی
مثلاً:
ESXi را روی یک سرور واقعی نصب میکنی و بعد داخلش چندین VM میسازی.
👉 برای دیتاسنترها بسیار رایج است.
——————
2️⃣ Type 2 — Hosted
اینجا اول یک سیستمعامل معمولی نصب میکنی و بعد نرمافزار مجازیسازی را روی آن نصب میکنی.
Hardware
↓
Windows / Linux
↓
VMware Workstation
↓
Ubuntu VM
Kali VM
Windows VM
معروفها:
VMware Workstation
VirtualBox
VMware Fusion
مثلاً روی لپتاپت Windows داری و:
VMware Workstation
↓
Kali Linux
را اجرا میکنی.
این همان چیزی است که احتمالاً در VMware با آن کار کردهای.
———————
🐳 اما Container چیست؟
اینجا یک تفاوت خیلی مهم داریم.
Container مثل VM یک سیستمعامل کامل جداگانه اجرا نمیکند.
مثلاً:
Hardware
↓
Linux Kernel
↓
Docker
┌──────┬──────┬──────┐
│ App1 │ App2 │ App3 │
└──────┴──────┴──────┘
کانتینرها Kernel سیستم میزبان را Share میکنند.
به همین دلیل معمولاً:
سبکترند
سریعتر بالا میآیند
RAM کمتری مصرف میکنند
برای اجرای Application بسیار مناسباند
معروفترین ابزار:
Docker
و ابزارهای دیگر مثل:
Podman
LXC
containerd
———————
⚔️ VM vs Container
مثلاً میخواهی سه Ubuntu اجرا کنی.
VM:
هر VM معمولاً:
Virtual Hardware
↓
Kernel
↓
OS
↓
Application
دارد.
Container:
Host Kernel
↓
Container
↓
Application
پس Container خیلی سبکتر است.
———————
🧠 یک مثال واقعی
فرض کن یک سرور 64GB RAM داری.
برای ساخت 4 سرور مستقل میتوانی:
با VM:
VM1 → 8GB
VM2 → 8GB
VM3 → 8GB
VM4 → 8GB
هرکدام سیستمعامل خودشان را دارند.
با Container:
Docker
├── Nginx
├── PHP
├── MySQL
└── Redis
همه از Kernel میزبان استفاده میکنند.
———————-
⚠️ یک نکته مهم درباره «سطح یک و دو»
Type 1 و Type 2 مربوط به Hypervisor هستند، نه Container.
پس این دستهبندی را قاطی نکن:
Virtualization
│
├── Type 1
│ ├── ESXi
│ ├── Hyper-V
│ └── Xen
│
├── Type 2
│ ├── VMware Workstation
│ └── VirtualBox
│
└── Containerization
├── Docker
├── Podman
└── LXC
🎯 فقط اینو فعلاً حفظ کن:
VM = یک کامپیوتر مجازی کامل
Container = یک محیط ایزوله برای اجرای برنامه
و مهمتر از همه:
VM معمولاً Kernel جدا دارد؛ Container معمولاً Kernel میزبان را Share میکند.
👏1
فصل پنجم — قسمت پنجاه و هفت 🐧
docker - نصب داکر
———————
🐳 Docker چیست؟
قبل از نصب، خیلی ساده:
Docker ابزاری برای اجرای برنامهها داخل Container است.
مثلاً بهجای اینکه برای اجرای Nginx کل یک VM بسازیم:
با Docker میتوانیم فقط Container مربوط به Nginx را اجرا کنیم.
———————-
🐳 نصب Docker در Ubuntu / Debian
1️⃣ آپدیت مخازن
2️⃣ نصب ابزارهای موردنیاز
3️⃣ اضافه کردن کلید Repository داکر
برای Ubuntu باید مسیر Repository را متناسب با Ubuntu تنظیم کنی؛ روش رسمی Docker از Repository خود Docker استفاده میکند.
———————-
در Debian/Ubuntu بعد از اضافه کردن Repository رسمی:
سپس:
——————
🔍 بررسی نصب
مثلاً:
و:
اگر دیدی:
یعنی Docker در حال اجراست. ✅
—————-
🚀 تست Docker
مهمترین تست:
Docker یک Image کوچک به نام
اگر پیام:
را دیدی، یعنی Docker درست نصب شده. 🎉
——————
👤 اجرای Docker بدون sudo
بهصورت پیشفرض ممکن است مجبور باشی بنویسی:
اگر میخواهی کاربر فعلی بدون
بعد یکبار Logout/Login کن.
سپس:
⚠️ عضویت در گروه
——————-
🐧 نصب روی RHEL / AlmaLinux / Rocky
در سیستمهای Red Hat:
Repository داکر را اضافه میکنیم:
بعد:
سرویس را فعال و اجرا میکنیم:
تست:
و:
——————
🧠 چند دستور اولیه که بعد از نصب لازم داری
کانتینرهای در حال اجرا
همه کانتینرها
Imageهای موجود
دریافت Image
ساخت و اجرای Container
توقف Container
اجرای دوباره Container
——————-
🎯 زنجیره Docker را اینطوری حفظ کن:
مثلاً:
نکته: برای آموزش دوره، بهتر است نصب Docker را روی VM آزمایشگاهی انجام بدهی، نه سرور اصلی؛ مخصوصاً چون Docker دسترسیهای سطح بالایی به سیستم میزبان دارد.
docker - نصب داکر
———————
🐳 Docker چیست؟
قبل از نصب، خیلی ساده:
Docker ابزاری برای اجرای برنامهها داخل Container است.
مثلاً بهجای اینکه برای اجرای Nginx کل یک VM بسازیم:
VM
├── OS
├── Kernel
├── Nginx
└── Config
با Docker میتوانیم فقط Container مربوط به Nginx را اجرا کنیم.
———————-
🐳 نصب Docker در Ubuntu / Debian
1️⃣ آپدیت مخازن
sudo apt update
2️⃣ نصب ابزارهای موردنیاز
sudo apt install ca-certificates curl
3️⃣ اضافه کردن کلید Repository داکر
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg \
-o /etc/apt/keyrings/docker.asc
برای Ubuntu باید مسیر Repository را متناسب با Ubuntu تنظیم کنی؛ روش رسمی Docker از Repository خود Docker استفاده میکند.
———————-
در Debian/Ubuntu بعد از اضافه کردن Repository رسمی:
sudo apt update
سپس:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
——————
🔍 بررسی نصب
docker --version
مثلاً:
Docker version 28.x.x
و:
systemctl status docker
اگر دیدی:
Active: active (running)
یعنی Docker در حال اجراست. ✅
—————-
🚀 تست Docker
مهمترین تست:
sudo docker run hello-world
Docker یک Image کوچک به نام
hello-world دریافت میکند و یک Container از روی آن اجرا میکند.اگر پیام:
Hello from Docker!
را دیدی، یعنی Docker درست نصب شده. 🎉
——————
👤 اجرای Docker بدون sudo
بهصورت پیشفرض ممکن است مجبور باشی بنویسی:
sudo docker ps
اگر میخواهی کاربر فعلی بدون
sudo از Docker استفاده کند:sudo usermod -aG docker $USER
بعد یکبار Logout/Login کن.
سپس:
docker ps
⚠️ عضویت در گروه
docker عملاً دسترسی بسیار بالایی روی سیستم میدهد؛ روی سرور چندکاربره باید با احتیاط انجام شود.——————-
🐧 نصب روی RHEL / AlmaLinux / Rocky
در سیستمهای Red Hat:
sudo dnf install -y dnf-plugins-core
Repository داکر را اضافه میکنیم:
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
بعد:
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
سرویس را فعال و اجرا میکنیم:
sudo systemctl enable --now docker
تست:
docker --version
و:
sudo docker run hello-world
——————
🧠 چند دستور اولیه که بعد از نصب لازم داری
docker ps
کانتینرهای در حال اجرا
docker ps -a
همه کانتینرها
docker images
Imageهای موجود
docker pull nginx
دریافت Image
docker run nginx
ساخت و اجرای Container
docker stop CONTAINER
توقف Container
docker start CONTAINER
اجرای دوباره Container
——————-
🎯 زنجیره Docker را اینطوری حفظ کن:
Docker
↓
Image
↓
Container
↓
Application
مثلاً:
nginx Image
↓
nginx Container
↓
Web Server
نکته: برای آموزش دوره، بهتر است نصب Docker را روی VM آزمایشگاهی انجام بدهی، نه سرور اصلی؛ مخصوصاً چون Docker دسترسیهای سطح بالایی به سیستم میزبان دارد.
فصل پنجم — قسمت پنجاه و هشت 🐧
KVM - نصب kvm
———————
🧠 KVM چیست؟
KVM = Kernel-based Virtual Machine
یعنی قابلیت مجازیسازی که داخل Kernel لینوکس قرار دارد.
خیلی ساده:
KVM به لینوکس اجازه میدهد ماشین مجازی اجرا کند.
——————
1️⃣ بررسی پشتیبانی CPU
اول ببینیم CPU قابلیت Virtualization دارد:
اگر عددی مثل:
دیدی یعنی CPU قابلیت Virtualization دارد.
همچنین:
—————
2️⃣ نصب KVM در Debian / Ubuntu
ابتدا:
بعد:
برای بررسی:
مثلاً:
یا روی AMD:
—————
3️⃣ فعال کردن Libvirt
بررسی:
اگر:
دیدی، سرویس فعال است.
—————
4️⃣ اضافه کردن کاربر به گروهها
برای اینکه لازم نباشد همیشه با
و:
بعد باید Logout/Login کنی.
——————
🖥 Virt-Manager چیست؟
Virt-Manager یک رابط گرافیکی برای مدیریت ماشینهای مجازی KVM/libvirt است.
یعنی بهجای اینکه همهچیز را با دستور انجام دهی:
Virt-Manager خودش KVM نیست.
خیلی مهم:
—————-
🚀 اجرای Virt-Manager
در محیط دسکتاپ:
پنجره برنامه باز میشود.
معمولاً یک Connection به شکل:
میبینی.
————-
🖥 ساخت VM با Virt-Manager
داخل Virt-Manager:
مثلاً:
بعد VM را Start میکنی.
——————
🧰 چند دستور مهم KVM/libvirt
دیدن VMها:
همه VMها:
روشن کردن:
خاموش کردن:
اجباری خاموش کردن:
ریستارت:
نمایش اطلاعات:
—————
🧠
اگر Virt-Manager رابط گرافیکی باشد، virsh ابزار خط فرمان libvirt است.
مثلاً:
یا از طریق Terminal:
——————
یک مثال واقعی
میخواهی روی Ubuntu یک Windows VM بسازی:
پس Virt-Manager خودش ماشین مجازیساز نیست؛ فقط یک پنل مدیریتی برای زیرساخت KVM/libvirt است.
KVM - نصب kvm
———————
🧠 KVM چیست؟
KVM = Kernel-based Virtual Machine
یعنی قابلیت مجازیسازی که داخل Kernel لینوکس قرار دارد.
خیلی ساده:
Hardware
↓
Linux Kernel
↓
KVM
↓
VM1 VM2 VM3
KVM به لینوکس اجازه میدهد ماشین مجازی اجرا کند.
نکته: خود KVM بیشتر نقش لایه مجازیسازی را دارد و معمولاً در کنار QEMU + libvirt استفاده میشود.
——————
1️⃣ بررسی پشتیبانی CPU
اول ببینیم CPU قابلیت Virtualization دارد:
egrep -c '(vmx|svm)' /proc/cpuinfo
اگر عددی مثل:
8
دیدی یعنی CPU قابلیت Virtualization دارد.
vmx → Intel VT-xsvm → AMD-Vهمچنین:
lscpu | grep Virtualization
—————
2️⃣ نصب KVM در Debian / Ubuntu
ابتدا:
sudo apt update
بعد:
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virt-manager
برای بررسی:
lsmod | grep kvm
مثلاً:
kvm_intel
kvm
یا روی AMD:
kvm_amd
kvm
—————
3️⃣ فعال کردن Libvirt
sudo systemctl enable --now libvirtd
بررسی:
systemctl status libvirtd
اگر:
Active: active (running)
دیدی، سرویس فعال است.
—————
4️⃣ اضافه کردن کاربر به گروهها
برای اینکه لازم نباشد همیشه با
sudo کار کنی:sudo usermod -aG libvirt $USER
و:
sudo usermod -aG kvm $USER
بعد باید Logout/Login کنی.
——————
🖥 Virt-Manager چیست؟
Virt-Manager یک رابط گرافیکی برای مدیریت ماشینهای مجازی KVM/libvirt است.
یعنی بهجای اینکه همهچیز را با دستور انجام دهی:
KVM
↓
libvirt
↓
Virt-Manager
↓
GUI
Virt-Manager خودش KVM نیست.
خیلی مهم:
KVM → موتور/قابلیت مجازیسازی
QEMU → شبیهسازی و اجرای VM
libvirt → مدیریت VMها
Virt-Manager → رابط گرافیکی
—————-
🚀 اجرای Virt-Manager
در محیط دسکتاپ:
virt-manager
پنجره برنامه باز میشود.
معمولاً یک Connection به شکل:
QEMU/KVM
میبینی.
————-
🖥 ساخت VM با Virt-Manager
داخل Virt-Manager:
Create a new virtual machine
↓
Local install media
↓
ISO File
↓
انتخاب RAM
↓
انتخاب CPU
↓
انتخاب Disk
↓
Network
↓
Finish
مثلاً:
Name: Ubuntu-Test
RAM: 4 GB
CPU: 2 Core
Disk: 30 GB
ISO: ubuntu.iso
بعد VM را Start میکنی.
——————
🧰 چند دستور مهم KVM/libvirt
دیدن VMها:
virsh list
همه VMها:
virsh list --all
روشن کردن:
virsh start ubuntu-test
خاموش کردن:
virsh shutdown ubuntu-test
اجباری خاموش کردن:
virsh destroy ubuntu-test
ریستارت:
virsh reboot ubuntu-test
نمایش اطلاعات:
virsh dominfo ubuntu-test
—————
🧠
virsh چیست؟اگر Virt-Manager رابط گرافیکی باشد، virsh ابزار خط فرمان libvirt است.
مثلاً:
Virt-Manager
↓
libvirt
↓
KVM
↓
Hardware
یا از طریق Terminal:
virsh
↓
libvirt
↓
KVM
——————
یک مثال واقعی
میخواهی روی Ubuntu یک Windows VM بسازی:
Ubuntu
↓
KVM
↓
QEMU
↓
libvirt
↓
Virt-Manager
↓
Windows VM
پس Virt-Manager خودش ماشین مجازیساز نیست؛ فقط یک پنل مدیریتی برای زیرساخت KVM/libvirt است.
👏1