GNU/Linux >> Znalost Linux >  >> Linux

Přesouvání souborů na Linuxu bez mv

Skromný mv command je jedním z těch užitečných nástrojů, které najdete na každém poli POSIX, se kterým se setkáte. Jeho úloha je jasně definovaná a dělá ji dobře:Přesouvat soubor z jednoho místa v souborovém systému na jiné. Ale Linux není nic, pokud není flexibilní, a existují další možnosti pro přesun souborů. Použití různých nástrojů může poskytnout malé výhody, které se perfektně hodí ke konkrétnímu případu použití.

Než se příliš vzdálíte od mv , podívejte se na výchozí výsledky tohoto příkazu. Nejprve vytvořte adresář a vygenerujte nějaké soubory s oprávněními nastavenými na 777:

$ mkdir example
$ touch example/{foo,bar,baz}
$ for i in example/*; do ls /bin > "${i}"; done
$ chmod 777 example/*

Pravděpodobně o tom takto nepřemýšlíte, ale soubory existují jako položky, nazývané indexové uzly (běžně známé jako inodes ), v souborovém systému. Jaký inode soubor zabírá, můžete vidět pomocí příkazu ls a jeho --inode možnost:

$ ls --inode example/foo
7476868 example/foo

Jako test přesuňte tento soubor z ukázkového adresáře do vašeho aktuálního adresáře a poté si prohlédněte atributy souboru:

$ mv example/foo .
$ ls -l -G -g --inode
7476868 -rwxrwxrwx. 1 29545 Aug  2 07:28 foo

Jak můžete vidět, původní soubor – spolu s jeho stávajícími oprávněními – byl „přesunut“, ale jeho inode se nezměnil.

Linuxový terminál

  • 7 nejlepších emulátorů terminálu pro Linux
  • 10 nástrojů příkazového řádku pro analýzu dat v systému Linux
  • Stáhnout nyní:SSH cheat sheet
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Výukové programy příkazového řádku systému Linux

To je způsob, jakým mv nástroj je naprogramován na přesun souboru:Ponechte inode beze změny (pokud se soubor nepřesouvá do jiného souborového systému) a zachová jeho vlastnictví a oprávnění.

Jiné nástroje poskytují různé možnosti.

Kopírovat a odebrat

Na některých systémech je akce přesunu skutečnou akcí přesunu:Bity jsou odstraněny z jednoho bodu v systému souborů a znovu přiřazeny jinému. Toto chování do značné míry upadlo v nemilost. Akce přesunu jsou nyní buď přeřazení atributů (inode nyní ukazuje na jiné umístění ve vaší organizaci souborů) nebo sloučení akce kopírování následované akcí odstranění.

Filozofickým záměrem tohoto návrhu je zajistit že pokud se přesun nezdaří, soubor nezůstane po částech.

cp na rozdíl od mv , vytvoří ve vašem souborovém systému zcela nový datový objekt. Má nové umístění inodu a podléhá vašemu aktivnímu umask. Pohyb můžete napodobit pomocí cp a rm (nebo koš, pokud jej máte) příkazy:

$ cp example/foo .
$ ls -l -G -g --inode
7476869 -rwxrwxr-x. 29545 Aug  2 11:58 foo
$ trash example/foo

Nové foo soubor v tomto příkladu získal 775 oprávnění, protože umask umístění výslovně vylučuje oprávnění k zápisu:

$ umask
0002

Další informace o umasku najdete v článku Alexe Juareze o oprávněních k souborům.

Kočka a odstranění

Podobně jako při kopírování a odstraňování pomocí kočky (nebo tac , na to přijde) příkaz přiděluje různá oprávnění, když je vytvořen váš "přesunutý" soubor. Za předpokladu nového testovacího prostředí bez foo v aktuálním adresáři:

$ cat example/foo > foo
$ ls -l -G -g --inode
7476869 -rw-rw-r--. 29545 Aug 8 12:21 foo
$ trash example/foo

Tentokrát byl vytvořen nový soubor bez nastavených předchozích oprávnění. Výsledek je zcela podřízen nastavení umask, které neblokuje žádný bit oprávnění pro uživatele a skupinu (spustitelný bit není udělen pro nové soubory bez ohledu na umask), ale blokuje bit zápisu (hodnota dva) pro ostatní. Výsledkem je soubor s oprávněním 664.

Rsync

rsync command je robustní víceúčelový nástroj pro odesílání souborů mezi hostiteli a umístěními systému souborů. Tento příkaz má k dispozici mnoho možností, včetně možnosti, aby jeho cíl zrcadlil jeho zdroj.

Soubor můžete zkopírovat a poté odstranit pomocí rsync pomocí --remove-source-files spolu s jakoukoli další možností, kterou zvolíte k provedení synchronizace (běžná, univerzální je --archiv ):

$ rsync --archive --remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476870 -rwxrwxrwx. 1 seth users 29545 Aug 8 12:23 foo

Zde můžete vidět, že oprávnění a vlastnictví souboru byly zachovány, časové razítko bylo aktualizováno a zdrojový soubor byl odstraněn.

Upozornění: Nezaměňujte tuto možnost za --smazat , který odstraní soubory z vašeho cíle adresář. Nesprávné použití --delete může vymazat většinu vašich dat a doporučuje se vyhnout se této možnosti kromě testovacího prostředí.

Některá z těchto výchozích hodnot můžete přepsat a změnit nastavení oprávnění a úprav:

$ rsync --chmod=666 --times \
--remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476871 -rw-rw-r--. 1 seth users 29545 Aug 8 12:55 foo

Zde je respektován umask cíle, takže --chmod=666 výsledkem volby je soubor s oprávněními 664.

Výhody však přesahují pouze oprávnění. rsync má mnoho užitečných možností (nejméně z nich je --exclude příznak, abyste mohli položky vyjmout z operace velkého přesunu), což z něj dělá robustnější nástroj než jednoduchý mv příkaz. Chcete-li například vyloučit všechny záložní soubory při přesunu kolekce souborů:

$ rsync --chmod=666 --times \
--exclude '*~' \
--remove-source-files example/foo .

Nastavit oprávnění pomocí instalace

instalace command je příkaz pro kopírování speciálně zaměřený na vývojáře a je většinou vyvolán jako součást instalační rutiny kompilace softwaru. Mezi uživateli není příliš známý (a často se divím, proč dostal tak intuitivní název, takže správcům balíčků zůstaly pouhé akronymy a názvy mazlíčků), ale instalujte je vlastně užitečný způsob, jak umístit soubory tam, kde je chcete.

Existuje mnoho možností pro instalaci příkaz, včetně --backup a -porovnat (aby se zabránilo "aktualizaci" novější kopie souboru).

Na rozdíl od cp a kočka , ale přesně jako mv , instalace příkaz může zkopírovat soubor při zachování jeho časového razítka:

$ install --preserve-timestamp example/foo .
$ ls -l -G -g --inode
7476869 -rwxr-xr-x. 1 29545 Aug  2 07:28 foo
$ trash example/foo

Zde byl soubor zkopírován do nového inodu, ale jeho mtime se nezměnilo. Oprávnění však byla nastavena na instalaci výchozí 755 .

Můžete použít instalaci pro nastavení oprávnění, vlastníka a skupiny souboru:

$ install --preserve-timestamp \
--owner=skenlon \
--group=dialout \
--mode=666 example/foo .
$ ls -li
7476869 -rw-rw-rw-. 1 skenlon dialout 29545 Aug  2 07:28 foo
$ trash example/foo

Přesunout, zkopírovat a odstranit

Soubory obsahují data a ty opravdu důležité soubory obsahují vaše data. Naučit se je rozumně spravovat je důležité a nyní máte sadu nástrojů, která zajistí, že s vašimi daty bude nakládáno přesně tak, jak chcete.

Máte jiný způsob správy dat? Sdělte nám své nápady v komentářích.


Linux
  1. Zkopírujte soubory v terminálu Linux

  2. Jak zobrazit nebo změnit ACL v souborech Linux

  3. Přesunutí souboru v Linuxu v C

  1. Přesunout soubory v terminálu Linux

  2. Jak převést soubory do kódování UTF-8 v Linuxu

  3. Jak extrahovat soubory .gz a .tar.gz v Linuxu

  1. Kopírování souborů v Linuxu

  2. Android File Transfer pro Linux – odesílání souborů do Linuxu bez omezení velikosti

  3. Co jsou řídké soubory v Linuxu