Ninawezaje kupata ruhusa ya faili ya octal kutoka kwa mstari wa amri?


Nenda kwa jibu lililokubaliwa


Kuna amri ya chmod ya kuweka ruhusa ya faili, lakini je! Ninaweza kupata ruhusa za faili katika hali ya octal (kama 755) kutoka kwa amri ya amri?


382





2012-06-17




Idadi ya majibu: 6


Unaweza kujaribu

 stat -c "%a %n" *
 

Badilisha * na saraka inayofaa au jina halisi la faili ambalo unataka kuchunguza.

Kutoka kwa ukurasa wa mtu wa stat ,

 -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
 

Matumizi:

  • Na faili:

     $ stat -c "%a %n" ./Documents/Udev.html 
    664 ./Documents/Udev.html
     
  • Na folda:

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

(Rejea)


547


2012-06-17

Ruhusa za faili katika Linux zinaweza kuonyeshwa kwa muundo wa octal kwa kutumia amri ya tuli ya Linux.

Tu vyombo vya habari Ctrl+ Alt+ Tkwenye keyboard yako ya wazi Terminal. Wakati inafunguliwa, Nenda kwenye saraka ambapo unataka kupata ruhusa ya faili katika hali ya octal.

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

Haki za Ufikiaji katika mfumo unaoweza kusomeka wa kibinadamu

Haki za Ufikiaji katika pweza

% n Jina la faili

Nambari za pweza na ruhusa

Unaweza kutumia nambari ya octal kuwakilisha mode / ruhusa:

 r: 4
w: 2
x: 1
 

Kwa mfano, kwa mmiliki wa faili unaweza kutumia modi ya octal kama ifuatavyo. Soma, andika na utekeleze (kamili) ruhusa kwenye faili katika octal ni 0 + r + w + x = 0 + 4 + 2 + 1 = 7

Ruhusu tu andika ruhusa kwenye faili kwenye octal ni 0 + r + w + x = 0 + 4 + 2 + 0 = 6

Soma tu na utekeleze ruhusa kwenye faili katika octal ni 0 + r + w + x = 0 + 4 + 0 + 1 = 5

Tumia njia hapo juu kuhesabu ruhusa ya kikundi na wengine. Wacha tuseme unataka kutoa ruhusa kamili kwa mmiliki, kusoma na kutekeleza ruhusa kwa kikundi, na kusoma ruhusa tu kwa wengine, basi unahitaji kuhesabu ruhusa kama ifuatavyo: Mtumiaji = r + w + x = 0 + 4 + 2 + 1 = 7 Kikundi = r + w + x = 0 + 4 + 2 + 0 = 6 Wengine = r + w + x = 0 + 0 + 0 + 1 = 1

Ruhusa inayofaa ni 761.

Chanzo: http://kmaiti.blogspot.com/2011/09/umask-concept.html


46


2012-06-17

Kama inavyofafanuliwa katika ruhusa za "755" -style na 'ls' na Adam Courtemanche kwenye AgileAdam.com , unaweza kuunda alama lso ambazo hufanya kama ls -l kidogo lakini husindika pato 1 ili kuonyesha ruhusa pia katika octal. Hii inaongeza safu ya kuongoza kuonyesha tatu tarakimu 2 ruhusa octal. Kama ilivyoandikwa, hii kazi kwa files nyingi na directories, lakini haifanyi kazi vizuri kama nata au setuid / setgid bits ni kuweka. 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}'"
 

Hii ina kasoro kubwa, ingawa, kama techtonik pointi nje . You hawezi kupita hoja hii lso pak kama wewe ungekuwa kwa amri , kwa sababu wao ni kuchukuliwa kama hoja ya ziada kwa badala yake. Kwa hivyo huwezi kuendesha faili maalum au saraka, na huwezi kupitisha chaguzi zozote (kama , au ) kwa . ls awk lso -F --color lso


Kurekebisha ni kufafanua lso kama kazi badala ya mfano.

 lso() { ls -alG "[email protected]" | 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}'; }
 

Ikiwa unajaribu hii kwa kuingiliana kwenye ganda lako, kimbia unalias lso ili uondoe mbali - unaweza kufanya hivyo kabla au baada ya kufafanua kazi. Ikiwa utaiweka katika faili iliyoshonwa, kama ~/.bashrc , chukua tu alias mstari na ongeza ufafanuzi wa kazi.

Kwa nini hii inafanya kazi? Tofauti na majambazi, kazi za ganda la bash zinaweza kuchukua vigezo vya mpangilio , yaani, hoja za mstari wa amri . "[email protected]" hupanua kwa orodha kamili ya hoja , na kusababisha hoja kwa lso kazi kupitishwa ls . (Tofauti na ufafanuzi wa angas, mwili wa kazi haukunukuliwa; kwa hivyo ilikuwa ni lazima kuondoa \ wahusika kabla $ na " .)

Kwa kuwa unaweza kupitisha chaguzi lso wakati zinafafanuliwa kwa njia hii kama kazi, unaweza kutaka kuondoa -a na -G chaguzi kutoka kwa ufafanuzi - unaweza kupitisha kwa mikono katika kesi unazotaka. ( Chaguo inahitajika kwa ajili ya maelezo kama ruhusa ya faili kuonyeshwa kabisa , hivyo hakuna faida kwa kuondoa hiyo.) -l

 lso() { ls -l "[email protected]" | 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}'; }
 

Asante kwa techtonik kwa kuashiria kiwango cha juu katika kufafanua lso kama mgeni, na hivyo kunichochea kupanua chapisho hili na nyenzo kuhusu kuifanya iwe kazi badala yake.


1 Mtu anaweza kutambua kuwa hii inaonekana kupingana na kanuni ya jumla juu ya kutopata pato kutoka ls . ls hutoa mazao yanayoweza kusomeka sana kwa wanadamu; hii inaleta idiosyncrasies na mapungufu kuifanya kwa ujumla haifai kama pembejeo kwa amri zingine. Katika kesi hii tunaonyesha kwa ls kuwa tunataka kuhifadhi tabia halisi ya ls ila mabadiliko yetu moja tu .

2 Kizuizi moja cha neno hili, ambalo pia linatumika kwa toleo la kazi lililoonyeshwa chini yake, na ambalo linaweza kuzingatiwa kuwa ni mdudu, ni kwamba linaonyesha nambari tatu za octal hata wakati tarakimu ya nne ya oct ni sifuri. Kama jfmercer ina sawa alisema , tarakimu octal kuonyeshwa hapa hayaakisi bit nata kama ipo, wala bits setuid au setgid.

3 umakini Zaidi ya tu haionekani nne octal tarakimu ni kwamba njia hii akubali wao si kuwekwa, na kama ni - ukiona t , s au S katika string ruhusa - basi unapaswa kupuuza tarakimu octal . Hii ni kwa sababu biti huingizwa kutoka kwa vibali kamba kwa njia ambayo haina akaunti ya biti ngumu za setuid / setgid.


36


2012-06-17

Kuongeza tu \ kurahisisha majibu yanayohusiana na 'stat':

Unaweza kukimbia tu:

 stat <path_to_file>
 

Matokeo yatakuwa na ruhusa ya pweza pamoja na maelezo mengine.



Maelezo (toleo la stat na mfano):

 # stat --version
stat (GNU coreutils) 8.4
 


 [[email protected] ~]# touch /tmp/TEST_PERMISSONS

[[email protected] ~]# chmod 644 /tmp/TEST_PERMISSONS

[[email protected] ~]# 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
 

Kumbuka: ( 0644 / -rw-r - r--)


21


2015-08-26

Kwa usambazaji wa uwezo, unaweza kutumia 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
 

Ikiwa unataka kugundua kosa linapotokea, jaribu:

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

7


2014-09-21

Unaweza kutumia find na -printf hatua.

ls haionyeshi ruhusa ya octal, lakini unaweza kutumia kazi hii iliyo na find kazi:

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

Kwa mfano, kuangalia saraka yangu ya Video:

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

Kielezi %m fomati kinaambia -printf hatua ya kuchapisha ruhusa za octal, wakati mpangilio wa %f muundo unasababisha kuchapisha jina la faili.

Unaweza kupitisha majina mengi ya faili kwa find . Unaweza kutumia glavu (kwa mfano, find * -printf "%m:%f\n" ).

Sio lazima kutumia mtihani kama -name au -iname ; inatosha kupitisha majina ya faili au saraka unayopendezwa nayo kama vidokezo vya kuanza find . Hiyo ni, toa majina yao kama hoja mara baada ya neno find , kama inavyoonekana hapo juu.

find inakupa udhibiti mzuri juu ya jinsi inaonyesha pato. Kuna marekebisho mawili haswa ambayo unaweza kupata muhimu:

  • Kwa msingi, find inarudisha subdirectories, sawa na ls -R . Ikiwa hutaki find kutembelea subdirectories za vidokezo vya kuanzia unazopitia, unaweza kuongeza -maxdepth 0 (au tumia -maxdepth na maadili mengine kuashiria jinsi unavyotaka kwenda).

     $ find Documents -maxdepth 0 -printf "%m:%f\n"
    755:Documents
     
  • %f inaonyesha tu jina la faili, kwa hivyo ikiwa find inapaswa kulipa tena ili kupata faili, unaweza kujua iko wapi. Ili kuonyesha njia, kuanzia na mahali popote pa kuanzia faili ilipatikana chini, tumia %p badala yake.

     $ 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
    .... 

Tazama man find kwa habari zaidi juu ya kutumia find amri.

Njia nyingine ( ls na awk )

Hii inaweza kutumika kuorodhesha faili zote za saraka na ruhusa zao:

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

Kwa kweli hii ni amri ile ile kama ilivyo kwa alias wa Adam Courtemanche lso , ambayo jibu linaloonyesha, linaendesha kama amri moja. Ikiwa unatumia hii mara moja tu, au mara chache, basi hautaki kusumbua kuiandika kama kazi ya angasi au ganda.


2


2014-03-07