Tag: Linux

Entenda as permissões em sistemas *nix

Algumas pessoas já me pediram explicação sobre permissões no Linux, alegando que não entendem como dar permissão pelo terminal, e essas coisas.
Recentemente tive a oportunidade de explicar a um amigo, lá pelo discord do Mente Binária (http://menteb.in/discord), e então já fomos anotando as informações para montar um POST. Assim, o mesmo conteúdo poderá ser utilizado outras vezes, com outras pessoas.

Então aqui vai uma breve explicação inicial sobre permissões nos sistemas semelhantes à Linux..Vale para *nix na realidade.
A explicação que segue foi preparada com as minhas próprias palavras e uma maneira simples de tentar explicar algo que muitos acham complexo.

Sempre começo informando que permissão é fácil duma vez.. e digo: – “421 – grava esse número.”

Permissões se resumem à possibilidade ou não de Leitura, Escrita e Execução em arquivos ou diretórios.

Cada uma dessas possibilidades, é expressa por números com valores:

Leitura = 4
Escrita = 2
Execução = 1

Por isso a dica de memorizar o número 421.

Leitura em inglês é traduzido como Read
Escrita em inglês é traduzido como Write
Execução em inglês é traduzido como eXecute

Note as letras em destaque em Read/Write/eXecute: r w x

Por isso, quando se dá um comando “ls -l” com o objetivo de listar os arquivos e pastas no diretório atual, se vê algo parecido com:

-rwxrwx--- e outros detalhes como dono, grupo e nome do arquivo

Essas letrinhas aí significam o seguinte:

r significa que esse arquivo tem permissão de leitura (Read)
w significa que tem permissão de escrita (Write)
x significa que tem permissão de execução (eXeCution)

♥Daí surge a pergunta: mas por quê não apenas rwx e sim rwxrwxrwx? Parece que está repetindo. Não parece?
Talvez isso é o que confunde muita gente.

É que são três grupos: rwx pro dono do arquivo… rwx pro grupo do arquivo… e rwx pra outros (ou qualquer um, enfim tudo que não for dono e grupo)
Sempre começa com um traço, e depois os três grupos. Assim:

-[---][---][---] e outros detalhes como dono, grupo e nome do arquivo

Se contarmos quantos rwx tem, vai ver que, em condições básicas de permissão, serão sempre 9. Sendo 3 pra dono 3 pra grupo 3 pra outros.

Agora o 421 numericamente falando, são as permissões de usuários. Para manipular as permissões de um arquivo, usa-se uma matemática de simples soma com esses números.
Se temos um arquivo aaa.txt e queremos deixar sem permissão pra nada, o comando seria:

$ chmod 000 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

---------- aaa.txt

Ou seja, o arquivo está sem permissão alguma. Nem o dono conseguirá ler o conteúdo do arquivo.

Agora, se quiser que o dono do arquivo tenha permissão de leitura, o comando seria:

$ chmod 400 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

-r--------- aaa.txt

Até aqui, estamos aprendendo como manipular essas atribuições de permissões.
Lembrando que no comando chmod, os números passados como argumento se referem a permissão, mas a posição de cada algarismo se refere a dono, grupo e outros…
Por exemplo: agora queremos que só os outros tenham permissão de leitura, então o comando seria:

$ chmod 004 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

-------r-- aaa.txt

Sacou a ideia?
Faça um desenho no papel e tudo fica mais claro.. e aproveite para ir testando num terminal também, claro.

Note que, nos comandos de exemplo de chmod que foram usados até aqui, falamos apenas de permissão de leitura, por isso só trabalhamos no número 4..

Leitura em inglês é Read = 4
Escrita em iinglês é Write = 2
Execucão em inglês é eXecute = 1

Então, pra todos (dono, grupo e outros) terem permissão de executar, o comando seria assim:

$ chmod 111 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

---x--x--x aaa.txt

Ao executar o comando chmod seguido de algum número como argumento, são 3 posições:

$ chmod [][][] algum.arquivo.extensao

A primeira posição é usada para permissão de dono
A segunda posição é usada para permissão de grupo
A terceira posição é usada para permissão de outros (ou qualquer um, enfim tudo que não for dono e grupo)

Na primeira posição [] pode-se colocar ou 4 ou 2 ou 1.. para permissão de dono (ou leitura, ou escrita, ou execução)
Na segunda posição [] pode-se colocar ou 4 ou 2 ou 1.. para permissão de grupo (ou leitura, ou escrita, ou execução)
Na terceira posição [] pode-se colocar ou 4 ou 2 ou 1.. para permissão de outros (ou leitura, ou escrita, ou execução)

E pronto! Isso é o básico de permissão em *nix!

Vamos seguir com mais alguns exemplos para fixar bem o que aprendemos até aqui.
Um comando como esse:

$ chmod 421 aaa.txt

Deixaria o arquivo aaa.txt com as seguintes permissões:

-r---w---x aaa.txt

…pois com o número 421 estamos na realidade atribuindo três posições: [4][2][1]

4 para dono
2 para grupo
1 para outros

Agora um ponto bem importante:
Um arquivo totalmente aberto com todas as permissões para todo tipo de usuário é perigoso, praticamente público, mas o comando para fazer isso seria assim:

$ chmod 777 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

-rwxrwxrwx aaa.txt

Usa-se o número 7 pois quero dar rwx (4+2+1) = 7

Note que temos uma soma matemática aí.

matemática 4+2+1=7 pra dono
matemática 4+2+1=7 pra grupo
matemática 4+2+1=7 pra outros

Ao passo que se compreende a soma, é possível montar a permissão que quiser. Por exemplo:

100 apenas o dono executa.
200 apenas o dono escreve.
300 apenas o dono escreve e executa (2+1=3).
400 apenas o dono lê.
500 apenas o dono lê e executa (4+1=5).
600 apenas o dono lê e escreve (4+2=6).
700 apenas o dono lê, escreve e executa (4+2+1=7).

010 apenas o grupo executa.
020 apenas o grupo escreve.
030 apenas o grupo escreve e executa (2+1=3).
040 apenas o grupo lê.
050 apenas o grupo lê e executa (4+1=5).
060 apenas o grupo lê e escreve (4+2=6).
070 apenas o grupo lê, escreve e executa (4+2+1=7).

001 apenas outros executa.
002 apenas outros escreve.
003 apenas outros escreve e executa (2+1=3).
004 apenas outros lê.
005 apenas outros lê e executa (4+1=5).
006 apenas outros lê e escreve (4+2=6).
007 apenas outros lê, escreve e executa (4+2+1=7).

E o segredo para nunca mais esquecer é praticar.

Veja esse diagrama:

Da autoria de Julia Evans (@b0rk) que é uma excelente professora. Como comentado por ela, existem mais opções avançadas de permissões, tais como setuid, setgid, sticky.
Ainda outra vertente seria a manipulação de permissões ainda usando o comando chmod mas usando as letras ao invés de números, tais como:

chmod +r aaa.txt
chmod +w aaa.txt
chmod +x aaa.txt

Onde se pode manipular permissões para dono, grupo e outros também.

Mas essas linhas ficam então para você pesquisar e continuar a aprender sobre permissões no Linux.

Espero que tenha gostado da explicação e aprendido algo.
E se surgirem dúvidas, poste um comentário aqui que respondo assim que eu puder, se eu souber.

Forte abraço e como sempre muito obrigado pela leitura!

eSpeak: O Linux também fala!

Pra quem costuma elogiar o Linux dizendo: “Só falta falar”.
Agora vai ter que mudar um pouco o discurso.

O Linux também fala!

Um dos nomes dessa tecnologia é text-to-speech (texto pra fala). Já faz algum tempo que essa tecnologia vem evoluindo. Ótimo recurso para quem desenvolve aos portadores de necessidades especiais, como os deficientes visuais, por exemplo.

Mas ainda ainda tem muito o que evoluir. Não está pronta para ser usada na narração de um vídeo institucional por exemplo, para evitar gastos com um estúdio de gravação profissional (que não é nada barato).

Pra explorar text-to-speech em Linux, basta instalar o espeak e se divertir:

[root@vostrolab ~]# yum install espeak

O que eu tenho instalado aqui por exemplo, é esse:

[root@vostrolab ~]# rpm -qa|grep espeak
espeak-1.46.02-1.fc16.i686

Agora é só mandar falar:

[hudson@vostrolab ~]$ espeak -v pt “CiaLinux, compartilhando o que é livre.”

Perceba que usei o parâmetro opcional -v pt, para determinar a voz que me interessa.

Para verificar as vozes disponíveis:

[hudson@vostrolab ~]$ espeak –voices

A título de curiosidade, essas vozes ficam indexadas em /usr/share/espeak-data/voices/ e demais dicionários junto em /usr/share/espeak-data/.

O que segue é informação adicional:
eSpeak  was  written  by  Jonathan  Duddington  <jonsd@jsd.clara.co.uk>.  The  webpage  for  this  package  can  be  found  at http://espeak.sourceforge.net/.

Por: Hudson Murilo dos Santos
Referências: man espeak
http://elcio.com.br/o-linux-tambem-fala/

Arquivos deletados e espaço em disco não liberado

Olá pessoal, vamos para mais uma dica sobre File Systems…

Alguém já presenciou uma situação em que um grande arquivo ou milhares de pequenos arquivos foram eliminados com rm -rf e o espaço em disco não foi liberado ? pois bem, eu já presenciei várias vezes em FileServers Samba e hosts com bancos de dados Oracle.

Trata-se de uma situação comum que dependendo da situação pode ser uma dor de cabeça e tanto. Quando temos um arquivo sendo usado por um processo de aplicativo, e que durante este “lock” o removemos o filesystem marca este arquivo como deletado e não libera os blocos usados pelo(s) arquivo(s)…

Read More