No Linux e Unix em geral, tudo é considerado arquivo, inclusive diretórios, discos, etc., e por isso tudo pode ser mapeado para o sistema de arquivos.
Os dispositivos que são mapeados como arquivos eles são chamados de arquivos de dispositivos. Um exemplo clássico é o /dev/sda
. Um arquivo de dispositivo é um objeto do sistema que oferece uma interface para o dispositivo em si.
O kernel do Linux associa os drivers de dispositivos aos arquivos de dispositivos. Assim podemos acessar os dispositivos como se fossem arquivos.
Os arquivos no Linux possuem uma espécie de abstração para identificação. Essa abstração é chamada de descritor de arquivos. É uma abstração de uma identificação para acessar um arquivo. Para isso temos três descritores, entrada padrão (stdin), saída padrão (stdout) e erro padrão (stderr).
A entrada padrão é um stream (fluxo) para entrada de texto. Por padrão, a entrada padrão é vinculada ao teclado. Também é conhecida como descritor de arquivos 0.
A saída padrão é um stream para saída normal dos programas. Por padrão, a saída padrão é vinculada ao terminal ou janela de terminal (no caso de sistemas com interfaces gráficas). Também é conhecida como descritor de arquivos 1.
O erro padrão é um stream para saída de texto, usado para exibir mensagens de erro. Por padrão também é vinculada ao terminal ou janela do mesmo. Também é conhecida como descritor de arquivos 2.
Com esses dados em mente, podemos utilizar os recursos chamados de pipes. Pros programas, ler os dados de um arquivo armazenado no sistema ou do teclado, dá no mesmo, não há diferença alguma pros programas, assim como escrever no terminal ou dentro de outro arquivo. Ele também pode ler ou enviar dados de ou para outros programas.
O símbolo de pipe é a barra em pé (|). O pipe permite juntar dois comandos, como por exemplo ls -l | less
, nesse caso, a saída do ls, ao invés de ir diretamente pro terminal, ele irá para o comando less, que tratará os dados de outra forma antes de enviá-los ao terminal.
Os pipes podem ser redirecionados para outros comandos sucessivamente. Se forem usados mais de dois comandos com redirecionamentos, damos o nome de pipeline a operação resultante. Por exemplo, redirecionando para a saída de outros comandos:
ls /etc | sort -r | less # Ele listará o diretório /etc, ordenará de forma reversa e mostrará ao poucos com o less
Para redirecionar para um arquivo, usamos o >
, dessa forma:
ls -i > inodes.txt
Na prática, as saídas que são redirecionadas para um arquivo, não são exibidas na saída padrão (terminal), exceto os erros padrão.
O operador > cria arquivos, se já existir ele será sobrescrito. Para não perder o conteúdo do arquivo e adicionar novas linhas, use o operador >>
.
Digite esses comandos:
ls > texto.txt
cat texto.txt
echo "Lista de arquivos do diretório home"
echo "Lista de arquivos do diretório home" > texto.txt # Sobrescrevendo
cat texto.txt
ls > texto.txt # Sobrescrevendo de novo
echo "Lista de arquivos do diretório home" >> texto.txt # Adicionando
Para redirecionamento de entrada, podemos fazer assim:
cat < /etc/group > /tmp/grupos
cat /tmp/grupos
No caso acima, o redirecionamento <
lê a partir de um arquivo (no caso, o /etc/group
Vamos supor esse comando:
ls -zz # A opção -zz não existe, gerará um erro.
ls -zz > erro.txt
Das duas formas, a saída aparecerá na tela. O arquivo erro.txt é gerado, mas ele não escreve no arquivo, porque o operador > redireciona a saída padrão, e não o erro padrão.
Para redirecionar a saída do erro padrão ao arquivo, colocamos o número 2 na frente do operador, dessa forma:
ls -zz 2> erro.txt # O -zz não existe, lembre-se.
Pra mostrar a saída tanto no terminal quanto no arquivo ao mesmo tempo, usamos o comando tee, usando a sintaxe tee opções arquivos
, que são essas:
-a
: Anexa aos arquivos, em vez de sobrescrevê-los.
Veja alguns exemplos de uso:
ls -l | tee saida.txt # Sobrescreverá caso já exista o arquivo saida.txt
ls -i | tee saida.txt | less # Idem acima, mas usará o less para ver aos poucos
As informações de usuários ficam armazenados em vários arquivos de configuração do seu sistema. Os principais arquivos são /etc/passwd
, /etc/group
, /etc/shadow
e /etc/gshadow
.
O arquivo /etc/passwd
contém a lista dos usuários do sistema (não apenas usuários humanos, mas também contas administrativas). Antigamente ele era usado também para arquivo de senhas de usuários, mas hoje em dia elas ficam em outro arquivo, o /etc/shadow
. O arquivo passwd pode ser lido por qualquer um no sistema e pode ser editado com editores de texto (porém, não é recomendado, e sim que se altere usando comandos como o usermod
, localizado em /usr/sbin/usermod
).
Digite o comando cat /etc/passwd
para visualizarmos o arquivo no terminal.
Cada linha é uma conta, cujas informações são divididas por dois pontos (:). Veja por exemplo essa linha:
eu:x:1000:1000:eu,,,:/home/eu:/bin/bash
Os campos são esses:
senha(que não é
x, mas que está no arquivo
/etc/shadow
).Os números de 1 a 999 para UID são reservados para contas de sistema e administrativas. As contas de usuário começam a contar a partir do 1000 (geralmente atribuída ao usuário principal do Linux). O usuário root recebe o UID 0.
O arquivo /etc/group
define os grupos aos quais os usuários do Linux pertencem. Os grupos são usados para aplicar permissões de acesso a recursos do sistema. Também permitem facilitar o gerenciamento e monitoramento de usuários.
Digite no terminal cat /etc/group
para visualizarmos o arquivo.
Cada linha é uma conta, cujas informações são divididas por dois pontos (:). Veja por exemplo essa linha:
eu:x:1000:
Os campos são esses:
senha, geralmente não usada.
O arquivo /etc/gshadow
é onde estão as senhas criptografadas dos grupos. Podemos ver o arquivo digitando sudo cat /etc/gshadow
.
Cada linha é uma conta, cujas informações são divididas por dois pontos (:). Veja por exemplo essa linha:
eu:!::
Os campos são esses:
!, ela indica que os usuários que não são do grupo não podem acessá-la, mas que também não tem senha no mesmo.
Alguns comandos que podemos usar no terminal:
groups usuário
: Permite descobrir de quais grupos um usuário é membro.id opções usuário
: Mostra os IDs de grupos e usuário e os grupos aos quais ele pertence. Algumas opções são -g
(GID do grupo primário do usuário), -G
(todos os GIDs dos grupos do usuário), e -n
(combinado com g ou G, mostra os nomes dos grupos ao invés dos GIDs).Digite esses comandos:
id -g eu
id -G eu
id -nG eu
O arquivo /etc/shadow
contém as senhas criptografadas dos usuários, além de outras informações sobre as contas de usuário. Ele somente é legível pelo usuário root ou outro que tenha permissão para ler o mesmo.
Digite o comando sudo cat /etc/shadow
no terminal.
Cada linha é uma conta, cujas informações são divididas por dois pontos (:). Veja por exemplo essa linha:
syslog:*:17937:0:99999:7:::
Os campos são esses:
!é porque ele não possui senha. Se possuir
*é porque a conta está desativada e não poderá fazer login no sistema. Se possuir um
![senha]é porque a conta tá travada. E se possuir um
!!é porque a senha nunca foi configurada.
PS: A data 01/01/1970 é conhecida como a data Unix, para chegar ao dia exato especificado na conta, faça uma soma do tipo abaixo, na qual colocamos a quantidade de dias reference ao usuário/grupo:
date -d "1970/01/01 + 15748 days"
Usamos o comando useradd
para criar uma conta de usuário do sistema. As opções dele são useradd opções nomedaconta
, que são essas:
-c comentário
: Define o campo comentário (nome, usuário, telefone, etc.).-d diretoriohome
: Define o diretório home do usuário diferente do padrão.-m
: Cria e preenche o diretório home padrão.-s shell
: Define o shell padrão da conta.-e dataexpiração
: Define a data na qual a conta será desabilitada (formato YYYY-MM-DD).-u numeroid
: Define a UID desejada para o usuário (não use uma UID existente).Digite esses comandos:
sudo useradd -m -c "Fulano da Silva" -s /bin/sh fulano # Cria o usuário fulano
cat /etc/passwd # Verifica se o usuário existe
Temos também o adduser
que é um script escrito em Perl que usa o programa useradd para realizar tarefas de criação de usuários, na distros Debian e derivados. Ele pode ser usado para adicionar um usuário a um grupo já existentes.
Digite esse comando que adicionará o usuário beltrano e pedirá dados como senha e etc.:
sudo adduser beltrano
O script adduser fica localizado em /usr/sbin/adduser
.
Para dar permissões de root para um usuário podemos fazer assim:
sudo usermod -aG sudo beltrano
E para deletar um usuário, assim como seu grupo, fazemos assim:
sudo userdel -f beltrano
sudo groupdel beltrano
O comando passwd
é usado para configurar a senha de um usuário, além de algumas opções de conta. A sintaxe é passwd opções username
, que são essas:
-l
: Trava a senha da conta do usuário especificado.-u
: Destrava a senha da conta do usuário especificado.-d
: Exclui a senha do usuário especificado.-e
: Força a expiração da senha do usuário-x dias
: Faz com que a senha funcione apenas por determinados dias.-n dias
: Define a quantidade mínima de dias que o usuário deve aguardar para alterar sua senha.-w dias
: Define a quantidade de dias a partir do qual o usuário começa a receber seu aviso de senha.-S
: Exibe o status da conta.Digite esses comandos:
sudo passwd -S fulano
sudo passwd fulano
O user fulano, criado anteriormente, não tem senha, então podemos criar uma pra ele usando esses comandos:
sudo passwd fulano
sudo passwd -l fulano # Trava a conta
sudo passwd -u fulano # Destrava a conta
O comando gpasswd é usado para administrar grupos do Linux. Ele grava as informações nos arquivos /etc/group
e /etc/shadow
. A sintaxe do comando é gpasswd opções grupo
.
Veja alguns exemplos de comandos:
gpasswd nomedogrupo # Cria ou altera a senha do grupo
gpasswd -a nomedousuario nomedogrupo # Adiciona o usuário ao grupo
gpasswd -d nomedousuario nomedogrupo # Remove o usuário do grupo especificado
gpasswd -A nomedousuario nomedogrupo # Torna o usuário administrador do grupo
Digite esses comandos para adicionar o usuários:
sudo gpasswd -a fulano bluetooth
sudo gpasswd -a fulano scanner
groups fulano
Para remover o usuário:
sudo gpasswd -d fulano bluetooth
Para tornar administrador do grupo:
sudo gpasswd -A fulano scanner
O comando usermod modifica uma conta de usuário existente. A sintaxe dele é usermod opções usuario
.
Essas são as opções:
-u UID
- Altera o UID do usuário para o valor especificado.-s shell
- Define um novo shell para o usuário.-g grupo
- Define alterar o grupo primário do usuário.-G grupo1,grupo2,grupo3
- Torna o usuário membro dos grupos especificados.-c comentário
- Define ou muda o valor do campo comentário.-l login
- Muda o nome da conta do usuário para o login especificado.Digite esses comandos:
cat /etc/passwd
sudo usermod -c "Nome do Usuário" fulano
sudo usermod -u 2000 fulano
groups fulano
sudo usermod -G cdrom,bluetooth,scanner,eu fulano
groups fulano
sudo usermod -l novonome fulano
cat /etc/passwd
mv /home/fulano /home/novonome
O comando chfn altera informações dos usuários. A sintaxe é chfn opcoes usuario
.
Essas são as opções:
-f nomedousuario
-r numerodasala
-w telefonecomercial
-h telefoneresidencial
Digite esses comandos:
cat /etc/passwd
sudo chfn -r 15 fulano
sudo chfn -w 996848865 fulano
sudo chfn -h 964423548 fulano
Para deletar usuários, basta usar o comando userdel, dessa forma, na sintaxe userdel -r nomedousuario
(a opção -r
, opcional, exclui o diretório home do usuário):
sudo userdel -r fulano