نكمل في هذا الدّرس، الثاني من سلسلة الدّروس التحضيريّة لـشهادة RHCSA، ما بدأناه في الدّرس الأول؛ بالتّركيز على أوامر إدارة الملفّات والمجلّدات في Red Hat Enterprise Linux. هذه المهارات مطلوبة للحصول على الشهادة، كما أنها من الأنشطة التي لا يكاد يخلو يوم عمل بالنسبة لمدير أنظمة لينكس منها.
أغلب الشروحات الواردة هنا تصلُح على توزيعات لينكس الأخرى.
إنشاء الملفات والمجلدات، حذفها، نسخها ونقلها
يعدّ إنشاء الملفات أو حذفها من سطر الأوامر أول ما تجب عليك معرفته في إطار إدارة الملفات. نفس الشيء بالنّسبة للمجلّدات التي ما هي في النهاية سوى ملفّ بمواصفات خاصّة.
إنشاء ملف: أمر touch
يُستخدَم أمر touch
لإنشاء ملف فارغ أو لتحديث بيانات الوصول والتّعديل على ملف موجود. ننشئ في المثال التالي ملفًّا باسم testfile
، ثم نسرد معلومات الملفّ باستخدام الأمر ls -l
. يظهر وقت إنشاء الملف Apr 27 20:41
وتاريخه. نضيف محتوى إلى الملف ثم نعيد سرد معلوماته ونلاحظ تغيّرات من ضمنها التاريخ Apr 27 20:43
.
$ touch testfile $ ls -l testfile -rw-rw-r--. 1 meyil meyil 0 Apr 27 20:41 testfile $ echo "Hsoub Academy" > testfile $ ls -l testfile -rw-rw-r--. 1 meyil meyil 14 Apr 27 20:43 testfile
انتظر دقيقة تقريبا ثم نفذ أمر touch
على الملفّ. سيظهر تغيّر في تاريخ التّعديل. يمكنك التأكّد من أن محتواه لم يتغير بتنفيذ أمر cat
.
$ touch testfile $ ls -l testfile -rw-rw-r--. 1 meyil meyil 14 Apr 27 20:44 testfile $ cat testfile Hsoub Academy
يُنشأ الملف الناتج عن تنفيذ أمر touch
في المجلّد الحالي؛ إذا أردت إنشاءه في مجلّد مغاير فيمكنك تمرير المسار إلى الأمر على النحو التالي:
$ touch folder/filename
يُنشئ الأمر ملفّا باسم filename
ضمن المجلّد folder
.
تحديد نوع ملف: أمر file
يمكنك استخدام أمر file
لتحديد نوع الملفّ (ملفّ، مجلّد، قرص صلب، … إلخ).
$ file testfile testfile: ASCII text
حذف ملف: أمر rm
يحذف أمر rm
الملف المرَّر في المعطى:
$ rm testfile
يمكن أيضا تمرير مسار الملف كاملا إن لم يكن موجودا في مجلّد العمل:
$ rm folder/testfile
توجد خيّارات يمكن تمريرها للأمر rm
؛ سنرى بضعةً منها بعد قليل.
إنشاء مجلد: أمر mkdir
يمكن إنشاء مجلّد ضمن مجلّد العمل بأمر mkdir
على النحو التالي:
$ mkdir directory
استخدم خيار p-
مع أمر mkdir
إن أردت إنشاء مسار كامل:
$ mkdir -p dirA/dirA1/dirA12/
ينتُج عن تنفيذ الأمر مع الخيار p-
في المثال السابق إنشاءُ مجلّد باسم dirA
وبداخله مجلّد فرعي dirA1
وبداخل هذا الأخير مجلد باسم dirA12
.
حذف مجلد: أمر rmdir أو rm
إن كان المجلّد فارغا فيمكن حذفه بالأمر rmdir
:
$ rmdir directory
أما إن لم يكن فارغا فستحتاج لحذف محتوياته أولا أو استخدام خيّار r-
مع أمر rm
الذي يحذف المجلّد وما حوى:
$ rm -r dirA/dirA1/dirA12/
يوجد أيضا خيّار f-
الذي يُستخدَم مع r-
لتأكيد الحذف وعدم إظهار أية رسائل تطلُب التأكيد:
$ rm -rf dirA
ينبغي الحذر عموما عند استخدام أمر rm
وبالأخص مع خيّارَيْ r-
وf-
؛ فالاستخدام غير الحذر ربّما يؤدّي لضياع البيانات والكثير من المشاكل.
إعادة توجيه المدخلات والمخرجات
يتيح سطر الأوامر إمكانية توجيه مُخرَج أمر، أي نتيجة تنفيذه، إلى أمر آخر عن طريق ما يُسمّى بالأنابيب Pipelines. تُصبح حصيلة الأمر الموجَّه (المُخرَج) معطى (مُدخَلا) للأمر الموجَّه إليه. توجد حيلة أخرى تُعرف بإعادة التوجيه Redirecting تتمثّل في حفظ نتيجة أمر في ملفّ، أو أخذ محتوى ملفّ وجعله مُدخلا للأمر.
سنحتاج حتى نستوعب مفهوميْ الأنابيب وإعادة التوجيه إلى فهم تدفّقات الإدخال والإخراج Input and Output Streams.
ملحوظة: التدفقات Streams هي سلسلة من المحارف تنتقل من مَصدر إلى وِجهة. المُدخَل Input هو البيانات التي يتلقّاها الأمر أما المُخرَج Output فهو البيانات التي تنتج عن تنفيذ الأمر.
- الإدخال المعياري Standard input, stdin: وهو المَصدر المبدئي الذي يتلقّى منه الأمر المُدخلات؛ أي لوحة المفاتيح.
- الإخراج المعياريّ Standard output, stdout: وهو الوجهة المبدئية التي يُرسل إليها الأمر مُخرجاته؛ أي سطر الأوامر (الشّاشة).
- الخطأ المعياريّ Standard erro, stderr: وهو الوجهة التي يُرسل إليها الأمر رسائل الخطأ في حال حدوثها؛ أي سطر الأوامر.
نأخذ الأمر التالي مثالا:
$ ls /var /hsoub ls: cannot access /hsoub: No such file or directory /var: account adm cache crash db empty games gopher kerberos lib local lock log mail nis opt preserve run spool tmp yp
يطلُب الأمر السابق عرض محتويات المجلديْن var/
و hsoub/
.
يسير التدفّق من الإدخال المعياري (لوحة المفاتيح) إلى الإخراج المعياري (سطر الأوامر، الشّاشة)؛ أي أن الأمر ls
يأخذ المُدخَل var/
من لوحة المفاتيح (الضّغط على زرّ Enter
) ثم يرسل نتيجة التنفيذ (المُخرَج، أي لائحة بالمجلّدات والملفّات الموجودة في المجلّد var/
) إلى الشاشة لعرضها.
بالنّسبة لـ hsoub/
فالمجلّد غير موجود لذا تظهر رسالة خطأ بذلك؛ في هذه الحالة يسير التدفّق من الإدخال المعياري (لوحة المفاتيح) إلى الخطأ المعياري (سطر الأوامر، الشّاشة) الذي يعرض رسالة الخطأ.
ربما تطرح السّؤال؛ ما علاقة التدفقات المعياريّة بالأنابيب وإعادة التوجيه؟
الجواب هو أننا أثناء إعادة التوجيه نجعل ملفّا مكان أحد التدفقات المعيارية. مثلا؛ بدل أن تظهر نتيجة الأمر على الشاشة (الإخراج المعياري، stdout) "نوجّهها" إلى ملف. أي أننا نقول للأمر "لا تستخدم الإخراج المعياري، استخدم ملفا مكانه" (ينطبق نفس المبدأ على التدفقات الأخرى). بالنسبة للأنابيب فنطلب من الأمر الأول إرسال مخرجاته ليس إلى الإخراج المعياري بل إلى أمر ثان؛ ونقول للأمر الثاني "خذ مدخلاتك ليس من الإدخال المعياري بل من الأمر الذي قبلك".
أعد قراءة الجمل الأخيرة بتأنّ.
توجد عوامل Operators للتّوجيه؛ وذلك على النّحو التالي:
العامِل | العمل |
---|---|
<
|
يعيد توجيه الإخراج المعياري (مُخرَج الأمر) إلى ملف. إن كان الملف موجودا فسيُبدَل محتواه وإن لم يكن موجودا فسيُنشَأ. |
<<
|
يعيد توجيه الإخراج المعياري ويلصقه في نهاية ملف. |
<2
|
يعيد توجيه الخطأ المعياري إلى ملف. إن كان الملف موجودا فسيُبدَل محتواه وإن لم يكن موجودا فسيُنشَأ. |
<<2
|
يعيد توجيه الخطأ المعياري ويلصقه في نهاية ملف |
<&
|
يعيد توجيه كلّ من الإخراج والخطأ إلى ملف. إن كان الملف موجودا فسيُبدَل محتواه وإن لم يكن موجودا فسيُنشَأ. |
>
|
يستخدم الملفّ المحدّد مكان الإدخال المعياري (معطى، مُدخَل). |
<>
|
يُستخدَم الملف المحدّد مكان للإخراج والإدخال |
يُرمَز للأنبوب بـ |
الذي يوضَع بين أمرين (أو أكثر) كما سنرى.
إليك أمثلة على إعادة التوجيه واستخدام الأنابيب:
إعادة توجيه مخرج أمر إلى ملف
نفترض أنك تريد سرد جميع الملفات والمجلدات الموجودة في مجلّد ثم حفظ النتيجة في ملف. يمكن إنجاز هذه المهمّة بالأمر التالي:
$ ls -1 /var/mail > mail.txt
يسرُد الأمر ls -1 /var/mail
محتويات المجلّد var/mail/
؛ يطلُب الخيّار 1-
من أمر ls
طباعة ملف واحد في كل سطر. نستخدم عامل إعادة التوجيه <
لنحيل التدفق من الإخراج المعياري (stdout
) إلى الملف mail.txt
.
إعادة توجيه المخرج ورسائل الخطأ في نفس الوقت
يوجد على الأنظمة الشبيهة بيونكس ملفّ خاص يسمّى ملفّ العدم (أو الثّقب الأسود). الملفّ موجود على المسار dev/null/
ويتميّز بكونه "يبتلع" كلّ ما يُكتَب فيه فلا يبقى له أثر في النظام. يُستخدَم هذا الملفّ عادة للتخلّص من تدفق مخرجات عمليّة على لينكس عبر توجيهها إليه.
$ ls /var /hsoub ls: cannot access /hsoub: No such file or directory /var: account adm cache crash db empty games gopher kerberos lib local lock log mail nis opt preserve run spool tmp yp $ ls /var/hsoub &> /dev/null
لاحظ أن تنفيذ الأمر الثاني لا تنتج عنه أية مخرجات ولا رسائل خطأ؛ على عكس الأول الذي يظهر رسالة خطأ بالنسبة للمجلّد غير الموجود ومحتوى المجلّد الآخر.
استخدام ملف مدخلا لأمر
يُستخدَم أمر cat
لطباعة محتوى ملفّ يمرّر اسمه في معطيات الأمر على النحو التالي:
$ cat file
غير أنه يمكننا استخدام إعادة التوجيه مع الأمر cat
؛ مثلا:
$ cat < mail.txt
جعل مخرج أمر مدخلا لآخر
نفترض أنك تريد حساب عدد الملفات والمجلّدات الفرعيّة في المجلّد الحالي. أحد الحلول هو سرد محتويات المجلّد باستخدام الخيّار 1-
مع ls
ثم استخدام أنبوب |
لتمرير هذا المُخرَج إلى أمر wc
الذي يحسب عدد الأسطر إذا استُخدم معه الخيار l-
؛ كالتالي:
$ ls -1 | wc -l
راجع مقال مقدمة إلى إعادة توجيه الإدخال/الإخراج (I/O) في لينكس للمزيد حول الموضوع.
تجميع الملفات وضغطها
يُستخدَم التجميع (أو الأرشفة) لجمع أكثر من ملفّ معا؛ مثلا لإرسالها عبر البريد أو لنقلها إلى وسيط تخزين آخر. تُطبَّق غالبا على الملفّات المجمّعة (الأرشيفات) خوارزميّات ضغط للتقليل من حجم الملفّ. الأمر الأشهر للتّجميع على لينكس هو tar
. بالنّسبة للخوارزميّات فالثلاثة التالية هي الأكثر شيوعا على غنو/لينكس: gzip
، bzip2
وxz
. يعدّ gzip
الأقدم من بينها والأقل كفاءة، bzip2
أحدث منه وأحسن؛ أما xz
فهو الأحدث من بين الثلاثة والأكثر كفاءة. يشير امتداد الملفّات المضغوطة إلى الخوارزميّة المستخدمة gz.
بالنسبة لـgzip
، وbz2.
بالنسبة لـbzip2
وxz.
بالسبة لخوارزميّة xz
.
يجمع الأمر التالي الملفّين file1
و file2
في أرشيف باسم archive.tar
:
$ tar -cf archive.tar file1 file2
يُخبر الخيّار c-
الأمر tar
أننا بصدد إنشاء ملف مجمَّع؛ أما الخيّار f-
فيحدّد اسم ملف التجميع؛ الذي يسبق اسمُه اسمَ الملفات التي نريد جمعها.
ملحوظة 1: إن كنت تريد استخدام أكثر من خيار في نفس الوقت فيمكنك كتابتها ملتصقة مع وجود الشرطة -
أمامها. تنطيق هذه الملاحظة على الخيارات المختصرة .
ملحوظة 2: غالبا توجد أكثر من طريقة لكتابة الخيّار، واحدة مختصرة مثل c-
وأخرى مسهبة مثل create--
. تشير صفحة التوثيق إلى الاثنين.
ملحوظة 3: ابدأ عند كتابة خيارات tar
بتلك التي تحدّد الوضع (الإنشاء، الاستخراج، …إلخ) واجعل الخيار f
هو الأخير.
في مايلي بعض الخيارات المهمة المستعملة مع أمر tar
لتجميع الملفات.
ينبغي أولا تحديد ما نريده من الأمر tar
؛ هل نريد إنشاء أرشيف أو استخراج ملفات من أرشيف أم شيئا آخر. تحدّد الخيارات التاليّة الأوضاع الأساسيّة التي يعمل عليها tar
.
الخيار | العمل |
---|---|
c
|
إنشاء ملف تجميع |
A
|
إضافة ملفات تجميع إلى ملف تجميع آخر |
r
|
إضافة ملفّات (ليست ملفات تجميع) إلى ملفّ تجميع |
u
|
وضع النسخ الأحدث من الملفاّت مكان النّسخ القديمة ضمن ملفّ التجميع |
d
|
مقارنة ملفات ضمن الأرشيف بتلك بتلك الموجودة في مجلّد |
t
|
سرد محتوى الأرشيف |
x
|
استخراج ملفّات من الأرشيف |
ملحوظة: لا يمكن استخدام خيّاريْن من القائمة أعلاه في نفس الوقت.
تأتي بعد تحديد وضع العمل خيّارات تكيّف عمل tar
؛ ومن أهمها التاليّة.
الخيار | العمل |
---|---|
C
|
الانتقال إلى مجلّد معيَّن قبل بدء عمل الأمر |
p
|
المحافظة على أذون الملفّات |
v
|
سرد جميع الملفّات المقروءة أو المستخرجة. يُظهر هذا الخيار عند استخدامه في الوضع t- المشار إليه حجمَ الملفّات، مالكها والتاريخ. |
'--exclude='FILE
|
يستبعد الملفّ FILE من الأرشيف
|
z
|
يستعمل خوارزميّة gzip لضغط الأرشيف |
j
|
يستعمل خوارزميّة bzip2 لضغط الأرشيف |
J
|
يستعمل خوارزميّة xz لضغط الأرشيف |
ملحوظة: يأخذ tar
مبدئيا مسارات نسبية، يظهر الخطأ tar: Removing leading / from member names
عند إعطاء مسار مطلق. هذا السلوك معد لأسباب أمنية، لذا ينصح بالالتزام بمسارات نسبية، وإن كان لابد من استخدام مسارات مطلقة يمكن استخدام الخيار P-
؛ مثلا على النحو التالي:
$ tar -cPf archive.tar /home/academy/
أمثلة على استخدام أمر tar
- إنشاء ملف تجميع وضغطه:
ينشئ الأمر التالي ملف تجميع لجميع الملفات الموجودة في المجلّد hsoub/academy
:
$ tar cf academy.tar hsoub/academy/*
نختار خوارزميّة ضغط إن أردنا ضغط الملفّ أثناء التجميع (لاحظ امتداد الملف والخيّار المستخدم):
-
خوارزميّة
gzip
:
$ tar czf academy.tar.gz hsoub/academy/*
-
خوارزميّة
bzip2
:
$ tar cjf academy.tar.bzp2 hsoub/academy/*
-
خوارزميّة
xz
:
$ tar cJf academy.tar.xz hsoub/academy/*
-
المحافظة على الأذون والملكيّة أثناء تجميع الملفات:
ترغب أحيانا في ترك أذون الملفّات وملكيتها كما هي أثناء تجميعها أو ضغطها؛ مثلا أثناء النسخ الاحتياطي لمجلدات مستخدمي النظام. يحمل ملف التجميع في السلوك المبدئي لأمر tar
أذونَ وصلاحياتِ المستخدِم الذي ينفذ الأمر.
نستخدم الخيّارين same-permissions--
و same-owner--
في المثال التالي للمحافظة على الصلاحيّات والأذون:
$ tar cJf academy.tar.xz hsoub/academy/* --same-permissions --same-owner
إنشاء الوصلات الصلبة والرمزية
توجد في لينكس نوعيّة من الملفات تسمى الوصلات Links وهي مؤشرات تحيل إلى ملفّ آخر. تنقسم الوصلات إلى صلبة Hard ورمزيّة Symbolic (أو ليّنة Soft).
تشير الوصلات الصّلبة إلى نفس مساحة القرص التي يستغلها الملف؛ بينما تشير الوصلات اللينة إلى أسماء الملفات. يعني هذا أنك عند حذف وصلة صلبة فأنت تحذف الملف من القرص الصّلب؛ بينما عندما تحذف وصلة رمزيّة فالمحذوف هو المؤشر فقط. الخلاصة هي أن الوصلة الصّلبة تحيل لبيانات على القرص بينما الوصلة الرمزيّة تحيل لاسم الملف فقط.
من الفروقات بين النوعين أن الوصلة الصلبة لا تأخذ مساحة من القرص (هذه المساحة موجودة أصلا وأخذها الملف الذي تشير إليه الوصلة) بينما تأخذ الوصلة الرمزية مساحة صغيرة. يسهل نقل الوصلات الرمزيّة بين نظم الملفات على عكس الوصلات الصّلبة.
يُستخدم الأمر ln
لإنشاء الوصلات. إن لم نحدّد خيارا مع الأمر فسينشئ وصلة صلبة. لإنشاء وصلة لينة نستخدم الخيار s-
. نمرّر للأمر معطيَيْن؛ الأول هو الملف الهدف (الذي نريد إنشاء وصلة له) والثاني اسم الوصلة.
-
وصلة صلبة باسم
LINK_NAME
تشير إلى الملفTARGET
:
$ ln TARGET LINK_NAME
-
وصلة رمزية باسم
LINK_NAME
تشير إلى الملفTARGET
:
$ ln -s TARGET LINK_NAME
أمثلة على الوصلات
لا توجد طريقة أفضل من إنشاء الوصلات لفهم كيفيّة عملها.
نبدأ بإنشاء مجلد ننشئ فيه ملفات هذا المثال، ثم ننتقل إليه:
$ mkdir links_folder $ cd links_folder
ثم ننشئ ملفا باسم links_test
ونكتب فيه بضعة كلمات:
$ touch links_test $ echo "Testing links..." > links_test
نستخدم الآن الأمر ln
لإنشاء وصلة صلبة باسم hard_link
تشير إلى الملف links_test
:
$ ln links_test hard_link
ثم وصلة رمزية باسم soft_link
تشير لنفس الملفّ:
$ ln -s links_test soft_link
نسرُد محتوى المجلد:
$ ls -l total 8 -rw-rw-r--. 2 meyil meyil 17 Apr 29 16:57 hard_link -rw-rw-r--. 2 meyil meyil 17 Apr 29 16:57 links_test lrwxrwxrwx. 1 meyil meyil 10 Apr 29 16:57 soft_link -> links_test
لاحظ أن معلومات الملفيْن hard_link
وlinks_test
متطابقة تماما. على عكس الملف soft_link
الذي توجد أمامه علامة تدلّ على الملفّ الذي يشير إليه.
نجرّب الآن عرض محتويات الملفّات الثلاثة:
$ cat hard_link Testing links... $ cat soft_link Testing links... $ cat links_test Testing links...
لا فرق من هذه الناحية، نفس المحتوى. نجرّب حذف الملفّ الأصلي:
$ rm links_test
ثم نعرض محتوى الوصلة الصّلبة:
$ cat hard_link Testing links...
نفس المحتوى، لم يتغيّر شيء. ماذا لو عرضنا محتوى الوصلة الرمزيّة؟:
$ cat soft_link cat: soft_link: No such file or directory
تقول رسالة الخطأ إن الملف soft_link
غير موجود؛ ولكنه يظهر عند عرض محتويات المجلّد:
ls -l total 4 -rw-rw-r--. 1 meyil meyil 17 Apr 29 17:07 hard_link lrwxrwxrwx. 1 meyil meyil 10 Apr 29 17:08 soft_link -> links_test
يعود السبب في ذلك إلى أن الملفّ soft_link
يشير إلى اسم الملف links_test
الذي لم يعد موجودا؛ أما الوصلة الصلبة فلديها إمكانيّة الوصول المباشر إلى البيانات على القرص الصّلب.
يكثُر استخدام الوصلات الرمزية للإشارة إلى ملفّات تتغيّر باستمرار. لنفرض مثلا أن برنامجا ما يحتاج لمكتبة برمجيّة تُحدّث باستمرار؛ بدلا من كتابة اسم المكتبة وإصدارها مباشرة في البرنامج وتحديثه عند كل تحديث للمكتبة، بدلا منذ ذلك ننشئ وصلة رمزية نستخدمها في البرنامج وعند تحديث المكتبة نحدّث الوصلة الرمزية لتشير إلى الإصدار الجديد. هذه الطريقة أسهل، أسرع وآمَن؛ خصوصا إذا كان رابط المكتبة يظهر عشرات المرات في البرنامج.
خلاصة
تحدّثنا في هذا المقال عن الأوامر الأهم في إدارة الملفّات والمجلدات علي Red Hat Enterprise Linux ولينكس عموما. تأكد من مراجعة ما ورد في هذا المقال لاستيعابه ومتابعة الدروس الأخرى في السّلسة.
إن كانت لديك إضافات فاستخدم مربّع التعليقات. يوجد أيضا قسم للأسئلة استخدمه لطرح استشكالاتك.
ترجمة -وبتصرّف- للمقال RHCSA Series: How to Perform File and Directory Management – Part 2 لصاحبه Gabriel Cánepa.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.