Recentemente encontro algum comando linux durante o login no site do meu cliente para recuperar o arquivo de log de atividade, e também estudo alguns dos tipos de arquivo linux, e um simples comando para saber quais são os tipos de arquivo no Sistema Operacional Linux.
Linux usa quatro tipos básicos de arquivo:
- arquivos ordinários
- diretórios
- links simbólicos
- arquivos de dispositivos de bloco e caracteres
Você determina o tipo de arquivo emitindo o comando ls -l e lendo o primeiro caractere de cada linha da saída.
A saída típica do comando ls é a seguinte:
$ ls -l
total 8
-rw-r-r- 1 root root 22 Out 6 15:33 anormalfile
brw-rw– 2 root disk 41, 0 Mai 5 1998 blockdev
crw-rw-rw- 2 root root 5, 0 Mai 5 1998 characterdev
drwxr-xr-x 2 root root 4096 Out 6 15:33 subdir
lrwxrwxrwxrwx 1 root root 11 Out 6 15:35 symbolic -> anormalfile
Ordinary files begin with a dash (-), directories begin with d, symbolic links begin with the character l, block devices are prefaced with the character b, and character devices begin with the letter c.
Arquivos ordinários
Um arquivo comum pode consistir de qualquer tipo de dado, incluindo programas executáveis. A maioria dos arquivos no sistema de arquivos Linux são deste tipo.
Diretórios
Um diretório é um arquivo que contém outros arquivos e diretórios, e fornece ponteiros para eles.
Realiza uma função similar a uma pasta em um gabinete de arquivos, na medida em que permite agrupar arquivos relacionados de uma forma organizada. No entanto, enquanto as pastas podem normalmente conter apenas ficheiros, as directorias podem conter directorias adicionais, frequentemente referidas como subdirectorias.
Ligações simbólicas
Um link simbólico – ou soft – aponta para o nome e localização de um ficheiro completamente separado. Assim, quando você abre, copia, move ou se refere ao link, a operação é de fato realizada no arquivo referenciado. Esta distinção é normalmente invisível para o utilizador. Se o ficheiro referenciado for removido ou renomeado, a ligação é quebrada e ocorre um erro se tentar abri-la.
Pode também criar ligações difíceis. Um link rígido aponta para os dados reais em um arquivo exatamente da mesma forma que um arquivo comum. Portanto, além do nome, não há diferença entre o arquivo original e um link rígido que aponta para os mesmos dados, e ambos podem ser considerados como arquivos comuns. Você pode distinguir um link rígido de qualquer outro arquivo comum apenas pelo número de links que cada um tem. O número de links é exibido no segundo campo de uma listagem ls -l. Se este número for maior que um, então você sabe que existem links rígidos adicionais para os dados.
Arquivos de dispositivos
Todos os dispositivos físicos que o Linux usa são representados por arquivos de dispositivos.
Arquivos de dispositivos podem ser classificados como especiais de caracteres ou especiais de blocos. Os arquivos especiais de caracteres representam dispositivos que interagem com o Linux em uma base de caractere por caractere, ou serial. Impressoras e terminais são exemplos deste tipo de dispositivo. Os arquivos block-special representam dispositivos como discos rígidos ou disquetes e CD-ROMs, que interagem com o Linux usando blocos de dados.
Todos os arquivos de dispositivos estão contidos no diretório /dev – por exemplo, o arquivo associado à primeira unidade de disquetes do sistema é /dev/fd0.
Arquivos de dispositivos são extremamente poderosos porque permitem aos usuários acessar dispositivos de hardware como unidades de disco, modems e impressoras como se fossem arquivos de dados. Portanto, você pode mover, copiar e transferir dados entre tais dispositivos facilmente, muitas vezes sem ter que usar comandos especiais ou sintaxe.
Nomes de arquivos e caminhos
A cada arquivo é atribuído um nome de arquivo, que pode ter até 256 caracteres de comprimento. Este nome pode consistir de uma mistura de letras maiúsculas e minúsculas, números e certos sinais de pontuação como o ponto, travessão ou sublinhado.
Determinados caracteres não podem ser usados em nomes de arquivos. Por exemplo, você não pode usar caracteres que representam um separador de campo – como uma vírgula – ou outros caracteres especiais que tenham um significado particular para a shell. Os caracteres especiais que você não pode usar são
! @ # $ % ^ & * ( ) { } ‘ ” \ / | ; < > ‘
Pathnames
Pode navegar entre directórios na linha de comandos usando pathnames. Para usar caminhos, você deve entender a estrutura de diretórios do sistema de arquivos do Linux. O diretório de nível mais alto no sistema de arquivos Linux é o diretório raiz, que é representado por uma barra oblíqua de avanço (/). Localizados sob o diretório raiz estão os diretórios de nível superior, seguidos por um ou mais níveis de subdiretório.
Estrutura de arquivos de um sistema de arquivos Linux
Você pode mover entre diretórios usando caminhos relativos ou absolutos.
Um caminho relativo começa com o diretório atual. Por exemplo, se você quiser mudar para o diretório de despesas de dentro do seu diretório home, você digita
cd expenses
Relative pathnames can begin with the name of a file or directory, or with symbolic references to the current directory (.) ou seu diretório pai (…), mas nunca com uma barra oblíqua avançada.
Um exemplo simples de um sistema de arquivos Linux
Um caminho absoluto mostra o caminho completo do diretório raiz (/). Por exemplo, o seguinte comando permite que você se mova do seu diretório atual diretamente para o subdiretório de aplicação no diretório usr que está localizado sob o diretório raiz:
cd /usr/application
Inodes, blocos, e arquivos especiais
Inodes
A cada arquivo é atribuído um número de inode único. Um inode é uma estrutura que define a localização e os atributos do arquivo. Você pode verificar o número do inode de um arquivo usando a opção -i com o comando ls. Você pode ver a informação que o inode de um arquivo contém usando a sintaxe stat do nome do arquivo. Este comando de saída (os resultados stat) mostra a informação relacionada com o inode do ficheiro “resultados”.
$ resultados stat
Arquivo: “resultados”
Tamanho: 8
Tipo de ficheiro: Arquivo normal
Modo: (0644/-rw-r–r–)
Uid: ( 0/ root)
Gid: ( 0/ root)
Dispositivo: 3,7 Inode: 123256 Ligações: 1
Acesso: Ter 25 Jul 16:45:00 2000 (00072.18:31:07)
Modificar: Qui Jul 20 12:35:20 2000 (00077.22:40:47)
Modificar: Thu Jul 20 12:35:20 2000 (00077.22:40:47)
Neste exemplo, alguns dos atributos que são exibidos incluem o tipo de arquivo, tamanho do arquivo, o ID de usuário do proprietário (UID), o número de links rígidos associados a ele e os tempos de criação, acesso e modificação do arquivo.
Um inode não armazena o nome de um arquivo. Os nomes de arquivos são armazenados em diretórios com seus números de inode associados. No exemplo do comando stat, o nome do ficheiro é obtido a partir do parâmetro de nome de ficheiro que introduziu.
Blocks
No sistema de ficheiros Linux, os ficheiros são armazenados em blocos, que são segmentos de tamanho idêntico do espaço em disco. Geralmente, o tamanho de um bloco varia de 512 bytes a 32 KB, dependendo da instalação do Linux. O tamanho máximo de um arquivo depende do tamanho do bloco utilizado no sistema de arquivos. Por exemplo, o tamanho máximo do arquivo para um sistema de arquivo ext2 é de 2 GB se ele usar blocos de 512 bytes.
SistemasDisk recuperam dados em blocos de tamanho de bloco, portanto, quanto maior o tamanho do bloco, mais eficiente será o acesso. O problema em criar blocos grandes é que ele pode desperdiçar espaço em disco. Por exemplo, se o tamanho do bloco é de 4 KB e a maioria dos arquivos contém apenas alguns bytes de dados, a maioria dos 4096 bytes de espaço em disco é desperdiçado para cada arquivo. Mas se você fizer o tamanho do bloco pequeno, o acesso ao disco será relativamente menos eficiente.
alguns comandos, tais como df, saem informações do disco em blocos de 1 KB, mesmo que a instalação armazene arquivos em um bloco de tamanho diferente. Uma maneira simples de verificar o tamanho do bloco do seu sistema é usar o comando du para exibir o uso do disco. Neste exemplo, o uso do disco para todos os arquivos que começam com “m” é mostrado.
$ du -h m*
36k mail
4.0k mail.rc
12k mailcap
12k mailcap.vga
4.0k man.config
4.0k mc.global
148k midi
40k mime-magic
104k mime-magic.dat
8.0k mime.types
4.0k minicom.users
0 motd
4.0k mtab
Neste exemplo, a saída do comando du mostra o tamanho do arquivo no disco em incrementos do tamanho do bloco, que é 4.0 KB neste caso. Uma exceção a esta regra é quando zero é exibido, o que indica que o arquivo está completamente vazio.
Arquivos especiais
Além de outros tipos de arquivo, o Linux faz uso de arquivos especiais, que são arquivos definidos pelo sistema que executam funções únicas quando acessados.
Arquivos especiais e suas funções
Por exemplo, se você precisa se livrar de uma saída indesejada de um comando, você pode redirecionar a saída para o arquivo /dev/null. Neste exemplo, quaisquer erros gerados pelo comando find são redirecionados de stderr para /dev/null.
$ find / -n myfile 2> /dev/null