
Команды pushd и popd позволяют работать со стеком каталогов и изменять текущий рабочий каталог в Linux и других Unix-подобных операционных системах. Хотя pushd и popd — очень мощные и полезные команды, они недооценены и используются редко.
В этом уроке мы покажем вам, как использовать команды pushd и popd для навигации по дереву каталогов вашей системы.
Номер каталогов
Стек каталогов — это список каталогов, в которые вы ранее перешли. Содержимое стека каталогов можно просмотреть с помощью команды dirs . Каталоги добавляются в стек при переходе в каталог с помощью команды pushd и удаляются командой popd .
Текущий рабочий каталог всегда находится на вершине стека каталогов. Это каталог (папка), в котором пользователь работает в данный момент. Каждый раз, когда вы взаимодействуете с командной строкой, вы работаете в определённом каталоге.
Команда pwd позволяет узнать, в каком каталоге вы находитесь в данный момент.
При навигации по файловой системе используйте клавишу Tab для автодополнения имён каталогов. Добавление косой черты в конце имени каталога необязательно.
pushd , popd и dirs — встроенные функции оболочки, и их поведение может немного различаться в зависимости от оболочки. Мы рассмотрим встроенные версии этих команд в Bash.
Команда pushd
Синтаксис команды pushd следующий:
pushd [ OPTIONS ] [ DIRECTORY ]
Например, чтобы сохранить текущий каталог наверху стека каталогов и перейти на /var/www нужно ввести:
~$ pushd /var/www
В случае успешного выполнения команда выше выведет стек каталогов. ~ — это каталог, в котором была выполнена команда pushd . Символ тильды ~ означает домашний каталог.
/var/www ~
pushd сначала сохраняет текущий рабочий каталог на вершине стека, а затем переходит в заданный каталог. Поскольку текущий каталог всегда должен находиться на вершине стека, после изменения новый текущий каталог перемещается на вершину стека, но не сохраняется в стеке. Чтобы сохранить его, необходимо вызвать pushd из него. Если вы используете cd для перехода в другой каталог, верхний элемент стека будет потерян.
Давайте добавим в стек еще один каталог:
/var/www$ pushd /opt
/opt /var/www ~
Чтобы запретить смену каталога, используйте опцию -n . Например, чтобы добавить каталог /usr/local в стек, но не переходить в него, введите:
/opt$ pushd -n /usr/local
Поскольку текущий каталог (который всегда находится наверху) не изменяется, каталог /usr/local добавляется вторым сверху стека:
/opt /usr/local /var/www ~
Функция pushd принимает два параметра: +N и -N , которые позволяют перейти к Nth каталогу стека. Параметр +N изменяет направление счёта на Nth элемент списка стека, начиная с нуля и слева направо. При использовании -N направление счёта идёт справа налево.
Чтобы лучше проиллюстрировать варианты, давайте распечатаем текущий стек каталогов:
/opt$ dirs -l -v
На выходе будет показан индексированный список стека каталогов:
0 /opt 1 /usr/local 2 /var/www 3 /home/linuxize
Если вы хотите перейти в каталог /var/www и перенести его наверх стека, вам нужно будет воспользоваться одним из следующих способов.
При счете сверху вниз (или слева направо) индекс каталога равен 2 .
pushd +2
При подсчете снизу вверх индекс каталога /var/www равен 1 .
pushd -1.
При использовании без аргументов pushd переключает два верхних каталога и делает новый верхний каталог текущим. Это аналогично использованию команды cd - .
Команда popd
Команда popd имеет вид:
popd [ OPTIONS ]
При использовании без аргументов popd удаляет верхний каталог из стека и переходит в новый верхний каталог.
Предположим, у нас есть следующий стек каталогов:
/opt /usr/local /var/www /etc/nginx ~
Если запустить команду popd , она удалит /opt из стека и перейдет в каталог /usr/local :
/opt$ popd
На выходе будет показан новый стек каталогов:
/usr/local /var/www /etc/nginx ~
Опция -n подавляет изменение каталога по умолчанию и удаляет второй элемент из стека:
/opt$ popd -n
/usr/local /etc/nginx ~
Как и pushd , popd также принимает параметры +N и -N , которые можно использовать для удаления Nth каталога стека.
/opt$ popd +1
/usr/local ~
Заключение
Обычно для перемещения из одного каталога в другой используется команда cd . Однако, если вы проводите много времени в командной строке, команды pushd и popd повысят вашу производительность и эффективность.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства