Domine o Linux: Use pushd e popd para navegar entre diretórios com maestria!

Muitos utilizadores do Linux talvez não tenham familiaridade com os comandos pushd e popd, embora sejam funcionalidades já existentes há bastante tempo. Esses comandos podem otimizar significativamente a navegação entre diretórios na linha de comando. Este artigo explorará como utilizá-los de forma eficaz.

O que são pushd e popd?

Uma das inovações que Bill Joy introduziu no seu C Shell de 1978 foi o conceito de uma pilha de diretórios e os comandos pushd e popd para manipulá-la. Como a imitação é a forma mais genuína de elogio, a ideia da pilha de diretórios, juntamente com os comandos pushd e popd, foi rapidamente adotada em outros shells (como o Bash) e até mesmo em outros sistemas operacionais.

O conceito de pilha é bastante simples: os itens são adicionados um a um, sendo que o item mais recente se encontra sempre no topo. Quando os itens são retirados da pilha, eles são removidos de cima para baixo, seguindo a ordem de entrada. Pilhas com esta característica são comumente referidas como filas LIFO (Last-In, First-Out).

Na prática, pushd e popd oferecem um pouco mais de flexibilidade, mas este modelo simples serve como uma boa base para compreensão inicial.

Como estamos a falar de uma pilha de diretórios, não é surpresa que o “d” em pushd e popd represente “diretório”. Estes comandos permitem que se adicione diretórios à pilha ou que se remova os mesmos da pilha.

Mas como é que isso nos beneficia?

Como o pushd Preenche a Pilha

Ao usar o comando pushd, três ações ocorrem simultaneamente:

  • O diretório é alterado, de forma semelhante ao comando cd.
  • O nome e o caminho do diretório são adicionados à pilha.
  • A pilha é exibida como uma lista de diretórios separados por espaços.

Nos exemplos que se seguem, note como a pilha de diretórios se expande a cada novo comando pushd. É importante observar que o topo da pilha está à esquerda, local onde as novas entradas surgem.

Após o primeiro comando pushd, a pilha contém duas entradas: o diretório de onde se partiu e o diretório para onde se mudou.

Para ilustrar, vamos executar os seguintes comandos:

pushd ~/Desktop
pushd ~/Music
pushd ~/Documents
pushd ~/Pictures
pushd ~

O último comando pushd retornou ao diretório inicial, o que significa que a primeira e a última entrada na pilha são o caractere til (~), representando o diretório inicial. Este exemplo mostra que, mesmo que um diretório já esteja presente na pilha, ele será adicionado novamente com outros comandos pushd.

É importante notar que a entrada mais à esquerda da pilha, que é a entrada adicionada mais recentemente, corresponde ao diretório atual.

O Comando dirs

Pode usar o comando dirs, conforme demonstrado abaixo, para visualizar a pilha de diretórios:

dirs

Este comando apenas exibe a pilha, sem afetar a sua estrutura. Algumas das opções disponíveis com o comando pushd referem-se à posição dos diretórios na pilha.

Se desejar visualizar a posição numérica de cada diretório, pode utilizar a opção -v (vertical), conforme demonstrado:

dirs -v

Se preferir ver o caminho completo do diretório inicial em vez do til (~), utilize a opção -l (formato longo), da seguinte forma:

dirs -v -l

Adicionando um Diretório à Pilha

Como já vimos, quando se utiliza o comando pushd, três ações ocorrem: o diretório é alterado, o novo diretório é adicionado à pilha e a pilha é exibida. É possível utilizar a opção -n (sem rotação) para adicionar um diretório à pilha sem alterar o diretório atual.

A nossa pilha de diretórios é:

dirs -v -l

Agora vamos utilizar o comando pushd com a opção -n e especificar o diretório /home/dave como parâmetro. Em seguida, vamos verificar a pilha de diretórios novamente.

Executamos os seguintes comandos:

pushd -n /home/dave
dirs -v -l

O diretório /home/dave foi adicionado à pilha na posição 1, que corresponde ao segundo lugar na pilha. Ele não pode ocupar o topo, uma vez que a posição zero é sempre reservada para o diretório atual.

Não saímos do diretório atual, ~/Videos, por isso não houve rotação para outra posição na pilha.

Mudança de Diretório através da Rotação da Pilha

É possível usar parâmetros numéricos com o comando pushd para se deslocar para qualquer diretório na pilha. Quando o faz, a pilha é rotacionada, tornando o diretório selecionado a primeira entrada na pilha.

Os diretórios na pilha são identificados pela sua posição numérica. A contagem pode ser feita a partir do início ou do fim da pilha. Números positivos, como +3, indicam a contagem a partir do início, enquanto números negativos, como -2, indicam a contagem a partir da parte inferior.

O diretório /home/dave/Documents encontra-se na posição três. O seguinte comando pode ser utilizado para aceder a este diretório:

pushd +3

Os diretórios da pilha que se encontravam acima do diretório selecionado são movidos para o final da pilha. O diretório escolhido passa a ocupar o topo e o utilizador é direcionado para esse diretório.

Para mudar para o diretório que se encontra na parte inferior da pilha, podemos usar o seguinte comando:

pushd -0

O último diretório é movido para a primeira posição e todos os outros são movidos para baixo na pilha. O utilizador é então direcionado para o diretório ~/Pictures.

O Comando popd

Pode usar o comando popd para remover diretórios da pilha.

Ao analisar a pilha de diretórios, pode-se ver que o diretório na posição 1 é /home/dave. Para removê-lo da pilha, basta executar o seguinte comando, passando o número para o popd:

dirs -v -l
popd +1

O diretório /home/dave foi removido e os que estavam abaixo dele na pilha avançaram uma posição.

De forma semelhante ao pushd, também é possível contar a partir do final da pilha com o popd. Para remover o último diretório da pilha, o comando a ser executado é:

popd -0

O diretório ~/Music é removido da última posição na pilha.

Para mudar de diretório, realizar uma ação e retornar ao diretório anterior, é possível combinar os comandos pushd e popd.

Vamos utilizar o pushd para mudar para outro diretório e em seguida o popd para remover o diretório superior da pilha, voltando ao diretório que se encontrava na segunda posição. Este será o diretório de onde o utilizador partiu inicialmente.

Executamos os seguintes comandos:

pushd ~
popd

O utilizador iniciou no diretório ~/Projects, foi direcionado para o diretório inicial e regressou novamente ao diretório ~/Projects.

Navegação em Ciclo Através da Pilha

Vamos demonstrar como navegar em ciclo numa pilha com diretórios aninhados, embora possa utilizar qualquer diretório em qualquer parte do sistema de arquivos.

O nosso nível de aninhamento mais profundo é:

/home/dave/Projects/htg/articles

A partir do diretório inicial, vamos descer gradualmente por cada diretório até atingir o diretório de artigos. De seguida, vamos visualizar a pilha de diretórios.

Executamos os seguintes comandos:

pushd ~/Projects
pushd htg
pushd articles
dirs -v -l

Ao executar repetidamente o comando pushd +1, é possível percorrer a pilha de diretórios em ciclo contínuo. Se esta ação for frequente, o comando pushd +1 poderá ser um bom candidato para a criação de um alias.

Executamos o seguinte comando:

pushd +1

A Importância do Primeiro Diretório na Pilha

É fácil cair no hábito de usar o comando cd para mudar de diretório. No entanto, ao fazer isso, o primeiro diretório da pilha é sobrescrito. Isso é inevitável, uma vez que o primeiro espaço é reservado para o diretório de trabalho atual; os outros diretórios não mudam de posição.

Para demonstrar isso, execute os seguintes comandos:

dirs -v -l
cd ~/Music
dirs -v -l

Depois de se familiarizar com os comandos pushd e popd, e talvez criar alguns aliases, terá uma forma muito rápida de alternar entre diretórios.

É por isso que se valoriza a linha de comando. A eficiência é realmente notável, certo?