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

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

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

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

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

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

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

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

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

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

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

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

  Как создать новые префиксы Wine в Linux

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

В нашем примере мы набираем следующее:

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

В

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

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

Команда dirs

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

dirs

В

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

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

dirs -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, который является вторым местом в стеке. Он не может занимать верхнюю позицию, потому что нулевой слот всегда является текущим каталогом.

  Как установить образы Docker в Linux

Мы не покидали текущий каталог ~ / 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 удаляется из последней позиции в стеке.

  Как использовать Angry IP Scanner для сканирования IP-адреса в Linux

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

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

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

pushd ~
popd

В

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

Чередование всего стека

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

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

/home/dave/Projects/htg/articles

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

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

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

В

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

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

pushd +1

В

Штамповка поверх стопки

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

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

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

В

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

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