Introdução à Bash - Parte 1
- Introdução
- Comandos para ficheiros e pastas
- Redirecionamento e comunicação entre processos (pipe)
- Histórico de comandos
- Gerir espaço e ficheiros em disco
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
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.
Navegação em ficheiros e pastas
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 du
e 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
-
Em português, library significa biblioteca. Livraria, em inglês, é bookshop. ↩
-
Nos sistemas mais recentes, a montagem de dispositivos USB e semelhantes segue um princípio diferente. ↩
-
Nos sistemas geridos por pacotes (Red Hat, Fedora, CentOs, Debian, Ubuntu, Mint, …), o opt é geralmente usado para as instalações manuais. ↩
-
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. ↩
Comments
Your comments are welcome. Feel free to leave here your remarks or your opinion!