segunda-feira, 28 de junho de 2010

Fluxos, pipes (canalização), concatenadores e redirecionadores de saída

Condutores, redirecionadores e concatenadores de saída.


Shell em Sistema GNU/Linux fazem uma ponte entre o usuário e o kernel do linux; em outras palavras, os shells ou prompt de comando possibilitam a interação do usuário com o computador.

Por default a entrada padrão do shell é o teclado, saída default de comando é a tela e a saída default de erro é a tela também. Os redirecionadores de entrada/saída de dados servem para mudar estes padrões estabelecidos.

Processos Unix/Linux abrem três descritores padrão:

stdin – descritor de entrada de dados (o teclado) representado pelo valor numérico 0;

stdout – descritor de saída de dados (monitor de vídeo) representado pelo valor numérico 1;

stderr – descritor de erro (monitor de vídeo) representado pelo valor numérico 2;

O fluxo de dados para redirecionamento ou canalização se inicia da esquerda para a direita.


Redirecionadores


redireciona a saída de um programa/comando/script para um arquivo/dispositivo, ou de um processo para outro processo ou arquivo, utilizando os símbolo >, >>, 2>, 2>> ao invés de direcionar para a saída padrão (tela) Ex:

# cat /boot/grub/menu.lst > /home/user/backup.txt

Este comando copia (concatena) o conteúdo do arquivo menu.lst para o arquivo backup.txt, sobrescrevendo o conteúdo do bakup.txt.

# ls -la > saída.txt

Este comando vai escrever a saída padrão do comando ls -la no arquivo saída.txt, sobrescrevendo o conteúdo do arquivo saída.txt, caso existir.

# cat /boot/grub/menu.lst >> /home/user/backup.txt

Este comando copia (concatena) o conteúdo do arquivo menu.lst para o final do arquivo backup.txt, sem sobrescrever o conteúdo do bakup.txt. A diferença entre estes dois redirecionadores simples e duplo é que o redirecionador simples sobrescreve, enquanto que o duplo adiciona o conteúdo no final do arquivo sem sobrescrever.

# ls -la >> saída.txt

Este comando vai escrever a saída padrão do comando ls -la no arquivo saída.txt, sem sobrescrever o conteúdo do arquivo, caso exista algum.

# mkdir /mnt/dir1/arquivo 2> saída.txt

2> Faz o mesmo que o > mas ao invés de apresentar a saída do comando, apresenta os erros da saída do comando;

# mkdir /mnt/dir1/arquivo 2>> saída.txt

2>> Faz o mesmo que o >> mas ao invés de apresentar a saída do comando, apresenta os erros de saída do comando;


Existe também outros tipos de redirecionadores que fazem o “trabalho ao contrário”, ou seja, redirecionam a saída de um arquivo para um comando. Estes redirecionadores são <>.:

$ cat <>cat. Obviamente o mesmo resultado poderia ser obtido somente usando cat teste.txt sem necessariamente ter que usar o redirecionador;


Condutores


redireciona a saída de um comando para a entrada de outro comando para continuidade do processo. Para isso é utilizado o símbolo “pipe” (|). O pipe envolve processamento entre comandos; Exemplificando.

$ cat teste.txt | wc → conta linhas, palavras e caracteres do arquivo teste.txt;


comando cat


O comando cat serve para visualizar e concatenar arquivos;

$ cat arq1.txt arq2.txt > arq3.txt – este comando concatena o conteúdo do arquivo “arq1.txt” e do arquivo "arq2.txt" no arquivo “arq3.txt”. copiando primeiro o arq1.txt, na seqüência o arq2.txt e sobrescrevendo o arq3.txt.

$ cat arq3.txt – este comando lista o conteúdo do arquivo “arq3.txt”.


Um link esperto para distair...

http://www.tirinhasdoze.com/search/label/Dr.%20Roberval?updated-max=2010-02-21T06:31:00-03:00&max-results=20


Referências:

SIQUEIRA, Luciano Antonio. Certificação LPI-1: 101-102. São Paulo: Linux New Media, 2009.

PRITCHARD, Steven et al. Certificação Linux LPI: Guia de referência nível 1: Exames 101 e 102. Rio de Janeiro: Alta Books, 2007.

FERREIRA, Rubem E. LINUX: Guia do Administrador de Sistemas. São Paulo: Novatec, 2008.

Guia Foca Linux, 2010. Disponível em : http://focalinux.cipsga.org.br/ . Acesso em 26 de junho de 2010.





domingo, 27 de junho de 2010

Gerenciamento de Processos GNU/Linux

É importante que se diga que este thread é apenas um esboço da complexidade que é o gerenciamento de processos em Sistemas GNU/Linux; a fim de diminuir o tamanho do post negligenciei algumas opções de comando e comandos propriamente. Portanto, para um correto entendimento sobre gerenciamento de processos deve-se recorrer a outras fontes também. Uma boa dica são os livros citados como referência no final do thread.


Criar; Monitorar e Gerenciar Processos


“Processo é um programa em execução. Mais especificamente do ponto de vista do Sistema Operacional, é a estrutura responsável pela manutenção de todas as informações necessárias à execução de um progrma” (FERREIRA, 2009, p. 257);

Para Sistemas GNU/Linux, todo tipo de programa, comando, aplicativo que esteja executando é tratado como um processo. Na maioria das vezes, os processos são criados e eliminados automaticamente (mortos) já que estão sob supervisão e responsabilidade do kernel; mas existem algumas situações em que o sysadmin deverá intervir manualmente para “matar” algum processo que por algum motivo esteja se comportando mal, “rebelado ou revoltado”, travando ou não respondendo. Pode haver a necessidade de parar algum processo que esteja consumindo muitos recursos do equipamento ou simplesmente reinicializar o processo com uma prioridade maior ou menor de execução.


Processos em Sistema GNU/Linux possuem alguns atributos, a saber:


  • Tempo de vida – define o tempo que este processo ficou em execução, existe processos com tempo de vida curto, outros processos com tempo de vida mais longo. Existem processos que executam desde quando o computador é ligado até que seja desligado, estes processos são os daemons servidores; daemons geralmente executam em modo background e ficam aguradando que algum outro processo solicite seus serviços.

  • ID do processo (PID) – todo processo possui um PID que o identifica (pid é um número inteiro que identifica cada processo em execução, sem possibilidade de serem iguais entre os processos em execução; cada processo tem um número único de identificação);

  • ID do user (UID) e ID do grupo (GID) – Esses atributos identificam o usuário que iniciou o processo e o grupo que o usuário pertence; geralmente o significado disso se presta para verificação de permissão, já que o usuário comum é limitado ao acesso aos objetos do sistema de arquivos;

  • Processos parentes – os processos são parentes entre si (processos pai, processos filhos) o init é o primeiro processo a ser executado pelo sistema, os próximos processos são processos descendentes do init.

Monitoração de Processos


Em um sistema GNU/Linux, existem centenas de processos executando simultaneamente e concorrendo entre si pelo uso dos recursos de CPU e memória. Os processos são controlados por escalonadores do Sistema Operacional, que, de acordo com o grau de prioridade de cada processo definem qual é a parcela de tempo de processamento que cada processo deverá ocupar.

Os comandos que nos permitem monitorar os processos em execução são os comandos ps, pstree e top;


ps


O comando ps exibe uma lista dos processos em execução, também nos mostra qual user executou o processo, pid do processo, tempo de execução, hora de inicialização, etc, etc;


Sintaxe

# ps [opções]


As principais opções são:

a - Mostra os processos criados por você e de outros usuários do sistema.

x - Mostra processos que não são controlados pelo terminal.

u - Mostra o nome de usuário que iniciou o processo e hora em que o processo foi iniciado.

Para uma averiguação mais detalhada é necessário utilizar uma combinação de opções. Exemplo:

# ps -ef → este é uma combinação muito importante para mostrar processos ativos, mostra o dono do processo, o pid, o time de execução do processo, em qual TTY esta sendo executando o processo e mais algumas informações úteis para o sysadmin;

# ps -l → mostra o comando no formato longo;

# ps -aux → também é um combinação de opções bastante interessante;

maiores informações: # man ps


pstree


O comando pstree exibe uma lista dos processos em um formato de “arvore”, ficando fácil de perceber quem são os processos “pai” e quem são os processos “filhos”; (Sistemas linux trabalham com conceitos de herança, assim quando um processo é criado a partir de outro processo já executando no sistema, dizemos que este é “processo filho”; quem criou o processo é o “processo pai”)


Sintaxe

# pstree [opções][pid/usuario]


-a → exibe argumentos de linha de comando usada para iniciar processos;

-c → desabilita compactação de sub-arvore;

-h → destaca os ancestrais do processo atual;

-p → inclui os pids na saída;

-u [user] → mostra os processos executados pelo usuário setado;


Um bom exemplo:

Vejam a saída do comando no meu prompt.

debian:/home/jorge# pstree -up jorge

bonobo-activati(2937)───{bonobo-activati}(2941)


chrome(3015)─┬─chrome(3018)

├─{chrome}(3023)

├─{chrome}(3024)

├─{chrome}(3028)

├─{chrome}(3029)

├─{chrome}(3030)

├─{chrome}(3031)

├─{chrome}(3033)

├─{chrome}(3034)

├─{chrome}(3041)

├─{chrome}(5622)

├─{chrome}(5674)

├─{chrome}(5677)

└─{chrome}(5678)


chrome(3020)─┬─chrome(3036)───{chrome}(3038)

├─chrome(3112)───{chrome}(3114)

└─chrome(5666)───{chrome}(5668)


dbus-daemon(2900)


dbus-launch(2899)


gconfd-2(2902)


x-session-manag(2848)─┬─bluetooth-apple(2940)

├─gnome-panel(2935)

├─gnome-settings-(2913)───{gnome-settings-}(2920)

├─kerneloops-appl(2947)

├─metacity(2932)

├─nautilus(2933)

├─nm-applet(2948)

├─seahorse-agent(2908)

├─ssh-agent(2896)

├─system-config-p(2943)

├─update-notifier(2938)

└─{x-session-manag}(2918)


Com o comando pstree combinando as opções -up mostra todos os processos executados pelo usuário jorge, seu grau de parentesco e os pids correspondentes de cada processo.

maiores informações: # man pstree


top


Mostra os programas em execução ativos, parados, tempo usado na CPU, detalhes sobre o uso da memória RAM, Swap, disponibilidade para execução de programas no sistema, etc. Tem uma saída semelhante ao comando ps, com exibição continuamente atualizado na tela ou conforme definição do sysadmin. Isto é bastante útil quando existe a necessidade de monitorar frequentemente o uso de recurso ou o comportamento de algum processo em execução. Na execução deste comando, também é exibido um cabeçalho com informações úteis sobre a duração de execução, carga e status da CPU, uso de memória. Os processos que utilizam mais recursos são mostrados por primeiro, ou no topo da tela.


Sintaxe

top [opções]


Algumas opções do comando top:

-d → deine o tempo de atualização da tela. Se nenhum argumento for usado, o padrão é 5s;

-i → ignora processos ociosos (processos zumbis) e exibe somente processos que estejam usando recursos do sistema;

-n →exibe um número de iterações e depois finaliza, ao invéz de executar o top indefinidamente;

-u [user]→exibe somente processos pertencentes ao usuário setado;


Abaixo algumas teclas uteis depois que o comando top já está em execução.


espaço - Atualiza imediatamente a tela.

CTRL+L - Apaga e atualiza a tela.

h - Mostra a tela de ajuda do programa. É mostrado todas as teclas que podem ser usadas com o top.

i - Ignora o tempo ocioso de processos zumbis.

q - Sai do programa.

k - Finaliza um processo - semelhante ao comando kill. Você será perguntado pelo número de identificação do processo (PID). Este comando não estará disponível caso esteja usando o top com a opção -s.

-r → esta opção é muito importante para o comando top, pois possibilita a mudança de prioridade de um processo. Ao digitar r o prompt pede o número do processo e em seguida a sua prioridade que vai de -20 até +19; lembrando que as prioridade entre processos são inversamente proporcionais, ou seja -20 é a prioridade máxima de um processo, +19 é a prioridade mínima de um processo;

n - Muda o número de linhas mostradas na tela. Se 0 for especificado, será usada toda a tela para listagem de processos.

u - Permite especificar um único usuário ao qual se queira monitorar os processos. Monitora processos por usuário.


Eliminando Processos no sistema;


Kill


O comando kill envia um sinal de término para o processo em execução. É importante lembrar que para finalizar um processo é preciso ser o dono dele ou então ser o user root; também é necessário saber que, ao finalizar um processo, finalizamos todos os seus sub-processos. ( em outras palavras, "ao matar o processo pai, matamos também todos os processos filhos descendentes"). O comando kill finaliza um processo pelo seu pid;


Sintaxe

kill [opções] [sinal] [pid]


# kill 3245 → envia um solicitação de fechamento do processo 3245; se omitido o signum o sistema assume o valor 15 para encerramento do processo;

# kill -15 3245 → solicita ao processo terminar o que esta fazendo e finalizar o processo de pid 3245;

# kill -9 3245 → fechar o processo de pid 3245 imediatamente; este comando deverá ser usado para finalizar processos travados que não obedecem o comando kill 15 pid; é uma medida drástica e deve ser utilizado com cuidado.

Um processo de terminal rodando em foreground (primeiro plano) também poderá ser eliminado pressionando as teclas CTRL+C.

CTRL+X aborta um processo emexecução

Para parar momentaneamente a execução de um processo sem cancelar sua execução usa-se o CTRL+Z; O programa permanece na memória no ponto de processamento em que parou quando ele é interrompido, podendo ser ativado novamente em um momento oportuno; ao contrário do CTRL+C e CTRL+X que abortam o processo.


Killall


Este comando permite finalizar processo utilizando o seu nome ao invés do pid.


Sintaxe

killall [opções] [sinal] [processo]


As opções mais importantes são:

-i Pede confirmação sobre a finalização do processo.

-l Lista o nome de todos os sinais conhecidos.

-q Ignora a existência do processo.

-v Retorna se o sinal foi enviado com sucesso ao processo.

-w Finaliza a execução do killall somente após finalizar todos os processos.

Exemplo:

$ killall audacious;


Controle de Processos via terminal


Processos (programas) podem ser executados de duas maneiras: em primeiro plano (foreground) ou em segundo plano (background). O controle de processo é um recurso muito útil que permitem interromper e retomar a execução de processos, bem como coloca-los em segundo plano (background) e voltar para primeiro plano (foreground), conforme conviniência ou necessidade.

A principal vantagem em colocar um processo rodando em segundo plano é o fato que este não ocupa o prompt de comando, deixando-o livre para outras atividades. Podemos executar um processo em modo backgroun da seguinte maneira:

$ audacious &

- utilizando-se o símbolo & no final do comando o processo/programa fica rodando em segundo plano liberando o terminal para outras atividades. O prompt, neste caso, me retornou [1] 7182 que seria:

[1] numero de tarefa;

7182 que equivale ao pid do processo.

É possível mesmo depois de ter inicializado um processo em modo foreground coloca-lo em modo background, para isso é necessário parar o processo em execução com o comando CTRL + Z, que deverá aparecer dessa maneira no terminal:

^Z

[1]+ Stopped audacious

em seguida emitir o comando bg 1 para inicializar o processo em background.


jobs


O comando jobs mostra os processos que estão parados ou rodando em segundo plano

$ jobs → este comando mostra quais processos estão rodando em modo background;

$ jobs -l → mostra o nome dos processos que estão rodando em modo background; e seus respectivos pids;

$ jobs -s → exibe o nome de cada processo em background;

$ jobs -p → exibe o pid de cada processo em background;


fg


Permite fazer um programa rodando em segundo plano ou parado, rodar em primeiro plano. Antes deve-se usar o comando jobs para ver o número do processo rodando em segundo plano ou interrompida, este número será passado ao comando fg para ativa-lo em primeiro plano.

fg [número] Onde número é o número obtido através do comando jobs.

Caso seja usado sem parâmetros, o fg utilizará o último programa interrompido (o maior número obtido com o comando jobs).


bg


Possibilita fazer um programa rodando em primeiro plano ou parado, rodar em segundo plano. Para fazer um programa que esta executando em primeiro plano rodar em segundo, é necessário primeiro interromper a execução do comando com CTRL+ Z, será mostrado o número da tarefa interrompida, use este número com o comando bg para iniciar a execução do comando em segundo plano.

bg [número] Onde: número do programa obtido com o pressionamento das teclas CTRL+Z ou através do comando jobs.


Prioridade entre processos em execução


Em sistemas GNU/Linux existe um recurso que possibilita ao administrador priorizar a execução de alguns processos em relação a outros de acordo com suas necessidades.


nice


Serve para configurar a prioridade da execução de um comando/programa na inicialização do processo. Para saber a prioridade de algum processo em execução deve-se analisar a coluna PR nos resultados produzidos pelo comando top ou ps -l. Na pratica, quanto mais alto a prioridade de um processo mais tempo de CPU o kernel aloca para este processo; a prioridade de um processo vai de -20 até +19, sendo inversamente proporcional, ou seja, quanto menor o número nice, maior será sua prioridade; por padrão os processos quando são criados, são criados com prioridade 0 (zero). Qualquer usuário pode criar processos com prioridade maior que zero, mas somente o user root poderá criar processos com nice negativos; ou seja, prioridades mais altas do que o padrão.



Sintaxe

nice [n ajuste] [comando]



# nice -n -10 firefox; → inicializa o processo firefox com prioridade de execução -10 (somente o root poderá inicializar este processo com esta prioridade);


Modificando prioridades de processos em execução


renice


Quando um processo já se encontra em execução e se deseja modificar a sua prioridade, usa-se o comando renice;

Sintaxe

renice [+ | - ] numero_nice [opçoes] alvos

opções:

-u → interpreta alvos como um usuário por exemplo;

-p → interpreta alvos como um número pid;

$ renice 18 609 → altera a prioridade do processo 609 para 18;

# renice -10 -u jorge -p 709 → este comando só pode ser usado pelo root e altera a prioridade de todos os processos criados pelo user jorge para -10 e também o processo com o pid 709;


tload


Este comando representa de forma gráfica a carga do sistema.

sintaxe

tload [opções]

Algumas opções

-s [num] - Mostra uma escala vertical com espaçamento especificado por [número]. É recomendável o uso de números entre 1 e 10 para melhor visualização da escala.

-d [num] - Especifica o intervalo entre atualizações, em segundos.


Referências:

SIQUEIRA, Luciano Antonio. Certificação LPI-1: 101-102. São Paulo: Linux New Media, 2009.

PRITCHARD, Steven et al. Certificação Linux LPI: Guia de referência nível 1: Exames 101 e 102. Rio de Janeiro: Alta Books, 2007.

FERREIRA, Rubem E. LINUX: Guia do Administrador de Sistemas. São Paulo: Novatec, 2008.

Guia Foca Linux, 2010. Disponível em : http://focalinux.cipsga.org.br/ . Acesso em 26 de junho de 2010.


domingo, 20 de junho de 2010

Simulado LPI

Caminhando junto com os amigos que encontramos pelo caminho e que buscam objetivos comuns, achei prudente linkar para um simulado elaborado pelo colega Reginaldo que também está se preparando para prestar exame LPI.
sourceforge.net/projects/simuladorlpi/

Segue instruções para realizar o simulado conforme orientação de "Leia-me" publicado pelo Autor. Visite também o blog do autor: http://webtuxrn.blogspot.com/

@autor: Reginaldo de Matias
e-mail: reginaldo.matias@gmail.com

no Windows
Requisitos: ter o Dev C++ instalado
Extrair o arquivo, irá criar o diretório com o mesmo nome
Na IDE Dev C++, abre o arquivo, que acabou de extrair e tecle F9 para
compilar.

no Linux
Requisitos: ter o compilador GCC instalado
Extrair, entre no diretório criado, compila e executa
$tar -xzvf simulador_LPI.tar.gz
$cd simulador_LPI
compilar
$gcc simulado.c -o simulado OU simplesmente $make
executar
$./simulado

se quiser marcar o tempo, que levou para fazer o simulado
$time ./simulado




O que é o LPI?

O Linux Professional Institute - LPI - é uma organização sem fins lucrativos, constituída em 1999 pela comunidade Linux, e, desde então, desenvolve um programa de certificação em sistemas GNU/Linux reconhecido internacionalmente por empresas, empregadores e profissionais de TI.


A certificação LPI está entre as 10 mais procuradas do mundo por profissionais da área de Tecnologia da Informação, segundo o site Certcities.com, especializado no assunto. Estima-se que exista entre 40 a 50 mil profissionais certificados em todo o mundo, deste universo, em torno de 5 ou 6% no Brasil.


Certificar-se é uma forma de atestar conhecimentos profissionais, ou seja, validar a eficiência de alguém em determinado assunto.


O programa de exames do LPI é aplicado mundialmente por intermédio da Pearson VUE e da Thomson Prometric em seus centros de certificação e está também disponível na forma de exames tradicionais, aplicados em papel. Exames de LPI também são aplicadas em grandes eventos e feiras de Software Livre, como anualmente ocorre na FISL em Porto Alegre.


Fonte: http://www.lpibrasil.com.br

Trabalhando com curingas

Como em um jogo de baralhos, caracteres curingas ou metacaracteres servem para significar muitas coisas, tais como parte do nome de um arquivo ou diretório. Trata-se de um recurso muito útil para a localização de arquivos em um sistema GNU/Linux.

Os símbolos grifados em vermelhos na primeira coluna, são símbolos curingas; a segunda coluna é exemplo de aplicação de símbolos curingas.

Curinga

Discrição

*

ls meuarq* → busca todos os caracteres que precederem o caracter curinga;

?

ls meu?rq → busca qualquer caracter que estiver ocupando o espaço do curinga;

[xy]

ls te[xy]to → busca uma ocorrência de x ou y no local especificado pelo curinga;

[!xy]

ls te[!xy]to → busca qualquer caracter no local especificado pelo curinga, excluindo x e y; qualquer coisa, menos x e y;

[a-z]

ls te[a-z]to → busca qualquer ocorrência especificado no curinga comprendendo caracteres dque vão de “a” até “z”;

[a-z,1-100]

ls te[a-z,1-100]to → busca qualquer ocorrência especificado no curinga comprendendo caracteres de “a” até “z” e os números de 1 a 100 que possivelmente possam estar no local do curinga;

[!a-f]

ls te[!a-f]to → corresponde a qualquer ocorrência de caracter, excluindo os caracteres situados na faixa de “a” até “f”;


Referências:

SIQUEIRA, Luciano Antonio. Certificação LPI-1: 101-102. São Paulo: Linux New Media, 2009.

PRITCHARD, Steven et al. Certificação Linux LPI: Guia de referência nível 1: Exames 101 e 102. Rio de Janeiro: Alta Books, 2007.

FERREIRA, Rubem E. LINUX: Guia do Administrador de Sistemas. São Paulo: Novatec, 2008.



sábado, 19 de junho de 2010

Empacotadores, Compactadores e Desempacotadores de Arquivos

São softwares especializados que permitem "empacotar" e reduzir ("compactar") um arquivo/diretório ou um conjunto de arquivos/diretórios de forma organizada de maneira que estes ocupem menos espaço em disco e sirvam para backup, se eventualmente for necessário.
Utilitários de compactação de arquivos foram largamente utilizados no passado, quando as mídias de armazenamento eram caras e escassas. Os principais compactadores/empacotadores de arquivos são:

gzip

É praticamente o compactador padrão do GNU/Linux, possui uma ótima taxa de compactação e velocidade. A extensão dos arquivos compactados pelo gzip é a .gz

Sintaxe:
gzip [opções] [arquivos]


# gzip arq.txt - Compacta o arquivo arq.txt;
# gzip -d arq.txt - Descompacta o arquivo arq.txt;
# gzip -t texto.txt.gz - Verifica a existência de erro no arquivo texto.txt.gz;
# gzip -r diretorio – Compacta recursivamente;

bzip2

É um novo compactador que vem sendo cada vez mais usado porque consegue atingir a melhor compactação em arquivos texto se comparado aos já existentes (em conseqüência sua velocidade de compactação também é menor; quase duas vezes mais lento que o gzip). Suas opções são praticamente as mesmas usadas no gzip e você também pode usa-lo da mesma forma. A extensão dos arquivos compactados pelo bzip2 é a .bz2.

Sintaxe:
bzip2 [opções] [arquivos]


Opções

d - Descompacta um arquivo;
f - Força a compactação, compactando até mesmo links;
r - Compacta diretórios e sub-diretórios;
l [arquivo] - Lista o conteúdo de um arquivo compactado pelo bzip2;
t [arquivo] - Testa o arquivo compactado pelo bzip2.
c [arquivo] - Descompacta o arquivo para a saída padrão.
[num], - O uso da opção - [número] permite especificar uma compactação individualmente usando números entre 1 (menor compactação) e 9 (melhor compactação). É útil para buscar um bom equilibro entre taxa de compactação/velocidade (especialmente em computadores muito lentos).

Exemplos:

# bzip2 -9 texto.txt - Compacta o arquivo texto.txt usando a compactação máxima;
# bzip2 -d texto.txt.bz2 - Descompacta o arquivo texto.txt;
# bzip2 -9 *.txt - Compacta todos os arquivos com extensão .txt no diretorio atual;
# bzip2 -t texto.txt.bz2 - Verifica o arquivo texto.txt.bz2;

zip

Utilitário de compactação compatível com pkzip (do DOS) e trabalha com arquivos de extensão .zip. Possui uma ótima taxa de compactação e velocidade no processamento dos arquivos compactados (comparando-se ao gzip). Para a descompactação de arquivos .zip no GNU/Linux, é necessário o uso do utilitário unzip.

Sintaxe:
zip [opções] [arquivo-destino] [arquivos-origem]


# zip textos.zip textos.txt - Compacta o arquivo textos.txt para o arquivo textos.zip;
# zip textos.zip *.txt - Compacta todos os arquivos com a extensão .txt para o arquivo textos.zip (compare o tamanho do arquivo compactado digitando ls -la).
# zip -r textos.zip /usr/*.txt - Compacta todos os arquivos com a extensão .txt do diretório /usr e sub-diretórios para o arquivo textos.zip.
# zip -9 textos.zip * - Compacta todos os arquivos do diretório atual usando a compactação máxima para o arquivo textos.zip.
# zip -T textos.zip - Verifica se o arquivo textos.zip contém erros.

unzip

Descompacta arquivos .zip criados com o programa zip. Este programa também é compatível com arquivos compactados pelo pkzip do DOS.

# unzip arquivo.zip (existe um monte de opção de descompactação... ver guia foca linux II)

rar

rar é um compactador desenvolvido por Eugene Roshal e possui versões para GNU/Linux, DOS, Windows, OS/2 e Macintosh. Trabalha com arquivos de extensão .rar e permite armazenar arquivos compactados em vários disquetes (múltiplos volumes).

Sintaxe:
rar [ações] [opções] [arquivo-destino.rar] [arquivos-origem]

opções

a - Compacta arquivos;
x - Descompacta arquivos;
t - Verifica o arquivo compactado em busca de erros, testa o arquivo;
r - Repara um arquivo .rar danificado;
l - Lista arquivos armazenados no arquivo compactado;

# rar a texto.rar texto.txt - Compacta o arquivo texto.txt em um arquivo com o nome texto.rar;
# rar x texto.rar - Descompacta o arquivo texto.rar

tar

O tar não é um compactador e sim um "arquivador" (ele junta vários arquivos em um só), mas pode ser usado em conjunto com um compactar (como o gzip, zip, bzip2, etc) para armazena-los compactados. O tar também é muito usado para cópias de arquivos especiais ou dispositivos do sistema.

empacotar arquivos [c=cria; t=teste; x=descompacta]

Sintaxe:
tar [opções] [arquivo-destino] [arquivos-origem]

Empacotar Arquivos

# cd /tmp
# tar -cvf bkp_etc.tar /etc (somente empacota) com este comando crio um bkp do diretório /etc na diretório local; neste caso no diretório /tmp

c - Para criar um backup;
v - (verbose) Mostra detalhes para você na hora de criar;
f - Para indicar o nome do arquivo. Essa opção sempre vem por último, pois é ela quem define o nome do arquivo.

Empacotar e compactar arquivos

Para dizer para o tar que irei executar ele com mais um compactador tenho que acrescentar uma opção ao comando que fizemos:

z - Para compactar com GZIP
j - Para compactar com BZIP2

# cd /tmp
# tar -cvzf bkp_etc.tar.gz /etc (empacota e compacta com gzip) com este comando cria um bkp e compacto o diretório /etc na diretório local.
c - Para criar um backup
v - (verbose) Mostra detalhes para você na hora de criar; -
f - Para indicar o nome do arquivo. Essa opção sempre vem por último, pois é ela quem define o nome do arquivo.
z - Para compactar com GZIP

# cd /tmp
# tar -cvjf bkp_etc.tar.bz2 /etc (empacota e compacta com bzip2) com este comando cria um bkp e empacoto o diretório /etc na diretório local -
c - Para criar um backup
v - (verbose) Mostra detalhes para você na hora de criar
f - Para indicar o nome do arquivo. Essa opção sempre vem por último, pois é ela quem define o nome do arquivo.
j - Para compactar com BZIP2

Testar arquivos compactados

# tar -tvf bkp_etc.tar (arquivo empacotado)
# tar -tvzf bkp_etc.tar.gz (arquivo empacotado e compactado)
# tar -tvjf bkp_etc.tar.bz2 (arquivo empacotado e compactado)

Descompactar arquivos

# tar -xvf bkp_etc.tar (arquivo empacotado)
# tar -xvzf bkp_etc.tar.gz (arquivo empacotado e compactado)
# tar -xvjf bkp_etc.tar.bz2 (arquivo empacotado e compactado)

Descompactar arquivos

Caso queira descompactar no / para substituir o /etc antigo no caso de um backup temos que especificar isso com a opção -C:

# tar -xvf bkp_etc.tar -C / (arquivo empacotado)
# tar -xvzf bkp_etc.tar.gz -C / (arquivo empacotado e compactado)
# tar -xvjf bkp_etc.tar.bz2 -C / (arquivo empacotado e compactado)

Para um Administrador de sistemas GNU/Linux, sabendo isso sobre empacotadores/compactadores já consegue realizar a maior parte de suas atividades cotidianas.

Referências:

SIQUEIRA, Luciano Antonio. Certificação LPI-1: 101-102. São Paulo: Linux New Media, 2009.

PRITCHARD, Steven et al. Certificação Linux LPI: Guia de referência nível 1: Exames 101 e 102. Rio de Janeiro: Alta Books, 2007.

FERREIRA, Rubem E. LINUX: Guia do Administrador de Sistemas. São Paulo: Novatec, 2008.

Guia Foca Linux, 2010. Disponível em : http://focalinux.cipsga.org.br/ . Acesso em 19 de junho de 2010.


Comandos para gerenciamento de arquivos e diretórios

Buenas!

Resumidamente os comandos para gerenciamento de arquivos e diretórios são os comandos cp, mv, rm, mkdir, rmdir e touch; seguidos de suas opções.

# cp [opções] arquivo destino

O comando cp serve para copiar arquivos e diretórios. Pode copiar um único arquivo/diretório ou uma sequencia de arquivos/diretórios recursivamente, usando os parametros necessários para isso.

# cp -R → copia recursivamente;
# cp -d → preserva os links ao copiar um arquivo;
# cp -f → força a sobrescrita, gravando por cima de um arquivo destino, se este existir;
# cp -v → modo verbose;
# cp -i → pede confirmação antes de sobrescrever;
# cp -p → conserva as propriedades do arquivo (permissões, dono, data, hora, etc);
# cp -a → faz o mesmo que "cp -dpR" de forma combinada;

# mv [opções] arquivo destino

É usado para mover ou renomear arquivos/diretórios. O comando mv não altera os atributos do arquivo ou diretório.

# mv -f → força a remoção do arquivo;
# mv -i → solicita confirmação de (modo interativo);

# rm [opções] arquivo

É utilizado para remover arquivos e diretórios vazios. Para remover arquivos é necessário ter permissão de escrita no diretório que o contém, mas não necessariamente sobre o arquivo dentro do diretório;

# rm -d → remove diretórios, mesmo que não estejam vazios;
# rm -f → força a remoção de arquivos protegidos contra escrita;
# rm -i → modo interativo, solicita confirmação antes de remover;
# rm -R, -r → modo recursio;

# mkdir [opções] diretório

Server para criar um ou mais diretórios abaixo do diretório atual ou em qualquer local em um sistema GNU/Linux. mkdir poderá ser utilizado para criar vários diretórios juntos, exempleficando: $ mkdir dirsuperior dirinferior. Neste ponto é necessário prestar atenção como isso se organiza; da maneira como foi criado dois diretórios no mesmo comando, os diretórios ficaram no mesmo "nível", porém se eu utilizar o comando com a opção -p, o "dirinferior" estará um nível abaixo do que o dirsuperior. Exempleficando: $ mkdir -p dirsuperior/dirinferior; ficando edentados.

# mkdir -p → cria diretórios edentados;
# mkdir -m → cria diretórios e define as permissões de acesso.

Ex. # mkdir -m 755 curso/informatica. A opção -p poderá ser combinada com a opção -m para criar o diretório pai, caso este não exista.

# rmdir [opções] diretório

É utilizado para remover diretórios vazios. Para que um usuário possa remover o diretório o mesmo deverá estar vazio e o usuario ter permissão de escrita no mesmo diretório.

# rmdir -p → remove diretórios vazios edentados;

# touch [opções] arquivo


# touch → server para mudar a data e a hora de acesso de um arquivo; se usado sem argumentos altera a data e a hora de criação e modificação de um arquivo para os valores atuais do sistema. Também é utilizado para criar um novo arquivo, caso este arquivo não exista.
# touch -m
→ altera apenas a data de modificação do arquivo;
# touch -a
→ altera apenas a data de acesso do arquivo;
# touch -t
→ altera outros valores de tempo;
# touch -t (com a opção -t é utilizado para alterar data e hora da criação do arquivo; sendo no seguinte formato: 200912161940 → 2009 12 16 as 19:40hs); observe que é na ordem decrescente,primeiro ano, depois mês, dia, hora e minuto.


Bom, espero que este post possa ser útil.