Introdução

Neste post, vamos ver algumas formas de interação com a Bash, que é a shell hoje em dia mais comum nos sistemas Linux. Uma shell permite ao utilizador lançar comandos através do teclado e, com scripts, criar comandos e operações mais complexas.

Obter ajuda

Desde sempre, os sistemas Unix (o Linux=Linus+Unix é uma versão do Unix) tiveram mecanismos de apoio ao utilizador. Os vários comandos que podem ser lançados na Bash têm diversas formas de uso e (sobretudo para quem não os usa todos os dias) não é necessário saber de cor todas as alternativas possíveis.

Para os comandos internos da Bash, a ajuda obtém-se com o comando help.

[pf@deti-cte ~]$ help
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
These shell commands are defined internally.  Type 'help' to see this list.
Type 'help name' to find out more about the function 'name'.
Use 'info bash' to find out more about the shell in general.
Use 'man -k' or 'info' to find out more about commands not in this list.


Como se pode ver, a lista de comandos internos é bastante extensa. Para se ter ajuda sobre um comando específico (por exemplo, cd), o comando é help cd:

[pf@deti-cte ~]$ help cd
cd: cd [-L|[-P [-e]]] [dir]
    Change the shell working directory.

    Change the current directory to DIR.  The default DIR is the value of the
    HOME shell variable.

    The variable CDPATH defines the search path for the directory containing
    DIR.  Alternative directory names in CDPATH are separated by a colon (:).
    A null directory name is the same as the current directory.  If DIR begins
    with a slash (/), then CDPATH is not used.

    If the directory is not found, and the shell option 'cdable_vars' is set,
    the word is assumed to be  a variable name.  If that variable has a value,
    its value is used for DIR.

Para os comandos externos, a ajuda é dada pelos comandos man (de “manual”) ou info.

[pf@deti-cte ~]$ help ls
-bash: help: no help topics match 'ls'.  Try 'help help' or 'man -k ls' or 'info ls'.
[pf@deti-cte ~]$ man ls

LS(1)                            User Commands                           LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information  about  the FILEs (the current directory by default).
       Sort entries alphabetically if none of -cftuvSUX nor --sort  is  speci‐
       fied.

       Mandatory  arguments  to  long  options are mandatory for short options
       too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..

O resto do texto apresenta exemplos simples de utilização dos vários comandos (internos à Bash e externos) que se encontram nos computadores com Linux. Em cada um dos exemplos, podem recorrer ao man ou ao help para obter mais informações sobre o comando que está a ser apresentado (como se utiliza, que opções tem, …)

Mais informação

Bash Reference Manual

Comandos para ficheiros e pastas

Comando Descrição
pwd Indica o diretório atual
cd Muda de diretório
ls Lista de ficheiros e pastas no diretório atual
ls [FILE] Lista ficheiros ou pastas cujo nome corresponde a FILE(*)
rm Apaga um ficheiro
cp Copia um ficheiro
mv Move um ficheiro
touch Altera a data e hora de um ficheiro para “agora”
Pode ser usado para criar um novo ficheiro, vazio
mkdir Cria um diretório (pasta)
rmdir Apaga (remove) um diretório
  • Nota: quando algo é escrito entre parênteses rectos [ ] significa que o parâmetro entre parênteses rectos é opcional. Os parênteses rectos não são para serem escritos.

A estrutura de ficheiros e diretórios (ou pastas) no Unix é uma estrutura em árvore. A raíz é identificada pelo caracter / e todos os diretórios e pastas estão na raíz ou nalgum outro diretório. Neste link, podem encontrar um ficheiro com parte da estrutura de diretórios na máquina deti-cte.ua.pt. Podemos ver aqui que tudo se inicia na raíz, /, de onde saem todos os restantes diretórios.

Os diretórios num sistema Unix seguem geral um esquema semelhante:

Diretório Descrição
/ Raíz do sistema de ficheiros
  bin binaries: contém ficheiros de executáveis de programas
  boot boot: gestão do processo de arranque da máquina
  dev devices: representação como ficheiros dos dispositivos ligados ao computador
  etc etc: praticamente todos os ficheiros de configuração estão nesta pasta
  home home: área dos utilizadores
  lib libraries: bibliotecas1 partilhadas do sistema
  media media: ponto de montagem tradicional de dispositivos removíveis (PENs USB, …)2
  mnt mount: ponto de montagem temporário.
  opt optional: diretório onde são instaladas aplicações locais, que não são do sistema3
  proc processes: informação sobre os processos
  root root: área do gestor, ou superuser, ou root, da máquina
  tmp temporary: ficheiros temporários
  usr user: ficheiros executáveis e bibliotecas que não são críticas para o sistema
  var variable: diversos ficheiros e pastas

O comando seguinte, pwd (Print Working Directory) indica em que diretório estamos, na árvore.

[pf@deti-cte ~]$ pwd
/home/pf

Neste caso, estamos na área do utilizador pf (/home é a área dos utilizadores, e os home directories dos utilizadores estão “pendurados” nesta pasta). Este “home directory” é frequentemente abreviado para ~. Ou seja: para o utilizador pf, /home/pf/ ou ~/ referem-se ambos ao mesmo diretório.

Listar ficheiros e pastas

A sessão seguinte apresenta vários formar de usar o comando ls com diversas opções. É de notar que os vários “switches” (-l, -F, …) podem ser usados separadamente ou combinados. Como vimos, o comando man (ou help, se o comando for interno à Bash) permite obter mais informação sobre as opções disponíveis.

[pf@deti-cte ~]$ ls
Documents  notas.txt
[pf@deti-cte ~]$ ls -F
Documents/  notas.txt
[pf@deti-cte ~]$ ls -l
total 0
drwxr-xr-x. 2 pf users 6 Apr  1 11:25 Documents
-rw-r--r--. 1 pf users 0 Apr  1 17:35 notas.txt
[pf@deti-cte ~]$ ls -lF
total 0
drwxr-xr-x. 2 pf users 6 Apr  1 11:25 Documents/
-rw-r--r--. 1 pf users 0 Apr  1 17:35 notas.txt

O excerto seguinte mostra o uso da opção -a. Esta opção permite mostrar os ficheiros escondidos, que normalmente não aparecem (em Linux, os ficheiros que comecem por um ponto (.) são ficheiros escondidos).

[pf@deti-cte ~]$ ls -a
.   .bash_history  .bash_profile  Documents  notas.txt
..  .bash_logout   .bashrc        .lesshst
[pf@deti-cte ~]$ ls -al
total 20
drwx------. 3 pf   users 133 Apr  1 17:35 .
drwxr-xr-x. 3 root root   16 Mar 30 13:17 ..
-rw-------. 1 pf   users 666 Apr  1 14:38 .bash_history
-rw-------. 1 pf   users  18 Mar 30 13:17 .bash_logout
-rw-------. 1 pf   users 193 Mar 30 13:17 .bash_profile
-rw-------. 1 pf   users 231 Mar 30 13:17 .bashrc
drwxr-xr-x. 2 pf   users   6 Apr  1 11:25 Documents
-rw-------. 1 pf   users  42 Apr  1 11:20 .lesshst
-rw-r--r--. 1 pf   users   0 Apr  1 17:35 notas.txt

Neste caso, os ficheiros com nome que começa por .bash são ficheiros de configuração ou de gestão do sistema (iremos ver depois como se faz esta configuração).

Listar ficheiros por padrões

O comando ls pode listar apenas um ou parte dos ficheiros. Se se der como argumento o nome de um ficheiro, ele procura esse ficheiro. Se não o encontrar, indica que não existe.

[pf@deti-cte ~]$ ls -l
total 0
-rw-r--r--. 1 pf users  0 Apr  1 22:55 notas.txt
drwxr-xr-x. 2 pf users 24 Apr  1 22:55 Documents
[pf@deti-cte ~]$ ls notas.txt
notas.txt
[pf@deti-cte ~]$ ls nota.txt
ls: cannot access nota.txt: No such file or directory

O caracter * (asterisco) pode funcionar para substituir qualquer outro caracter. Por exemplo, para encontrar todos os ficheiros que terminam por .txt ou todos os ficheiros que começam por c:

[pf@deti-cte ~]$ ls -l *.txt
-rw-r--r--. 1 pf users 0 Apr  1 22:55 notas.txt
[pf@deti-cte ~]$ ls -l n*
-rw-r--r--. 1 pf users 0 Apr  1 22:55 notas.txt
[pf@deti-cte ~]$ ls -l N*
ls: cannot access N*: No such file or directory

A procura distingue maiúsculas de minúsculas.

Copiar, mover e apagar ficheiros

O comando cp cria uma cópia de um ficheiro:

[pf@deti-cte ~]$ ll
total 0
drwxr-xr-x. 2 pf users 6 Apr  1 11:25 Documents
-rw-r--r--. 1 pf users 0 Apr  1 17:35 notas.txt
[pf@deti-cte ~]$ cp notas.txt notas2.txt
[pf@deti-cte ~]$ ll
total 0
drwxr-xr-x. 2 pf users 6 Apr  1 11:25 Documents
-rw-r--r--. 1 pf users 0 Apr  1 18:15 notas2.txt
-rw-r--r--. 1 pf users 0 Apr  1 17:35 notas.txt
[pf@deti-cte ~]$

Com o comando mv movemos ficheiros (e diretórios) de um local no disco para outro.

[pf@deti-cte ~]$ mv notas2.txt Documents/
[pf@deti-cte ~]$ ll
total 0
drwxr-xr-x. 2 pf users 24 Apr  1 18:18 Documents
-rw-r--r--. 1 pf users  0 Apr  1 17:35 notas.txt

O ficheiro notas2.txt já não está no diretório atual. Podemos ver que ele está em Documents:

[pf@deti-cte ~]$ ll Documents/
total 0
-rw-r--r--. 1 pf users 0 Apr  1 18:15 notas2.txt

O comando rm (remove) serve para apagar ficheiros do disco:

[pf@deti-cte ~]$ rm notas.txt
[pf@deti-cte ~]$ ls -l
total 0
drwxr-xr-x. 2 pf users 24 Apr  1 18:18 Documents

Criar e apagar diretórios

Os diretórios são criados e apagados com os comandos rmdir e mkdir, respetivamente.

[pf@deti-cte ~]$ ll -F
total 0
drwxr-xr-x. 2 pf users 24 Apr  1 18:18 Documents/
-rw-r--r--. 1 pf users  0 Apr  1 18:46 notas.txt
[pf@deti-cte ~]$ mkdir Textos
[pf@deti-cte ~]$ ll -F
total 0
drwxr-xr-x. 2 pf users 24 Apr  1 18:18 Documents/
-rw-r--r--. 1 pf users  0 Apr  1 18:46 notas.txt
drwxr-xr-x. 2 pf users  6 Apr  1 19:05 Textos/
[pf@deti-cte ~]$ rmdir Textos/
[pf@deti-cte ~]$ rmdir Documents/
rmdir: failed to remove ‘Documents/’: Directory not empty
[pf@deti-cte ~]$ ll Documents/
total 0
-rw-r--r--. 1 pf users 0 Apr  1 18:15 notas2.txt

Note-se, no exemplo anterior, que rmdir só consegue apagar diretórios que estejam vazios. Se contiverem alguns ficheiros, ou outras pastas, o comando não tem efeito.

Proteger os ficheiros de danos acidentais…

Por razões históricas, os comandos rm, mv e cp são normalmente definidos como não tendo protecção contra acidentes na manipulação de ficheiros. Na grande maioria dos sistemas Linux, a instrução acima com o comando rm elimina diretamente o ficheiro, sem pedir confirmação. Isto pode ter consequências indesejadas. Outra coisa a ter em conta é que, também normalmente, é muito difícil fazer o “undelete” de um ficheiro apagado em Linux (não é impossível, mas pode ser difícil…) Do mesmo modo, não há protecção contra copiar um ficheiro para cima de um outro: não há normalmente qualquer pedido de confirmação. O ficheiro copiado é escrito por cima do original, cujo conteúdo fica perdido.

No entanto, é possível proteger o sistema contra estes perigos. Para isso, vamos recorrer ao comando alias, um dos comandos internos da Bash (façam help alias para ter informação sobre o comando.) A definição de alias no Dicionário Merriam-Webster é: “an assumed or additional name that a person (such as a criminal) sometimes uses”. Ou seja, um nome falso. Neste caso, vamos criar um novo comando, que é um alias para um comando mais complexo.

A protecção contra inadvertidamente apagar ou escrever por cima de um ficheiro existente obtém-se com a opção -i nos comandos cp, mv e rm:

[pf@deti-cte ~]$ man cp
CP(1)                            User Commands                           CP(1)

NAME
       cp - copy files and directories

SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST
       cp [OPTION]... SOURCE... DIRECTORY
       cp [OPTION]... -t DIRECTORY SOURCE...

DESCRIPTION
       Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

       Mandatory  arguments  to  long  options are mandatory for short options
       too.
--- Várias linhas apagadas ---
       -i, --interactive
              prompt before overwrite (overrides a previous -n option)

O comando para criar o alias é:

[pf@deti-cte ~]$ alias rm='rm -i'

A partir de agora, o comando rm passa a significar rm -i, ou seja, quando apagar, pergunta sempre antes de apagar o ficheiro. A mesma coisa deve ser feita para os comandos cp e mv.

[pf@deti-cte ~]$ alias cp='cp -i'
[pf@deti-cte ~]$ alias mv='mv -i'
[pf@deti-cte ~]$ alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

Notem que o comando ll, que temos estado a usar, é na realidade um alias de ‘ls -l’.

Quando agora se der o comando para apagar ou mover ou copiar para cima de outro ficheiro, o sistema vai perguntar primeiro se o queremos mesmo fazer:

[pf@deti-cte ~]$ touch notas.txt
[pf@deti-cte ~]$ rm notas.txt
rm: remove regular empty file ‘notas.txt’? n
[pf@deti-cte ~]$ ll
total 0
drwxr-xr-x. 2 pf users 24 Apr  1 18:18 Documents
-rw-r--r--. 1 pf users  0 Apr  1 18:39 notas.txt

Por ter dado a resposta “Não”, o ficheiro é mantido. O primeiro comando, touch, destina-se a criar um ficheiro vazio com o nome “notas.txt”.

Guardar as definições (começar a configurar o sistema)

As definições dadas acima só são válidas enquanto estivermos na sessão em que as criámos. Se sairmos (logout), essas definições são perdidas e, quando voltarmos a entrar, voltamos a estar sujeitos a apagar ficheiros sem querer. Para as tornar permanentes, temos que as registar num ficheiro de configuração. Neste caso, o ficheiro .bashrc.

Para isso, vamos usar o comando nano, um editor de texto que funciona em janela terminal. O comando será:

[pf@deti-cte ~]$ nano .bashrc

Deveremos obter um ecrã parecido com o seguinte:

Precisamos agora de, na secção onde diz “User specific alias and functions”, acrescentar os novos alias:

e gravar o ficheiro (Ctrl-X, Y, Enter).

Redirecionamento e comunicação entre processos (pipe)

O redirecionamento é um processo que permite que o que seria enviado para a saída “normal” (o ecrã para os comandos lançados a partir da linha de comandos) seja encaminhado para outros destinos. De igual modo, o redirecionamento permite que as entradas que seriam lidas da entrada “normal” (o teclado) sejam lidos de outras origens. O direcionamento é feito com os caracteres > e <.

Antes de tratarmos do redirecionamento, vamos conhecer um outro comando do Unix: cat, que é uma abreviatura de concatenate. O manual do cat diz:

CAT(1)                           User Commands                          CAT(1)

NAME
       cat - concatenate files and print on the standard output

SYNOPSIS
       cat [OPTION]... [FILE]...

O cat permite-nos ver o conteúdo de ficheiros (imprime o conteúdo de ficheiros no ecrã). Por exemplo, para ver os conteúdos do ficheiro .bashrc:

[pf@deti-cte ~]$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Se não dermos o nome um ficheiro, o cat utiliza a entrada “normal”, isto é, o teclado (também conhecido pelo nome de “standard input” ou pela abreviatura stdin). Desta forma, o cat permite-nos, juntamente com o caracter de redirecionamento, escrever para ficheiros:

[pf@deti-cte ~]$ cat > compras.txt
Leite
Iogurte
Café
Arroz
[^D]
[pf@deti-cte ~]$ cat compras.txt
Leite
Iogurte
Café
Arroz

Na primeira linha, o cat recebe a entrada do teclado e a saída (que seria o ecrã) é reencaminhada para o ficheiro compras.txt. Para terminar, é preciso escrever Ctrl-D (pressionar as teclas Ctrl e D, também representado por ^D) numa linha vazia. ^D corresponde a EOF (de end of file, ou seja, fim de ficheiro) quando se está a escrever no teclado.

O redirecionamento com > reescreve os conteúdos do ficheiro destino. Se repetíssemos o comando $ cat > compras.txt, o conteúdo de compras.txt seria reescrito. Dito de outra forma, o programa cat começava a escrever desde o início do ficheiro e o que lá estivesse guardado seria perdido. O redirecionamento com >> signfica “acrescentar ao ficheiro”. Ou seja, mantém os conteúdos que existiam e escreve no fim do ficheiro.

[pf@deti-cte ~]$ cat >> compras.txt
Cerveja
[^D]
[pf@deti-cte ~]$ cat compras.txt
Leite
Iogurte
Café
Arroz
Cerveja

O comando | (pipe) recolhe a saída de um programa e direciona-a para a entrada de um outro programa. O exemplo seguinte utiliza o programa wc, que significa word count (na realidade, faz mais do que isso; conta linhas, palavras e caracteres), para contar quantas linhas, palavras e caracteres tem o ficheiro .bashrc.

[pf@deti-cte ~]$ cat .bashrc | wc
     15      45     283

Neste caso, o comando cat .bashrc imprime o conteúdo do .bashrc. O resultado, em vez de ser dirigido para o ecrã é capturado pelo pipe, que o encaminha para a entrada do programa wc que, por sua vez, vai contar quantas linhas, palavras e letras tem: 15 linhas, 45 palavras e 283 caracteres. 4

Os ficheiros podem ser longos demais para serem vistos no ecrã. Nesse caso, usar o cat apenas vai permitir ver as últimas linhas, já que as restantes vão rapidamente passar pelo ecrã. O ficheiro /etc/services tem a lista dos serviços que estão ou podem estar ativos numa máquina Linux. Fazer $ cat /etc/services vai servir de pouco… Para ver o conteúdo de ficheiros longos, podemos usar o programa more ou o seu “primo” mais novo less.

[pf@deti-cte ~]$ less /etc/services

Quando o ficheiro está a ser mostrado pelo less, a tecla Espaço serve para avançar e a tecla u para recuar (há bastante mais comandos, mas estes são os mais imediatos. $ man less mostra todas as possibilidades.)

Histórico de comandos

Uma das características mais úteis do interface de linha de comando é a history. Todos os comandos lançados vão sendo guardados em memória e num ficheiro (o ficheiro .bash_history) e podem ser recuperados mais tarde. As teclas de seta para cima ↑ e seta para baixo ↓ permitem navegar na história dos comandos: ↑ vai buscar o comando anterior.

Com o comando history temos acesso à história dos comandos já lançados:

pf@deti-cte ~]$ history
=== Várias linhas suprimidas ===
   30  ll
   31  nano .bashrc
   32  ll -F
   33  mkdir Textos
   34  ll -F
   35  rmdir Textos/
   36  rmdir Documents/
   37  ll Documents/
   38  cat .bashrc
   39  cat > compras.txt
   40  cat compras.txt
   41  cat >> compras.txt
   42  cat compras.txt
   43  cat .bashrc | wc
   44  less /etc/services
   45  history
[pf@deti-cte ~]$

Posso agora repetir os comandos que estejam na lista do histórico com o comando !.

Comando Descrição
! Repete o último comando
!nn Repete o comando com o número nn
!texto Repete o último comando que começa com texto

Os seguintes comandos referem-se à lista de histórico de comandos na listagem anterior:

[pf@deti-cte ~]$ !44
less /etc/services
[pf@deti-cte ~]$ !ll
ll Documents/
total 0
-rw-r--r--. 1 pf users 0 Apr  1 22:55 notas2.txt

O comando fc funciona de forma semelhante, mas permite editar e modificar a linha de comando antes de a executar.

Gerir espaço e ficheiros em disco

Espaço livre e espaço ocupado

Comando Descrição
df Espaço livre em disco (disk free)
du Espaço ocupado em disco (disk usage)

Os comandos due df permitem saber qual o espaço ocupado e qual o espaço livre em disco. Se nada for definido, a contagem é feita em blocos de 1024 bytes (ou 512 nalgumas configurações). A opção -h (human readable format) é geralmente útil.

O espaço livre no volume onde está o diretório corrente é dado por:

[pf@deti-cte ~]$ df . -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   37G  1.8G   36G   5% /

O espaço ocupado pelos ficheiros do utilizador pf é dado por:

[pf@deti-cte ~]$ du -h /home/pf/
0	/home/pf/Documents
28K	/home/pf/

Encontrar ficheiros e texto

Comando Descrição
find Procura ficheiros no disco
grep Procura texto dentro de ficheiros

O comando find permite encontrar ficheiros num disco, ou em parte da árvore de ficheiros, que cumpram determinadas condições. Uma das aplicações mais comuns é procurar um ficheiro por nome. Por exemplo, para procurar um ficheiro chamado notas.txt

[pf@deti-cte ~]$ find . -name notas.txt

Para procurar um ficheiro cujo nome comece por notas e termine em .txt:

[pf@deti-cte ~]$ find . -name notas\*.txt
./Documents/notas2.txt

Neste caso, o find encontra o ficheiro notas2.txt que está na pasta Documents/ debaixo do diretório atual (ou corrente).

Encontrar texto em ficheiros

O comando grep permite procurar texto dentro de ficheiros. Este comando funciona como um filtro, que lê a entrada (se nada for dito, é o teclado) várias linhas de texto e escreve na saída (mais uma vez, se nada for dito em contrário, escreve para o ecrã) as linhas que cumpram determinada condição.

[pf@deti-cte ~]$ grep
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

Por exemplo, para encontrar todos os comandos anteriores em que aparecesse a expressão “etc”:

[pf@deti-cte ~]$ history | grep etc
   10  cat /etc/sudoers
   11  sudo cat /etc/sudoers
   30  cd /etc/
  190  less /etc/services
  213  cat /etc/passwd
  215  cat /etc/shells
  297  history | grep etc

Neste caso, history imprime a lista de comandos executados; | (pipe) captura essa saída e encaminha-a para o comando grep; este comando grep recebeu como PATTERN (padrão) o termo etc, pelo que envia para o ecrã as linhas em que surja etc.

Saber quais os serviços que estão relacionados com o protocolo IMAP pode ser obtido com o seguinte:

[pf@deti-cte ~]$ cat /etc/services | grep imap
imap            143/tcp         imap2           # Interim Mail Access Proto v2
imap            143/udp         imap2
imap3           220/tcp                         # Interactive Mail Access
imap3           220/udp                         # Protocol v3
imaps           993/tcp                         # IMAP over SSL
imaps           993/udp                         # IMAP over SSL
berknet         2005/tcp     csync      # csync for cyrus-imapd
oracle          2005/udp     csync      # csync for cyrus-imapd
  1. Em português, library significa biblioteca. Livraria, em inglês, é bookshop

  2. Nos sistemas mais recentes, a montagem de dispositivos USB e semelhantes segue um princípio diferente. 

  3. Nos sistemas geridos por pacotes (Red Hat, Fedora, CentOs, Debian, Ubuntu, Mint, …), o opt é geralmente usado para as instalações manuais. 

  4. Notem que aqui começa a surgir a filosofia do Unix: programas pequenos e simples, que fazem uma única coisa cada um e que comunicam uns com os outros através de interfaces de texto.