Categorias
Linux

Oirartnocoa

O comando mais comum para ler um arquivo de texto é cat (ou less se você quer ler página a página, mas não é sobre isso que estamos falando). Ele inicia do início e termina no final, o que é totalmente lógico mas não é sempre isso que precisamos. Se você quer ler um arquivo ao contrário (digo, quando precisamos ler um arquivo de log e você precisa da entrada mais recente primeiro), apenas execute cat ao contrário. Isso mesmo: tac faz o mesmo que cat ao contrário.

E caso você não queira uma ordem específica mas quer as linhas da saída aleatoriamente misturadas? Para isso usamos o comando shuf. Agora não será particularmente útil para arquivos de log (OK, é completamente inútil para arquivos de log), mas e se você quer uma lista de arquivos de música para passar ao tocador de músicas? A entrada não precisa ser um arquivo, pode ser uma entrada padrão, então você pode tocar seus arquivos Ogg Vorbis aleatoriamente com:

ls -1 ~/music/**/*.ogg | shuff | mplayer -playlist -

ou

mplayer $(ls -1 ~/music/**/*.ogg | shuff)
Categorias
Linux

Janela remota

O Sistema de Janelas X usa um modelo cliente-servidor para criar um monitor. Na maioria das vezes você nem percebe, porque o cliente e o servidor são executados na mesma máquina, mas o sistema foi desenvolvido desta maneira para permitir que clientes X remotos se conectem ao servidor X. Você pode pensar em um cliente fino, quando o cliente X consiste em apenas um teclado e um monitor conectados ao servidor. O efeito colateral positivo é que esta funcionalidade está apenas disfarçada na fachada da sua máquina Linux.

O SSH encaminha sessões de janela X automaticamente, o que significa que se você iniciar uma aplicação numa máquina remota de um console SSH, a janela da aplicação aparecerá na máquina local. A janela está se comunicando com a máquina remota usando o protocolo X, o motivo de haver um atraso cada vez que você redimensiona a janela ou clica em algum lugar na interface.

xterm -display :0 -e klamav &

Se o comando acima é executado de um console SSH conectado a uma máquina remota, seria aberta a janela do Xterm e executado KlamAV na tela remota ao invés de na tela local - você não poderá na sua tela. Isto é útil se você precisa iniciar uma aplicação remotamente, como um cliente de e-mail ou uma varredura de vírus.

A parte importante do comando é o parâmetro de exibição. Aqui usamos :0, que é a primeira tela do sistema remoto. O X usa endereços IP e portas para especificar um destino e nós simplesmente omitimos o endereço, direcionando para a máquina local. Você pode também usar localhost:1 para especificar a segunda tela.

O parâmetro -e que o sucede irá executar a aplicação do Xterm aberto, iniciando KlamAV na mesma tela do console Xterm. Você também pode usar no comando nohup para que ao término da sessão SSH para que a aplicação que está executando remotamente não permaneça.

Categorias
Linux

Velhos favoritos do bash

É sempre válido revisitar comandos esquecidos do bash. Três dos mais úteis que parecem ter sido esquecidos no uso comum são o cut, paste e o comando de tradução, tr. cut e paste fazem exatamente o que você espera, e apesar de soarem banais, surpreende quão poderosos podem ser quando usados na linha de comando ou em scripts.

cut normalmente é um pouco mais útil do que o comando paste. Executar o cut recorta parte de uma linha e a redireciona para a saída padrão. Predeterminadamente, o comando usa tabulação como separador de campos, mas isto pode ser alterado usando -d, e os campos são selecionadas ao usar o indicador -f.

paste efetivamente permite que você possa mesclar conteúdos em colunas, como um cat vertical. A melhor maneira de ver como funciona é criando dois arquivos de texto, cada um com três linhas de dados separadas. A saída do paste será o conteúdo do primeiro arquivo numa coluna à esquerda no segundo arquivo.

O comando tr é usado para apagar saídas irrelevantes, como espaços ou tabulações. A opção mais útil é a -s, que remove espaços repetidos em seqüências de um simples caracter. Use a saída de ls -al, que gera uma longa lista de diretórios incluindo o tamanho dos arquivos preenchidos com espaços para melhor visualização. O comando tr pode ser usado para removê-los e colocar um simples caracter de espaço como separação de campos.

Um exemplo de como estes comandos podem trabalhar juntos:

ls -al --sort=size /usr/bin | tr -s ' ' | cut -d ' ' -f 5,8

A longa saída de ls é classificada e então transportada para o comando de tradução. Este remove o preenchimento, deixando os campos separados por um caracter de espaço. Depois o cut usa o caracter de espaço como um delimitador de campo e pega os campos 5 e 6 da saída. O que você tem é uma lista de arquivos, classificadas por tamanho, mostrando apenas o tamanho e o nome do arquivo.

Categorias
Linux

Descomprimindo o tar de maneira inteligente

A tarefa de extração de tarballs iniciar ao abrir um console, trocar para o diretórios do seu tarball e então digitar o comando tar seguido dos argumentos de acordo com o arquivo que você quer extrair. É aonde encontramos um leve problema. Admitimos que não é um grande problema, mas quando você faz isso repetidamente, começa a ser um incômodo real. O problema é que você precisa lembrar qual o tipo de arquivo que você vai extrair antes de autocompletar o nome do arquivo. Normalmente é bz2 ou gz, mas você precisa especificar o 'z' ou o 'j' antes de sabê-lo.

Podemos escrever um script usando um arquivo de comando para determinar o tipo de arquivo e depois passá-lo através da condição 'if' para determinar o comando correto de extração. Você pode preferir embutir os argumentos que usa sempre no script, mas neste caso eles são apenas transmitidos para o comando. O script inicia com a definição do tipo de arquivo, usando o código a seguir:

#!/bin/bash
FILE_TYPE=$(file -b $2|awk '{ print $1}')

Com o argumento 'b', o arquivo de comando retorna apenas uma pequena linha de dados, sendo o primeiro caracter o tipo de arquivo. Esta informação é extraída desta linha ao acoplar a saída através de awk. Depois apenas precisaremos de usar o 'if' para executar o comando correto.

if [ "$FILE_TYPE" = "bzip2" ]; then
tar "$1j" "$2"
elif [ "$FILE_TYPE" = "gzip" ]; then
tar "$1z" "$2"
fi

Obviamente, é simples adicionar seus próprios tipos e deixar esta parte mais compreensível. Será preciso salvar seu script com um nome conveniente (escolher lfx) e colocá-lo na sua pasta (como um ~/bin). Descomprimir arquivos tar será depois será simples ao digitar:

$ lfx xvf ~/testfile.bz2
Categorias
Linux

Manipule os codecs

O problema de ter muitos arquivos de vídeos é que eles estão em muitos formatos de arquivo diferentes - e há dúzias de codecs diferentes para codificar streams de áudio e vídeo.

Provavelmente você tem familiaridade com o maravilhoso MPlayer, mas o que você talvez não saiba é que é que há um utilitário irmão chamado MEncoder. Ele é desenvolvido a partir do mesmo código base do MPlayer e como resultado é capaz de converter para e dos mesmos formatos que seu consumado irmão. MEncoder funciona pela linha de comando e pode não ser tão intuitivo para iniciantes, pois há muitos parâmetros. Verifique na página man do MEncoder!

Basicamente o comando do mencoder usa quatro parâmetros diferentes para converter o arquivo. A primeira parte é a entrada, a segunda é a saída do codec de vídeo, a terceira para a saída do codec de áudio seguida do parâmetro final para a saída do comando. Um comando MEncoder típico parece como isso:

$ mencoder input.avi -ovc lavc -ovc -lavcopts vcodec=mpeg4:vhq:vbitrate=1200 -oac copy -o output.avi

Isso parece complicado, mas na verdade não é tanto. input.avi é o arquivo a ser processado, e -ovc lavc diz ao MEncoder qual é o codec de saída a ser usado. O próximo parâmetro são as opções de codec. Neste caso, especificamos MPEG4 (equivalente ao DivX) com variação de bit-rate de 1200. O -oac copy é aonde o codec de saída de áudio deve estar, mas neste caso estamos simplesmente copiando para arquivo fonte, que é o parâmetro final.

O que é interessante sobre o MEncoder é que ele realmente tira vantagens do sistema Linux. Por exemplo, você pode usar uma entrada de televisão para o arquivo-fonte, ou passar o vídeo através de um filtro. Você pode até remover as barras que você vê em filmes widescreen usando o comando crop.

Categorias
Linux

Apelidos para comando de exclusão segura

Todos conhecemos o terrível sentimento: você digita rm * e assim que seu dedo aperta o Enter, a horrível sensação de que você está no diretório errada lhe ataca, mas você pode apenas observar indefeso enquanto seu dedo completa sua pequena mas destrutiva jornada, enviando seus arquivos para uma piscina de zeros e uns.

Por padrão, muitos comandos Unix são destrutivos. rm apaga arquivos, cp e mv sobrescreve-os sem hesitação nem misericórdia. Há opções que adicionam um nível de segurança - os argumentos -i ou --interactive para os comandos acima irá lhe perguntar se você quer confirmar sua intenção a cada passo - mas se você tiver tempo de parar e pensar sobre usá-los, você teria tempo de checar se está no diretório correto ou algo parecido. Se você quer usá-los por padrão, adicione estas linhas a /etc/profile ou ~/.bashrc

alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

para que os comandos sejam executados com a opção -i por padrão. Você pode sempre usar -f se quiser habilitar o máximo da destrutividade.

Apelidar um comando não significa limitar a prevenção do armagedon do arquivo - você também pode adicionar opções que melhoram a saída de um comando, como adicionar -h a ls ou df para ver o tamanho em leitura humana como KB, MB ou GB.

Categorias
Linux

SSH reverso

O SSH é uma das ferramentas mais versáteis para Linux, mas a maioria das pessoas o utiliza apenas de uma maneira - usando o servidor para enviar dados para o cliente. O que provavelmente você não sabe é que também é possível trocar a lógica usual SSH e usar o cliente para enviar dados ao servidor. Pode parecer contratintuitivo, mas este acesso pode evitar que você tenha que reconfigurar roteadores e firewalls, e é também muito cômodo para acessar a rede corporativa de casa sem VPN.

É necessário instalar o servidor OpenSSH na sua estação de trabalho e a partir de então você deve digitar o que está a seguir para contruir um túnel para a porta SSH na sua máquina de casa.

ssh -R 1234:localhost:22 home_machine

Substitua home_machine pelo endereço IP da sua máquina de casa. Usamos a porta número 1234 na máquina de casa para a sessão de SSH encaminhada e esta porta precisa estar disponível para ser usada e desbloqueada pelo firewall local. Uma vez que você tenha configurado a conexão no trabalho, já pode digitar o seguinte para acessar as máquinas do trabalho de casa:

ssh workusername@localhost -p 1234

Todas as sessão da sua máquina do trabalho serão abertas e você poderá trabalhar como se estivesse no escritório. Não é difícil de modificar o mesmo processo para acessar arquivos do servidor ou até mesmo áreas de trabalho remotas usando VNC. O único problema que você pode encontrar é a expiração do tempo da primeira sessão SSH. Para resolver isso, abra /etc/ssh/sshd.conf na sua máquina do trabalho e tenha certeza de que contém 'KeepAlive yes' e 'ServerAliveInterval 60', pois com isso a conexão não cairá automaticamente.

Categorias
Linux

Ponha seus cds em ordem

Verdadeiros hackers Unix sabem que mudar diretórios pode ser feito de várias maneiras diferentes, e com várias características diferentes, então em breve qualquer um aprenderá que o humilde comando cd pode, na verdade, ser o melhor amigo deles. Você já deve saber que cd ~ lhe leva para o seu diretório home, mas hackers de verdade não gastam dois comandos em nada: apenas digite cd para ter o mesmo resultado. Se você apenas pôr em ordem aquele pequeno rabisco, ~ se torna - e você tem cd -, o comando para navegar de e até o próximo diretório.

Para usuários mais avançados, cd - não é suficiente, porque ele apenas permite que você vá entre o diretório atual e o anterior. Um esquema melhor é usar pushd e popd no lugar de cd. Desta maneira, ao invés de digitar cd diretorio, use pushd diretorio - isto lembra seu atalho completo. Quando você quer dar passos para trás, apenas digite popd e vá para o diretório anterior.

Finalmente, você não odeia quando você está em um diretório simbólico e você não tem idéia de onde está? Pior, executando pwd para imprimir o diretório de trabalho o faz parecer que você não está em um diretório simbólico. Se isto acontecer com você, apenas use o parâmetro -P (pwd -P) para resolver o link simbólico e mostrá-lo aonde você está. E se você quer entrar no diretório real ao invés do link simbólico, apenas use cd 'pwd -P'.

Categorias
Linux

Crie pacotes

Baixar o código-fonte de uma aplicação e compilar você mesmo. Esta é uma tarefa clara para 90% dos programas que existem por aí, mas pode causar problemas com dependências. Enquanto os vários gerenciadores de pacotes possuem seus meios de trabalhar com as dependências, aqui vai outra.

Quando construir a partir do fonte usando o próprio método padrão de ./configure && make && make install, instale CheckInstall primeiro. Você pode pegá-lo em www.asic-linux.com.mx/~izto/checkinstall caso não esteja nos repositórios da sua distribuição. Execute-o ao invés de make install que, no lugar de instalar os novos arquivos diretamente no seu sistema de arquivos, irá primeiro montar um pacote e então instalá-lo. CheckInstall funciona com pacotes Deb, RPM e Slackware. Você pode especificar o tipo no arquivo de configuração ou esperar que ele pergunte quando executado

./configure && make && checkinstall

Além do tipo de pacote, CheckInstall irá perguntar por outros detalhes. A maioria é opcional ou pode ser deixada no valor padrão, mas tenha certeza de que o nome é igual ao da versão anterior que você está substituindo, ou então o seu gerenciador de pacotes ficará confuso. Instalar com CheckInstall também permite a remoção simples do pacote, pois não há necessidade de manter o diretório fonte por perto e alguns programas nem possuem a opção make uninstall.

Categorias
Linux

Recupere espaço em disco

Ocupar 100% de uma participação pode ter um efeito desagradável no seu sistema. Quando serviços e outros programas não podem escrever nos seus arquivos de log ou não podem salvar dados em /var, você pode estar com problemas. Estes programas não poderão salvar seus dados e tipicamente encerrarão (ou, em alguns casos extremos, quebrar dramaticamente!). Para evitar isto, os sistemas de arquivo ext2 e ext3 reservam 5% da sua capacidade somente para processos root. Esta é uma boa idéia, mas 5% é muito em discos grandes - por exemplo, são 25GB num disco de 500GB. Além disso, não há necessidade de reservar nenhum espaço em um sistema de arquivos que não são usados para arquivos root, como /home.

A boa notícia é que isso pode ser alterado. Tune2fs é utilizado para ajustar vários parâmetros de um sistema de arquivo ext2 (ou ext3). Pode ser usado para trocar a etiqueta de um volume ou o número de montagens entre execução forçada do fsck e a hospedagem de outro, e outras configurações esotéricas, mas as opções nas quais estamos interessados são -m e -r. O primeiro altera o percentual dos blocos do sistema de arquivos reservados para o superusuário, enquanto o segundo usa um número absoluto de bloco. Então:

tune2fs -m 2 /dev/sda1

reduz a área reservada para 2% do sistema de arquivos, o que pode ser mais apropriado se você tem um sistema de arquivos grande em / ou /var. Se você está usando um disco de 500GB ou maior, esta é a melhor opção.

Esta linha de código:

tune2fs -r 0 /dev/sda1

define que o sistema de arquivos não terá blocos reservados, uma boa configuração para /home que não precisa de área reservada para o superusuário.