2.3 Lição 2
Certificação: |
Linux Essentials |
---|---|
Versão: |
1.6 |
Tópico: |
2 Como se orientar em um sistema Linux |
Objetivo: |
2.3 Como usar diretórios e listar arquivos |
Lição: |
2 de 2 |
Introdução
O sistema operacional Unix foi originalmente projetado para computadores mainframe em meados da década de 1960. Esses computadores eram compartilhados entre muitos usuários, que acessavam os recursos do sistema através de terminais. Essas idéias fundamentais ainda estão presentes nos sistemas Linux de hoje em dia. Ainda falamos sobre o uso de “terminais” para inserir comandos no shell, e os sistemas Linux são organizados de tal maneira que é fácil criar diversos usuários em um único sistema.
Diretórios Home
Eis um exemplo de um sistema de arquivos normal no Linux:
$ tree -L 1 / / ├── bin ├── boot ├── cdrom ├── dev ├── etc ├── home ├── lib ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── srv ├── sys ├── tmp ├── usr └── var
A maioria desses diretórios existe em todos os sistemas Linux. De servidores a supercomputadores, passando por pequenos sistemas embarcados, um usuário experiente do Linux pode ter a certeza de que vai encontrar o comando ls
dentro de /bin
, que pode alterar a configuração do sistema modificando arquivos em /etc
e ler os logs do sistema em /var
. A localização padrão desses arquivos e diretórios é definida pelo FHS (Filesystem Hierarchy Standard, ou padrão de sistema de arquivos hierárquico), que será discutido em uma lição mais pra frente. Você aprenderá mais sobre o conteúdo desses diretórios à medida que continuar estudando o Linux, mas por enquanto, é importante saber que:
-
as alterações feitas no sistema de arquivos raiz (root) afetarão todos os usuários, e
-
alterar arquivos no sistema de arquivos raiz exigirá permissões de administrador.
Isso significa que os usuários normais não terão a permissão para alterar esses arquivos, e talvez nem mesmo para a leitura deles. Abordaremos o tópico das permissões em uma seção posterior.
Agora, vamos nos concentrar no diretório /home
, que você já deve conhecer bem:
$ tree -L 1 /home /home ├── user ├── michael └── lara
Nosso sistema de exemplo tem três usuários normais e cada um deles tem acesso a seu próprio local dedicado, no qual é possível criar e modificar arquivos e diretórios sem afetar o vizinho. Por exemplo, na lição anterior, estávamos trabalhando com a seguinte estrutura de arquivos:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt
Na realidade, o sistema de arquivos pode ser assim:
$ tree /home /home ├── user │ └── Documents │ ├── Mission-Statement │ └── Reports │ └── report2018.txt ├── michael │ ├── Documents │ │ └── presentation-for-clients.odp │ └── Music
…e assim por diante para lara
.
No Linux, /home
é semelhante a um prédio de apartamentos. Muitos usuários podem ter seu espaço aqui, separados em apartamentos dedicados. As instalações básicas e a manutenção do próprio edifício são de responsabilidade do usuário root, que representa o síndico.
O caminho relativo especial para home
Ao iniciar uma nova sessão no terminal do Linux, vemos um prompt de comando semelhante a este:
user@hostname ~ $
O til (~
) representa, aqui, o diretório home. Se executarmos o comando ls
, veremos um resultado conhecido:
$ cd ~ $ ls Documents
Compare-o ao sistema de arquivos acima para entender melhor.
Considere agora o que sabemos sobre o Linux: ele é semelhante a um prédio de apartamentos, com muitos usuários residentes em /home
. Portanto, a casa de user
será diferente da casa do usuário michael
. Para demonstrar isso, usaremos o comando su
para trocar de usuário.
user@hostname ~ $ pwd /home/user user@hostname ~ $ su - michael Password: michael@hostname ~ $ pwd /home/michael
O significado de ~
muda dependendo de quem for o usuário. Para michael
, o caminho absoluto de ~
é /home/michael
. Para lara
, o caminho absoluto de ~
é /home/lara
, e assim por diante.
Caminhos de arquivos relativos-a-home
A possibilidade de usar ~
para os comandos é muito conveniente, desde que você não troque de usuário. Vamos considerar o exemplo a seguir para user
, que iniciou uma nova sessão:
$ ls Documents $ cd Documents $ ls Mission-Statement Reports $ cd Reports $ ls report2018.txt $ cd ~ $ ls Documents
Note que os usuários sempre iniciam uma nova sessão em seu diretório pessoal. Neste exemplo, user
trocou para o subdiretório Documents/Reports
e, com o comando cd ~
, voltou ao ponto de partida. É possível executar a mesma ação usando o comando cd
sem argumentos:
$ cd Documents/Reports $ pwd /home/user/Documents/Reports $ cd $ pwd /home/user
E por fim: podemos especificar os diretórios pessoais de outros usuários especificando o nome de usuário após o til. Por exemplo:
$ ls ~michael Documents Music
Porém, isso só funciona se michael
nos der permissão para visualizar o conteúdo de seu diretório pessoal.
Vamos considerar uma situação em que michael
gostaria de visualizar o arquivo report2018.txt
no diretório inicial de user
. Supondo que michael
tenha permissão para fazê-lo, ele pode usar o comando less
.
$ less ~user/Documents/Reports/report2018.txt
Qualquer caminho de arquivo que contenha o caractere ~
é chamado de caminho relativo-a-home.
Arquivos e diretórios ocultos
Na lição anterior, introduzimos a opção -a
para o comando ls
. Usamos ls -a
para introduzir os dois caminhos relativos especiais: .
e ..
. A opção -a
lista todos os arquivos e diretórios, incluindo os arquivos e diretórios ocultos.
$ ls -a ~ . .. .bash_history .bash_logout .bash-profile .bashrc Documents
Os arquivos e diretórios ocultos sempre começam com um ponto (.
). Por padrão, o diretório home de um usuário inclui diversos arquivos ocultos. Eles servem geralmente para estabelecer as configurações específicas do usuário e devem ser modificados somente por um usuário experiente.
A opção de lista longa
Existem muitas opções que permitem mudar o comportamento do comando ls
. Vamos conhecer uma das mais comuns:
$ ls -l -rw-r--r-- 1 user staff 3606 Jan 13 2017 report2018.txt
-l
cria uma lista longa. Os arquivos e diretórios ocuparão uma linha cada, mas também serão exibidas informações adicionais sobre cada arquivo e diretório.
-rw-r—r--
-
Tipo de arquivo e permissões do arquivo. Note que um arquivo regular começa com traço e um diretório começa com
d
. 1
-
Número de links para o arquivo.
user staff
-
Especifica a posse do arquivo.
user
é o proprietário do arquivo, o qual também está associado ao grupostaff
. 3606
-
Tamanho do arquivo em bytes.
Jan 13 2017
-
Registro de data e hora da última modificação do arquivo.
report2018.txt
-
Nome do arquivo.
Temas como posse, permissões e links serão abordados em lições futuras. Como vemos, a versão em lista longa do ls
é muitas vezes preferível à padrão.
Opções adicionais de ls
Eis algumas das maneiras mais comuns de se usar o comando ls
. O usuário pode combinar várias opções para obter a saída desejada.
ls -lh
-
A combinação de lista longa com tamanhos de arquivo legíveis para humanos fornece sufixos úteis como
M
para megabytes ouK
para quilobytes. ls -d */
-
A opção
-d
lista os diretórios, mas não seu conteúdo. A combinação com*/
mostra apenas os subdiretórios e nenhum arquivo. ls -lt
-
Combina a lista longa com a opção de classificar por data de modificação. Os arquivos com as alterações mais recentes aparecem na parte superior e os arquivos com as alterações mais antigas, na parte inferior. Mas essa ordem pode ser invertida com:
ls -lrt
-
Combina a lista longa com classificar por data (de modificação), junto com
-r
, que inverte a classificação. Agora, os arquivos com as alterações mais recentes aparecem na parte inferior da lista. Além de classificar por data de modificação, os arquivos também podem ser classificados por data de acesso ou data de alteração de status. ls -lX
-
Combina a lista longa com a opção de classificar por eXtensão de arquivo. Serve, por exemplo, para agrupar todos os arquivos que terminam com
.txt
, todos os arquivos que terminam com.jpg
e assim por diante. ls -S
-
O
-S
classifica por tamanho de arquivo, da mesma forma que-t
e-X
classificam por data e extensão, respectivamente. Os arquivos maiores aparecerão primeiro e os menores, por último. Observe que o conteúdo dos subdiretórios não está incluído na classificação. ls -R
-
A opção
-R
modifica o comandols
para exibir uma lista recursiva. O que isso significa?
A recursão no Bash
A recursão (ou recursividade) é uma situação em que “algo é definido em termos de si mesmo”. A recursão é um conceito importantíssimo nas ciências da computação, mas aqui seu significado é bem mais simples. Vamos considerar nosso exemplo de antes:
$ ls ~ Documents
Já sabemos que user
possui um diretório inicial (home) e que nesse diretório existe um subdiretório. Até agora, o ls
nos mostrou apenas os arquivos e subdiretórios de um local, sem informar qual o conteúdo desses subdiretórios. Nestas lições, usamos o comando tree
para exibir o conteúdo de vários diretórios. Infelizmente, o tree
não é um dos utilitários integrantes do Linux e, portanto, nem sempre está disponível. Compare a saída de tree
com a saída de ls -R
nos seguintes exemplos:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt $ ls -R ~ /home/user/: Documents /home/user/Documents: Mission-Statement Reports /home/user/Documents/Reports: report2018.txt
Como você pode ver, com a opção recursiva, temos uma lista muito maior de arquivos. Na verdade, é como se rodássemos o comando ls
no diretório inicial de user
e encontrássemos um subdiretório. Entramos então nesse subdiretório e executamos o comando ls
novamente. Encontramos o arquivo Mission-Statement
e outro subdiretório chamado Reports
. E, novamente, entramos nesse subdiretório e executamos o comando ls
outra vez. Basicamente, executar o comando ls -R
é como dizer ao Bash: “Execute o ls
aqui e repita o comando em todos os subdiretórios que encontrar”.
A recursividade é particularmente importante nos comandos de modificação de arquivos, como copiar ou remover diretórios. Por exemplo, se você quiser copiar o subdiretório Documents
, precisará especificar uma cópia recursiva para estender esse comando a todos os subdiretórios.
Exercícios Guiados
-
Use a estrutura de arquivos abaixo para responder às três questões a seguir:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Qual comando permite navegar até o diretório
network
independentemente de seu local atual? -
Qual comando
user
poderia digitar para navegar até seu diretórioDocuments
a partir de/etc/udev
? Use o caminho mais curto possível. -
Qual comando
user
poderia digitar para navegar até o diretórioMusic
demichael
? Use o caminho mais curto possível.
-
-
Considere a seguinte saída de
ls -lh
para responder às duas questões a seguir. Note que os diretórios são indicados com umd
no início da linha.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Ao rodar o comando
ls -lrS
, qual arquivo aparecerá no início? -
Descreva o que você espera ver como saída de
ls -ad */
.
-
Exercícios Exploratórios
-
Rode o comando
ls -lh
num diretório que contenha subdiretórios. Observe o tamanho listado desses diretórios. Esses tamanhos de arquivo parecem corretos? Eles representam com precisão o conteúdo de todos os arquivos contidos naquele diretório? -
Eis um novo comando a experimentar:
du -h
. Rode esse comando e descreva a saída resultante. -
Em muitos sistemas Linux, podemos digitar
ll
e obter a mesma saída que teríamos comls -l
. Porém, note quell
não é um comando. Por exemplo,man ll
exibirá a mensagem de que não existe uma página de manual para esse caso. Este é um exemplo de alias. Por que os aliases seriam úteis para um usuário?
Resumo
Nesta lição, você aprendeu:
-
que cada usuário do Linux tem um diretório home,
-
o diretório home do usuário atual pode ser acessado usando
~
, -
qualquer caminho de arquivo que use
~
é chamado de caminho relativo-a-home.
Você também aprendeu algumas das maneiras mais comuns de modificar o comando ls
.
-a
(all)-
imprime todos os arquivos/diretórios, incluindo os ocultos
-d
(directories)-
lista os diretórios, mas não seu conteúdo
-h
(human readable)-
imprime o tamanho dos arquivos em formato legível para humanos
-l
(long list)-
fornece detalhes extras, um arquivo/diretório por linha
-r
(reverse)-
inverte a ordem de uma classificação
-R
(recursive)-
lista todos os arquivos, incluindo os que estão em cada subdiretório
-S
(size)-
classifica por tamanho de arquivo
-t
(time)-
classifica por data de modificação
-X
(eXtension)-
classifica por extensão de arquivo
Respostas aos Exercícios Guiados
-
Use a estrutura de arquivos abaixo para responder às três questões a seguir:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Qual comando permite navegar até o diretório
network
independentemente de seu local atual?cd /etc/network
-
Qual comando
user
poderia digitar para navegar até seu diretórioDocuments
a partir de/etc/udev
? Use o caminho mais curto possível.cd ~/Documents
-
Qual comando
user
poderia digitar para navegar até o diretórioMusic
demichael
? Use o caminho mais curto possível.cd ~michael/Music
-
-
Considere a seguinte saída de
ls -lh
para responder às duas questões a seguir. Note que os diretórios são indicados com umd
no início da linha.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Ao rodar o comando
ls -lrS
, qual arquivo aparecerá no início?Todas as pastas têm 4.0K, que é o menor tamanho de arquivo. Nesse caso,
ls
classifica alfabeticamente por padrão. A resposta correta é o arquivoscary.jpg
-
Descreva o que você espera ver como saída de
ls -ad */
.Esse comando exibe todos os subdiretórios, incluindo subdiretórios ocultos.
-
Respostas aos Exercícios Exploratórios
-
Rode o comando
ls -lh
num diretório que contenha subdiretórios. Observe o tamanho listado desses diretórios. Esses tamanhos de arquivo parecem corretos? Eles representam com precisão o conteúdo de todos os arquivos contidos naquele diretório?A resposta é não. Cada diretório tem um tamanho de arquivo listado como 4096 bytes. Isso acontece porque os diretórios, aqui, são uma abstração: eles não existem em forma de estrutura em árvore no disco. Quando vemos um diretório listado, na verdade estamos vendo um link para uma lista de arquivos. O tamanho desses links é de 4096 bytes.
-
Eis um novo comando a experimentar:
du -h
. Rode esse comando e descreva a saída resultante.O comando
du
gera uma lista com todos os arquivos e diretórios e indica o tamanho de cada um. Por exemplo,du -s
exibe o tamanho de todos os arquivos, diretórios e subdiretórios em um determinado local. -
. Em muitos sistemas Linux, podemos digitar
ll
e obter a mesma saída que teríamos comls -l
. Porém, note quell
não é um comando. Por exemplo,man ll
exibirá a mensagem de que não existe uma página de manual para esse caso. Você acha que isso se relaciona a qual recurso da linha de comando?ll
é um alias dels -l
. No Bash, podemos usar aliases para simplificar comandos usados com frequência.ll
costuma já vir definido no Linux, mas também é possível criar os seus.