লিনাক্স / ইউনিক্সে অভিন্ন গাছটিতে অনুমতি অনুলিপি করুন


22

আমার কাছে সঠিক অনুমতি সহ একটি ফাইল রয়েছে। তারপরে আমার কাছে ভুল অনুমতি সহ একটি (ফাইলওয়াইজ) অভিন্ন গাছ রয়েছে (বিভিন্ন ফাইল সামগ্রীর শক্ত) s

আমি কীভাবে অনুমতিগুলি লেআউটটিকে একটি গাছ থেকে অন্য গাছে স্থানান্তর করতে পারি?

উত্তর:


8

এটি নিম্নলিখিত শেল লাইনের সাহায্যে করা যেতে পারে:

D1=foo; D2=foo2; for entry in $(find $D1  -exec stat -f "%N:%Mp%Lp" {} \;); do $(echo $entry | sed 's#'$D1'#'$D2'#' | awk -F: '{printf ("chmod %s %s\n", $2, $1)}') ; done

কেবলমাত্র D1 এবং D2 ভেরিয়েবলের জন্য সঠিক মান সেট করুন, উত্স এবং গন্তব্য ডিরেক্টরিতে তাদের নির্দেশ করুন, রান করুন এবং ডায়ারদের সিঙ্কে অনুমতি থাকবে।


1
এটি ধরে নিয়েছে যে স্ট্যাট উপস্থিত রয়েছে। আমি খুঁজে পেয়েছি, আফসোস, কমান্ড স্ট্যাট প্রায়শই উপস্থিত হয় না।
মেই

@ ডেভিড, স্ট্যাটের অভাব নেই এমন কোনও সিস্টেমের কথা আমি জানি না। তবে নিম্নলিখিত "অক্টাল এলএস" সংস্করণটি ব্যবহার করা এবং সেই অনুসারে প্রদত্ত সমাধানটি সামঞ্জস্য করা যথেষ্ট তুচ্ছ: ওরফে ol = "ls -la | awk '{k = 0; (i = 0; i <= 8; i ++) কে + = ((সাবস্ট্রার (\ $ 1, i + 2,1) ~ / [rwx] /) * 2 ^ (8-i)); (কে) প্রিন্টফ (% "% 0o \", কে); মুদ্রণ} ' "
drAlberT

যখন কোনও পাথ জড়িত থাকে তখন কোনও ধরণের বিশেষ চরিত্র থাকে (শ্বেত স্পেস, ড্যাশগুলি দিয়ে শুরু করা ইত্যাদি)।
n.st

31

আমি এটি সম্পাদন করার জন্য একটি নতুন এবং সহজ উপায় শিখেছি:

getfacl -R /path/to/source > /root/perms.acl

এটি সমস্ত অনুমতি এবং মালিকানা সহ একটি তালিকা তৈরি করবে।

তারপরে গন্তব্যের উপরে এক স্তরে যান এবং এর সাথে অনুমতিগুলি পুনরুদ্ধার করুন

setfacl --restore=/root/perms.acl

উপরের এক স্তরের আপনাকে যে কারণটি হতে হবে তা হ'ল পারমস.একএল এর সমস্ত পাথ আপেক্ষিক।

রুট হিসাবে করা উচিত।


অনুমতিগুলি ব্যাকআপ এবং পুনরুদ্ধার করার এটি খুব সোজা এবং সহজ উপায়। তবে এটি নোট করুন getfaclএবং setfaclঅগত্যা সমস্ত সিস্টেমে উপস্থিত নেই।
দ্য ওয়াবিট

.acপ্রথম কমান্ডে এবং .aclদ্বিতীয়টিতে থাকা কি সঠিক ?
স্পারবোটা 21

1
@ এসফারোবটা: না, এটি টাইপো ছিল! এখনই সংশোধন করা হয়েছে। এটা ইশারা জন্য ধন্যবাদ।
মার্চার

13

যদি আপনার উত্স এবং গন্তব্য থাকে তবে আপনি নিজের অনুমতিগুলি এর সাথে সিঙ্ক্রোনাইজ করতে পারেন rsync -ar --perms source/ dest

এটি ডেটা স্থানান্তর করবে না, কেবল অনুমতিগুলি ...



@ ইয়োনিক দ্য -rএন্ড --permsরিডানডান্ট, তবে এটি এখনও সিঙ্ক হয় যদি তারা কেবলমাত্র আলাদা জিনিস হয় (যা আপনি প্রশ্নে যা বলেছেন; গাছগুলি আসলে অভিন্ন না হলে আপনাকে বলা উচিত ছিল না যে তারা ছিল)।
ক্রিস এস

ঠিক আছে আমি তখন অস্পষ্ট ছিলাম, আমি বোঝাতে চাইছি গাছের কাঠামোটি একই রকম।
ইয়োনিক

12

একটা বিষয়ে তোমার কাজ করতে পারে ব্যবহার খোঁজ কমান্ড কমান্ডগুলি আপনাকে অনুমতি কপি দরকার, তাদের সাথে একটি স্ক্রিপ্ট নির্মাণ করতে। এখানে একটি চটজলদি উদাহরণ, আপনি মালিক, গ্রুপ আইডি, ইত্যাদি সহ বিভিন্ন প্রিন্টফ বিকল্পগুলির সাথে আরও অনেক কিছু করতে পারেন।

$ find /var/log -type d -printf "chmod %m %p \n" > reset_perms
$ cat reset_perms
chmod 755 /var/log
chmod 755 /var/log/apt
chmod 750 /var/log/apache2
chmod 755 /var/log/fsck
chmod 755 /var/log/gdm
chmod 755 /var/log/cups
chmod 2750 /var/log/exim4
...

1
আমি সন্দেহ করি যে-প্রিন্টফ যুক্তিটি খুঁজে পেতে জিএনইউ এক্সটেনশন? এইচপি-ইউএক্স সন্ধানের এটি নেই।
মেই

1
এমনকি প্রিন্টফ বিকল্পটি খুঁজে না পেয়েও, কেউ এলএস বিকল্পটি ব্যবহার করতে পারে (বা সবচেয়ে খারাপভাবে পাইপ টু জার্গস এলএস-এল) ব্যবহার করতে পারে এবং একটি ফাইল সংরক্ষণ করতে পারে। অনুসন্ধান এবং প্রতিস্থাপনের এক বা দুই মিনিট এবং প্রতিটি ফাইলের জন্য chmod এর সাথে একটিতে একটি স্ক্রিপ্ট থাকবে।
এমপিজেড 0

0

দুটি উপায়:

  1. যদি এটি আপনার ইউনিক্সের ব্র্যান্ডে কাজ করে: cp -ax / src / dest
  2. বা যদি তা না হয় তবে এটি পোর্টেবল সংস্করণ: (সিডি / এসসিআর && ডার সিপিএফ -।) | (সিডি / ডিএসটি এবং&& এক্সপিএফ -)

(পরবর্তী ক্ষেত্রে / ডিএসটি অবশ্যই উপস্থিত থাকতে পারে)

সম্পাদনা: দুঃখিত, আমি ভুল পড়েছি। আপনি যা চেয়েছিলেন তা নয়।


এটি উল্লেখযোগ্য যে - একটি (সংরক্ষণাগার জন্য) সিপি-তে একটি জিএনইউ সংযোজন, আমি এটি অন্য কোনও সিস্টেমে দেখিনি। এটি -dpR এর জন্য কেবল সংক্ষিপ্ত (কোনও ডি-রেফারেন্স নয়, পুনরাবৃত্ত, অনুমতি সংরক্ষণ করুন)। আর ও পি বিকল্পগুলি সিপি-র যে কোনও সংস্করণে থাকা উচিত
থিওথ্রি রিসিভ করা

0

আমি মনে করি এটি করার জন্য আমি পার্ল স্ক্রিপ্ট লিখব। কিছুটা এইরকম:

#!/usr/bin/perl -nw

my $dir = $_;
my $mode = stat($dir)[2];
my $pathfix = "/some/path/to/fix/";
chmod $mode, $pathfix . $dir;

তারপরে এমন কিছু করুন:

cd /some/old/orig/path/ ; find . -type d | perlscript

আমি এটি আমার মাথার উপরের অংশে লিখেছিলাম, এবং এটি পরীক্ষা করা হয়নি; সুতরাং এটি এলোমেলোভাবে চালানোর আগে এটি পরীক্ষা করে দেখুন। এটি কেবল বিদ্যমান ডিরেক্টরিতে অনুমতিগুলি স্থির করে; এটি ফাইলগুলিতে অনুমতি পরিবর্তন করবে না, এটি অনুপস্থিত ডিরেক্টরিগুলি তৈরি করবে না।


0

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

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

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

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