انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => انجمن عمومی => نویسنده: 🇬🇧بریتانیای کبیر🇬🇧 در 26 آبان 1401، 08:35 ب‌ظ

عنوان: دلیل خرابی لینک های نرم ایجاد شده توسط ln در پوشه ای که در آن نیستیم؟(حل شد)
ارسال شده توسط: 🇬🇧بریتانیای کبیر🇬🇧 در 26 آبان 1401، 08:35 ب‌ظ
من وقتی با ln لینک می‌سازم:
لینک های سخت که هیچ مشکلی ندارند
ولی برای لینک های نرم باید حتما او لینک نرمرو در پوشه ای که در اون هستم ایجاد کنم و اگه در پوشه ثالثی( مثلا در پوشه دسکتاپ  باشم و یه لینک نرم از یه فایل داخل پوشه dir درون پوشه dir2 بسازم) یا اینکه حتی درون پوشه دسکتاپ باشم و یه لینک از یکی از فایلهای درون پوشه دسکتاپ  در پوشه dir بسازم، لینکه بروکن (شکسته و خراب میشه) میشه.
چرا؟
عنوان: پاسخ : دلیل خرابی لینک های نرم ایجاد شده توسط ln در پوشه ای که در آن نیستیم؟
ارسال شده توسط: سودو. در 26 آبان 1401، 10:52 ب‌ظ
نمی‌دونم دقیقا داستان چیه ولی من یه بار قدیما با لینکا به مشکل خوردم و کشف کردم که باید آدرس دقیق ( absolute path ) فایل رو بدی! هم تارگت و هم سورس!
عنوان: پاسخ : دلیل خرابی لینک های نرم ایجاد شده توسط ln در پوشه ای که در آن نیستیم؟
ارسال شده توسط: 🇬🇧بریتانیای کبیر🇬🇧 در 26 آبان 1401، 10:56 ب‌ظ
ابسلوت ترجمش میشه مطلق. ؛)
 مگه ابزار ln تافته جدا بافتس که با ریلیتیو پس کار نکنه؟ دلیلش چرا؟
ویرایش: رفتم امتحان کردم فقط لازمه تارگت ابسلوت پس باشه. سورس رو ریلیتیو هم قبول میکنه. چرا ولی لینک سخت نباید این جوری باشه؟ 
ویرایش ۲ : رفتم با cp یه لینک نرم بشازم و اونم همینو گفت:
cp -s dir/file dir1cp: dir1/file: can make relative symbolic links only in current directory
عنوان: پاسخ : دلیل خرابی لینک های نرم ایجاد شده توسط ln در پوشه ای که در آن نیستیم؟
ارسال شده توسط: سودو. در 26 آبان 1401، 11:12 ب‌ظ
می‌دونم، من‌م ترجمش نکردم.
تاکید کردم که نمی‌دونم داستان چیه! فقط کشف کردم که این‌جوری درست کار می‌ده!
عنوان: پاسخ : دلیل خرابی لینک های نرم ایجاد شده توسط ln در پوشه ای که در آن نیستیم؟
ارسال شده توسط: M!lad در 27 آبان 1401، 10:35 ق‌ظ
لینک relative دقیقا با آدرس relativeای که شما بهش می‌دید ساخته می‌شه و انتظار داره فایلی که بهش اشاره می‌کنه در همون آدرس وجود داشته باشه. اینکه محل ذخیره شدن لینک کجا هست تاثیری در لینک نداره، به همین دلیل در زمانی که می‌خواید لینک رو با آدرس‌دهی relative بسازید باید آدرس رو از محل قرارگیری لینک بدید.

cd ~
mkdir dir1 dir2
touch dir1/file
ln -s dir1/file dir2/mylink
ln -s ../dir1/file dir2/mynewlink

mylink کار نمی‌کنه چون انتظار داره در dir2 یک دایرکتوری و فایل با آدرس dir1/file وجود داشته باشه که نداره.
mynewlink اما با آدرس‌دهی درست ساخته شده.

بحث hardlink هم که کلا متفاوت هست چون صرفا با inode فایل سر و کار داریم.