Как сделать текущим каталог в командной строке: CD и CHDIR — сменить каталог .

Команда cd — изменение текущего каталога в Bash. Абсолютная и относительная адресация

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

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

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

В случае абсолютной адресации путь к каталогу указывается, начиная с корневого каталога, и далее вниз по дереву папок до требуемого. Так все следующие записи являются абсолютными адресами: /home/pl/Desktop, /boot, /etc/vim. Первый знак слэша (/) обозначает корневой каталог.

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

Примеры относительных адресов: ./Documents/images, Documents/images, ../test. Первые два адреса указывают на одно и то же: каталог (images), вложенный в каталог (Documents), который вложен в текущий. Точку-слэш имеет смысл ставить только перед исполняемыми файлами. Иначе Bash будет искать программу в системных каталогах, а не текущем.

Адрес ../test говорит, что надо подняться на один уровень выше текущего в иерархии папок. Уже оттуда перейти в имеющийся там каталог test.

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

В командной оболочке Linux можно выделить еще один способ адресации – адрес относительно домашнего каталога пользователя. Обозначается домашний каталог знаком тильды (~). Так из любого каталога адрес ~ заставит обратиться в домашнюю папку. А адрес ~/Documents во вложенную в домашнюю.

Вернемся к команде cd. В Bash ее используют для перемещения по дереву каталогов, передавая ей в качестве аргумента адрес места назначения.

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

Если команде cd не передавать аргумент, то она сделает текущим домашний каталог пользователя, где бы вы до этого не находились. На скрине выше с помощью абсолютного адреса мы переходим в каталог /opt/google. После этого в приглашении Bash используется абсолютный адрес.

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

Следует помнить одну полезную особенность – это автодополнение при нажатии клавиши Tab. Для адресов оно работает также как для команд.

Вопросы

  1. Вы находитесь в домашнем каталоге. Где вы окажитесь после выполнения команды cd ../..?

  2. На ваш взгляд, какой может быть смысл в том, что при автодополнении Bash подставляет слэш в конце адреса? Например, сработает и так: cd programs. Но Bash предпочтет cd programs/.

Курс с ответами к заданиям и дополнительными уроками

в PDF

Навигация | Основы командной строки

Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

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

В командной строке все устроено иначе: после загрузки системы мы попадаем в режим ожидания ввода команды. Этот режим привязан к файловой системе. Можно сказать, что мы всегда находимся внутри какой-то директории, которую называют рабочей директорией (working directory).

В этом уроке мы поговорим о навигации по директориям через командную оболочку.

Как проверить, в какой директории мы находимся

Начнем с самого основного. Проверить, в какой директории мы сейчас находимся, можно командой pwd:

pwd
/Users/guest

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

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

В приведенном примере есть две неожиданности для тех, кто привык пользоваться Windows:

  1. В начале указан не диск, а единый корневой каталог /. Это вершина файловой системы, внутри которой лежат все остальные файлы и директории
  2. Вместо обратных слэшей \ используются прямые слэши /

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

Как посмотреть список файлов

Изучим команду ls (сокращение от list). Она выводит список файлов и директорий в текущей рабочей директории:

ls
Desktop  Documents Downloads Library  Movies  Music  Pictures Public

Как переместиться в другую директорию

Еще одна полезная команда — cd (сокращение от change directory). С помощью нее мы перемещаемся по файловой структуре. Для этого ей нужно передать аргумент — директорию, в которую необходимо переместиться:

# Входим в директорию
cd Music
# Смотрим ее содержимое
ls
iTunes
# Смотрим текущую рабочую директорию
pwd
/Users/guest/Music
# Если имя директории содержит пробел, то его нужно экранировать с помощью `\`
cd Best\ music

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

  • Абсолютный путь начинается от корня
  • Относительный путь начинающийся от текущей рабочей директории

Выше мы указали относительный путь. Отличить их друг от друга очень легко:

  • Абсолютный — первым символом в пути идет /
  • Относительный — во всех остальных случаях

Когда мы используем относительный путь, команда cd считывает его и внутри себя пытается вычислить абсолютный путь. Она берет текущую рабочую директорию /Users/guest/ и присоединяет к ней Music. В итоге получается /Users/guest/Music.

Команда cd понимает и абсолютные, и относительные пути. Поэтому передавать ей можно что угодно:

# Неважно, в каком месте
cd /Users/guest/Music # Абсолютный путь

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

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

Теперь рассмотрим другую задачу. Предположим, что мы находимся в директории /Users/guest/Music. Как выйти из нее и попасть снова в /Users/guest? Мы уже знаем один способ — указать абсолютный путь и сделать cd:

cd /Users/guest

Но есть путь проще. Можно указать специальное значение .. и перейти на директорию уровнем выше:

# В директории /Users/guest/Music
cd ..
pwd
/Users/guest

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

# В директории /Users/guest/Music
# Выходим на два уровня вверх
cd ../..
pwd
/Users

Иногда вместо двух точек используется одинарная точка, которая означает текущую директорию. Например, вместо cd Music можно писать cd ./Music — разницы между этими выражениями нет.

Есть и третий вариант возврата в /Users/guest из директории /Users/guest/Music. Можно выполнить команду cd без аргументов, тогда мы перейдем в домашнюю директорию текущего пользователя:

# Из любого места
cd
pwd
/Users/guest

Ну и, наконец, четвертый вариант. Домашняя директория пользователя имеет специальное обозначение — ~ (тильда). В момент выполнения команды тильда заменяется на абсолютный путь. Поэтому из любого места можно напрямую перейти в любую поддиректорию домашней директории:

# Из любого места
cd ~/Music
pwd
/Users/guest/Music

Допустим, вы находитесь в домашней директории и хотите посмотреть файлы в поддиректории Music. Один способ вы уже знаете — для этого нужно перейти в директорию Music и выполнить программу ls.

Как обычно, есть другой способ. Команда ls также может принимать на вход аргумент — директорию, которую нужно проанализировать:

ls Music
iTunes

Как и в случае с командой cd, к аргументу ls применимы понятия абсолютных и относительных путей. Впрочем, это правило распространяется на большинство случаев, где передаются пути.

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

Команды cd, ls и pwd вместе составляют основу навигации по файловой структуре. Зная их, вы никогда не потеряетесь и не запутаетесь.

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


Самостоятельная работа

Изучите содержимое директорий своей файловой системы. При перемещении между разделами с помощью команды cd используйте клавишу Tab для автозаполнения.


Остались вопросы? Задайте их в разделе «Обсуждение»

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

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Электронная почта *

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Пакетный файл

— команда оболочки Windows для получения полного пути к текущему каталогу?

спросил

Изменено
1 год, 10 месяцев назад

Просмотрено
778 тысяч раз

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

Кроме того, как я могу сохранить этот путь внутри переменной, используемой в пакетном файле?

  • windows
  • пакетный файл
  • командная строка
  • cmd

2

Используйте cd без аргументов, если вы используете оболочку напрямую, или %cd% , если вы хотите использовать его в пакетном файле (он ведет себя как переменная среды).

4

Вы можете установить переменную пакета/среды следующим образом:

 SET var=%cd%
ЭХО%вар%
 

пример снимка экрана из Windows 7 x64 cmd.exe.

Обновление: если вы выполняете SET var = %cd% вместо SET var=%cd% , ниже показано, что происходит. Спасибо джебу.

Захват текущего каталога из пакетного файла

3

Цитата из справки Windows для набор команда ( набор /? ):

Если расширения команд включены, то есть несколько динамических
переменные среды, которые можно расширить, но которые не отображаются в
список переменных, отображаемых SET. Эти переменные значения
вычисляется динамически каждый раз, когда значение переменной расширяется.
Если пользователь явно определяет переменную с одним из этих имен, то
это определение переопределит динамическое, описанное ниже:
%CD% — расширяется до текущей строки каталога. 
%DATE% — расширяется до текущей даты, используя тот же формат, что и команда DATE.
%TIME% — расширяется до текущего времени, используя тот же формат, что и команда TIME.
%RANDOM% — заменяется случайным десятичным числом от 0 до 32767.
%ERRORLEVEL% — расширяется до текущего значения ERRORLEVEL
%CMDEXTVERSION% — расширяется до текущих расширений командного процессора.
    номер версии.
%CMDCMDLINE% — заменяется исходной командной строкой, которая вызвала
    Командный процессор.
 

Обратите внимание на %CD% — расширяется до текущей строки каталога. часть.

В Unix?

пароль

1

Это всегда работало для меня:

 SET CurrentDir="%~dp0"
ECHO Текущий путь к файлу, в котором выполняется этот файл bat, следующий:
ЭХО %CurrentDir%
Пауза
 

4

Для Windows мы можем использовать

cd

и для Linux

pwd

есть команда.

Создайте файл .bat под System32 , назовем его copypath.bat команда для копирования текущего пути может быть :

 echo %cd% | клип
 

Объяснение:

%cd% даст вам текущий путь

 CLIP
Описание:
    Перенаправляет вывод инструментов командной строки в буфер обмена Windows.
    Затем этот текстовый вывод можно вставить в другие программы.
Список параметров:
    /? Отображает это справочное сообщение.
Примеры:
    ДИР | CLIP Размещает копию текущего каталога
                        листинг в буфер обмена Windows.
    CLIP < README.TXT Размещает копию текста из readme.txt
                        в буфер обмена Windows.
 

Теперь copypath доступен отовсюду.

1

В Windows:

CHDIR Отображает имя текущего каталога или изменяет его.

В Linux:

PWD Отображает имя текущего каталога.

Для Windows cd сам по себе покажет вам текущий рабочий каталог.

Для UNIX и аналогичных систем pwd будет выполнять ту же задачу. Вы также можете использовать переменную оболочки $PWD в некоторых оболочках. Я не уверен, поддерживает ли Windows получение текущего рабочего каталога через переменную оболочки или нет.

2

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

Первоначальный пользователь должен посмотреть на "pushd", который изменяет каталог и помещает текущий в стек, который можно восстановить с помощью "popd". В любой современной командной оболочке Windows это способ создания пакетных файлов.

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

В командной строке Windows chdir или cd напечатает полный путь к текущему рабочему каталогу в консоли.

Если мы хотим скопировать путь, мы можем использовать: cd | зажим .

 @эхо выключено
for /f "usebackq tokens=*" %%x in (`chdir`) установить var=%%x
echo Текущий каталог: %var%
 

Но, конечно , ответ gmaran23 намного проще.

2

Как один из возможных кодов

 эхо выкл.
    for /f "usebackq tokens=* delims= " %%x in (`chdir`) установить var=%var% %%x
    echo Текущий каталог: "%var:~1%"
 

В Windows введите cd для рабочего текущего пути.

В Linux pwd для текущего рабочего пути.

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

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

bash — ярлык командной строки для текущего каталога, аналогичный ~ для домашнего каталога?

спросил

Изменено
1 год, 6 месяцев назад

Просмотрено
82к раз

Когда я использую команду cp или move в окне терминала,
в настоящее время я использую bash в определенной папке, подобной этой.

 NES@server:~/Desktop/dir1$
 

А теперь я хочу скопировать файл отсюда ~/anotherdir/dir2 в текущий
выбранная папка в bash (dir1) я бы использовал команду

 cp ~/anotherdir/dir2/file ~/Desktop/dir1
 

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

  • bash
  • командная строка
  • ярлыки

Ваш текущий каталог . . Итак, cp /foo/fam/foo . копирует файл в ваш текущий каталог.

Аналогичная конструкция для "одной директории вверх" или родительской директории вашей текущей рабочей директории состоит из двух точек, т. е. .. . (Спасибо @djeikyb .)

Итак, из /usr/house/firstfloor/basement , cd .. поднимает вас на один уровень вверх до /usr/дом/первый этаж .

В том же примере (начиная с /usr/house/firstfloor/basement , команда cd ../.. приведет вас к /usr/house .

Вы также можете использовать $PWD с echo , чтобы получить текущий каталог:

 echo $PWD
 

Кстати, $OLDPWD даст вам ваш предыдущий каталог. (Что в bash вы также можете получить, набрав cd - .)

11

Вы можете использовать $(pwd), это приведет к выходу команды pwd.

Пример:

 эхо $(pwd)
 

1

./ представляет текущий каталог. Таким образом, вы можете использовать команду cp ~/anotherdir/dir2/file ./ Это скопирует файл «файл» в текущий рабочий каталог.

3

Чтобы использовать текущий каталог в качестве каталога назначения, используйте одну точку ' . '

Длинный ответ

Используя ваш пример, введите: cp ~/anotherdir/dir2/file .

Чтобы увидеть точку . , .. и ../../ имен каталогов в действии, скопируйте и вставьте в терминал следующие команды:

 mkdir a && mkdir a/b && mkdir a/b/c && mkdir a/ б/с2
компакт-диск а/б/к
СР/и т.д./по умолчанию/жратва.
cp /etc/default/grub ..
СР/и т.д./по умолчанию/жратва ../c2
CD ../../
дерево
 

Вывод команды дерева выглядит следующим образом:

 .
└── б
    ├── в
    │   └── жратва
    ├── с2
    │   └── жратва
    └── жратва
3 каталога, 3 файла
 

. в верхней части вывода дерева представляет новый текущий каталог a , который является прародителем a/b/c , к которому мы перешли с помощью команды cd ../../ . Под a мы видим подкаталоги a/b , a/b/c и a/b/c2

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

Затем мы перешли в каталог a/b/c , который является текущим каталогом для следующих команд копирования:

  • В первой команде копирования ( cp ) мы устанавливаем место назначения
    текущий каталог ( c ) с . .
  • Во второй команде копирования мы устанавливаем место назначения для родительского
    каталог ( б ) с .. .
  • В третьей команде копирования мы устанавливаем место назначения для родственного
    каталог ( c2 ) с . ./c2

Затем, как было сказано ранее, мы изменили текущий каталог на a и запустили команду tree для отображения всех каталогов и файлов под a .

После того, как мы закончим, мы удалим три каталога и файла с помощью:

 cd ~/
rm -r дерево
 

Переменная среды для текущего каталога — $PWD

 эхо $PWD
 

0

Вы можете использовать точку ( . ), расширение тильды ~+ , команду pwd или переменную $PWD для представления текущего рабочего каталога (CWD). Все эти команды могут сделать это:

  1. mv file_old_dir .
  2. mv file_old_dir ~+
  3. mv file_old_dir $(pwd)
  4. mv file_old_dir $PWD

Да (как отмечали другие), текущим каталогом является «.», поэтому вы можете запускать программы/скрипты из текущего каталога с помощью .