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/caioA 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 VideosNessa 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/MusicUm 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.txtO 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 sobhomee 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 varDa 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 /bootconfig-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/grubfonts gfxblacklist.txt grub.cfg grubenv unicode.pf2 x86_64-efiE 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 SlayerPorém, utilizando caminho relativo, poderíamos simplesmente especificar Music, já que Music está sob o diretório atual.
ls Music'Daft Punk' Metallica MGMT SlayerDa 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+foundPara 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/homeContudo /home/home não existe.
ls /home/homels: cannot access '/home/home': No such file or directoryComo 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/homeO diretório atual /home é mudado para caio/Music/MGMT utilizando-se caminho relativo.
cd caio/Music/MGMT
pwd/home/caio/Music/MGMTSem 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