Поиск по сайту:

Как использовать pushd и popd в Linux


Многие пользователи Linux никогда не слышали о pushd и popd, но они существуют всегда. Они также могут значительно ускорить процесс навигации по каталогам в командной строке. Мы расскажем, как их использовать.

Что такое pushd и popd?

Одним из нововведений Билла Джоя, включенных в его C Shell 1978 года, была концепция стека каталогов и средства управления им: pushd и popd. Имитация была самой искренней формой лести, поэтому стек каталогов, pushd и popd вскоре были включены в другие оболочки (например, Bash) и даже в другие операционные системы.

Концепция стека проста. Элементы помещаются в стек по одному, при этом последний добавленный элемент всегда занимает верхнюю позицию. Когда элементы извлекаются из стека, они удаляются по порядку, сверху вниз. Стеки такого типа часто называют очередями «последним пришел — первым вышел» (LIFO).

На самом деле, pushd и popd немного более гибкие, чем эта, но пока стоит помнить об этой модели.

Поскольку мы говорим о стеке каталогов, неудивительно, что «d» в pushd и popd означает «каталог». Эти команды позволяют добавлять каталоги в стек каталогов или извлекать их из него.

Но чем это нам выгодно?

Как pushd заполняет стек

Когда вы используете pushd, происходят следующие три вещи:

  • Вы меняете каталог так же, как если бы вы использовали cd.
  • Имя и путь каталога добавляются в стек.
  • Стек отображается в виде списка каталогов, разделенных пробелами.

В следующих примерах обратите внимание, как растет стек каталогов с каждой новой командой pushd. Также обратите внимание, что вершина стека находится слева — здесь появляются новые записи.

После первой команды pushd в стеке есть две записи: каталог, который вы покинули, и тот, в который вы перешли.

Для нашего примера мы вводим следующее:

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

Последняя команда pushd вернула нас в наш домашний каталог, поэтому первая и последняя записи в стеке — это тильда (~), которая представляет наш домашний каталог. Это показывает, что хотя каталог уже находится в стеке, он будет снова добавлен для других команд pushd.

Также обратите внимание, что самая левая запись в стеке, которая была добавлена последней, является вашим текущим каталогом.

Команда директоров

Вы можете использовать команду dirs, как показано ниже, для отображения стека каталогов:

dirs

Он не влияет на стек, он просто отображает его. Некоторые параметры, которые вы можете использовать с pushd, относятся к положению каталогов в стеке.

Если вы хотите увидеть числовую позицию каждого каталога, вы можете использовать опцию -v (vertical), как показано ниже:

каталоги -v

Если вы предпочитаете видеть прописанный путь к вашему домашнему каталогу вместо тильды (~), добавьте параметр -l (длинный формат), например:

dirs -v -l

Добавление каталога в стек

Как мы видели, когда вы используете команду pushd, она делает три вещи: изменяет ваш каталог, добавляет новый каталог в стек и отображает стек для вас. Вы можете использовать параметр -n (без поворота), чтобы добавить каталог в стек без изменения текущего каталога.

Вот наш стек каталогов:

dirs -v -l

Теперь мы будем использовать команду pushd с параметром -n и pas в каталоге /home/dave в качестве параметра. Затем мы снова проверим стек каталогов.

Набираем следующее:

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

Каталог  /home/dave добавлен в стек в слоте 1, который занимает второе место в стеке. Он не может занимать верхнюю позицию, потому что нулевой слот всегда является текущим каталогом.

Мы не покидали текущий каталог, ~/Videos, поэтому он не перемещался в другую позицию в стеке.

Изменение каталога путем вращения стека

Вы можете использовать числовые параметры с pushd для перемещения в любой каталог в стеке, и при этом стек вращается. Каталог, который вы выбрали для перемещения, становится первой записью в стеке.

Вы ссылаетесь на каталоги в стеке по их номеру позиции. Вы можете считать сверху или снизу стопки. Для положительных чисел, таких как +3, считайте сверху; для отрицательных чисел, таких как -2, считайте снизу.

Каталог /home/dave/Documents находится на третьей позиции. Мы можем использовать следующую команду для перемещения этого каталога:

pushd +3

Каталоги в стеке над выбранным нами каталогом перемещаются в нижнюю часть стека. Выбранный нами каталог теперь занимает верхнюю позицию, и мы перемещены в этот каталог.

Если мы хотим перейти в каталог внизу стека, мы можем использовать следующую команду:

pushd -0

Последний каталог перемещается в первый слот, а все остальные перемещаются вниз по стеку. Мы перешли в каталог ~/Pictures.

Команда popd

Вы можете использовать команду popd для удаления каталогов из стека.

Если мы посмотрим на стек каталогов, то увидим, что каталог в позиции 1 — это /home/dave. Чтобы удалить это из стека, мы набираем следующее, чтобы передать число в popd:

dirs -v -l
popd +1

Каталог /home/dave был удален, а те, что находились ниже него в стеке, были перемещены на одну позицию вверх.

Точно так же, как с pushd, мы можем считать с нижней части стека с помощью popd. Чтобы удалить последний каталог из стека, мы набираем:

popd -0

Каталог ~/Music удаляется с последней позиции в стеке.

Чтобы изменить каталог, сделать что-то, а затем вернуться в предыдущий каталог, вы можете использовать pushd и popd вместе.

Мы будем использовать pushd для перехода в другой каталог. Мы будем использовать popd, чтобы отбросить самый верхний каталог в стеке и перейти к каталогу на второй позиции. Это каталог, из которого вы только что перешли, поэтому вы вернетесь в каталог, в котором были изначально.

Набираем следующее:

pushd ~
popd

Мы начали с каталога ~/Projectspushd в домашний каталог, а затем popd обратно в ~/Projects каталог.

Ротация всего стека

Мы собираемся проиллюстрировать, как перемещаться по стеку с некоторыми вложенными каталогами, но вы можете использовать любые каталоги в любом месте файловой системы.

Наш самый глубокий уровень вложенности:

/home/dave/Projects/htg/articles

Из домашнего каталога мы будем постепенно спускаться по каждому каталогу, пока не дойдем до каталога статей. Затем мы рассмотрим стек каталогов.

Набираем следующее:

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

Когда вы повторно вводите команды pushd +1, вы можете циклически перемещаться по стеку каталогов. Если вы делаете это часто, pushd +1 будет хорошим кандидатом на псевдоним.

Введите следующее:

pushd +1

Штамповка над стеком

Легко вернуться к старым привычкам и использовать cd для смены каталога. Если вы сделаете это, вы перечеркнете первый каталог в стеке. Это неизбежно, так как первый слот зарезервирован для текущего рабочего каталога — ни один из остальных не меняет позицию.

Для этого введите следующее:

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

После того, как вы привыкнете к командам pushd и popd (и, возможно, будете использовать их для создания нескольких псевдонимов), вы сможете очень быстро переключаться между каталоги.

Вот почему мы торчим из командной строки. Эффективность рулит, верно?

RELATED: Best Linux Laptops for Developers and Enthusiasts