Semana 8: Criação e edição de arquivos

Importante! Este material foi elaborado para ser lido em terminais e acompanhado (e praticado) em dispositivos de desktop!

Perguntas-chave

O que é um arquivo

Tipos de arquivos em sistemas UNIX-like

Como o conteúdo dos arquivos é acessado

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.

O que são descritores de arquivos

Fluxos de dados padrão

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

Redirecionamentos e pipes

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 +------------+

Como criar um novo arquivo

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.

Redirecionamento de escrita

Nota: como podemos ver, os redirecionamentos de escrita também funcionam para a escrita de dados em arquivos, mesmo que eles já existam.

Redirecionamento de ‘append’

Outra forma de alterar o conteúdo de arquivos

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

Como ler o conteúdo de arquivos

O usuário pode ler (visualizar) o conteúdo de arquivos…

Mas, se estivermos falando sobre como os processos podem ler o conteúdo de arquivos, a resposta será: com redirecionamento de leitura (<).