GNU/Linux >> Znalost Linux >  >> Linux

Přesměrování Stdout do souboru, ke kterému nemáte oprávnění k zápisu?

Když se pokusíte upravit soubor bez oprávnění k zápisu, zobrazí se chyba:

> touch /tmp/foo && sudo chown root /tmp/foo
> echo test > /tmp/foo
zsh: permission denied: /tmp/foo

Sudoing nepomůže, protože spustí příkaz jako root, ale shell se postará o přesměrování stdout a stejně otevře soubor jako vy:

> sudo echo test > /tmp/foo
zsh: permission denied: /tmp/foo

Existuje snadný způsob, jak přesměrovat stdout na soubor, do kterého nemáte oprávnění zapisovat, kromě otevření shellu jako root a manipulace se souborem tímto způsobem?

> sudo su
# echo test > /tmp/foo

Přijatá odpověď:

Ano, pomocí tee . Takže echo test > /tmp/foo se stává

echo test | sudo tee /tmp/foo

Můžete také připojit (>> )

echo test | sudo tee -a /tmp/foo

Linux
  1. Kdy mám použít /dev/shm/ a kdy /tmp/?

  2. Jak nastavit konkrétní oprávnění k souboru při přesměrování výstupu?

  3. Proč dávat věci jiné než /home do samostatného oddílu?

  1. echo nebo print /dev/stdin /dev/stdout /dev/stderr

  2. Jak změnit výchozí /tmp na /home/user/tmp

  3. Rozdíl a správné použití pro /tmp a /var/tmp

  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Přesměrování obsahu souboru na příkaz „echo“?

  3. Je Rsync ~/foo Target/foo stejný jako Rsync ~/foo/ Target/foo/?