Buscar

Shell Script Salviano

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 164 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 164 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 164 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Salviano A. Leão – 1
Linux, Comandos Básico
Prof. Dr. Salviano A. Leão
3 de dezembro de 2014
Sumário
Salviano A. Leão – 2
☞ Linux: comandos básicos
☞ Bash e ferramentas
☞ Construção e análise de alguns scripts
Referências para os comandos básicos
Salviano A. Leão – 3
☞
http://www.guiaubuntupt.org/wiki/index.php?title=Comandos_basicos#colu
☞
http://www.planetarium.com.br/planetarium/noticias/2004/2/1076629936
☞ http://wiki.ubuntu-br.org/ComandosBasicos
☞ http://www.infowester.com/comandoslinux.php
☞ http://www.mtm.ufsc.br/~krukoski/pub/linux/focalinux2/ch-cmdv.htm
☞ http://pt.wikipedia.org/wiki/Guia_de_comandos_para_Linux/Unix
☞
http://www.vivaolinux.com.br/artigo/Fundamentos-do-sistema-Linux-coma
☞ http://focalinux.cipsga.org.br/
Referências para Shell-script
Salviano A. Leão – 4
☞ Júlio Cezar Neves: http://br.gnome.org/TWikiBar/TWikiBarPapo001
☞ Aurélio Marinho Jargas: http://aurelio.net/shell/
☞ wikipedia: http://pt.wikipedia.org/wiki/Shell_script
☞ Shell Script: http://www.inf.ufpr.br/afms03/shell.html
☞ Shell Script 4 All: http://shellscript4all.blogspot.com/
☞ Advanced Bash-Sripting Guide: http://tldp.org/LDP/abs/html/
☞ Bash by examples:
http://www.ibm.com/developerworks/linux/library/l-bash.html
☞ Shelldorado: http://www.shelldorado.com/
Livros recomendados
Salviano A. Leão – 5
☞ Julio Cezar Neves, Programação Shell Linux, Editora Brasport 9a¯ edição (2013)
☞ Aurélio Marinho Jargas, Shell Script Profissional, editora Novatec (2008).
☞ Aurélio Marinho Jargas, Expressões Regulares – Uma abordagem divertida,
editora Novatec 3a¯ edição(2009).
☞ João Eriberto Mota Filho, Descobrindo o Linux – Entenda o sistema
operacional GNU/Linux, editora Novatec 3a¯ edição(2012).
☞ Carl Albing, JP Vossen, and Cameron Newham, Bash Cookbook, O’Reilly First
Edition (2007).
☞ Eric Foster-Johnson, John C. Welsh and Micah Anderson, Beginning Shell
Scripting, Wiley Publishing Inc. (2005).
☞ Dale Dougherrty and Arnold Robbins, Sed & awk, O’Reilly Second Edition (1997).
☞ Jeffrey E.F. Friedl, Mastering Regular Expressions, O’Reilly Third Edition (2006).
Obtendo ajuda
Salviano A. Leão – 6
help Mostra informações gerais sobre os comandos intrínsecos do Shell;
man Mostra toda a informação a respeito de um comando;
info Mostra documentação no formato próprio do info;
apropos Pesquisa na páginas do man nomes e descrições que se encaixam o
comando buscado;
whatis Procura nomes na páginas do man e mostra na tela as páginas de descrição
de qualquer nome que se assemelha;
catman Constrói o banco de dados que o apropos faz uso.
Em geral os comandos GNU/Linux fornecem uma pequena descrição sobre o
comando ao digitarmos o comando com a opção --help:
# comando --help
A sintaxe geral dos comandos linux é:
# comando [opcao ... ] [ expressao ] [ arquivo ... ]
man pages - Manual de Referências
Salviano A. Leão – 7
Estrutura das Páginas do man
1. Comandos do usuário
Comandos que podem ser executados a
partir do shell
2. Chamadas do sistema
Funções que devem ser executadas pelo
kernel
3. Biblioteca de funções
Funções internas das bibliotecas, princi-
palmente as da libc
4. Formato de arquivos especiais
Driver e hardware, principalmente os en-
contrados em /dev
5. Arquivos de configuração
Formato de arquivos e convenções, por
exemplo /etc/passwd
6. Jogos e demonstrações Jogos
7. Pacotes de macros e convenções
Sistemas de arquivos, protocolos de rede,
códigos ASCII e outros
8. Comandos de administração do sis-
tema
Comandos que em geral só o root pode
executar
9. Rotinas do Kernel Não é padrão
Comandos básicos usuário: qualquer
Salviano A. Leão – 8
chage user Muda as informações de expiração da senha do usuário user;
chfn user Muda o nome real do usuário user e suas informações;
crontab Mantém individualmente as tarefas agendadas para cada usuário;
finger user Mostra informações sobre o usuário user;
id Mostra as identificações do reais e efetivas dos usuários e grupos;
last Mostras as conexões mais recentes do usuário;
lastlog Mostra a última conexão dos usuários do sistema;
logname Mostra o nome de login do usuário;
passwd user Troca senha do usuário user;
uptime Mostra a quantas horas seu computador está ligado;
w Mostra os usuários conectados atualmente no computador;
who Mostra quem está usando o sistema.
whoami Mostra o nome de login do usuário. O mesmo que id -un.
Comandos básicos do sistema
Salviano A. Leão – 9
exit Sair do terminal;
halt Desligar o sistema;
logout Sair do terminal;
reboot Reinicia o computador;
shutdown Desliga ou reinicia o computador. Há algumas opções para esse
comando, veja por exemplo:
shutdown -r now Reinicia o computador;
shutdown -h now Desliga o computador;
halt Desliga o computador.
O parâmetro now pode ser mudado. Por exemplo: digite
# shutdown -r +10
e o sistema irá reiniciar daqui a 10 minutos;
Comandos básicos usuário: superusuário
Salviano A. Leão – 10
O usuário comun pode usar, entretanto ele deve possuir permissões:
su Muda a identificação do usuário ou torna-se o superusuário, o root;
sudo Executa um comando com um outro usuário;
Somente o superusuário pode executar:
addgroup Adiciona usuários e grupos ao sistema, de acordo com as opções;
adduser Adiciona usuários e grupos ao sistema, de acordo com as opções;
delgroup Remove um usuário ou grupo do sistema;
deluser Remove um usuário ou grupo do sistema;
lastb Mostra lista dos últimos usuários conectados no sistema;
useradd Cria um novo usuário ou adapta as informações de um usuário;
userdel Apaga todos os arquivos relacionados ao usuário;
usermod Modifica as informações do sistema relativas ao usuário;
O Comando history
Salviano A. Leão – 11
Ele mostra os últimos 1000 comandos executados na linha de comando na conta
corrente. O comando history -c apaga história dos últimos comando digitados;
Designador de eventos – ele refere-se a uma linha da lista do history
!n Refere-se a n-ésima linha de comando da lista;
!-n Refere-se a corrente linha de comando menos n;
!! Refere-se ao comando prévio;
!texto Refere-se ao mais recente comando que inicia com texto;
!?texto[? ] Refere-se ao mais recente comando contendo texto;
^texto1^texto2^ Repita o último comando trocando texto1 por texto2;
Estrutura de Arquivos do Linux
Salviano A. Leão – 12
/
|-- bin
|-- boot
|-- dev
|-- etc
|-- home
| -- salviano
|-- lib
|-- media
|-- mnt
|-- proc
|-- root
|-- sbin
|-- sys
|-- tmp
|-- usr
|-- var
|-- usr
| |-- bin
| |-- games
| |-- include
| |-- lib
| |-- lib32
| |-- lib64 -> lib
| |-- local
| |-- sbin
| |-- share
| ‘-- src
Conteúdo dos diretórios
Salviano A. Leão – 13
Diretório Tipos de arquivos
/bin Principais utilitários do sistema.
/boot
Contém os arquivos e a imagem do kernel necessários para a inicili-
zação do sitema.
/dev Arquivos especiais dos dispositivos do sistema.
/etc Arquivos de configuração do sistema.
/home Local onde ficam os diretórios dos usuários com contas no sistema.
/lib
Bibliotecas de funções administrativas do sistema além dos módulos
do kernel.
/media
Em geral onde são montados os dispositivos removíveis, por exemplo
os pendrives, CDs e DVD, etc.
/proc Arquivos com informações sobre o hardware.
/root diretório padrão do superusuário, o root.
/sbin
Comando de manutenção do sistema, em geral só o superusuário
pode executar.
/tmp arquivos temporários do sistema
Conteúdo dos diretórios
Salviano A. Leão – 14
Diretório Tipos de arquivos
/usr Encontram os utilitários, documentação, bibliotecas, etc.
/usr/bin Utilitários que o usuário tem permissão paraexecutar.
/usr/games Jogos.
/usr/include Cabeçalhos das bibliotecas.
/usr/lib Bibliotecas.
/usr/local Usado por programas específicos do usuário.
/usr/local/bin Os programas executáveis específicos do usuário.
/usr/local/lib As bibliotecas dos programas específicos do usuário.
/usr/sbin
Utilitários do sistema que o superusuário tem permissão para execu-
tar.
/usr/share Local onde encontra-se a documentação, icones, etc.
/usr/src Aqui encontra-se o código fonte do kernel quando ele é instalado.
/var
Onde o sistema guarda os relatórios, os arquivos de log, e os arquivos
de impressão, de email, de download instalação do siste, etc.
Informações sobre as partições
Salviano A. Leão – 15
fdisk Mostra informações sobre as partições e também edita as partições do
sistema. As informações são obtidas melhor pelo comando:
phonon:~/Seminarios/XXVIISF > sudo fdisk -l /dev/sda
Disco /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador do disco: 0x20000000
Dispositivo Boot Início Fim Blocos Id Sistema
/dev/sda1 1 10 80293+ de Utilitário Dell
/dev/sda2 * 11 1202 9566208 7 HPFS ou NTFS
/dev/sda3 1202 7575 51197266 7 HPFS ou NTFS
/dev/sda4 7576 38913 251722454 5 Estendida
/dev/sda5 7576 13312 46082421 83 Linux
/dev/sda6 13313 38403 201543426 83 Linux
/dev/sda7 38404 38913 4096543+ 82 Linux swap / Solaris
Informações sobre o uso do sistema de arquivos
Salviano A. Leão – 16
df Mostra informações dos discos de todos os sistemas de arquivos. Há algumas
opções interessantes:
df -h Mostra as informações num formato mais legível;
Sist. Arq. Tam Usad Disp Uso% Montado em
/dev/sda5 44G 12G 30G 28% /
none 1,9G 324K 1,9G 1% /dev
none 1,9G 188K 1,9G 1% /dev/shm
none 1,9G 92K 1,9G 1% /var/run
none 1,9G 0 1,9G 0% /var/lock
none 1,9G 0 1,9G 0% /lib/init/rw
/dev/sda6 190G 74G 107G 41% /home
/dev/sda3 49G 21G 29G 42% /windows
free Mostra o uso da memória do computador, inclusive do swap. As opções -b, -k,
-m, -g mostra o resultado respectivamente em unidades de bytes, KB, MB, ou GB.
Informações sobre o uso do disco
Salviano A. Leão – 17
du Mostra o uso detalhado de disco no diretório corrente e em seus subdiretórios.
Há diversas opções:
du -h Mostra informações em formato legível.
du -s Mostra de forma sintética o uso do disco.
du -sh Mostra de forma sintética o uso do disco em formato legível.
du -ah Mostra também o tamanho dos arquivos, tudo em formato legível.
du –max-depth=n -ah Mostra também o tamanho dos arquivos, tudo em formato
legível, porém só vai até n níveis de profundidade de subdiretórios.
Variáveis de ambiente e atalhos
Salviano A. Leão – 18
As variáveis definidas pelo sistema para cada usuário são obtidas com o comando env
ou printenv
# env
# printenv
Ele fornece todas as variáveis de ambiente usadas pelo usuário. Os arquivos de
configuração da área do usuário são:
Arquivo Conteúdo
.bashrc
Sempre que se entra no sistema esse é o primeiro arquivo
a ser rodado. Nele encontra-se a definção do formato do
prompt, o PATH do usuário, suas definições, etc.
.bash_aliases Aqui o usuário defini os seus atalhos.
Arquivo .bashrc
Salviano A. Leão – 19
# .bashrc
# Ajusta PATH para incluir o diretório bin específico do usuário se existir
if [ -d ~/bin ] ; then
PATH=${HOME}/bin:/${HOME}/bin/fx:${PATH}
fi
# Não duplique as linhas do history
export HISTCONTROL="ignorespace:ignoredups"
export HISTIGNORE="&:ls:[bf]g:exit: [ \t]*:ps:cd"
# Definindo algumas variavies do sistema
export BROWSER="/usr/bin/firefox"
export JAVA_HOME="/usr/lib/jvm/java-6-sun/"
# Para obter um prompt colorido
if [ "$USER" = root ]
then
PS1=’${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\h\[\033[00m\]:\[\033[01;33m\]\w > \[\033[00m\]’
else
PS1=’${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\h\[\033[00m\]:\[\033[01;33m\]\w > \[\033[00m\]’
fi
# Habilite a característica de completar um comando.
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
# >>>>>>>>>>>>>>> Definições de atalhos <<<<<<<<<<<<<<<<<<<<<
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# Mensagens de boas vindas ao conetar
clear
echo -ne "Hoje é: "; date +%d/%m/%y
cal
echo -ne "Você está logado há: " ; uptime | awk /’up/ {print $3, $4}’
echo
fortune
Arquivo .bash_aliases
Salviano A. Leão – 20
# Habilite o suporte a cores do ls e também adicione alguns atalhos
if [ "$TERM" != "dumb" ]; then
eval "‘dircolors -b‘" # gera o código para definir LS_COLORS p/ o bash
alias ls=’ls --color=auto -hsCF’
alias dir=’ls --color=auto --format=vertical’
alias vdir=’ls --color=auto --format=long’
fi
# Mais alguns atalhos
alias l="ls" # Listagem clássica
alias ll="ls -l" # Listagem detalhada
alias lsa=’ls -a’ # Listar tudo
alias lsd="ls -d */" # Listar só diretórios
alias la=’ls -ACF’ # Listar tudo, formatando a saída
alias l=’ls -ahlsCF’ # List tudo, formatando a saída em colunas
alias cd..="cd .." # Erro comun de digitação
alias cp="cp -i" # Sempre pede confirmação ao copiar um arquivo
alias mv="mv -i" # Sempre pede confirmação ao mover um arquivo
alias rm="rm -i" # Sempre pede confirmação ao apagar um arquivo
# Mostra o tamanho de um diretório em formato legível.
alias du=’du -h’
# Mostra informações das partições em formato legível.
alias df=’df -h’
alias gnuplot="rlwrap -a -c gnuplot"
#Definindo uma função
acha_pac() # Procura por arquivos do LaTeX
{
find /usr/share/texmf/tex/latex/ -type f -name $1\* -print
find /usr/share/texmf-texlive/tex/latex/ -type f -name $1\* -print
find /usr/share/doc/ -type f -name $1\* -print
find /etc/texmf/ -type f -name $1\* -print
}
Listando arquivos e diretórios com o ls
Salviano A. Leão – 21
Há inúmeras opções para esse comando, entre as mais utéis estão
-C Lista arquivos em colunas, ordenados verticalmente.
-F Sufixa o nome dos diretórios com ’/’, e dos executáveis com ’*’.
-R Lista os diretórios encontrados, recursivamente.
-a Lista todos os arquivos, incluindo os arquivos ocultos.
-c Usa o tempo de alteração para ordenar.
-d Lista diretórios e arquivos no mesmo formato.
-l Lista todas as informações do arquivo em uma coluna.
-r Inverte a ordem do ordenação.
-t Ordena a exibição pelo rótulo de tempo.
-u Usa o tempo do último acesso para ordenar.
-1 Lista somente o nome dos arquivos em coluna simples.
Uma opções úteis do ls para programação shell
Salviano A. Leão – 22
-b, - -escape, - -quoting-style=escape Coloca aspas em nomes de arquivos com
caracteres não gráficos usando seqüencia de barra invertida alfabética e octal como
usado em C. Esta opção é como a opção -Q exceto que os nome de arquivos não
são colocados entre duas aspas.
-B, - -ignore-backups Não lista arquivos que terminam com ’ ’, a menos que sejam
fornecidos na linha de comando.
-Q, - -quote-name, - -quoting-style=c Confina o nome do arquivo em aspas duplas
e os caracteres não gráficos entre aspas como no C.
- -full-time Lista o tempo completo, em detrimento a abreviação padrão. O formato é
como no padrão date(1) ; não é possível alterar isto, mas você pode extrair a cadeia
de caracteres da data com cut(1) e passar o resultado para ’date -d’.
- -show-control-chars Imprime caracteres não gráficos como no nome do arquivo.
Isto é o padrão a menos que a saída seja um terminal e o programa seja ls.
Uma opções úteis do ls para programação shell
Salviano A. Leão – 23
- -quoting-style=word Usa o estilo word para colocar aspas nos nomes da saída. A
word pode ser uma das seguintes:
literal Saída de nomes como é. Isto é o comportamento padrão de ls.shell Colocar aspas nos nomes para o interpretador de comandos se eles contém
meta caracteres do interpretador de comandos ou que causaria saída ambígua.
shell-always Coloca aspas nos nomes para o interpretador de comandos, mesmo
se eles normalmente não requereriam aspas.
c Coloca aspas nos nomes como nas cadeias de caracteres da linguagem C; isto
é igual a opção -Q.
escape Coloca aspas como o c exceto que omite as aspas duplas ao redor; isto é
igual a opção -b.
Um valor padrão para esta opção pode ser especificada com a variável de
ambiente QUOTING_STYLE.
Informações sobre o sistema
Salviano A. Leão – 24
dmesg Mostra as mensagens da inicialização (os log) do sistema;
hostname Mostra o nome da máquina que se está conectado (o host local);
uname Mostra informações sobre o sistema.
-a Mostra todas as informações;
-o Mostra o sistema operacional;
-p Mostra o tipo do processador
-s Mostra o nome do kernel usado.
lshw Lista o hardware da máquina. Opções
-X Lança uma interface gráfica;
-short Retorna informações em formato mais compacto;
ifconfig Mostra as interfaces de redes ativas e as informações relacionadas a cada
uma delas.
Comandos de informações do sistema
Salviano A. Leão – 25
basename Mostra o NOME sem quaisquer componentes iniciais de diretório. Se for
especificado, remove também o SUFIXO final.
dirname Mostra só o diretório.
whereis Mostra onde se encontra determinado arquivo (binários), fonte e páginas de
manual ou simplesmente um comando. Algumas opções são:
-b Procure somente binários;
-m Procure somente nas páginas de manual;
-s Procure somente por códigos fontes;
which Mostra qual arquivo binário está sendo chamado pelo shell quando chamado
via linha de comando. Opções
Manipulando arquivos e diretórios
Salviano A. Leão – 26
pwd Mostra o diretório corrente;
cd Muda de diretório;
cd Vai para o diretório raiz do usuário ($HOME);
cd .. Volta um diretório anterior;
cd - Volta para o último diretório;
cp Cópia um arquivo e/ou diretório. As opções são:
-i Modo iterativo, pedindo confirmação para todas as ações;
-f Força cópia, sobrescrevendo o arquivo alvo caso necessário;
-p Preserva as permissões na cópia;
-r ou -R Cópia recursivamente através dos subdiretórios;
Removendo e Movendo/Renomeando arquivos
Salviano A. Leão – 27
mv Move e/ou renomeia um arquivo e/ou diretório;
-i Modo iterativo, pedindo confirmação para todas as ações;
-f Força, e ignora a opção -i;
-r ou -R Vai recursivamente através dos subdiretórios;
rm Apaga um arquivo e/ou diretório;
-i Modo iterativo, pedindo confirmação para todas as ações;
-f Força a remoção, e ignora a opção -i;
-r ou -R Remove recursivamente através dos subdiretórios;
Manipulando diretórios
Salviano A. Leão – 28
☞ O comando
mkdir [opcoes] [novo -diretorio]
cria o diretório novo-diretorio. Aqui as opções podem ser:
-m Especifica as permissões que do novo diretório terá;
-p Cria todos os diretórios e subdiretórios necessários;
-v Exibe uma mensagem para cada diretório criado.
Manipulando diretórios
Salviano A. Leão – 29
☞ O comando
rmdir [opcoes] [diretorio]
apaga o diretório diretório. Aqui as opções podem ser:
-p Remove os diretórios-pai do diretório selecionado, se possível. Assim, o
comando rmdir -p a/b/c/ vai apagar o diretório a/b/c/, depois o diretório
a/b/ e por fim o diretório a/, se possível;
-v Mostra os detalhes da remoção dos diretórios.
Podem ser especificados mais de um diretório por vez. O rmdir só remove
diretório vazios.
Inodes
Salviano A. Leão – 30
• O inode é uma estrutura que contém as informações básicas sobre seus arquivos
e pastas, como permissões de acesso, identificação dos donos dos arquivos, data
e hora do último acesso e alterações, tamanho e os ponteiros para o arquivo em si.
• De modo geral, o inode é a identidade de um arquivo ou diretório, é uma
identificação única para ele.
• O kernel inicia a leitura qualquer arquivo ou diretório primeiramente pelo inode
do arquivo para em seguida ler o arquivo ou diretório. Ao ler essa estrutura, são
checadas as permissões e nos casos em que ela é negada ao usuário o kernel
retorna a mensagem de “Permission denied”, caso contrário o procedimento segue
normalmente.
• Para visualizar os inodes dos seus arquivos, use o parâmetro -i no comando ls
para ver os inodes de cada um.
Ligações simbólicas comando: ln
Salviano A. Leão – 31
O comando
ln [opcoes] [origem] [link]
cria uma ligação simbólica entre arquivos e/ou diretórios. Aqui
origem Diretório ou arquivo de onde será feito o link.
link Nome do link que será criado.
enquanto as opções são
-f Remove o arquivo de destino existente.
-s Cria um link simbólico. Usado para criar ligações com o arquivo/diretório de
destino.
-v Mostra o nome de cada arquivo antes de fazer o link.
-d ou -F Cria um link físico (hard link) para diretórios. Somente o root pode usar
esta opção.
Tipos de links
Salviano A. Leão – 32
Há dois tipos de links: os simbólicos e os físicos.
• O link simbólico cria um arquivo especial no disco (do tipo link) que tem
como conteúdo o caminho para chegar até o arquivo alvo.
• O link físico faz referência ao mesmo inode do arquivo original, assim ele é
perfeitamente idêntico, inclusive nas permissões de acesso, ao arquivo original.
$ ls -i /etc/passwd
1576306 4,0K /etc/passwd
$ stat /etc/passwd
File: ‘/etc/passwd’
Size: 1841 Blocks: 8 IO Block: 4096 arquivo comum
Device: 805h/2053d Inode: 1576306 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2010-06-06 11:17:01.501942274 -0300
Modify: 2010-05-25 15:05:36.710615705 -0300
Change: 2010-05-25 15:05:36.743892352 -0300
Ao contrário dos links simbólicos, não é possível fazer um link físico para
um diretório ou fazer referência a arquivos que estejam em partições diferentes.
Notas sobre o link
Salviano A. Leão – 33
Deve-se notar que ao usar:
• o comando rm com um link, somente o link será removido.
• o comando cp com um link, o arquivo original será copiado ao invés do link.
• o comando mv com um link, a modificação será feita no link.
• um comando de visualização (como o cat), o arquivo original será visualizado.
Exemplos:
$ ln -s /home/salviano/file1 /home/salviano/tmp/file1
Cria o link /home/salviano/tmp/file1 para o arquivo /home/salviano/file1
$ ln -s /home/salviano/cursos/QM /home/salviano/dropbox/QM
Cria um link /home/salviano/dropbox/QM para o diretório /home/salviano/cursos/QM.
Comando diff
Salviano A. Leão – 34
Compara dois arquivos e mostra as diferenças entre eles. Ele só é usado para
comparar arquivos em formato de texto. As diferenças entre dois arquivos podem ser
redirecionadas para um terceiro arquivo o qual poderá ser usado pelo comando patch
para aplicar as alterações em um arquivo que não contém as diferenças. A sintaxe do
comando é
diff [diretorio1/arquivo1] [diretorio2/arquivo2] [opcoes]
na qual diretório1/arquivo1 e diretório2/arquivo2 são os arquivos ou diretórios que
serão comparados. Já as opções podem ser:
-a Compara os dois arquivos como arquivos texto.
-b Ignora espaços em branco como diferenças.
-B Ignora linhas em branco inseridas ou apagadas nos arquivos.
- -brief Relata somente as diferenças entre os arquivos, e não os detalhes destas
diferenças.
Opções do diff
Salviano A. Leão – 35
-i Ignora diferenças entre maiúsculas e minúsculas nos arquivos.
-H Usa análise heurística para verificar os arquivos.
-N Em uma comparação de diretórios, se o arquivo apenas existe em um diretório,
trata-o como presente mas vazio no outro diretório.
-P Em uma comparação de diretórios, se o arquivos apenas existe no segundo
diretório, trata-o como presente mas vazio no primeiro diretório.
-q Mostra somentese os dois arquivos possuem diferenças. Não mostra as
diferenças entre eles.
-r Compara diretórios e sub-diretórios existentes.
-S NOME Inicia a comparação de diretórios pelo arquivo NOME. É útil quando
cancelamos uma comparação.
-t Aumenta a tabulação das diferenças encontradas.
-u Usa o formato de comparação unificado.
Notas sobre o diff
Salviano A. Leão – 36
• Use o comando zdiff para comparar diretamente arquivos compactados pelo
utilitário gzip;
• Use o comando sdiff para visualizar as linhas diferentes entre os dois arquivos em
formato texto simples.
• Caso seja necessário comparar até três arquivos use o diff3.
Exemplos do diff
Salviano A. Leão – 37
$ diff texto.txt texto1.txt
Compara o arquivo texto.txt com texto1.txt e exibe suas diferenças na tela.
$ diff -Bu texto.txt texto1.txt
Compara o arquivo texto.txt com texto1.txt ignorando linhas em branco diferentes entre
os dois arquivos e usando o formato unificado.
diff texto.txt texto1.txt > texto.diff
Compara o arquivo texto.txt com texto1.txt e gera um arquivo chamado texto.diff
contendo a diferença entre eles. Este arquivo poderá ser usado pelo patch para aplicar
as diferenças existente entre os dois no arquivo texto.txt.
diff -r /usr/src/linux -2.6.30 /usr/src/linux -2.6.32 > patch -2.6.32.di
Compara o diretório e sub-diretórios linux-2.6.30/ e linux-2.6.32/ e grava as diferenças
entre eles no arquivo patch-2.6.32.diff.
Comando patch
Salviano A. Leão – 38
Atualiza arquivos texto através das diferenças geradas pelo comando diff. A sua
sintaxe é
patch [opcoes] [arqv.diff] ou patch [opcoes] < [arqv.diff]
na qual o arqv.diff é o arquivo contendo as diferenças geradas pelo comando diff e as
algumas da opções do comando são:
-p N Aqui N é o nível do diretório onde o patch será aplicado, se for igual a 0, o patch
assume que os arquivos que serão atualizados estão no diretório atual, se 1,
assume que os arquivos que serão atualizado estão no diretório acima (..), se 2, 2
diretórios acima e assim por diante.
-b Cria cópias de segurança dos arquivos originais ao aplica o patch.
-binary Lê e grava arquivo usando modo binário.
-d DIR Muda para o diretório [dir] antes de aplica o patch.
-E Remove arquivos vazios após a aplicação do patch.
Notas sobre o pach
Salviano A. Leão – 39
-n Interpreta o arquivo de patch como um .diff normal.
-N Não desfaz patches já aplicados.
-s Não mostra mensagens de erro.
-u Interpreta o patch em formato unificado.
As diferenças são aplicadas em arquivos originais gerados pelo comando diff. É
importante entender os comandos patch e diff pois são comandos muito utilizados
para desenvolvimento feito por equipes de pessoas.
Exemplo:
patch -p0 < texto.diff
Aplica as diferenças contidas no arquivo texto.diff nos arquivos originais.
patch -p0 texto.txt texto.diff
Aplica as diferenças contidas no arquivo texto.diff nos arquivos originais. Faz a mesma
coisa que o comando anterior.
Comando grep
Salviano A. Leão – 40
A familia de comandos grep, egrep, fgrep, rgrep, faz uma busca em um texto por um
padrão e retorna as linhas do texto que contém o padrão procurado. Sua sintaxe é a
seguinte
grep [OPTIONS] PADRAO [ARQUIVO...]
grep [OPTIONS] [-e PATTERN | -f ARQUIVO] [ARQUIVO...]
O comando
• egrep é o mesmo que grep -E.
• fgrep é o mesmo que grep -F.
• rgrep é o mesmo que grep -r.
Opçoes do tipo de pesquisa:
-E Interpreta o PADRAO como uma expressão regular extendida.
-F Interpreta o PADRAO como uma lista de palavras fixas, separdas por uma nova
linha, sendo que qualquer uma delas pode ocorrer.
-G Interpreta o PADRAO como uma expressão regular básica.
Algumas opções do grep
Salviano A. Leão – 41
-e PADRAO use o PADRAO como o padrão da busca. Este pode ser usado para especificar
multiplos padrões de busca.
-f ARQV obtém o padrão do arquivo ARQV, um por linha.
-i Ignora a diferença entre maiúsculas e minúsculas.
-v Mostra as linhas que não casam com o padrão.
-r Varre subdiretórios também.
-qs Não mostra as linhas nem erros (usar como teste).
-n Mostra também o número da linha
-m NMAX Pare a busca a encontrar NMAX linhas.
-c Conta o número de linhas encontradas.
-l Mostra apenas o nome o arquivo que casou.
-w O padrão é uma palavra inteira e não parte dela.
-x O padrão é uma linha inteira e não parte dela.
-A N Mostre N linhas de contexto depois do padrão.
-B N Mostre N linhas de contexto antes do padrão.
-C N Mostre N linhas de contexto antes e depois do padrão.
Uso simples do comando grep
Salviano A. Leão – 42
$ grep -i "SALviano" /etc/passwd
salviano:x:1000:1000:Salviano de Araujo Leão,,,:/home/salviano:/bin/bash
$ grep -i "SALviano" /etc/passwd /etc/group
/etc/passwd:salviano:x:1000:1000:Salviano de Araujo Leão,,,:/home/salviano:/bin/bash
/etc/group:adm:x:4:salviano
/etc/group:dialout:x:20:salviano
/etc/group:cdrom:x:24:salviano
/etc/group:plugdev:x:46:salviano
/etc/group:lpadmin:x:105:salviano
/etc/group:admin:x:115:salviano
/etc/group:salviano:x:1000:
$ grep -i "SALviano" /etc/*
grep: /etc/at.deny: Permissão negada
grep: /etc/fuse.conf: Permissão negada
/etc/group:adm:x:4:salviano
/etc/group:dialout:x:20:salviano
/etc/group:cdrom:x:24:salviano
/etc/group:plugdev:x:46:salviano
/etc/group:lpadmin:x:105:salviano
/etc/group:admin:x:115:salviano
/etc/group:salviano:x:1000:
/etc/group:sambashare:x:122:salviano
grep: /etc/gshadow: Permissão negada
/etc/mtab:gvfs-fuse-daemon /home/salviano/.gvfs fuse.gvfs-fuse-daemon rw,nosuid,nodev,user=salv
grep: /etc/mtab.fuselock: Permissão negada
/etc/passwd:salviano:x:1000:1000:Salviano de Araujo Leão,,,:/home/salviano:/bin/bash
grep: /etc/shadow: Permissão negada
Expressões Regulares
Salviano A. Leão – 43
Lista dos Principais Metacaracteres
Expressão Regular básica ^ $ . * [ \? \+ \| \( \) \{ \}
Expressão Regular estendida ^ $ . * [ ? + | ( ) { }
Metacaractere Nome Metacaractere Nome
. Ponto ^ Circunflexo
[] Lista $ Cifrão
[^ ] Lista negada \b Borda
? Opcional \ Escape
* Asterisco | Ou
+ Mais () Grupo
{} Chaves \1 Retrovisor
Exemplos de representantes
Salviano A. Leão – 44
Metacaractere Nome Função
. Ponto Um caractere qualquer
[] Lista Lista de caracteres permitidos
[^ ] Lista negada Lista de caracteres proibidos
$ grep -e "sy.:" /etc/passwd
sys:x:3:3:sys:/dev:/bin/sh
$ grep -ne "sy.:" /etc/passwd
4:sys:x:3:3:sys:/dev:/bin/sh
$ grep -e "sy[sn]" /etc/passwd
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
syslog:x:101:103::/home/syslog:/bin/false
hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
Exemplos de quantificadores
Salviano A. Leão – 45
Metacaractere Nome Função
? Opcional Zero ou um
* Asterisco Zero, um ou mais
+ Mais Um ou mais
{n,m} Chaves De n até m
$ grep -E "sys:?" /etc/passwd
sys:x:3:3:sys:/dev:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
$ grep -E "sys:+" /etc/passwd
sys:x:3:3:sys:/dev:/bin/sh
Exemplos de âncoras
Salviano A. Leão – 46
Metacaractere Nome Função
^ Circunflexo Início da linha
$ Cifrão Fim da linha
\b Borda Início ou fim da palavra
$ grep -E "^[sS]" /etc/passwd
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
syslog:x:101:103::/home/syslog:/bin/false
speech-dispatcher:x:107:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
saned:x:113:119::/home/saned:/bin/false
salviano:x:1000:1000:Salviano de Araujo Leão,,,:/home/salviano:/bin/bash
sshd:x:115:65534::/var/run/sshd:/usr/sbin/nologin
Exemplos dos outros metacaracteres
Salviano A. Leão – 47
Metacaractere Nome Função
\x Escape Torna literal o caracter X
| Ou Ou um ou outro
(. . . ) Grupo Delimita um grupo
\1 . . . \9 Retrovisor Texto casado nos grupos de 1 . . . 9
$ grep -E"[sS]alviano|root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
salviano:x:1000:1000:Salviano de Araujo Leão,,,:/home/salviano:/bin/bash
$ grep -E "(:)\1" /etc/passwd
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:107::/var/run/dbus:/bin/false
saned:x:113:119::/home/saned:/bin/false
sshd:x:115:65534::/var/run/sshd:/usr/sbin/nologin
festival:x:116:29::/home/festival:/bin/false
postfix:x:117:123::/var/spool/postfix:/bin/false
$ grep -E "::" /etc/passwd
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:107::/var/run/dbus:/bin/false
saned:x:113:119::/home/saned:/bin/false
sshd:x:115:65534::/var/run/sshd:/usr/sbin/nologin
festival:x:116:29::/home/festival:/bin/false
postfix:x:117:123::/var/spool/postfix:/bin/false
Classe POSIX
Salviano A. Leão – 48
Classe POSIX Similar Significado
[:upper:] [A-Z] Letras maísculas
[:lower:] [a-z] Letras minúsculas
[:alpha:] [A-Za-z] Letras maíusculas e minúsculas
[:alnum:] [A-Za-z0-9] Letras e números
[:digit:] [0-9] Números
[:xdigit:] [0-9A-Fa-f] Números hexadecimais
[:punct:] [.,!?:#$&...] Sinais de pontuação
[:blank:] [ \t] Espaço (ESP) e TAB
[:space:] [ \t\n\r\f\v] Caracteres brancos
[:cntrl:] - Caracteres de controle
[:graph:] [^\n\r\f\v] Caracteres imprimíveis, exceto ESP e TAB
[:print:] [^ \t\n\r\f\v] Caracteres imprimíveis
Comandos para obter informações de arquivos
Salviano A. Leão – 49
file Mostra o tipo de arquivo;
type Determina o tipo de um comando, se ele é um comando instalado nos sistema
ou se ele é comando do próprio shell. Ele tem as seguintes opções:
-t Que é a opção padrão, retorna o tipo do comando;
-p Retorna o caminho do comando;
-a Retorna todas as informações sobre o comando;
touch Cria arquivo vazio;
lsof Mostra arquivos abertos.
Manipulando arquivos
Salviano A. Leão – 50
cat Mostra o conteúdo de um arquivo binário ou texto e também pode concaternar
arquivos.
tac Semelhante ao cat mas inverte a ordem;
wc Mostra a quantidade de linhas, palavras e byte do arquivo. Suas opções são:
-c ou - -bytes Mostra a contagem dos bytes;
-m ou - -chars Mostra a contagem dos caracteres;
-l ou - -lines Mostra a contagem das linhas;
-w ou - -words Mostra a contagem das palavras;
nl Mostra o número de linhas junto com o conteúdo de um arquivo. Esse comando é
equivalente ao cat -n.
Comando split
Salviano A. Leão – 51
Esse comando é usado para quebrar um arquivo em vários pedaços. A sintaxe do
comando é:
split [OPCAO ]... [INPUT [PREFIX]]
A saída será pedaços de tamanho-fixo do INPUT prefizado PREFIXaa, PREFIXab, ...;
O tamanho padrão em linhas é 1000, e o PREFIX padrão é x.
Todos os argumentos são necessário. A opções são:
-a N Usa um sufixo de comprimento N, o padrão é 2;
-b SIZE Divide o arquivo fixando a quantidade bytes dos arquivos em SIZE bytes;
-C SIZE Coloque o máximo de SIZE bytes de linhas por arquivo;
-d Usa sufixos numéricos em vez de alfabético;
-l N Use N linhas por arquivo;
O tamanho SIZE dos arquivos podem ter um sufixo multiplicador:
b 512;
kB 1000;
K 1024;
MB 1000*1000;
M 1024*1024;
GB 1000*1000*1000;
G 1024*1024*1024;
Comando csplit
Salviano A. Leão – 52
Esse comando é usado para quebrar um arquivo em seções determinadas pela linha
de contexto. A sintaxe do comando é:
csplit [OPCAO ]... [ARQUIVO] [PADRAO]
A saída será pedaços do ARQUIVO separado pelo PADRAO para os arquivos xx00,
xx01, ....
A opções são:
-b, - -suffix-format=FORMAT Usa o sprintf FORMAT ao em vez de %02d
-f, - -prefix=PREFIX Usa PREFIX em vez de xx
-k, - -keep-files Não remove os arquivos de saída em caso de errros.
-n, - -digits=DIGITS Usa um número específico de dígitos em vez de 2
-s, - -quiet, - -silent Não mostra a saída.
-z, - -elide-empty-files remove os arquivos de saída vazios.
O padrão
Salviano A. Leão – 53
Ele lê o arquivo de entrada ARQUIVO, e com o PADRAO podendo ser:
• INTEGER Copia até mas não incluí o número específico de linhas
• /REGEXP/[OFFSET] Copia até mas não incluí a linha que casa com a ER.
• %REGEXP%[OFFSET] Ignora, mas não incluindo a linha que casa.
• {INTEGER} Repete o padrão especificado previamente esse número de vezes.
• {*} Repete o padrão especificado previamente tantas as vezes quanto for possível.
A linha de deslocamento OFFSET é necessário ter um sinal de+ ou− seguido por
um inteiro positivo.
Exemplo do csplit
Salviano A. Leão – 54
Ao contrário do comando split, o comando csplit permite que se especifique uma
palavra que irá indicar o delimitador de cada um dos novos arquivos. Considere por
exemplo o arquivo Tese.tex:
\chapter{Introdução}
Nesse trabalho será discutidos ...
\chapter{Teoria}
Nosso sistema pode ser descrito pela Hamiltoniana...
\chapter{Resultados}
Vamos apresentar os resultados teóricos e experimentais,...
\chapter{Conclusão}
Nosso resultados este de acordo com os resultados
experimentais...
Exemplo csplit
Salviano A. Leão – 55
Para quebrar o arquivo tese em um por capítulo fazemos:
$ csplit -f Cap_ Tese.tex "/\\ chapter/" {3}
$ ls -al
total 60
drwxr -xr-x 2 salviano salviano 4096 2010 -06 -09 09:41 .
drwxr -xr-x 8 salviano salviano 4096 2010 -06 -09 09:39 ..
-rw-r--r-- 1 salviano salviano 0 2010 -06 -09 09:41 Cap_00
-rw-r--r-- 1 salviano salviano 63 2010 -06 -09 09:41 Cap_01
-rw-r--r-- 1 salviano salviano 71 2010 -06 -09 09:41 Cap_02
-rw-r--r-- 1 salviano salviano 83 2010 -06 -09 09:41 Cap_03
-rw-r--r-- 1 salviano salviano 87 2010 -06 -09 09:41 Cap_04
-rw-r--r-- 1 salviano salviano 304 2010 -06 -09 09:40 Tese.tex
Análise do resultado
Salviano A. Leão – 56
O que ocorreu foi o seguinte:
• O csplit irá criar vários arquivos iniciados em "Cap_", até um máximo de 4 arquivos
(parâmetro 3, computa-se o número entre colchetes + 1). Este valor indica o
número de vezes que o comando será repetido.
• Quando não sabemos o número de arquivos contidos usamos o quantificador {*},
ou chutamos um número muito grande e usamo a opção -k para ele não reclamar.
Comando sort
Salviano A. Leão – 57
Classifica as linhas de um arquivo texto ou da entrada padrão, de acordo com as
opções passadas. A classificação é feita por linhas e as linhas são divididas em
campos que é a ordem que as palavras aparecem na linha separadas por um
delimitador (normalmente um espaço). A sintaxe do comando é
sort [opcoes] [arquivo]
na qual arquivo é o nome do arquivo que será classificado. Se nenhum arquivo for
especificado, será usado o dispositivo de entrada padrão (normalmente o teclado ou
um pipe "). Algumas opções são:
-b Ignora linhas em branco.
-d Somente usa letras, dígitos e espaços durante a classificação.
-f Ignora a diferença entre maiúsculas e minúsculas.
-r Inverte o resultado da comparação.
Comando sort: opções
Salviano A. Leão – 58
-n Caso estiver classificando um campo que contém números, os números serão
classificados na ordem aritmética. Por exemplo, se você tiver um arquivo com os
números:
200
20
70
Usando a opção -n, o arquivo será classificado desta forma:
20
70
200
No caso em que essa opção não é usada, o sort irá classificar o arquivo como uma
listagem alfabética (que vai de a até z e do 0 até 9), dessa forma ela terá a seguinte
forma:
20
200
70
Opções do sort
Salviano A. Leão – 59
-c Verifica se o arquivo já está classificado. Se não estiver, retorna a mensagem
"disorder on arquivo".
-o SAIDA Grava a saída do comando sort no arquivo SAIDA.
-m ARQUIVO1 ARQUIVO2 Combina o conteúdo de ARQUIVO1 e ARQUIVO2
gerando um único arquivo. Os dois arquivos precisam estar ordenados antes dessa
opção ser usada.
-i Ignora os caracteres fora da faixa octal ASCII 040-0176 durante a organização.
-t CARACTER Usa CARACTER como delimitadordurante a classificação de linhas.
Por padrão é usado um espaço em branco como delimitador de caracteres.
Opções do sort
Salviano A. Leão – 60
-k POS1, POS2 Específica qual o campo dentro da linha entre POS1 e POS2 que
será usado na classificação. Cada posição tem a forma ’[F. C][OPTS]’, onde F é o
número do campo a ser usado, e C é o número do primeiro caractere do início do
campo. Campos e posições de caracteres são numeradas a partir de 1, uma
posição de caractere zero em POS2 indica o último caractere do campo. Se ’C’ é
omitido em POS1, o padrão é 1 (o início do campo), se omitido em POS2, o padrão
é 0 (o fim do campo). OPTS são opções de ordenação, que permitem chaves
individuais para serem classificados de acordo com as diferentes regras.
Exemplo: Para classificar o segundo campo do arquivo lixo.csv cujo separador
de campos é o caracter “;”, use ‘- -key=2,2’ ou (‘-k 2,2’), da seguinte forma:
sort -t";" -k 2,2 lixo.csv
Visualizadores de início e fim de arquivo
Salviano A. Leão – 61
head Mostra as linhas iniciais de um arquivo texto. As opções são
-c N Mostra os N-bytes do início do arquivo;
-n N Mostra as N primeiras linhas do arquivo. O padrão é mostrar as 10 primeiras.
tail Mostra as linhas finais de um arquivo texto. As opções são
-c N Mostra os N-bytes do fim do arquivo;
-n N Mostra as N últimas linhas do arquivo. O padrão é mostrar as 10 últimas.
more é um filtro para paginar o texto na tela, com algumas opções. Ele já esta meio
obsoleto e é mais conveniente usarmos o seu substituto que possuí mais recurso, o
comando less.
less é um filtro para paginar o texto na tela, com uma série de opções. Ele é mais
eficiente e mais rápido.
Comando od
Salviano A. Leão – 62
É o Octal Dump, que serve para mostrar o código de cada caractere de um arquivo ou
texto. Além de octal, também mostra os códigos em hexadecimal e ASCII. Algumas
opções mais úteis são
-a Mostra os nomes dos caracteres;
-b Mostra os caracteres em octal;
-c Mostra os caracteres em ASCII ou com barras de ESCAPE;
-x Mostra os caracteres em hexadecimal.
Este comando é muito útil para encontramos caracteres especiais escondidos em
alguns arquivos.
Exemplos do comando od
Salviano A. Leão – 63
$ cat Arq_com_caracteres_especiais
200
20
70
1
2
. 2
: 3
4
x
x x 8
x
$ od -a Arq_com_caracteres_especiais
0000000 2 0 0 nl 2 0 nl 7 0 nl sp sp sp sp sp 1
0000020 nl sp sp sp sp sp 2 nl . sp sp sp sp 2 nl :
0000040 sp sp sp sp 3 nl sp sp sp sp sp 4 nl sp sp sp
0000060 sp sp x nl sp sp sp sp sp x sp sp ht sp sp x
0000100 sp sp ht ht sp 8 nl sp sp sp sp sp x nl sp nl
0000120
Editores para linha de comando
Salviano A. Leão – 64
ed Editor de texto orientado a linhas.
vi Editor de texto comum a quase todos os sistemas tipo Unix.
nano Editor de texto muito usado nos GNU/Linux atuais, e extremamente versátil e
poderoso.
emacs Editor de texto muito usado por ser extremamente versátil e poderoso.
mcedit Editor integrado ao GNU Midnight Commander, cujo pacote linux é o mc, de
uso fácil e simples.
pico Pequeno editor de texto;
sed Editor de texto orientado para fluxo.
Comando less
Salviano A. Leão – 65
O less é um filtro para paginar o texto na tela, que permite mover-se no texto em todas
as direções. Para navegar no texto, seus comandos são similares aos do emacs. Aqui
listamos alguns:
ESPAÇO ou ^V or f or ^F Move o texto N linhas a frente. N refere-se ao tamanho
padrão em linhas do terminal usado. O comando z redefine esse valor
z Redefine o tamanho padrão em linhas do terminal.
/PADRÃO Pesquisa para frente o PADRÃO no texto.
?PADRÃO Pesquisa para trás o PADRÃO no texto.
q ou Q ou :q ou :Q ou ZZ Sai do ambiente less.
Para maiores detalhes de navegação consulte o manual.
Comando echo
Salviano A. Leão – 66
Mostra um texto. Comando extremamente útil. A sintaxe do comando é:
echo [OPCOES]... [STRING]...
A opções pdem ser:
-n Não quebra a linha no final.
-e Habilita a interpretação dos caracteres especiais (Escape), listados na tabela.
-E Desabilita a interpretação dos caracteres especiais (Escape).
Exemplos:
$ echo -e "teste\nteste\b X"
teste
test X
$echo -e "teste\fteste\t X"
teste
teste X
$echo -e "X1\rX2\rX3"
X3
$echo -e "teste1\cteste2\t X"
teste1$
$echo -e "X1\tX2\tX3\n\t\tX5"
X1 X2 X3
X5
Tabela de caracteres de ESCAPE
Salviano A. Leão – 67
Escape Descrição
\\ barra invertida
\a Som de alerta (bipe).
\b Caracter backspace (apaga um caracter).
\c Além desse ponto, não produz uma saída.
\f Introduz uma nova linha, que inicia na coluna chamada.
\n Introduz nova linha.
\r Retorno de carro. Mostra só o que está a direita dele.
\t Tabulação horizontal.
\v Tabulação vertical.
\0nnn Caractere cujo código ASCII é nnn (octal).
\xnn Caractere cujo hexadecimal é nn.
Comando fmt
Salviano A. Leão – 68
É um formatador de parágrafos simples, podendo adicionar ou remover quebra de
linhas e espaços, para que o texto seja mantido dentro do número máximo de colunas
específicas. O resultado é sempre enviado a saída padrão, ou seja, ao terminal. Sua
sintaxe é a seguinte:
fmt [-WIDTH] [OPCOES]... [ARQUIVO]...
As opções são:
-c, - -crown-margin Preserva a indentação das duas primeiras linhas.
-p, - -prefix=STRING Só reformata as linhas que iniciam com a palavra STRING,
reanexando o prefixo as linhas formatadas.
-s, - -split-only Quebra linhas longas, mas não preenche o texto.
-t, - -tagged-paragraph Indentação da primeira linha diferente da segunda.
-u - -uniform-spacing Um espaço entre as palavras, e dois após as sentenças.
-w, – width=WIDTH Largura máxima das linhas, o valor padrão é 75 colunas.
Comando printf
Salviano A. Leão – 69
Comando que formata a saída de um texto. Sua sintaxe é a seguinte:
printf [FORMATO] [ARGUMENTOS ]...
em que:
FORMATO é uma cadeia de caracteres que contem 3 tipos de objeto:
• caracteres simples;
• caracteres para especificação de formato;
• sequência de escape no padrão da linguagem C.
ARGUMENTOS é a cadeia a ser impressa sob o controle do formato.
# printf "Ola , esse eh o comando printf"
Ola , esse eh o comando printf#
Especificações do FORMATO
Salviano A. Leão – 70
Cada um dos caracteres utilizados para especificação de formato é precedido pelo
caracter % e logo a seguir vem a especificação de formato de acordo com a tabela:
CARACTER Descrição
\\ barra invertida
\c Simples caractere
\d Número no sistema decimal
\e Notação científica exponencial
\f Número com ponto decimal (float)
\g
O menor entre os formatos %e e %f com supressão dos zeros
não significativos
\o Número no sistema octal
\s Cadeia de caracteres
\x Número no sistema hexadecimal
\% Imprime um %. Não existe nenhuma conversão .
# printf "%s\n" 'O pi eh:'
O pi eh:
# printf "%f\t %e\t %g\n" 3.1415 3.1415 3.1415
3.141500 3.141500e+00 3.1415
Sequências de Escape do printf
Salviano A. Leão – 71
As sequências de escape padrão da linguagem C são sempre precedidas por um
contra-barra (\) e as reconhecidas pelo comando printf são:
Sequência Efeito
\\ barra invertida
\a Soa o beep
\b Volta uma posição (backspace)
\f Salta para a próxima página lógica (form feed)
\n Salta para o início da linha seguinte (line feed)
\r Volta para o início da linha corrente (carriage return)
\t Avança para a próxima marca de tabulação
# printf "%05d\n" {13..20}
00013
00014
00015
00016
00017
00018
00019
00020
printf "%05.2f\n" {13..20}
13.00
14.00
15.00
16.00
17.00
18.00
19.00
20.00
Exemplos
Salviano A. Leão – 72
# printf "%s\t%s\n" "1" "2" "3" "4" "5" "6"
1 2
3 4
5 6
# printf "%.*f\n" 10 4.3
4.3000000000
# printf "%.*f\n" 4 4.3
4.3000
# printf "%d\n" 0x41
65
# printf -v Mensagem "Ola usuario %s" "$USER"
# echo $Mensagem
Ola usuariosalviano
# printf "%#10.9g\n" 3.1415
3.14150000
# printf "%#10.8g\n" 3.1415
3.1415000
# printf "%#10.7g\n" 3.1415
3.141500
Segurança de acesso aos arquivos
Salviano A. Leão – 73
chown Comando para alterar o dono;
chgrp Comando para alterar o grupo;
chmod comando para alterar as permissões;
Permissões no linux
Salviano A. Leão – 74
No Linux, como em outros sistemas Unix, cada arquivo tem uma permissão. As
permissões são atributos dos arquivos que especifica se ele pode ser lido, executado
ou escrito. Estas permissões definem o que um usuário pode fazer. Para saber se um
programa é executável ou não, execute um ’ls -l’ e veja no lado esquerdo se o arquivo
tem X nos seus argumentos, como no exemplo abaixo:
$ ls -al
drwxr-xr-x 2 root root 4,0K 2010-06-08 09:53 hsperfdata_root/
drwxr-xr-x 2 salviano salviano 4,0K 2010-06-08 11:10 hsperfdata_salviano/
drwx------ 3 salviano salviano 4,0K 2010-06-08 08:48 kde-salviano/
drwx------ 2 salviano salviano 4,0K 2010-06-08 08:31 keyring-kecE07/
drwx------ 2 salviano salviano 4,0K 2010-06-08 13:46 ksocket-salviano/
drwx------ 2 salviano salviano 4,0K 2010-06-08 13:08 mc-salviano/
drwx------ 2 gdm gdm 4,0K 2010-06-08 08:31 orbit-gdm/
drwx------ 2 root root 4,0K 2010-06-08 13:41 orbit-root/
drwx------ 2 salviano salviano 4,0K 2010-06-08 13:46 orbit-salviano/
drwx------ 2 salviano salviano 4,0K 2010-06-08 11:06 plugtmp/
drwx------ 2 gdm gdm 4,0K 2010-06-08 08:31 pulse-PKdhtXMmr18n/
drwx------ 2 salviano salviano 4,0K 2010-06-08 08:31 pulse-xmEMNrxCFrAT/
drwx------ 2 salviano salviano 4,0K 2010-06-08 08:31 ssh-yHcbLv1559/
-rw-r--r-- 1 salviano users 13 2010-06-08 13:44 test1
-rw-r--r-- 1 salviano backup 13 2010-06-08 13:46 test2
lrwxrwxrwx 1 salviano salviano 5 2010-06-08 14:07 testx -> test2
Dono, grupo e permissão
Salviano A. Leão – 75
Arquivo Dono Grupo Permissões
hsperfdata_root/ root root drwxr-xr-x
hsperfdata_salviano/ salviano salviano drwxr-xr-x
kde-salviano/ salviano salviano drwx- - - - - -
keyring-kecE07/ salviano salviano drwx- - - - - -
ksocket-salviano/ salviano salviano drwx- - - - - -
mc-salviano/ salviano salviano drwx- - - - - -
orbit-gdm/ gdm gdm drwx- - - - - -
orbit-root/ root root drwx- - - - - -
orbit-salviano/ salviano salviano drwx- - - - - -
plugtmp/ salviano salviano drwx- - - - - -
pulse-PKdhtXMmr18n/ gdm gdm drwx- - - - - -
pulse-xmEMNrxCFrAT/ salviano salviano drwx- - - - - -
ssh-yHcbLv1559/ salviano salviano drwx- - - - - -
test1 salviano users -rw-r- -r- -
test2 salviano backup -rw-r- -r- -
testx salviano salviano lrw-r- -r- -
Salviano A. Leão – 76
Como vemos as permissões de cada arquivo/diretório são representadas por uma
série de letras r, w, x, l ou d! Vamos ver o que representa cada uma delas:
Permissões => tipo dono grupo todos
drwxrwxrwx => d rwx rwx rwx
0111222333 => 0 111 222 333
• No caso acima, a primeira coluna (numero 0) indica se o nome listado é um
diretório, um link ou um arquivo. Se for um diretório ele terá o caractere d, se for um
link um caractere l e por último se for um arquivo regular terá o símbolo -.
• Portanto, de acordo com nossa tabela anterior, o arquivo testx é um link, test1 e
test2 são arquivos e o restante diretórios.
Outros tipos
Salviano A. Leão – 77
Também há casos em que no lugar do ’d’, aparecem outras letras que indicam outros
tipos de arquivos. A letra ’l’ significa que é um link simbólico, as letras ’c’ e ’b’
correspondem à dispositivos (/dev). Veja alguns exemplos abaixo:
$ ls -al /dev/
lrwxrwxrwx 1 root root 3 2010-06-08 08:29 scd0 -> sr0
0 brw-rw---- 1 root disk 8, 0 2010-06-08 08:29 sda
0 brw-rw---- 1 root disk 8, 1 2010-06-08 08:29 sda1
0 brw-rw---- 1 root disk 8, 2 2010-06-08 08:29 sda2
0 brw-rw---- 1 root disk 8, 3 2010-06-08 08:54 sda3
0 brw-rw---- 1 root disk 8, 4 2010-06-08 08:29 sda4
0 brw-rw---- 1 root disk 8, 5 2010-06-08 08:29 sda5
0 brw-rw---- 1 root disk 8, 6 2010-06-08 08:29 sda6
0 brw-rw---- 1 root disk 8, 7 2010-06-08 08:29 sda7
0 brw-rw---- 1 root disk 8, 16 2010-06-08 08:29 sdb
0 crw-rw---- 1 root disk 21, 0 2010-06-08 08:29 sg0
0 crw-rw---- 1 root cdrom 21, 1 2010-06-08 08:29 sg1
0 crw-rw---- 1 root disk 21, 2 2010-06-08 08:29 sg2
0 drwxrwxrwt 2 root root 200 2010-06-08 13:40 shm/
Permissões do dono
Salviano A. Leão – 78
• No exemplo aseguir, mostra-se um diretório do sistema:
drwxr-xr-x 2 root root 4096 2010-04-28 13:51 bin
|----------> Contém a letra ’d’ na primeira coluna, é um diretório
• Agora vamos examinar a coluna do dono (a dos números 1), que mostra as
permissões que o dono do arquivo possuí. Por exemplo considere o arquivo
-rwxr--r-- 1 salviano users 13 2010-06-08 13:44 test1
||\--> salviano, dono do arquivo pode executar o arquivo, x=executable!
|\---> salviano, dono do arquivo pode gravar no arquivo, w=writable!
\----> salviano, dono do arquivo pode ler o arquivo, r=readable!
• Agora vamos examinar a coluna do grupo (a dos números 2), que mostra as
permissões que o grupo do dono do arquivo possuí. Por exemplo considere o
arquivo:
-r--rwxr-- 1 salviano backup 13 2010-06-08 13:46 test2
| |||\-> Todo mundo pode ler o arquivo
| ||\--> Grupo dono do arquivo (backup) pode executar o arquivo
| |\---> Grupo dono do arquivo (backup) pode gravar no arquivo
| \----> Grupo dono do arquivo (backup) pode ler o arquivo
\-------> Dono do arquivo (salviano) pode ler o arquivo
Permissões de outros
Salviano A. Leão – 79
• Por sua vez a coluna que representa todos os outros usuários do sistema
(composta pelos números 3), refere as permissões para todos os outros usuários
do sistema, sem ser o dono e os participantes do grupo-do-dono do mesmo.
Considere por exemplo:
-r--r--rwx 1 salviano backup 13 2010-06-08 13:46 test2
| | ||\--> Todos os usuários (exceto salviano e usuários do
| | || grupo backup) tem permissão para executar o arquivo!
| | |\---> Todos os usuários (exceto salviano e usuários do
| | | grupo backup) tem permissão para gravar no arquivo!
\--\--\----> Todos os usuários tem permissão para ler o arquivo!
• Ao referir a um diretório o sinalizador x (executável) diz se o diretório está ou não
acessível, já que só se pode EXECUTAR diretórios... Exemplo:
drwxr--r-- 1 root root 13 2010-06-08 13:46 Lixao
||||| \---> Todos os podem ler o conteúdo do diretório, mas não
||||| podem usar o comando ’cd’ para entrar nele, pois não
||||| há o sinalizador ’x’ para a quarta coluna.
||||\------> O grupo ’root’ pode ler o conteúdo do diretório,
|||| mas não pode usar ’cd’ para entrar no diretório.
|||\-------> O ’root’ pode usar ’cd’ para entrar no diretório.
||\--------> O ’root’ pode gravar arquivos nesse diretório.
|\---------> O ’root’ pode ler o interior desse diretório.
\----------> Indica que o nome listado é um diretório.
Comando chmod
Salviano A. Leão – 80
O comando chmod pode ser usado para mudar os sinalizadores ’rwx’ dos arquivos
e/ou diretórios, a sintaxe básica do comando é:
chmod [ugoa]{ -+}[rwx] nome_do_arquivo_ou_diretorio
Exemplo: Para mudar a permissão do arquivo (u=user) para o dono poder ler e gravar
(rw) no ’arquivo1.txt’, digite:
$ chmod u+rw arquivo1.txt
Para desfazer o comando a troca de permissões anteriores, digite:
$ chmod u-rw arquivo1.txt
Os sinais+ e − definem se as permisões serão ativadas ou desativadas. Por
exemplo,
$ chmod a+r arquivo2.txt
-----> Todos (a=all) podem ler o ’arquivo2.txt’
$ chmod o+w arquivo3.txt
-----> Outros usuários (o=others) sem ser o dono e o
grupo dono do arquivo, podem gravar no ’arquivo3.txt’
$ chmod g+x MeuScript
-----> Grupo-dono do arquivo (g=group) pode executar o arquivo ’MeuScript’
Exemplo do comando chmod
Salviano A. Leão – 81
O comando chmod pode também ser usado com números, em vez dos flags. Este
método é chamado de octal, veja o exemplo abaixo:
$ chmod -c 664 arquivo.txt
Representação octal
NúmeroCombinação Significado
0 Nenhuma permissão
1 Permissão para executar
2 Permissão para gravar
3 1 + 2 Permissão para gravar e executar
4 Permissão para ler
5 4 + 1 Permissão para ler e executar
6 4 + 2 Permissão para ler e gravar
7 4 + 2 + 1 Permissão para ler, gravar e executar
Exemplo
Salviano A. Leão – 82
$ chmod -c 664 arquivo.txt
O comando acima muda as permissões do ’arquivo.txt’, dando permissões de leitura e
escrita ao seu dono (o número 6 na primeira coluna), de leitura e escrita aos usuário
que pertencem ao mesmo grupo-dono (o número 6 na segunda coluna) e de leitura a
todos os outros usuários do sistema (o número 4 na última coluna).
O comando chown é simples e pode ser usado para mudar o dono e o grupo-dono de
um arquivo/diretório. Ele é usado da seguinte forma:
$ chown -c usuario.grupo arquivo_ou_diretorio
$ chown usuario:grupo arquivo_ou_diretorio
$ chown salviano.users test2
$ chown -cR salviano.salviano /home/salviano
Manipulando data e hora
Salviano A. Leão – 83
date Mostra ou altera a data e hora do sistema;
Formato Descrição
%a Nome do dia da semana abreviado (Dom..Sáb)
%A Nome do dia da semana (Domingo..Sábado)
%b Nome do mês abreviado (Jan..Dez)
%B Nome do mês (Janeiro..Dezembro)
%c Data completa (Sat Nov 04 12:02:33 EST 1989)
%y Ano (dois dígitos)
%Y Ano (quatro dígitos)
%m Mês (01..12)
%d Dia (01..31)
%j Dia do ano (001..366)
%H Horas (00..23)
%M Minutos (00..59)
%S Segundos (00..60)
%s Segundos desde 1o¯ de Janeiro de 1970
%r Expressa o dia em multiplos de 12 hora (exemplo, 11:11:04 PM)
%R Dia com 24 horas, o mesmo que %H:%M
%% Um % literal
%t Um TAB
%n Uma quebra de linha
cal Mostra um calendário
Fazendo backups
Salviano A. Leão – 84
tar Cria um arquivo, que é formado pela sequência dos outros, em fila. Ele não usa
nenhum algooritmo de compactação.
compress Compactador
uncompress Descompactador do compress.
zcat Comprime ou expande arquivos comprimidos.
gzip Comprime
gunzip Expande arquivos comprimidos co gzip.
bzip2 Comprime ou expande arquivos comprimidos.
Comando tar
Salviano A. Leão – 85
É utilizado para agrupar e desagrupar arquivos e diretórios em um ánico arquivo ou
dispositivo físico, como disquetes e fitas. Estes dispositivos variam de sistema para
sistema. A sua sintaxe é
tar {-c|-x|-t} [-v] [-f {dispositivo|arqv1 }] {arqv2|diretorio}
onde dispositivo é o arquivo de dispositivo do sistema, arqv1 é o nome do arquivo do
agrupamento, arqv2 é o nome do arquivo a ser agrupado e diretorio é o nome do
diretório a ser agrupado.
Comando tar: opções
Salviano A. Leão – 86
-A Une ao final de um arquivo tar um outro arquivo tar;
-c Cria um novo arquivo;
-d Encontra as diferenças existentes entres os arquivos compactados e os do
sistema;
- -delete Apaga um arquivo do compactado;
-f Indica o nome do arquivo final (que será o arquivo compactado);
-t Lista o conteúdo do arquivo;
-r Adiciona arquivos ao já existente;
-u Adiciona somente arquivos com data mais recente do que a do arquivo que estiver
no arquivo compactado;
-x Descompacta o arquivo;
-v Mostra os arquivos que estão sendo processados;
-j Filtra o arquivo a ser processado com bzip2/bunzip2;
-z Filtra o arquivo a ser processado com gzip/gunzip.
Exemplos do Comando tar
Salviano A. Leão – 87
• Para agrupar dois ou mais arquivos em um único arquivo:
$ tar -cvf programas.tar prog.c prog2.c
• Para agrupar o diretório de trabalho e seus sub-diretórios em um único arquivo:
$ tar -cvf tudo.tar *
• Para agrupar dois arquivos tar, unindo ao primeiro arquivo o segundo
$ tar -Af primeiro.tar segundo.tar
• Para desagrupar todos os arquivos de um arquivo criado pelo comando:
$ tar -xvf programas.tar
• Para desagrupar um arquivo específico de um arquivo criado pelo comando:
$ tar -xvf programas.tar prog2.c
exemplo do tar
Salviano A. Leão – 88
• Para desagrupar vários arquivos de um arquivo criado pelo comando:
$ tar -xvf tudo.tar prog.c bin/* doc/prog.txt
• Para listar os arquivos agrupados em um arquivo criado pelo comando:
$ tar -tvf programas.tar
• Para verificar se um arquivo está agrupado no arquivo criado pelo comando:
$ tar -tvf programa.tar prog2.c
• Para agrupar arquivos no dispositivo padrão:
$ tar -cv *
• Para desagrupar todos os arquivos do dispositivo padrão:
$ tar -xv
• Para listar os arquivos do dispositivo padrão:
$ tar -tv
Usando o tar para fazer backups
Salviano A. Leão – 89
O comando tar pode ser usado para copiar arquivos mantendo-se as permissões
originais e os donos, tanto localmente quanto através da rede.
• Para realizar esta cópia localmente:
$ tar cvf - [origem] | (cd [destino]; tar xvf - )
• Para realizar a cópia remotamente:
$ tar cvf - [origem] | rsh [sistema remoto] '(cd [destino]; tar xvf
• Para duplicar um diretório
$ (cd [origem]; tar cf - * ) | tar xvfB -
• Cópia rápida de arquivos
$ (cd ../ origem/; tar cf - . ) | tar xvf -
Incluindo a data no backup
Salviano A. Leão – 90
A seguir mostramos alguns exemplos de como incluir a data atual no nome do arquivo
tar.
• Neste exemplo, será criado um tar do diretório ~/Dados, com o nome de
Backup_dados_data.tar.gz:
$ tar -zcvf Backup_dados_"$(date +%d.%b.%Y)".tar.gz ~/Dados
Backup_dados_08.Jun.2010.tar.gz
$ tar -zcvf Backup_dados_"$(date +%d%m%y)".tar.gz ~/Dados
Backup_dados_080610.tar.gz
• Vamos incluir também a hora e minutos, não utilize ":"como separador porque é um
simbolo não válido em nome de arquivos, exemplos:
$ tar -zcvf Backup_dados_"$(date +%d.%b.%Y-%H-%M)".tar.gz ~/Dados
Backup_dados_08.Jun.2010-23-41.tar.gz
Sincronização de Conteúdo com rsync
Salviano A. Leão – 91
Um método rápido e versátil de fazer cópias locais e remotas. a sua sintaxe é:
Local: rsync [OPCOES...] FONTE ... [DESTINO]
Para transferir de via rede a sintaxe é a seguinte:
Envia: rsync [OPCOES...] FONTE ... [USER]@[HOST]:[ DESTINO]
Recebe: rsync [OPCOES...] [USER]@[HOST]: FONTE [DESTINO]
Vejamos alguns exemplos:
$ rsync -avz -e ssh polaron.ufg.br:/home/salviano .
O comando acima irá copiar, no diretório corrente, todo o diretório chamado
/home/salviano.
Já o comando
rsync -avz -e ssh polaron.ufg.br:/home/salviano/ .
irá copiar apenas o conteúdo do diretório /home/salviano
O comando usa o ssh com a porta 22.
rsync -apvrz --progress --links --rsh='/usr/bin/ssh -p22 '
polaron.ufg.br:/home/salviano/ .
rsync: significado de algumas diretivas
Salviano A. Leão – 92
-a - archive, basicamente indica que voce quer que a cópia seja recursiva e que tudo
seja preservado (links simbólicos, por exemplo);
-v - verbose, escreva tudo que estiver fazendo;
-z - compactar os arquivos transferidos;
-e - específica o shell remoto a ser usado, no nosso caso, ssh, o que garante que os
dados serão transmitidos usando criptografia;
-p Preserva as permissões.
• Ele copia apenas o que mudou na árvore de diretórios. De um arquivo modificado
ele irá transferir apenas o blocos novos ou alterados.
• Antes de transferir os dados, faz uma comparação do arquivo na origem e no
destino. Os arquivos são quebrados em segmentos e os seus checksums são
comparados. Os pedaços cujos checksums forem diferentes são transmitidos.
• O rsync pode ser usado para espelhar uma máquina.
Processos no Linux
Salviano A. Leão – 93
O que apresentaremos a seguir foi adaptado da seguinte página
http://www.infowester.com/linprocessos.php.
Nos sistemas operacionais, um processo é a forma de representar um programa em
execução. É o processo que utiliza os recursos do computador - processador,
memória, etc - para a realização das tarefas para as quais a máquina é destinada.
O sistema operacional lida com uma infinidade de processos e, por isso, é necessário
ter meios que permitamcontrolá-los. Para isso, os processos contam com um conjunto
de características, dentre as quais:
• Proprietário do processo;
• Estado do processo (em espera, em execução, etc);
• Prioridade de execução;
• Recursos de memória.
Quanto aos processos temos
Salviano A. Leão – 94
• Cada processo possuí um dono e um PID (Process Identifier), um número de
identificação que o sistema dá a cada processo. Para cada novo processo, um
novo número deve ser atribuído, ou seja, não se pode ter um único PID para dois
ou mais processos ao mesmo tempo.
• Os sistemas baseados em Unix precisam que um processo já existente se duplique
para que a cópia possa ser atribuída a uma tarefa nova. Quando isso ocorre, o
processo "copiado"recebe o nome de "processo pai", enquanto que o novo é
denominado "processo filho". É nesse ponto que o PPID (Parent Process Identifier)
passa a ser usado: o PPID de um processo nada mais é do que o PID de seu
processo pai.
Os UID e GID
Salviano A. Leão – 95
• Cada processo precisa ter um proprietário, pois só assim o sistema saberá, através
das permissões fornecidas pelo proprietário, quem pode e quem não pode executar
o processo em questão. Para lidar com os donos, o sistema usa os números UID e
GID.
• O Linux gerencia os usuários e os grupos através de números conhecidos como
UID (User Identifier) e GID (Group Identifier). Como é possível perceber, UID são
números de usuários e GID são números de grupos. Os nomes dos usuários e dos
grupos servem apenas para facilitar o uso humano do computador.
• Cada usuário precisa pertencer a um ou mais grupos. Como cada processo (e
cada arquivo) pertence a um usuário, logo, esse processo pertence ao grupo de
seu proprietário. Assim sendo, cada processo está associado a um UID e a um
GID.
• Os números UID e GID variam de 0 a 65536. Dependendo do sistema, o valor
limite pode ser maior. No caso do usuário root, esses valores são sempre 0 (zero).
Assim, para fazer com que um usuário tenha os mesmos privilégios que o root, é
necessário que seu GID seja 0.
Sinais de processos
Salviano A. Leão – 96
• Os sinais são meios usados para que os processos possam se comunicar e para
que o sistema possa interferir em seu funcionamento. Por exemplo, se o usuário
executar o comando kill para interromper um processo, isso será feito por meio de
um sinal.
• 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.
Alguns sinais comuns
Salviano A. Leão – 97
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.
Os comando kill, kilall e pkill são comandos que o usuário pode usar para enviar um
sinal qualquer sinal para o sistema, porém, se ele for usado de maneira isolada, ou
seja, sem o parâmetro de um sinal, o kill por padrão executa o sinal TERM.
Comando kill
Salviano A. Leão – 98
Ele envia um sinal para um processo do sistema. A sua sintaxe é
$ kill -SINAL PID
Como exemplo, vamos supor que você deseja interromper temporariamente a
execução do processo de PID 4220. Para isso, pode-se usar o seguinte comando:
$ kill -STOP 4220
Para que o processo 4220 volte a ser executado, basta usar o comando:
$ kill -CONT 4220
Se o sinal precisa ser enviado a todos os processos, pode-se usar o número -1 no
lugar do PID. Por exemplo:
$ kill -STOP -1
Comando kill listando sinais
Salviano A. Leão – 99
O comando
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Cada sinal possuí um número associado a ele, assim se desejamos matar o processo
4220, fazemos
$ kill -9 4220
Agora, imagine que você não saiba qual o PID de um processo, neste caso, pode-se
usar o comando killall, desde que você saiba o nome do processo. A sintaxe é:
killall -SINAL nome -do-processo
ou ainda, podemos usar o pkill
pkill -SINAL nome -do-processo
Por exemplo:
killall -STOP vi
Estado dos processos
Salviano A. Leão – 100
Quando um processo é criado, isso não significa que ele será imediatamente
executado. Além disso, determinados processos podem ser temporariamente
paralisados para que o processador possa executar um processo prioritário. Isso quer
dizer que os processos, em certos momentos, podem estar em situações de execução
diferentes. O Linux trabalha, essencialmente, com quatro tipos de situação, isto é,
estados:
Executável o processo pode ser executado imediatamente;
Dormente o processo precisa aguardar algo ocorrer para ser executado. Só após
esse "algo ocorrer"é que ele passa para o estado executável;
Zumbi o processo é considerado "morto", mas, por alguma razão, ainda existe;
Parado o processo está "congelado", ou seja, não pode ser executado.
Verificando processos com o ps
Salviano A. Leão – 101
Esse comando informa quais os processos em execução atualmente, quais os UIDs e
PIDs correspondentes, entre outros. As opções mais importantes desse comando são
os seguintes:
-a Mostra todos os processos existentes;
-e Exibe as variáveis de ambiente relacionadas aos processos;
-f Exibe a árvore de execução dos processos;
-l Exibe mais campos no resultado;
-m Mostra a quantidade de memória ocupada por cada processo;
-u Exibe o nome do usuário que iniciou determinado processo e a hora em que isso
ocorreu;
-x Exibe os processos que não estão associados a terminais;
-w Se o resultado de processo não couber em uma linha, essa opção faz com que o
restante seja exibido na linha seguinte.
Exemplo do ps
Salviano A. Leão – 102
Por exemplo:
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 23692 1960 ? Ss 08:13 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S 08:13 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 08:13 0:00 [migration/0]
root 4 0.2 0.0 0 0 ? S 08:13 0:26 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 08:13 0:00 [watchdog/0]
root 6 0.0 0.0 0 0 ? S 08:13 0:00 [migration/1]
root 7 0.0 0.0 0 0 ? S 08:13 0:00 [ksoftirqd/1]
root 8 0.0 0.0 0 0 ? S 08:13 0:00 [watchdog/1]
root 9 0.0 0.0 0 0 ? S 08:13 0:00 [migration/2]
root 10 0.0 0.0 0 0 ? S 08:13 0:00 [ksoftirqd/2]
root 11 0.0 0.0 0 0 ? S 08:13 0:00 [watchdog/2]
root 12 0.0 0.0 0 0 ? S 08:13 0:00 [migration/3]
root 13 0.0 0.0 0 0 ? S 08:13 0:00 [ksoftirqd/3]
$ ps alx
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 23692 1960 poll_s Ss ? 0:00 /sbin/init
1 0 2 0 20 0 0 0 kthrea S ? 0:00[kthreadd]
1 0 3 2 -100 - 0 0 migrat S ? 0:00 [migration/0]
1 0 4 2 20 0 0 0 ksofti S ? 0:27 [ksoftirqd/0]
5 0 5 2 -100 - 0 0 watchd S ? 0:00 [watchdog/0]
1 0 6 2 -100 - 0 0 migrat S ? 0:00 [migration/1]
1 0 7 2 20 0 0 0 ksofti S ? 0:00 [ksoftirqd/1]
5 0 8 2 -100 - 0 0 watchd S ? 0:00 [watchdog/1]
1 0 9 2 -100 - 0 0 migrat S ? 0:00 [migration/2]
1 0 10 2 20 0 0 0 ksofti S ? 0:00 [ksoftirqd/2]
5 0 11 2 -100 - 0 0 watchd S ? 0:00 [watchdog/2]
1 0 12 2 -100 - 0 0 migrat S ? 0:00 [migration/3]
1 0 13 2 20 0 0 0 ksofti S ? 0:00 [ksoftirqd/3]
Descrição dos campos de saída do ps
Salviano A. Leão – 103
USER nome do usuário dono do processo;
UID Número de identificação do usuário dono do processo;
PID Número de identificação do processo;
PPID Número de identificação do processo pai;
%CPU Porcentagem do processamento usado;
%MEM Porcentagem da memória usada;
VSZ Indica o tamanho virtual do processo;
RSS Sigla de Resident Set Size, indica a quantidade de memória usada (em KB);
TTY Indica o identificador do terminal do processo;
START Hora em que o processo foi iniciado;
TIME Tempo de processamento já consumido pelo processo;
COMMAND Nome do comando que executa aquele processo;
PRI Valor da prioridade do processo;
Salviano A. Leão – 104
NI Valor preciso da prioridade (geralmente igual aos valores de PRI);
WCHAN Mostra a função do kernel onde o processo se encontra em modo
suspenso;
STAT Indica o estado atual do processo, sendo representado por uma letra:
R executável;
D em espera no disco;
S Suspenso;
T interrompido;
Z Zumbi;
Essas letras podem ser combinadas e ainda acrescidas de:
W processo paginado em disco;
< processo com prioridade maior que o convencional;
N processo com prioridade menor que o convencional;
L processo com alguns recursos bloqueados no kernel.
Verificando processos com o top
Salviano A. Leão – 105
O comando ps trabalha como se tirasse uma fotografia da situação dos processos
naquele momento. O comando top, por sua vez, coleta as informações, mas as
atualiza regularmente. Geralmente essa atualização ocorre a cada 10 segundos. A
sintaxe do comando top é a seguinte:
top -opcao
Entre as opções, tem-se as que se seguem:
-d n atualiza o top após n segundos.
-c Exibe a linha de comando ao invés do nome do processo;
-i Faz o top ignorar processos em estado zumbi;
-s Executa o top em modo seguro.
É possível manipular alguns recursos do comando top através das teclas do teclado.
Por exemplo, para atualizar imediatamente o resultado exibido, basta pressionar a tecla
de espaço. Se pressionar a tecla q, o top é finalizado. Pressione a tecla h enquanto
estiver utilizando o top para ver a lista completa de opções e teclas de atalho.
Controle de processos
Salviano A. Leão – 106
Para se ter ainda mais controle sobre os processos executados no Linux, pode-se
utilizar os seguintes comandos:
jobs mostra os processos que estão parados ou executando em segundo plano
(background). Quando um processo está nessa condição, significa sua execução é
feita pelo kernel sem que esteja vinculada a um terminal, ou seja, ele é executado
enquanto o usuário usa outros comandos e aplicativos. A sua sintaxe é:
-l lista os processos através do PID;
-r lista apenas os processos em execução;
-s lista apenas os processos parados.
No início da linha ele mostra um número entre colchetes, o qual indica a ordem do
processo usada pelo jobs.
Primeiro plano e segundo plano
Salviano A. Leão – 107
fg e bg ele enviam um processo respectivamente para o primeiro plano (foreground)
e segundo plano (background). Para usar o bg, deve-se paralisar o processo. Isso
pode ser feito pressionando-se as teclas Ctrl + Z no teclado. Em seguida, digita-se o
comando da seguinte forma:
$ bg +numero
ou ainda
$ bg %numero
O número mencionado corresponde ao valor de ordem informado no início da linha
quando o comando jobs é usado.
Quanto ao comando fg, a sintaxe é a mesma:
$ fg +numero
Comando fuser
Salviano A. Leão – 108
O comando fuser mostra qual processo faz uso de um determinado arquivo ou
diretório. Sua sintaxe é:
fuser -opcao caminho (do arquivo ou diretorio)
Entre as opções, tem-se:
-k finaliza o processo que utiliza o arquivo/diretório em questão;
-i deve ser usada em conjunto com a opção k e serve para perguntar se a finalização
do processo deve ser feita;
-u mostra o proprietário do processo;
-v o resultado é mostrado em um padrão de exibição semelhante ao comando ps.
Comando pstree
Salviano A. Leão – 109
Esse comando mostra processos relacionados em formato de árvore. Sua sintaxe é:
pstree -opcao PID
Entre as opções, tem-se:
-u mostra o proprietário do processo;
-p exibe o PID após o nome do processo;
-c mostra a relação de processos ativos;
-G usa determinados caracteres para exibir o resultado em um formato gráfico.
Um detalhe importante: se ao digitar o comando pstree o PID não for informado, todos
os processos serão listados.
Comandos de controle de execução
Salviano A. Leão – 110
nohup Esse comando possibilita ao processo ficar ativo mesmo quando o usuário
faz logout. É da natureza dos sistemas baseados em Unix interromper processos
caso seu proprietário não esteja mais ativo, por isso, o nohup pode ser muito útil.
Sua sintaxe é:
nohup comando
time Determina a quantidade de tempo consumida durante a execução de um
determinado comando mais outras informações. Por exemplo,
$ time ls
total 3,0M
4,0K Aula_prosper.tex 24K lista-de-comandos.tex
8,0K bash.tex 8,0K Lista_dos_comando_basicos.tex
20K Comandos_Basicos.tex 4,0K lista_tabelas
20K Comandos_Basicos.tex.backup 4,0K lista-verbatim01.tex
4,0K IntroBash/ 4,0K Makefile
4,0K linux-pauloaguiar/ 36K Notas_01.tex
real 0m0.003s
user 0m0.000s
sys 0m0.010s
Executando tarefas agendadas
Salviano A. Leão – 111
at e batch agenda tarefas a serem executadas pelo sistema.
atq lista as tarefas agendadas com o comando at.
atrm remove tarefas agendadas.
cron O cron pode ser interpretado como um serviço do Linux que é carregado
durante o processo de boot do sistema. Trata-se de uma ferramenta que permite
programar a execução de comandos e processos de maneira repetitiva ou apenas
uma única vez.
crontab editor de tarefas do cron.
Comandos especiais
Salviano A. Leão – 112
• join
• paste
• cut
• tr
• comm
• tee
• uniq
• sed
• awk
• sleep
• bc
Comandos para navegação
Salviano A. Leão – 113
curl
wget
lynx
elinks
surfraw
youtube-dl
O Shell
Salviano A. Leão – 114
Programas e comandos
Núcleo ou Kernel
Hardware
Shell ou interpretador
Shell Script Básico
Salviano A. Leão – 115
Será que funciona? Um script mínimo em Bash, com apenas duas linhas, pode ser
visto abaixo
# ! / b in / bash
echo " Hel lo , World ! "
A primeira linha indica que o shell Bash será usado para interpretar o script e, embora
não seja obrigatória, sua inclusão é considerada uma boa prática. Tanto, que se
atribuiu a denominação carinhosa de "sha-boom"aos seus dois primeiros caracteres,
denotando algo que se pode traduzir para o português como "o início de um passe de
mágica". A segunda linha contém a única ação que será realmente executada, e que
resultará na exibição do texto "Hello, World!"no terminal.
Deve-se tornar o script um arquivo executável e para isso use o seguinte comando
para que seu script seja reconhecido pelo sistema como um comando executável:
# chmod +x helloworld.sh
Agora para executar o script faça
#./ helloworld.sh
Pipes
Salviano A. Leão – 116
Pipes representam um conceito da família Unix de sistemas operacionais através do
qual se possibilita que a saída de um programa seja usada como a entrada de outro.

Continue navegando