Назад | Перейти на главную страницу

Не файл, не папка, а жесткая ссылка (?) На / bin из другого раздела - страшно удалить

У меня в файловой системе есть не совсем папка и не совсем файл. Это экземпляр 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 который залил весь мой сервер, и мне пришлось его восстановить. Так что я пытаюсь этого избежать.

Как мне избавиться от этого странного ~ файла синхронизации / папки / символической ссылки / жесткой ссылки без мусора / корзины?

Дополнительная информация:

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

Таким образом, bash (и другие оболочки) расширяют ~ в домашний каталог текущего пользователя и разверните ~sync в домашний каталог пользователя с именем sync.

Оказывается, в вашей системе Ubuntu есть системный пользователь с именем sync чей домашний каталог /bin. Таким образом, когда вы пытаетесь получить доступ ~sync из оболочки он расширяет его до домашнего каталога пользователя, и вы начинаете получать странные сообщения. И когда ты бежишь rm -rf ~sync эффект был rm -rf /bin, что в значительной степени разрушает систему.

Если вы хотите получить доступ к самому файлу, либо укажите его в кавычках, либо укажите что-нибудь в начале, например путь:

$ cat ./~sync

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