command line

Потеря содержимого домашней папки:неправильное использование rm

Я использую Ubuntu-Mate 20.04 и потерял большую часть содержимого моей домашней папки.Я думаю,что это может быть связано с неправильным использованием команды "rm" с sudo,но не уверен,что это может быть что-то еще.

Объясняю:Я пытался удалить папку ("targetfolder (something)")и ее содержимое в /home/user2,будучи зарегистрированным как пользователь1 (пользователь1 имеет привилегии sudo).Итак,я сделал следующее:

sudo rm -r /home/user2/targetfolder (something)/ 

Сначала rm выдал несколько сообщений об ошибках из-за скобок-я имею в виду вот это:()-,поэтому я заменил часть имени папки на*и сделал:

sudo rm -r /home/user2/targetfolder */

ПРИМЕЧАНИЕ:Возможно,я использовал кавычки для имени папки из-за пробелов ('targetfolder *' ),хотя последняя команда,зарегистрированная в терминале,идет без кавычек.

Как я понимаю,rm должен был удалить только любую папку с именем,начинающимся с "targetfolder" в домашней папке пользователя2,но,похоже,он удалил большую часть домашней папки пользователя1.Добавлю,что поскольку я не был уверен,работает rm или нет,я закрыл терминал,убив,я полагаю,процесс.

Если это имеет значение,домашние папки пользователей user1 и user2 зашифрованы с помощью ecryptfs (удаляемая папка /home/user2 находилась вне .Private и,следовательно,была незашифрованной).

Итак,мой вопрос заключается в том,могла ли команда rm,как я ее использовал,удалить содержимое домашней папки пользователя1 (или даже повлиять на систему).

У меня есть недавняя резервная копия потерянного содержимого,но я хотел убедиться,что это не связано с какой-то другой проблемой,кроме команды rm.

Заранее спасибо и извините за мой английский.

This command

sudo rm -r /home/user2/targetfolder */

попытается удалить папку /home/user2/targetfolder , которой, вероятно, не существует, а затем элементы, соответствующие */ . Это будет означать, что все нескрытые каталоги (и их содержимое) присутствуют в текущем рабочем каталоге. Если текущий рабочий каталог является домашним каталогом пользователя user1 , то да, это будет затронуто.

Ошибка не в том, чтобы уйти от пространства. Пробел — это разделитель, разделяющий аргументы. Здесь вы предоставляете два аргумента (рядом с опцией -r ), /home/user2/targetfolder и */ , где последний расширяется оболочкой, чтобы соответствовать всем не скрытым подкаталогам (например , Documents/ , Videos/ и т. д. )

Цитирование шаблона имени файла или экранирование пробела,как в примере

sudo rm -r "/home/user2/targetfolder "*/

or

sudo rm -r /home/user2/targetfolder\ */

включил бы /home/user2/targetfolder (something)/ и другие подходящие папки, если таковые имеются.

В общем, такое использование rm -r , а затем в сочетании с sudo , как вы поняли, крайне опасно. Не выполняйте сразу такую ​​команду, а сначала проверьте.

  • Замените sudo rm -r на ls -d . Это перечислит все элементы, включенные в ваши аргументы, и позволит вам заранее проверить, что будет удалено (спасибо cocomac за подсказку).
  • Как только ls выведет список того, что вы ожидаете удалить, нажмитечтобы вспомнить эту команду и изменить ls -d на sudo rm -r .

Если необходимо удалить один каталог,избегайте использования подстановочных знаков.Используйте завершение табуляции.Так вы будете уверены,что конкретное имя правильно введено в командную строку.