Independentemente da distribuição Linux que você tenha escolhido para o seu servidor ser, Debian/Ubuntu ou CentOS, o UNIX, por baixo dos panos, será bem semelhante, assim como o OSx do seu Mac.
E isso é uma coisa boa, já que é possível compilar uma série de dicas que podemos usar para facilitar nosso dia a dia na administração desses sistemas.
O comando de ajuda
Sempre que você tiver dúvidas sobre quais as opções de tal comando, digite –help na frente do comando (ex.:tail –help), e serão mostradas todas as opções e, caso precise de mais ajuda, acesse o manual, digitando man (ex.: man tail).
Instalando pacotes
Seja apt-get ou yum, quando quisermos instalar um pacote yum install ou apt-get install seremos perguntados se “temos certeza” de que queremos instalar. É possível pular essa confirmação apenas passando a opção -y junto do install:
apt-get install -y ou yum install -y
Também funciona com o remove.
Criando atalhos personalizados
Você já deve ter alguma experiência com UNIX e sabe que o comando ls é responsável por listar arquivos e diretórios, porém, ele não mostra arquivos ocultos nem maiores informações, como as permissões ou quem é o dono daquele arquivo.
Com o comando ls -l, listamos essas informações a mais, mas se quisermos ver os arquivos ocultos, também, precisamos da flag -a, ficando ls -la.
Digitar quatro letras e um hífen pode não parecer grande coisa. Mas e se reduzirmos esse esforço para apenas duas letras mais simples de ser alcançadas no teclado, como ll e la?
O comando alias existe exatamente para isso. Podemos fazer diretamente no terminal:
alias la=”ls -laG”
O único porém é que perderemos essa customização quando o terminal for reiniciado. Se quisermos mantê-la permanentemente, precisamos adicionar essa linha no arquivo .bash_profile (ele é carregado toda vez que abrimos o terminal e aplica os scripts que colocarmos nele).
Edite o .bash_profile do seu usuário, com vim ~/.bash_profile, e adicione os alias que julgar necessários.
Dica rápida: se você digitar apenas 1s,ll ou algum outro atalho personalizado que você criou, vai listar o conteúdo do diretório atual. Mas se você quiser ver o conteúdo de qualquer diretório, sem necessariamente precisar entrar nele, digite o comando e depois o diretório de interesse, exemplo:
ll /var/www/
Assim, eu consigo ver o que tem dentro de /var/www sem precisar sair de onde eu estava.
O comando tail
Administrar um servidor está ligado diretamente a entender como ele está se comportando e como as aplicações que estão rodando nele estão respondendo ou retornando erros. Saber como ler ou debugar bem um log de erros pode ser de grande ajuda para você.
O comando tail sozinho funciona como o cat − apenas mostra o conteúdo de certo arquivo (exceto que o tail se limita a mostrar apenas as últimas linhas desse arquivo, enquanto o cat joga para o output todo o arquivo).
O tail possui uma opção bem interessante, que lhe permite “escutar” as alterações em um arquivo, mostrando em tempo real qualquer adição de conteúdo. Toda vez que alguém acessa o seu site, é gravada uma entrada no access.log do servidor web.
tail -f /var/log/nginx/access.log
Faça um teste: deixe uma aba do terminal com o comando acima e acesse qualquer URL da sua aplicação. Instantaneamente, vai aparecer no terminal o registro de sua visita.
Misturando com o pipe
Lembra que eu falei sobre interpretar bem um log?
Para isso, precisamos ser capazes de localizar informações no nosso log.
Sabemos que o cat mostra na tela todo o conteúdo de certo arquivo, mas, e se quisermos ver apenas certo padrão? Por exemplo, num arquivo de erros do Apache quisermos ver apenas os erros que tal IP viu?
Podemos fazer o seguinte:
cat /var/log/apache2/error.log | grep “client 187.12.34.567”
Logicamente, trocando o IP ali.
Assim como podemos fazer isso com qualquer parte da linha de log, como se eu quiser olhar apenas as linhas de erro que possuem “mysql_num_rows()”:
cat /var/log/apache2/error.log | grep “mysql_num_rows()”
E uma dica interessante aqui é adicionar no seu .bash_profile um highlight para o grep:
alias grep=’grep –color=auto’
Assim, quando o grep encontrar o padrão que você pediu, ele será mostrado “colorido” na tela, facilitando a visualização do que foi procurado.
Apagando o conteúdo de arquivos completamente
Deletar um arquivo é fácil. Basta usar rm ou rm -r para diretórios. Mas e se quisermos apagar apenas o conteúdo daquele arquivo, sem deletar o arquivo?
Imagine um log ou um script de centenas de linhas. Entrar no arquivo, selecionar tudo com o vim e apagar não é nada prático.
Para isso, é bem mais simples fazer um:
echo -n > /var/arquivo
Com o echo -n estamos escrevendo um “vazio” sem “nova linha” dentro do arquivo. Se tivéssemos o interesse de realmente escrever algo, bastaria colocar a string depois do echo:
echo “Algum texto qualquer” > /var/arquivo
Assim escrevemos dentro do arquivo sem ao menos abri-lo com o vim.
O > (sinal de maior que) vai substituir tudo o que há no arquivo pela nova string. Se quisermos adicionar conteúdo, em vez de trocar, usamos dois sinais de >>
echo “Adicionando texto” >> /var/arquivo
O novo texto será adicionado após a última linha do arquivo.
Criando diretórios
Okay, criar diretórios é simples, basta um mkdir <nome_do_diretório></nome_do_diretório>, mas e se precisarmos criar vários diretórios encaixados?
public/css/fonts
Teríamos de digitar
mkdir public
cd public
mkdir css
cd css
mkdir fonts
O que é bastante chato, uma vez que para cada novo diretório filho temos de estar dentro do pai dele antes de usar o mkdir novamente. Felizmente, existe a opção -p, possibilitando-nos criar uma árvore completa com um só comando:
mkdir -p public/css/fonts
Apagando com confirmação recursiva
Tenho quase certeza de que você já precisou apagar um diretório .git e, por ser um diretório oculto, cheio de arquivos que não podem ser apagados diretamente, um simples
rm -r .git
faz com que você tenha de confirmar a exclusão de dezenas de arquivos com um y (yes). O que é bastante chato! Ainda bem que existe o comando yes.
Digite apenas yes no seu terminal e vai imprimir um y embaixo do outro infinitamente, até você parar a execução com um Ctrl + C. Esse comando se encaixa perfeitamente em situações como a que eu descrevi:
yes | rm -r .git
O diretório .git será apagado sem nenhuma confirmação manual nossa.
Executando diversos comandos em uma única linha
Muitas vezes, precisamos executar diversos comandos ou passar para um colega de trabalho, e enviar diversas linhas é um tanto demorado. Podemos “concatenar” comandos para serem executados com uma única linha, utilizando o operador &&. Desde que o comando anterior responda algo diferente de falso, o próximo comando será executado. Exemplo:
cd /var/www/ && ll
Vai entrar na pasta /var/www, e depois vai listar o conteúdo dela utilizando o atalho que criamos acima.
Concluindo
Ainda há muitas outras coisas para ajudá-lo a administrar seu servidor, mas fica para um próximo post.
William Moraes
Colunista UOL HOST