أريد عمل رابط رمزي في نظام Linux. لقد كتبت أمر bash هذا حيث يكون المسار الأول هو المجلد الذي أريد الارتباط به والمسار الثاني هو المصدر المترجم.
ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
هل هذا صحيح؟
لإنشاء رابط جديد (سيفشل في حالة وجود رمز ارتباط بالفعل):
ln -s /path/to/file /path/to/symlink
لإنشاء أو تحديث رابط:
ln -sf /path/to/file /path/to/symlink
ln -s TARGET LINK_NAME
حيث -s
يجعلها رمزية.
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
(لأن صورة ASCII تساوي ألف حرف.)
قد يكون السهم ذاكرًا مفيدًا ، خاصة وأن هذا يبدو تمامًا تقريبًا في إيماكس.
وصورة كبيرة حتى لا تتشوش مع إصدار Windows
لينكس:
ln -s target <- linkName
شبابيك:
mklink linkName -> target
هل يمكن أن ننظر أيضا في هذه
ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"
لا ينبغي أن يكون from-here
موجودًا بعد ، بل يجب إنشاؤه ، بينما يجب أن يكون to-here
موجودًا بالفعل (IIRC).
(دائمًا ما أكون مختلطًا حول ما إذا كان يجب أن تتضمن الأوامر والوسيطات المختلفة موقعًا موجودًا مسبقًا ، أو موقعًا يجب إنشاؤه.)
تحرير: لا يزال غرق ببطء بالنسبة لي. لدي طريقة أخرى لقد كتبت في ملاحظاتي.
ln -s (target exists) (link is made)
mklink (link is made) (target exists)
ln -s source_file target_file
على السؤال الأصلي:
'ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal'
سيؤدي هذا بالفعل إلى إنشاء ارتباط رمزي (-s
) من الملف/الدليل:
<basebuild>/IpDome-kernel/kernel
إلى الرابط الجديد الخاص بك
/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
إليك بعض الطرق التي تساعدك على تذكر ما يلي:
أولاً ، هناك صفحة الرجل لـ ln
. يمكنك الوصول إلى ذلك من خلال البحث عن "man ln" في google ، أو مجرد فتح نافذة طرفية واكتب man ln
وستحصل على نفس المعلومات. تنص صفحة الرجل بوضوح:
ln [OPTION] ... [-T] TARGET LINK_NAME (النموذج الأول)
إذا كان عليك البحث عن صفحة رجل أو قراءتها في كل مرة ليس لك ، فقد يكون لديك وقت أسهل في تذكر أن جميع أوامر nix تعمل بنفس الطريقة :
cp /file/that/exists /location/for/new/file
mv /file/that/exists /location/its/moving/to
ln /file/that/exists /the/new/link
cp
بنسخ ملف موجود حاليًا (الوسيطة الأولى) إلى ملف جديد (الوسيطة الثانية) . mv
ينقل ملف موجود حاليًا (الوسيطة الأولى) إلى مكان جديد (الوسيطة الثانية)
بالمثل ln
يربط ملف موجود حاليًا (الوسيطة الأولى) إلى ارتباط جديد (الوسيطة الثانية)*
الخيار الأخير الذي أود أن أقترحه هو أنه يمكنك إنشاء صفحات خاصة بك للرجل يسهل قراءتها ويسهل عليك العثور عليها/تذكرها. ما عليك سوى إعداد نص شل بسيط يمنحك التلميح الذي تحتاجه. فمثلا♦:
في ملف .bash_aliases الخاص بك ، يمكنك وضع شيء مثل:
commandsfx() {
echo "Symlink: ln -s /path/to/file /path/to/symlink"
echo "Copy: cp /file/to/copy /destination/to/send/copy"
}
alias 'cmds'=commandsfx
ثم عند الحاجة ، من سطر الأوامر فقط اكتب cmds
وستسترجع بناء الجملة الصحيح بطريقة يمكنك قراءتها وفهمها بسرعة. يمكنك جعل هذه الوظائف متقدمة كما تريد الحصول على ما هي المعلومات التي تحتاجها ، الأمر متروك لك. يمكنك حتى جعلها تفاعلية حتى يكون عليك فقط اتباع التعليمات .. مثل:
makesymlink() {
echo "Symlink name:"
read sym
echo "File to link to:"
read fil
ln -s $fil $sym
}
alias 'symlink'=makesymlink
* - من الواضح أنه يمكنهم جميعًا اتخاذ معايير مختلفة والقيام بأشياء مختلفة ، ويمكنهم العمل على الملفات وكذلك الدلائل ... لكن الفرضية هي نفسها
examples - أمثلة باستخدام باش شل
ln [-Ffhinsv] source_file [target_file]
link, ln -- make links
-s Create a symbolic link.
A symbolic link contains the name of the file to which it is linked.
An ln command appeared in Version 1 AT&T UNIX.
افتح Bash Prompt واكتب الأمر المذكور أدناه لإنشاء رابط رمزي إلى ملفك:
أ) انتقل إلى المجلد حيث تريد إنشاء رابط ضعيف واكتب الأمر كما هو مذكور أدناه :
$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-file
B) انتقل إلى مسار اسم الملف الجديد الخاص بك ونوع :
$ ls -lrt (To see if the new-file is linked to the file or not)
مثال:
ls -lrt
lrwxrwxrwx 1 user user 24 Aug 6 23:40 new-file -> /home/user/file
Note: Where, A -> B Means, A is symbolically linked to B
ln -s sourcepath linkpathname
ملحوظة:
-s يجعل الروابط الرمزية بدلاً من الروابط الثابتة
إذا كنت في الدليل حيث تريد إنشاء symlink ، فتجاهل المسار الثاني.
cd myfolder
ln -s target
سيقوم بإنشاء ارتباط بين target
داخل myfolder
.
بناء الجملة العام
ln -s TARGET LINK_NAME
هذا هو Stack Overflow لذلك أفترض أنك تريد رمزًا:
تفترض جميع التعليمات البرمجية التالية أنك تريد إنشاء رابط رمزي باسم /tmp/link
الذي يرتبط بـ /tmp/realfile
.
الحذر: على الرغم من أن هذا الرمز يبحث عن الأخطاء ، إلا أنه لا يتحقق من وجود /tmp/realfile
بالفعل! هذا لأن رابط ميت لا يزال صالحًا ووفقًا لرمزك ، فقد ترغب (نادراً) في إنشاء الرابط قبل الملف الحقيقي.
#!/bin/sh
ln -s /tmp/realfile /tmp/link
حقيقي بسيط ، تمامًا كما تفعل في سطر الأوامر (وهو Shell). تتم معالجة جميع الأخطاء بواسطة مترجم Shell. يفترض هذا الرمز أن لديك مترجم Shell يعمل على /bin/sh
.
إذا لزم الأمر ، فلا يزال بإمكانك تنفيذ معالجة الأخطاء الخاصة بك باستخدام المتغير $?
والذي سيتم تعيينه فقط على 0 إذا تم إنشاء الرابط بنجاح.
#include <unistd.h>
#include <stdio.h>
int main () {
if( symlink("/tmp/realfile", "/tmp/link") != 0 )
perror("Can't create the symlink");
}
symlink
بإرجاع 0 فقط عندما يمكن إنشاء الرابط. في حالات أخرى ، أستخدم perror
لمعرفة المزيد حول المشكلة.
#!/usr/bin/Perl
if( symlink("/tmp/realfile", "/tmp/link") != 1) {
print STDERR "Can't create the symlink: $!\n"
}
يفترض هذا الرمز أن لديك مترجم Perl 5 في /usr/bin/Perl
. symlink
بإرجاع 1 فقط إذا كان يمكن إنشاء الرابط. في حالات أخرى ، أقوم بطباعة سبب الفشل في إخراج الخطأ القياسي.
أرغب في تقديم نسخة بسيطة باللغة الإنجليزية من الأوصاف المقدمة بالفعل.
ln -s /path-text/of-symbolic-link /path/to/file-to-hold-that-text
يقوم الأمر "ln" بإنشاء ارتباط FILE ، ويحدد "-s" أن نوع الارتباط سيكون رمزيًا. يمكن العثور على مثال لملف الارتباط الرمزي في تثبيت WINE (باستخدام "ls -la" لإظهار سطر واحد من محتويات الدليل):
lrwxrwxrwx 1 me power 11 Jan 1 00:01 a: -> /mnt/floppy
توجد معلومات معلومات الملف القياسية في اليسار (على الرغم من ملاحظة أن الحرف الأول هو "l" لـ "link") ؛ اسم الملف هو "a:" و "->" يشير أيضًا إلى أن الملف هو رابط. إنها تخبر WINE بشكل أساسي كيف سيتم ربط Windows "Drive A:" بمحرك أقراص مرنة في Linux. لإنشاء رابط رمزي SIMILAR فعليًا لذلك (في الدليل الحالي ، والقيام بهذا في الواقع لـ WINE أكثر تعقيدًا ؛ استخدم الأداة المساعدة "winecfg"):
ln -s /mnt/floppy a: //will not work if file a: already exists
لإنشاء رابط رمزي/ارتباط ضعيف ، استخدم:
ln -s {source-filename} {symbolic-filename}
على سبيل المثال:
ln -s file1 link1
هناك نوعان من الروابط:
الروابط الرمزية: تشير إلى مسار رمزي يشير إلى الموقع التجريدي لملف آخر
الروابط الثابتة: ارجع إلى الموقع المحدد للبيانات الفعلية.
في حالة الارتباطات الخاصة بك:
ln -s source target
يمكنك الرجوع إلى http://man7.org/linux/man-pages/man7/symlink.7.html
يمكنك إنشاء روابط صعبة للغاية
لا يمكن تمييز ارتباط ثابت إلى ملف من إدخال الدليل الأصلي؛ أي تغييرات على ملف مستقلة بشكل فعال عن الاسم المستخدم للإشارة إلى الملف. قد لا تشير الارتباطات الثابتة عادة إلى الدلائل وقد لا تمتد أنظمة الملفات.
ln source link
أجد بعض الخلط بين المصطلحين "الهدف" و "الدليل" في معلومات الرجل.
الهدف هو المجلد الذي نربطه بالدليل والارتباط بالدليل الفعلي (وليس الدليل الذي سترتبط به) ، إذا كان أي شخص يعاني من نفس الالتباس ، فلا تشعر بالوحدة.
هذا هو تفسيري لإنشاء Symlink (في نظام التشغيل Linux):
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK
يمكنك الانتقال إلى المجلد الذي تريد إنشاء الارتباط به وتشغيل الأمر أو تحديد المسار الكامل للارتباط الخاص بك بدلاً من NAME-OF-YOUR-SYMLINK.
cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK
OR
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER/NAME-OF-YOUR-SYMLINK
آمل أن يكون هذا يساعد أولئك (لا يزال) في حيرة من أمرهم.
الروابط هي في الأساس من نوعين:
الروابط الرمزية (Soft): رابط إلى مسار رمزي يشير إلى الموقع التجريدي لملف آخر
الروابط الثابتة: رابط إلى الموقع المحدد للبيانات الفعلية.
مثال 1: ln/root/file1/root/file2
أعلاه مثال على الرابط الثابت حيث يمكنك الحصول على نسخة من بياناتك الفعلية.
مثال 2: ln -s /path/to/file1.txt /path/to/file2.txt
سيقوم الأمر أعلاه بإنشاء ارتباط رمزي إلى file1.txt.
إذا قمت بحذف ملف مصدر مما لن يكون لديك أي شيء إلى الوجهة في Soft
عندما تفعل :
ليرة سورية
سترى أن هناك رقم inode مختلف للروابط.
لمزيد من التفاصيل ، يمكنك قراءة man of ln على نظام التشغيل linux.
شكر