Como posso obter as permissões de um arquivo em formato octal?

Como posso obter as permissões de um arquivo em formato octal?

... e como posso configurá-los? Isso funciona para diretórios da mesma maneira? O que acontece com o sticky bit e aquelas coisas mais “exóticas”?

Responder1

Como sugerido por@Gustave, o statprograma (que faz parteCoreutils GNUe essencialmente um programa "Linux" por esse motivo, embora você possa ter umportaoupacoteem sistemas BSD) pode fazer isso. O comando

stat -c "%a %n"arquivo

produz uma listagem formatada apenas com o modo octal (incluindo os bits setuid, setgid e sticky codificados) e o nome do arquivo. De acordo com a documentação

  • %aé o "Direitos de acesso em octal"
  • %né o "Nome do arquivo"

Por exemplo, dado este script:

#!/bin/sh
for name in $*
do       
    ls -ld "$name"
    stat -c '%a %n' "$name"
done

você pode ver uma saída como esta em myscript /usr/bin /usr/bin/X /usr/bin/bsd-write:

drwxr-xr-x 5 root root 118784 Jul 11 19:55 /usr/bin
755 /usr/bin
-rwsr-sr-x 1 root root 9232 Dec 16  2011 /usr/bin/X
6755 /usr/bin/X
-rwxr-sr-x 1 root tty 11000 Jun 17  2010 /usr/bin/bsd-write
2755 /usr/bin/bsd-write

Você veria 3 ou 4 dígitos octais retornados para odireitos de acesso, dependendo se o setuid, etc., está definido. O (quarto) dígito inicial combina

  • 4 (setuídeo)
  • 2 (setgid)
  • 1 (pegajoso)

Odireitos de acessoretornado exclui os bits extras retornados pela chamada do sistemastatque informam se o nome é um diretório ( S_IFDIR) ou arquivo ( S_IFREG). A propósito, todos esses bits cabem em um valor de 16 bits por causa das antigas implementações do Unix na década de 1970 e início da década de 1980 - e foramvalores padrão. Porque odireitos de acessoexcluir o tipo de arquivo, você pode usar esse valor como está no chmodcomando (e também ochmodfunção), porque é octal, e ochmodcomando espera isso. Até o setuid, etc., funciona com octal, embora coisas como

chmod u+s /usr/bin/whatever

são mais legíveis.

Para leitura adicional

Responder2

stat -c "%a %n" <file>

parece funcionar - mas não sei mais.

Responder3

Obtendo: como Gustave respondeu.

Contexto:

chmod 0755 myfile

O mesmo para diretórios. Para sticky bit, o primeiro dígito deve ser 1. Sobre o sticky bit:https://askubuntu.com/a/432703

informação relacionada