প্রতীকী লিঙ্কের জন্য অনুমতিগুলি পরিবর্তন করুন


37

এই অনুমতিগুলির সাথে আমার একটি সিমিলিংক রয়েছে:

lrwxrwxrwx 1 myuser myuser       38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*

SyMLink একটি .tar.gz সংরক্ষণাগারে অবস্থিত। এখন যখন আমি ম্যাভেন ব্যবহার করে টার.gz সংরক্ষণাগারটি আনপ্যাক করি তখন সিমলিংকটি আর কার্যকর হয় না। তাই আমি সিমিলিংকটি পুনর্গঠন করার চেষ্টা করছি। প্রথমে আমি এলএন ব্যবহার করে সিমলিংক তৈরি করি তবে কীভাবে আমি মূল সিমলিংকের মতো একই অনুমতিগুলি সেট করব?

উত্তর:


59

আপনি একটি নতুন সিমিলিংক তৈরি করতে পারেন এবং এটিকে পুরানো লিঙ্কের অবস্থানে নিয়ে যেতে পারেন।

ln -s <new_location> npm2
mv -f npm2 npm

এটি লিঙ্কটির মালিকানা রক্ষা করবে। বিকল্পভাবে, আপনি chownলিঙ্কটির মালিকানা ম্যানুয়ালি সেট করতে ব্যবহার করতে পারেন ।

chown -h myuser:myuser npm

বেশিরভাগ সিস্টেমে সিমলিংকের অনুমতি নিয়ে কিছু আসে যায় না। সিমলিংকটি ব্যবহার করার সময়, সিমলিংকের টার্গেটের উপাদানগুলির অনুমতিগুলি পরীক্ষা করা হবে। তবে কিছু সিস্টেমে এগুলি গুরুত্বপূর্ণ do MacOS এর জন্য লিঙ্কটিতে পড়ার অনুমতি প্রয়োজন readlink, এবং নেটবিএসডি এর sympermমাউন্ট অপশনটি লিঙ্কের অনুমতিগুলি পড়ার এবং ট্র্যাভারসাল চেক করতে বাধ্য করে। এই সিস্টেমে (এবং তাদের আত্মীয়স্বজন, ফ্রিবিএসডি এবং ওপেনবিএসডি সহ) এর সমতুল্য -hবিকল্প রয়েছে chmod

chmod -h 777 npm

1
আমি মাত্র একটি সেন্টোস 6.8 সার্ভারে সিমলিংকগুলির সাথে একটি অনুমতি সমস্যায় পড়েছি। প্রতিলিঙ্কগুলির মালিক ছিল: মূলের গোষ্ঠী: মূল। যখন মালিক এবং গোষ্ঠীটি যে ডিরেক্টরিতে ছিল তাদের মালিকানাধীন ব্যবহারকারীর কাছে পরিবর্তন করা হয়েছিল, যেমন এই উত্তরে দেখানো হয়েছে, অনুমতি সমস্যাটি চলে গেল।
নাইট আউল

কেবল একটি স্পষ্টতা প্রদান। একটি সিমিলিংকে মালিকানা বা অধিকারগুলি পরিবর্তন করতে, -h পতাকাটি ডিসিফারেন্সযুক্ত ফাইলের পরিবর্তে সিমলিংক ফাইলকে প্রভাবিত করবে।
14

12

আপনি যখন chmodলিঙ্কটির অনুমতি সেট করার জন্য ব্যবহার করার চেষ্টা করবেন , আসলে আপনি যা করেন তা হ'ল লিংকের টার্গেটের অনুমতিগুলি সেট করা link লিঙ্কটির অনুমতিগুলি অর্থহীন।


2
কেউ যদি দূষিত কোডটিতে লিঙ্কটি পরিবর্তন করে? মূল কোড এমনকি এমন কিছু হতে পারে যা রুট কেবল অ্যাক্সেস করতে পারে। উদাহরণস্বরূপ crontap স্ক্রিপ্টগুলিতে।
aliqandil

@aliqandil সাধারণত কোনও ব্যবহারকারী কোনও ডিরেক্টরিতে কোনও ফাইল মুছে ফেলা ও পুনরায় তৈরি করতে পারে যার জন্য তাদের লেখার অ্যাক্সেস রয়েছে। ব্যাশ, একটি ফাইলের জন্য testসঙ্গে -rw-rw-r-- root root, জন্য rm testআমি প্রম্পট পাবেন rm: remove write-protected regular empty file 'test'?সমাধান ডিরেক্টরিগুলি থেকে সংবেদনশীল ফাইল, যার জন্য ব্যবহারকারীদের অ্যাক্সেস শুধুমাত্র পাঠযোগ্য আছে স্থান হয়।
আনঅ্যাকসিডিয়ালচাষু

5

আপনার যখন একটি লিঙ্ক থাকে:

link -> foo/bar

এবং এটিকে পরিবর্তন করতে চান:

link -> new/target

বিবেচনা দুটি মামলা আছে:

  1. foo/barডিরেক্টরি নয় বা বিদ্যমান নেই বা আপনার কাছে অনুসন্ধানের অ্যাক্সেস নেই foo। তারপর

    ln -s new/target link
    

    ব্যর্থ হবে কারণ linkইতিমধ্যে বিদ্যমান, তবে আপনি মানটি ব্যবহার করে এটি কাটিয়ে উঠতে পারেন:

    ln -fs new/target link
    
  2. foo/barএকটি ডিরেক্টরি (এবং আপনাকে ডিরেক্টরিটি fooনির্ধারণ করতে সক্ষম হতে সন্ধানের অনুমতি রয়েছে foo/bar)। সেক্ষেত্রে আপনি যখন করবেন:

    ln -s new/target link
    

    অথবা

    ln -fs new/target link
    

    targetএটি linkডিরেক্টরি ভিতরে একটি নতুন সিমলিংক তৈরি হিসাবে বোঝা গেছে ( linkএটি একটি ডিরেক্টরি কারণ এটি ডিরেক্টরিতে একটি সিমলিংক foo/bar)। সুতরাং আপনি আসলে একটি তৈরি করতে হবে:

    foo/bar/target -> new/target
    

    lnএটি কাটিয়ে ওঠার জন্য, জিএনইউতে -Tলিঙ্কের নামটি সর্বদা লিংক নাম হিসাবে বিবেচিত হওয়ার জন্য একটি বিকল্প রয়েছে এবং লিঙ্কটি গুলি তৈরি করার জন্য ডিরেক্টরি হিসাবে নয় So সুতরাং, জিএনইউ দিয়ে ln:

    ln -fsT new/target link
    

    কাজ করবে. আগের মত, এটি আসল linkসিমিলিংকটি সরিয়ে এটিকে নতুন new/targetহিসাবে লক্ষ্য হিসাবে তৈরি করবে (এবং প্রক্রিয়াটি 'euid এবং egid হিসাবে মালিক হিসাবে)।

    জিএনইউতেও lnএকটি -nবিকল্প রয়েছে। এটা তোলে মত কাজ করে -Tযখন ব্যতীত linkআসলে একটি বাস্তব ডিরেক্টরি যে ক্ষেত্রে এটি এখনও ডিরেক্টরিটি ভিতরে সিমবলিক লিঙ্ক তৈরি করবে (পরিবর্তে একটি ত্রুটির কথা ব্যর্থ) হয়।

    বহনযোগ্যভাবে, আপনার সেরা বিকল্পটি হ'ল প্রথমে লিঙ্কটি সরিয়ে ফেলা এবং তারপরে এটি পুনরায় তৈরি করুন:

    rm -f link && ln -s new/target link
    

বেশিরভাগ সিস্টেমে সিমলিঙ্কগুলিতে অনুমতিগুলি উপেক্ষা করা হয় এবং সাধারণত এটিকে স্থির করা হয় rwxrwxrwx

যে সিস্টেমে সিমলিংক অনুমতিগুলি বিবেচনা করে (যেমন ওএস / এক্স যেখানে আপনার কোনও সিমলিংকের লক্ষ্য সমাধান করতে সক্ষম হওয়ার জন্য পড়ার অনুমতি প্রয়োজন) সেখানে সাধারণত সেগুলি পরিবর্তন করার উপায় আছে ( chmod -hওএস / এক্স)।

মালিকানা, যদিও বেশিরভাগ সিস্টেমে সিমলিংক দ্বারা চিহ্নিত ফাইলটিতে অ্যাক্সেসের জন্য উপরের মতো প্রাসঙ্গিক নয় , তবে প্যারেন্ট ডিরেক্টরি বা কোটার কিছুটা প্রাসঙ্গিকতা থাকতে পারে t... ) এবং এটি পরিবর্তন করার জন্য একটি স্ট্যান্ডার্ড কমান্ড রয়েছে:

chown -h user[:group] the-link
chgrp -h group the-link

0

আপনার যদি সত্যই सिিমলিংকের অনুমতি পরিবর্তন করতে হয় (সাধারণত অর্থহীন, অন্য উত্তরে লেখা থাকে) তবে আমি -Rবিকল্পটি ব্যবহার করে সফল হয়েছি chown:

chown -R myuser:mygroup link

যদি -Rব্যবহার না করা হত তবে অনুমতিগুলি পরিবর্তন করা হয়নি।


এটি জিএনইউর সাথে কাজ করবে chownকারণ সেখানে -Rনিহিত -Pরয়েছে, তবে এটি গ্যারান্টিযুক্ত নয় এবং অন্য কোনও শাঁস বাস্তবায়নে কাজ করবে না। সিমলিংকের মালিকানা পরিবর্তন করার মানক উপায়টি -hবিকল্পটি সহ। আমি সবেমাত্র গৃহীত উত্তরটি আপডেট করেছি যা ভুল ছিল।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.