ফাইলের অনুমতি সেট করার জন্য একটি chmod কমান্ড রয়েছে তবে আমি কি কমান্ড লাইন থেকে অষ্টাল মোডে (যেমন 755) ফাইলের অনুমতি পেতে পারি?
stat --format "%A" $FILE
আপনাকে মানব পাঠযোগ্য drwxr-x---
বিন্যাস দেয় । যা দরকারী বা নাও হতে পারে।
ফাইলের অনুমতি সেট করার জন্য একটি chmod কমান্ড রয়েছে তবে আমি কি কমান্ড লাইন থেকে অষ্টাল মোডে (যেমন 755) ফাইলের অনুমতি পেতে পারি?
stat --format "%A" $FILE
আপনাকে মানব পাঠযোগ্য drwxr-x---
বিন্যাস দেয় । যা দরকারী বা নাও হতে পারে।
উত্তর:
আপনি চেষ্টা করতে পারেন
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/
ls
:for f in $(ls -a); do stat -c "%a %n" $f; done;
ls
একটি খারাপ ধারণা। আপনি যদি সত্যিই একটি লুপ ব্যবহার করতে চান তবে আপনি করতে পারেনfor f in *; do stat "%a %n" "$f"; done
লিনাক্সে ফাইল অনুমতিগুলি লিনাক্স স্ট্যাট কমান্ড ব্যবহার করে অষ্টাল বিন্যাসে প্রদর্শিত হতে পারে।
টার্মিনাল খোলার জন্য আপনার কীবোর্ডে 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
হিসাবে বিস্তারিত "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 ওরফে কমান্ড কারণ তারা অতিরিক্ত আর্গুমেন্ট হিসাবে গ্রহণ করা হয় পরিবর্তে। সুতরাং আপনি একটি নির্দিষ্ট ফাইল বা ডিরেক্টরি চালাতে পারবেন না , বা আপনি কোনও বিকল্প (যেমন , বা ) পাস করতে পারবেন না ।ls
awk
lso
-F
--color
lso
সমাধানটি হ'ল 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)
--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}'; }
কেবল প্রসারিত হচ্ছে 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--)
বহনযোগ্যতার জন্য, আপনি ব্যবহার করতে পারেন 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
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
ওরফে যে একই কমান্ড , যে উত্তরটি উদ্ধৃত করেছে, কেবল একটি কমান্ড হিসাবে চালিত। আপনি যদি এটি কেবল একবার ব্যবহার করেন, বা বিরল উপলক্ষে, তবে আপনি এটি একটি উপন্যাস বা শেল ফাংশন হিসাবে লিখতে বিরক্ত করতে চাইবেন না।