ইউনিক্স তালিকাটি 'ls' আউটপুট সংখ্যার chmod অনুমতি অনুমতি দিতে পারে?


179

R৪৪ এর মতো সংখ্যাসূচক ইউনিক্স অনুমতিগুলি দেখতে প্রতীকী আউটপুট -rw-rw-r-- দেখতে কোনও ডিরেক্টরি তালিকা তৈরি করার সময় কি এটি সম্ভব?

ধন্যবাদ।

উত্তর:


339

এটা প্রায় পারে ..

 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}'

31
এটিকে একটি উপনাম হিসাবে তৈরি করার জন্য (নীচে উদাহরণস্বরূপ: 'ক্লস' কমান্ড) ব্যবহার করুন: alias cls="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}'"
বিপদ 89

6
আমি বিপদ 89 থেকে লাইনটি অনুলিপি করে আটকালাম এবং দেখেছি যে আশ্চর্যরূপে আউটপুটটি প্রতি লাইন% 0..O দিয়ে শুরু হয়েছিল, 755 বলার পরিবর্তে else অন্য কেউ যদি এদিকে আসে তবে কারণটি 0 এবং o এর মধ্যে একটি লুকানো চরিত্র হিসাবে উপস্থিত বলে মনে হচ্ছে। মুছে ফেলা একবার কমান্ড সুন্দরভাবে সেট আপ করা হয়। চিয়ার্স!
ডোনা

আমি মনে করি একটি গণনা সমস্যা আছে। chmod 777 dirআপনার কমান্ড এর পরে অনুমতিগুলি প্রিন্ট করার পরে767
জুলিয়ান এফ। ওয়েইনার্ট

ডোনা যেমন উল্লেখ করেছেন, 0 ও ও এর মধ্যে একটি মজার চরিত্র আছে (বা 2), এছাড়াও, আশ্চর্যের সাথে মনে হচ্ছে এসও এটি যুক্ত করছে ...
nbsp

3
এটি বিট টি এবং গুলি সনাক্ত করতে ব্যর্থ। ফাইল অনুমতি সম্পর্কিত তথ্য পেতে আপনার 'স্ট্যাট' কমান্ডটি ব্যবহার করা উচিত। হাত দিয়ে এটি গণনা ত্রুটি হতে হবে!
ইভান ল্যাংলোইস

148

নিকটতম আমি ভাবতে পারি (এটিকে যথেষ্ট সহজ করে রাখা) statআপনি ধরে নিচ্ছেন যে আপনি কোন ফাইলগুলি অনুসন্ধান করছেন। যদি আপনি না *পান তবে তাদের বেশিরভাগ সন্ধান করতে পারেন:

/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...

এটি বক্সের বাইরে স্টিকি, স্যুইড এবং সংস্থাকে পরিচালনা করে:

$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo

20
এটি লিনাক্সের অধীনে দুর্দান্ত কাজ করেছে, আমি stat -f '%A %N' *ম্যাক (ফ্রিবিএসডি) তে একই জিনিসটি পেয়েছি
14'7

2
আমি যুক্তি যে statনয় lsসেইজন্য এই সঠিক উত্তর নয়। তবে আমি বিশ্বাস করি এটি পছন্দসই আউটপুট প্রসঙ্গে সঠিক উত্তর। যদি awkপাইপে অনুমতি দেওয়া হয় তবে findযেখানে statডাকা হয়েছে সেখানে অনুমতি দেওয়া উচিত -exec; তারপর আপনি ব্যবহার করতে পারেন statছাড়া সরাসরি*
javafueled

2
এটি আরও সংক্ষিপ্ততর এবং যে কোনও সিস্টেমে 100% কাজ করছে
ক্যাঙ্গারুও

যদি আপনি স্ট্যাট ব্যবহার করতে চান অধিকারগুলি পুনরাবৃত্তভাবে দেখতে, ব্যাশের অধীনে, ব্যবহার করুন stat -c '%a %n' * **/*
ডেনিস শেভালিয়ার

61

আপনি কেবল জিএনইউ অনুসন্ধান ব্যবহার করতে পারেন।

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

এটি একটি আদেশ যা আমি আসলে মনে করতে পারি। সহায়ক এবং কার্যকর।
ট্রেন্ট

5
-maxdepth 1এটিতে বিকল্পও থাকা উচিত , অন্যথায় এটি পুরো ডিরেক্টরি ট্রিটিকে বিভক্ত করে।
রুসলান

36

আপনি নিম্নলিখিত কমান্ড ব্যবহার করতে পারেন

stat -c "%a %n" *

এছাড়াও আপনি নির্দিষ্ট ফলাফল পেতে যে কোনও filenameবা directorynameতার পরিবর্তে ব্যবহার করতে পারেন *

ম্যাক এ, আপনি ব্যবহার করতে পারেন

stat -f '%A %N' *

1
আমার পক্ষে কাজ করেনি। stat: illegal option -- c usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
rschwieb

1
উবুন্টু ১৪.০৪-তে কাজ করে .. এটি কখনও মনে রাখতে হবে না আমি আমার .bashrc এ একটি উপন্যাস যুক্ত করেছি:
ওরফ

1
সহায়ক! আপনি এটি% A কীভাবে খনন করবেন যা ম্যাকের স্ট্যাটাস অফ ম্যানের মধ্যেও দেখা যায় না?
igonejack

1
এটি প্রকৃতপক্ষে একটি ফ্রিবিএসডি কমান্ড এবং ম্যাকটি কেবল এটির উপরের কার্নেল হিসাবে ব্যবহার করে নির্মিত হবে।
মোহাম্মদ আবদুল মুজিব

আমরা যদি কেবল man statম্যাকোস 10.14.4 এ উপস্থাপন করা তথ্য ব্যবহার করি তবে কমান্ডটি হওয়া উচিত stat -f "%Lp %N" *%Lpহিসাবে একই জিনিস মুদ্রণ প্রদর্শিত হবে %A
সিজার আন্দ্রেউ

17

@ মাইওয়াইএন

বাহ, সুন্দর অজানা! তবে স্যুইড, স্যাজিড এবং স্টিকি বিট সম্পর্কে কী?

আপনাকে আপনার ফিল্টারটি এস এবং টি দিয়ে প্রসারিত করতে হবে, অন্যথায় তারা গণনা করবে না এবং আপনি ভুল ফলাফল পেয়ে যাবেন। এই বিশেষ পতাকাগুলির জন্য অষ্টাল সংখ্যা গণনা করার জন্য, পদ্ধতিটি একই তবে সূচকটি 4 and এবং 10 এ রয়েছে ---s--s--texec---S--S--T

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

পরীক্ষার জন্য:

touch blah
chmod 7444 blah

ফলাফল হবে:

7444 -r-Sr-Sr-T 1 cheko cheko   0 2009-12-05 01:03 blah

এবং

touch blah
chmod 7555 blah

দিতে হবে:

7555 -r-sr-sr-t 1 cheko cheko   0 2009-12-05 01:03 blah

3
+1 ধন্যবাদ! আমি এটি একটি 1-লাইনের ওরফে সংক্ষিপ্ত করে রেখেছি:alias "lsmod=ls -al|awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
জেরোয়েন ওয়েয়ার্ট প্লাইমার্স

কাজের ফাইলের অনুমতিগুলি পুনরুদ্ধার করতে +1 এই ধারণাটি আরও গ্রহণ করেছেন: ysgitdiary.blogspot.fi/2013/04/…
জর্জিভ

5
এলএসএমকে একটি উপাধিকার হিসাবে ব্যবহার করবেন না .. এটি কার্নেল মোডগুলি তালিকাভুক্ত করার জন্য একটি পরিচিত পিক্সিক কমান্ড।
শেডবিক

@JeroenWiertPluimers আমার awk থেকে একটি বাক্য গঠন ত্রুটি দিচ্ছেন
ইভান Langlois

@ ইভানল্যাংলোইস তাই একটি নতুন প্রশ্ন জিজ্ঞাসা করুন।
জেরোয়েন ওয়েয়ার্ট প্লাইমার্স

9

ইউনিক্সের সংখ্যা সংক্রান্ত অনুমতি মানগুলি (অষ্টাল মান) এবং ফাইলের নাম প্রদর্শন করতে এটি ব্যবহার করুন।

stat -c '%a %n' *

ইউনিক্সের সংখ্যা সংক্রান্ত অনুমতি মানগুলি (অক্টাল মান) এবং ফোল্ডারের শ্যাজিড এবং স্টিকি বিট, মালিকের ব্যবহারকারীর নাম, গোষ্ঠীর নাম, বাইটস এবং ফাইলের নামের মধ্যে মোট আকার প্রদর্শন করতে এটি ব্যবহার করুন।

stat -c '%a %A %U %G %s %n' *

এখানে চিত্র বর্ণনা লিখুন

%yআপনার মানব-পঠনযোগ্য ফর্ম্যাটে শেষ পরিবর্তনের সময় প্রয়োজন হলে যুক্ত করুন । আরও বিকল্পের জন্য স্ট্যাট দেখুন

একটি উপনাম ব্যবহার করে আরও ভাল সংস্করণ

আপনার যা প্রয়োজন তা পূরণ করার জন্য একটি উপনাম ব্যবহার করা আরও কার্যকর উপায় এবং এতে রঙও অন্তর্ভুক্ত রয়েছে। নিম্নলিখিতটি প্রথমে গ্রুপ ডিরেক্টরি দ্বারা সংগঠিত আপনার ফলাফলগুলি প্রদর্শন করে, রঙে প্রদর্শিত হবে, মানব পাঠযোগ্য বিন্যাসে আকারগুলি মুদ্রণ করবে (উদাহরণস্বরূপ, 1 কে 234 এম 2 জি) আপনার সম্পাদনা করুন ~/.bashrcএবং সম্পাদনা করে আপনার অ্যাকাউন্টের জন্য বা বিশ্বব্যাপী একটি উপনাম যুক্ত করুন/etc/profile.d/custom.sh

টাইপিং clsআপনার নতুন এলএস কমান্ড ফলাফল প্রদর্শন করে।

alias cls="ls -lha --color=always -F --group-directories-first |awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"

এলিয়াস সবচেয়ে কার্যকর সমাধান

ফোল্ডার ট্রি

আপনি যখন আপনার বাশার্ক সম্পাদনা করছেন বা কাস্টম.শ্রে গ্রাফিকাল উপস্থাপনা দেখতে নীচের নামটি অন্তর্ভুক্ত করুন সেখানে টাইপিং lstreeআপনার বর্তমান ফোল্ডার গাছের কাঠামো প্রদর্শন করবে

alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"

এটি প্রদর্শিত হবে:

   |-scripts
   |--mod_cache_disk
   |--mod_cache_d
   |---logs
   |-run_win
   |-scripts.tar.gz

4

আপনি কোনও ফাইলের অনুমতি সম্পর্কিত তথ্য পেতে ls ব্যবহার করবেন না। আপনি স্টেট কমান্ড ব্যবহার করুন। এটি আপনাকে চাইলে এমন সংখ্যার মান দেবে। "ইউনিক্স ওয়ে" বলছে যে ls (বা 'প্রতিধ্বনি *') এবং স্ট্যাট ব্যবহার করে আপনার নিজের স্ক্রিপ্টটি উদ্ভাবন করা উচিত এবং আপনি যে ফর্ম্যাটটি চান সে তথ্যটি আপনার পছন্দ করতে চান।


1

নির্বাচিত উত্তর এবং একটি উপনাম ব্যবহারের পরামর্শের ভিত্তিতে আমি এটিকে একটি ফাংশনে রূপান্তর করেছি যাতে ডিরেক্টরিতে ডিরেক্টরিতে কোনও ডিরেক্টরি পাস করা সম্ভব হয়।

# ls, with chmod-like permissions and more.
# @param $1 The directory to ls
function lls {
  LLS_PATH=$1

  ls -AHl $LLS_PATH | 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}"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.