13 comandos Linux bastante úteis para quem administra um servidor

Já publicamos aqui no Código Fonte alguns textos contendo comandos Linux bastante úteis, como por exemplo o “find“, o “TAR” e o “Mysqlcheck“. Mas, sendo o Linux um sistema operacional tão complexo, com tantas distribuições diferentes e utilizado em inúmeros servidores por aí, nunca é demais conhecermos mais alguns comandos, não é?

Até mesmo porque a quantidade de comandos, parâmetros adicionais e formas de utilização é enorme. Desta vez vamos apresentar uma lista com 13 comandos extremamente úteis, principalmente para quem administra servidores. Vamos lá:

Keys

1) iostat

O iostat é um comando que exibe estatísticas a respeito da utilização da CPU, além de estatísticas de I/O relativas a partições, drives e arquivos de sistema:

iostat

root@host [~]# iostat
Linux 2.6.32-431.20.3.el6.x86_64 (host.nomedohost.net)    08/05/2014      _x86_64(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
8.35      0.51         2.02        1.56      0.03   87.54

Device:            tps   Blk_read/s   Blk_wrtn/s            Blk_read            Blk_wrtn
vda                 23.68      1227.09            623.76        1375075711        698980108

Simplificando mais, podemos ainda utilizar o comando juntamente com o parâmetro -c, para exibir dados somente a respeito da CPU:

iostat -c

root@host [~]# iostat -c
Linux 2.6.32-431.20.3.el6.x86_64 (host.nomedohost.net)    08/05/2014      _x86_64(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
8.35      0.51         2.02        1.56      0.03   87.54

Ou com o parâmetro -d, para a exibição de dados apenas dos drives:

iostat -d

root@host [~]# iostat -d
Linux 2.6.32-431.20.3.el6.x86_64 (host.nomedohost.net)    08/05/2014      _x86_64(4 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
vda               23.67         1226.22        623.39 1375169119  699116668

2) mpstat

Um pouco semelhante ao iostat, o mpstat exibe estatísticas sobre todos os processadores existentes na máquina:

mpstat
[root@host.nomedohost.com.br] ~ >> mpstat
Linux 2.6.18-194.32.1.el5PAE (host.nomedohost.com.br)    08/05/2014

01:19:19 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle
intr/s
01:19:19 PM      all     0.84       2.12     0.64       5.80     0.34    0.28      0.00  89.99
119.83

Para melhorar ainda mais as coisas e obter resultados mais detalhados, podemos utilizar o comando da seguinte maneira, para obter informações individualizadas, sobre cada um dos processadores porventura existentes na máquina:

mpstat -P ALL
[root@host.nomedohost.com.com.br] ~ >> mpstat -P ALL
Linux 2.6.18-194.32.1.el5PAE (host.nomedohost.com.com.br)    08/05/2014

01:22:40 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle
intr/s
01:22:40 PM  all    0.84    2.12    0.64    5.80    0.34    0.28    0.00   89.99
119.84
01:22:40 PM    0    0.94    2.49    0.30    1.61    0.00    0.01    0.00   94.65
31.45
01:22:40 PM    1    0.68    1.10    1.26   17.79    0.93    0.31    0.00   77.93
41.80
01:22:40 PM    2    0.49    3.06    0.34    1.65    0.01    0.07    0.00   94.37
4.59
01:22:40 PM    3    1.25    1.82    0.64    2.13    0.41    0.72    0.00   93.02
41.99

OBS: no resultado acima temos quatro processadores, sendo que “0” é o primeiro deles.

3) shred

O comando shred serve para apagar arquivos com segurança, regravando a área na qual eles se encontravam com dados aleatórios, de maneira tal a tornar impossível a sua recuperação:

shred nomedoarquivo.extensao -u

OBS: não se esqueça de realizar as devidas substituições em “nomedoarquivo” e “extensão” (por exemplo: install.php).

Se utilizarmos o parâmetro -v, poderemos então acompanhar todo o processo:

shred -v deletar2.txt

root@host [/home/usertest]# shred -v deletar2.txt
shred: deletar2.txt: pass 1/3 (random)…
shred: deletar2.txt: pass 2/3 (random)…
shred: deletar2.txt: pass 3/3 (random)…
root@host [/home/usertest]#

Para ainda mais segurança, podemos também realizar a regravação com dados aleatórios, o número de vezes que desejarmos. 10, 50, 100, etc. Vamos utilizar “10” no exemplo abaixo, para apagar o arquivo “codigofonte.txt”:

shred -n 10 -v -u codigofonte.txt

root@host [/home/usertest]# shred -n 10 -v -u codigofonte.tx
shred: codigofonte.txt: pass 1/10 (random)…
shred: codigofonte.txt: pass 2/10 (249249)…
shred: codigofonte.txt: pass 3/10 (ffffff)…
shred: codigofonte.txt: pass 4/10 (db6db6)…
shred: codigofonte.txt: pass 5/10 (aaaaaa)…
shred: codigofonte.txt: pass 6/10 (random)…
shred: codigofonte.txt: pass 7/10 (000000)…
shred: codigofonte.txt: pass 8/10 (555555)…
shred: codigofonte.txt: pass 9/10 (924924)…
shred: codigofonte.txt: pass 10/10 (random)…
shred: codigofonte.txt: removing
shred: codigofonte.txt: renamed to 000000000000000
shred: 000000000000000: renamed to 00000000000000
shred: 00000000000000: renamed to 0000000000000
shred: 0000000000000: renamed to 000000000000
shred: 000000000000: renamed to 00000000000
shred: 00000000000: renamed to 0000000000
shred: 0000000000: renamed to 000000000
shred: 000000000: renamed to 00000000
shred: 00000000: renamed to 0000000
shred: 0000000: renamed to 000000
shred: 000000: renamed to 00000
shred: 00000: renamed to 0000
shred: 0000: renamed to 000
shred: 000: renamed to 00
shred: 00: renamed to 0
shred: codigofonte.txt: removed
root@host [/home/usertest]#

4) top

Outro comando extremamente útil, o top exibe informações a respeito da atividade do processador, incluindo tarefas do kernel. Tudo em tempo real.  Ele também exibe em percentuais a utilização da CPU e da memória. Digamos que com o top você tem em tela algo como um reflexo do seu sistema, com dados em tempo real.

A tela com os dados é exibida a partir do momento em que teclamos <ENTER> e é constantemente atualizada. Para sair, basta digitar “Q” (com outro <ENTER>, em seguida):

top

top – 15:14:39 up 3 days,  2:00,  1 user,  load average: 0.45, 0.47, 0.47
Tasks: 195 total,   2 running, 191 sleeping,   0 stopped,   2 zombie
Cpu(s): 22.9%us,  4.2%sy,  0.0%ni, 72.4%id,  0.3%wa,  0.0%hi,  0.1%si,  0.1%st
Mem:   3207236k total,  2914536k used,   292700k free,   207768k buffers
Swap:  2047992k total,   320068k used,  1727924k free,  1572396k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
2610 mysql     20   0 2434m 198m 4100 S 27.3  6.3 243:24.45 mysqld
15040 usertest  20   0  173m  63m 7236 R 14.6  2.0   0:00.44 php
15035 ardgms24  20   0     0    0    0 Z  1.0  0.0   0:00.03 php <defunct>
15036 ardgms24  20   0     0    0    0 Z  1.0  0.0   0:00.03 php <defunct>
1869 nobody    20   0  388m  60m  328 S  0.3  1.9  10:58.03 memcached
13676 nobody    20   0 73876 3480 2020 S  0.3  0.1   0:00.25 httpd
13877 nobody    20   0 73764 3404 2040 S  0.3  0.1   0:00.22 httpd
14388 nobody    20   0 73768 3408 2056 S  0.3  0.1   0:00.13 httpd
14418 nobody    20   0 73900 3356 2024 S  0.3  0.1   0:00.11 httpd
14419 nobody    20   0 73756 3340 2024 S  0.3  0.1   0:00.12 httpd
14437 nobody    20   0 73856 3336 2008 S  0.3  0.1   0:00.11 httpd
14962 nobody    20   0 73728 3140 1964 S  0.3  0.1   0:00.01 httpd
15006 root      20   0 15036 1304  944 R  0.3  0.0   0:00.02 top
1 root      20   0 19364  568  340 S  0.0  0.0   0:01.59 init
2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd
3 root      RT   0     0    0    0 S  0.0  0.0   0:03.24 migration/0
4 root      20   0     0    0    0 S  0.0  0.0   0:13.60 ksoftirqd/0
5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0

5) Free

O comando free está relacionado à memória. Ele mostra a quantidade total de memória livre e em uso, incluindo a memória swap

free

root@host [~]# free
total       used       free     shared    buffers     cached
Mem:       3207236    2851772     355464          0     206448    1563048
-/+ buffers/cache:    1082276    2124960
Swap:      2047992     321104    1726888
root@host [~]#

linux-baby-tux

6) Find

O comando find busca por arquivos e diretórios no servidor inteiro, desde que assim especificado, claro, como no exemplo abaixo:

find / -name codigofonte.php

root@host [/]# find / -name codigofonte.php
/home/usertest/codigofonte.php
root@host [/]#

Para buscar sem diferenciar maiúsculas de minúsculas, o comando é o seguinte:

find / -iname codigofonte.php

root@host [/]# find / -iname codigofonte.php
/home/usertest/Codigofonte.php
/home/usertest/codigofonte.php
root@host [/]#

Podemos refinar a busca, ou realizá-la dentro de diretórios específicos:

find /home/usertest  -iname codigofonte.txt

root@host [/]# find /home/usertest  -iname codigofonte.txt
/home/usertest/public_html/codigofonte.txt
/home/usertest/Codigofonte.txt
root@host [/]#

Observe que no exemplo acima utilizamos o parâmetro “-iname”, para que o resultado contivesse tanto arquivos contendo letras maiúsculas quanto letras minúsculas. Pode-se utilizar da seguinte maneira, claro:

find /home/usertest  -name codigofonte.txt

E assim, somente o arquivo “codigofonte.txt”, no caso, será localizado:

root@host [/]# find /home/usertest  -name codigofonte.txt
/home/usertest/public_html/codigofonte.txt
root@host [/]#

E assim por diante.

7) ps

O comando ps exibe os processos que estão rodando no sistema:

ps

root@host [/]# ps
PID TTY          TIME CMD
1979 pts/0    00:00:00 ps
31957 pts/0    00:00:00 bash
root@host [/]#

Uma maneira mais completa de utilização é:

ps -A |more

Assim, o comando exibirá cada processo rodando no sistema, com seus respectivos IDs, claro, e separando os resultados em várias telas. Para prosseguir, basta ir teclando <ENTER>:

root@host [/]# ps -A |more
PID TTY          TIME CMD
1 ?        00:00:01 init
2 ?        00:00:00 kthreadd
3 ?        00:00:02 migration/0
4 ?        00:00:10 ksoftirqd/0
5 ?        00:00:00 migration/0
6 ?        00:00:00 watchdog/0
7 ?        00:00:04 migration/1
8 ?        00:00:00 migration/1
9 ?        00:00:03 ksoftirqd/1
10 ?        00:00:00 watchdog/1
11 ?        00:00:04 migration/2
12 ?        00:00:00 migration/2
13 ?        00:00:02 ksoftirqd/2
14 ?        00:00:00 watchdog/2
15 ?        00:00:04 migration/3
16 ?        00:00:00 migration/3
17 ?        00:00:01 ksoftirqd/3
18 ?        00:00:00 watchdog/3
19 ?        00:00:13 events/0
20 ?        00:00:10 events/1
21 ?        00:00:11 events/2
22 ?        00:00:17 events/3
23 ?        00:00:00 cgroup
–More–

Cada <ENTER> faz com que o comando passe para o próximo processo, e assim por diante.

8) kill

Este é um comando extremamente útil e que pode, ou deve, ser utilizado geralmente após a utilização do ps (acima). O kill literalmente “mata” os processos que estão rodando. Talvez possamos fazer aqui uma analogia com sistemas Windows e a finalização de processos através do gerenciador de tarefas.

Após encontrar o “id” de um processo com o comando ps, “mate-o”, ou seja, encerre-o, com o kill:

kill -9 13

Lembrando que no exemplo acima “13” representa o processo que será encerrado e, lembrando também, cuidado: este é apenas um exemplo.

9) traceroute

O traceroute tem seu correspondente no Windows, que é o “tracert”. Da mesma maneira, temos aqui um comando que traça a rota a partir do servidor até um determinado host, remoto. Você pode utilizar tanto o IP, caso o saiba, quanto o endereço:

traceroute uol.com.br

root@host [/]# traceroute uol.com.br
traceroute to uol.com.br (200.221.2.45), 30 hops max, 60 byte packets

E assim por diante.

10) uptime

O comando uptime exibe desde quando o sistema está rodando, funcionando, considerando inclusive quaisquer reboots que tenham sido executados. Por exemplo, se você reiniciou seu servidor há pouco tempo, há poucos dias, isto será demonstrado (como no exemplo abaixo).

O comando também mostra o número de usuários “logados” e também informações a respeito do load:

uptime

root@host [/]# uptime
10:26:50 up 2 days, 14:11,  1 user,  load average: 0.85, 0.67, 0.60
root@host [/]#

Shell

11) w

O comando w lista os usuários atualmente “logados” no servidor, bem como seus respectivos IPs, nomes de login e horários do login. Com ele também podemos saber o que os usuários estão fazendo, quais processos, etc:

w

root@host [/]# w
10:34:55 up 2 days, 14:19,  1 user,  load average: 0.71, 0.56, 0.55
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    endereçoip   09:51    0.00s  0.07s  0.00s w
root@host [/]#

12) ls

Este comando lista arquivos e diretórios.

ls

Existem várias maneiras de utilizá-lo. Da forma abaixo, os resultados são melhores apresentados, em uma lista, que pode ser longa, com permissões e outras informações separadas, em colunas:

ls -l

root@host [/home/usertest]# ls -l
total 96
drwx–x–x  12 usertest usertest 4096 Aug 26 09:59 ./
drwx–x–x. 33 root     root     4096 Aug 20 05:57 ../
lrwxrwxrwx   1 usertest usertest   34 Jun 25 10:36 access-logs -> /usr/local/apa
che/domlogs/usertest/
-rw——-   1 usertest usertest   28 Jun 30 15:10 .bash_history
-rw-r–r–   1 usertest usertest   18 Jul 18  2013 .bash_logout
-rw-r–r–   1 usertest usertest  176 Jul 18  2013 .bash_profile
-rw-r–r–   1 usertest usertest  124 Jul 18  2013 .bashrc
-rw-r–r–   1 root     root       19 Aug 18 15:22 codigofonte.php
-rw-r–r–   1 root     root       19 Aug 18 15:22 Codigofonte.php
-rw-r–r–   1 root     root       18 Aug 18 15:22 Codigofonte.txt
-rw——-   1 usertest usertest   19 Jun 25 10:31 .contactemail
drwxr-xr-x   2 usertest usertest 4096 Jun 25 10:31 .cpanel/
-rw-r—–   1 usertest usertest    1 Jun 26 02:12 cpbackup-exclude.conf
-rw-r–r–   1 root     root     4096 Aug  5 13:58 deletar2.txt
-rw-r–r–   1 usertest usertest   12 Jun 30 15:09 .dns
drwxr-x—   2 usertest mail     4096 Jun 25 10:31 etc/
-rw-r–r–   1 usertest usertest  140 Jun 25 10:31 .gemrc
drwxr-x—   2 usertest nobody   4096 Jun 25 10:31 .htpasswds/
drwx——   2 usertest usertest 4096 Jun 25 10:36 logs/
drwxr-x–x   8 usertest usertest 4096 Jun 25 10:31 mail/
drwxrwxr-x   2 usertest usertest 4096 Jun 30 15:09 perl5/
drwxr-xr-x   3 usertest usertest 4096 Jun 25 10:31 public_ftp/
drwxr-x—   3 usertest nobody   4096 Jul  2 11:40 public_html/
drwxr-xr-x   5 usertest usertest 4096 Jun 26 02:12 ssl/
drwxr-xr-x   2 usertest usertest 4096 Jun 25 10:31 tmp/
lrwxrwxrwx   1 usertest usertest   11 Jun 25 10:31 www -> public_html/
root@host [/home/usertest]#

Já com o exemplo abaixo, são listados todos os diretórios de maneira recursiva:

ls -R

Já agora temos um exemplo de utilização que exibe o tamanho alocado para cada um dos arquivos, em blocos:

ls -s

Com o exemplo abaixo, temos uma ordenação pelo horário da última modificação:

ls -t

13) cp

Quem não precisa copiar arquivos de um local para outro? É justamente isto o que o comando cp faz. Copia arquivos de um diretório para outro:

cp origem destino

Exemplo:

cp /home/usertest/codigofonte.php /home/usertest/public_html/

root@host [/]# cp /home/usertest/codigofonte.php /home/usertest/public_html/
root@host [/]#

E assim o arquivo “codigofonte.php” foi copiado de “/home/usertest/” para “/home/usertest/public_html/”.

Para que um alerta seja exibido no prompt avisando de que o arquivo já existe no destino, e perguntando se você deseja sobrescrevê-lo, basta utilizar o comando da maneira abaixo. Assim, você não corre nenhum risco, pois através do modo de utilização acima, caso exista um arquivo com o mesmo nome, este será automaticamente substituído.

Caso deseje mais segurança, portanto, utilize o modo abaixo no prompt, respondendo com y (de “yes”, ou sim) ou n (de “no”, ou não):

cp -i /home/usertest/codigofonte.php /home/usertest/public_html/

Veja o resultado:

root@host [/]# cp -i /home/usertest/codigofonte.php /home/usertest/public_html/
cp: overwrite `/home/usertest/public_html/codigofonte.php’? y
root@host [/]#

Você pode utilizar o comando cp de diversas maneiras, claro. Você pode estar dentro do diretório origem e simplesmente digitar o seguinte, para copiar os arquivos para algum outro diretório:

cp -i arquivo_que_sera_copiado /diretorio_origem

Exemplo:

cp -i codigofonte.php /home/usertest/public_html/

root@host [/home/usertest]# cp -i codigofonte.php /home/usertest/public_html/
cp: overwrite `/home/usertest/public_html/codigofonte.php’? y
root@host [/home/usertest]#

E assim, o arquivo codigofonte.php, que se encontrava na pasta “/home/usertest” (onde estávamos), foi copiado para “/home/usertest/public_html/”.

OBS: a qualquer momento, para saber em que diretório você está, basta digitar o comando pwd:

root@host [/home/usertest]# pwd
/home/usertest
root@host [/home/usertest]#

Com o comando cp, você também pode copiar pastas inteiras. Para isto, entretanto, é necessário utilizar o parâmetro adicional “-a”, da maneira abaixo:

cp -a /pasta_que_sera_copiada/ /destino

Veja um exemplo:

root@host [/home/usertest]# cp -a /home/usertest/ /
root@host [/home/usertest]#

Assim, todas as pastas, subpastas e arquivos de “/home/usertest” foram copiados para “/”. Neste exemplo, o diretório “/usertest” agora existe dentro de “/”, com todo o seu conteúdo.

Também podemos copiar arquivos para um outro diretório e renomeá-los durante o processo. Basta fazer da seguinte maneira:

cp arquivooriginal /diretório/tecnologiaaz.php

root@host [/home/usertest]# cp codigofonte.php /home/usertest/public_html/tecnologiaaz.php
cp: overwrite `/home/usertest/public_html/tecnologiaaz.php’? y
root@host [/home/usertest]#

Finalizando

É claro que sempre existem variantes e uma miríade de opções, e no vasto mundo do Linux, sempre há algo mais a se aprender. Pretendemos postar mais artigos como este, e esperamos que você esteja gostando. Lembre-se, caso precise de um bom cliente SSH gratuito, dê uma olhada no “Bitvise SSH Client“.

Sobre Marcos A.T. Silva

Marcos A.T. Silva é empresário na área de TI. É apaixonado por games desde que ganhou seu primeiro Atari 2600. Outras de suas paixões são a leitura e a música. Toca piano desde cedo e também gosta do bom e velho rock ‘n roll. Pode ser encontrado também no XboxPlus.

Queremos saber sua opinião