![](/img/trans.png)
[英]Can a sudo user read the command file for which sudo access is enabled?
[英]Can you safely read a file which is target of mv command?
我聽說 linux 中的 mv 命令是原子的。 但這是否意味着我們可以安全地讀取文件? mv命令完成后我們會一直看到內容嗎?
我有以下情況。 我有不同的進程負責寫入和讀取文件。 我有一個定期運行mv a.txt b.txt
的進程和另一個定期運行cat b.txt
的進程。 我的問題是, cat b.txt
總是避免看到部分文件內容? 即它是否總是會在mv
命令之前或之后看到 b.txt 的內容(而不是在寫入之間)? 我認為許多操作系統使用單獨的密鑰進行讀寫,所以我不確定這個過程( mv
與cat
並行)是否安全。
我的另一個問題是 - 如果並行運行mv
和cat
不安全,那么我該怎么做才能確保安全? 我是否需要自己明確使用鎖定文件(使用 fcntl 或其他東西)?
同時調用mv
和cat
是安全的, cat
總是會看到mv
之前或之后的b.txt
的內容。
mv
使用rename(2)
系統調用:
mv 實用程序應執行與 rename() 函數等效的操作 [...]
rename(2)
保證原子性:
如果新參數命名的鏈接存在,則應將其刪除並將舊的重命名為新的。 在這種情況下,一個名為 new 的鏈接在整個重命名操作期間對其他線程保持可見,並且在操作之前引用 new 或 old 引用的文件。
該規范要求函數的操作是原子的。
通過cat
的open(2)
調用的這種保證,它變得原子化:
open() 函數應建立文件和文件描述符之間的連接
也就是說,一旦建立了連接, cat
就不會再看到另一個文件了。 POSIX 不保證讀取已重命名的文件不會失敗,但實際上,包括 Linux 在內的 POSIX 實現不會導致讀取失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.