Nosso relacionamento com computadores é baseado em símbolos.
XVI CPF
A representação da informação dentro de um computador digital é feita na forma de números.
Representação interna do conteúdo de um arquivo
No LINUX ou no Windows, arquivos são concebidos e tratados como STREAMS (minhocas) de BYTES.
O que é um BYTE? Um BYTE é um número entre 0 e 255 (*). (*) NOTA: Um BYTE é um conjunto de 8 bits (dígitos binários)
A : 65 B : Z : 90 a : 97 b : z : : 48 1 : : 57 Caracteres especiais : 0 : NULO 8 : BACKSPACE 9 : TAB 10 : mudança de linha 12 : mudança de página
ABC 123 DE ab Convertendo a representação interna de um arquivo que eu considero como um arquivo texto: mudança de linha mudança de linha mudança de linha mudança de linha
Visualizando o arquivo no meu Terminal de Vídeo: $ cat arquivo ABC 123 DE ab $ ABC10123 DE ab
É claro que você já ouviu falar que os comandos no LINUX tem o seguinte formato: $ comando opções argumentos... PAUSA
entrada saída erro (saída de erro) opçõesargumentos retorno comando
Comandos no LINUX são aplicações (pequenos programas). OS LM dispositivos aplicação
entrada saída erro (saída de erro) retorno opçõesargumentos comando KERNEL (OS)
saída retorno arquivo cat KERNEL opções entrada erro (saída de erro)
saída retorno arquivo KERNEL opções entrada erro (saída de erro) cat
retorno arquivo KERNEL opções entrada erro (saída de erro) cat
retorno arquivo KERNEL opções entrada erro (saída de erro) cat
saída 0 (ZERO quer dizer OK) arquivo KERNEL opções entrada erro (saída de erro) cat
- Pô mas o cat não serve para eu ver o conteúdo de um arquivo? Tudo o que o cat cuspiu foram os tais numerinhos Tá certo isso ?
Por default, a saída padrão de um comando no SHELL é o terminal. O cat não sabe para onde vai a sua saída, ele simplesmente manda a minhoca para a saída que ele conhece. E a gente já viu o que o device driver do terminal faz com a minhoca de BYTES...
device driver (terminal) $ cat arquivo ABC 123 DE ab $
device driver (printer) ABC 123 DE ab $ cat arquivo > /dev/lp $ Impressora Personal TABAJet
File System (disco) $ cat arquivo > arquivo2 $ (conteúdo de arquivo2)
O UNIX introduz o conceito de que tanto arquivos quanto dispositivos manipulam STREAMS de BYTES.
O UNIX revolucionou ao propor que as interfaces com os dispositivos físicos aparentassem ser arquivos no File System. exemplos: /dev/mouse, /dev/modem, /dev/lp
Modelo geral de um device driver no UNIX: controle entradasaída device driver
saída retorno pau cat KERNEL opções entrada erro (saída de erro)
saída retorno pau KERNEL opções entrada erro (saída de erro) cat
retorno pau KERNEL opções entrada erro (saída de erro) cat saída não existe!
retorno pau KERNEL opções entrada cat saída erro (saída de erro)
retorno pau KERNEL opções entrada cat: pau not found cat saída
1 (UM quer dizer ERRO) arquivo KERNEL opções entrada erro (saída de erro) cat
A saída padrão e a saída de erro padrão no UNIX são dois canais de minhocas independentes. Tudo o que vale para a saída padrão vale para a saída de erro padrão.
Já que entradas e saídas para arquivos e dispositivos são STREAMS de BYTES, é possível ligar a saída de um comando na entrada de outro comando. Comandos, em princípio, não quebram esse padrão.
(out = in) retorno arquivo cat KERNEL opções erro wc -l argumentos retorno erro
PIPES são estruturas de processamento em que a saída padrão de um comando é conectada à entrada padrão do comando seguinte.
Um DIRETÓRIO é um conjunto de informações sobre arquivos e/ou outros diretórios.
babaoto $ dir1
Todo o processo no UNIX tem um diretório corrente ( pwd ). Nosso exercício começa, quando de alguma forma, após um cd fizemos do diretório dir1 o nosso diretório corrente. Nesse exercício, ele será o diretório corrente o tempo todo. Não revisaremos o comando cd.
babaoto $ pwd / qualquer coisa... /dir1 dir1
babaoto $ pwd / qualquer coisa... /dir1 $ dir1
babaoto $ pwd / qualquer coisa... /dir1 $ clear dir1
babaoto $ dir1
babaoto $ ls baba oto $ dir1
babaoto $ ls baba oto $ cp baba caco dir1
babaoto $ ls baba oto $ cp baba caco dir1 caco
babaoto $ ls baba oto $ cp baba caco dir1 caco
babaoto $ ls baba oto $ cp baba caco dir1 caco
babaoto $ ls baba oto $ cp baba caco $ dir1 caco
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco dir1 caco
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco dir1 caco
O SHELL entende o comando $ cat caco oto > caco como $ cat caco oto > caco Ele primeiro reseta o arquivo caco e depois concatena as minhocas de caco e oto. Resultado: ele apaga o conteúdo do arquivo caco e depois usa...
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco dir1 caco
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ dir1 caco
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ dir1 caco
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco dir1 caco
O SHELL entende o comando $ cat oto >> caco como $ cat oto >> caco Ele primeiro posiciona o arquivo caco no final deste e depois concatena a minhoca de oto.
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco dir1 caco
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ dir1 caco
Chega de cat por hoje...
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco dir1 caco
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco dir1 caco
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco $ dir1
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco $ mkdir dir12 dir1
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco $ mkdir dir12 dir1 dir12
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco $ mkdir dir12 $ dir1 dir12
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco $ mkdir dir12 $ ls dir12 $ dir1 dir12
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco $ mkdir dir12 $ ls dir12 $ cp oto dir12 dir1 dir12
O comando cp descobre que dir12 é um diretório: $ cp oto dir12 e então copia o arquivo oto nesse diretório. Repare que se dir12 não existisse o comando cp obviamente criaria um arquivo chamado dir12.
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco $ mkdir dir12 $ ls dir12 $ cp oto dir12 $ dir1 dir12 oto
babaoto $ ls baba oto $ cp baba caco $ cat caco oto > caco $ cp baba caco $ cat oto >> caco $ rm caco $ mkdir dir12 $ ls dir12 $ cp oto dir12 $ clear dir1 dir12 oto
babaoto $ dir1 dir12 oto
babaoto $ ls dir12 oto $ dir1 dir12 oto
babaoto $ ls dir12 oto $ mv oto ito dir1 dir12 oto
babaito $ ls dir12 oto $ mv oto ito dir1 dir12 oto
babaito $ ls dir12 oto $ mv oto ito $ dir1 dir12 oto
babaito $ ls dir12 oto $ mv oto ito $ rm dir12/oto dir1 dir12 oto
babaito $ ls dir12 oto $ mv oto ito $ rm dir12/oto dir1 dir12 oto
babaito $ ls dir12 oto $ mv oto ito $ rm dir12/oto $ dir1 dir12
babaito $ ls dir12 oto $ mv oto ito $ rm dir12/oto $ mv baba ito dir12 dir1 dir12
O comando mv descobre que baba e ito são arquivos e que dir12 é um diretório: $ mv baba ito dir12 assim, ele move os dois arquivos para esse diretório. Repare que se dir12 não existisse o comando mv resultaria em erro, pois ele não pode renomear dois arquivos para um terceiro.
babaito $ ls dir12 oto $ mv oto ito $ rm dir12/oto $ mv baba ito dir12 dir1 dir12
babaito $ ls dir12 oto $ mv oto ito $ rm dir12/oto $ mv baba ito dir12 $ dir1 dir12
babaito $ ls dir12 oto $ mv oto ito $ rm dir12/oto $ mv baba ito dir12 $ ls dir12 $ dir1 dir12
babaito $ ls dir12 oto $ mv oto ito $ rm dir12/oto $ mv baba ito dir12 $ ls dir12 $ ls dir12 baba ito $ dir1 dir12
babaito $ ls dir12 oto $ mv oto ito $ rm dir12/oto $ mv baba ito dir12 $ ls dir12 $ ls dir12 baba ito $ clear dir1 dir12
babaito $ dir1 dir12
babaito $ mv dir12/baba. dir1 dir12
baba ito $ mv dir12/baba. dir1 dir12
baba ito $ mv dir12/baba. $ dir1 dir12
baba ito $ mv dir12/baba. $ rm -r dir12 dir1 dir12
baba ito $ mv dir12/baba. $ rm -r dir12 dir1 dir12
baba $ mv dir12/baba. $ rm -r dir12 $ dir1
baba $ mv dir12/baba. $ rm -r dir12 $ ln baba oto dir1
baba $ mv dir12/baba. $ rm -r dir12 $ ln baba oto dir1 oto
baba $ mv dir12/baba. $ rm -r dir12 $ ln baba oto dir1 oto
baba $ mv dir12/baba. $ rm -r dir12 $ ln baba oto $ dir1 oto
baba $ mv dir12/baba. $ rm -r dir12 $ ln baba oto $ ln oto caco dir1 oto
baba $ mv dir12/baba. $ rm -r dir12 $ ln baba oto $ ln oto caco dir1 otocaco
baba $ mv dir12/baba. $ rm -r dir12 $ ln baba oto $ ln oto caco $ dir1 otocaco
baba $ mv dir12/baba. $ rm -r dir12 $ ln baba oto $ ln oto caco $ rm oto dir1 otocaco
baba $ mv dir12/baba. $ rm -r dir12 $ ln baba oto $ ln oto caco $ rm oto dir1 caco
$ mv dir12/baba. $ rm -r dir12 $ ln baba oto $ ln oto caco $ dir1 otocaco NOTA: Se eu tivesse feito: $ rm baba O resultado seria o indicado.
Vimos os comandos: cp COPY mv MOVE ln LINK rm REMOVE IMPORTANTE: Todos eles tem em comum o fato de alterarem as informações dos arquivos nos diretórios em que esses arquivos se localizam.
No LINUX ou no Windows, arquivos são concebidos e tratados como STREAMS (minhocas) de BYTES exemplo: representação interna do conteúdo de um arquivo
Comandos no UNIX são aplicações. OS LM dispositivos aplicação entradasaída
entrada saída erro (saída de erro) retorno opçõesargumentos comando KERNEL
A saída padrão e a saída de erro padrão no UNIX são dois canais de minhocas independentes.
PIPES são estruturas de processamento em que a saída padrão de um comando é conectada à entrada padrão do comando seguinte.
O UNIX introduz o conceito de que tanto arquivos quanto dispositivos manipulam STREAMS de BYTES.
Para o UNIX, as interfaces com os dispositivos físicos aparentam ser arquivos no File System. exemplos: /dev/mouse, /dev/modem, /dev/lp
Modelo geral de um device driver no UNIX: controle entradasaída device driver
CPU Process Management RAM Memory Management disco File Systems dispositivos Device Drivers X NOTA: Isto aqui é como um campeonato: Todo mundo joga contra todo mundo...
PAPAI NOEL não existe.
O cat não sabe para onde vai a sua saída, ele simplesmente manda a minhoca para a saída que ele conhece. E a gente já viu o que o device driver do terminal faz com a minhoca de BYTES...