Для переключения каталогов под Linux всем обязательно придумается команда:cdЗаказ. Это самая основная команда в Linux, если вы не знаете эту команду, вы можете убить себя.
Команда cd действительно удобна, но если вам нужно часто переключаться между следующими каталогами, вам, возможно, придется усомниться в своей жизни:
/home/alvin/projects/blogdemos/linux-system-programming/thread
/home/alvin/projects/blogdemos/diff
/home/harry/study/日本文化/中日交流/影视业/动作片
Если вы можете только команду cd, то вам нужно держать cd ing, пока вы не сойдете с ума.
Как в этом случае мы можем эффективно выполнять переключение каталогов? Лян Сюй знакомит вас с тремя командами:pushd,popd,dirs.
Все три команды верны目录栈действовать, пока目录栈Это структура стека, которая сохраняет каталоги.Верхняя часть структуры стека всегда содержит текущий каталог.(Стук по доске, точка!!).
Студенты с основами программирования знают, что栈все следуют后进先出правила. Другими словами, в структуре стека элементы, которые помещаются в стек позже, будут извлекаться из стека первыми.
После рассмотрения основных концепций давайте подробно рассмотрим эти три команды.
Показать содержимое стека каталогов: dirs
прежде всегоdirs. Эта команда очень проста, она просто отображает содержимое стека каталогов. Он имеет следующие три общих параметра:
| опции | имея в виду |
|---|---|
| -p | Отображать по одной записи в строке |
| -v | Отображать по одной записи в строке, а также отображать индекс записи в стеке |
| -c | Очистить стек каталогов |
в,-pа также-vРазница в вариантах,-vопция будет отображать индекс каждой записи в стеке, в остальном точно так же. Если теперь у нас есть стек каталогов, давайте посмотрим, что в нем находится:
[alvin@VM_0_16_centos dir2]$ pwd
/home/alvin/test/dir2
[alvin@VM_0_16_centos dir2]$ dirs -v
0 ~/test/dir2
1 ~/test/dir1
2 ~/test/dir3
3 ~/test
Обратите внимание, что самый верхний элемент всегда совпадает с текущим каталогом, если вы посмотрите на стек каталогов в другом каталоге, первый элемент изменится соответствующим образом. Точно так же, если вы используетеpushdа такжеpopdДля работы со стеком каталогов текущий каталог будет переключен на адрес, соответствующий первому элементу стека каталогов.
Если мы хотим очистить стек каталогов, используйте-cвариант.
[alvin@VM_0_16_centos diff]$ dirs -c
[alvin@VM_0_16_centos diff]$ dirs -v
0 ~/projects/blogdemos/diff
Вставьте в стек каталогов: pushd
После выполнения каждой команды pushd по умолчанию выполняется команда dirs для отображения содержимого стека каталогов. Ниже приведены основные варианты использования pushd:
1. pushd + каталог
Если pushd используется непосредственно с каталогом, он переключится на каталог и поместит каталог на вершину стека каталогов. пример:
[alvin@VM_0_16_centos test]$ pushd dir1
~/test/dir1 ~/test
[alvin@VM_0_16_centos dir1]$ pushd ../dir2
~/test/dir2 ~/test/dir1 ~/test
[alvin@VM_0_16_centos dir2]$ pushd ../dir3
~/test/dir3 ~/test/dir2 ~/test/dir1 ~/test
[alvin@VM_0_16_centos dir3]$ dirs -v
0 ~/test/dir3
1 ~/test/dir2
2 ~/test/dir1
3 ~/test
2. pushd (без аргументов)
Эффект pushd, выполненный без каких-либо параметров, заключается в обмене двумя каталогами в верхней части стека каталогов. Ранее мы подчеркивали, что первый элемент стека каталогов связан с текущим каталогом, поэтому при изменении первого элемента текущий каталог будет соответствующим образом переключаться, и наоборот.
[alvin@VM_0_16_centos dir3]$ dirs -v
0 ~/test/dir3
1 ~/test/dir2
2 ~/test/dir1
3 ~/test
[alvin@VM_0_16_centos dir3]$ pwd
/home/alvin/test/dir3
[alvin@VM_0_16_centos dir3]$ pushd
~/test/dir2 ~/test/dir3 ~/test/dir1 ~/test
[alvin@VM_0_16_centos dir2]$ pwd
/home/alvin/test/dir2 #对应目录发生改变
[alvin@VM_0_16_centos dir2]$ dirs -v
0 ~/test/dir2
1 ~/test/dir3 #索引 0 和 1 的内容对调
2 ~/test/dir1
3 ~/test
3. pushd +/-n
pushd +/-n должен переключиться непосредственно в каталог, соответствующий значению индекса. Обратите внимание, что здесь можно использовать как плюс, так и минус. Если это знак «плюс», он будет отсчитываться от вершины стека каталогов, а если используется знак «минус», он будет отсчитываться от нижней части стека каталогов.
Далее вернемся к вопросу, поставленному в начале статьи: что делать, если мы хотим часто переключаться между двумя или более каталогами с длинными путями?
Во-первых, мы используемpushd + каталогспособ добавления этих путей в стек каталогов;
Затем используйтеpushd +/-nБыстро переключайтесь между разными каталогами. Конкретная демонстрация выглядит следующим образом:
[alvin@VM_0_16_centos dir2]$ pwd
/home/alvin/test/dir2
[alvin@VM_0_16_centos dir2]$ dirs -v
0 ~/test/dir2
1 ~/test/dir3
2 ~/test/dir1
3 ~/test
[alvin@VM_0_16_centos dir2]$ pushd +2
~/test/dir1 ~/test ~/test/dir2 ~/test/dir3
[alvin@VM_0_16_centos dir1]$ pwd
/home/alvin/test/dir1
[alvin@VM_0_16_centos dir1]$ dirs -v
0 ~/test/dir1
1 ~/test
2 ~/test/dir2
3 ~/test/dir3
Извлеките стек каталогов: popd
После выполнения каждой команды popd по умолчанию выполняется команда dirs для отображения содержимого стека каталогов. Основные варианты использования popd следующие:
1. popd (без аргументов)
Эффект popd, выполненный без каких-либо параметров, заключается в извлечении верхнего элемента в стеке каталогов из стека. В это время меняется верхний элемент стека, и, естественно, соответственно переключается и текущая директория.
[alvin@VM_0_16_centos dir3]$ dirs -v
0 ~/test/dir3
1 ~/test/dir1
2 ~/test
3 ~/test/dir2
[alvin@VM_0_16_centos dir3]$ popd
~/test/dir1 ~/test ~/test/dir2
[alvin@VM_0_16_centos dir1]$ dirs -v
0 ~/test/dir1
1 ~/test
2 ~/test/dir2
2. popd +/-n
Удалить n-й элемент из стека каталогов. Точно так же знаки плюс и минус означают счет сверху вниз или снизу вверх.
[alvin@VM_0_16_centos dir1]$ dirs -v
0 ~/test/dir1
1 ~/test
2 ~/test/dir2
[alvin@VM_0_16_centos dir1]$ popd +1
~/test/dir1 ~/test/dir2
[alvin@VM_0_16_centos dir1]$ dirs -v
0 ~/test/dir1
1 ~/test/dir2