GNU/Linux >> Znalost Linux >  >> Linux

Čtěte a zapisujte data odkudkoli s přesměrováním v terminálu Linux

Přesměrování vstupu a výstupu je přirozenou funkcí každého programovacího nebo skriptovacího jazyka. Technicky se to děje neodmyslitelně, kdykoli komunikujete s počítačem. Vstup se čte z stdin (standardní vstup, obvykle klávesnice nebo myš), výstup jde do stdout (standardní výstup, textový nebo datový tok) a chyby jsou odesílány na stderr . Pochopení toho, že tyto datové toky existují, vám umožní řídit, kam jdou informace, když používáte shell, jako je Bash nebo Zsh.

Jako umístění souborového systému v Linuxu existují standardní vstup, standardní výstup a standardní chyba. Můžete je vidět v /dev :

$ ls /dev/std*
/dev/stderr@  /dev/stdin@  /dev/stdout@

Přímo s nimi toho moc dělat nemůžete, ale někdy je užitečné je považovat za meta-místa, kam můžete posílat data.

Základy přesměrování jsou jednoduché:použijte určitý počet > znaků pro přesměrování výstupu a určitý počet < znaků pro přesměrování vstupu.

Přesměrování výstupu

Chcete-li zapsat výstup příkazu ls do souboru:

$ ls > list.txt

Nevidíte výstup ls jako obvykle, protože výstup je zapsán do list.txt soubor místo vaší obrazovky. To je ve skutečnosti tak univerzální, že jej můžete použít i ke kopírování obsahu jednoho souboru do druhého. Nemusí to být ani textový soubor. Pro binární data můžete použít přesměrování:

$ cat image.png > picture.png

(V případě, že by vás zajímalo, proč byste to někdy chtěli udělat, je to někdy užitečná odezva na oprávnění souborů.)

Přesměrování vstupu

Vstup můžete také přesměrovat "do" příkazu. To je pravděpodobně méně užitečné než přesměrování výstupu, protože mnoho příkazů je již pevně zakódováno tak, aby převzaly vstup z vámi poskytnutého argumentu. Může to být užitečné, když příkaz očekává seznam argumentů a vy máte tyto argumenty v souboru a chcete je rychle „zkopírovat a vložit“ ze souboru do vašeho terminálu (kromě toho, že ve skutečnosti nechcete kopírovat a vložit):

$ sudo dnf install $(<package.list)

Běžné použití přesměrování vstupu je dokument zde (nebo jen zde-doc zkráceně) a řetězec zde techniky. Tato metoda zadávání přesměruje blok textu do standardního vstupního proudu až na speciální značku konce souboru (většina lidí používá EOF , ale může to být jakýkoli řetězec, u kterého očekáváte, že bude jedinečný). Zkuste to napsat (až do druhé instance EOF ) do terminálu:

$ echo << EOF
> foo
> bar
> baz
> EOF

Očekávaný výsledek:

foo
bar
baz

zde-doc je běžný trik používaný skriptery Bash k vysypání několika řádků textu do souboru nebo na obrazovku. Pokud nezapomenete ukončit klauzuli značkou konce souboru, je to účinný způsob, jak se vyhnout nepraktickým seznamům echo nebo printf prohlášení.

řetězec zde je podobný zde-doc , ale skládá se pouze z jednoho řetězce (nebo několika řetězců maskovaných jako jeden řetězec s uvozovkami):

$ cat <<< "foo bar baz"
foo bar baz

Chybové zprávy přesměrování

Chybové zprávy míří do streamu s názvem stderr , označený jako 2> pro účely přesměrování. Tento příkaz přesměruje chybové zprávy do souboru s názvem output.log :

$ ls /nope 2> output.log

Odesílání dat do /dev/null

Více o Bash

  • Bashův cheat
  • Úvod do programování pomocí Bash
  • Průvodce systémového administrátora skriptováním v Bash
  • Nejnovější články o Bash

Stejně jako existují umístění pro standardní vstup, standardní výstup a chybu, existuje také umístění pro nikde na souborovém systému Linux. Jmenuje se null a nachází se v /dev , takže je často vyslovováno "devnull" lidmi, kteří jej používají příliš často, než aby řekli "lomítko dev lomítko null."

Data můžete odeslat na /dev/null pomocí přesměrování. Například find příkaz bývá podrobný a často hlásí konflikty oprávnění při prohledávání vašich souborů:

$ find ~ -type f 
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file

find příkaz to zpracuje jako chybu, takže můžete přesměrovat pouze chybové zprávy na /dev/null :

$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file

Použití přesměrování

Přesměrování je efektivní způsob, jak získat data z jednoho místa na druhé v Bash. Přesměrování možná nepoužíváte pořád, ale když se ho naučíte používat, když ho potřebujete, můžete si ušetřit spoustu zbytečného otevírání souborů a kopírování a vkládání dat, což vše obecně vyžaduje pohyb myši a hodně stisknutí kláves. Neuchylujte se k takovým extrémům. Žijte dobrý život a používejte přesměrování.


Linux
  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Jak zachytit terminálové relace a výstup pomocí příkazu skriptu Linux

  3. Přesměrování vstupu/výstupu v Linuxu/Unixu

  1. Zkopírujte soubory v terminálu Linux

  2. Přejmenujte soubor v terminálu Linux

  3. Přesunout soubory v terminálu Linux

  1. Zkopírujte a vložte na příkazový řádek Linuxu pomocí xclip

  2. Práce s Input Output a přesměrováním chyb v Linuxu

  3. Jak napsat soubor s C v Linuxu?