GNU/Linux >> Znalost Linux >  >> Linux

Je MV Atomic na Fs?

Jak mohu zkontrolovat, zda mv je atomic na mém fs (ext4)?

OS je Red Hat Enterprise Linux Server verze 6.8.

Obecně, jak to mohu zkontrolovat? Rozhlédl jsem se a nenašel jsem, zda je můj operační systém standardní POSIX.

Přijatá odpověď:

Je zajímavé, že se zdá, že odpověď může znít:„Záleží“.

Aby bylo jasno, mv je specifikováno jako

mv obslužný program provede akce ekvivalentní rename() funkce

Specifikace funkce přejmenování uvádí:

Toto rename() funkce je pro běžné soubory ekvivalentní té
definované normou ISO C. Jeho zahrnutí zde rozšiřuje tuto
definici o akce s adresáři a specifikuje chování
, když nový parametr pojmenuje soubor, který již existuje. Tato
specifikace vyžaduje, aby akce funkce byla atomická.

Ale nejnovější specifikace ISO C pro rename() uvádí:

7.21.4.2 rename funkce

Souhrn

#include <stdio.h>
int rename(const char *old, const char *new);

Popis

rename způsobí, že soubor, jehož jméno je řetězec, na který ukazuje old být od nynějška známý pod jménem
daným řetězcem, na který ukazuje new . Soubor s názvem old již není
pod tímto názvem přístupný. Pokud soubor pojmenovaný řetězcem ukazuje
na new existuje před voláním funkce rename
chování je implementačně definováno.

Vrátí se

rename funkce vrátí nulu, pokud operace uspěje, nenulovou hodnotu, pokud selže, v takovém případě, pokud soubor existoval
dříve, je stále znám pod svým původním názvem.

Překvapivě si všimněte, že neexistuje žádný výslovný požadavek na atomičnost. Může to být vyžadováno někde jinde v nejnovějším veřejně dostupném standardu C, ale nepodařilo se mi to najít. Pokud někdo takový požadavek najde, úpravy a komentáře jsou více než vítány.

Podle manuálové stránky Linuxu:

Pokud newpath již existuje, bude atomicky nahrazena, takže
neexistuje žádný bod, ve kterém by se jiný proces pokoušel o přístup k newpath zjistí, že chybí. Pravděpodobně však bude existovat okno
, ve kterém jsou obě oldpath a newpath odkaz na soubor, který se
přejmenovává.

Manuálová stránka Linuxu požaduje náhradu souboru bude atomický.

Testování a ověření tato atomicita může být velmi obtížná, pokud je potřeba zajít takto daleko. Není vám jasné, co máte na mysli při použití slova „Jak mohu zkontrolovat, zda je mv atomový“. Chcete požadavky/specifikaci/dokumentaci, že je atomární, nebo je skutečně potřebujete otestovat to?

Související:Získání PID okna kliknutím na něj?

Všimněte si také, že výše uvedené předpokládá dva názvy souborů operandů jsou ve stejném systému souborů. Nenašel jsem žádné standardní omezení pro mv nástroj k vynucení toho.


Linux
  1. Jak přidat nový řádek na konec souboru?

  2. Zobrazit všechny soubory až do shody?

  3. Jak přejmenovat soubor v Linuxu?

  1. Zkopírujte soubory v terminálu Linux

  2. Přejmenujte soubor v terminálu Linux

  3. Linux - Nahrazení mezer v názvech souborů

  1. Přesunout soubory v terminálu Linux

  2. The Bash ‘?

  3. Provádění operací atomového zápisu v souboru v Bash?