Как использовать команду Linux flock для предотвращения удаления файла другим корневым процессом?

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

если я только указать общий замок, он не работает:
flock -s "./file.xml"

если я добавлю параметр тайм-аута, он все равно не работает
flock -s -w5 "./file.xml"

похоже, что так, это вписывается flock [-sxun][-w #] fd# путь.
(Что это за параметр FD#?)

так, Я попробовал flock [-sxon][-w #] file [-c] command
Используя flock -s -w5 "./file.xml" -c "tail -3 ./file.xml" и это сработало, команда хвост ./папка.xml был выполнен.
но я хотел бы знать, заканчивается ли блокировка после команды или она длится 5 секунд после завершения выполнения команды? Мой главный вопрос: как я могу предотвратить удаление файла в linux другим корневым процессом?

3 ответов


нет, flock не мешает никому ничего не делать. Блокировки Unix являются консультативными, что означает, что они предотвращают вызов flock другими процессами (или в случае общей блокировки предотвращают использование другого процесса с помощью эксклюзивного).

Это не останавливает root или кого-либо еще от чтения, записи или удаления файла.

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


sudo chattr +i ./file.xml

MarkR правильно chattr передоза файл будет предотвратить его удалил:

-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2135] --> sudo chattr +i junk.txt
[sudo] password for risk: 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2136] --> sudo rm ./junk.txt 
rm: cannot remove `./junk.txt': Operation not permitted
zsh: exit 1     sudo rm ./junk.txt
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2137] --> sudo rm -f ./junk.txt
rm: cannot remove `./junk.txt': Operation not permitted
zsh: exit 1     sudo rm -f ./junk.txt
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2138] --> 

flock не является правильным инструментом для этой работы. Если у вас есть программа, которая удаляет файлы, вы не должны запускать эту программу как root. Вы должны запустить его как другой пользователь. Unix имеет очень хорошую поддержку разрешений файлов, но root-это учетная запись Бога. Root может делать все, и нет никаких разрешений для root.