Onehdy jsem plánoval zálohovat některá data z mého desktopového systému Ubuntu na externí USB disk. Poté, co jsem přenesl všechna data na externí disk, všiml jsem si, že vlastník a oprávnění souborů a adresářů na zdrojovém a cílovém místě se liší. Chtěl jsem však zachovat stávající atributy souborů (jako je vlastník, skupina a časové razítko atd.) nedotčené na obou umístěních. Po rychlém vyhledávání Googlem a procházení manuálových stránek příkazu „cp“ jsem zjistil, že při kopírování souborů a adresářů v systému Linux můžeme zachovat vlastnictví a oprávnění k souborům nedotčená. Pokud jste se někdy dostali do podobné situace, zde je rychlé řešení, jak to udělat.
Při kopírování souborů nebo adresářů v systému Linux ponechte vlastnictví a oprávnění k souborům nedotčené
cp příkaz má možnost kopírovat soubory a adresáře, ale zachovává časy úprav, časy přístupu a režimy z původního souboru.
$ cp -rp ~/data /media/sk/sk_seagate/data/
Zde zkopíruji obsah složky s názvem „data“ na můj externí disk.
Z cp manuálové stránky příkazu:
-p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,timestamps), if possible additional attributes: context, links, xattr, all
Pokud tedy použijete -p příznak, zachová všechny existující atributy souboru, jako je režim, vlastnictví a časová razítka z původního souboru.
A "-r" příznak se zde používá pro rekurzivní kopírování adresářů. Význam - zkopíruje adresáře a jejich podadresáře a soubory.
Případně můžete použít -a vlajka. Obsahuje příznak -r a zachovává vše, jako jsou odkazy, xattr, atributy SELinux atd.
$ cp -a ~/data /media/sk/sk_seagate/data/
Z manuálových stránek příkazu cp:
-a, --archive same as -dR --preserve=all
Chcete-li ověřit, zda jsou oprávnění k souboru a vlastnictví neporušené, použijte getfacl příkaz na obou místech, tj. na zdroji a cíli.
$ getfacl ~/data
$ getfacl /media/sk/sk_seagate/data/
Pokud chcete kopírovat soubory z místního systému do vzdáleného systému ve stejné síti, můžete použít "scp" příkaz pro přenos souborů z jednoho systému do druhého, jak je uvedeno níže.
$ scp -rp ~/data [email protected]:/home/senthil/
Výše uvedený příkaz zkopíruje složku s obsahem s názvem „data“ z mého místního systému do vzdáleného systému. Zde je 192168.225.22 IP adresa mého vzdáleného systému a "senthil" je uživatelské jméno vzdáleného systému.
Zkontrolujte oprávnění k souboru a vlastnictví adresáře "data" na obou systémech pomocí příkazu "getfacl".
Nejprve nechte zkontrolovat atributy souboru adresáře "data" v místním systému:
$ getfacl data/
Ukázkový výstup:
# file: data/ # owner: sk # group: sk user::rwx group::rwx other::r-x
Dále zkontrolujte atributy souboru adresáře "data" na vzdáleném systému. Můžete se přímo přihlásit do vzdáleného systému a zkontrolovat atributy fie vzdáleného adresáře pomocí příkazu ssh, jak je uvedeno níže.
$ ssh [email protected] getfacl data
Ukázkový výstup:
[email protected]'s password: # file: data # owner: senthil # group: senthil user::rwx group::rwx other::r-x
Jak jste si mohli všimnout ve výše uvedených výstupech, informace o vlastníkovi a skupině (tj. senthil) se v mém vzdáleném systému liší. Protože -p příznak příkazu scp nezachová všechna oprávnění.
Z manuálových stránek příkazu scp:
-p Preserves modification times, access times, and modes from the original file.
Je jasné, že -p flag zachová pouze časy úprav, časy přístupu a režimy z původního souboru, ale ne vlastnictví . V takových případech můžete vytvořit společné uživatelské jméno na obou systémech a zkusit výše uvedený příkaz přenést stejné vlastnictví a oprávnění k souborům na různých systémech. Nebo jednoduše použijte příkaz „chown“ na cílovém systému ke změně vlastnictví.
Další podrobnosti naleznete v manuálových stránkách příkazů cp a scp.
$ man cp
$ man scp
Doporučené čtení:
- Jak kopírovat soubory a měnit vlastnictví a oprávnění současně
Doufám, že to pomůže.