GNU/Linux >> Znalost Linux >  >> Linux

Pseudo soubory pro dočasná data?

Často chci dodávat data s relativně krátkými řetězci (i když může být několik řádků) do programů příkazového řádku, které přijímají pouze vstup ze souborů (např. wdiff) opakovaným způsobem. Jistě mohu vytvořit jeden nebo více dočasných souborů, uložit tam řetězec a spustit příkaz s názvem souboru jako parametrem. Ale zdá se mi, že tento postup by byl vysoce neefektivní, pokud by se data skutečně zapisovala na disk a také by mohl disk poškodit více, než je nutné, pokud tento postup opakuji mnohokrát, např. pokud chci napájet jednotlivé řádky dlouhých textových souborů do wdiff. Existuje doporučený způsob, jak to obejít, řekněme pomocí pseudosouborů, jako jsou roury, k dočasnému uložení dat bez skutečného zápisu na disk (nebo zápisu pouze v případě, že překročí kritickou délku). Všimněte si, že wdiff používá dva argumenty, a pokud tomu rozumím, nebude možné vložit data pomocí něčeho jako wdiff <"text" .

Přijatá odpověď:

Použijte pojmenovaný kanál. Pro ilustraci:

mkfifo fifo
echo -e "hello worldnnext linenline 3" > fifo

-e řekne echo, aby správně interpretovalo escape nového řádku (n ). To se zablokuje, tj. váš shell se zasekne, dokud něco nepřečte data z roury.

Někde a ve stejném adresáři otevřete jiný shell:

cat fifo

Přečtete si ozvěnu, která uvolní druhou skořápku. Ačkoli roura existuje jako souborový uzel na disku, data, která jím prochází, nikoli; vše se odehrává v paměti. Můžete pozadí (& ) ozvěna.

Pipe má 64k vyrovnávací paměť (na linuxu) a stejně jako socket zablokuje zapisovač, když je plný, takže nepřijdete o data, pokud nezabijete předčasně zapisovač.


Linux
  1. MySQL – Převod na data podle tabulky pro InnoDB

  2. Top 5 softwaru pro zálohování dat pro Linux

  3. Nastavit Umask pro souborový systém připojený k Sshfs?

  1. Prostředí podobné shellu pro binární zpracování?

  2. Skrytí dat v souborových systémech?

  3. Maximální počet otevřených souborů pro pracovní proces

  1. Skript pro sledování nových souborů ve složce?

  2. Shell skript pro přesun nejstarších souborů?

  3. Použití souborů pro sdílenou paměť IPC