কমান্ডটি 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মোড হিসাবে অবস্থানগতভাবে ব্যাখ্যা করা হয়। ছাড়া মামলা থেকে এই পৃথক --কারণ সঙ্গে একটি হিসেবে ব্যাখ্যা করা হয় না বিকল্প ।---rchmod 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ফাইলটি বিশ্বব্যাপী সম্প্রসারণে প্রথম আসে তবে এর আকর্ষণীয় পরিণতি হতে পারে ।