إدارة الملفات والمجلدات على Red Hat Enterprise Linux


محمد أحمد العيل

نكمل في هذا الدّرس، الثاني من سلسلة الدّروس التحضيريّة لـشهادة RHCSA، ما بدأناه في الدّرس الأول؛ بالتّركيز على أوامر إدارة الملفّات والمجلّدات في Red Hat Enterprise Linux. هذه المهارات مطلوبة للحصول على الشهادة، كما أنها من الأنشطة التي لا يكاد يخلو يوم عمل بالنسبة لمدير أنظمة لينكس منها.

redhat-rhcsa-files-folders.png

أغلب الشروحات الواردة هنا تصلُح على توزيعات لينكس الأخرى.

إنشاء الملفات والمجلدات، حذفها، نسخها ونقلها

يعدّ إنشاء الملفات أو حذفها من سطر الأوامر أول ما تجب عليك معرفته في إطار إدارة الملفات. نفس الشيء بالنّسبة للمجلّدات التي ما هي في النهاية سوى ملفّ بمواصفات خاصّة.

إنشاء ملف: أمر 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.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن