você está aqui: Home  → Arquivo de Mensagens

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

O 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-x Arquivo comum
drwxr-xr-x Diretório
lrwxr-xr-x Link Simbólico
brwxr-xr-x Arquivo de dispositivo - Bloco ( Block device file )
crwxr-xr-x Arquivo de dispositivo - Caracter ( Character device file )
prwxr-xr-x FIFO ( First in First Out - Named Pipe )
srwxr-xr-x Socket

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.


 

 

Veja a relação completa dos artigos de Rafael Moraes da Costa

Opinião dos Leitores

Taf
08 Set 2010, 10:22
Boa, valeu!

Seria bom a tradução do manual do ls
ex:
$ ls --help
$ man help

igual já existem para alguns comandos como o proprio man, veja:
$ man man

Até+
Aurélio Jargas
08 Set 2010, 09:47
Parabéns Rafael, ficou muito bom o seu artigo. Conseguiu transmitir muita informação num texto conciso e recheado de exemplos. Ficou leve de ler, facinho de ir até o final sem cansar. E ainda me ensinou sobre o -A que eu não conhecia :)
Hélio
08 Set 2010, 08:44
Essa dica foi muito boa mesmo, uma dica para quem precisa de dicas. Valeu.
Murilo Fujita
08 Set 2010, 08:31
Muito bom! Com certeza será útil. Parabéns!
O autor ou alguém poderia dar uma explicação sobre o que é o inode. Nunca entendi esse conceito.
Obrigado!
Sharrukin
08 Set 2010, 03:08
Eu venho procurando um meio de fazer com que a listagem completa de determinado diretório seja feita com o path completo; tipo:
~$ ls /usr/bin

/usr/bin/ash
/usr/bin/bash
/usr/bin/kash
/usr/bin/lash
/usr/bin/nash
Mas nenhuma das opções do ls (a man page parece que não ajudou muito... ) me pareceu dar esta opção sem eu ter que "recortar e colar" com algum comando externo.
Buruno
05 Set 2010, 11:50
As parâmetros -u e -S são muito úteis! Valeu!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script