Логотип

Перестаньте использовать только cd: изучите команды pushd, popd и zoxide в Linux

Перестаньте использовать только cd: изучите команды pushd, popd и zoxide в Linux

В Linux команда cd (Смена каталога) служит основным инструментом навигации как для новичков, так и для опытных системных администраторов.

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

Команда работает за счёт динамической компоновки, что позволяет ей напрямую взаимодействовать с функциями управления каталогами в оболочке. Поскольку cd — это встроенная команда оболочки, а не внешний двоичный файл, она выполняется с минимальными издержками и не требует особых привилегий, кроме стандартных разрешений на доступ к каталогам.

Эта обновлённая статья выходит за рамки cd и знакомит вас с:

  • pushd и popd → для быстрого переключения между каталогами.
  • zoxide → современный инструмент для автоматического перехода, который запоминает ваши привычки.

 

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

 

Как работает команда cd

Большинство команд в Linux, которые вы запускаете, — это настоящие программы, хранящиеся в таких местах, как /usr/bin или /bin, но cd к ним не относится. Это встроенная команда оболочки, то есть команда, которая находится внутри самой оболочки.

Почему это важно? Потому что только оболочка может изменять свой рабочий каталог. Если бы cd была внешней программой, она бы запускалась как дочерний процесс, а дочерним процессам не разрешается изменять каталог родительской оболочки.

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

Вот почему она кажется такой быстрой и немного «особенной» по сравнению с обычными командами. Она не загружает отдельный двоичный файл, не создаёт новый процесс и не требует специальных разрешений, кроме тех, которые уже есть в каталоге.

 

1. Переход к абсолютному пути

Если вы хотите сразу перейти к определённому месту в файловой системе, независимо от того, где вы находитесь в данный момент, используйте абсолютный путь, который всегда начинается с /, обозначающего корень файловой системы Linux.

Например, если вы запустите:

cd /usr/local

 

Когда вы говорите оболочке: «Перенеси меня прямо в этот каталог», ваше текущее местоположение не имеет значения. Независимо от того, находитесь ли вы в своей домашней папке, в глубине проекта или в совершенно другом месте, абсолютный путь действует как GPS-маршрут, который никогда не меняется.

После выполнения команды в командной строке отобразится сообщение о том, что вы находитесь внутри /usr/local, подтверждающее, что переход был успешным.

 

2. Переход в подкаталог с использованием абсолютного пути

Вы также можете использовать абсолютный путь, если хотите перейти непосредственно в более глубокий каталог. Например, если вы уже находитесь в /usr/local и хотите перейти в его папку lib, вы можете ввести полный путь:

cd /usr/local/lib

 

Несмотря на то, что вы уже на полпути к цели, оболочка не возражает. Абсолютный путь всегда начинается с корня / и ведёт прямо к конечному пункту назначения, что делает его предсказуемым и надёжным, особенно при написании сценариев или копировании команд из документации.

После запуска команды в подсказке отобразится, что вы находитесь внутри /usr/local/lib, то есть навигация прошла именно так, как и ожидалось.

 

3. Навигация с использованием относительного пути

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

Читать  Команда read в Linux с примерами

Например, если вы находитесь в /usr/local и хотите перейти в каталог lib, расположенный прямо под ним, вы можете просто ввести:

cd lib

 

Поскольку lib находится в вашем текущем каталоге, оболочка точно знает, куда нужно перейти, и ей не нужен полный путь /usr/local/lib. Относительные пути ускоряют работу и упрощают её, особенно когда вы работаете в определённой области файловой системы.

После выполнения команды в командной строке отобразится сообщение о том, что вы находитесь внутри /usr/local/lib, подтверждающее перемещение.

 

4. Возврат в предыдущий или родительский каталог

Иногда нужно вернуться туда, где вы только что были, и самый быстрый способ сделать это — использовать оператор дефиса (-).

cd -

 

Оболочка мгновенно переключает вас обратно в предыдущий рабочий каталог и даже выводит его путь, чтобы вы точно знали, где находитесь. По сути, это кнопка «Назад» в терминале.

Другой распространённый приём — подняться на один уровень выше в дереве каталогов, используя двойную точку (..):

cd ..

 

Эта команда сообщает оболочке: «перенеси меня в родительский каталог». Если вы находитесь в /usr/local/lib, то при выполнении cd .. вы сразу вернётесь в /usr/local, что очень просто, быстро и является одной из команд, которые вы будете постоянно использовать при навигации по Linux.

 

5. Отображение предыдущего рабочего каталога

Есть также способ просмотреть каталог, в котором вы находились до текущего. Использование cd -- указывает оболочке, что всё, что следует за ним, является обычным аргументом, а не опцией, и в этом контексте выводится последний каталог, из которого вы перешли:

cd --

 

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

 

6. Переход между несколькими уровнями каталогов

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

Например, если вы находитесь в /usr/local и хотите переместиться на два уровня выше, вы можете ввести:

cd ../../

 

Первая .. перемещает вас из local в usr, а вторая — из usr в корневой каталог на уровень выше, то есть в /usr.

 

7. Переход в домашний каталог

Независимо от того, в какой части файловой системы вы находитесь, вернуться в домашний каталог очень просто: используйте тильду (~), которая является ярлыком, всегда указывающим на ваш домашний каталог.

cd ~

 

Вы мгновенно возвращаетесь в своё личное рабочее пространство. Есть ещё более простой трюк: если вы введёте cd без аргументов, оболочка решит, что вы хотите вернуться домой, и автоматически перенесёт вас туда.

cd

 

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

 

8. Сохранение текущего каталога

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

cd .

 

Вы заметите, что ваша команда остаётся неизменной, и то же самое происходит, если вы добавляете косую черту в конце:

cd ./

 

Читать  Как использовать команду Chattr в Linux (для начинающих)

Обе версии указывают на ваше текущее местоположение. Хотя вы вряд ли будете часто это использовать, полезно знать, что . часто встречается в скриптах и путях к файлам.

 

9. Навигация по нескольким уровням каталогов

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

Например, если вы застряли в длинном каталоге, таком как:

/usr/local/lib/python3.4/dist-packages/

 

Вы можете вернуться к самому началу и указать непосредственно на цель:

cd ../../../../../home/avi/Desktop/

 

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

 

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

Один из самых простых способов сэкономить время в терминале — использовать Tab завершение. Вместо того чтобы вводить длинные названия каталогов вручную, вы можете ввести только первые несколько букв и нажать TAB, а остальное командная программа автоматически допишет за вас.

Например, чтобы достичь /var/www/html, вам не нужно вводить весь путь целиком:

cd /v<TAB>/w<TAB>/h<TAB>

 

Каждый раз, когда вы нажимаете TAB, оболочка подставляет соответствующее имя каталога /var, затем /www, затем /html. Это не только ускоряет навигацию, но и снижает вероятность опечаток, а также помогает находить доступные каталоги по мере продвижения.

После ввода пути нажмите Enter, чтобы сразу перейти в /var/www/html.

 

11. Навигация с использованием подстановочных знаков

Если вы не можете вспомнить полное название каталога и автодополнение TAB не помогает, вы можете использовать подстановочные знаки, чтобы заполнить пробелы. Символ * действует как заполнитель, который соответствует любому значению, поэтому, если вы знаете, что каталог в /etc/ начинается с буквы v, вы можете попробовать:

cd /etc/v*

 

Оболочка ищет каталоги, начинающиеся с v, и завершает путь, используя первое найденное совпадение. Если подходит только один каталог, вы сразу попадаете в него, как будто прыгаете прямо в /etc/vbox.

Просто имейте в виду: это работает без сбоев только при наличии одного совпадения. Если несколько каталогов начинаются с v, оболочка выберет первый в алфавитном порядке, который может не совпадать с тем, что вам нужно.

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

 

12. Использование односимвольных подстановочных знаков

Иногда вы помните большую часть названия каталога, но не всё. В таких случаях можно использовать односимвольный подстановочный знак: вопросительный знак (?). В отличие от звёздочки, которая соответствует любому количеству символов, ? соответствует ровно одному.

Поэтому, если вы знаете, что ваш домашний каталог начинается с av, но не уверены в последнем символе, вы можете ввести:

cd /home/av?

 

Оболочка будет искать в /home/ любой каталог, который начинается с av и имеет ещё один символ после него. Если совпадение найдено, вы сразу окажетесь в нужном каталоге, например в своём домашнем каталоге /home/avi.

 

13. Управление каталогами с помощью pushd и popd

Хотя cd отлично подходит для базовой навигации, иногда вам может понадобиться более быстрый способ переключения между двумя или более каталогами без потери позиции. В этом случае на помощь приходят pushd и popd. Они работают как «стек каталогов» — небольшой список в памяти, в котором хранятся посещённые вами места.

Читать  4 способа создать файл в терминале Linux

Когда вы используете pushd, оболочка сохраняет текущий каталог в стеке, а затем перемещает вас в новый каталог:

pushd /var/www/html

 

После запуска команды ваша оболочка отобразит как новый каталог, так и тот, который был сохранён в стеке. Теперь вы можете работать внутри /var/www/html не беспокоясь о том, как вернуться обратно.

Когда будете готовы вернуться, просто используйте popd:

popd

 

Это позволяет извлечь из стека ранее сохранённый каталог и вернуться в него. Это очень удобный способ переключаться между путями, который идеально подходит для многозадачности, редактирования файлов в разных местах или переключения между ними во время разработки.

 

14. Работа с каталогами, в названиях которых есть пробелы

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

Первый вариант — экранировать пробел с помощью обратной косой черты:

cd test\ andreyex/

 

Другой способ — заключить всё имя каталога в одинарные кавычки:

cd 'test andreyex'

 

Или вы можете использовать двойные кавычки, которые работают так же, как и для простых имён каталогов:

cd "test andreyex"/

 

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

 

15. Объединение команд в цепочку после смены каталога

Иногда нужно сменить каталог и сразу же запустить другую команду, не вводя две отдельные строки. В таких случаях пригодится логический AND оператор (&&) .

Он позволяет объединять команды в цепочку, чтобы вторая команда выполнялась только в том случае, если первая выполнена успешно. Например, если вы хотите перейти в папку Загрузки и мгновенно просмотреть все ее содержимое, вы можете сделать следующее:

cd ~/Downloads && ls

 

Команда cd перемещает вас в каталог, и только если это работает, команда ls запускается и показывает файлы внутри.

 

БОНУС: улучшите навигацию с помощью zoxide (настоятельно рекомендуется)

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

Установить ее легко (вот пример для Ubuntu):

sudo apt install zoxide
eval "$(zoxide init bash)"

 

После настройки вы сможете переходить к каталогам, используя лишь небольшие фрагменты их названий. Это позволит вам переходить к любому каталогу с названием «проект» (или аналогичному), который вы посещаете чаще всего.

z proj

 

Хотите перейти в папки log, которые вы постоянно используете?

z logs

 

Заключение

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

Как только вы поймёте, как работает cd и как сочетать его с ярлыками, относительными путями, подстановочными знаками, стеками каталогов и такими инструментами, как zoxide, перемещение по файловой системе станет намного быстрее и эффективнее.

Эти приёмы сокращают время набора текста, ускоряют рабочий процесс и делают повседневную работу в терминале более комфортной, независимо от того, изучаете ли вы Linux впервые или профессионально управляете серверами

Редактор: AndreyEx

Рейтинг: 5 (1 голос)
Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала