কমান্ডটি chmod কে ভুল ক্রমে কল করার চেষ্টা করেছি। chmod file.txt -r
এটি কোনও কারণে কাজ করেছে। chmod file.txt +r
অন্যদিকে কাজ করতে রাজি হয়নি। কেন? কোন কারণে একটি আদেশ কাজ করে, এবং অন্যটি কাজ করে না?
কমান্ডটি chmod কে ভুল ক্রমে কল করার চেষ্টা করেছি। chmod file.txt -r
এটি কোনও কারণে কাজ করেছে। chmod file.txt +r
অন্যদিকে কাজ করতে রাজি হয়নি। কেন? কোন কারণে একটি আদেশ কাজ করে, এবং অন্যটি কাজ করে না?
উত্তর:
এটি জিএনইউ chmod কীভাবে ইনপুট পরিচালনা করে তার একটি স্পষ্টতা এবং সমস্ত পসিক্স-সামঞ্জস্যপূর্ণ chmod বাস্তবায়নের জন্য পোর্টেবল নয়।
লক্ষ্য করুন POSIXchmod
coomand-লাইন সিনট্যাক্স প্রয়োজন , প্রথম আসা মোডে নেই গনুহchmod
(অপশন মোড আগে, খুব আসতে উচিত)। অন্য যে কোনও কিছু হ'ল একটি অননুমোদিত বাস্তবায়ন কোচ।
এখন, কেন এই নির্দিষ্ট বাস্তবায়নে এটি ঘটে:
এটা তোলে এ hinted এর ম্যানুয়াল :
সাধারণত, যদিও '
chmod a-w file
' তার চেয়ে বেশি পছন্দনীয় এবং ' ' কী করবে তার থেকে এটি আলাদাভাবে আচরণ করে তবেchmod -w file
(ছাড়া--
) অভিযোগ করেchmod a-w file
।
সংক্ষেপে, পার্স করা বিকল্পগুলি getopt
ক এর সাথে উপসর্গ করা হয় -
। পছন্দ মত ls -a
, a
একটি বিকল্প। দীর্ঘ ফর্ম একটি বিকল্প হিসাবে ls --all
আছে all
। rm -rf
(সমতুল্য rm -r -f
) এর উভয় r
এবং f
বিকল্প রয়েছে।
অন্য সব কিছুই একটি অ-বিকল্প যুক্তি, প্রযুক্তিগতভাবে অপারেন্ডস বলে । আমি এই অবস্থানিক যুক্তিগুলি বলতে চাই , কারণ তাদের অর্থটি তাদের আপেক্ষিক অবস্থানের দ্বারা নির্ধারিত হয়। ইন chmod
, প্রথম অবস্থানগত আর্গুমেন্টটি হল মোড এবং দ্বিতীয় অবস্থানগত আর্গুমেন্টটি ফাইলের নাম।
সর্বোত্তমভাবে, মোডটি একটি দিয়ে নেতৃত্ব দেওয়া উচিত নয় -
। যদি এটি হয় তবে আপনার --
বিকল্পের পরিবর্তে অপারেন্ড হিসাবে পার্সিংয়ের জন্য ব্যবহার করা উচিত (অর্থাত ব্যবহার করুন chmod a-w file
বা chmod -- -w file
পরিবর্তে chmod -w file
। এটিও পসিক্স দ্বারা প্রস্তাবিত) ।
যদি আপনি উত্স কোডটি লক্ষ্য করেন তবে আপনি লক্ষ্য করবেন যে এটি কমান্ড-লাইন বিকল্পগুলি পার্স করার জন্য getopt ব্যবহার করে । এখানে 'ভুল' মোডগুলির জন্য বিশেষ হ্যান্ডলিং রয়েছে -w
:
case 'r':
case 'w':
case 'x':
case 'X':
case 's':
case 't':
case 'u':
case 'g':
case 'o':
case 'a':
case ',':
case '+':
case '=':
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
/* Support nonportable uses like "chmod -w", but diagnose
surprises due to umask confusion. Even though "--", "--r",
etc., are valid modes, there is no "case '-'" here since
getopt_long reserves leading "--" for long options. */
আপনার উদাহরণ গ্রহণ:
chmod a-r file.txt
হবে সবচেয়ে জোরালো আবাহন।chmod +r file.txt
কাজ করে কারণ প্রথম যুক্তিটি অবস্থানগতভাবে মোড হিসাবে ব্যাখ্যা করা হয়।chmod -r file.txt
এখনও কাজ করে কারণ এটি -r
একটি সংক্ষিপ্ত r
বিকল্প হিসাবে ব্যাখ্যা করা এবং বিশেষ ক্ষেত্রেযুক্ত।chmod -- -r file.txt
সঠিক এবং কাজ করে কারণ -r
মোড হিসাবে অবস্থানগতভাবে ব্যাখ্যা করা হয়। ছাড়া মামলা থেকে এই পৃথক --
কারণ সঙ্গে একটি হিসেবে ব্যাখ্যা করা হয় না বিকল্প ।--
-r
chmod file.txt -r
এখনও কাজ করে কারণ এটি -r
একটি সংক্ষিপ্ত r
বিকল্প হিসাবে ব্যাখ্যা করা এবং বিশেষ ক্ষেত্রেযুক্ত। বিকল্পগুলি অবস্থান নির্ভর নয় dependent এই প্রযুক্তিগতভাবে একটি অনিবন্ধিত কৌতুক আপত্তি।chmod file.txt +r
কাজ করে না কারণ এটি +r
অপারেন্ড, কোনও বিকল্প নয়। প্রথম অপারেন্ড ( file.txt
) একটি মোড হিসাবে ব্যাখ্যা করা হয় ... এবং পার্স করতে ব্যর্থ হয়।getopt
কমান্ড , না গ্রন্থাগার রুটিন মধ্যে ধারা 3 । দ্বিতীয়ত, এটি উল্লেখ করছে optstring
, অর্থাত্ গৃহীত বিকল্পগুলির তালিকা ( chmod
উত্সটিতে optstring
সেট করা আছে "Rcfvr::w::x::X::s::t::u::g::o::a::,::+::=::"
)। লিঙ্কযুক্ত "স্ক্যানিং মোডস" বিভাগটির সাথে প্রোগ্রামটিতে পাস হওয়া আর্গগুলি থাকা আর্গুমেন্ট অ্যারের সাথে কোনও সম্পর্ক নেই argv
।
a+rwx
এবং যদি এর মতোchmod * +r
কোনও কিছু করেন এবংa+rwx
ফাইলটি বিশ্বব্যাপী সম্প্রসারণে প্রথম আসে তবে এর আকর্ষণীয় পরিণতি হতে পারে ।