Advertisement
  1. Code
  2. DevOps

Comandos *NIX de Terminal para Desenvolvedores Web

Scroll to top
Read Time: 10 min

() translation by (you can also view the original English article)

Então, por que *NIX e por que precisamos ir ao terminal?

De acordo com estatística do W3Techs, Unix é usado por 68% de todos os sites dos quais eles sabem o sistema operacional. Ou seja, sendo desenvolvedores web, é provável que nosso coódigo esteja rodando um um servidor Linux. É preciso sabermos como configurar ou depurar nosso código em sistemas Linux e Unix. Vejamos o que é preciso para isso.

O Básico

O comando básico *NIX consiste de três componentes:

  • commando or programa a executar
  • opções para especificar comportamento do comando
  • argumentos ou entrada necessária para o comando

Por exemplo, se precisamos obter uma lista de arquivos no diretório /var/www, precisamos executar o comando ls com o argumetno /var/www. Para adicionar o tamanho dos arquivo no retorno, adicionamos a opção -s, e o comando será assim:

1
ls -s /var/www

Redirecionamento e Condução de Entrada e Saída

Muitos comandos *NIX usam entrada e saída textual que podemos operar, e o legal disso é que podemos enviar os retornos do comando para um arquivo usando redirecionamento ou mesmo enviá-lo para outro comando como entrada, usando conduções. Por exemplo, podemos salvar o retorno do comando do exemplo anterior um arquivo:

1
ls -s /var/www > /var/www/files.txt

O comando criará ou apagará o arquivo /var/www/files.txt e salvará a lista de arquivos do diretório /var/www no lugar. Eis uma lista de redirecionamento e condução padrão:

  • > Redireciona o retorno de um comando para um arquivo. Esse será apagado e sobrescrito.
  • >> Redirecionamento com anexo não apagando.
  • < Obtém entrada de um arquivo para um comando.
  • | Passe o retorno de um comando como entrada para outro.
  • tee Redireciona para um arquivo e passa como entrada para o próximo comando.

Os Principais Comandos

Para ver o manual de um comando, execute man. Páginas de manual segue um layout comum e podem incluir nome, sinpse, descrição e exemplo de uso. Isso mostrará a documentação do comando chmod:

1
man chmod

Para executar alguns comandos, como salvar configurações ou reiniciar processos, precisamos executá-los como super usuário. Para isso, precisamos iniciar o comando com sudo:

1
user@server:/var/www$ chmod 777 log

2
chmod: changing permissions of log: Operation not permitted

3
user@server:/var/www$ sudo chmod 777 log

4
sudo chmod 777 log

Se precisarmos executar vários comandos como super usuário, podemos usar su para mudar para o usuário super.

1
user@server:/var/www$ su

2
Password:

3
root@server:/var/www#

Nota: Para manter-se seguro e evitar execução acidental de comandos questionáveis, não use sudo ou su sem motivo.

No Mundo Real

Navegação Básica

Existem 3 comandos base para navegar uma árvore de arquivos:

  • pwd para imprimir o nome do diretório atual
  • cd para mudar de diretório
  • ls para listar o conteúdo

Eis um exemplo do uso desses comandos com seus retornos no terminal:

1
user@server:~$ pwd

2
/home/user

3
user@server:~$ cd /var/www

4
user@server:/var/www$ ls -alF

5
total 16

6
drwxr-xr-x  5 root    root    4096 Jan 22 09:45 ./

7
drwxr-xr-x 14 root    root    4096 Jan 22 09:38 ../

8
drwxr-xr-x  2 root    root    4096 Jan 22 09:45 html/

9
drwxr-xr-x  3 root    root    4096 Jan 22 09:45 log/

10
drwxrwxrwx  1 user    user    442  Mar 24 12:22 testing/

Buscando Arquivos

Existe o comando find para buscar arquivos numa hierarquia de diretórios. Esse comando é bem poderoso e pode buscar por arquivos e diretórios por nome, permissões, datas e tamanhos.

Para encontrar todos os diretórios com "logs" no nome no diretório /var/www usando a opção -type:

1
find /var/www -type d -name logs

Para buscar por arquivos PHP no diretório atual, adicione a opção -name:

1
find . -type f -name "*.php"

Para buscar arquivos com determinada permisão, use -perm:

1
find . -type f -perm 0777 -print

Encontre todos os arquivos maiores que 500MB:

1
find / -size +500M

Claro, podemos combinar todas essas opções em um só comando. Isso é só o basico do comando find, uma ferramenta poderosa para buscar arquivos. Use as páginas de manual para mais informações.

Manipulando Arquivos e Diretórios

Existem cinco comandos base para manipular arquivos e diretórios em sistemas *NIX:

  • touch é usado para alterar marcas de data em arquivos existentes e diretório, mas também para criar arquivos
  • mkdir para criar diretórios
  • cp pra copiar arquivos e diretórios
  • mv para mover e renomear arquivos e diretórios
  • rm para apagar arquivos e diretórios

O próximo exemplo criará um arquivo index.html, copia-lo-á para um novo diretório em /var/www e removerá o original.

1
root@localserver:~# touch index.html

2
root@localserver:~# mkdir /var/www/newdir

3
root@localserver:~# cp index.html /var/www/newdir/

4
root@localserver:~# rm index.html

Outro ótimo comando é o ln, usado para criar elos entre arquivos. O comando ln é usado, geralmente, para criar elos simbólios para habilitar host virtual:

1
sudo ln -s /etc/apache2/sites-available/newvirtualhost.com.conf /etc/apache/sites-enabled/ newvirtualhost.com.conf

Alterando Permissões de Acesso

Para alterar o dono ou grupo de um arquivo, use chown. Não esqueça de dar permissões ao usuário apache ao criar uma novo host virtual para sua aplicação web:

1
sudo chown -R www-data:www-data /var/www/newvirtualhost.com

Por vezes, pastas de cache e registros devem ser acessíveis a todos usuários, logo é preciso alterar o modo de acesso para 777 com chmod. Adicione a opção -R para adicionar permissão a todos os arquivos e diretórios aninhados.

1
sudo chmod -R 777 /var/www/private/cache

Se quiser apenas tornar um arquivo executável, use chmod com a opção +x.

1
sudo chmod +x /var/www/private/backup.sh

Leitura de Arquivos

Para ver arquivos, podemos usar o comando cat. Com cat, podemos concatenar o conteúdo de arquivos usando parâmetros extras e também podemos mascarar nomes de arquivo.

1
cat /etc/apache2/apache2.conf

2
cat /etc/apache2/apache2.conf /etc/apache2/ports.conf 

3
cat /etc/apache2/mods-enabled/*

Mas o comando cat confundirá você bem rápido, porque mostrar o retorno bruto sem qualquer paginação—logo, é inconveniente usá-lo com registros. Para filtrar ou paginar um texto uma tela por vez, deveríamos usar os comandos more ou less, que são muito melhores.

1
less /etc/apache2/apache2.conf

2
cat /etc/apache2/mods-enabled/* | less

Outro comando útil é o tail, criado para retornar apenas a parte final dos arquivos. O comando é perfeito para dar uma olhada em registros. Por padrão, ele retornará as últimas 10 linhas, mas pode-se mudar esse número usando a opção -n.

1
tail /var/log/apache2/error.log

2
tail -n 25 /var/log/apache2/error.log

Mas se tivermos, por exemplo, vários registros, precisamos de algo mais poderoso para uma busca melhor. Algo como grep—um programa que lê da entrada padrão, testa cada linha contra um padrão e retorna para a saída padrão, as linhas que casaram. Ao usá-lo junto de cat e condutores, obteremos o que queremos.

Se quisermos filtrar linhas de texto do retorno, podemos usar o comando grep:

1
grep notice /var/log/apache2/error.log

2
cat /var/log/apache2/*.log | grep "shutting down"

Como podemos ver, grep é ótimo para condução. Nesse exemplo, o último comando retornará todas as linhas contendo "shutting down" dos registros.

Edição de Arquivos

Se quisermos editar arquivos de texto no terminal, podemos usar um dos três mais populares editores:

  • GNU nano, um editor de texto pequeno e amigável que é uma escolher perfeita para tarefas básicas
  • Vim, um editor de texto aprimorado para programador, que é o mais poderoso mas complexo para iniciantes.
  • mcedit, um editor totalmente completo da Midnight Commander, que é fácil de usar mas não é instalado por padrão em sistemas *NIX

Compares-os e escolha um:

1
nano /var/log/apache2/error.log

2
vim /var/log/apache2/error.log

3
mcedit /var/log/apache2/error.log

Arquivamento

Por vezes, precisamos copiar ou comprimir alguns dados do servidor.

Os utilitários de arquivamento mais comuns são o tar e o zip. Note que o comando zip talvez não esteja instalado no servidor por padrão.

Podemos criar arquivos com os comandos a seguir:

1
tar -zcvf archive-name.tar.gz directory-or-file-name

2
tar -jcvf archive-name.tbz2 directory-or-file-name

3
zip archive-name.zip directory-or-file-name

Se quisermos apenas ver uma lista dos arquivos, podemos usar a opção -l tanto para tar quanto unzip:

1
tar -ztvf archive-name.tar.gz

2
tar -jtvf archive-name.tbz2

3
unzip -l archive-name.zip

Ou extraia alguns arquivos:

1
tar -zxvf archive-name.tar.gz

2
tar -jxvf archive-name.tbz2

3
zip archive-name.zip

Tarefas Programadas

Se quiser programar seus scripts para executar periodicamente, é preciso usar o utilitário Cron, conduzido pela tabela cron—um arquivo de configuração de comandos de terminal a serem executados periodicamente em determinado prazo. E o comando para manter as tabelas cron é crontab.

Executar crontab com a opção -l exibirá a tabela cron.

Com a opção -u, especificamos o nome do usuário dono da crontab será usada. Se executarmos tarefas na aplicação web, é melhor editar a crontab do usuário www-data.

1
user@server:~$ sudo crontab -lu www-data

2
# m h  dom mon dow   command

3
*/5 * * * * php5 /var/www/yii do/tasks >> /var/www/tasks.log

4
00 15 * * 1-5 /var/www/backuper.sh

Nesse retorno, podemos ver um exemplo de tabela cron. Como vemos, cada linha é programada por minuto, hora, dia do mês, mês e dia da semana. Cada campo pode ser um asterísco, indicando todos os valores do campo. Também se pode usar conjuntos e intervalos, usando vírgulas e hífens. Uma barra após um intervalo cria-se exceções no valor do número naquele intervalo. No exemplo, o primeiro comando executará a cada cinco minutos e o segundo de Segunda a Sexta às 15h.

Para editar a lista, execute crontab com -e ao invés de -l. A lista cron será aberta no editor padrão. Use a opção -r para limpar a lista.

Monitoramento de Performance

O comando top resume a informação do sistema e provê uma visão dinâmica em tempo real dos processos em execução. Aperte Shift-M para ordenar processos por uso de memória ou Shift-P por uso de CPU.

1
top - 21:33:02 up 308 days, 21:24,  1 user,  load average: 0.00, 0.01, 0.05

2
Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie

3
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

4
KiB Mem:    501800 total,   471348 used,    30452 free,    49672 buffers

5
KiB Swap:  4194300 total,    56192 used,  4138108 free.   149488 cached Mem

6


7
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND     

8
16269 www-data  20   0  348592  38884  12044 S  0.0  7.7   0:02.42 php5        

9
26533 www-data  20   0  409516  38488  24312 S  0.0  7.7   1:00.04 php5-fpm    

10
 1076 mysql     20   0  887824  32748   1616 S  0.0  6.5 276:46.59 mysqld      

11
  862 syslog    20   0  256612  31428    368 S  0.0  6.3  32:45.88 rsyslogd    

12
18901 root      20   0  105632   4316   3248 S  0.0  0.9   0:00.04 sshd        

13
25393 www-data  20   0   87356   4312   1564 S  0.0  0.9   4:46.92 nginx       

14
27846 memcache  20   0  328464   3828    252 S  0.0  0.8   1:04.30 memcached 

Para mostrar o tanto de memória livre e usada pelo sistema, use o comando free. Adicione a opção -h para retornar os comandos num formato legível.

1
user@server:~$ free -h

2
             total       used       free     shared    buffers     cached

3
Mem:          490M       453M        36M        23M        46M       140M

4
-/+ buffers/cache:       265M       224M

5
Swap:         4.0G        54M       3.9G

Outro comando útil é o df, que reporta o uso do espaço em disco do sistema. Executamo-no com a opção -a para mostrar todos os sistemas de arquivos do seu seservidor. Também não esqueça a opção -h para um formato legível.

1
user@server:~$ df -ah

2
Filesystem      Size  Used Avail Use% Mounted on

3
/dev/vda1        20G  6.3G   13G  34% /

4
udev            235M  4.0K  235M   1% /dev

5
tmpfs            50M  344K   49M   1% /run

Histórico da Linha de Comando

Podemos usar o comando !! para repetir o comando anterior, ou usar sudo !! se esquecemos de executá-lo com sudo.

1
user@server:/var/www$ chmod 777 log

2
chmod: changing permissions of log: Operation not permitted

3
user@server:/var/www$ sudo !!

4
sudo chmod 777 log

Se esquecemos a sintaxe de um comando ou estamos preguiçosos em relação a digitar algum comando, podemos usar history para mostrar o histórico de comandos. É bom combiná-lo com filtros, como o grep ou tail para encontrar exatamente o que precisamos.

1
history | tail

2
history | grep crontab

3
history | egrep -i 'ssh|ftp'

Conclusão

Usar o terminal não é ciência espacial. Sistemas Unix e Linux são fáceis de entender e usar por seus projetos simples e ótima documentação. Espero que esse artigo tenha tornado-o mais confortável com a linha de comando e levado-o ao próximo nível de administração de aplicações web no terminal.

Quaisquer dúvidas ou há algum comando que você acredita deveria estar aqui, não deixe de comentar na seção abaixo.

Leitura Adicional

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.