Verifique os processos que estão rodando e que não são os seus

Dificuldade: Especialista
Aplicação: Bash

Imagine a cena – você está pronto para uma partida rápida de Crack Attack contra um colega no escritório, mas para encontrar o jogo se arrasta um impasse, assim como você está prestes a bater o seu subordinado arrogante – o que poderia estar acontecendo para fazer a sua máquina estar tão lenta? Deve ser algum desses outros usuários, roubando o seu precioso tempo de CPU com seus experimentos científicos, servidores web ou outras coisas estranhas de geek!

OK, vamos listar todos os processos que não estão sendo executados por você!

ps aux | grep -v `whoami`

Ou, para ser um pouco mais inteligente, porque não listar apenas os dez maiores desperdiçadores de tempo:

ps aux --sort=-%cpu | grep -m 11 -v `whoami`

É provavelmente melhor executar isto como root, pois isso irá filtrar a maior parte dos processos vitais do plano de fundo. Agora que você tem a informação, você pode simplesmente matar seus processos, mas muito mais covarde é correr xeyes em seu desktop. Repetidamente!

De Dicas de Linux que todo geek deve saber

Dicas de Linux que todo geek deve saber

Fonte: Linux tips every geek should know

O que separa os usuários normais dos super-geeks? Simples: anos gastos aprendendo maneiras de desmantelar códigos, truques, dicas e técnicas que transformam grandes esforço num trabalho de um momento. Se você quer ganhar agilidade para colocar as mãos á obra, separamos 50 dicas fáceis de aprender para lhe ajudar a trabalhar com mais eficiência e obter o máximo do seu computador. Aproveite!

  1. Verifique os processos que estão rodando e que não são os seus
  2. Substituindo o mesmo texto em arquivos diferentes
  3. Consertar um terminal problemático

Linux sux

Na maioria das vezes, as pessoas usam su na linha de comando para se concederem privilégios de administrador de maneira que possam editar um arquivo de configuração importante. Mas também é possível encontrarmos usando su quando se está trabalhando no console e é preciso usar uma aplicação gráfica. Quando você tenta executar uma aplicação gráfica enquanto está autenticado com um usuário diferente, você recebe o seguinte erro:

Xlib: connection to ":0.0" refused by server.

O problema é que as chaves usadas para autenticação em sessões X não são válidas quando se usa um usuário diferente. Esta medida de segurança parece zelosa demais, mas é uma herança do sistema de um tempo em que as sessões X foram desenhadas para ser executadas através da rede. Há duas respostas para este problema.

A primeira é ter certeza de que a nova conta pode ser autenticada no servidor X. Isso utiliza o comando xhost para autenticação de novos usuários na janela da sessão X local. Apenas digite xhost +local:local com o usuário normal antes de trocar para o novo usuário e você verá ‘non-network local connections being added to access control list’ como saída. Agora é possível que você rode qualquer aplicação gráfica na mesma tela em que trocou de usuário. Se você quer ter este recurso a cada vez que você executa sua sessão X, simplesmente adicione o comando xhost ao seu arquivo .bashrc: ele será executado automaticamente a cada vez que você abre um terminal Bash.

A segunda solução é ainda mais fácil. É a substituição do comando su que transfere suas credenciais X para uma nova sessão automaticamente. O comando é sux, que você precisará instalar manualmente pelo gerenciador de pacotes da sua distribuição. Uma vez instalado, digite sux novousuario para trocar para o usuário com o qual você quer usar a visão X. Você perceberá que pode executar aplicações gráficas pela nova sessão sem nenhuma configuração adicional.

Mais em Truques de linha de comando.

Mensagens de texto

Como sabemos, computadores existem para fazer as tarefas monótonas com as quais não queremos nos incomodar. Isto significa que coisas como adicionar ou subtrair números, desenhar coisas em cores bonitas e lembretes a seus mestres todo-poderosos de anotações a vir. Há dúzias de aplicações que têm a função de lembretes e que acionam uma tela chata com pequenas mensagens informando que você está atrasado para o dentista. Mas você realmente não precisa de uma: você pode exatamente o mesmo tipo de funcionalidade usando um casal de comandos do bom e velho terminal. Os comandos em questão são at e xmessage.

O comando at é uma das ferramentais mais essenciais aos usuários que circulam de um ponto a outro. Em essência, você digita 4:57 pm today na linha de comando e o at abrirá um editor de texto primitivo. No editor, você simplesmentes adiciona cada comando que deseja executar às 4:57 e pressiona Ctrl e D para indicar o final do arquivo. Cada comando deve parecer exatamente como seria na linha de comando e você pode até usar formatos diferentes para hora, como 1657 para formato 24 horas ou também ‘now + 2 hours‘, ou ainda especificando o dia como ‘Saturday‘ ou ‘tomorrow‘.

O comando que precisamos para emitir a tela do alerta é xmessage. É uma ferramenta muito simples que data dos primeiros anos das janelas X e simplesmente abre uma pequena tela no seu monitor que inclui uma mensagem de texto e um botão para fechar. A sintaxe do xmessage seria:

xmessage -display :0.0 "You are late"

A parte ‘display‘ do comando é importante porque permite ao xmessage saber qual monitor deve ser usado. Se você adicionar o comando ao at, você tem uma maneira flexível de criar lembretes para si mesmo sem necessidade de recorrer a uma outra aplicação. É ainda mais fácil que usar o Cron, que pode ser desencorajador quando você que simplesmente executar algo como xmessage!

Mais em Truques de linha de comando.

Avante com o Bash

O terminal do Bash é uma das coisas que as pessoas menos se dão o direito de modificar. Isso é estranho, pois é é uma simples questão de alterar o texto de cumprimentos quando você abre o shell para algo mais útil. O terminal do Bash é usado pela maioria das distribuições como o nome de usuário seguido do domínio (rafael@dollar, no meu caso).

A chave para alterar o terminal repousa em variáveis dinâmicas, o que lhe permite incorporar informações ao terminal. Para criar o terminal usuário/domínio que muitas distribuições usam você poderia digitar o que está a seguir (ou adicionar ao ~/.bash_profile ou ~/.bashrc para tornar permanente):

export PS1="[\u@\h]$"

O comando export define a variável de ambiente PS1. Ela é usada para o valor do terminal, que é o que está contido entre as aspas após o símbolo de igual.

Este valor é feito de duas varíaveis dinâmicas em ambos os lados do @; \u> exibe o nome do usuário, enquanto \h insere a primeira parte do nome do servidor. O Bash inclui outras variáveis dinâmicas, incluindo \w para o atual diretório de trabalho, \d para a data atual ou \! para a posição atual no histórico do buffer. Se elas parecem familiares é porque são seqüências de escapa, encontradas em várias aplicações e linguagens de programação e usada para formatar strings.

Há outras seqüências, como as que se seguem, que trocam o nome da janela:

"\e]2;title\a"

Houve um tempo em que a impetuosidade do hacker seria o medida por quão obtuso e complexo era o comando do terminal e não há realmente um limite para o que você queira adicionar. Muitos usam laços condicionais simples para trocar o conteúdo do terminal no momento em que uma sessão do shell é iniciada, mas usando simples seqüências de escape é fácil de trocar o terminal padrão para algo mais útil.

Mais em Truques de linha de comando.

Ganhando argumentos

Não podemos ensiná-los a ser vitorioso em cada debate, mas podemos mostrá-lo como ser mestre em outro tipo de argumento: os da linha de comando. Você provavelmente conhece como fornecer múltiplos argumentos a um programa, como por exemplo:

someprog file1 file2 file3

O que é muito bom quando informa comandos manualmente, mas e quando precisa usar uma lista gerada por outro programa? Digamos, por exemplo, que você deseja que o Gimp abra dez imagens grandes de um diretório. Você poderia usar ls -l para encontrar quais são os maiores e então ter o trabalho de informar cada nome de arquivo em gimp arquivo1 arquivo2… Ou poderia a mágica xargs (presente em todas as distribuições).

ls -S --color=never | head -n10 | xargs gimp

xargs monta operações complicadas de linha de comando usando lista de arquivos para que você não precise digitá-las manualmente. Passe uma lista de arquivos ao xargs e ele os arranjará como arquivo1 arquivo2 arquivo3… como vimos anteriormente. Faz sentido? Considere o exemplo acima. Primeiro usamos ls para gerar a lista de arquivos do diretório atual (tendo certeza de que desabilitamos os códigos coloridos já que eles produzem caracteres indesejáveis). Então, usando o bom e velho pipe (|), enviamos o resultado para o utilitário head, que separa as primeiras dez ocorrências.

Agora então temos uma lista de dez arquivos. Como informamos ao Gimp que queremos abrí-los? Não podemos enviar diretamente os resultados de head, pois o Gimp interpretaria como se fossem simples dados gráficos. É aqui que o uso de xargs salva o dia: ele garante que o program cujo nome está a a seguir usará os dados como uma lista de arquivos ao invés de tentar trabalhar diretamente com eles. No nosso exemplo acima, ele diz “pegue os dez primeiros da lista gerada pelo head e então passe para o Gimp no formato tradicional arquivo1 arquivo2 arquivo3…”. Você pode fazer muitas coisas com xargs, tudo o que esperad uma lista de arquivos, separados por caracteres de nova linha ou espaços. Como outro exemplo, este apaga todos os arquivos com mais de dez dias (use com cautela!):

find . -mtime +10 | xargs rm

Mais em Truques de linha de comando.

Uma lição de history

Enquanto o autocompletar de comandos é um dos aspectos mais usados e adminirados do Bash, uma característica igualmente poderosa normalmente é ignorada. O armazenador de histórico, comumente usado para navegar para trás e para frente pela lista de comandos já executados, oferece muito mais possibilidades que  se pode imaginar. Enquanto é bem simples navegar pela lista, algumas vezes o comando desejado pode estar tão atrás no histórico que acaba sendo inviável. O comando history pode imprimir tudo o que está armazenada na tela. O uso mais óbvio para isso é redirecionar a saída do comando para o grep a fim de encontrar uma parte do comando a lembrar.

history | grep "command"

Se o comando ainda estiver no armazenador ele será mostrado em seguida com a posição que ocupa. O comando pode ser reexecutado através do seu número prefixado com o ponto de exclamação para marcar a posição. Por exemplo, !1016 executaria o comando no ponto 1016 do histórico do Bash. Outro truque é seguir o ponto de exclamação com uma parte do comando executado. O histórico será procurado e quando uma correpondência ocorrer, ela será executada.

!cd executaria o último comando cd que está no buffer. Infelizmente, os comandos não se adicionam ao histórico do buffer, então sua execução recursiva não é possível. Outra maneira de acessar o histórico de comandos é através da função de busca acessa ao pressionar Ctrl-R no terminal. Após pressionar a seqüência você será apresentado a um terminal de busca. Ao digitar o termo de buscar o primeiro comando que corresponder ao critério será exibido e ao pressionar Enter o comando será executado. O cursos esquerda ou direita insere o comando para o terminal, enquanto acima e abaixo lhe direcionam para o comando anterior e posterior, como usual.

Mais em Truques de linha de comando.

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.

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)

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.