Domine o Comando `ls` no Linux: Guia Completo com Truques e Dicas

O comando `ls` no Linux é uma ferramenta utilizada diariamente, muitas vezes sem plena consciência de sua capacidade. Contudo, ao explorarmos suas funcionalidades, descobrimos um leque de opções que podem enriquecer significativamente nossa interação com a linha de comando.

`ls`: Uma ferramenta para visualizar arquivos e pastas

Para muitos usuários do Linux, o comando `ls` é um dos primeiros que aprendem. Ele é empregado rotineiramente para visualizar o conteúdo de diretórios e examinar permissões de arquivos. Entretanto, ele oferece muito mais do que a maioria dos usuários imagina.

A diversidade de opções do comando `ls` pode ser um obstáculo para muitos. Dada a quantidade de possibilidades, como discernir quais são as mais úteis e como memorizá-las? Uma estratégia eficaz é criar *aliases* para as permutações mais usadas, combinando opções e parâmetros. Curiosamente, o comando `ls`, muitas vezes, já é um alias. Utilizando o comando `type`, podemos revelar a definição subjacente:

tipo ls

A saída revela que o parâmetro `–color=auto` é automaticamente incluído, o que possibilita a diferenciação de tipos de arquivos por meio de cores.

Listagens básicas com `ls`

Por padrão, o comando `ls` exibe os arquivos e pastas do diretório atual.

ls

Para uma listagem em coluna única, utiliza-se a opção `-1`:

ls -1

A seguir, abordaremos o arquivo de nome incomum que aparece no topo da lista.

`ls` em outros diretórios

Para visualizar arquivos em um diretório diferente do atual, o caminho do diretório é passado como argumento para o `ls`. É possível especificar múltiplos diretórios para que o `ls` exiba seus conteúdos sequencialmente. No exemplo abaixo, o `ls` lista os arquivos nos diretórios “Help” e “gc_help”:

ls Help gc_help

O `ls` imprime o nome de cada diretório antes de exibir seu conteúdo:

Utilização de padrões de arquivo

A correspondência de padrões permite selecionar arquivos de maneira precisa. O caractere `?` substitui um único caractere, enquanto `*` representa qualquer sequência de caracteres. Para listar arquivos ou pastas cujos nomes comecem com “ip_”, o comando é:

ls ip_*

Para arquivos com extensão “.c”, usa-se:

ls *.c

O `ls` também pode ser combinado com o `grep`, explorando suas capacidades de correspondência. Para buscar arquivos com a sequência “_pin_” no nome:

ls | grep _pin_

Este resultado é similar a utilizar `ls` com curingas:

ls | grep _pin_
ls *_pin_*

A diferença reside no formato da saída. O `grep` impõe um arquivo por linha.

Caracteres não imprimíveis

É possível encontrar arquivos com caracteres de controle, o que geralmente ocorre após baixar um arquivo da web ou clonar um repositório Git. O arquivo de nome estranho que vimos anteriormente é um desses casos:

Ao tentar renomeá-lo no navegador de arquivos, esses caracteres são exibidos como símbolos incomuns:

A opção `-b` do `ls` exibe esses caracteres através de sequências de escape da linguagem C:

ls -b a*

O caractere misterioso se revela como um caractere de nova linha, representado como “\n”.

Ocultando arquivos

Para omitir arquivos de uma listagem, a opção `–hide` é utilizada. Por exemplo, para não exibir arquivos “.bak”:

ls
ls --hide=*.bak

Arquivos “.bak” são omitidos da segunda lista.

Formato de lista detalhada

A opção `-l` fornece informações detalhadas sobre cada arquivo:

ls -l

Esta saída inclui o tamanho total dos arquivos, seguido de informações detalhadas de cada item. O primeiro conjunto de dez caracteres indica o tipo de arquivo e as permissões de acesso (proprietário, grupo e outros). O primeiro caractere indica o tipo:

  • -: Arquivo comum
  • b: Arquivo especial de bloco
  • c: Arquivo especial de caractere
  • d: Diretório
  • l: Link simbólico
  • n: Arquivo de rede
  • p: Pipe nomeado
  • s: Soquete

Os nove caracteres subsequentes são divididos em três grupos de três, representando as permissões de leitura (r), escrita (w) e execução (x). Se uma permissão é concedida, a letra correspondente aparece; caso contrário, um hífen `-` é mostrado. Os grupos indicam as permissões para o proprietário, o grupo e outros usuários, respectivamente. A permissão de execução pode aparecer como `s`, indicando o bit setuid, ou seja, o arquivo é executado com os privilégios do proprietário. Ou como `s`, indicando o bit setgid, significando que o arquivo é executado com os privilégios do grupo do proprietário ou que todos os arquivos criados dentro de um diretório terão suas permissões de grupo do diretório. Também pode aparecer como `t`, referente ao bit sticky, geralmente usado em diretórios para restringir a exclusão ou renomeação de arquivos apenas ao seu proprietário ou root.

Um exemplo comum de uso do sticky bit é no diretório `/tmp`. O bit restringe que os usuários excluam ou renomeiem arquivos criados por outros.

Para ver o sticky bit, usamos a opção `-d` (diretório):

ls -l -d /tmp

O número seguinte às permissões indica o número de links físicos para o arquivo ou diretório. Seguem-se o nome do proprietário, o grupo, o tamanho do arquivo, a data de modificação e o nome do arquivo.

Tamanhos de arquivo legíveis

A opção `-h` (human-readable) exibe os tamanhos dos arquivos em unidades mais adequadas (KB, MB, etc.):

ls -l -h

Visualização de arquivos ocultos

A opção `-a` (all) exibe arquivos ocultos:

ls -l -a

Os diretórios “.” (atual) e “..” (pai) são exibidos, bem como arquivos ocultos, como “.base_settings”.

Ocultando “.” e “..”

A opção `-A` (almost-all) exibe arquivos ocultos, excluindo “.” e “..”:

ls -l -A

Listagem recursiva

A opção `-R` (recursive) lista os arquivos em todos os subdiretórios:

ls -l -R

O `ls` percorre a árvore de diretórios abaixo do diretório inicial, listando os arquivos em cada subdiretório.

Exibição de UID e GID

A opção `-n` (numeric uid and gid) exibe os IDs numéricos de usuário e grupo, em vez de seus nomes:

ls -n

Ordenação de listagens

As listagens podem ser ordenadas por extensão, tamanho ou hora de modificação. A opção `-X` (sort by extension) ordena por extensão:

ls -X -1

Os diretórios aparecem primeiro, seguidos por arquivos ordenados alfabeticamente por extensão. A opção `-S` (sort by size) ordena por tamanho do arquivo:

ls -l -h -S

A ordem é do maior para o menor arquivo. A opção `-t` (sort by time) ordena por hora de modificação:

ls -l -t

A ordem é do mais recente para o mais antigo. Para arquivos modificados no ano corrente, são exibidos o mês, dia e hora. Para arquivos mais antigos, são exibidos o mês, dia e ano. Para encontrar os arquivos mais recentes e mais antigos em um diretório:

O arquivo/diretório mais recente:

ls -t | head -1

O arquivo/diretório mais antigo:

ls -t | tail -1

Invertendo a ordem de classificação

A opção `-r` (reverse) inverte qualquer ordem de classificação:

ls -l -h -S -r

Agora a listagem está ordenada do menor para o maior arquivo.

Mais opções

A página do manual do `ls` revela uma infinidade de outras opções. Algumas atendem casos de uso específicos, mas, ocasionalmente, podem ser muito úteis. Para ver os carimbos de data/hora dos arquivos com a máxima precisão, use:

ls --full-time

Para visualizar o número de inode dos arquivos:

ls -i

Para diferenciar visualmente os tipos de arquivos em telas monocromáticas, use a opção `-F` (classify), adicionando os seguintes caracteres ao final de cada entrada:

  • /: Diretório
  • @: Link simbólico
  • |: Pipe nomeado
  • =: Soquete
  • *: Arquivo executável
ls -F

Aprofunde sua exploração. O comando `ls` é uma ferramenta poderosa e ainda há muito a ser descoberto.