ক্লোন মালিকানা এবং অন্য ফাইল থেকে অনুমতি?


125

ব্যবহারকারী / গোষ্ঠী মালিকানার ক্লোন করতে কোনও আদেশ বা পতাকা রয়েছে কি অন্য কোনও ফাইল থেকে কোনও ফাইলের অনুমতি? পারমস এবং মালিকানা ঠিক অন্য ফাইলের মতো করতে?

উত্তর:


175

জিএনইউ / লিনাক্সে chownএবং chmodএকটি --referenceবিকল্প রয়েছে

chown --reference=otherfile thisfile
chmod --reference=otherfile thisfile

1
আপনি কি আমার প্রশ্নের উত্তর হিসাবে এই উত্তরটির (এবং সম্ভবত এটি উদ্ধৃত করে) উল্লেখ করতে পারেন: unix.stackexchange.com/questions/44253/… ? , আমি মনে করি আমি দুর্দান্ত সংযোজন করব এবং আমি এটির জন্য সেখানে ভোট খুঁজে পেতে পছন্দ করব।
গ্রজেগোর্জ ওয়েয়ারজোইইকি

@ গ্রজেগোর্জভিয়ারজোইকিকি: সম্ভবত এই প্রশ্নটি বন্ধ করা উচিত, তবে এর থেকে কিছুটা আলাদা এবং ইতিমধ্যে এর উত্তর রয়েছে, তাই আমি আরও ভাল কিছু করতে পারি না।
enzotib

আপনি যেমন চান এবং পরামর্শ হিসাবে। সহায়তার জন্য ধন্যবাদ, আমি --referenceএর আগে chmodএবং এর chownআগে প্যারামিটারে মনোযোগ দিই নি ।
গ্রেজগোর্জ ওয়েয়ারজোইকিকি

12

জিএনইউ ইউটিলিটি সহ যেকোন ইউনিক্সে, যেমন (নন-এম্বেড করা) লিনাক্স বা সাইগউইন, আপনি ব্যবহার করতে পারেন chmod --referenceএবংchown --reference

আপনার সিস্টেমে থাকে ACLs , ACL এর কমান্ড চেষ্টা getfaclএবং setfacl। এই আদেশগুলি সিস্টেম থেকে সিস্টেমে কিছুটা পৃথক হয় তবে অনেকের উপর আপনি getfacl other_file | setfacl -bnM - file_to_changeঅনুমতিগুলি অনুলিপি করতে ব্যবহার করতে পারেন । এটি মালিকানা অনুলিপি করে না; আপনি সাবধানতার সাথে পার্সিং দিয়ে এটি করতে পারেন ls -l other_file, ধরে নিবেন যে আপনার ব্যবহারকারীর বা গোষ্ঠীর নাম সাদা নেই ace

LC_ALL=C ls -l other_file | {
  read -r permissions links user group stuff;
  chown -- "$user:$group" file_to_change
}
getfacl other_file | setfacl -bnM - file_to_change

1
আপনার এসিএল ইনস্টল করা উচিত এবং এসিএল সক্ষম হওয়া সহ ফাইল সিস্টেম মাউন্ট করা উচিত।
enzotib

2
@ এঞ্জোটিব কমপক্ষে লিনাক্সে, এসিএল সরঞ্জামগুলি অনুমতি এবং অনুলিপি ফাইল সিস্টেমটি এসিএল সমর্থন না করে এমনকি অনুমতিগুলি অনুলিপি করতে (তবে মালিকানা নয়) কাজ করবে।
গিলস

7

মাত্তিওর প্রতিক্রিয়া অবলম্বন করে একটি বাশ কমান্ড করেছে :)

কোড:

chmod $( stat -f '%p' "$1" ) "${@:2}"

ব্যবহার:

cp-permissions <from> <to>...


5
হা ভগবান! কোথায় বলতে শিখলেন ${*:2}? আবার কখনও না! এটির ব্যর্থ হবে যদি কোনও ফাইলের নামের মধ্যে স্থান (বা ট্যাব) থাকে। ব্যবহার "${@:2}"। এছাড়াও, ন্যায়বিচারের "$1"পরিবর্তে ব্যবহার করুন $1
জি ম্যান

chmod "$(stat -c '%a' "$fromfile")" tofileGNU Coreutils এ, তবে আপনি --referenceসেই ক্ষেত্রে ব্যবহার করতে পারেন যেহেতু statCLI ইউটিলিটিটি পসিক্স ls -l নয় , এটি এমনকি বলে যে pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.htmlthat এটি কাটবে না: " এলএসের আউটপুট (-l এবং সম্পর্কিত বিকল্পগুলির সাথে) এমন তথ্য রয়েছে যা যুক্তিসঙ্গতভাবে chmod এবং স্পর্শের মতো কোনও ইউটিলিটি দ্বারা একটি পরিচিত অবস্থায় ফাইল পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে However তবে, এই তথ্যটি এমন ফর্ম্যাটে উপস্থাপন করা হয়েছে যা সেই সমস্ত ইউটিলিটিগুলি দ্বারা সরাসরি ব্যবহার করা যায় না বা হতে পারে সহজেই এমন বিন্যাসে অনুবাদ করা যায় যা ব্যবহার করা যায় ""
সিরো সান্তিলি 新疆 改造 中心 法轮功 六四 事件

5

আপনি যদি GNU এর chmod / chown (যা --referenceবিকল্পটিকে সমর্থন করে ) দিয়ে কোনও সিস্টেম ব্যবহার না করে থাকেন তবে আপনি এর আউটপুট পার্স করার চেষ্টা করতে পারেনls -l

এখানে এর জন্য একটি ছোট স্ক্রিপ্ট chmod(যদি আপনার যদি এমন কোনও চিত্র থাকে যা প্রসারিত রেজিক্সগুলিকে সমর্থন করে তবে সেগুলি আরও বেশি পাঠযোগ্য উপায়ে লেখা যেতে পারে ...)

#!/bin/sh

reference=$1
shift
files=$*

# strip the permissions (whith extended regexes could be more readable)
OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/"       | sed -e "s/[-]//g" )
GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/"    | sed -e "s/[-]//g" )
OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" )

chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files}

আপডেট :

এটি ব্যবহার করে আরও সহজ stat:

chmod $( stat -f '%p' ${reference} ) ${files}

2
ls -lআউটপুট পার্সিংয়ের পরিবর্তে আপনি statআউটপুট পার্স করতে পারবেন ।
jfg956

@ জেফগ্যাগনে: ধন্যবাদ বোধগম্য হয়ে উঠেছে আমি জানি না কেন আমি প্রথমে এটি সম্পর্কে ভেবে দেখিনি। আমি উত্তরটি আপডেট করেছি
মেটেও

1
আপনি statএখানে * বিএসডি সিনট্যাক্স ব্যবহার করছেন । আপনার chmod $(stat ...)কমান্ড কাজ করবে না কারণ %pএকা * BSD এর জন্য খুব বেশি তথ্য আউটপুট দেয়, কেবল u / g / o বিট আউটপুট chmodব্যবহার %Lpকরে। স্টিকি / সেটুইড / সেটগিড বিটগুলির জন্য আরও কিছু বিস্তৃতর প্রয়োজন।
মিঃ স্পুর্যাটিক

0

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

আমি মনে করি এটি সেরা বিকল্প কারণ এটি সোলারিস, লিনাক্স ইত্যাদির মতো সমস্ত * নিক্স ওএসের জন্য ব্যবহার করা যেতে পারে

#!/bin/sh

reference=$1
shift
files=$*

for file in $reference $files; do
  [ -f $file ] || { echo "$file does not exist"; exit 1; }
done

# strip the permissions (whith extended regexes could be more readable)
OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/" | sed -e "s/[-]//g" )
GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/" | sed -e "s/[-]//g" )
OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" )

chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files}

আমি দেখতে পেলাম যে আমার সোলারিস 10 টি মেশিনে একটিও statপাওয়া যায় নি। যদিও এটি আমার কনফিগারেশনের ক্ষেত্রে একটি সমস্যা হতে পারে।


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