Há comandos que se aprendem no primeiro dia de Linux e nunca mais se estudam a sério — e o ls é o exemplo perfeito. Quem administra servidores ou investiga incidentes escreve-o dezenas de vezes por dia, quase sempre com as mesmas duas ou três letras, ignorando que por trás daquela listagem aparentemente banal existem mais de cinquenta opções que transformam o ls numa ferramenta de diagnóstico, auditoria e investigação.
Saber exatamente o que está num diretório — o que lá existe, quando foi alterado, quem é o dono, quanto ocupa e o que está escondido — é frequentemente o primeiro passo de qualquer tarefa séria em administração de sistemas ou cibersegurança. Neste artigo percorremos as opções que realmente interessam, com exemplos práticos, e no final pode experimentá-las todas num simulador interativo sem sair da página.
O que faz o ls
O ls (de list) mostra o conteúdo de um ou mais diretórios — ou informação sobre ficheiros individuais, se lhe forem passados diretamente. Faz parte do pacote GNU coreutils, presente em praticamente todas as distribuições Linux, e a sua sintaxe geral é simples:
ls [OPÇÕES]... [FICHEIRO]...
Sem argumentos, lista o diretório atual: nomes organizados em colunas, por ordem alfabética, com os ficheiros ocultos (os que começam por ponto) escondidos. Um pormenor que poucos conhecem: o ls adapta o formato ao destino da saída. No terminal usa colunas; quando a saída vai para um pipe ou ficheiro, passa automaticamente para um nome por linha — por isso ls | wc -l conta entradas corretamente.
As opções que interessam
Filtrar o que aparece
- -a (
--all) — mostra tudo, incluindo os ocultos e as entradas.e... - -A (
--almost-all) — igual ao-a, mas sem o ruído do.e do..; na prática é quase sempre o que se pretende. - -B (
--ignore-backups) — omite cópias de segurança terminadas em~. - -I PADRÃO (
--ignore) — esconde o que casar com um padrão glob, por exemplo-I '*.pcap'. - -d (
--directory) — descreve o próprio diretório em vez do conteúdo;ls -ld /var/logmostra as permissões da pasta em si. - -R (
--recursive) — desce por todas as subpastas. Poderoso, mas com cuidado em árvores grandes.
Ordenar
- -t — ordena pela data de modificação, mais recente primeiro.
- -S — ordena por tamanho, do maior para o menor: ideal para descobrir o que encheu o disco.
- -X — ordena por extensão, agrupando ficheiros do mesmo tipo.
- -v — ordenação natural de números:
captura-2antes decaptura-10. - -U — não ordena; devolve as entradas pela ordem física do diretório, o que é mais rápido em diretórios enormes.
- -r (
--reverse) — inverte a ordenação em vigor. - -c e -u — trocam a data usada: o ctime (alteração do inode: permissões, dono) e o atime (último acesso ao conteúdo), respetivamente.
- –group-directories-first — coloca as pastas no topo, mantendo a restante ordenação.
A combinação mais célebre junta três destas opções:
ls -ltr # listagem longa, por data, invertida: o mais recente fica junto ao prompt
Formato de saída
- -l — a listagem longa: tipo e permissões, número de ligações, dono, grupo, tamanho, data e nome.
- -1 — um nome por linha, o formato que o
lsassume sozinho quando a saída não é um terminal. - -C e -x — colunas preenchidas de cima para baixo (predefinição) ou linha a linha.
- -m — tudo separado por vírgulas, a encher a largura disponível.
- -w N (
--width) — força a largura de saída em colunas, ignorando o tamanho real do terminal. - –color=auto — cor por tipo de entrada: diretórios a azul, executáveis a verde, ligações simbólicas a ciano, arquivos comprimidos a vermelho.
Detalhe por ficheiro
- -h (
--human-readable) — tamanhos em K, M e G, potências de 1024; –si faz o mesmo em potências de 1000. - -i (
--inode) — mostra o número de inode; dois nomes com o mesmo inode são hardlinks para o mesmo ficheiro. - -s (
--size) — espaço realmente ocupado em blocos, que pode diferir do tamanho aparente. - -F (
--classify) e -p — indicadores no fim do nome:/para pastas,*para executáveis,@para ligações simbólicas. - -Q (
--quote-name) — envolve os nomes em aspas, tornando visíveis espaços e caracteres invulgares. - -n (
--numeric-uid-gid) — UID e GID numéricos em vez de nomes. - -g, -o e -G — variantes da listagem longa sem a coluna do dono, sem a do grupo, ou escondendo o grupo.
- -Z (
--context) — o contexto de segurança SELinux de cada entrada. - –author e –full-time — coluna do autor e data completa com nanossegundos e fuso horário.
- -L (
--dereference) — segue a ligação simbólica e apresenta os dados do destino, não os do atalho.
ls -lah
total 168M
drwxr-xr-x 6 aluno aluno 4,0K jul 25 14:22 .
-rw------- 1 aluno aluno 412 jul 24 22:17 .env
-rwxr-xr-x 1 aluno aluno 1,9K jul 24 08:12 scan.sh
-rw-r--r-- 1 aluno aluno 139M jan 8 04:15 wordlist.txt
ls em cibersegurança
Num contexto de segurança, o ls deixa de ser um comando de conveniência e passa a ser instrumento de investigação. Quatro cenários concretos:
- Resposta a incidentes:
ls -latr /var/www/htmlrevela os ficheiros modificados mais recentemente num servidor web comprometido — webshells e backdoors tendem a aparecer no fundo da listagem, junto ao prompt. O-aé essencial: os atacantes adoram nomes começados por ponto. - Forense:
ls -l --full-timefornece datas com precisão de nanossegundos para construir linhas temporais, e alternar entre-lt,-lce-lupermite cruzar mtime, ctime e atime. Umchmodfurtivo não mexe no mtime, mas trai-se no ctime. - Análise de discos montados: ao examinar uma imagem ou um disco de outra máquina,
ls -lnmostra UID e GID numéricos reais, sem os traduzir pelos utilizadores locais — evita conclusões erradas sobre quem é o dono de quê. - Hardening e auditoria:
ls -ldverifica as permissões de diretórios sensíveis,ls -lideteta hardlinks suspeitos para binários privilegiados e, em sistemas com SELinux,ls -lZconfirma se os contextos de segurança estão corretos.
Experimente no simulador interativo
A melhor forma de fixar estas opções é vê-las a agir sobre o mesmo diretório. O simulador abaixo recria um diretório de laboratório com ficheiros ocultos, ligações simbólicas, executáveis e nomes com espaços. Clique nas opções agrupadas por função — filtrar, ordenar, formato e detalhe — e observe o terminal a refazer a listagem em tempo real; o botão Demonstrar tudo percorre sozinho trinta combinações comentadas, e os botões Anterior/Seguinte permitem avançar ao seu ritmo. No fundo encontra ainda a tabela completa de opções do GNU ls.
Erros comuns e boas práticas
- Não faça parsing da saída do ls em scripts. Nomes com espaços ou carateres especiais partem qualquer
for f in $(ls); use globs do shell oufind -print0. - Esquecer os ocultos. Sem
-aou-A, ficheiros como.envou pastas.git— frequentemente com credenciais — ficam invisíveis numa auditoria. - Confundir tamanho com espaço ocupado. O tamanho de
-lé o comprimento do conteúdo; o espaço real em disco é dado por-se pode ser maior (blocos) ou menor (ficheiros esparsos). - Confiar cegamente no atime. Na maioria dos sistemas modernos a opção de montagem
relatimelimita a atualização do atime, pelo quels -lupode não refletir o último acesso real. - Ignorar o alias. Muitas distribuições definem
alias ls='ls --color=auto'; se o comportamento diferir do esperado num script ou noutra conta, verifique comtype ls. - Usar -R sem pensar. Em árvores profundas, a listagem recursiva pode demorar e inundar o terminal; prefira restringir com
-Iou usar ferramentas de pesquisa dedicadas.
Conclusão
O ls é a prova de que dominar os fundamentos compensa: as mesmas duas letras que qualquer principiante escreve tornam-se, com as opções certas, uma ferramenta de diagnóstico, forense e auditoria. Se quer levar estas competências mais longe — da linha de comandos à resposta a incidentes — conheça os serviços de formação e consultoria em cibersegurança da HJFR no nosso catálogo de serviços, e continue a praticar com o artigo sobre o useradd, onde criamos utilizadores Linux passo a passo.
Este artigo faz parte da série “Comandos Linux, um a um” do blog HJFR — fique atento aos próximos comandos.
