কমান্ড লাইন থেকে আমি কীভাবে অক্টাল ফাইলের অনুমতি পেতে পারি?


373

ফাইলের অনুমতি সেট করার জন্য একটি chmod কমান্ড রয়েছে তবে আমি কি কমান্ড লাইন থেকে অষ্টাল মোডে (যেমন 755) ফাইলের অনুমতি পেতে পারি?


2
আমার মতো লোকদের জন্য যারা দুর্ঘটনাক্রমে এই পৃষ্ঠায় অবতরণ করেছিলেন তবে প্রকৃতপক্ষে ম্যাকের মাধ্যমে কীভাবে এটি করবেন তা সন্ধান
রায়ান

2
stat --format "%A" $FILEআপনাকে মানব পাঠযোগ্য drwxr-x---বিন্যাস দেয় । যা দরকারী বা নাও হতে পারে।
ট্রেভর বয়েড স্মিথ

উত্তর:


535

আপনি চেষ্টা করতে পারেন

stat -c "%a %n" *

*প্রাসঙ্গিক ডিরেক্টরি বা আপনি যে পরীক্ষা করতে চান সেই সঠিক ফাইলের নামটি প্রতিস্থাপন করুন ।

স্ট্যাটাসের ম্যান পৃষ্ঠা থেকে ,

-c  --format=FORMAT
          use  the  specified  FORMAT instead of the default; output a newline after
          each use of FORMAT
%a     Access rights in octal
%n     File name

ব্যবহার:

  • ফাইল সহ:

    $ stat -c "%a %n" ./Documents/Udev.html 
    664 ./Documents/Udev.html
    
  • ফোল্ডার সহ:

    $ stat -c "%a %n" ./Documents/
    755 ./Documents/
    

(রেফারেন্স)


57
ম্যাক ওএসে , ব্যবহার করুন stat -f '%A %a %N' *(ক্রেডিট: geeklog.adamwilson.info/article/58/… )
s2t2

1
আপনি যদি এতে আরও স্বাচ্ছন্দ্য বোধ করেন ls:for f in $(ls -a); do stat -c "%a %n" $f; done;
usandfriends

2
@ ইউসুফ্রেন্ডস এর আউটপুট লুপিং lsএকটি খারাপ ধারণা। আপনি যদি সত্যিই একটি লুপ ব্যবহার করতে চান তবে আপনি করতে পারেনfor f in *; do stat "%a %n" "$f"; done
টম ফেনেক

1
ম্যাক ওএসে কেন সমস্ত কিছু সামান্য পরিবর্তিত হয় (এমনকি ইউনিক্স আইসো ব্যবহারগুলিতেও)? এর কোন বাস্তব কারণ আছে?
ভ্যাসিলিস

2
দয়া করে @ হাক্কেল, আপনি কী অনুভব করছেন তা আমাদের জানান। হাঃ হাঃ হাঃ!
মাইকচিন্কেল

44

লিনাক্সে ফাইল অনুমতিগুলি লিনাক্স স্ট্যাট কমান্ড ব্যবহার করে অষ্টাল বিন্যাসে প্রদর্শিত হতে পারে।

টার্মিনাল খোলার জন্য আপনার কীবোর্ডে Ctrl+ Alt+ টিপুন T। এটি যখন খোলে, ডিরেক্টরিটিতে আপনি যেখানে অষ্টাল মোডে ফাইলের অনুমতিগুলি খুঁজতে চান সেখানে যান।

stat -c '%A %a %n' *

মানব পাঠযোগ্য আকারে অ্যাক্সেসের অধিকার

অষ্টালে% অ্যাক্সেসের অধিকার

% n ফাইলের নাম

অক্টাল নম্বর এবং অনুমতি

মোড / অনুমতি উপস্থাপন করতে আপনি অষ্টাল নম্বর ব্যবহার করতে পারেন:

r: 4
w: 2
x: 1

উদাহরণস্বরূপ, ফাইলের মালিকের জন্য আপনি নীচে অষ্টাল মোড ব্যবহার করতে পারেন। অষ্টালে কোনও ফাইলে পড়ুন, লিখুন এবং সম্পাদন করুন (সম্পূর্ণ) অনুমতি হ'ল 0 + আর + ডাব্লু + এক্স = 0 + 4 + 2 + 1 = 7

কেবল অষ্টালে কোনও ফাইলের পড়ার এবং লেখার অনুমতি হ'ল 0 + আর + ডাব্লু + এক্স = 0 + 4 + 2 + 0 = 6

কেবল অষ্টাল-এ থাকা কোনও ফাইলের পঠন এবং সম্পাদনের অনুমতি হ'ল 0 + আর + ডাব্লু + এক্স = 0 + 4 + 0 + 1 = 5

গ্রুপ এবং অন্যদের জন্য অনুমতি গণনা করতে উপরের পদ্ধতিটি ব্যবহার করুন। আমাদের বলুন যে আপনি মালিককে সম্পূর্ণ অনুমতি দিতে চান, গোষ্ঠীর কাছে পড়ার এবং কার্যকর করার অনুমতি এবং অন্যকে কেবল অনুমতি পড়তে চান, তারপরে আপনাকে নীচের হিসাবে অনুমতিটি গণনা করতে হবে: ব্যবহারকারী = আর + ডাব্লু + এক্স = 0 + 4 + 2 + 1 = 7 গোষ্ঠী = আর + ডাব্লু + এক্স = 0 + 4 + 2 + 0 = 6 অন্যান্য = আর + ডাব্লু + এক্স = 0 + 0 + 0 + 1 = 1

কার্যকর অনুমতি 761।

সূত্র: http://kmaiti.blogspot.com/2011/09/umask-concept.html


2
প্রাথমিক 0 টি বিশেষ
বিটকেও

36

হিসাবে বিস্তারিত "755" 'ম' দিয়ে -style অনুমতি দ্বারা আদম Courtemanche উপর AgileAdam.com , আপনি তৈরি করতে পারেন উপনাম lso যে ভালো কাজ করে ls -lকিন্তু সামান্য আউটপুট প্রক্রিয়া 1 এছাড়াও অকট্যাল প্রদর্শন অনুমতির। এটি তিন অঙ্কের 2 টি অক্টাল অনুমতি দেখিয়ে একটি শীর্ষস্থানীয় কলাম যুক্ত করে । যেমন লেখা আছে, এটি বেশিরভাগ ফাইল এবং ডিরেক্টরিগুলির জন্য কাজ করে তবে স্টিকি বা সেটুইড / সেটজিড বিট সেট করা থাকলে এটি সঠিকভাবে কাজ করে না । 3

alias lso="ls -alG | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\" %0o \",k);print}'"

এটি একটি গুরুতর ক্রটি, যদিও যেমন আছে, techtonik তুলে ধরে । আপনি আর্গুমেন্ট প্রেরণ করতে পারবেন না এই lsoহিসাবে আপনার কাছে would ওরফে কমান্ড কারণ তারা অতিরিক্ত আর্গুমেন্ট হিসাবে গ্রহণ করা হয় পরিবর্তে। সুতরাং আপনি একটি নির্দিষ্ট ফাইল বা ডিরেক্টরি চালাতে পারবেন না , বা আপনি কোনও বিকল্প (যেমন , বা ) পাস করতে পারবেন না ।lsawklso-F--colorlso


সমাধানটি হ'ল lso একটি উপকরণের পরিবর্তে একটি ফাংশন হিসাবে সংজ্ঞায়িত করা

lso() { ls -alG "$@" | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }

যদি আপনি নিজের শেলটিতে ইন্টারেক্টিভভাবে এটি চেষ্টা unalias lsoকরে চলেছেন তবে উপনামটি সরিয়ে নিতে দৌড়াতে পারেন - আপনি ফাংশনটি সংজ্ঞায়নের আগে বা পরে এটি করতে পারেন। আপনি যদি এটি কোনও উত্সযুক্ত ফাইলের মধ্যে রাখেন, যেমন ~/.bashrc, কেবল aliasলাইনটি বের করে ফাংশন সংজ্ঞা যুক্ত করুন।

কেন এই কাজ করে? এলিয়াসগুলির বিপরীতে, ব্যাশ শেল ফাংশনগুলি অবস্থানগত পরামিতি , অর্থাৎ কমান্ড-লাইন আর্গুমেন্ট নিতে পারে"$@"সম্পূর্ণ আর্গুমেন্ট তালিকায় প্রসারিত হয় , যার ফলে ফাংশনটিতে আর্গুমেন্টটি lsoপাস হয়ে যায় ls। (একটি উরফ সংজ্ঞা থেকে পৃথক, একটি ফাংশন বডি উদ্ধৃত হয় না; সুতরাং \অক্ষর অপসারণ করার আগে $এবং আগে এটি প্রয়োজন ছিল "।)

যেহেতু আপনি lsoএই পদ্ধতিটিকে কোনও কার্য হিসাবে সংজ্ঞায়িত করার সময় অপশনগুলি পাস করতে পারেন , আপনি সংজ্ঞা থেকে বিকল্পগুলি -aএবং -Gঅপশনগুলি সরাতে ইচ্ছুক হতে পারেন - আপনি যেখানে চান সে ক্ষেত্রে নিজে এগুলি পাস করতে পারেন। ( বিকল্প ফাইল অনুমতি মত বিস্তারিত জানার জন্য প্রয়োজন বোধ করা হয় দেখানো হবে তা এ সব , তাই এটি সরানোর করে কোন লাভ হয়।)-l

lso() { ls -l "$@" | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }

টেকটোনিককে একটি উপন্যাস হিসাবে সংজ্ঞায়িত করার সীমাবদ্ধতার দিকে নির্দেশ করার জন্য ধন্যবাদ lso, এভাবে আমাকে পরিবর্তে এটির কার্যকারিতা তৈরির বিষয়ে এই পোস্টটি প্রসারিত করার জন্য অনুপ্রাণিত করে।


1 কেউ খেয়াল করতে পারেন যে এটিকে আউটপুট পার্সিং না করার বিষয়ে সাধারণ নিয়মটিকেls ত্রুটিযুক্ত বলে মনে হচ্ছে । lsখুব মানব-পঠনযোগ্য আউটপুট উত্পাদন করে; এটি আইডিয়োসিঙ্ক্রেসি এবং সীমাবদ্ধতার পরিচয় দেয় যা সাধারণত অন্যান্য কমান্ডের ইনপুট হিসাবে অনুপযুক্ত করে তোলে। এই ক্ষেত্রে আমরা পার্স lsথেকে আমরা সঠিক আচরণ সংরক্ষণ করতে ইচ্ছুকls আমাদের ছাড়া এক যোগ পরিবর্তন।

2 এই উরফের একটি সীমাবদ্ধতা, এটি নীচে প্রদর্শিত ফাংশন সংস্করণেও প্রযোজ্য এবং এটি একটি বাগ হিসাবে বিবেচিত হতে পারে এটি হ'ল চতুর্থ অষ্টাল অঙ্ক শূন্য হলেও এটি কেবল তিনটি অষ্টাল অঙ্ক প্রদর্শন করে। হিসাবে jfmercer করেছে ন্যায়ত নির্দিষ্ট , অকট্যাল সংখ্যা এখানে প্রদর্শিত চটচটে বিট যদি বর্তমান, কিংবা setuid বা setgid বিট প্রতিফলিত না।

3 আরো গুরুত্ব সহকারে নিছক চতুর্থ অকট্যাল অঙ্ক দেখাচ্ছে না চেয়ে এই পদ্ধতি যে অনুমান তারা সেট না করা হয়, এবং যদি আপনি দেখেন - যদি তারা t, sঅথবা Sঅনুমতি স্ট্রিং - তারপর আপনি অকট্যাল সংখ্যা উপেক্ষা করা উচিত নয় । এটি কারণ বিটগুলি অনুমতি স্ট্রিং থেকে এমনভাবে অনুমান করা হয় যা স্টিকি সেটুইড / সেটজিড বিটের জন্য অ্যাকাউন্ট হয় না।


ডিরেক্টরিগুলির সাথে কাজ করে না -awk: read error (Is a directory)
অ্যানাটোলি টেকটোনিক

@ টেকটোনিক এটি দেখানোর জন্য ধন্যবাদ! আমি (অবশেষে) এর উত্তরটি আপডেট করেছি যাতে এর জন্য একটি সংশোধন অন্তর্ভুক্ত থাকে।
এলিয়াহ কাগন

1
আপনি --colorশো রঙের জন্য প্যারামিটার যুক্ত করতে পারেনlso() { ls -alG "$@" --color | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }
ট্যাগপ্লাস 5

1
পোস্ট করার পর থেকে আপনি কি স্টিকি সেটুইড / সেটজিড ইস্যুটির সমাধান আবিষ্কার করেছেন?
সিলভেস্ট্রিস

21

কেবল প্রসারিত হচ্ছে previous পূর্ববর্তী 'স্ট্যাট' সম্পর্কিত উত্তরগুলি সহজ করে:

আপনি কেবল চালাতে পারেন:

stat <path_to_file>

আউটপুটটিতে অন্যান্য তথ্যের সাথে অষ্টাল অনুমতি থাকবে।



বিশদ (স্ট্যাট সংস্করণ এবং উদাহরণ):

# stat --version
stat (GNU coreutils) 8.4


[user@localhost ~]# touch /tmp/TEST_PERMISSONS

[user@localhost ~]# chmod 644 /tmp/TEST_PERMISSONS

[user@localhost ~]# stat /tmp/TEST_PERMISSONS
  File: `/tmp/TEST_PERMISSONS'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 1010058     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-08-26 18:58:59.000000000 +0300
Modify: 2015-08-26 18:58:59.000000000 +0300
Change: 2015-08-26 18:59:16.000000000 +0300

দ্রষ্টব্য: ( 0644 / -আরআউ -আর - r--)


6

বহনযোগ্যতার জন্য, আপনি ব্যবহার করতে পারেন perl:

$ perl -e 'printf "%04o %s\n", (stat)[2] & 07777, $_ for @ARGV' *.txt
0644 1.txt
0644 2.txt
0644 3.txt
0644 4.txt
0600 PerlOneLiner.txt
0664 perl.txt

কোনও ত্রুটি দেখা দিলে আপনি যদি খেয়াল করতে চান, চেষ্টা করুন:

perl -e '
for (@ARGV) {
    print "$!: $_\n" and next unless -e;
    printf "%03o %s\n", (stat)[2] & 07777, $_;
}
' *.txt

2
পোর্টেবল হওয়ার পাশাপাশি, @ কিউংলমের সমাধানটি তিনটির পরিবর্তে চারটি অক্টাল অক্ষর প্রদর্শন করে, এটি প্রায়শই ভুলে যাওয়া "স্টিকি বিট" এর অবস্থা দেখায় ।
jfmercer

2

আপনি ক্রিয়াটি findসহ ব্যবহার করতে পারেন -printf

lsঅষ্টাল অনুমতিগুলি দেখায় না, তবে আপনি এই findভিত্তিক কাজের ব্যবহার করতে পারেন :

find path -printf "%m:%f\n"

উদাহরণস্বরূপ, আমার ভিডিও ডিরেক্টরি যাচাই করতে:

$ find Videos -printf "%m:%f\n"
755:Videos

%mবিন্যাস সুনির্দিষ্টভাবে উল্লেখ করা বলে -printfকর্ম অকট্যাল অনুমতি প্রিন্ট করতে, যখন %fবিন্যাস সুনির্দিষ্টভাবে উল্লেখ করা ফাইলের নাম প্রিন্ট করতে এটি ঘটায়।

আপনি একাধিক ফাইলের নাম এতে পাস করতে পারেন find। এমনকি আপনি গ্লোবও ব্যবহার করতে পারেন (যেমন, find * -printf "%m:%f\n")।

আপনি যেমন -nameবা একটি পরীক্ষা ব্যবহার করতে হবে না -iname; আপনি যে ফাইল বা ডিরেক্টরিতে আগ্রহী সেগুলির নাম শুরু করার পয়েন্ট হিসাবে পাস করার পক্ষে এটি যথেষ্ট find। এটি, findউপরে বর্ণিত শব্দের সাথে সাথে তাদের নামগুলি যুক্তি হিসাবে সরবরাহ করুন supply

findএটি কীভাবে আউটপুট দেখায় তার উপর আপনাকে দুর্দান্ত নিয়ন্ত্রণ দেয়। বিশেষত দুটি পরিবর্তন রয়েছে যেগুলি আপনাকে দরকারী বলে মনে করতে পারেন:

  • ডিফল্টরূপে, findউপ-ডিরেক্টরিগুলি পুনরাবৃত্তি করে ls -R। আপনি findযে সূচনা পয়েন্টগুলিতে পাস করেছেন তার উপ-ডিরেক্টরিগুলি যদি না দেখতে চান তবে আপনি যুক্ত করতে পারেন -maxdepth 0(বা -maxdepthঅন্যান্য মানগুলির সাথে আপনি কীভাবে এটি যেতে চান তা বোঝাতে ব্যবহার করতে পারেন)।

    $ find Documents -maxdepth 0 -printf "%m:%f\n"
    755:Documents
    
  • %fকেবল একটি ফাইলের নাম দেখায়, সুতরাং যদি findকোনও ফাইল পেতে পুনরাবৃত্তি করতে হয় তবে আপনি এটি জানেন না যে এটি কোথায় রয়েছে। কোনও পথ দেখাতে, ফাইলটি যে কোনও সূচনা পয়েন্টের নীচে পাওয়া গেছে, তার %pপরিবর্তে ব্যবহার করুন।

    $ find /boot -printf "%m:%p\n"
    755:/boot
    644:/boot/initrd.img-4.4.0-92-generic
    600:/boot/System.map-4.4.0-93-generic
    600:/boot/vmlinuz-4.4.0-92-generic
    600:/boot/vmlinuz-4.4.0-93-generic
    ....

দেখুন man findব্যবহার সম্পর্কে আরও তথ্যের জন্য findকমান্ড।

অন্য পদ্ধতি ( lsএবং awk)

এটি তাদের ডিরেক্টরি সহ সমস্ত ডিরেক্টরি ফাইল তালিকাতে ব্যবহার করা যেতে পারে:

ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
             *2^(8-i));if(k)printf("%0o ",k);print}'

এটি মূলত অ্যাডাম কোর্টেম্যাঞ্চের lsoওরফে যে একই কমান্ড , যে উত্তরটি উদ্ধৃত করেছে, কেবল একটি কমান্ড হিসাবে চালিত। আপনি যদি এটি কেবল একবার ব্যবহার করেন, বা বিরল উপলক্ষে, তবে আপনি এটি একটি উপন্যাস বা শেল ফাংশন হিসাবে লিখতে বিরক্ত করতে চাইবেন না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.