Видимо, вы можете переименовать файл в...
.
Если бы я был безумен, как бы я переименовал файл в ..
или .
? Такое имя файла даже разрешено?
Обратная косая черта, кажется, не отключает специальное значение точки:
$ mv test \.
mv: `test' and `./test' are the same file
.
и..
уже существует. И точка не имеет особого значения..
или..
из Windows на внешнемFAT
илиNTFS
носителе, а затем попытаться смонтировать это в систему на основе Unix. Хм ....
и..
действительно ли они добавляются только Win32 API. Я знаю, что существует несколько несоответствий между NT API более низкого уровня и Win32, например, Win32 скрывает несколько файлов от корня диска.Ответы:
..
не особенный, просто он уже существует.В Unix, Dos и MS-Windows каждый каталог имеет каталог, на который
.
он ссылается обратно, и каталог, на который..
он ссылается на родительский каталог (или self, если это корневой каталог).Если
..
и.
являются особенными, это только потому, что вы не можете удалить их (на самом деле вы можете, вы просто удалите каталог, который содержит их).Поэтому вы не можете назвать любой (другой) файл
.
или..
.Однако вы можете создавать файлы
...
,\
,…
,..
(примечание есть пространство после..
, но вы вряд ли можете увидеть его здесь, или просто в вас распечатку каталога) или любое другое имя вам нравится; Только зарезервирован характер/
(Внимание - современные детали: и нуль, нуль является специальным символом, для чего не используется , кроме как отметить конец вещей , а иногда и в качестве разделителя)..
не имеет особого значения: не для имен файлов, ядра или оболочки, его не нужно экранировать. На самом деле, если имя файла начинается с,.
то оно особенное, файл обычно скрыт, но все же не нуждается в экранировании.В стороне
Такое поведение скрытых файлов появилось в ранней реализации того,
ls
где автор хотел скрыть,.
и..
поэтому они написали код, чтобы скрыть любые файлы, начинающиеся с a.
. Другие пользователи заметили эту ошибку / функцию и начали создавать файлы, начиная с символа,.
когда они хотели, чтобы файл был скрыт.Объяснение связанного вопроса
В вопросе, на который вы ссылаетесь, спрашивающий пытается переместить файл в родительский каталог,
..
но в итоге переименовывает его...
, файлы, начинающиеся с точки, по умолчанию скрыты, поэтому они не могут его найти.При использовании mv в форме
mv a b
.
нему, то это фактически не операция, ноmv
она воспринимается как ошибка...
нему, файл будет перемещен в родительский каталог.источник
If you move to . it is effectively a no operation
? Это не «нет операции», это ошибка, если вы пытаетесь переместить файл из A в B, когда A и B - это одно и то же. Более практической демонстрацией этой ошибки являетсяmv foo ../some_dir/foo
илиmv foo some_subdir/../foo
./
и NUL) и зарезервированным именем (то есть.
и..
) может быть сделано более ясным. Также стоит отметить, что.
в начале имя имеет особое значение только на уровне приложения, а не в ядре или системном вызове API...
и.
являются особенным: вы не можете переместить или удалить их. Но они не являются особенными при перемещении файлов к ним.Вы не можете переименовать файл в
.
или..
потому что все каталоги уже содержат записи для этих двух имен. (Эти записи указывают на каталоги, и вы не можете переименовать файл в каталог.)mv
обнаруживает случай, когда местом назначения является существующий каталог, и интерпретирует его как запрос на перемещение файла в этот каталог (используя его текущее имя).Обратная косая черта не имеет к этому никакого отношения, поскольку
.
не является метасимволом оболочки.\.
и.
такие жеbash
.источник
Проблема в том, что вы перемещаете файл в каталог. Это разрешено потерпеть неудачу.
Я собираюсь рассказать вам, как это было раньше.
mkdir обычно читал это (хотя я пишу это на sh, он действительно был написан на C и setuid-root).
Так что, как видите, особого в этом нет. и .. кроме того факта, что они созданы для вас mkdir и уже существуют. Теперь есть код, который говорит, что вы не можете удалить их, но это было не всегда так.
rmdir раньше выглядел так:
источник