විධාන රේඛාවෙන් අෂ්ට ලිපිගොනු අවසර ලබා ගන්නේ කෙසේද?


406

ඒ නිසා එය CHMOD කට්ටලයක් ගොනු අවසර ආඥාවයි, නමුත් මම විධාන රේඛාවේ සිට octal ආකාරයෙන් ගොනු අවසර (එවැනි 755 වැනි) ලබා ගත හැක්කේ කෙසේද?


3
අහම්බෙන් මෙම පිටුවට ගොඩ බැස ඇති නමුත් ඇත්ත වශයෙන්ම මැක් හි මෙය කරන්නේ කෙසේදැයි සොයමින් සිටි මා වැනි අය සඳහා: stackoverflow.com/a/14855227/470749
රයන්

2
stat --format "%A" $FILEඔබට මිනිස් කියවිය හැකි drwxr-x---ආකෘතිය ලබා දෙයි . ප්‍රයෝජනවත් විය හැකි හෝ නොවිය හැකි.
ට්‍රෙවර් බොයිඩ් ස්මිත්

Answers:


573

ඔබට උත්සාහ කළ හැකිය

stat -c "%a %n" *

*අදාළ නාමාවලිය හෝ ඔබට පරීක්ෂා කිරීමට අවශ්‍ය ගොනු නාමය සමඟ ප්‍රතිස්ථාපනය කරන්න .

Stat හි man පිටුවෙන් ,

-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/
    

(යොමුව)


59
mac os මත, භාවිතා කරන්න 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

3
andusandfriends ප්‍රතිදානය මත ලූප lsවීම නරක අදහසකි. ඔබට සැබවින්ම ලූපයක් භාවිතා කිරීමට අවශ්‍ය නම් ඔබට කළ හැකියfor f in *; do stat "%a %n" "$f"; done
ටොම් ෆෙනෙක්

2
මැක් ඕඑස් හි සියල්ල මඳක් වෙනස් වී ඇත්තේ ඇයි (යුනික්ස් අයිසෝ යුටිල්ස් වල පවා)? මේ සඳහා සත්‍ය හේතුවක් තිබේද?
වාසිලිස්

2
කරුණාකර ck හැකෙල්, ඔබට ඇත්තටම හැඟෙන්නේ කෙසේදැයි අපට කියන්න. lol!
මයික්ස්චින්කල්

50

ලිනක්ස් ස්ටාට් විධානය භාවිතයෙන් ලිනක්ස් හි ගොනු අවසරයන් අෂ්ටක ආකෘතියෙන් පෙන්විය හැකිය.

ටර්මිනලය විවෘත කිරීමට ඔබගේ යතුරුපුවරුවේ Ctrl+ Alt+ ඔබන්න T. එය විවෘත වූ විට, ගොනු අවසරයන් අෂ්ට ප්‍රකාරයේදී සොයා ගැනීමට අවශ්‍ය නාමාවලියට සංචාලනය කරන්න.

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

මානව කියවිය හැකි ආකාරයෙන් ප්‍රවේශවීමේ අයිතිය

% අෂ්ටකයේ ප්‍රවේශවීමේ අයිතිය

% n ගොනුවේ නම

ඔක්ටේල් අංක සහ අවසර

මාදිලිය / අවසරය නිරූපණය කිරීමට ඔබට අෂ්ටක අංකය භාවිතා කළ හැකිය:

r: 4
w: 2
x: 1

උදාහරණයක් ලෙස, ගොනු හිමිකරු සඳහා ඔබට පහත පරිදි අෂ්ටක මාදිලිය භාවිතා කළ හැකිය. අෂ්ටක ගොනුවක කියවීම, ලිවීම සහ ක්‍රියාත්මක කිරීම (සම්පූර්ණ) අවසරය 0 + r + w + x = 0 + 4 + 2 + 1 = 7

0 + r + w + x = 0 + 4 + 2 + 0 = 6 වන්නේ අෂ්ටක ගොනුවක කියවීමට හා ලිවීමට පමණි

0 + r + w + x = 0 + 4 + 0 + 1 = 5 යනු අෂ්ටක ගොනුවක අවසරය කියවා ක්‍රියාත්මක කිරීම පමණි

කණ්ඩායම සහ වෙනත් අය සඳහා අවසර ගණනය කිරීමට ඉහත ක්‍රමය භාවිතා කරන්න. ඔබට අයිතිකරුට පූර්ණ අවසරය ලබා දීමටත්, කණ්ඩායම් වලට අවසර කියවීමට සහ ක්‍රියාත්මක කිරීමටත්, අන් අයට අවසර කියවීමටත් අවශ්‍ය යැයි අපි කියමු, එවිට ඔබට පහත පරිදි අවසරය ගණනය කළ යුතුය: පරිශීලක = r + w + x = 0 + 4 + 2 + 1 = 7 කණ්ඩායම = r + w + x = 0 + 4 + 2 + 0 = 6 අනෙක් අය = r + w + x = 0 + 0 + 0 + 1 = 1

අවසරය 761 කි.

මුලාශ්‍රය: http://kmaiti.blogspot.com/2011/09/umask-concept.html


2
ආරම්භක 0 විශේෂ බිට් ද නියෝජනය කරයි: pastebin.com/6ymkFt71
Braiam

37

සවිස්තර ලෙස "755" 'ls' සමග -style අවසර විසින් ආදම් Courtemanche මත AgileAdam.com , ඔබට නිර්මාණය කිරීමට අන්වර්ථ lso වැනි ක්රියා කරන ls -lනමුත් සුළු වශයෙන් ප්රතිදාන ක්රියාවන් 1 octal ද ප්රදර්ශනය අවසර. මෙම ඉලක්කම් තුන පෙන්නුම් කරන ප්රධාන පෙළේ තීරුව එකතු 2 octal අවසර. ලියා ඇති පරිදි, මෙය බොහෝ ලිපිගොනු සහ නාමාවලි සඳහා ක්‍රියා කරයි, නමුත් ඇලෙන සුළු හෝ සෙටූයිඩ් / සෙට්ජිඩ් බිටු සකසා ඇත්නම් එය නිසි ලෙස ක්‍රියා නොකරයි . 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}'"

ටෙක්ටොනික් පෙන්වා දෙන පරිදි මෙය බරපතල අඩුපාඩුවක් ඇත . ඔබ තර්ක ගමන් කළ නොහැක මේ lsoඔබට මෙන් හෙවත් මෙම 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 උල්ලං to නය කරන බවක් පෙනේ . lsමිනිස් කියවිය හැකි නිමැවුමක් නිෂ්පාදනය කරයි; මෙය අනන්‍යතා සහ සීමාවන් හඳුන්වා දෙන අතර එය සාමාන්‍යයෙන් වෙනත් විධානයන් සඳහා ආදානය ලෙස නුසුදුසු වේ. මෙම අවස්ථාවේ දී අප විග්රහ කළ lsසිට අප පිළිබඳ නිශ්චිත හැසිරීම ආරක්ෂා කිරීමට බලාපොරොත්තු වනls අපගේ හැර එක් එක් වෙනස්.

2 ද එය පහත පෙන්වා ඇත උත්සවයට අනුවාදය අදාළ වන අතර, දෝෂයක් ලෙස සැලකුණු විය හැක මෙම හෙවත් එක් සීමාවක්, එය පමණක් octal අංක තුන දර්ශණය වේ සිව්වන octal ඉලක්කම් ශුන්ය වන විට පවා. ලෙස jfmercer ඇත නිවැරදි ලෙස පෙන්වා දුන් , මේ octal ඉලක්කම් මෙහි දක්වනු වත්මන් නම් ඇලෙන සුළු ටිකක් පිළිබිඹු කරන්නේ නැහැ, හෝ setuid හෝ setgid බිටු.

3 තවත් බරපතල හුදෙක් සිව්වන octal ඉලක්කම් පෙන්නුම් නො වඩා මෙම ක්රමය බව ය උපකල්පනය , ඒවා සකස් නොවන, සහ ඔවුන් නම් - ඔබ දුටුවේ නම් t, sහෝ Sඅවසරය strings වල - එවිට ඔබ octal ඉලක්කම් නොසලකා යුතු . මෙයට හේතුව, අවසර ලත් තලයෙන් බිටු අනුමාන කරනු ලබන්නේ ඇලෙන සුළු සෙටූයිඩ් / සෙට්ජිඩ් බිටු සඳහා ගණන් නොගන්නා ආකාරයටය.


නාමාවලි සමඟ ක්‍රියා නොකරයි -awk: read error (Is a directory)
anatoly techtonik

echtechtonik මෙය පෙන්වා දීමට ස්තූතියි! ඒ සඳහා විසඳුමක් ඇතුළත් කිරීම සඳහා මම (අවසාන වශයෙන්) මෙම පිළිතුර යාවත්කාලීන කර ඇත්තෙමි.
එලියා කගන්

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

1
මෙය පළ කිරීමෙන් පසු ඇලෙන සුළු සෙටූයිඩ් / සෙට්ජිඩ් ගැටලුවට විසඳුමක් ඔබ සොයාගෙන තිබේද?
සිල්වෙස්ට්‍රිස්

21

පෙර 'සංඛ්‍යා' ආශ්‍රිත පිළිතුරු සරල කිරීම සරල කිරීම:

ඔබට සරලව ධාවනය කළ හැකිය:

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 / -rw-r - r--)


7

අතේ ගෙන යා හැකි දේ සඳහා, ඔබට මෙය භාවිතා කළ හැකිය 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
අතේ ගෙන යා හැකි වීමට අමතරව, @ cuonglm හි විසඳුම තුනකට වඩා අෂ්ටක අක්ෂර හතරක් පෙන්වන අතර එමඟින් බොහෝ විට අමතක වී ඇති “ඇලෙන සුළු බිට්” තත්වය පෙන්නුම් කරයි.
jfmercer

2

ඔබට ක්‍රියාව findසමඟ භාවිතා කළ හැකිය -printf.

lsඅෂ්ටක අවසරයන් නොපෙන්වයි, නමුත් ඔබට මෙම findපදනම් කරගත් ක්‍රියාකාරීත්වය භාවිතා කළ හැකිය :

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

උදාහරණයක් ලෙස, මගේ වීඩියෝ නාමාවලිය පරීක්ෂා කිරීමට:

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

මෙම %mආකෘතිය විශේෂණයක් කියනවා, -printfමේ අතර, octal අවසර මුද්රණය කිරීමට පියවර %fආකෘතිය විශේෂණයක් එය ගොනු නාමය මුද්රණය කිරීමට හේතු වේ.

ඔබට විවිධ ගොනු නාමයන් යැවිය හැකිය find. ඔබට ග්ලෝබ් පවා භාවිතා කළ හැකිය (උදා:) find * -printf "%m:%f\n".

ඔබට -nameහෝ වැනි පරීක්ෂණයක් භාවිතා කිරීමට අවශ්‍ය නැත -iname; ආරම්භක ස්ථාන ලෙස ඔබ උනන්දුවක් දක්වන ලිපිගොනු හෝ නාමාවලිවල නම් යැවීම ප්‍රමාණවත් වේ find. එනම්, findඉහත පෙන්වා ඇති පරිදි, වචනයට පසුව ඔවුන්ගේ නම් තර්ක ලෙස සපයන්න .

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අන්වර්ථයේ ඇති විධානය වන අතර, එම පිළිතුර උපුටා දක්වමින් තනි විධානයක් ලෙස ක්‍රියාත්මක වේ. ඔබ මෙය භාවිතා කරන්නේ එක් වරක් හෝ දුර්ලභ අවස්ථාවන්හිදී නම්, එය අන්වර්ථයක් හෝ ෂෙල් ශ්‍රිතයක් ලෙස ලිවීමට කරදර වීමට ඔබට අවශ්‍ය නොවනු ඇත.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.