Categorias
Linux

Evitando múltiplos terminais – Trabalhando com telas

Terminais virtuais são como crianças: ter um, dois ou até três trazem alegria à sua vida, mas mais do que isso põem tensão nos seus recursos. Quando trabalhando remotamente, algumas pessoas se vêem sem a possibilidade de abrir múltiplos terminais, então simplesmente abrem várias conexões SSH na mesma máquina. Isto não é apenas um desperdício de tráfego, mas também um sinal de que você é um iniciante - o que você não é, certo? Veteranos sabem que há uma maneira muito melhor para abrir múltiplos terminais e isso vem na forma do programa de telas GNU. Para começar, abra um terminal, digite screen e tecle Enter. Seus terminal será substituído por um console vazio e você pode pensar que nada aconteceu, mas na verdade aconteceu - como você verá.

Digite qualquer comando que quiser, ex: uptime, e tecle Enter. Agora pressione Ctrl+a depois c e você poderá ver outro terminal em branco. Não se preocupe, seu antigo terminal ainda está lá e ainda ativo; este é um novo. Digite outro comando, ex: ls.

Agora pressione Ctrl+a depois 0 (zero) - você verá seu terminal original novamente. Como você pode ver, Ctrl+a é a combinação que sinaliza que um comando está para vir - Ctrl+a depois c cria um novo terminal e Ctrl+c depois um número o leva ao respectivo terminal. Você pode usar Ctrl+a depois Ctrl+a para trocar para a janela selecionada anteriormente, Ctrl+a depois Ctrl+n para trocar para a próxima janela ou Ctrl+a depois Ctrl+p para trocar para a janela anterior. Para fechar janelas apenas digite exit.

Quando sua última janela fechar você também sairá do screen e será impresso na tela 'screen is terminating' para lhe lembrar. Como alternativa - e isto é o melhor coisa sobre tela - você pode pressionar Ctrl+a depois d para desanexar sua sessão de tela. Depois, de outro computador mais tarde, utilizar screen -r para recuperar de onde deixou com todos os programas e saídas intactos - mágico!

Mais em Truques de linha de comando

Categorias
Linux

SSH pelo proxy

Túneis criptografados são uma maneira útil para estabelecer uma conexão segura entre seu computador local e uma máquina remota ou servidor. Se você usar VNC, a máquina cliente remota, provavelmente você está usando um túnel; uma técnica sensível pe utilizar SSH, que é mais comumente empregada para logins remotos.

Um dos melhores usos de túneis SSH é o acesso ao Webmin, a ferramenta de configuração remota que é executada num servidor web. Você pode mudar quase tudo em seus sistema usando o Webmin, então não é inteligente deixá-lo aberto à internet. Mas se você desabilitá-la, você perde a possibilidade de configurar sua máquina. Você pode dar um jeito nisso através de túneis SSH pela porta que o Webmin usa para sua máquina local, como abaixo:

ssh -L 8090:localhost:10000 remotehost

Apenas aponte o servidor web em https://localhost:8090 para conectar ao servidor Webmin remoto. Você pode também encaminhar um serviço proxy usando SSH. Se você estivesse em uma localização onde não é possível acessar o Google ou o eBay, por exemplo, você pode criar um túnel para o servidor proxy e navegar de lá. Muitas distribuições incluem um servidor proxy, como o Squid. É preciso que seja instalado e ativo na máquina remota primeiro. Squid utiliza a porta 3128, então o comando para o túnel com o Squid seria algo como:

ssh -L 8090:localhost:3128 remotehost

Então é apenas uma questão de configurar seu navegador para usar localhost:8090 como o servidor proxy, e todas as subsequentes requisições serão passadas através do túnel SSH. Usar um servidor proxy desta maneira possibilita que você conecte a outras máquinas no proxy da rede local, como 192.168.1.1 o que também inclui serviços como configuração de servidores roteadores.

Mais em Truques de linha de comando

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.