Я читаю Windows - Что такое "." и ".." в каталоге? - Супер пользователь

Это объясняет:

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

Я очень смущен. Может кто-нибудь привести пример?

2 ответа2

1

Немного придуманный пример Windows: вы можете использовать . чтобы установить атрибуты текущего каталога:

C:\Path\to\Some\Directory> md sub1 sub2

C:\Path\to\Some\Directory> attrib * /s /d
             C:\Path\to\Some\Directory\sub1
             C:\Path\to\Some\Directory\sub2

C:\Path\to\Some\Directory> cd sub2

C:\Path\to\Some\Directory\sub2> attrib +r .

C:\Path\to\Some\Directory\sub2> cd ..

C:\Path\to\Some\Directory> attrib * /s /d
             C:\Path\to\Some\Directory\sub1
     R       C:\Path\to\Some\Directory\sub2

Здесь мы устанавливаем атрибут только для чтения в каталоге sub2 пока мы в нем.  attrib +r . короче и проще набирать, чем attrib +r ..\sub2 или attrib +r C:\Path\to\Some\Directory \sub2 .

1

Вопрос касается Windows, но вы пометили поэтому мой ответ относится к Linux.

Каждый раз, когда вы вызываете команду, есть какой-то рабочий каталог, в котором вы сейчас находитесь; . обозначает этот каталог. pwd - это общая команда, чтобы узнать, что это за каталог. Работая в такой оболочке, как bash вы можете "перейти" в другой каталог с помощью cd /another/directory/path .

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

some_command argument

или даже произвольное количество аргументов (четыре в этом примере):

some_command argument1 argument2 "argument3 with spaces" argument4

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

df .

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

Есть команды, которые работают с текущим рабочим каталогом по умолчанию: ls эквивалентно ls . , du равносильно du . , Обратите внимание, что это не всегда так: df печатает все доступные файловые системы, а df . печатает только один из них.


Я написал « если команда интерпретирует это как путь к каталогу», потому что некоторые команды этого не делают. Например, в bash команда

tr . , <<< foo.bar

выведет foo,bar (tr заменяет . , в заданной строке foo.bar ). Это потому, что tr интерпретирует . в виде односимвольной строки.

Это показывает . не переводится оболочкой в текущий путь к каталогу. Сравните это с ~ что переводится в значение $HOME (попробуйте echo ~ в bash). Интерпретация . поскольку определенный путь лежит глубоко внутри структуры дерева каталогов в Linux (более широкий: в UNIX).

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


Также обратите внимание, что ls -a почти всегда печатает . среди "реального" содержимого каталога. Это становится интересным, когда ваш текущий рабочий каталог удаляется. В этом случае ls -a ничего не печатает, кроме ls . или df . все еще работает, как будто . был здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .