terça-feira, 23 de setembro de 2014

Comando ls - listagem de diretórios e arquivos


Listagem de diretórios e arquivos com o comando ls

Colaboração: Rafael Moraes da Costa
Data de Publicação: 08 de setembro de 2010
ls  é um dos comandos mais conhecidos e utilizados em sistemas Unix-like. Em sua forma mais simples, lista o conteúdo de determinado diretório, contudo, com as opções certas, é capaz de prover informações que vão além da listagem de arquivos.
Vejamos algumas explicações seguidas por exemplos do ls e suas opções.
Mostrar tipos de arquivos; Para descobrir rapidamente quais tipos de arquivos estão armazenados em determinado diretório, basta utilizar a opção abaixo. Onde (/)está para diretórios, (*) para arquivos executáveis e (@) para links simbólicos:
    $ ls -F    dir/  exec@  exec.sh*  
Listar conteúdo de um determinado diretório e de todos sub-diretórios; Esta opção é útil quando é necessário identificar arquivos e diretórios, elimina a necessidade de uma busca diretório por diretório ou até mesmo da utilização de ferramentas de busca como find ou locate:
    $ ls -R dir/    dir/:    dir1        dir/dir1:    file1  
Listagem quase completa, porém oculta a representação do diretório corrente (.) e do diretório pai (..):
    $ ls -A    .bash_history  .bash_logout  .bash_profile  .bashrc  dir  dir2  exec  exec.sh  .hidden  .ssh  
Listar arquivos ocultos; Utilizando esta opção, todos arquivos são mostrados inclusive os ocultos. Os arquivos e diretórios ocultos são precedidos por um ponto (.):
    $ ls -a  
    .bash_logout  .bash_profile  .bashrc  
Listar arquivos detalhadamente; Com esta opção pode-se visualizar informações mais detalhadas.
A primeira coluna detalha as permissões do arquivo ou diretório e ainda informa o tipo do arquivo*, nota-se no exemplo drwxr-xr-x que se trata de um diretório (d), com permissão rwxr-xr-x 755, portanto o usuário dono tem permissão para leitura, escrita e execução, o grupo e outros tem permissão de leitura e execução, a segunda é a quantidade de links ou diretórios, a terceira e quarta mostram o usuário dono e grupo dono respectivamente, na quinta coluna temos o tamanho em bytes (Quando é um diretório este valor representa o número de blocos usados pelo diretório para armazenar as informações sobre seu conteúdo), depois a data e hora da última modificação e por fim o nome (quando se trata de um link simbólico, o nome do link aponta para o arquivo original, como demonstrado abaixo):
    $ ls -l    total 12    drwxr-xr-x 3 rafael rafael 4096 Ago 29 14:00 dir    drwxr-xr-x 2 rafael rafael 4096 Ago 29 14:17 dir2    lrwxrwxrwx 1 rafael rafael    7 Ago 29 13:57 exec -> exec.sh    -rwxr-xr-x 1 rafael rafael   19 Ago 29 13:56 exec.sh  

Tipos de Arquivos

-rwxr-xr-xArquivo comum
drwxr-xr-xDiretório
lrwxr-xr-xLink Simbólico
brwxr-xr-xArquivo de dispositivo - Bloco ( Block device file )
crwxr-xr-xArquivo de dispositivo - Caracter ( Character device file )
prwxr-xr-xFIFO ( First in First Out - Named Pipe )
srwxr-xr-xSocket
Listar arquivos de forma mais inteligível; Esta opção mostra uma saída mais legível, os tamanhos são apresentados em Bytes, Kilobytes, Megabytes e etc. Não sendo necessário a converção de bytes para Megabytes e outras unidades:
    $ ls -lh    total 12K    drwxr-xr-x 3 rafael rafael 4,0K Ago 29 14:00 dir    drwxr-xr-x 2 rafael rafael 4,0K Ago 29 14:17 dir2    lrwxrwxrwx 1 rafael rafael    7 Ago 29 13:57 exec -> exec.sh    -rwxr-xr-x 1 rafael rafael   19 Ago 29 13:56 exec.sh  
Listar um diretório detalhadamente, mas sem apresentar o conteúdo; Normalmente quando se lista um diretório o comando ls é usado tendo como único argumento o diretório (ls dir) e todo o conteúdo do diretório é mostrado:
    $ ls -ld dir    total 4    drwxr-xr-x 2 rafael rafael 4096 Ago 29 14:00 dir1  
Listar arquivos ordenados por data e hora com os mais novos em primeiro:
    $ ls -lt    total 12    drwxr-xr-x 2 rafael rafael 4096 Ago 29 14:17 dir2    drwxr-xr-x 3 rafael rafael 4096 Ago 29 14:00 dir    lrwxrwxrwx 1 rafael rafael    7 Ago 29 13:57 exec -> exec.sh    -rwxr-xr-x 1 rafael rafael   19 Ago 29 13:56 exec.sh  
Listar arquivos ordenados por data e hora, desta vez com os mais antigos em primeiro:
    $ ls -ltr    total 12    -rwxr-xr-x 1 rafael rafael   19 Ago 29 13:56 exec.sh    lrwxrwxrwx 1 rafael rafael    7 Ago 29 13:57 exec -> exec.sh    drwxr-xr-x 3 rafael rafael 4096 Ago 29 14:00 dir    drwxr-xr-x 2 rafael rafael 4096 Ago 29 14:17 dir2  
Listar sem apresentar o dono e grupo; As opções -g ( não mostra o dono ) e -G ( não mostra o grupo ), deixam a saída mais compacta:
    $ ls -lgG      total 12      drwxr-xr-x 3 4096 Ago 29 14:00 dir      drwxr-xr-x 2 4096 Ago 29 14:17 dir2      lrwxrwxrwx 1    7 Ago 29 13:57 exec -> exec.sh      -rwxr-xr-x 1   19 Ago 29 13:56 exec.sh  
Omitir arquivo ou diretório especificado no comando:
    $ ls -I dir      dir2  exec  exec.sh  
Listar com o número de inode dos respectivos arquivos e diretórios:
    $ ls -i      780307 dir  780313 dir2  780308 exec  780309 exec.sh  
Listar arquivos e diretórios entre aspas:
    $ ls -Q      "dir"  "dir2"  "exec"  "exec.sh"  
Listar por ordem de tamanho:
Decrescente:
    $ ls -Sl      total 12      drwxr-xr-x 3 rafael rafael 4096 Ago 29 14:00 dir      drwxr-xr-x 2 rafael rafael 4096 Ago 29 14:17 dir2      -rwxr-xr-x 1 rafael rafael   19 Ago 29 13:56 exec.sh      lrwxrwxrwx 1 rafael rafael    7 Ago 29 13:57 exec -> exec.sh  
Crescente:
    $ ls -Srl    total 12    lrwxrwxrwx 1 rafael rafael    7 Ago 29 13:57 exec -> exec.sh    -rwxr-xr-x 1 rafael rafael   19 Ago 29 13:56 exec.sh    drwxr-xr-x 2 rafael rafael 4096 Ago 29 14:17 dir2    drwxr-xr-x 3 rafael rafael 4096 Ago 29 14:00 dir  
Mostrar horário do último acesso:
    $ ls -ul      total 12      drwxr-xr-x 3 rafael rafael 4096 Ago 29 19:18 dir      drwxr-xr-x 2 rafael rafael 4096 Ago 29 19:18 dir2      lrwxrwxrwx 1 rafael rafael    7 Ago 29 19:49 exec -> exec.sh      -rwxr-xr-x 1 rafael rafael   19 Ago 29 19:49 exec.sh  
Listar um arquivo por linha:
    $ ls -1      dir      dir2      exec      exec.sh  
Estes exemplos são extremamente úteis no cotidiano de um administrador de sistemas. O ls é simples e com as opções, extremamente funcional e por vezes elimina a necessidade de usar outros comandos.
Em suma, com criatividade é possível criar diversas combinações facilitadoras fazendo com que as tarefas sejam mais dinâmicas e rápidas.
Rafael Moraes, é Analista de Suporte e Infraestrutura para sistemas Linux e também Instrutor em cursos preparatórios LPI. Possui as certificações LPIC-1, LPIC-2, ITIL Foundations e CISCO CCDA.