Curso de Shell Script: Módulo #0 – Comandos Básicos do Linux

Pretendo escrever uma série de posts sobre Shell Script, para ensinar e consolidar o que sei, além de aprender alguns detalhes a mais.

Não adianta querer programar usando Shell sem conhecer os comandos básicos do Linux. Por isso, o primeiro módulo do “curso” abordará os comandos básicos do Linux, que são fundamentais para a construção dos scripts.

Vamos analisar apenas alguns comandos, os mais conhecidos e usados, juntamente com algumas de suas opções. A maioria dos comandos permitem o uso de inúmeras opções, não sendo possível abordar todos elas neste texto.

Antes de iniciarmos, vale lembrar que os manuais de todos os comandos podem ser lidos usando o comando man nome_do_comando, por exemplo:

$ man echo

A maioria dos comandos também têm a opção -h, ou –help, que lista os parâmetros aceitos pelo programa.

Os comandos estão ordenados alfabeticamente, sem levar em consideração relevância ou complexidade de utilização.

Sumário

awk
cat
cd
chmod
cut
date
diff
echo
find
grep
head
kill
ls
printf
rev
scp
sed
seq
sort
ssh
tac
tail
top

awk

O AWK é uma linguagem de programação para processamento de textos. Ao lado do comando SED, é capaz de realizar muitos truques.

Um post exclusivo sobre AWK pode ser visto aqui:

http://www.rberaldo.com.br/blog/tutorial-awk

cat

Exibe o conteúdo de um arquivo.

Opções:
-n : numera as linhas

Exemplos:

$ cat /etc/hostname
orion
$ cat -n /etc/hostname
     1	orion

cd

Muda o diretório de trabalho, ou seja, entra em um determinado diretório.

Exemplo:

$ cd /tmp
$ cd ~

chmod

O chmod (change mode) muda as permissões de um arquivo ou diretório. O sistema de permissões em sistemas Unix-Like, como Linux ou Mac OS, é um dos pontos fortes desses sistemas. Porém, infelizmente, poucos usuários realmente sabem usá-lo.

Um post exclusivo ao chmod pode ser lido aqui: http://www.rberaldo.com.br/blog/chmod-permissoes-em-sistemas-linux-e-unix-like

cut

Separa trechos ou campos de uma linha, por meio de um delimitador. Também trunca textos, exibindo apenas um número específico de caracteres.

Opções
-d : define o delimitador
-f : define o(s) campo(s) a ser(em) exibido(s)
-c : número do caractere a ser exibido ou intervalo de caracteres

Exemplos:

$ echo "um:dois:tres:quatro" | cut -d: -f 2
dois
$ echo "um:dois:tres:quatro" | cut -d: -f 2,3
dois:tres

Também é possível definir intervalo de valores para a opção -f:

$ echo "um:dois:tres:quatro" | cut -d: -f 1-3
um:dois:tres
$ echo "um:dois:tres:quatro" | cut -d: -f 2-
dois:tres:quatro
$ echo "1234567890" | cut -c 7
7
$ echo "1234567890" | cut -c 1,3,5
135
beraldo@orion:~$ echo "1234567890" | cut -c 1-7
1234567
$ echo "1234567890" | cut -c 8-
890
beraldo@orion:~$ echo "1234567890" | cut -c -5
12345

date

Mostra a data atual ou uma data específica, com diversas opções para formatação da data.

Opções:
-d : especifica a data (Ex: tomorrow, 5 days ago)
+%? : define o padrão de formatação da data. A lista de opções pode ser lida no manual do comando (man date).

Exemplos:

$ date
Dom Mai  1 20:05:47 BRT 2011
$ date -d "yesterday"
Sáb Abr 30 20:05:59 BRT 2011
$ date -d "2 days ago"
Sex Abr 29 20:06:10 BRT 2011
beraldo@orion:~$ date -d "2 days"
Ter Mai  3 20:06:13 BRT 2011
$ date +"%d/%m/%Y"
01/05/2011
$ date -d "30 days" +"Daqui 30 dias será %d/%m/%Y"
Daqui 30 dias será 31/05/2011

diff

Exibe as diferenças entre dois arquivos.

Opções:
-i : case-insensitive (indiferente a maiúsculas e minúsculas)
-y : exibe as diferenças lado a lado
-E : ignora diferenças no tamanho do TAB
-B : ignora linhas vazias
-b : ignora quantidade de espaços

Outros comandos semelhantes muito úteis: vimdiff e diff3

O comando diff é muito útil para encontrar cópias de trabalhos de faculdade, por exemplo. 😛

echo

Exibe um texto na saída padrão.

Opções:
-n : não pula linha no final do texto
-e : interpreta caracteres de escape

Exemplos:

$ echo "sou n um n texto"
sou n um n texto
$ echo -e "sou n um n texto"
sou
 um
 texto

find

Localiza arquivos no sistema de arquivos.

Esse comando possui diversas opções e truques. Por isso, merece um post específico para ele. Um post muito bom sobre o find pode ser encontrado aqui:

http://gerencievocemesmo.com.br/site/?p=56

grep

Localiza padrões dentro de um ou mais arquivos. A busca é feita usando Expressões Regulares.

Opções:
-i : case-insensitive
-v : inverte o critério de busca
-r : recursivo, busca em subdiretórios também
-n : mostra, também, o número da linha
-c : conta o número de linhas que casaram com o padrão
-l : exibe só o nome do arquivo onde o padrão foi encontrado
-A N : mostra N linhas após a linha onde o padrão foi encontrado
-B N : mostra N linhas antes da linha onde o padrão foi encontrado
-C N : mostra N linhas antes e depois da linha onde o padrão foi encontrado

$ seq 10 | grep -A2 -B3 "5"
2
3
4
5
6
7
$ echo -e "olánsoun1ntestenparangrep" | grep "^[a-z]"
olá
sou
teste
para
grep
$ echo -e "olánsoun1ntestenparangrep" | grep -v "^[a-z]"
1

Para usar todos os recursos das Expressões Regulares, use egrep em vez de grep, o que permite usar grupos, quantificadores “+” e “{quantificador}”.

head

Mostra o início de um arquivo. O limite pode ser estabelecido em número de linhas ou caracteres. É o inverso do comando tail.

Opções:
-n N : exibe as N primeiras linhas
-c N : exibe os N primeiros caracteres

Exemplos:

$ echo -e "olá, sounum testenpara oncomando head" | head -n 2
olá, sou
um teste
$ echo -e "ola, sounum testenpara oncomando head" | head -c 7
ola, so

kill

O comando kill “mata” processos, ou seja, encerra, ou força o encerramento, de um programa.

Opções:
-9 : força o encerramento da execução de um processo
-1 : mata todos os processos que o usuário pode matar

Exemplos:

Força o encerramento do processo 1234:

$ kill -9 1234

Encerra a sessão do usuário, ou seja, força o encerramento de todos os seus processos:

$ kill -1 -9

Os IDs dos processos (PID – Process ID) podem ser encontrados usando o comando ps, que é o gerenciador de processos. Com as opções “ux”, listam-se os processos do usuário. Com grep podemos filtrar a saída pelo processo desejado:

$ ps ux | grep skype
beraldo   2267  1.0  2.0 281508 82968 ?        Sl   09:58   0:41 skype
beraldo   5672  0.0  0.0  10128   848 pts/0    S+   11:04   0:00 grep --color=auto skype

O skype é o processo 2267. Para forçar seu encerramento, fazemos:

$ kill -9 2267

Como lição de casa, vale ler os manuais dos comandos killall e pkill. 🙂

ls

Lista o conteúdo de um diretório.

Opções:
-a : lista arquivos e diretórios ocultos
-l : mostra diversos atributos dos arquivos e diretórios, como data de criação, dono, permissões etc
-R : lista o conteúdo recursivamente

Exemplos:

$ ls
$ ls -a
$ ls -l
$ ls -la
$ ls -laR

printf

Exibe um texto na tela, com várias opções de formatação, semelhante à função printf(), da linguagem C.

As opções de formatação são praticamente as mesmas da linguagem C. A lista completa pode ser vista no manual (man printf).

Exemplos:

$ printf "%xn" 15
f
$ printf "%on" 7
7
$ printf "%on" 8
10
$ printf "%05dn" 70
00070
$ printf "%.2fn" 70
70,00

rev

Esse comando inverte uma string.

Exemplos:

$ echo "texto" | rev
otxet
$ echo "duh" | rev
hud

scp

Copia arquivos e diretórios via ssh, ou seja, cópia segura entre máquinas remotas.

Opções:
-r : cópia recursiva

Sintaxe:

$ scp [opções] maquina:origem destino
$ scp [opções] origem maquina:destino

Exemplos:

$ scp 192.168.0.100:~/arquivo.txt .
$ scp arquivo.txt 192.168.0.102:~

sed

Linguagem para edição de arquivos e textos. Veja um post exclusivo a ela aqui: http://www.rberaldo.com.br/blog/o-comando-sed-do-linux/

seq

Exibe uma sequência de números.

Opções:
-s : separador (padrão “n”)
-f : formato (padrão “%g”)

Exemplos:

$ seq 3
1
2
3
$ seq 3 5
3
4
5
$ seq 3 2 10
3
5
7
9
$ seq 10 -2 0
10
8
6
4
2
0
$ seq -s, 10 -2 0
10,8,6,4,2,0
$ seq -s, -f"%04g" 10 -2 0
0010,0008,0006,0004,0002,0000

sort

Ordena linhas de um texto, alfabética ou numericamente.

Opções:
-n : ordena numericamente
-r : ordena inversamente (de Z para A e de 9 para 1)
-f : case-insensitive
-k N : ordena pela coluna N do texto
-t : separador de coluna para a opção -k (padrão TAB)
-o : define um arquivo para a saída do comando

Exemplos:

$ echo -e "umndoisntresnquatro" | sort
dois
quatro
tres
um
$ echo -e "umtdoisntrestquatro" | sort -k 2
um	dois
tres	quatro
$ echo -e "umtdoisntrestquatro" | sort -k 2 -r
tres	quatro
um	dois
$ echo -e "1n10n100n2n20n200" | sort
1
10
100
2
20
200
$ echo -e "1n10n100n2n20n200" | sort -n
1
2
10
20
100
200

ssh

O SSH (Secure Shell) realiza acesso remoto a outras máquinas Linux. Um post exclusivo a SSH pode ser lido aqui:

http://www.rberaldo.com.br/blog/usando-o-ssh

tac

Inverso do comando cat. Exibe o conteúdo de um arquivo do fim para o início.

tail

Exibe o fim de um texto, exatamente o oposto do comando head

Opções:
-n N : número de linhas a exibir
-c N : número de caracteres a exibir

Exemplos semelhantes ao do comando head.

top

O comando top exibe os processos atualmente em execução. É semelhante ao ps, citado na seção do comando kill, mas atualiza-se automaticamente, além de possuir várias opções de ordenação.

Exemplo:

$ top

O comando “htop” é mais completo e user-friendly, mas normalmente não vem instalado nas distros Linux. É possível instalá-lo via gerenciador de pacotes. Por exemplo, em sistemas baseados em Debian:

# apt-get install htop

Fonte: http://www.rberaldo.com.br/blog/curso-shell-script-comandos-basicos-linux

Siga-me no Twitter: @rberaldo

Roberto Beraldo

Mais artigos deste autor »

Graduado em Ciência da Computação, pela Universidade Federal do Paraná (UFPR). Trabalha com Desenvolvimento WEB, principalmente com PHP.


3 Comentários

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!