Permissões de arquivos
Permissões
Comandos:
lsexibi o que tem na minha pasta

ls -laexibi o que tem na minha pasta inclusive arquivos ocultos.

Se observamos temos alguns arquivos e diretórios com letras. O que essas letras significam?
Leitura → r - 4
Escrita, permissão de gravação→ w - 2
Execução → x -1
Leitura(read) permite ao usuário ler o conteúdo do arquivo mas não alterá-lo. Escrita(write) permite que o usuário altere o arquivo. Execução(x), como o nome diz, permite que o usuário execute o arquivo, no caso de ser executável.
E são divididos em 3 partas:
1 → proprietário: usuário que controla o arquivo.
2 → grupo: conjunto de usuários com permissões específicas.
3 → outros usuários: usuários que não pertencem nem ao proprietário, nem ao grupo, e têm permissões restritas (ou nenhuma permissão).
Exemplo:
-→ que dizer que é um arquivo e não umddiretório(pasta)rw-→ a primeira parte significa permissões do proprietário,leitura(r) e escrita(w)(4,2)r--→ a segunda parte significa permissões do grupo ao qual o usuário pertence,leitura(4)r--→a terceira parte significa permissões para os demais usuários,leitura(4)
E o que seria 4 - 2 - 1 (leitura - escrita - executável) ?
Seria Octal. Octal é um sistema de números base 8 que usa os dígitos 0 a 7.
Veja a tabela:
1
--x
somente execução
2
-w-
somente escrita
3
-wx
escrita e execução
4
r--
somente leitura
5
r-x
leitura e execução
6
rw-
eitura e escrita
7
rwx
leitura, escrita e execução
r--------
400
somente leitura para propriétário(4)
r--r--r--
444
leitura para proprietário, grupo e outros usuários
rw-------
600
leitura e escrita somente para proprietário(4+2 = 6)
rw-r--r--
644
leitura e escrita para proprietário(6), leitura para grupo e para outros
rw-rw-rw-
666
leitura e escrita para proprietário, grupo e outros.
rwx------
700
leitura, escrita e executável somente para proprietário(4+2+1=7)
rwxr-x---
750
leitura, escrita e executável para proprietário(4+2+1=7), leitura e executavel para grupo(4+3)
Fonte: infowester
Exemplo, temos um arquivo teste.txt
Proprietário(rw): leitura e escrita
grupo(r) e demais(r): leitura
Vamos alterar para proprietário ser o unico que tenha leitura e escrita e grupo e os demais não terão permissão de leitura.
Para fazer isso vamos usar chmod e passar o octal para nome do arquivo, ficaria assim:
chmod 600 teste.txt
proprietário: leitura(4) e escrita(2) → 4 + 2 = 6 ⇒ rw
grupo: 0
demais: 0
Alterado com sucesso!
Script: configurar_permissoes.sh
configurar_permissoes.shExemplo de um script em Shell que recebe o nome do arquivo como argumento, adiciona a extensão .txt ao nome e depois define permissões para o proprietário, grupo e outros usuários.
#!/bin/bash
# Verificar se o argumento foi fornecido
if [ -z "$1" ]; then
echo "Por favor, forneça o nome do arquivo como argumento."
exit 1
fi
# Nome do arquivo (adiciona a extensão .txt)
nome_arquivo="$1.txt"
# Criar o arquivo
touch "$nome_arquivo"
# Definir permissões para o proprietário, grupo e outros
chmod 744 "$nome_arquivo"
# Exibir o arquivo e suas permissões
echo "Arquivo criado: $nome_arquivo"
ls -l "$nome_arquivo"Explicação:
O script verifica se o nome do arquivo foi passado como argumento. Se não, ele solicita o nome.
O nome do arquivo fornecido tem a extensão
.txtadicionada.O comando
touchcria o arquivo (caso não exista).O comando
chmod 744define as permissões do arquivo:Proprietário: leitura, escrita e execução (7).
Grupo: leitura (4).
Outros: leitura (4).
O script exibe o arquivo criado e suas permissões com o comando
ls -l.
Como executar:
Torne o script executável:
chmod +x configurar_permissoes.shExecute o script passando o nome do arquivo (sem a extensão):
$ ./configurar_permissoes.sh meu_arquivo
Saída esperada:
Se o nome do arquivo passado for "meu_arquivo", o script criará "meu_arquivo.txt" e configurará as permissões. A saída será algo como:
Arquivo criado: meu_arquivo.txt
-rwxr--r-- 1 usuario usuario 0 jan 20 12:00 meu_arquivo.txtCriando mais de um arquivo
Digamos que você precisa criar mais de uma arquivo por vez. Como você faria isso?
Primeiro temos que pegar todos os argumentos
Depois precisar percorrer cada argumento e criar um arquivo com a extensão
.txt.
Pegar todos os argumentos: $@
Percorrer cada argumento: for...in
Reveja Argumentos e Loops For em Shell Script
#!/bin/bash
# Verifica se foram passados argumentos
# $# Número total de argumentos fornecidos
# -eq Igual
# Se o numero total de argumentos for igual a 0 (zero)
# então imprima essa mensagem
if [ "$#" -eq 0 ]; then
echo "Uso: $0 arquivo1 arquivo2 arquivo3 ..."
exit 1
fi
# Se o numero total de argumentos for maior que 0 (zero)
# execute os proximos passo
# Itera sobre cada argumento
for nome in "$@"; do
# Adiciona a extensão .txt ao nome do arquivo
arquivo="${nome}.txt"
# Cria o arquivo
touch "$arquivo"
# Define as permissões (proprietário: rw-, grupo: r--, outros: r--)
chmod 644 "$arquivo"
# Exibe mensagem de sucesso
echo "Arquivo criado: $arquivo (Permissões: rw-r--r--)"
# Se ainda tiver arquivo começa o loop novamente
done
Lição para casa
E se só pudéssemos criar apenas 3 arquivos por vez, como seria isso?
Além de verificar a quantidade de arquivos menor que 0(zero), você precisa verificar se a quantidade é maior que 3, se for maior imprimir uma mensagem de erro
$ ./meu_script arquivo1 arquivo2 arquivo3 arquivo4
// Saída
Erro: você só pode criar até 3 arquivos de uma vez.E se não quiséssemos parar o programa, como ficaria o script? Por exemplo, o usuário passou 4 argumento
$ ./meu_script arquivo1 arquivo2 arquivo3 arquivo4
// saída
Arquivo criado: arquivo1.txt (Permissões: rw-r--r--)
Arquivo criado: arquivo2.txt (Permissões: rw-r--r--)
Arquivo criado: arquivo3.txt (Permissões: rw-r--r--)
O programa "aceitou" os 4 argumentos mas só gerou 3 arquivos. Como você faria isso?
E se no final exibisse uma mensagem de aviso, informando "Aviso: Apenas os 3 primeiros arquivos foram criados. Ignorando o restante.", como ficaria? Exemplo de saída:
$ ./meu_script arquivo1 arquivo2 arquivo3 arquivo4
// saída
Arquivo criado: arquivo1.txt (Permissões: rw-r--r--)
Arquivo criado: arquivo2.txt (Permissões: rw-r--r--)
Arquivo criado: arquivo3.txt (Permissões: rw-r--r--)
Aviso: Apenas os 3 primeiros arquivos foram criados. Ignorando o restante.Last updated
Was this helpful?