Як використовувати pushd і popd в Linux

Багато людей з Linux ніколи не чули про pushd і popd, але вони існують завжди. Вони також можуть значно прискорити процес навігації по каталогах у командному рядку. Ми розповімо вам, як їх використовувати.

Що таке pushd і popd?

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

Концепція стека проста. Елементи розміщуються в стопці по одному, причому останній доданий елемент завжди займає верхню позицію. Коли елементи витягуються зі стопки, вони видаляються по порядку зверху вниз. Стеки такого характеру часто називають Останнім прийшов, першим вийшов (LIFO) черги.

Насправді, pushd і popd трохи гнучкіші, ніж це, але це гарна модель, яку потрібно мати на увазі.

Оскільки ми маємо на увазі стек каталогів, то, ймовірно, не дивно, що «d» в pushd і popd означає «каталог». Ці команди дозволяють вам вставляти каталоги в стек каталогів або вилучати їх з нього.

Але як це нам вигідно?

Як pushd заповнює стек

Коли ви використовуєте pushd, відбуваються такі три речі:

Ви змінюєте каталог так само, як якщо б використовували cd.
Ім’я та шлях до каталогу додаються до стека.
Стек відображається як список каталогів, розділених пробілами.

У наступних прикладах зверніть увагу, як зростає стек каталогів з кожною новою командою pushd. Також зверніть увагу, що верхня частина стека знаходиться зліва — тут з’являються нові записи.

  Як використовувати Tidal Music з командного рядка в Linux

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

Для нашого прикладу ми вводимо наступне:

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

The

Остання команда pushd повернула нас до нашого домашнього каталогу, тому першим і останнім записами в стеку є тильда (~), яка представляє наш домашній каталог. Це показує, що, хоча каталог уже є в стеку, він буде доданий знову для інших команд pushd.

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

Команда dirs

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

dirs

The

Це не впливає на стек, а лише відображає його. Деякі з параметрів, які можна використовувати з pushd, стосуються положення каталогів у стеку.

Якщо ви хочете побачити числове положення кожного каталогу, ви можете використовувати параметр -v (вертикальний), як показано нижче:

dirs -v

The

Якщо ви хочете бачити прописаний шлях до вашого домашнього каталогу замість тильди (~), додайте параметр -l (довгий формат), наприклад:

dirs -v -l

The

Додавання каталогу до стека

Як ми бачили, коли ви використовуєте команду pushd, вона виконує три речі: змінює ваш каталог, додає новий каталог до стеку та відображає стек для вас. Ви можете використовувати параметр -n (без ротації), щоб додати каталог до стеку, не змінюючи поточний каталог.

Ось наш стек каталогів:

dirs -v -l

The

Тепер ми будемо використовувати команду pushd з параметром -n і ввести в каталог /home/dave як параметр. Потім ми знову перевіримо стек каталогів.

Набираємо наступне:

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

The

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

  Що таке TTY в Linux? (і як використовувати команду tty)

Ми не залишили поточний каталог ~/Videos, тому його не повернули на іншу позицію в стеку.

Зміна каталогу шляхом обертання стека

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

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

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

pushd +3

The

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

Якщо ми хочемо перейти до каталогу в нижній частині стека, ми можемо використовувати таку команду:

pushd -0

The

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

Команда popd

Ви можете використовувати команду popd, щоб видалити каталоги зі стеку.

Якщо ми подивимося на стек каталогів, то побачимо, що каталог на позиції 1 – це /home/dave. Щоб видалити це зі стеку, ми вводимо наступне, щоб передати число в popd:

dirs -v -l
popd +1

The

Каталог /home/dave було видалено, а ті, що були під ним у стеку, перемістилися на одне місце вгору.

Так само, як ми можемо за допомогою pushd, ми можемо рахувати з нижньої частини стеку за допомогою popd. Щоб видалити останній каталог зі стека, ми вводимо:

popd -0

The

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

  Як отримати розмір файлу або каталогу в Linux

Щоб змінити каталог, зробити щось, а потім повернутися до попереднього каталогу, ви можете використовувати pushd і popd разом.

Ми будемо використовувати pushd для переміщення в інший каталог. Ми будемо використовувати popd, щоб відкинути верхній каталог у стеку та перейти до каталогу на другій позиції. Це каталог, з якого ви щойно перейшли, тож ви знову перебуваєте в каталозі, у якому перебували спочатку.

Набираємо наступне:

pushd ~
popd

The

Ми почали в каталозі ~/Projects, pushd до домашнього каталогу, а потім popd назад до каталогу ~/Projects.

Обертання через весь стек

Ми збираємося проілюструвати, як обертати стек за допомогою деяких вкладених каталогів, але ви можете використовувати будь-які каталоги в будь-якому місці файлової системи.

Наш найглибший рівень вкладеності:

/home/dave/Projects/htg/articles

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

Набираємо наступне:

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

The

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

Введіть наступне:

pushd +1

The

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

Легко повернутися до старих звичок і використовувати cd для зміни каталогу. Якщо ви це зробите, ви поставите штамп над першим каталогом у стеку. Це неминуче, оскільки перший слот зарезервований для поточного робочого каталогу — жоден з інших не змінює положення.

Для цього введіть наступне:

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

The

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

Ось чому ми зависаємо навколо командного рядка. Ефективність гірша, чи не так?