O documento discute processos, arquivos de dispositivos, descritores de arquivos padrão, pipes, redirecionamento e comandos para gerenciamento de processos em Linux. É explicado que tudo é tratado como arquivos, incluindo dispositivos, e que pipes e redirecionamento permitem conectar a saída de um programa à entrada de outro.
2. Arquivos de Dispositivos
Em Linux e Unix, tudo são arquivos; drives de
disco, partições, terminais, áudio, etc., são
mapeados para o sistema de arquivos.
Desta forma os programas podem interagir
com muitos dispositivos da mesma maneira.
Esses dispositivos são chamados de arquivos de
dispositivos, que são objetos do sistema que
oferecem uma interface para o dispositivo.
Fábio dos Reis - Bóson Treinamentos
3. Arquivos de Dispositivos
O kernel do Linux associa os drivers de
dispositivos (módulos) aos arquivos de
dispositivos, de modo que os dispositivos
podem ser acessados como se fossem arquivos.
Fábio dos Reis - Bóson Treinamentos
4. Descritores Padrões de Arquivos
É uma abstração de uma identificação para
acessar um arquivo.
Quando um processo quer manipular um
arquivo, ele usa um valor inteiro que é um dos
três descritores de arquivos existentes.
Quando um programa é iniciado, ele recebe
automaticamente os três descritores de
arquivos a seguir:
Fábio dos Reis - Bóson Treinamentos
5. Descritores Padrões de Arquivos
Entrada Padrão (Standard Input, stdin)
Saída Padrão (Standard Output, stdout)
Erro Padrão (Standard Error, stderr)
Fábio dos Reis - Bóson Treinamentos
6. Entrada Padrão
Stream para entrada de texto.
Por padrão, vinculado ao teclado.
Ao digitar em um programa interativo, os
caracteres são enviados para a entrada padrão
É o Descritor de Arquivos 0.
Fábio dos Reis - Bóson Treinamentos
7. Saída Padrão
Stream de Saída de texto para a saída normal
dos programas.
Vinculado por padrão ao terminal ou janela de
terminal.
A saída gerada pelos comandos é escrita na
saída padrão.
É o Descritor de Arquivos 1.
Fábio dos Reis - Bóson Treinamentos
8. Erro Padrão
Stream de saída de texto, usado
exclusivamente para erros ou infos não
relacionadas à saída normal dos comandos.
Vinculado por padrão ao terminal.
Descritor de arquivos 2.
Fábio dos Reis - Bóson Treinamentos
9. Pipes
Para os programas, é a mesma coisa ler dados
a partir de um arquivo ou a partir do teclado.
Idem para escrever em arquivos e terminais.
Desta forma, é possível enviar a saída de um
programa para a entrada de outro.
Para isso usamos um 'pipe', simbolizado por |,
o que nos permite juntar dois ou mais
comandos.
Ex.: ls -l | less
Fábio dos Reis - Bóson Treinamentos
10. Pipes
Podem ser usados em uma série de vários
comandos.
Se forem usados mais de dois comandos, a
operação resultante recebe o nome de
pipeline ou stream de texto.
ls /etc | sort -r | less
Fábio dos Reis - Bóson Treinamentos
11. Redirecionamento
O pipe foi utilizado para redirecionar a saída
de um comando para a entrada de outro.
Podemos também redirecionar a saída para e
de arquivos.
Para isso usamos o operador de
redirecionamento >
ls -i > inodes.txt
Fábio dos Reis - Bóson Treinamentos
12. Redirecionamento
As saídas redirecionadas para um arquivo não
são exibidas na tela, exceto os erros padrão.
O operador > cria arquivos, portanto toda vez
que for usado o arquivo será criado se não
existir, e substituído se não existir.
Para anexar conteúdo a arquivos existentes
use o operador de redirecionamento >>
echo "Essa foi a lista de inodes" >> inodes.txt
Fábio dos Reis - Bóson Treinamentos
13. Redirecionamento
É possível também redirecionar a entrada
padrão, para que os comandos leiam a partir
de um arquivo em vez de a partir do teclado.
Fábio dos Reis - Bóson Treinamentos
14. Exemplos de Redirecionamento
ls -zz 2> erro.txt # Redireciona o erro gerado pela opção
inválida -zz para o arquivo erro.txt (por padrão iria para o terminal)
ls -zz 2>> erro.txt #Anexa o erro gerado a erro.txt.
cat < /etc/group > /tmp/grupos 2> /tmp/erro
# Redireciona a entrada de cat a partir de /etc/group, a saída do
comando para grupos e a saída padrão para erro.
Fábio dos Reis - Bóson Treinamentos
15. Comando tee
Permite enviar a saída de um comando para
um arquivo e para a tela ao mesmo tempo.
Sintaxe:
tee [opções] arquivos
-a Anexa aos arquivos, em vez de
sobrescrevê-los.
ls -l | tee arquivo # Mostra na tela a saída de ls -l e também
a grava em arquivo
ls -l | tee arquivo | less # Mostra na tela a saída de ls -l
paginado por less e também a grava em arquivo
Fábio dos Reis - Bóson Treinamentos
17. Processos
Todo programa rodando no sistema é um
processo.
Um comando, um aplicativo e o próprio Shell
são processos dos sistema.
Todo processo possui atributos e conceitos
associados a ele.
Fábio dos Reis - Bóson Treinamentos
18. Conceitos e Atributos de Processos
Tempo de vida - Extensão de tempo que ele leva
para executar.
PID - Número do ID do processo
UID e GID - IDs do usuário e grupo associados ao
processo.
Processo-pai - Processo que criou um outro
processo.
PPID - Número do ID do processo-pai
Diretório de Trabalho Atual - Diretório padrão
associado ao processo.
Fábio dos Reis - Bóson Treinamentos
20. Comando ps
Gera um instantâneo dos processos atuais no
terminal.
Sintaxe:
ps [opções]
-a Mostra processos de propriedade de outros usuários e vinculados a um terminal
-l Formato longo, incluindo prioridade, PPID, etc.
-u Formato de usuário, com nomes de usuário e hora de início dos processos
-x Inclui processos sem terminal de controle (daemons, etc.)
-U usuário Exibe processos de propriedade do usuário.
Fábio dos Reis - Bóson Treinamentos
21. Exemplos do comando ps
ps Gera uma lista de processos de sua
propriedade e vinculados a seu terminal
ps -aux Inclui processos de outros usuários,
não-vinculados a um terminal e no modo
usuário.
ps -U mario Exibe os processos do usuário
mario.
Fábio dos Reis - Bóson Treinamentos
22. Comando pstree
Exibe uma lista hierárquica de processos no
formato de árvore.
pstree [opções]
pstree -p Inclui PIDs na saída
pstree 100 Exibe a subárvore de processos sob
o processo de PID 100
Fábio dos Reis - Bóson Treinamentos
23. Sinais de Processos
Os sinais são meios usados para que os
processos possam se comunicar e para que o
sistema possa interferir em seu
funcionamento.
Quando um processo recebe um determinado
sinal e conta com instruções sobre o que fazer
com ele, tal ação é colocada em prática.
Se não houver instruções pré-programadas, o
próprio Linux pode executar a ação de acordo
com suas rotinas.
Fábio dos Reis - Bóson Treinamentos
24. Lista de Sinais
STOP - esse sinal tem a função de interromper a execução
de um processo e só reativá-lo após o recebimento do sinal
CONT;
CONT - esse sinal tem a função de instruir a execução de um
processo após este ter sido interrompido;
SEGV - esse sinal informa erros de endereços de memória;
TERM - esse sinal tem a função de terminar completamente
o processo, ou seja, este deixa de existir após a finalização;
ILL - esse sinal informa erros de instrução ilegal, por
exemplo, quando ocorre divisão por zero;
KILL - esse sinal tem a função de "matar" um processo e é
usado em momentos de criticidade (cód. 9).
Fábio dos Reis - Bóson Treinamentos
25. Comando kill
Permite enviar sinais a um processo.
Sintaxe:
kill [sinal] PID
Fábio dos Reis - Bóson Treinamentos
26. Comando kill - Exemplos
Suponha que você deseja interromper
temporariamente a execução do processo de PID
4220. Para isso, use o comando:
kill -STOP 4220
Para que o processo 4220 volte a ser executado,
basta usar o comando:
kill -CONT 4220
Para "matar" um processo, use:
kill -9 [PID]
Fábio dos Reis - Bóson Treinamentos