Manipulando o ls
A sintaxe do
comando ls consiste em iniciar com o próprio
comando seguido de opções ou parâmetros que por sua vez podem
representar diversas situações e requisitos. Haverá diversas
necessidades de se obter conhecimento de determinado arquivo em
diretório, portanto a tabela abaixo apresenta uma série de argumentos e
situações que podem ser encontradas no dia-a-dia de administradores de
sistemas.
Tabela de parâmetros:
| Opção | Especificação |
| -a, --all | Não ignora entradas começando com . |
| -A, --almost-all | Não lista as entradas implícitas . e .. |
| --author | Com -l, emite o autor de cada arquivo |
| -b, --escape | Emite escapes em octal para caracteres não-gráficos |
| --block-size=TAMANHO | Usa blocos de TAMANHO bytes |
| -B, --ignore-backups | Não lista as entradas implícitas terminadas com ~ |
| -c | Com -lt: ordena por, e mostra, ctime. Com -l: mostra o ctime e ordena por nome |
| -C | Lista as entradas em colunas |
| --color[=QUANDO] | Controla se usa cores para distinguir
os tipos de arquivo. QUANDO pode ser "never" (nunca), "always" (sempre)
ou "auto" (automaticamente) |
| -d , --directory | Lista os diretório em vez de seu conteúdo e não interpreta ligações simbólicas |
| -D, --dired | Gera a saída projetada para modo "dired" do Emacs |
| -f | Não ordena, habilita -aU, desabilita -ls --color |
| -F, --classify | Anexa indicador (um dos */=>@|) às entradas |
| --file-type | Similar, exceto que não anexa "*" |
| --format=PALAVRA | "across" (-x), "commas" (-m), "horizontal" (-x), "long" (-l), "single-column" (-1), "verbose" (-l), "vertical" (-C) |
| --full-time | O mesmo que -l --time-style=full-iso |
| --group-directories-first | Lista os diretórios antes de
listar os arquivos. Permite usar a opção --sort, mas o uso de
--sort=none (-U) desabilita o agrupamento de diretórios. |
| -G, --no-group | Em lista longa (-l), não emite os nomes de grupo |
| -h, --human-readable | Com -l, emite os tamanhos em formato inteligível |
| --si | Similar, mas usa potências de 1000, e não de 1024 |
| -H, --dereference-command-line | Segue as ligações simbólicas listadas na linha de comando |
| --dereference-command-line-symlink-to-dir | Segue toda ligação simbólica da linha de comando que apontar para um diretório |
| --hide=PADRÃO | Não lista entradas implícitas que coincidam com o PADRÃO em sintaxe shell (ignorado quando se usa -a ou -A) |
| --indicator-style=PALAVRA | Anexa o indicador de tipo no
estilo PALAVRA para os nomes das entradas: "none" (nenhum, padrão),
"slash" (-p), "file-type" (--file-type), "classify" (-F) "file-type"
(--file-type), "classify" (-F) |
| -i, --inode | Emite o número de índice de cada arquivo |
| -I, --ignore=PADRÃO | Não lista as entradas implícitas que coincidam com o PADRÃO (em sintaxe shell) |
| -k | O mesmo que –block-size=1K |
| -l | Usa o formato de lista longa |
| -L, --dereference | Quando mostrar informações de uma
ligação simbólica, mostra as do arquivo a quem ela referencia, e não do
arquivo tipo ligação em si |
| -m | Preenche toda a largura com uma lista de entradas separadas por vírgula |
| -n, --numeric-uid-gid | Como -l, mas lista usuário e grupo em números ID |
| -N, --literal | Emite nomes de entradas de forma crua (não trata, por exemplo, caracteres de controle de forma especial) |
| -o | Como -l, mas não lista informações sobre o grupo |
| -p, --indicator-style=slash | Anexa o indicador / aos diretórios |
| -q, --hide-control-chars | Emite ? ao invés de caracteres não gráficos |
| --show-control-chars | Emite caracteres não gráficos como são (padrão seja um terminal) |
| -Q, --quote-name | Coloca os nomes das entradas entre aspas |
| --quoting-style=PALAVRA | Usa estilo de citação PALAVRA para os nomes das entradas: Palavra = literal, locale, shell, shell-always, c, escape |
| -r, --reverse | Inverte a ordem de ordenação |
| -R, --recursive | Lista subdiretórios recursivamente |
| -s, --size | Mostra o tamanho alocado para cada arquivo, em blocos |
| --sort=PALAVRA | Ordena por PALAVRA em vez de pelo nome:
none -U, extension -X, size -S, time -t, version -v (nenhum, extensão,
tamanho, hora, versão) |
| --time=PALAVRA | Com -l, mostra a hora como PALAVRA em vez
do horário de modificação: Palavra: atime -u, access -u, use -u: último
acesso, ctime -c, status -c: última modificação; usa o horário
especificado como chave de ordenação se --sort=time |
| --time-style=ESTILO | Com -l, emite os horários usando o
estilo ESTILO: FORMATO é interpretado como em "date"; se for FORMATO1,
FORMATO2, FORMATO1 se aplica a arquivos não recentes, e FORMATO2 aos
recentes; se ESTILO tem como prefixo "posix-", ESTILO só faz efeito
fora da localidade POSIX |
| -t | Ordena pelo horário de modificação |
| -T --tabsize=COL | Assume paradas de tabulação a cada COLS em vez de 8 |
| -u | com -lt: ordena e exibe por data de acesso com -l:
exibe o tempo de acesso e ordena por nome sem nenhum parâmetro, ordena
por data de acesso |
| -U | Não ordenar; exibe as entradas na ordem do diretório |
| -v | Ordena pela ordem natural dos números de versão dentro do texto |
| -w, --width=COLS | Assume a largura da tela como COLS |
| -x | Lista as entradas por linha em vez de por coluna |
| -X | Ordena por ordem alfabética das extensões das entradas |
| -Z, --context | Emite qualquer contexto de segurança SELinux de cada arquivo |
| -1 | Lista arquivos por linha |
| --help | Exibe a ajuda |
| --version | Informa a versão |
Pode-se encontrar algumas situações em que o uso avançado do comando ls
poderá ajudar na resolução de diversas tarefas que aparecem no nosso
cotidiano, portanto será necessário conhecer de forma completa ou
parcial para que as mesmas possam ser executadas resultando em minimizar
esforços ou até mesmo solucionar problemas complexos que se baseavam em
detalhes pouco observados.
Há momentos que precisaremos de modificar ou configurar arquivos no
sistema que estão ocultos ou até mesmo listar arquivos em diretórios que
estão ocultos, vale lembrar que arquivos ocultos e diretórios ocultos
começam com um . (ponto) no início. Mas como eu posso encontrar arquivos
ocultos em meus sistema? Simples! O seu diretório /home/usuário possui
diversos arquivos que são responsáveis por manter as configurações de
softwares e perfil do usuário, portanto será necessário usar um
parâmetro especial para lista-los, o -a. Dê o seguinte comando no
terminal para listar os arquivos e diretórios ocultos.
ls -a
.
.adobe
.aMule
.fontconfig
.profile
...
Como podem ver esse exemplo, os arquivos (o resultado está resumido) e
diretório com . (ponto) estão ocultos, que naturalmente não estão
visíveis na HOME do usuário. A opção -b apresenta na saída padrão todos
os arquivos que contém escapes. Escapes são caracteres não gráficos que
separam as palavras no nome de arquivos. Por exemplo: quando vemos
arquivos em modo gráfico naturalmente não vemos os caracteres de
escapes, se víssemos o nome do arquivo em modo gráfico seria visto da
seguinte maneira:
Visto em modo gráfico:
Implementando Servidor de Aplicações PHP com Zend Framework.odt
Em modo texto com a opção -b:
Implementando\ Servidor\ de\ Aplicações\ PHP\ com\ Zend\ Framework.odt
Portanto essa opção é valida para situações em que é necessário verificar quais arquivos possuem caracteres de escapes.
Em algumas distribuições GNU/Linux o comando ls não faz distinção de
cores em arquivos e diretórios, porém o parâmetro --color pode ter três
argumentos: nunca colorir (none), sempre colorir (always), colorir
automaticamente, que exige o parâmetro auto e surtirá efeito desde que a
saída padrão esteja associada a um terminal (tty).
Sendo assim o comando "ls --color=none" não fará a distinção de cores,
para que isso aconteça é preciso usar o argumento always da seguinte
forma: "ls --color=always" ou usar a opção auto.
Similar e mais complexo que o parâmetro none, podemos usar a "ls -f",
que desabilitará o suporte a cores e exibirá arquivos ocultos, nada mais
é do que a junção de "ls -aU" e "ls --color=none". Também com a opção
-F pode-se anexar indicadores nos arquivos classificando-os com símbolos
que pode caracterizar arquivos e diretórios, os caracteres usados são:
- * - Arquivos executáveis
- / - Para diretórios
- > - Aponta de onde está vindo link simbólico
- @ - Para link simbólico
- = - Soquete
Utilizando o comando "ls --classify" ele informará no final do arquivo
em qual classe se em enquadra o arquivo, por isso é importante saber os
caracteres acima. A opção --file-type possui o mesmo papel, porém não
exibe os arquivos executáveis. Usar o --format=Palavra exigirá o uso de
argumentos que podem corresponder a opções de separação por vírgula
(commas), ordenar em uma única (1), como mostra a tabela abaixo:
| Argumento | Exemplo |
| "across" (-x) | ls --format= across |
| "commas" (-m) | ls --format= commas |
| "horizontal" (-x) | ls --format= horizontal |
| "long" (-l) | ls --format=long |
| "single-column" (-1) | ls --format=single-column |
| "verbose" (-l)" | ls --format= verbose |
| "vertical" | ls --format= vertical |
A opção --full-time é semelhante à opção -l, mas não lista o dono do arquivo.
Na maioria das situações nos deparamos com a necessidade de saber qual é
o tamanho dos arquivos, seja para fazer uma transferência via rede, ou
movê-lo para um outro diretório qualquer, neste caso a opção -h irá
acrescentar uma coluna na saída padrão do comando contendo o tamanho do
arquivo, porém é necessário usar o parâmetro -l para que a coluna
apareça. Abaixo se as opções de uso e os respectivos argumentos:
O argumento -i refere-se ao número de índice de cada arquivo no sistema
que são chamados de inodes, ou seja, cada arquivo é identificado por um
número. Eles estão em um local reservado em seu disco rígido. Na figura
abaixo a primeira coluna mostra o número identificador do arquivo.
Podemos usar argumentos para verificar o tamanho de arquivos desejados.
Especificando o tamanho do arquivo podemos encontrar dentre vários
arquivos um arquivo com o tamanho especificado. Por exemplo: entre
vários arquivos em um diretório é possível listar somente os que possuem
tamanho de 10k com o seguinte argumento --block-size=10K.
Descrever o uso do tradicional parâmetro -l é bem simples, embora seu
resultado na saída padrão mostra-nos uma série de informações avançadas a
respeito do arquivo. Possui o parâmetro -l, por caracterizar uma lista
longa com formatos colunares. Em casos de necessidade de obter-se o
resultado na saída padrão em formato de separação por vírgula (;) usa-se
o parâmetro -m, como de costume o uso do formato colunar na saída
padrão, essa opção é obtida de forma linear na saída padrão.
Pode-se usar várias formas na saída padrão e portanto podemos colocar na
saída padrão o caractere entre aspas duplas usando o parâmetro -Q, esse
tipo de procedimento pode ser usado em scripts que envolvam a
possibilidade de usar os caracteres para algum fim específico.
A ordem de listagem pode ser apresentada de forma recursiva usando a
opção de -r e -R. Também há a possibilidade de verificar o tamanho do
espaço em disco reservado para o arquivo, a saída padrão é ordenada pelo
tamanho do arquivo caso utilize a opção -s. Se houver a necessidade de
ordenar a coluna por horário de modificação pode-se usar o parâmetro -t.
Também há um interessante parâmetro, o -Z, que referencia qualquer contexto de segurança SELinux de cada arquivo.
Finalizando, geralmente a exibição na saída padrão é feita em colunas
que possuem informações importantes, bem como data e hora de alteração,
usuário e grupo em que pertence o arquivo ou diretório, entre outras
informações, dependendo da opção que subsequente ao comando.
Usualmente escrever comandos extensos podem nos custar tempo e esforço,
portando pode-se customizar essas tarefas colocando comandos complexos
em comandos curtos chamados alias. Um modelo pré-definido pode ser
encontrado dentro do arquivo de configuração global para o alias no
final do arquivo /root/.bashrc, como mostra o exemplo abaixo.
# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
#if [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
#fi
Existem várias formas de se obter resultados de listagem de diretórios
com o ls, bastando que os parâmetros sejam anexados um ao outro para
obter um relatório contextualizado a sua necessidade. Em caso de
necessidades de se obter algum tipo de informação pode-se usar o
parâmetros de ajuda do próprio programa:
ls --help
O download desse arquivo pode ser feito aqui: