É possível ao listar um diretório exibir permissões numéricas do unix, como 644, em vez da saída simbólica -rw-rw-r--
Obrigado.
unix
command-line
permissions
Jon Winstanley
fonte
fonte
alias cls="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}'"
chmod 777 dir
o seu comando imprime permissões como767
O mais próximo que consigo pensar (mantendo-o bastante simples) é
stat
, supondo que você saiba quais arquivos você está procurando. Caso contrário,*
encontre a maioria deles:Ele lida com pegajoso, suid e empresa fora da caixa:
fonte
stat -f '%A %N' *
faz a mesma coisa em um Mac (FreeBSD)stat
não é,ls
portanto, esta não é a resposta correta. No entanto, acredito que esta é a resposta correta no contexto da saída desejada. Seawk
for permitido em um tubo,find
deve ser permitido ondestat
é chamado-exec
; então você pode usarstat
diretamente sem*
stat -c '%a %n' * **/*
.você pode apenas usar o GNU find.
fonte
-maxdepth 1
opção, caso contrário, ele percorre toda a árvore de diretórios.Você pode usar o seguinte comando
Além disso, você pode usar qualquer um
filename
ou emdirectoryname
vez de*
obter um resultado específico.No Mac, você pode usar
fonte
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
macOS 10.14.4, o comando deverá serstat -f "%Lp %N" *
.%Lp
parece imprimir a mesma coisa que%A
.@The MYYN
uau, legal awk! Mas e quanto a suid, sgid e sticky bit?
Você precisa estender seu filtro com s e t, caso contrário eles não contarão e você obterá o resultado errado. Para calcular o número octal para esses sinalizadores especiais, o procedimento é o mesmo, mas o índice está em 4 7 e 10. os sinalizadores possíveis para arquivos com o conjunto de bits de execução são
---s--s--t
amd para arquivos sem o conjunto de bits de execução.---S--S--T
Para teste:
vai resultar em:
e
darei:
fonte
alias "lsmod=ls -al|awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
Use isso para exibir os valores numéricos de permissão do Unix (valores octais) e o nome do arquivo.
Use isso para exibir os valores numéricos de permissão do Unix (valores octais) e o sgid e o bit adesivo da pasta, nome de usuário do proprietário, nome do grupo, tamanho total em bytes e nome do arquivo.
Adicione
%y
se precisar da hora da última modificação no formato legível por humanos. Para mais opções, consulte stat .Versão melhorada usando um Alias
Usar um alias é uma maneira mais eficiente de realizar o que você precisa e também inclui cores. A seguir, são exibidos os resultados organizados pelos diretórios de grupo primeiro, exibidos em cores, tamanhos de impressão em formato legível por humanos (por exemplo, 1K 234M 2G) edite
~/.bashrc
e adicione um alias para sua conta ou globalmente editando/etc/profile.d/custom.sh
Digitar
cls
exibe os novos resultados do comando LS.Árvore de pastas
Enquanto você estiver editando seu bashrc ou custom.sh, inclua o seguinte alias para ver uma representação gráfica em que a digitação
lstree
exibirá sua estrutura atual da árvore de pastasSeria exibido:
fonte
Você não usa ls para obter as informações de permissão de um arquivo. Você usa o comando stat. Ele fornecerá os valores numéricos que você deseja. O "Modo Unix" diz que você deve inventar seu próprio script usando ls (ou 'eco *') e stat e o que mais você quiser para fornecer as informações no formato que você deseja.
fonte
Partindo da resposta escolhida e da sugestão de usar um alias , eu a converti em uma função para que seja possível passar um diretório para a lista.
fonte