Chmod এবং -r + r


13

কমান্ডটি chmod কে ভুল ক্রমে কল করার চেষ্টা করেছি। chmod file.txt -rএটি কোনও কারণে কাজ করেছে। chmod file.txt +rঅন্যদিকে কাজ করতে রাজি হয়নি। কেন? কোন কারণে একটি আদেশ কাজ করে, এবং অন্যটি কাজ করে না?

উত্তর:


18

এটি জিএনইউ chmod কীভাবে ইনপুট পরিচালনা করে তার একটি স্পষ্টতা এবং সমস্ত পসিক্স-সামঞ্জস্যপূর্ণ chmod বাস্তবায়নের জন্য পোর্টেবল নয়।

লক্ষ্য করুন POSIXchmod coomand-লাইন সিনট্যাক্স প্রয়োজন , প্রথম আসা মোডে নেই গনুহchmod (অপশন মোড আগে, খুব আসতে উচিত)। অন্য যে কোনও কিছু হ'ল একটি অননুমোদিত বাস্তবায়ন কোচ।


এখন, কেন এই নির্দিষ্ট বাস্তবায়নে এটি ঘটে:

এটা তোলে এ hinted এর ম্যানুয়াল :

সাধারণত, যদিও ' chmod a-w file' তার চেয়ে বেশি পছন্দনীয় এবং ' ' কী করবে তার থেকে এটি আলাদাভাবে আচরণ করে তবে chmod -w file(ছাড়া --) অভিযোগ করে chmod a-w file

সংক্ষেপে, পার্স করা বিকল্পগুলি getoptক এর সাথে উপসর্গ করা হয় -। পছন্দ মত ls -a, aএকটি বিকল্প। দীর্ঘ ফর্ম একটি বিকল্প হিসাবে ls --allআছে allrm -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) একটি মোড হিসাবে ব্যাখ্যা করা হয় ... এবং পার্স করতে ব্যর্থ হয়।

4
উদাহরণস্বরূপ, a+rwxএবং যদি এর মতো chmod * +rকোনও কিছু করেন এবং a+rwxফাইলটি বিশ্বব্যাপী সম্প্রসারণে প্রথম আসে তবে এর আকর্ষণীয় পরিণতি হতে পারে ।
Jörg W Mittag

1
অথবা "আরএম *" এর ক্ষেত্রে "-rf" নামে একটি ফাইল।
এডেল্ডিল

@ এহেল্ডিল হ্যাঁ আপনি ঠিক বলেছেন এইটি এমন কিছু বিষয় যে সুরাহা করা উচিত (এবং একটি বাগ মত মনে হয়, ঠিক যদি ইনপুট সঠিকভাবে sanitized করা হয় নি।
TestyTentacleLinux

দ্রষ্টব্য যে ওপি সিনট্যাক্সটি পসিক্স man7.org/linux/man-pages/man1/getopt.1.html#SCANNING_MODES
স্টিভেন পেনি

@ স্টেভেনপেনি এটি অপ্রাসঙ্গিক। প্রথমত, লিঙ্ক র manpage অধ্যায় 1, হয় অর্থাত getopt কমান্ড , না গ্রন্থাগার রুটিন মধ্যে ধারা 3 । দ্বিতীয়ত, এটি উল্লেখ করছে optstring, অর্থাত্ গৃহীত বিকল্পগুলির তালিকা ( chmodউত্সটিতে optstringসেট করা আছে "Rcfvr::w::x::X::s::t::u::g::o::a::,::+::=::")। লিঙ্কযুক্ত "স্ক্যানিং মোডস" বিভাগটির সাথে প্রোগ্রামটিতে পাস হওয়া আর্গগুলি থাকা আর্গুমেন্ট অ্যারের সাথে কোনও সম্পর্ক নেই argv
বব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.