কিছু উমাস্ক মান কার্যকর হয় না কেন?


9

আমি অনুমতিগুলি আরও ভাল করে বোঝার চেষ্টা করছি, তাই আমি কিছু "অনুশীলন" করছি। কমান্ডগুলির একটি ক্রম এখানে আমি তাদের নিজ নিজ আউটপুট ব্যবহার করছি:

$ umask
0022
$ touch file1
$ ls -l file1
-rw-r--r-- 1 user group 0 Mar 16 12:55 file1
$ mkdir dir1
$ ls -ld dir1
drwxr-xr-x 2 user group 4096 Mar 16 12:55 dir1

এটি উপলব্ধি করে কারণ আমরা জানি যে ডিফল্ট ফাইল অনুমতিগুলি 666( rw-rw-rw-) এবং ডিরেক্টরিগুলির ডিফল্ট অনুমতিগুলি 777( rwxrwxrwx)। যদি আমি আমার আছে এই ডিফল্ট অনুমতি থেকে umask মান বিয়োগ 666-022=644, rw-r--r--জন্য file1, তাই পূর্ববর্তী আউটপুট এটা সুসঙ্গত; 777-022=755, rwx-r-x-r-x, জন্য dir1, এছাড়াও সুসঙ্গত।

কিন্তু আমি যদি থেকে umask পরিবর্তন 022করতে 021এটা কোন নয়।

ফাইলটির উদাহরণ এখানে:

$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2

-rw-r--rw-হয় 646তবে তা হওয়া উচিত 666-021=645। সুতরাং এটি আগের গণনা অনুযায়ী কাজ করে না।

এখানে ডিরেক্টরি উদাহরণ জন্য:

$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2

drwxr-xrw-হয় 756, 777-021=756। সুতরাং এই ক্ষেত্রে ফলাফলটি পূর্ববর্তী গণনার সাথে সামঞ্জস্যপূর্ণ।

আমি লোকটি পড়েছি কিন্তু আমি এই আচরণ সম্পর্কে কিছুই পাই না।

কেউ ব্যাখ্যা করতে পারেন কেন?

ব্যাখ্যা

উত্তরে নির্দেশিত হিসাবে: umaskমানটির গাণিতিকভাবে ডিফল্ট ডিরেক্টরি এবং ফাইলের অনুমতিগুলি থেকে বিয়োগ হয় না ।

কার্যকরভাবে জড়িত অপারেশনটি হ'ল (এবং) এবং নোট (!) বুলিয়ান অপারেটরগুলির সংমিশ্রণ। প্রদত্ত:

আর = ফলে অনুমতির
D = ডিফল্ট অনুমতি
ইউ = বর্তমান umask

আর = ডি ও! ইউ

উদাহরণ স্বরূপ:

666 &! 0053 = 110 110 110 এবং 
            ! 000 101 011 
             110 110 110 এবং  
             111 010 100
           = 110 010 100 = 624 = rw - wr--
 
777 &! 0022 = 111 111 111 এবং 
            ! 000 010 010
             111 111 111 &  
             111 101 101
           = 111 101 101 = 755 = rwxr - এক্সআর-এক্স 

টিপ

ফলস্বরূপ অনুমতিগুলি (কমপক্ষে এটি আমাকে সহায়তা করেছিল) তাড়াতাড়ি জানার একটি সহজ উপায় হ'ল যে আমরা কেবলমাত্র 3 দশমিক মান ব্যবহার করতে পারি:

r = 100 = 4 
w = 010 = 2
x = 001 = 1

অনুমতিগুলি এই 3 টি মানগুলির সংমিশ্রণ হবে।
" "আপেক্ষিক অনুমতি দেওয়া হয়নি তা নির্দেশ করতে ব্যবহৃত হয়।

666 = 4+2+" "   4+2+" "   4+2+" "  = rw rw rw  

সুতরাং যদি আমার বর্তমান উমাস্ক হয় 0053আমি জানি যে আমি (4+1) গ্রুপ থেকে পঠন এবং সম্পাদনের অনুমতিটি অপসারণ করছি এবং (2+1)ফলস্বরূপ অন্য ফলাফল থেকে লেখার এবং সম্পাদন করার চেষ্টা করছি

 4+2     " "+2+" "     4+" "+" "   = 624 = rw--w-r--  

(গোষ্ঠী এবং অন্যান্যদের ইতিমধ্যে কার্যকর করার অনুমতি ছিল না)

উত্তর:


26

umaskএটি একটি মুখোশ , এটি একটি বিয়োগের মান নয়। এভাবে:

  • মোড 666, মাস্ক 022: ফলাফলটি 666 & ~ 022, অর্থাৎ 666 এবং 755, যা 644;
  • মোড 666, মাস্ক 021: ফলাফলটি 666 & ~ 021, অর্থাৎ 666 এবং 756, যা 646।

জড়িত বিট সম্পর্কে চিন্তা করুন। একটি মোডে 6 মানে বিট 1 এবং 2 সেট করা হয়, পড়ুন এবং লিখুন। 2 একটি মাস্ক মাস্ক বিট 1, লিখন বিট। 1 একটি মুখোশ বিট 0 তে, বিট কার্যকর করুন।

এটি উপস্থাপন করার আরেকটি উপায় হ'ল পাঠ্য আকারে অনুমতিগুলি দেখুন। 666 হয় rw-rw-rw-; 022 হয় ----w--w-; 021 হয় ----w---x। মুখোশটি তার সেট বিটগুলি মোড থেকে ফেলে দেয়, তাই rw-rw-rw-মুখোশযুক্ত ----w--w-হয়ে যায় rw-r--r--, মুখোশযুক্ত ----w---xহয়ে যায় rw-r--rw-


11

আপনাকে দশমিক নয়, বাইনারি ভাবতে হবে। বিশেষত, তিনটি 3-বিট বাইনারি সংখ্যা রয়েছে: প্রতিটি মালিক, গোষ্ঠী এবং অন্যগুলির জন্য একটি। 000 থেকে 111 (দশমিক 0-7) পর্যন্ত মান সহ প্রতিটি।

যেমন rw-rw-rw (666) 110 110 ডলার।

umaskমান একটি মাস্ক নির্ধারণ যখন একটি নতুন ফাইল অথবা ডাইরেক্টরি তৈরি যা বিট বা (1 বা 0) বন্ধ হবে। উদাহরণস্বরূপ 022 ডেসিমাল 000 010 010 বাইনারি, যখন 021 দশমিক 000 010 001

চূড়ান্ত মান পৌঁছানোর জন্য অনুমতি বিটগুলি অবহেলিত উমাস্কের সাথে একত্রে এ্যান্ড-এড হয়। "অবহেলিত" এর অর্থ হ'ল সমস্ত বিট উল্টে গেছে, অর্থাৎ সমস্ত 1 গুলি 0 তে উল্টে গেছে এবং তদ্বিপরীত। যেমনNOT 022 (000 010 010) = 755 (111 101 101)

উদাহরণ: 666 & !022 = 644। বাইনারি মধ্যে, এটি:

  Owner  Group  Other     mode
   110    110    110      666 
&  111    101    101      755   (this is the negated 022)
   ---    ---    ---      ---
   110    100    100      644

এছাড়াও, 777 & !022 = 755:

  Owner  Group  Other     mode
   111    111    111      777 
&  111    101    101      755
   ---    ---    ---      ---
   111    101    101      755

প্রতিটি বিটের চূড়ান্ত মানটি কীভাবে কেবলমাত্র 1 হতে পারে যদি মূল অনুমতি মান (6 666 বা 7 777) এবং উপেক্ষিত উমাস্কে উভয়ই 1 হয় Note তাদের উভয়টির যদি 0 হয় তবে ফলাফল 0 হয় That এটি 1 এবং 1 = 1 , যখন 1 এবং 0 = 0


কঠোরভাবে বলতে গেলে সেতুড, সেটগিড এবং স্টিকি বিটগুলির জন্য চতুর্থ 3-বিট বাইনারি সংখ্যা রয়েছে। এজন্য আপনি প্রায়শই একটি শীর্ষস্থানীয় 0 (বা 0-7 থেকে কিছু অন্যান্য শীর্ষস্থানীয়) দিয়ে নির্দিষ্ট করা অনুমতি এবং মুখোশগুলি দেখতে পান। যেমন 0777 বা 2755।


2
ভাল প্রযুক্তিগতভাবে এটি অষ্টাল, দশমিক নয়, তবে এটি উত্তরটির মূলটি পরিবর্তন করে না।
ডেভিড জেড

@ ডেভিডজেড: ওপি ভাবলেন যে এটি দশমিক (কিউতে বিয়োগের উদাহরণটি দেখুন), সম্ভবতঃ কাস কী উল্লেখ করছেন তা।
অরবিটে মার্চীনতা রেস

1
@ অংক বা দশমিক হ'ল ওপিতে কাজ করা বিয়োগ বিয়োগ উদাহরণগুলি হালকা করুন, যে কোনও অঙ্ক 8-এ পৌঁছায় না এবং কখনও বহন করার প্রয়োজন নেই। আমি সম্মত হলাম এটি সম্ভব ওপি দশমিক নিয়ে ভাবছিল, তবে প্রশ্নের কিছুই প্রমাণ করে না।
স্টিফেন কিট

@ স্টেফেনকিট: মনে হচ্ছে আমার আঙুলটি কীপ্যাডের উপর পড়ে থাকতেই হবে যখন আমি ক্যালক.এক্সে প্রমাণ করার জন্য উদাহরণ লিখছিলাম 😂
লাইটনেস রেস অরবিট

1
@ ক্যাস হ্যাঁ, আমি সেই অংশটির সাথে একমত নই (এটি আমার জবাবের ভিত্তিও), কেবল লাইটনেসের এই দৃ with়তার সাথে যে ওপি অষ্টালের চেয়ে দশমিকায় গণনা করছে।
স্টিফেন কিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.