নির্বাচিতভাবে chmod কমান্ড ব্যবহার করুন


11

আমি একটি নির্দিষ্ট ডিরেক্টরিতে সমস্ত ফাইল এবং উপ ডিরেক্টরিতে 755 অনুমতি সেট করতে চাই, তবে আমি কেবল chmod 755 চালাতে চাই those 755 এর অনুমতি নেই এমন উপাদানগুলির জন্য।

find /main_directory/ -exec chmod 755 {} \;

যদি findকমান্ডটি দীর্ঘ তালিকা দেয় তবে এতে অনেক সময় লাগবে। আমি জানি যে আমি প্রতিটি উপাদানটির অক্টাল ফাইল স্তরের অনুমতি যাচাই করতে স্টেট কমান্ডটি ব্যবহার করতে পারি এবং তারপরে ফাইলের অনুমতি টগল করতে ব্যবহার করতে পারি তবে ফাইল / ডিরেক্টরিতে কোন অনুমতি রয়েছে তা ব্যবহার করে findএবং xargsপ্রথমে কোন একক লাইন পদ্ধতির ব্যবহার করতে পারি? , এবং তারপরে chmodএটি অন্য কিছুতে সেট করা থাকলে 755 এ পরিবর্তন করতে ব্যবহার করুন ।


6
এটি অকালীন অপটিমাইজেশন হতে পারে এবং এটি দ্রুততর না হলেও হতে পারে। এই সমস্ত চেকগুলি করা এটি ধীর হতে পারে। এটি আরও দ্রুত হয়েছে কিনা তা পরীক্ষা করার জন্য, যদি আপনাকে এটি অনেক কিছু করতে হয় তবে কেবল পরিশোধ করা হবে।
ctrl-alt-delor

3
আপনি সম্ভবত সব ফাইলগুলিতে এক্সিকিউট করার অনুমতি দিতে চান না। এটি একটি সুরক্ষা ঝুঁকি তৈরি করবে। (এটি মাইক্রোসফ্টের উইন্ডোজে ভাইরাসগুলির অন্যতম অন্যতম: সমস্ত কিছু কার্যকর হয়) ut প্রতীকী মোডে আপনি বলতে পারেন u+rw,go+r,go-w,ugo+X- মূলধনটি নোট করুন।
ctrl-alt-delor

আমি @ ctrl-alt-delor এর সাথে একমত, তবে আপনি যা চেয়েছিলেন তার কাছাকাছি কিছু প্রস্তাব করব, u = rwX, go = rX যা একই জিনিস অর্জন করবে should
পেঙ্গুইন 359

উত্তর:


21

আপনি যদি 755উভয় ফাইল এবং ডিরেক্টরিতে অনুমতি পরিবর্তন করতে চান তবে ব্যবহার করার কোনও আসল সুবিধা নেই find(কমপক্ষে পারফরম্যান্সের দিক থেকে) এবং আপনি কেবল এটি করতে পারেন

chmod -R 755 /main_directory

আপনি যদি findইতিমধ্যে অনুমতিপ্রাপ্ত জিনিসগুলিতে 755(তাদের সিটি টাইমস্ট্যাম্প আপডেট করা এড়াতে) অনুমতিগুলি পরিবর্তন এড়াতে ব্যবহার করতে চান তবে প্রতিটি ডিরেক্টরি এবং ফাইলের বর্তমান অনুমতিগুলির জন্য আপনারও পরীক্ষা করা উচিত:

find /main_directory ! -perm 0755 -exec chmod 755 {} +

-exec ... {} +যে পাসের সম্ভব হিসাবে অনেক pathnames যেমন সংগ্রহ করবে ! -perm 0755পরীক্ষা এবং চালানো chmodএকযোগে তাদের সব।

সাধারণত, কেউ পৃথকভাবে ফাইল এবং ডিরেক্টরিতে অনুমতি পরিবর্তন করতে চান, যাতে সমস্ত ফাইল কার্যকর হয় না:

find /main_directory   -type d ! -perm 0755 -exec chmod 755 {} +
find /main_directory ! -type d ! -perm 0644 -exec chmod 644 {} +

মোহন মত কাজ করেছেন, আপনাকে ধন্যবাদ। শুভেচ্ছা, কুমারজিৎ
কুমারজিৎ ঘোষ

1
আমি সন্দেহ করছি +পরিবর্তে ব্যবহার করে ;এখানে একটি বড় পার্থক্য আছে।
কেভিন

এটি দ্রুততর উপায় - একটি চেক এড়ানো। আমি এটির পরিবর্তে আপনার অনুমতিপ্রাপ্ত কেবলমাত্র একটি ফাইলের তালিকা তৈরি করার জন্য অনুসন্ধানটি ব্যবহার করব ch <pre> <কোড> # rwx, rw, wx, কেবলমাত্র সন্ধান করুন। -উজার $ (হোয়ামি) -প্রেম / 002! -পার্ম 0755-এক্সেক chmod 0755 {} \; # দুটি অভিযানের মধ্যে বিরতি। -উজার $ (হোয়ামি) -প্রেম / 002! per (</ tmp / chfiles.txt) file (</ tmp / chfiles.txt) -র ফাইলের জন্য / স্পর্শ 0755> /tmp/chfiles.txt chmod --quiet 0755 "$ {ফাইল}" সম্পন্ন হয়েছে </ কোড> </ p>
ক্রিস রেড

@ ক্রিসরিড নোট করুন যে কোনও পথের নামের মধ্যে একটি সাদা বর্ণের অক্ষর থাকলে সেই জাতীয় পাথের নামের তালিকাটি লুপ করা ভেঙে যাবে।
Kusalananda

আমার ধারণা, আপনার কোনও স্ক্রিপ্টের অভ্যন্তরীণ ক্ষেত্র বিভাজক (আইএফএস) '\ n' এ পরিবর্তন করতে হবে। এগুলি পরিবেশগত সেটিংস, শেলটি যেভাবে তাদের ব্যাখ্যা করে সেগুলি সেটিংগুলির মানগুলির উপর নির্ভর করে। আমি ডামি ফাইলগুলিতে স্ক্রিপ্টগুলি ফাইলের নাম পরিবর্তন করে বা ওভাররাইটিংয়ের মতো অনর্থক বিপর্যয় ঘটাতে ব্যবহার করার আগে তাদের পরীক্ষা করি। আমি আইএফএস স্থাপনের শেল প্রিন্টফ পদ্ধতি পছন্দ করি। আইএফএস = $ (প্রিন্টফ "\ n") # খুব পঠনযোগ্য
ক্রিস রেড

1

হিসাবে findঅর্জিত হয়েছে -exec ... +সিনট্যাক্স, সেখানে ব্যবহার করে অনেক বিন্দু নয় xargs, কিন্তু আপনি এটা জন্য অনুরোধ:

find /main_directory -not -perm 0755 | xargs chmod 755

1
আরও মনে রাখবেন যে সম্ভাব্য আক্রমণকারী যদি সাদা নামক স্থান বা অন্যান্য বিশেষ অক্ষর অন্তর্ভুক্ত করে এমন ফাইলের নাম তৈরি করতে পারে তবে সন্ধান ছাড়াই -0(অনুসন্ধানের সাথে মিলিয়ে -print0; যা জিএনইউ এক্সটেনশানটি রয়েছে) সুরক্ষিতভাবে সমস্যাযুক্ত হতে পারে। আপনি -execযখন পারবেন
তেমন

xargs(কেবল ব্যবহারের -exec) প্রয়োজন নেই , এবং আপনি এটি ব্যবহার করেন তবে আপনার ব্যবহার করা উচিত -print0/ -0মতিজা বলেছিলেন।
কেভিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.