Categorias
Linux

Nice, nice, baby

Muitos usuários Linux conhecem o comando nice, mas poucos realmente sabem como usá-lo. Nice é um dos comandos que soa bem mas que você nunca lembra uma razão para usá-lo. Apesar disso, ele pode ser incrivelmente útil. Nice pode alterar a prioridade de execução de um processo, dando-o um maior ou menor percentual do processador. Normalmente ele é manuseado pelo agendador de tarefas do Linux. O agendador garantirá que processos com uma maior prioridade (como aqueles que envolvem entradas do usuário) terão seu compartilhamento dos recursos. Isto assegura que mesmo quando seu sistema está usando 100% da CPU você continua apto a movimentar as janelas e clicar com o mouse.

No entando, o agendador nem sempre trabalha sem problemas; certas tarefas podem sobrecarregar seu computador. Este pode ser um desobediente comando find que foi disparado por um script de limpeza da distribuição; ou a codificação de um grupo de arquivos de vídeo que levam seu computador a uma parada.

Comumente você caçaria estes processos com um comando top antes de matá-los. Nice apresenta uma alterativa mais sutil e útil. Ele reduz a prioridade das tarefas afetadas de maneira que o seu sistema continue funcional enquanto continua a executar os processos afetados. Executar um comando com uma prioridade diferente é tão simples quanto:

nice --10 updatedb

Este comando executa o updatedb com prioridade reduzia a -10. Se você executar um top, verá o valor nice abaixo da column identificada como 'NI'.

Caso queira reduzir a prioridade de um programa em execução, utilize o comando renice com o ID do processo:

renice -10 -p 1708217082: old priority 0, new priority -10

Este comando também reduz a prioridade do processo em 10 e, dependendo do valor nice dos outros processos, diminuirá o total de tempo de CPU que será compartilhado com outras tarefas.

Categorias
Linux

Papéis-de-parede do Gconf

Gconf funciona quase como o editor do registro do Windows e permite que você tenha acesso às mais variadas opções e configurações escondidas na aplicação e que não ficam editáveis por outros caminhos. Você pode navegar por todas os parâmetros possíveis disparando o Gconf-editor de um terminal. É uma interface para milhares de configurações que o Gonme mantém no plano de fundo.

Para encontrar o caminho para o plano de fundo da sua área de trabalho, abra a pasta Desktop seguido de Gnome e Background. Será mostrada uma lista de configurações que são aplicáveis para plano de fundo da sua área de trabalho. Isso inclui como sua imagem é escalada, valor de opacidade etc. O caminho para a imagem é encontrada no parâmetro picture_filename.

O mais engenhoso é que você pode trocar estas configurações do terminal e, então, por scripts próprios. Uma vez que você encontrou o parâmetro que quer modificar usando o Gconf-editor, use gconftool-2 para alterá-lo e sincronizar a mudança para que seja atualizada imediatamente. O comando a seguir muda seu plano de fundo para test.png:

gconftool-2 --type str ---set /desktop/gnome/background/ picture_filename test.png

Usamos exatamente o mesmo caminho que usamos ao navegador por pastas no Gconf-editor. O tipo de parâmetro define o valor como uma string porque o nome do arquivo é somente texto. Você pode trocar set por get para mostrar o caminho para sua imagem atual da área de trabalho. Agora tente mudar ícones configurando o modo padrão do gerenciador de arquivos or até adicionar contas ao Evolution.

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'.