linux.playground

trilha / arco 1 · onde eu estou

o que é pwd e o que ele faz

você rodou rm -rf ./* achando que estava na pasta do build. estava na home. o ./ significa a partir daqui, e a pergunta que você não fez é: onde eu estou?

em poucos minutos: o que o pwd faz, por que às vezes ele mente, e a linha de script que impede o rm de rodar na pasta errada. a pílula fica no final.

escolhe a camada

em uma frase

é a seta de "você está aqui" no mapa do shopping. ela não te leva a lugar nenhum, só mostra onde você está.

para quem está começando

print working directory: imprime o caminho completo da pasta onde o terminal está agora, em uma linha, a partir da raiz (a barra). todo comando sem caminho parte dessa pasta.

a fonte da verdade

o pwd do bash é builtin: responde com o post-it do shell, a variável PWD que o bash atualiza a cada cd. o pwd -P e o /bin/pwd perguntam ao kernel o caminho real. o shell lembra, o kernel sabe.

o número por trás do nome

ls -id mostra o inode: o número da pasta no disco. o atalho e a pasta de verdade têm o mesmo número, só o nome muda. o caminho é apelido do inode.

mac vs linux

no mac o /tmp é um atalho para /private/tmp: o pwd mostra /tmp, o pwd -P mostra /private/tmp. o /bin/pwd do mac também é diferente do linux: ele confia no atalho por padrão.

agora você

terminal fechado

um linux de verdade, só seu, apagado quando você sai.

  1. primeiro, onde você está.

    pwd

  2. agora de quem é esse comando. pergunta ao shell o que o pwd é.

    type pwd

  3. na sua home tem um atalho chamado atalho. entra nele e pergunta onde você está.

    cd atalho && pwd

  4. o pwd -P pergunta ao kernel pelo caminho real. o que ele vai responder?

  5. ainda dentro do atalho: o pwd que não é do bash. chama o programa pelo caminho completo.

    /bin/pwd

  6. agora o número por trás do nome. compara o inode da pasta real e do atalho.

    ls -id /srv/homelab/stack atalho/

cuidado: cd que falha e rm que segue

o arquivo ~/limpar.sh serve para apagar o cache antigo. ele faz duas coisas: primeiro entra na pasta do cache com cd, depois apaga tudo com rm. só que a pasta do cache não existe (erro de digitação). então o cd falha, mas o script não para e o rm apaga tudo na pasta onde você estava. passo 1: veja o estrago. entre em ~/homelab com cd ~/homelab, rode ~/limpar.sh e depois ls -A. os arquivos sumiram. para trazê-los de volta, digite restaurar-homelab (só esse nome, sem ./ e sem .sh). passo 2: conserte o script. abra com nano ~/limpar.sh e faça o cd parar o script quando falhar. passo 3: teste. volte para ~/homelab, rode ~/limpar.sh de novo e confira com ls -A que os arquivos continuam lá.

a pílula

pwdonde o shell acha que está
pwd -Pcaminho real, sem atalho
cd "$DIR" || exit 1se o cd falhar, o script para

antes de apagar, pergunta onde você está.

quiz

1. você entrou num link simbólico e quer ver o caminho real. qual comando mostra?
2. de onde o pwd do bash tira a resposta?
3. um script faz cd numa pasta que não existe e depois roda rm -rf ./*. onde o rm apaga?
4. você está dentro de /tmp/x e alguém apaga essa pasta. o que acontece com o pwd e o pwd -P?

próxima: o que é ls e o que ele faz