ඒ නිසා එය CHMOD කට්ටලයක් ගොනු අවසර ආඥාවයි, නමුත් මම විධාන රේඛාවේ සිට octal ආකාරයෙන් ගොනු අවසර (එවැනි 755 වැනි) ලබා ගත හැක්කේ කෙසේද?
stat --format "%A" $FILE
ඔබට මිනිස් කියවිය හැකි drwxr-x---
ආකෘතිය ලබා දෙයි . ප්රයෝජනවත් විය හැකි හෝ නොවිය හැකි.
ඒ නිසා එය CHMOD කට්ටලයක් ගොනු අවසර ආඥාවයි, නමුත් මම විධාන රේඛාවේ සිට octal ආකාරයෙන් ගොනු අවසර (එවැනි 755 වැනි) ලබා ගත හැක්කේ කෙසේද?
stat --format "%A" $FILE
ඔබට මිනිස් කියවිය හැකි drwxr-x---
ආකෘතිය ලබා දෙයි . ප්රයෝජනවත් විය හැකි හෝ නොවිය හැකි.
Answers:
ඔබට උත්සාහ කළ හැකිය
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/
stat -f '%A %a %N' *
(ණය: geeklog.adamwilson.info/article/58/… )
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 + 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
සවිස්තර ලෙස "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)
--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}'; }
පෙර 'සංඛ්යා' ආශ්රිත පිළිතුරු සරල කිරීම සරල කිරීම:
ඔබට සරලව ධාවනය කළ හැකිය:
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--)
අතේ ගෙන යා හැකි දේ සඳහා, ඔබට මෙය භාවිතා කළ හැකිය 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
මේ අතර, 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
අන්වර්ථයේ ඇති විධානය වන අතර, එම පිළිතුර උපුටා දක්වමින් තනි විධානයක් ලෙස ක්රියාත්මක වේ. ඔබ මෙය භාවිතා කරන්නේ එක් වරක් හෝ දුර්ලභ අවස්ථාවන්හිදී නම්, එය අන්වර්ථයක් හෝ ෂෙල් ශ්රිතයක් ලෙස ලිවීමට කරදර වීමට ඔබට අවශ්ය නොවනු ඇත.