HARDLINK(1) أوامر المستخدم HARDLINK(1)

الاسم

hardlink - ربط نسخ متعددة من ملف

موجز

hardlink [خيارات] دليل|‎ملف...

الوصف

hardlink هي أداة تستبدل نسخ الملف إما بروابط صلبة (hardlinks) أو بنسخ مستنسخة عند الكتابة (copy-on-write clones)، مما يوفر المساحة.

تقوم hardlink أولاً بإنشاء شجرة ثنائية لأحجام الملفات ثم تقارن محتوى الملفات التي لها نفس الحجم. هناك طريقتان أساسيتان لمقارنة المحتوى. طريقة memcmp تقرأ كتل البيانات مباشرة من الملفات وتقارن بينها. الطريقة الأخرى تعتمد على المجموع الاختباري (مثل SHA256)؛ في هذه الحالة، يُحسب مجموع اختباري لكل كتلة بيانات بواسطة واجهة برمجة تطبيقات التشفير في نواة لينكس، ويُخزن هذا المجموع الاختباري في مساحة المستخدم ويُستخدم لمقارنات الملفات.

يتم أيضاً تخزين مخزن مؤقت "intro" (32 بايت) في الخبيئة لكل ملف. يُستخدم هذا المخزن المؤقت بشكل مستقل عن طريقة المقارنة وحجم الخبيئة المطلوب وحجم الإدخال/الإخراج. يقلل مخزن "intro" المؤقت بشكل كبير من العمليات على محتوى البيانات لأن الملفات غالباً ما تكون مختلفة من البداية.

الخيارات

-c، --content

ضع في الاعتبار محتوى الملف فقط، وليس السمات، عند تحديد ما إذا كان ملفان متساويين. مماثل لـ -pot.

-b، --io-size حجم

حجم مخزن read(2) أو sendfile(2) المؤقت المستخدَم عند مقارنة محتويات الملفات. يمكن أن يُتبع معامل حجم باللاحقات المضاعفة KiB و MiB وما إلى ذلك. تُعد "iB" اختيارية، فعلى سبيل المثال، "K" لها نفس معنى "KiB". القيمة المبدئية هي 8KiB لطريقة memcmp و 1MiB للطرق الأخرى. تستخدم طريقة memcmp فقط ذاكرة العمليات للمخزن المؤقت، بينما تستخدم الطرق الأخرى طريقة النسخ الصفري وتُنفذ عملية الإدخال/الإخراج في النواة. قد يُعدل الحجم آليًا ليتناسب مع عدد مجموعات التحقق من المحتوى المخزنة في الخبيئة.

-d، --respect-dir

محاولة وصل الملفات التي لها نفس اسم الدليل فقط. يُتجاهل الدليل ذو المستوى الأعلى (كما هو محدد في سطر الأوامر لـ hardlink). على سبيل المثال، سيقوم hardlink --respect-dir /foo /bar بوصل /foo/some/file مع /bar/some/file، ولكن ليس مع /bar/other/file. إذا دُمج مع --respect-name، فتُقارن المسارات الكاملة (باستثناء دليل المستوى الأعلى).

-f، --respect-name

محاولة وصل الملفات التي لها نفس الاسم (الأساسي) فقط. يُوصى بشدة باستخدام الخيارات الطويلة بدلًا من -f الذي يُفسر بطريقة مختلفة في تطبيقات hardlink الأخرى.

-F، --prioritize-trees

الإبقاء على الملفات الموجودة في أول دليل مستوى أعلى محدد في حال وجود ملفات متطابقة متعددة في أشجار مختلفة. على سبيل المثال، سيقوم hardlink foo/ bar/ بوصل الملفات في bar/ بالملفات المساوية لها في دليل foo/.

-i، --include تعبير_نمطي

تعبير نمطي لتضمين الملفات. إذا أُعطي الخيار --exclude، فيعيد هذا الخيار تضمين الملفات التي كانت ستُستثنى لولاه. إذا استُخدم الخيار دون --exclude، فتُضمن الملفات التي تطابق النمط فقط.

-l، --list-duplicates

عدم وصل أي شيء، ولكن سرد المسار المطلق لكل ملف مكرر، بمعدل ملف لكل سطر، مسبوقًا بمميز فريد بحجم 16 بايت وعلامة جدولة.

-m، --maximize

من بين الملفات المتساوية، يُبقى على الملف الذي يملك أعلى عدد روابط.

-M، --minimize

من بين الملفات المتساوية، يُبقى على الملف الذي يملك أدنى عدد روابط.

--mount

لا تعبر الأدلة الموجودة على أنظمة ملفات مختلفة (ابقَ داخل نظام الملفات نفسه).

-n، --dry-run

عدم التنفيذ، فقط طباعة ما قد يحدث.

-o، --ignore-owner

وصل الملفات ومقارنتها حتى لو اختلفت معلومات المالك (المستخدم والمجموعة). قد تكون النتائج غير متوقعة.

-O، --keep-oldest

من بين الملفات المتساوية، يُبقى على أقدم ملف (أقل وقت تعديل حديث). مبدئيًا، يُبقى على أحدث ملف. إذا حُدد --maximize أو --minimize، فإن لعدد الروابط أولوية أعلى من وقت التعديل.

-p، --ignore-mode

وصل الملفات ومقارنتها حتى لو اختلف وضعها. قد تكون النتائج غير متوقعة قليلًا.

-q، --quiet

الوضع الصامت، لا يُطبع أي شيء.

-r، --cache-size حجم

حجم الخبيئة لمجموعات التحقق من المحتوى. تحسب كافة الطرق التي لا تستخدم memcmp مجموع التحقق لكل كتلة من محتوى الملف (انظر --io-size)، وتُخزن مجموعات التحقق هذه في الخبيئة للمقارنة التالية. الحجم مهم للملفات الكبيرة أو لمجموعات كبيرة من الملفات ذات الحجم نفسه. القيمة المبدئية هي 10MiB.

--reflink[=متى]

إنشاء نسخ مستنسخة بتقنية النسخ عند الكتابة (تُعرف باسم reflinks) بدلاً من الوصلات الصلبة. تتشارك الملفات الموصلة عبر تقنية reflink في البيانات المخزنة على القرص فقط، ولكن يمكن أن يختلف وضع الملف ومالكه. ويُنصح باستخدام هذا الخيار مع خياري --ignore-owner و --ignore-mode. يتضمن هذا الخيار تفعيل --skip-reflinks لتجاهل الملفات المستنسخة مسبقاً.

المعطى الاختياري متى يمكن أن يكون never أو always أو auto. وإذا أُهمل المعطى متى، فإنه يعود مبدئياً إلى auto، وهو ما يعني أن hardlink يفحص نوع نظام الملفات ويستخدم تقنية reflinks على أنظمة BTRFS و XFS و ZFS فقط، ويتراجع إلى الوصلات الصلبة عندما يكون إنشاء reflink مستحيلاً. أما المعطى always فيعطل الكشف عن نوع نظام الملفات والتراجع إلى الوصلات الصلبة، وهو ما يعني السماح بـ reflinks فقط.

--skip-reflinks

تجاهل الملفات المستنسخة مسبقًا. يمكن استخدام هذا الخيار دون --reflink عند إنشاء وصلات صلبة تقليدية.

-s، --minimum-size حجم

الحد الأدنى للحجم المراد مراعاته. مبدئيًا هذه القيمة هي 1، لذا لن تُوصل الملفات الفارغة. يمكن أن يُتبع معامل حجم باللاحقات المضاعفة KiB (=1024)، و MiB (=1024*1024)، وما إلى ذلك لـ GiB و TiB و PiB و EiB و ZiB و YiB (تُعد "iB" اختيارية، فعلى سبيل المثال، "K" لها نفس معنى "KiB").

-S، --maximum-size حجم

الحد الأقصى للحجم المراد مراعاته. مبدئيًا هذه القيمة هي 0 وللرقم 0 معنى خاص وهو غير محدود. يمكن أن يُتبع معامل حجم باللاحقات المضاعفة KiB (=1024)، و MiB (=1024*1024)، وما إلى ذلك لـ GiB و TiB و PiB و EiB و ZiB و YiB (تُعد "iB" اختيارية، فعلى سبيل المثال، "K" لها نفس معنى "KiB").

-t، --ignore-time

وصل الملفات ومقارنتها حتى لو اختلف وقت تعديلها. يُعد هذا خيارًا جيدًا عادةً.

-v، --verbose

مخرجات مسهبة، توضح للمستخدم ما الذي يجري تنفيذه. إذا حُدد مرة واحدة، يُعرض كل ملف موصول وصلًا صلبًا. إذا حُدد مرتين، فإنه يعرض أيضًا كل مقارنة.

-x، --exclude تعبير_نمطي

تعبير نمطي يستبعد ملفات من المقارنة والوصل. يمكن استخدام هذا الخيار مرات متعددة.

--exclude-subtree تعبير_نمطي

تعبير نمطي يستبعد أدلة كاملة من المقارنة والوصل. يمكن أيضًا استخدام هذا الخيار مرات متعددة.

-X، --respect-xattrs

حاول فقط وصل الملفات التي لها نفس السمات الموسعة.

-y، --method اسم

ضبط طريقة مقارنة محتوى الملف. الطرق المدعومة حالياً هي sha256 و sha1 و crc32c و memcmp. الطريقة المبدئية هي sha256، أو memcmp إذا لم تكن واجهة برمجة تطبيقات التشفير في لينكس (Linux Crypto API) متاحة. نُفذت الطرق القائمة على فحص المجموع بطريقة النسخ الصفري (zero-copy)، وهو ما يعني عدم نسخ محتويات الملف إلى مساحة المستخدم وإجراء جميع الحسابات في النواة.

-z، --zero

فصل الأسطر ببايت NUL بدلاً من سطر جديد (لـ -l).

-h، --help

اعرض نص المساعدة ثم اخرج.

-V، --version

اعرض الإصدار واخرج.

المعطيات

يأخذ hardlink دليلًا واحدًا أو أكثر حيث سيُبحث فيها عن ملفات لوصلها.

البيئة

ULFILEEQ_DEBUG=all

يُفعل مخرجات التنقِيح لمقارنات الملفات.

العلل

يستخدم تطبيق hardlink الأصلي الخيار -f لإجبار إنشاء وصلات صلبة بين أنظمة الملفات. هذه الميزة نادرة الاستخدام لم تعد متاحة في hardlink الحالي.

يفترض hardlink أن الشجيرات التي يعمل عليها لا تتغير أثناء التشغيل. وإذا تغيرت الشجيرة، فإن النتيجة تكون غير محددة ومن المحتمل أن تكون خطيرة. على سبيل المثال، إذا استُبدل ملف عادي بجهاز، فقد يبدأ hardlink في القراءة من الجهاز. وإذا استُبدل مكون من مسار بوصلة رمزية أو تغيرت أذونات ملف، فقد تُخترق الأمان. لا تشغل hardlink على شجيرة تتغير أو على شجيرة يتحكم فيها مستخدم آخر.

المؤلف

توجد تطبيقات متعددة لـ hardlink. التطبيق الأول كان من قبل Jakub Jelinek لتوزيعة Fedora، وقد استُخدم هذا التطبيق في util-linux بين الإصدارين v2.34 و v2.36. أما التطبيق الحالي فيعتمد على إصدار Debian من Julian Andres Klode.

التبليغ عن الأخطاء

لتقارير العِلل، استخدم مُتتبع المشكلات https://github.com/util-linux/util-linux/issues.

التوفر

الأمر hardlink جزء من حزمة util-linux التي يمكن تنزيلها من أرشيف نواة لينكس https://www.kernel.org/pub/linux/utils/util-linux/.

2026-05-18 util-linux 2.42.1