ইউনিক্স: ফাইল বা ডিরেক্টরি অনুমতিগুলির "অনুলিপি" করার কোনও উপায় আছে কি?


14

আমার একটি ডিরেক্টরিতে দুটি ফাইল রয়েছে। একটির সঠিক অনুমতি আছে এবং অন্যটির কাছে নেই। অনুমতিগুলির সেটটি আমি এক ফাইল থেকে অন্য ফাইলটিতে "অনুলিপি" করতে পারি এমন কোনও উপায় আছে কি?

উত্তর:


15

Chmod ইউটিলিটির GNU সংস্করণটি একটি ফাইল ( ) থেকে অন্য একটি ( ) থেকে মোডটি অনুলিপি করতে RFileপারে file

chmod --reference=RFile file

অন্যান্য জায়গাগুলির মধ্যে বেশিরভাগ লিনাক্স বিতরণ এবং সাইগউইনগুলিতে জিএনইউ কোর্টিলগুলি পাওয়া যায় til সমস্ত chmod বাস্তবায়ন এই বিকল্পটি সরবরাহ করে না।


এইচএম ... দেখে মনে হচ্ছে এটি কাজ করার কথা, তবে ম্যাক ওএস এক্সে সমর্থিত নয়? সেখানে আমি কেবল অবৈধ বিকল্প
পেয়েছি

2
chmod একটি নয় ব্যাশ কমান্ড builtin। এটি বহু ইউনিক্সে উপলব্ধ একটি পৃথক ইউটিলিটি। --referenceবিকল্প গনুহ সংস্করণ অন্তর্ভুক্ত করা হয়েছে; ওএসএক্স সম্ভবত একটি চিএমড ব্যবহার করবে যা এর পরিবর্তে বিএসডি থেকে উদ্ভূত হয়েছিল। ওএসএক্স ম্যান
চিমড

তবে, আপনি ম্যাকপোর্টের মাধ্যমে জিএনইউ সংস্করণ ইনস্টল করার বিষয়ে বিবেচনা করতে পারেন।
জেরেমি এল

স্রেফ cp -dpR <source-file> <dest-file>অনুভূত হয়েছে যে এখানে উল্লেখ করা কার্যকর হবে যে কোনও ফাইল অনুলিপি করার সময়, ফাইলের পাশাপাশি অনুমতিগুলির অনুলিপি করা হবে
লরেন্স

1

আমি এটি নিয়ে এসেছি:

find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh

এটি পুরোপুরি বুলেট প্রুফ নয়, তবে আমার যা প্রয়োজন তা করে।


0

এটা চেষ্টা কর:

find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;

এটি পুনরাবৃত্তভাবে উঠে যাবে এবং প্রতিটি ফাইলকে chmod করবে, যদি দুটি ডিরেক্টরি ফাইলের সাথে মেলে না তবে আপনি প্রচুর "এ জাতীয় ফাইল বা ডিরেক্টরি নেই" ত্রুটি দেখতে পাবেন।


find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
রিক সানচেজ

chmod: '/ home / myubuntuuser / ডেস্কটপ / টেস্ট 2 // হোম / myubuntuuser / ডেস্কটপ / টেস্ট 1' এর বৈশিষ্ট্য পেতে ব্যর্থ: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি chmod: '/ home / myubuntuuser / ডেস্কটপ / টেস্ট 2 // এর বৈশিষ্ট্য পেতে ব্যর্থ হোম / মাইবুন্টুউসার / ডেস্কটপ / টেস্ট 1 / 111.txt ': এ জাতীয় কোনও ফাইল বা ডিরেক্টরি chmod:' /home/myubuntuuser/Desktop/test2//home/myubuntuuser/Desktop/test1/222.txt 'এর বৈশিষ্ট্য পেতে ব্যর্থ হয়েছে: এই জাতীয় ফাইল বা ডিরেক্টরি chmod: '/ home/myubuntuuser/Desktop/test2//home/myubuntuuser/Desktop/test1/333.txt' এর বৈশিষ্ট্য পেতে ব্যর্থ: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই
রিক সানচেজ

এটি 2 ফোল্ডারে পরীক্ষা করেছে: টেস্ট 1 এবং টেস্ট 2। প্রত্যেকের আলাদা আলাদা অনুমতি সহ 111/222 / 333.txt ফাইল রয়েছে। টেস্ট 1 এর ডিফল্ট থাকে। test2 এর 777 টি অনুমতি রয়েছে। এই আমি পেয়েছি ত্রুটি।
রিক সানচেজ

0

আপনি getfaclফাইল অনুমতি, মালিক, গোষ্ঠী এবং অতিরিক্ত এসিএল (অ্যাক্সেস নিয়ন্ত্রণের তালিকা) এর সম্পূর্ণ তালিকা পুনরুদ্ধার করতে ব্যবহার করতে পারেন ।

$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---

যদি আপনি সেই আউটপুট কোনও ফাইলে সংরক্ষণ করেন (উদাহরণস্বরূপ acl.txt), আপনি তারপরে এই ফর্ম্যাটটি থেকে পুনরুদ্ধার করতে পারেন setfacl --restore acl.txt। আপনি যদি কেবল একটি একক ফাইল পুনরুদ্ধার করতে চান এবং সেই ফাইলটির মূলের সাথে আলাদা ফাইল নাম রয়েছে তবে আপনি setfacl --set-file acl.txt filename.txt( filename.txtনতুন ফাইলের নামটি কোথায় ) ব্যবহার করতে চাইবেন ।

ধাপ

  1. মূল অনুমতিগুলি এতে সংরক্ষণ করুন acl.txt:

    $ getfacl filename.txt > acl.txt
    
  2. অনুমতিগুলি ওভাররাইট করুন (প্রদর্শনের জন্য; এটি কেবলমাত্র যাতে আপনি দেখতে পান যে এটি পরবর্তী ধাপে পুনরুদ্ধার কাজ করে)

    $ chmod 777 filename.txt
    $ sudo chown nobody:root filename.txt
    $ ls -l filename.txt
    -rwxrwxrwx 1 nobody root 0 Jan  8 14:24 filename.txt
    
  3. এর setfaclথেকে সঠিক অনুমতিগুলি পুনরুদ্ধার করতে ব্যবহার করুন acl.txt:

    $ sudo setfacl --restore acl.txt
    $ ls -l filename.txt
    -rw------- 1 score score 0 Jan  8 14:24 filename.txt
    

ফাইলের # file:নামটি তৈরি করা মন্তব্য থেকে নেওয়া হয়েছে getfacl, সুতরাং কমান্ড লাইনে এটি নির্দিষ্ট করার দরকার নেই।

আপনি যদি সেই অনুমতিগুলি কোনও অন্য কোনও ফাইলে পুনরুদ্ধার করতে চান তবে আপনি এটির --set-fileপরিবর্তে ব্যবহার করতে পারেন --restore:

$ setfacl --set-file acl.txt second_filename.txt

উদাহরণ

আপনি যদি কিছু ফাইলগুলিতে অনুমতিগুলি ওভাররাইট করে শেষ করেন /usrতবে আপনি কী ফাইলগুলি ওভাররাইট করেছেন তা আপনি জানেন না, আপনি সাধারণত একইভাবে কনফিগার করা সিস্টেম থেকে পুনরুদ্ধার করে এটি ঠিক করতে পারেন।

  1. ওয়ার্কিং সিস্টেম থেকে ব্যাকআপ অনুমতিগুলি (দ্রষ্টব্য: getfaclআপেক্ষিক পাথ উত্পন্ন করে, তাই আপনাকে cdউভয় মেশিনে সামঞ্জস্যপূর্ণ স্থানে নিশ্চিত করুন)

    # cd /
    # getfacl -R usr > /root/acls.txt
    
  2. ভাঙা অনুমতি নিয়ে এসিএল ডাম্পটি সিস্টেমে অনুলিপি করুন

    $ scp root@working-system:/root/acls.txt .
    $ scp acls.txt root@broken-system:/root/
    
  3. পরিচিত ভাল মেশিনের সাথে ভাঙা অনুমতিগুলি ওভাররাইট করতে এসিএল ডাম্প পুনরুদ্ধার করুন

    # cd /
    # setfacl --restore /root/acls.txt
    
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.