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á:
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.54Device: 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
[[email protected]] ~ >> mpstat
Linux 2.6.18-194.32.1.el5PAE (host.nomedohost.com.br) 08/05/201401: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
[[email protected]] ~ >> mpstat -P ALL
Linux 2.6.18-194.32.1.el5PAE (host.nomedohost.com.com.br) 08/05/201401: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 cachedPID 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 [~]#
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 [/]#
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“.