Linha de comando: O poder do Linux na ponta dos seus dedos!
Uma das maiores, senão a maior virtude de um sistema operacional, é dar controle sobre todo o ambiente em que ele está instalado, seja em termos de software, seja em termos de hardware. E é justamente isso que o Linux possibilita e que faz com quem tenha o conhecimento necessário, torne-se um árduo defensor do software do pinguim.
Mas para dispor do “poder absoluto”, faz-se necessário lançar mão das famosas linhas de comando do Linux. Você sabe utilizá-las? O que é possível fazer via linha de comando? Vamos responder as estas perguntas e dar-lhe informações que vão ser muito úteis na tarefa de controlar sua máquina!
Por que as linhas de comando são importantes?
Antes de prosseguirmos, é importante destacar que este artigo é focado na administração de servidores de hospedagem compartilhada. Outro ponto que merece salientar, é que não é nossa proposta ser um guia mesmo que básico sobre linhas de comando no Linux, até porque não é algo que se consiga com um mero artigo e exige um aprofundamento bastante extenso e demorado, resultado também de prática aplicada a situações reais. Dito isso, vamos ao que interessa!
Sistemas operacionais estão presentes em praticamente qualquer dispositivo que utilizamos. Eles estão no notebook, no smartphone, na smart TV da sala ou quarto, no aparelho de TV por assinatura, no GPS do seu automóvel e até em algumas geladeiras. O papel deles é permitir a operação e utilização de recursos diversos, bem como ser a ponte entre aplicativos e hardware do dispositivo, resultando em funções que beneficiam de alguma maneira o usuário.
Porém, por padrão os fabricantes dão apenas um controle parcial ao que o usuário pode fazer e um limite de controle sobre o dispositivo, sabendo que a grande maioria dos usuários não tem interesse e por vezes, não têm a necessidade de ir além.
Essa condição de controle parcial do sistema usado, também se observa no Windows, no Mac, no Android, no iOS e em boa parte das distribuições Linux. Estamos falando do ambiente gráfico, ou seja, a interface colorida, cheia de imagens, ícones, janelas e que permite operar o sistema predominantemente por um mouse ou um toque na tela.
Indo além e pensando em um servidor de hospedagem de sites, a situação é um pouco mais abrangente e há painéis de controle que ampliam até onde um administrador de servidor pode chegar no trabalho de gerenciar o ambiente de hospedagem. Mas ainda assim, há limites razoavelmente restritivos de onde pode-se chegar.
E se o usuário quiser ou mesmo precisar ir além? Se você tem ao seu acesso um servidor Linux, a única resposta é: a linha de comando!
Suponhamos que você seja o responsável por um servidor dedicado ou mesmo um VPS, rodando WHM como painel de administração, tendo nesta máquina, 200 ou 300 ou mais contas de clientes. Se você suspeita que tenha problemas com excesso de envios de e-mail, as poucas ferramentas que o WHM oferece, dão informações e relatórios genéricos, mas não lhe permitem saber, por exemplo, em tempo real quantas conexões SMTP seu servidor está realizando, que IPs estão se conectando ao serviço, quais usuários estão logados no serviço de e-mail, entre outras informações.
É então que entra em cena a linha de comando. Usando de acesso SSH, um administrador consegue extrair todas as informações acima, bem como muitas outras, em poucos segundos. Mais que isso, é possível personalizar o tipo de pesquisa e resultado que se pretende de uma forma que nenhuma outra interface gráfica consegue oferecer.
Como usar a linha de comando do Linux?
Para poder contar com o poder e todo alcance que uma linha de comando lhe possibilita, há algumas condições necessariamente precisam ser atendidas:
-
Usuário root – os privilégios de root ou de super admin, são necessários para que 100% do que se pode fazer no Linux seja possível;
-
Acesso SSH – o acesso SSH (Secure Shell), é o que vai permitir que seja feito o acesso remoto ao servidor sob sua administração;
-
Conhecimento – é preciso conhecer e compreender a extensão e possibilidades de cada comando que o Linux coloca a sua disposição. Também é importante saber que existem algumas poucas particularidades, dependendo da distribuição Linux instalada no servidor;
-
Cautela – além do conhecimento, é preciso cautela e prática, pois o poder vem acompanhado de consequências que podem ser devastadoras, se os comandos não forem usados adequadamente. Executar rm -rf *, se não for esta a sua intenção, pode tornar um servidor inutilizável e mesmo que você disponha de um backup atualizado, pode lhe render uma boa dor de cabeça!
Exemplos de linhas de comando úteis na administração de um servidor web
A seguir vamos fornecer algumas linhas de comando que cobrem várias das situações mais comuns encontradas no dia a dia de quem administra um servidor de hospedagem compartilhada, ou mesmo um VPS, ou um servidor corporativo que hospede contas de e-mail, sites, bancos de dados, etc, para mostrar como é possível obter dados valiosos de maneira simples e rápida.
Além da linha de comando propriamente dita, comentaremos o que ela faz e uma breve explicação de como a “mágica acontece”, mas como não é nossa pretensão ensinar a “linguagem do Shell”, recomendamos que procure utilizar pesquisas ao MAN (manual) de cada comando no próprio shell, para descobrir eventuais alterações e ajustes para personalizar suas próprias linhas de comando.
Por fim, para ampliar o alcance e o poder que as linhas de comando têm, procure adquirir conhecimentos básicos de expressões regulares e da estrutura, funcionamento e dos arquivos de logs do Linux, em um servidor web, lembrando que no caso, alguns dos logs e seus respectivos caminhos, referem-se a um sistema que utiliza cPanel / WHM. Devem haver diferenças em sistemas que usam outros painéis de controle, bem como personalizações feitas pelo administrador.
Linhas de comando relacionadas ao serviço de e-mail
O exim_mainlog é o log que armazena 100% da atividade de e-mail, ou seja, todas as conexões SMTP feitas com outros servidores de e-mail, bem como as transações de e-mail realizadas, o que significa dizer datas, horários, remetentes, destinatários, assuntos das mensagens, status da conexão, etc.
Sendo assim, consiste de um log riquíssimo em termos de dados de tudo que foi enviado e recebido pelo serviço de e-mail Exim, que é o padrão do cPanel.
cat /var/log/exim_mainlog | grep "has exceeded the max emails per hour”
Retorna as contas, com respectivas informações, que excederam a quantidade de envios de e-mails permitida por hora. Aqui o comando CAT é usado para exibir o conteúdo do exim_mainlog no dispositivo de saída padrão e sua saída é passada via PIPE para o GREP, que efetua a busca e retorna apenas as linhas que contém a string procurada (has exceeded the max emails per hour).
tail -f /var/log/exim_mainlog | egrep "dovecot_virtual_delivery"
O comando TAIL quando usado sem argumentos, exibe as 20 últimas linhas de um arquivo. Na forma acima, usando o argumento “f”, exibe continuamente as últimas linhas que são inseridas em um arquivo de log. Combinado ao PIPE e ao EGREP, exibe as linhas de todas as mensagens que são entregues aos destinatários hospedados no servidor.
tail -f /var/log/exim_mainlog | egrep “SMTP connection from”
Assim como na linha de comando anterior, esta exibe todas as conexões SMTP feitas por outros servidores, bem como o total de conexões estabelecidas no momento.
cat /var/log/exim_mainlog | grep "<= usuario@meudominio.com” | wc -l
Nesta linha de comando, utiliza-se a saída do CAT, para procurar um determinado endereço de e-mail (usuario@meudominio.com) e contar quantas mensagens tal usuário enviou, por meio do comando WC, que coloca uma saída em cada linha. O atributo “l”, define a contagem de linhas.
ps aux | grep exim
O comando PS exibe informações de todos os processos do sistema. O uso do PIPE passa sua saída para o comando de busca GREP, que no caso vai exibir tudo relacionado ao EXIM, mas pode-se buscar outros serviços ou informações sobre processos do sistema que eventualmente deseja-se avaliar.
cat /var/log/exim_mainlog | grep "<= " | grep dominio
Novamente usando o CAT sobre o exim_mainlog para identificar todas as mensagens enviadas pelo domínio que se deseja procurar. Caso se deseje saber de uma data específica, basta acrescentar um outro GREP, conforme abaixo:
cat /var/log/exim_mainlog | grep “2019-07-24” | grep "<= " | grep dominio
Permissões
Parte da estrutura de segurança do Linux, é fundamentada em permissões e atributos de pastas e arquivos. Assim, seguem linhas simples e eficazes para determinadas situações que seja necessário certificar-se que o permissionamento indicado é aplicado.
find . -type f -exec chmod 644 {} \;
A linha de comando acima usa o comando FIND para procurar conteúdo que corresponda a arquivos (-type f) e ao encontrá-los, executa o comando CHMOD atribuindo permissão 644 a todos os arquivos encontrados na pasta em que é executado.
find . -type d -exec chmod 755 {} \;
É muito parecida com a linha de comando anterior, porém busca por diretórios a partir do diretório em que o comando é executado e aplica permissionamento 755 à todas as pastas.
Conexões
As conexões aos serviços são um importante meio de identificar várias situações em um sistema.
netstat -nap | grep imap | grep ESTABLISHED
A linha acima faz uso do comando NETSTAT que exibe status das conexões de rede para os serviços, passando sua saída via PIPE para o GREP, que no caso usamos para buscar pelo protocolo IMAP que esteja estabelecido, obtendo entre outras informações, todos os IPs conectados ao servidor sob tais condições. A mesma linha de comando pode ser alterada para procurar conexões do MySQL por exemplo.
Outros Logs
Os arquivos de logs do Linux e em particular do cPanel, são extremamente úteis, pois armazenam dados de praticamente tudo que acontece em um servidor e sendo assim, sabendo-se o que procurar e onde procurar, pode-se realizar um diagnóstico preciso de muitas ocorrências.
egrep "POST" /var/log/apache2/access_log | egrep "HTTP/1.1\" 200"
Na linha acima, fizemos uma busca nos logs do Apache para procurar todos os acessos bem sucedidos (status 200) usando o método POST. Ou seja, as tentativas de passar argumentos para uma página usando o protocolo HTTP.
Buscas semelhantes com base em informações que se deseja encontrar, podem ser feitas basicamente sabendo-se onde os arquivos de logs correspondentes são salvos. A seguir uma lista de alguns caminhos mais comuns, ressaltando que podem haver diferenças em alguns servidores devido a serviços alternativos que estejam instalados ou de acordo com interesses de administração do servidor em questão.
/var/log/message – Mensagens do sistema
/var/log/cron.log – Logs de cron jobs
/var/log/maillog – Log de conexões dos usuários aos serviços de e-mail
/var/log/kern.log – Logs do Kernel
/var/log/httpd/ – Logs de acesso e de erros do Apache
/var/log/mysqld.log – Logs do MySQL
/var/log/secure – Logs de autenticação SSH
/var/log/ - pasta que contém boa parte dos logs de diversos serviços
Como ressaltamos em alguns pontos do artigo, as linhas de comando acima, são exemplos razoavelmente básicos de ações que resultam em informações importantes, mas o universo de ações possíveis, é muito mais amplo. Com informação, prática e cautela, você literalmente tem na ponta dos dedos, total controle de um servidor Linux!
Conclusão
As linhas de comando são recursos extremamente valiosos e poderosos, que conferem um controle sobre o sistema que geralmente não está disponível quando se restringe seu uso à interface gráfica. Particularmente no caso de sistemas operacionais Linux, o acervo de comandos disponíveis, combinados entre si e com algumas ferramentas, como expressões regulares e funções, dão ao administrador do servidor, total controle de todo o ambiente.