Existe um comando chmod para definir permissões de arquivo, mas posso obter permissões de arquivo no modo octal (como 755) na linha de comando?
command-line
permissions
Anwar
fonte
fonte
stat --format "%A" $FILE
fornece odrwxr-x---
formato legível por humanos . o que pode ou não ser útil.Respostas:
Podes tentar
Substitua
*
pelo diretório relevante ou pelo nome de arquivo exato que você deseja examinar.Na página de manual do stat ,
Uso:
Com arquivos:
Com pastas:
(Referência)
fonte
stat -f '%A %a %N' *
(credit: geeklog.adamwilson.info/article/58/… )ls
:for f in $(ls -a); do stat -c "%a %n" $f; done;
ls
é uma má ideia. Se você realmente quiser usar um loop que você pode fazerfor f in *; do stat "%a %n" "$f"; done
As permissões de arquivo no Linux podem ser exibidas no formato octal usando o comando stat do Linux.
Basta pressionar Ctrl+ Alt+ Tno teclado para abrir o Terminal. Quando abrir, navegue até o diretório em que deseja encontrar as permissões de arquivo no modo octal.
% A Direitos de acesso em formato legível por humanos
% a Direitos de acesso em octal
% n nome do arquivo
Fonte: http://kmaiti.blogspot.com/2011/09/umask-concept.html
fonte
Conforme detalhado nas permissões no estilo “755” com 'ls' de Adam Courtemanche no AgileAdam.com , você pode criar um alias
lso
que age como,ls -l
mas processa levemente a saída 1 para exibir permissões também em octal. Isso adiciona uma coluna à esquerda mostrando três dígitos 2 permissões octais. Como escrito, isso funciona para a maioria dos arquivos e diretórios, mas ele não funciona corretamente se as pegajosas ou setuid / setgid bits são definidos. 3Isso tem uma falha séria, como o techtonik aponta . Você não pode passar argumentos para esse
lso
alias como faria com ols
comando , porque eles são tomados como argumentos adicionaisawk
. Portanto, você não pode executarlso
em um arquivo ou diretório específico, nem pode passar opções (como-F
ou--color
) paralso
.A correção é definir
lso
como uma função e não como um alias.Se você estiver tentando fazer isso de forma interativa no seu shell, execute
unalias lso
para remover o alias - você pode fazer isso antes ou depois de definir a função. Se você estiver colocando-o em um arquivo de origem, como~/.bashrc
, basta retirar aalias
linha e adicionar a definição da função.Por que isso funciona? Diferentemente dos pseudônimos, as funções do shell bash podem aceitar parâmetros posicionais , como argumentos da linha de comando .
"$@"
expande para a lista completa de argumentos , fazendo com que os argumentos para also
função sejam passados parals
. (Diferentemente de uma definição de alias, um corpo de função não é citado; portanto, foi necessário remover os\
caracteres antes$
e"
.)Como você pode passar opções para
lso
quando definidas dessa maneira como uma função, convém remover as opções-a
e-G
da definição - você pode passá-las manualmente nos casos em que desejar. ( A-l
opção é necessária para detalhes como as permissões de arquivo para ser mostrado em tudo , então não há nenhum benefício para removê-lo.)Agradeço ao techtonik por apontar a limitação na definição de
lso
um alias, motivando-me a expandir este post com material sobre como torná-lo uma função.1 Pode-se notar que isso parece desrespeitar a regra geral de não analisar a saída
ls
.ls
produz saída muito legível por humanos; isso introduz idiossincrasias e limitações, tornando-o geralmente inadequado como entrada para outros comandos. Neste caso, nós analisamosls
uma vez queremos preservar o comportamento exato dels
exceto nosso uma mudança acrescentou.2 Uma limitação desse alias, que também se aplica à versão da função mostrada abaixo, e que pode ser considerada um bug, é que ele exibe apenas três dígitos octais, mesmo quando o quarto dígito octal é zero. Como jfmercer tem justamente salientou , os dígitos octais exibidos aqui não refletem a pouco pegajoso se os bits presentes, nem setuid ou setgid.
3 Mais sério do que meramente não mostrando o quarto dígito octal é que este método assume que eles não estão definidos, e se eles são - se você ver
t
,s
ouS
na cadeia de permissão - então você deve ignorar os dígitos octais . Isso ocorre porque os bits são deduzidos da cadeia de permissões de uma maneira que não considera os bits fixos / setgid.fonte
awk: read error (Is a directory)
--color
parâmetro para mostre coreslso() { 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}'; }
Apenas estendendo \ simplificando as respostas anteriores relacionadas ao 'stat':
Você pode simplesmente executar:
A saída conterá permissão octal junto com outras informações.
Detalhes (versão estatística e exemplo):
Observe o: ( 0644 / -rw-r - r--)
fonte
Para portabilidade, você pode usar
perl
:Se você deseja perceber quando ocorre um erro, tente:
fonte
Você pode usar
find
com a-printf
ação.ls
não mostra permissões octais, mas você pode usar estafind
solução alternativa:Por exemplo, para verificar meu diretório de vídeos:
O
%m
especificador de formato informa à-printf
ação para imprimir permissões octais, enquanto o%f
especificador de formato faz com que imprima o nome do arquivo.Você pode passar vários nomes de arquivos para
find
. Você pode até usar globs (por exemplo,find * -printf "%m:%f\n"
).Você não precisa usar um teste como
-name
ou-iname
; é suficiente passar os nomes dos arquivos ou diretórios nos quais você está interessado como pontos de partidafind
. Ou seja, forneça seus nomes como argumentos imediatamente após a palavrafind
, como mostrado acima.find
fornece um ótimo controle sobre como mostra a saída. Há duas modificações em particular que você pode achar úteis:Por padrão,
find
recursa subdiretórios, semelhantes als -R
. Se você não quiserfind
visitar os subdiretórios dos pontos de partida que você passa para ele, é possível adicionar-maxdepth 0
(ou usar-maxdepth
com outros valores para indicar a profundidade que você deseja).%f
mostra apenas um nome de arquivo; portanto, sefind
for necessário recursar para acessar um arquivo, talvez você não saiba onde ele está localizado. Para mostrar um caminho, começando com o ponto inicial em que o arquivo foi encontrado, use-o%p
.Consulte
man find
para obter mais informações sobre como usar ofind
comandoOutro método (
ls
eawk
)Isso pode ser usado para listar todos os arquivos de diretório com suas permissões:
Este é essencialmente o mesmo comando que no pseudônimo de Adam Courtemanche
lso
, que essa resposta citou, apenas roda como um único comando. Se você estiver usando isso apenas uma vez, ou em raras ocasiões, talvez não queira se incomodar em escrevê-lo como um alias ou função de shell.fonte