معمل أنظمة التشغيل - الأسبوع الثالث
المقرر: CS211P - نظام التشغيل (1)
الكلية: كلية الحاسبات والمعلومات - جامعة المنصورة
الفصل الدراسي: خريف 2024-2025
الفرقة: الثانية
جدول المحتويات
1. أمرا echo و cat
1.1 أمر echo
يُستخدم أمر echo لعرض نص أو سلسلة حروف على الطرفية.
الصياغة الأساسية:
echo stringمثال:
echo "Hello, Operating Systems!"الناتج: Hello, Operating Systems!
1.2 إعادة توجيه الناتج إلى ملف
بدلًا من عرض الناتج على الطرفية، يمكنك إعادة توجيهه إلى ملف باستخدام المُعامل >> (إلحاق) أو المُعامل > (استبدال كامل).
الإلحاق بملف:
echo "This is a new line" >> fileName.txtاستبدال محتوى ملف بالكامل:
echo "This will replace all content" > fileName.txtملاحظة:
>يُنشئ ملفًا جديدًا أو يستبدل المحتوى الموجود بالكامل>>يُلحق النص بنهاية الملف الموجود، أو يُنشئ ملفًا جديدًا إن لم يكن موجودًا
1.3 أمر cat
يُستخدم أمر cat (اختصار concatenate) لقراءة محتوى الملفات وعرضه.
الصياغة الأساسية:
cat fileNameمثال:
cat myfile.txt1.4 استخدامات متقدمة لأمر cat
عرض المحتوى مع ترقيم الأسطر:
cat -n fileNameمثال:
cat -n script.shالناتج:
1 #!/bin/bash
2 echo "Hello World"
3 # This is a commentعرض محتوى عدة ملفات معًا:
cat fileName1 fileName2مثال:
cat file1.txt file2.txt2. ملكية ملفات Linux
في Linux، لكل ملف ومجلد ثلاثة أنواع من الملكية:
2.1 المالك (User - u)
- المستخدم الذي أنشأ الملف
- يمتلك التحكم الأساسي في الملف
- يستطيع تعديل الصلاحيات
2.2 المجموعة (Group - g)
- يمكن أن تضم المجموعة عدة مستخدمين
- يشترك جميع مستخدمي المجموعة في نفس الصلاحيات على الملف
- مفيدة في العمل الجماعي
2.3 الآخرون (Others - o)
- يمثلون كل من عداهم على النظام
- المستخدمون الذين ليسوا المالك ولا ينتمون إلى المجموعة
- عادةً ما يملكون أضيق صلاحيات وصول
مثال:
ls -l myfile.txtالناتج:
-rw-r--r-- 1 mahmoud students 1234 Oct 12 10:30 myfile.txt- المالك:
mahmoud - المجموعة:
students - الآخرون: كل المستخدمين الآخرين
3. صلاحيات الملفات
يستخدم Linux نظام صلاحيات للتحكم في الوصول إلى الملفات والمجلدات. توجد ثلاثة أنواع من الصلاحيات:
3.1 أنواع الصلاحيات
| الصلاحية | الرمز | القيمة الرقمية | للملفات | للمجلدات |
|---|---|---|---|---|
| القراءة | r | 4 | فتح الملف وقراءته | عرض محتويات المجلد |
| الكتابة | w | 2 | تعديل محتوى الملف | إنشاء الملفات وحذفها وإعادة تسميتها داخل المجلد |
| التنفيذ | x | 1 | التشغيل كبرنامج | الدخول إلى المجلد (cd) |
| بلا صلاحية | - | 0 | لا يوجد وصول | لا يوجد وصول |
3.2 بنية الصلاحيات
تُعرَض الصلاحيات بالصيغة التالية:
-rwxrwxrwxتفصيل الصيغة:
- rwx rwx rwx
│ │ │ │
│ │ │ └─── صلاحيات الآخرين
│ │ └─────── صلاحيات المجموعة
│ └─────────── صلاحيات المالك
└────────────── نوع الملف (- لملف عادي، d لمجلد)مثال:
-rw-r--r--- المالك: قراءة + كتابة (rw-)
- المجموعة: قراءة فقط (r--)
- الآخرون: قراءة فقط (r--)
3.3 حساب الصلاحيات بالنظام الرقمي
يمكن التعبير عن الصلاحيات كرقم ثماني (Octal) من ثلاثة أرقام:
| الصلاحية | الحساب | القيمة |
|---|---|---|
| rwx | 4 + 2 + 1 | 7 |
| rw- | 4 + 2 + 0 | 6 |
| r-x | 4 + 0 + 1 | 5 |
| r-- | 4 + 0 + 0 | 4 |
| -wx | 0 + 2 + 1 | 3 |
| -w- | 0 + 2 + 0 | 2 |
| --x | 0 + 0 + 1 | 1 |
| --- | 0 + 0 + 0 | 0 |
مثال:
- الأمر
chmod 755يعني:- المالك: rwx (7)
- المجموعة: r-x (5)
- الآخرون: r-x (5)
3.4 تغيير الصلاحيات باستخدام chmod
يُعدِّل أمر chmod (اختصار change mode) صلاحيات الملفات.
الطريقة الأولى: الطريقة الرمزية (Symbolic)
الصياغة:
chmod [who][operation][permission] filenameمن (who):
u= المستخدم (المالك)g= المجموعةo= الآخرونa= الجميع (المستخدم والمجموعة والآخرون)
العملية (operation):
+= إضافة صلاحية-= إزالة صلاحية== تحديد الصلاحية بدقة
أمثلة:
# إضافة صلاحية التنفيذ للمالك
chmod u+x script.sh
# إزالة صلاحية الكتابة من المجموعة
chmod g-w file.txt
# إضافة القراءة والكتابة للجميع
chmod a+rw document.txt
# إزالة صلاحية التنفيذ من الآخرين
chmod o-x program
# تحديد الصلاحيات بدقة: المالك=rw، المجموعة=r، الآخرون=بلا صلاحية
chmod u=rw,g=r,o= file.txtالطريقة الثانية: الطريقة الرقمية (الثمانية - Octal)
الصياغة:
chmod [number] filenameأمثلة:
# المالك: rwx، المجموعة: ---، الآخرون: r--
chmod 704 file.txt
# المالك: rw-، المجموعة: r--، الآخرون: r--
chmod 644 document.txt
# المالك: rwx، المجموعة: r-x، الآخرون: r-x
chmod 755 script.sh
# المالك: rw-، المجموعة: rw-، الآخرون: ---
chmod 660 private.txtأنماط الصلاحيات الشائعة:
644- الصلاحيات القياسية للملفات (المالك يقرأ ويكتب، الآخرون يقرؤون فقط)755- الصلاحيات القياسية للملفات التنفيذية والمجلدات700- ملف/مجلد خاص (المالك وحده يملك حق الوصول)777- جميع الصلاحيات للجميع (نادرًا ما يُنصح باستخدامه)
4. الأرشفة والضغط
4.1 الأرشفة مقابل الضغط
الأرشفة (Archiving):
- تجمع عدة ملفات ومجلدات في ملف واحد
- لا تُقلِّل من حجم الملفات
- تستخدم الامتداد
.tar - مفيدة لتنظيم الملفات المتعددة ونقلها
الضغط (Compression):
- يُقلِّل من حجم الملفات
- يوفِّر مساحة القرص وعرض النطاق الترددي
- يستخدم امتدادات مثل
.gzو.zip - مفيد لتخزين الملفات الكبيرة ونقلها
4.2 أمر tar (الأرشفة)
tar اختصار لـ"Tape Archive"، ويُستخدم لإنشاء ملفات الأرشيف.
إنشاء أرشيف
الصياغة:
tar cvf archive_name.tar file1 file2 directory_nameالخيارات:
c= إنشاء أرشيف جديدv= وضع مُفصَّل (verbose)، لعرض التقدمf= تحديد اسم الملف
مثال:
tar cvf backup.tar file1.txt file2.txt documents/استخراج أرشيف
الصياغة:
tar xvf archive_name.tarالخيارات:
x= استخراج الملفات من الأرشيفv= وضع مُفصَّلf= تحديد اسم الملف
مثال:
tar xvf backup.tarعرض محتويات الأرشيف
الصياغة:
tar tvf archive_name.tarالخيارات:
t= عرض قائمة المحتوياتv= وضع مُفصَّلf= تحديد اسم الملف
مثال:
tar tvf backup.tar4.3 أمر gzip (الضغط)
يقوم gzip بضغط ملف واحد ويضيف له الامتداد .gz.
ضغط ملف
الصياغة:
gzip filenameمثال:
gzip largefile.txt
# ينشئ: largefile.txt.gz (ويُحذف الملف الأصلي)ملاحظة: بشكل افتراضي، يحذف gzip الملف الأصلي بعد ضغطه.
فك ضغط ملف
الصياغة:
gzip -d filename.gz
# أو
gunzip filename.gzمثال:
gzip -d largefile.txt.gz
# يستعيد: largefile.txtالجمع بين tar و gzip
يمكنك إنشاء أرشيفات مضغوطة باستخدام الأمرين معًا:
الطريقة الأولى: خطوتان منفصلتان
tar cvf archive.tar files/
gzip archive.tar
# ينشئ: archive.tar.gzالطريقة الثانية: أمر واحد
tar czf archive.tar.gz files/
# c = إنشاء، z = الضغط باستخدام gzip، f = اسم الملفاستخراج أرشيف tar مضغوط:
tar xzf archive.tar.gz
# x = استخراج، z = فك الضغط باستخدام gzip، f = اسم الملف4.4 أمر zip (الضغط)
يقوم zip بضغط الملفات والمجلدات في أرشيف بامتداد .zip (متوافق مع Windows).
إنشاء أرشيف zip
الصياغة:
zip -r archive_name.zip file1 file2 directory_nameالخيارات:
-r= تكراري (recursive)، لتضمين المجلدات
مثال:
zip -r backup.zip file1.txt file2.txt documents/استخراج أرشيف zip
الصياغة:
unzip archive_name.zipمثال:
unzip backup.zipالاستخراج إلى مجلد محدد:
unzip backup.zip -d /path/to/destination/عرض المحتويات دون استخراج:
unzip -l backup.zip5. أوامر معلومات النظام
5.1 أوامر مساحة القرص
df - استخدام نظام ملفات القرص
يعرض مساحة القرص المستخدمة لجميع أنظمة الملفات المُركَّبة (Mounted).
الصياغة:
df -hالخيارات:
-h= صيغة مقروءة للإنسان (KB، MB، GB)
مثال على الناتج:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 20G 28G 42% /
/dev/sda2 100G 75G 20G 79% /homedu - استخدام المجلد
يعرض مساحة القرص التي تستخدمها المجلدات.
الصياغة:
du -hs directory_nameالخيارات:
-h= صيغة مقروءة للإنسان-s= ملخص (الحجم الإجمالي فقط)
مثال:
du -hs /home/mahmoud/documents/
# الناتج: 2.3G /home/mahmoud/documents/5.2 استخدام الذاكرة
free - استخدام الذاكرة ومساحة الـ Swap
يعرض استخدام الذاكرة (RAM) ومساحة الـ Swap.
الصياغة:
free
# أو للصيغة المقروءة للإنسان
free -hمثال على الناتج:
total used free shared buff/cache available
Mem: 7.7G 2.1G 3.2G 256M 2.4G 5.1G
Swap: 2.0G 0B 2.0G5.3 أوامر معلومات النظام
اسم الجهاز والشبكة
# عرض اسم الجهاز
hostname
# عرض عنوان IP
hostname -Iالتاريخ والوقت
# عرض التاريخ والوقت الحاليين
date
# عرض تقويم الشهر الحالي
cal
# عرض تقويم سنة محددة
cal 2025معلومات المستخدم
# عرض اسم المستخدم الحالي (الطريقة الأولى)
echo $USER
# عرض اسم المستخدم الحالي (الطريقة الثانية)
whoami
# عرض معرِّف المستخدم والمجموعات
idمثال على الناتج:
$ whoami
mahmoud
$ id
uid=1000(mahmoud) gid=1000(mahmoud) groups=1000(mahmoud),27(sudo),999(docker)5.4 سجل الأوامر (History)
# عرض الأوامر المستخدمة مؤخرًا
history
# حفظ السجل في ملف
history > commands.txt
# تنفيذ أمر محدد من السجل
!123 # ينفذ الأمر رقم 123
# تنفيذ آخر أمر
!!
# البحث في سجل الأوامر
history | grep "chmod"5.5 اختبار الشبكة
ping - فحص اتصال الشبكة
يختبر الاتصال بخادم أو عنوان IP.
الصياغة:
ping server_name
# أو
ping IP_addressمثال:
ping google.com
ping 8.8.8.8إيقاف ping بالضغط على: Ctrl + C
تحديد عدد مرات الإرسال:
ping -c 5 google.com
# يرسل 5 حزم ping فقط5.6 الخروج من الطرفية
exit
# أو اضغط Ctrl + D6. تمارين المعمل
تمرين 1: أمرا echo و cat
- أنشئ ملفًا باسم
greeting.txtيحتوي على النص "Hello from FCIS" باستخدامecho - اعرض محتوى
greeting.txtباستخدامcat - ألحق عبارة "Mansoura University" بالملف
- اعرض الملف مع ترقيم الأسطر
- أنشئ ملفًا آخر
info.txtيحتوي على اسمك ورقمك الجامعي - اعرض الملفين معًا باستخدام أمر
catواحد
الحل:
echo "Hello from FCIS" > greeting.txt
cat greeting.txt
echo "Mansoura University" >> greeting.txt
cat -n greeting.txt
echo "Name: Mahmoud Abas" > info.txt
echo "Student ID: 12345" >> info.txt
cat greeting.txt info.txtتمرين 2: صلاحيات الملفات
- أنشئ ملفًا باسم
script.shيحتوي على بعض النصوص - تحقق من صلاحياته الحالية باستخدام
ls -l - أعطِ المالك صلاحية التنفيذ باستخدام الطريقة الرمزية
- أزِل صلاحية الكتابة من المجموعة باستخدام الطريقة الرمزية
- اضبط الصلاحيات على 755 باستخدام الطريقة الرقمية
- أنشئ مجلدًا واضبط صلاحياته على 700
الحل:
echo "#!/bin/bash" > script.sh
echo "echo 'Test script'" >> script.sh
ls -l script.sh
chmod u+x script.sh
chmod g-w script.sh
chmod 755 script.sh
mkdir mydir
chmod 700 mydir
ls -ld mydirتمرين 3: الأرشفة والضغط
- أنشئ ثلاثة ملفات نصية بمحتوى مختلف
- أنشئ أرشيف tar يحتوي على الملفات الثلاثة
- اعرض قائمة محتويات الأرشيف
- استخرج الأرشيف للتحقق
- اضغط أحد الملفات باستخدام
gzip - أنشئ أرشيف zip يضم جميع الملفات
- قارن الفرق في الحجم بين الملفات الأصلية والمضغوطة
الحل:
echo "File 1 content" > file1.txt
echo "File 2 content" > file2.txt
echo "File 3 content" > file3.txt
tar cvf myarchive.tar file1.txt file2.txt file3.txt
tar tvf myarchive.tar
tar xvf myarchive.tar
gzip file1.txt
ls -lh
zip myfiles.zip file2.txt file3.txt file1.txt.gz
ls -lhتمرين 4: معلومات النظام
- اعرض اسم جهازك
- اعرض عنوان IP الخاص بك
- اعرض التاريخ والوقت الحاليين
- اعرض تقويم هذا الشهر
- تحقق من استخدام مساحة القرص بصيغة مقروءة للإنسان
- تحقق من حجم مجلدك الرئيسي (Home Directory)
- اعرض استخدام الذاكرة
- اعرض اسم المستخدم الخاص بك بثلاث طرق مختلفة
- أرسل ping إلى google.com خمس مرات
الحل:
hostname
hostname -I
date
cal
df -h
du -hs ~
free -h
echo $USER
whoami
id
ping -c 5 google.comتمرين 5: تحدٍّ شامل
أنشئ سكريبت يقوم بما يلي:
- إنشاء مجلد باسم "lab3_project"
- إنشاء ثلاثة مجلدات فرعية بداخله: "docs" و"scripts" و"data"
- إنشاء ملفات نموذجية داخل كل مجلد
- ضبط الصلاحيات المناسبة (755 للمجلدات، 644 للملفات)
- إنشاء أرشيف tar مضغوط للمشروع بالكامل
- عرض مقارنة الحجم بين المجلد والأرشيف
الحل:
# إنشاء بنية المجلدات
mkdir -p lab3_project/{docs,scripts,data}
# إنشاء ملفات نموذجية
echo "Documentation file" > lab3_project/docs/readme.txt
echo "#!/bin/bash" > lab3_project/scripts/run.sh
echo "echo 'Running script'" >> lab3_project/scripts/run.sh
echo "Sample data: 1,2,3,4,5" > lab3_project/data/data.csv
# ضبط الصلاحيات
chmod 755 lab3_project lab3_project/*
chmod 644 lab3_project/docs/* lab3_project/data/*
chmod 755 lab3_project/scripts/*
# إنشاء أرشيف مضغوط
tar czf lab3_project.tar.gz lab3_project/
# عرض مقارنة الحجم
echo "Directory size:"
du -hs lab3_project/
echo "Archive size:"
ls -lh lab3_project.tar.gzملخص
في هذا المعمل، تعلمت:
✅ أمرا echo و cat: عرض النصوص وقراءة محتوى الملفات
✅ ملكية الملفات: فهم المالك والمجموعة والآخرين
✅ صلاحيات الملفات: القراءة والكتابة والتنفيذ باستخدام الطريقتين الرمزية والرقمية
✅ الأرشفة: استخدام tar لتجميع الملفات معًا
✅ الضغط: تقليل حجم الملفات باستخدام gzip وzip
✅ أوامر النظام: فحص مساحة القرص والذاكرة واتصال الشبكة ومعلومات المستخدم
مصادر إضافية
- صفحات دليل Linux:
man command_name(مثلman chmod) - مساعدة أوامر Linux:
command_name --help(مثلchmod --help) - مصادر عبر الإنترنت:
نصائح للنجاح
- تدرَّب بانتظام - تصبح أوامر Linux أسهل مع التكرار
- استخدم الإكمال التلقائي - اضغط Tab لإكمال أسماء الملفات والأوامر تلقائيًا
- اقرأ رسائل الخطأ - عادةً ما تخبرك بما حدث خطأ
- استخدم صفحات
man- تحتوي على معلومات تفصيلية عن الأوامر - كن حذرًا مع الصلاحيات - الصلاحيات الخاطئة قد تجعل الملفات غير قابلة للوصول
- انسخ ملفاتك احتياطيًا قبل الضغط - احتفظ دائمًا بنسخة من الملفات المهمة
نهاية المعمل 03