GNU/Linux >> Znalost Linux >  >> Linux

Proč Mv(1) kopíruje objekty, pokud je odepřeno povolení k pohybu?

mv fungovat jako cp(1) pokud povolení procesu přesunout odepřeno?

Pokud ano, není to proti pravidlu dělat jednu věc a dělat to dobře?

Přijatá odpověď:

Krátká odpověď je, že ne.

mv je definován jako:

provádět akce ekvivalentní rename() funkce

rename() nekopíruje obsah, pouze jej přejmenuje na disku. Je to zcela atomová operace, která nikdy neselže částečně dokončená.

To však nevypovídá celý příběh. Kam tento efekt může se stane, když se pokoušíte přesunout soubor mezi zařízeními:v takovém případě není možné provést přejmenování v souborovém systému. Chcete-li mít efekt přesunutí, mv nejprve zkopíruje zdroj do cíle a poté zdroj odstraní. Ve skutečnosti mv /mnt/a/X /mnt/b/Y je v podstatě ekvivalentní cp /mnt/a/X /mnt/b/Y && rm /mnt/a/X . Jedině tak může fungovat přesouvání souborů mezi zařízeními.

Když mv nemá oprávnění smazat tento zdrojový soubor, bude hlášena chyba, ale v tom okamžiku již ke kopírování došlo. Tomu se nelze vyhnout kontrolou oprávnění předem kvůli možným závodním podmínkám, kdy se oprávnění během operace mění.

Neexistuje žádný způsob, jak zabránit této možné eventualitě, kromě znemožnění přesunu souborů mezi zařízeními. Volba povolit mv mezi jakýmkoli zdrojem a cílem dělá věci v obecném případě jednodušší, na úkor zvláštního (ale nedestruktivního) chování v těchto neobvyklých případech.

To je také důvod, proč je přesun velkého souboru v rámci jednoho zařízení mnohem rychlejší než přesunutí do jiného.


Linux
  1. pip freeze vrací chybu:Oprávnění odepřeno:hg

  2. Proč potřebuje uživatel root oprávnění sudo?

  3. Proč se [a-z] shoduje s malými písmeny v bash?

  1. Proč Sudo ignoruje aliasy?

  2. Proč kontejner dockeru zobrazí výzvu Permission denied?

  3. Co dělá povolení k provedení?

  1. chyba připojení 13 =Oprávnění odepřeno

  2. 'Povolení odepřeno' k souboru, který vlastním?

  3. tcpdump:out.pcap:Povolení odepřeno