Это - скорее противоположное: cp
ведет себя как любое другое приложение, оно интерпретирует ..
как родительский каталог текущего каталога. Поэтому ядро интерпретирует ..
как родительский каталог текущего каталога.
Когда Вы работаете cd
через символьную ссылку, путь, которому Вы передаете cd
не делает родительский каталог целевого каталога очевидным. Когда Вы работаете cd ~/Desktop/subdir
, место назначения не /home/konstantin/Desktop/subdir
— это - символьная ссылка. Целевой каталог /home/konstantin/Desktop/Public/subdir
. (Или, чтобы быть педантичным: целевой каталог является названным подкаталогом subdir
из названного подкаталога Public
из … названного подкаталога home
из корневого каталога.) /home/konstantin/Desktop/subdir/..
не /home/konstantin/Desktop
: свойство, что родительский каталог /…stuff…/subdir
/…stuff…
только содержит в отсутствие подкаталогов.
Поскольку часто удобно думать о символьных ссылках на каталоги, как будто они были каталогами, оболочки выполняют отслеживание символьной ссылки. Когда Вы работаете cd
, оболочка помнит, какой путь (возможно использующий символьные ссылки) Вы раньше достигали места назначения. И когда Вы используете ..
в аргументе cd
(или подобная оболочка builtins такой как pushd
), оболочка выполняет текстовую интерпретацию ..
вместо того, чтобы интерпретировать его как текущий каталог: cd /some/stuff/../more
преобразовывается к cd /some/more
. Тот путь, cd
ведет себя, как будто символьные ссылки были на самом деле каталогами.
Текстовая интерпретация ..
известен как логическое отслеживание каталога и интерпретация файловой системы ..
известен как физическое отслеживание каталога. Если Вы хотите использовать физическое отслеживание каталога (т.е. выключить текстовую интерпретацию ..
), передайте -P
опция к cd
. -L
опция вызывает логическое отслеживание на, в случае, если это было отключено. Логическое отслеживание прочь по умолчанию; можно выключить его с set -P
в ударе или с setopt chase_links
в zsh.
Команда pwd
отображает текущий каталог, как прослежено оболочкой. Как cd
, можно передать опцию -L
или -P
вызвать логическое или физическое отслеживание.
Все это происходит в оболочке. Внешние приложения такой как cp
не имейте никакого способа знать то, что отслеживание оболочки делает внутренне. Таким образом, если Вы хотите использовать логическое отслеживание каталога в аргументе команде, необходимо преобразовать это сначала в путь, который не зависит от логического отслеживания.
Переменная оболочки PWD
отслеживает текущий каталог ($PWD
содержит ту же строку это pwd
печать). Если Вы хотите снять изоляцию с последнего текстового компонента отслеженного пути к текущему каталогу вместо добавления /..
который только работает с логическим отслеживанием, можно использовать текстовый метод.
cp testfile "${PWD##*/}"
или в zsh:
cp testfile $PWD:h
Если Вы хотите ввести ..
и не должны думать о выражении каталога по-другому, работать cd
к желаемому целевому каталогу, и затем используют путь к месту назначения в аргументе команды.
cp testfile "$(cd .. && pwd)"
Источник этой проблемы может быть неясен. Это может быть плохая батарейка (, обычно кнопочная ячейка 2032 )в аппаратных часах. Может быть проблема с демоном systemd -timesyncd для синхронизации часов с часами локального сетевого сервера ntp. Возможно, ваш маршрутизатор обслуживает неправильное время ntp. Это требует дальнейшего расследования.
Быстрым решением может быть установка ntpdate или (лучше )chrony. Пакет ntp уже не так надежен, как раньше.