Я случайно вышел из vim с: x! ~, И теперь моя ~ появляется по другому пути

При выходе из файла с правами root я набрал :x!~ И нажмите enter. Теперь у меня есть следующее:

 root@host:/etc/shinken/services$ ll total 64K -rw-r--r-- 1 0 0 515 Sep 1 18:24 ~ drwxr-xr-x 2 10003 10003 4.0K Sep 1 18:24 . drwxr-xr-x 29 10003 10003 4.0K Aug 8 17:11 .. <other files omitted> 

Если я cd ~ , он принимает меня в /root как ожидалось. Как я могу удалить новую ~ без случайного удаления моего фактического дома?

 cd /etc/shinken/services rm ./~ 

Не так уж и говорить об этом. Указав ./ перед ~ вы прекратите работу оболочки при выполнении расширения тильды, и она будет рассматриваться как имя файла в текущем каталоге.

Другим вариантом было бы

 cd /etc/shinken/services rm '~' 

или просто

 rm /etc/shinken/services/~ 

В Vi и Vim :x будет работать как :wq и записать файл перед выходом. Добавив имя файла ( ~ в этом случае), будет записан файл с заданным именем. Разница между двумя командами заключается в следующем :x только записывает файл, если текущий буфер был изменен со времени последнего сохранения. ! переопределяет запись в файл только для чтения.

 rm -- '~' 

Одинарные кавычки вокруг ~ stop bash расширяют путь и просто передают его в rm .

-- останавливает rm от интерпретации любых аргументов как флагов и предполагает, что они все файлы (в этом случае не так важно, но полезно, если у вас есть файл с ведущим - ).

Вы можете сначала проверить это с помощью ls .

 ls -- '~' 

Например, в каталоге, который не содержит литерала '~', вы получите

 ls: cannot access '~': No such file or directory 

Показывая, что ls получил путь немодифицированный.