Diretório atual e caminhos absoluto e relativo no Bash
Curso de Bash
Seção do curso de Bash sobre diretório atual (pwd) e caminhos relativo e absoluto.
Uma sessão de Bash sempre estará associada à um diretório atual.
Quando o Bash é iniciado, geralmente estará associado ao diretório de usuário do usuário que iniciou a sessão.
Conteúdo
Diretório atual
Diretório atual ou diretório de trabalho é o diretório ao qual Bash está associado no momento.
O diretório atual pode ser mudado porém sempre haverá um diretório atual.
Para determinar o diretório atual, o comando embutido pwd
pode ser executado.
pwd
/home/caio
A saída de pwd
exibe o caminho absoluto do diretório atual.
Diretório atual como .
O diretório atual também pode ser representado como .
em argumentos de comandos.
Considerando a saída anterior de pwd
, .
é equivalente à /home/caio
.
Portanto o comando abaixo produz a mesma saída que ls /home/caio
.
ls .
Desktop Documents Downloads Music Pictures Public Templates Videos
Nessa forma .
o diretório atual poderá formar caminhos relativos.
Diretório atual no prompt
Outra forma de identificar o diretório atual, embora não tão consistente, é verificar o prompt.
caio@FX505DV:~$
~
é o caractere que representa o diretório de usuário para o usuário caio
.
No caso acima, ~
representa o diretório /home/caio
porém o diretório de usuário pode variar bem como o formato do prompt.
O que é caminho?
Caminho é a localização única de um arquivo ou diretório em um sistema de arquivos.
O sistema de arquivos no Linux é hierárquico, o que significa que um diretório pode estar acima de outro diretório ou acima de um arquivo.
Abaixo o diretório Music
está sob o diretório caio
, que por sua vez está sob home
, e acima de home
está o diretório raiz /
.
/home/caio/Music
Um diretório acima de um diretório ou arquivo é chamado de diretório pai.
Arquivos sempre são representados no fim de um caminho já que um arquivo não pode estar acima de outro arquivo ou diretório.
/home/caio/meu_arquivo.txt
O que é caminho absoluto?
Caminho absoluto é o caminho completo para um arquivo ou diretório.
Na saída de pwd
obtivémos o caminho absoluto /home/caio
.
/
é o diretório raiz.- É sempre o primeiro diretório no Linux, portanto todos os caminhos absolutos começam com
/
. - Todos os diretórios e arquivos estão sob o diretório raiz, direta ou indiretamente.
- É sempre o primeiro diretório no Linux, portanto todos os caminhos absolutos começam com
home
é o diretório diretamente sob/
.- A barra em
home/
é um separador, necessário quando o diretório é seguido por um arquivo ou diretório e opcional quando não seguido.
- A barra em
caio
é o diretório diretamente sobhome
e indiretamente sob/
. Último diretório no caminho.
Utilizando caminho absoluto podemos nos referir a qualquer arquivo/diretório independentemente do diretório atual.
Abaixo ls
lista diretórios/arquivos no diretório raiz.
ls /
bin boot cdrom core dev etc home lib lib64 libx32 lost+found media mnt opt proc root run sbin snap srv swapfile sys tmp usr var
Da saída acima, podemos listar os conteúdos do diretório boot
, ou qualquer outro diretório, utilizando seu caminho absoluto.
Como boot
está diretamente sob o diretório raiz, basta anteceder boot
com /
.
ls /boot
config-5.4.0-51-generic grub initrd.img-5.4.0-52-generic memtest86+.elf System.map-5.4.0-52-generic vmlinuz-5.4.0-52-generic
config-5.4.0-52-generic initrd.img initrd.img.old memtest86+_multiboot.bin vmlinuz vmlinuz.old
efi initrd.img-5.4.0-51-generic memtest86+.bin System.map-5.4.0-51-generic vmlinuz-5.4.0-51-generic
Para listarmos o conteúdo do diretório grub
, inclua /
para separá-lo de boot
.
ls /boot/grub
fonts gfxblacklist.txt grub.cfg grubenv unicode.pf2 x86_64-efi
E o que é caminho relativo?
Caminho relativo é o caminho relativo ao diretório atual para chegar em um arquivo ou diretório.
Considerando ainda a saída do pwd
/home/caio
.
Para listarmos o conteúdo do diretório Music
poderíamos utilizar seu caminho absoluto.
ls /home/caio/Music
'Daft Punk' Metallica MGMT Slayer
Porém, utilizando caminho relativo, poderíamos simplesmente especificar Music
, já que Music
está sob o diretório atual.
ls Music
'Daft Punk' Metallica MGMT Slayer
Da mesma forma poderíamos acessar o diretório Metallica
de forma relativa ao diretório atual ao invés do caminho absoluto /home/caio/Music/Metallica
.
ls Music/Metallica
'Metallica - Fade to Black.ogg' 'Metallica - Master of Puppets.ogg' 'Metallica - Seek and Destroy.ogg'
Como referir aos diretórios acima do diretório atual?
..
é a representação de diretório pai.
Dado o diretório atual /home/caio
, ..
será resolvido como /home
.
ls ..
caio outro_usuario lost+found
Para acessarmos mais níveis acima basta repetir ..
para cada nível, os separando com /
.
Abaixo ls
recebe o argumento /
, já que o diretório raiz está dois níveis acima de /home/caio
.
ls ../..
bin boot cdrom core dev etc home lib lib64 libx32 lost+found media mnt opt proc root run sbin snap srv swapfile sys tmp usr var
..
pode ser utilizado em qualquer posição de um caminho.
Abaixo ../..
mudaria do diretório atual /home/caio
para o diretório raiz (/
), depois para /boot/grub
e por conta dos ..
finais o caminho resultaria em /boot
.
ls ../../boot/grub/..
config-5.4.0-51-generic grub initrd.img-5.4.0-52-generic memtest86+.elf System.map-5.4.0-52-generic vmlinuz-5.4.0-52-generic
config-5.4.0-52-generic initrd.img initrd.img.old memtest86+_multiboot.bin vmlinuz vmlinuz.old
efi initrd.img-5.4.0-51-generic memtest86+.bin System.map-5.4.0-51-generic vmlinuz-5.4.0-51-generic```
Uma vez que ..
atinja o diretório raiz, os ..
subsequentes continuarão a resolver o caminho como \
.
ls ../../../../..
bin boot cdrom core dev etc home lib lib64 libx32 lost+found media mnt opt proc root run sbin snap srv swapfile sys tmp usr var
.
em caminhos relativos
Embora muitas vezes redundante, .
pode fazer parte do caminho relativo em argumentos.
ls ./Musica
equivale à ls Musica
, bem como ls ./..
à ls ..
.
Resolvendo caminhos relativos com realpath
O comando realpath
pode ser utilizado para resolver um caminho absoluto recebendo como argumento um caminho relativo.
A resolução de caminho é baseada no diretório atual.
O diretório abaixo é resolvido tomando como base o diretório atual /home/caio
, e então subindo um nível na hierarquia de diretórios para /home
.
realpath ./..
/home
⚠️ Tenha cautela já que realpath
não verifica se o último arquivo/diretório no caminho absoluto resultante efetivamente existe.
Abaixo realpath
resolve ..
como /home
já que o diretório atual é /home/caio
.
realpath ../home
/home/home
Contudo /home/home
não existe.
ls /home/home
ls: cannot access '/home/home': No such file or directory
Como mudar o diretório atual?
cd
é o comando embutido para mudar o diretório atual para o diretório informado em seu argumento.
Abaixo, o diretório atual será mudado de /home/caio
para seu diretório pai /home
.
cd ..
pwd
/home
O diretório atual /home
é mudado para caio/Music/MGMT
utilizando-se caminho relativo.
cd caio/Music/MGMT
pwd
/home/caio/Music/MGMT
Sem argumento, cd
muda o diretório atual para o diretório de usuário.
cd
pwd
/home/caio
-
como argumento, muda o diretório atual para o diretório atual anterior.
cd -
pwd
/home/caio/Music/MGMT
❌ Caso cd
não tenha sido utilizado nessa sessão, o seguinte erro é exibido para cd -
.
bash: cd: OLDPWD not set