Linux - Будет ли команда CP перезаписывать открытый файл

653
Edward144

Я хотел бы знать, если я использую команду CP или MV в качестве пользователя root для копирования файла в новый каталог, который уже содержит этот файл и в настоящее время открыт другим пользователем, то будет ли операция выполнена успешно или она будет заблокирована как есть Уже в использовании?

Я пытался протестировать это на виртуальной машине, где root перезаписывает файл, также открытый root в другом окне терминала, и это успешно, но мне интересно, если это только потому, что это тот же пользователь.

Мои конкретные обстоятельства будут перезаписывать файл с правами суперпользователя, если кто-то на компьютере с Windows открывает его через общий ресурс SMB. Я не могу проверить это сейчас.

Если это не удастся, когда файл открыт, то что, если я установлю его так, чтобы он был доступен только для всех, чтобы принять пользователя root?

Немного больше информации:

Я работаю над простой системой для создания CSV-файлов, которые содержат все наши заказы на данный месяц, и просто добавляю в конец файла, когда приходят новые заказы. Я и пользователь root (cronjob, выполняющий файлы php) быть единственными, кому нужно редактировать файлы.

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

1
После тестирования в Ubuntu `cp` и` mv` будут перезаписывать открытый файл, в том числе записываемый. Я должен предположить, что они не используют `O_EXCL`, когда открывают любой источник целевых файлов. Я полагаю, ваш редактор делает это. Другие редакторы могут открывать файлы - если нет, вы можете `cp FilePath FilePath.tmp`, редактировать` FilePath.tmp` и `mv FilePath.tmp FilePath`. AFH 7 лет назад 0

1 ответ на вопрос

1
Ken

Да, cp и mv перезапишут открытые файлы. Возможно, вы можете посмотреть контроль версий с помощью чего-то вроде Git или чего-то подобного.

Похожие вопросы