Permissões em Decimais [RESOLVIDO]

1. Permissões em Decimais [RESOLVIDO]

Vinicius Araujo Lopes
viniciusalopes

(usa Ubuntu)

Enviado em 07/02/2017 - 22:13h

Opa!
Sabemos que as permissões são exibidas no terminal com os símbolos r, w, x e '-' (leitura, escrita, execução e nenhuma, respectivamente).
Mas quando vamos alterar as permissões do arquivo com o chmod por exemplo, precisamos passar os parametros em formato decimal:
Permissão   Decimal
--- 0
--x 1
-w- 2
-wx 3
r-- 4
r-x 5
rw- 6
rwx 7

Existe alguma forma de listar os arquivos no terminal, exibindo as permissões assim:
755  2 root     root     4096 Fev  7 21:47 arquivo.txt 

Ao invés de exibir assim:
-rwxr-xr-x  2 root     root     4096 Fev  7 21:47 arquivo.txt 

Alguma sugestão?


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/02/2017 - 01:07h

Boa noite!

$ man 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
%U user name of owner
%G group name of owner
%n File name


$ stat -c '%a %U %G %n' teste.txt
644 amarildo amarildo teste.txt 


$ stat -c '%a %U %G %n' *
755 amarildo amarildo amarildo.sh
660 www-data www-data teste.php
644 amarildo amarildo teste.txt


$ sudo chmod g+s teste.txt
$ stat -c '%a %U %G %n' teste.txt
2644 amarildo amarildo teste.txt 


3. Re: Permissões em Decimais [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/02/2017 - 22:18h

viniciusalopes escreveu:
Existe alguma forma de listar os arquivos no terminal, exibindo as permissões assim:
755  2 root     root     4096 Fev  7 21:47 arquivo.txt 

Ao invés de exibir assim:
-rwxr-xr-x  2 root     root     4096 Fev  7 21:47 arquivo.txt 

Alguma sugestão?


acho q somente se reescrevesse o 'ls' .. mas é só chutômetro meu ... postei para acompanhar o tópico

Abçs
_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


4. Re: Permissões em Decimais

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/02/2017 - 00:44h

viniciusalopes escreveu:

Opa!
Sabemos que as permissões são exibidas no terminal com os símbolos r, w, x e '-' (leitura, escrita, execução e nenhuma, respectivamente).
Mas quando vamos alterar as permissões do arquivo com o chmod por exemplo, precisamos passar os parametros em formato decimal:
Permissão   Decimal
--- 0
--x 1
-w- 2
-wx 3
r-- 4
r-x 5
rw- 6
rwx 7

Existe alguma forma de listar os arquivos no terminal, exibindo as permissões assim:
755  2 root     root     4096 Fev  7 21:47 arquivo.txt 

Ao invés de exibir assim:
-rwxr-xr-x  2 root     root     4096 Fev  7 21:47 arquivo.txt 

Alguma sugestão?


Boa noite viniciusalopes.
Desconheço um comando que exiba dessa maneira, portando, montei um script...
Segue:
#!/bin/bash
for arq in $(ls -1);do
read -a CPS <<< $(ls -l $arq)
if ((${#CPS[@]} > 2));then
PERMIS=$(sed 's/^.//' <<< "${CPS[0]}"|sed 's/\(...\)/& /'g)
read -a PER <<< "$PERMIS"
for ((X=0;X<${#PER[*]};X++));do
case ${PER[$X]} in
---) PER[$X]=0 ;;
--x) PER[$X]=1 ;;
-w-) PER[$X]=2 ;;
-wx) PER[$X]=3 ;;
r--) PER[$X]=4 ;;
r-x) PER[$X]=5 ;;
rw-) PER[$X]=6 ;;
rwx) PER[$X]=7 ;;
esac
done
echo "$(sed 's/ //'g <<< "${PER[*]}") $(echo ${CPS[*]}|cut -d" " -f2-9)"
fi
done


Att.:
marcelo oliver



5. Re: Permissões em Decimais

Vinicius Araujo Lopes
viniciusalopes

(usa Ubuntu)

Enviado em 08/02/2017 - 04:49h

msoliver escreveu:
Desconheço um comando que exiba dessa maneira, portando, montei um script...
(...)
Att.:
marcelo oliver


OPA!
É uma idéia..., mas identifiquei os seguintes pontos negativos no seu script:
- executa duas vezes o comando 'ls' (linhas 2 e 3);
- não funcionou em arquivos com espaços no nome;
- exibe as colunas de informação desalinhadas;
- código visualmente poluído;
- impossível de entender o código sem conhecer a fundo, as expressões regulares.
SAÍDA DO SEU SCRIPT:
755 1 root root 0 Fev 7 21:07 arquivo1
ls: não é possível acessar 'arquivo2': Arquivo ou diretório não encontrado
ls: não é possível acessar 'com': Arquivo ou diretório não encontrado
ls: não é possível acessar 'espaco': Arquivo ou diretório não encontrado
ls: não é possível acessar 'no': Arquivo ou diretório não encontrado
ls: não é possível acessar 'nome': Arquivo ou diretório não encontrado
777 1 root root 0 Fev 7 21:07 arquivo3


Construí um fork a partir da sua idéia, sem expressões regulares (porque não sei como usá-las), com variáveis legíveis, identado para facilitar a compreensão, e sem executar duas vezes o comando 'ls'.
MEU SCRIPT:
#!/bin/bash
exec 3< <(ls -l)
while read arquivo <&3; do
permissao=(${arquivo:1:3} ${arquivo:4:3} ${arquivo:7:3})
for ((x=0;x<3;x++)) do
case ${permissao[x]} in
--) permissao[$x]=0 ;;
--x) permissao[$x]=1 ;;
-w-) permissao[$x]=2 ;;
-wx) permissao[$x]=3 ;;
r--) permissao[$x]=4 ;;
r-x) permissao[$x]=5 ;;
rw-) permissao[$x]=6 ;;
rwx) permissao[$x]=7 ;;
esac
done

if [ ${arquivo:0:5} != "total" ]; then
echo "${permissao[0]}${permissao[1]}${permissao[2]} ${arquivo:11}"
fi
done
exec 3<&-

SAÍDA DO MEU SCRIPT:
755 1 root root 0 Fev  7 21:07 arquivo1
741 1 root root 0 Fev 8 01:44 arquivo2 com espaco no nome
777 1 root root 0 Fev 7 21:07 arquivo3

Além de conseguir exibir os nomes de arquivos com espaço, meu script traz as colunas alinhadas, porque não reescreve a saída do ls; ele só extrai a substring da string.
Achei que ficou bom e funciona, mas ainda é um código visualmente poluído e deselegante.
Sendo assim, vou optar pela sugestão do amarildosertorio, afinal, "BOM é POUCO para quem busca O MELHOR"!
Mesmo assim valeu pela idéia!


6. SOLUÇÃO

Vinicius Araujo Lopes
viniciusalopes

(usa Ubuntu)

Enviado em 08/02/2017 - 05:34h

amarildosertorio escreveu:
$ stat -c '%a %U %G %n' *


OPA!
Justamente o que preciso!
Para não ter que ficar digitando esse comando cheio de '%' e ainda ter que ficar lembrando a sequencia das letras, eu fiz um script simples e acrescentei a leitura da variável '$1' do shell como argumento.
MEU SCRIPT:
#!/bin/bash
if [ ${#1} = 0 ] ; then
stat -c '%a %U %G %n' *
else
stat -c '%a %U %G %n' "$1"
fi

Salvei o script como '/bin/lv' com 'chmod +x'.

Para saber as permissões de todos os arquivos/pastas do diretório:
$ lv
755 root root arquivo1
741 root root arquivo2 com espaco no nome
777 root root arquivo3


Para saber as permissões de um arquivo em específico:
$ lv arquivo1
755 root root arquivo1 


Para arquivos com espaços no nome, posso executar com o "nome do arquivo entre aspas", ou usando o TAB para autocompletar:
$ lv arquivo2\ com\ espaco\ no\ nome
741 root root arquivo2 com espaco no nome 


Acho que é isso! Simples, direto ao ponto e fácil de entender.
Lendo o manual do stat, vi que posso incrementar o script com mais informações como a data da modificação do arquivo (%y), mas por ora, é só o que preciso: permissão em decimal, proprietário, grupo e nome do arquivo.

Valeu, Amarildo! É nóis!



7. Re: Permissões em Decimais

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/02/2017 - 09:40h

Disponha.

Não é necessário script. Crie um alias.

* Exemplo:
$ alias lloct='stat -c "%a %U %G %n"'
$ lloct /tmp
1777 root root /tmp 

Para tornar permanente adicione no bashrc.


8. Re: Permissões em Decimais [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/02/2017 - 11:43h

amarildosertorio escreveu:

Boa noite!

$ man 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
%U user name of owner
%G group name of owner
%n File name


$ stat -c '%a %U %G %n' teste.txt
644 amarildo amarildo teste.txt 


$ stat -c '%a %U %G %n' *
755 amarildo amarildo amarildo.sh
660 www-data www-data teste.php
644 amarildo amarildo teste.txt


$ sudo chmod g+s teste.txt
$ stat -c '%a %U %G %n' teste.txt
2644 amarildo amarildo teste.txt 


Valeu AMARILDO!!!!
Tinha esquecido do "stat"

marcelo


9. Re: Permissões em Decimais [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/02/2017 - 12:01h

msoliver escreveu:

amarildosertorio escreveu:

Boa noite!

$ man 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
%U user name of owner
%G group name of owner
%n File name


$ stat -c '%a %U %G %n' teste.txt
644 amarildo amarildo teste.txt 


$ stat -c '%a %U %G %n' *
755 amarildo amarildo amarildo.sh
660 www-data www-data teste.php
644 amarildo amarildo teste.txt


$ sudo chmod g+s teste.txt
$ stat -c '%a %U %G %n' teste.txt
2644 amarildo amarildo teste.txt 


Valeu AMARILDO!!!!
Tinha esquecido do "stat"

marcelo


Tamo junto! \m/


10. Re: Permissões em Decimais [RESOLVIDO]

Vinicius Araujo Lopes
viniciusalopes

(usa Ubuntu)

Enviado em 08/02/2017 - 15:59h

amarildosertorio escreveu:
Não é necessário script. Crie um alias.
* Exemplo:
$ alias lloct='stat -c "%a %U %G %n"'
$ lloct /tmp
1777 root root /tmp 

Para tornar permanente adicione no bashrc.

É uma boa também.
Eu prefiro os scripts porque posso salvá-los em uma pasta no meu server. Daí, quando estou em uma máquina que não é a minha principal e sinto falta do comando, basta dar um scp usuario@servidor:/script e ZAZ!
Agradeço aos dois que colaboraram com as sugestões. Com certeza servirá para futuras consultas.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts