У меня в файловой системе есть не совсем папка и не совсем файл. Это экземпляр AWS EC2 под управлением Ubuntu 18.04.4 LTS.
У меня есть скрипт, который запускается каждую ночь, который берет файл (/ ebsvol / dead-drop / sync) и перемещает его в (/ ebsvol / dead-drop / sync) с помощью Robo, который, в свою очередь, использует метод переименования файловой системы Symfony () (https://symfony.com/doc/current/components/filesystem.html#rename).
const CANARY_PATH = '/ebsvol/dead-drop/sync';
const CANARY_WORKING_PATH = '/ebsvol/dead-drop/~sync';
...
$this->taskFilesystemStack()
->rename(self::CANARY_PATH, self::CANARY_WORKING_PATH)
->run();
Что-то не так в сценарии или с этим кодом, хотя я здесь не поэтому. Результат и очистка - вот почему я здесь. :)
В результате создается ~ sync "файл", но на самом деле это ... жесткая ссылка на / bin? Здесь все становится подозрительно. Мой ls -ial
выглядит так:
3276803 -rw-rw-r-- 1 configbot configbot 125 Jul 4 00:30 '~sync'
Так что это просто текстовый файл, давайте попробуем cat ...
$ cat ~sync
cat: /bin: Is a directory
Угу, хорошо.
$ cd ~sync
... меняет мое приглашение на / bin и, выполняя ls, это, безусловно, bin. Кстати, ls -ial
на моем корневом томе показывает, что / bin - это iNode 12.
Это случилось со мной однажды в прошлом, и я только что сделал rm -rf ~sync
который залил весь мой сервер, и мне пришлось его восстановить. Так что я пытаюсь этого избежать.
Как мне избавиться от этого странного ~ файла синхронизации / папки / символической ссылки / жесткой ссылки без мусора / корзины?
Дополнительная информация:
/ebsvol
является отдельным томом EBS, чем /
(т.е. отдельные жесткие диски / разделы!)rm ~sync
может работать. Но разве он не покажет идентичные номера iNode?Очень плохая идея называть файл, начинающийся с тильды, если вы собираетесь получить к нему доступ с помощью оболочки, такой как bash. Причина в том, что тильда интерпретируется как означающая, что вы хотите получить доступ к домашнему каталогу пользователя.
Таким образом, bash (и другие оболочки) расширяют ~
в домашний каталог текущего пользователя и разверните ~sync
в домашний каталог пользователя с именем sync.
Оказывается, в вашей системе Ubuntu есть системный пользователь с именем sync
чей домашний каталог /bin
. Таким образом, когда вы пытаетесь получить доступ ~sync
из оболочки он расширяет его до домашнего каталога пользователя, и вы начинаете получать странные сообщения. И когда ты бежишь rm -rf ~sync
эффект был rm -rf /bin
, что в значительной степени разрушает систему.
Если вы хотите получить доступ к самому файлу, либо укажите его в кавычках, либо укажите что-нибудь в начале, например путь:
$ cat ./~sync
Вам также следует переработать свой код, чтобы он не создавал имена файлов, начинающиеся с тильды. Это избавит вас и в будущем от многих головных болей.