Importante! Este material foi elaborado para ser lido em terminais e acompanhado (e praticado) em dispositivos de desktop!
Os arquivos são acessados quando um processo requisita ao sistema uma via para escrita ou leitura de seu conteúdo. Em programação, é comum chamarmos essas vias de file handlers, mas, nos sistemas UNIX/Linux, elas são chamadas de descritores de arquivos.
STDIN
, STDOUT
e STDERR
são os
fluxos de dados padrão, ou seja, todo processo é iniciado com acesso a
esses três dispositivos. Na prática, eles são ligações simbólicas para
os descritores de arquivos atribuídos ao processo.
$ ls -l /dev/std*
lrwxrwxrwx 1 root root 15 mar 31 01:54 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 mar 31 01:54 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 mar 31 01:54 /dev/stdout -> /proc/self/fd/1
Por sua vez, os descritores de arquivos são ligações simbólicas com um dispositivo de terminal.
$ ls -l /proc/self/fd
lr-x------ 1 blau blau 64 abr 5 10:40 3 -> /proc/738490/fd
lrwx------ 1 blau blau 64 abr 5 10:40 0 -> /dev/pts/0
lrwx------ 1 blau blau 64 abr 5 10:40 1 -> /dev/pts/0
lrwx------ 1 blau blau 64 abr 5 10:40 2 -> /dev/pts/0
Originalmente, os fluxos de dados padrão originam-se no teclado do terminal ou destinam-se ao display do terminal. Quando queremos mudar este comportamento, nós recorremos aos mecanismos dos pipes e redirecionamentos:
Embora o efeito final seja o fluxo entre processos, o mecanismo do pipe é implementado na forma de dois redirecionamentos com o mesmo arquivo de pipe.
+------------+ FD1 +------+ FD0 +------------+
| PROCESSO 1 |------->| PIPE |------->| PROCESSO 2 |
+------------+ W +------+ R +------------+
vi
, vim
,
nano
, etc).touch
, por
exemplo).>
) ou de
append (>>
).Nota: outilitário
touch
é tradicionalmente associado à criação de novos arquivos, mas isso é apenas um efeito colateral opcional da sua principal finalidade, que é alterar a data e a hora do último acesso a um arquivo.
Nota: como podemos ver, os redirecionamentos de escrita também funcionam para a escrita de dados em arquivos, mesmo que eles já existam.
Utilitário sed
(stream editor) com a opção
-i
também é capaz de modificar o conteúdo de arquivos. Na
implementação GNU, também é possível criar um arquivo de backup passado
um sufixo como argumento da opção -i
:
$ echo $'banana\nlaranja' > teste.txt
$ cat teste.txt
banana
laranja
$ sed -i 's/banana/abacate/' teste.txt
$ cat teste.txt
abacate
laranja
$ sed -i.bkp 's/abacate/pitanga/' teste.txt
$ cat teste.txt
pitanga
laranja
$ cat teste.txt.bkp
abacate
laranja
O usuário pode ler (visualizar) o conteúdo de arquivos…
more
, less
,
most
, etc).Mas, se estivermos falando sobre como os processos podem ler o
conteúdo de arquivos, a resposta será: com redirecionamento de leitura
(<
).