GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu použít sudo k přesměrování výstupu do umístění, do kterého nemám oprávnění zapisovat?

Váš příkaz nefunguje, protože přesměrování provádí váš shell, který nemá oprávnění zapisovat do /root/test.out . Přesměrování výstupu není provádí sudo.

Existuje několik řešení:

  • Spusťte shell pomocí sudo a zadejte mu příkaz pomocí -c možnost:

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
  • Vytvořte skript pomocí svých příkazů a spusťte jej pomocí sudo:

    #!/bin/sh
    ls -hal /root/ > /root/test.out
    

    Spusťte sudo ls.sh . Pokud nechcete vytvořit dočasný soubor, přečtěte si odpověď Steva Bennetta.

  • Spusťte shell pomocí sudo -s pak spusťte své příkazy:

    [[email protected]]$ sudo -s
    [[email protected]]# ls -hal /root/ > /root/test.out
    [[email protected]]# ^D
    [[email protected]]$
    
  • Použijte sudo tee (pokud při použití -c musíte hodně escapovat možnost):

    sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null
    

    Přesměrování na /dev/null je potřeba k zastavení tee z výstupu na obrazovku. Chcete-li připojit místo přepsání výstupního souboru (>> ), použijte tee -a nebo tee --append (poslední je specifický pro GNU coreutils).

Díky patří Jd, Adamu J. Forsterovi a Johnathanovi za druhé, třetí a čtvrté řešení.


Někdo tady právě navrhl sudo tee:

sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null

To lze také použít k přesměrování libovolného příkazu do adresáře, ke kterému nemáte přístup. Funguje to proto, že tee program je ve skutečnosti program "echo do souboru" a přesměrování na /dev/null má zastavit jeho výstup na obrazovku, aby zůstal stejný jako původní vytvořený příklad výše.


Trik, na který jsem sám přišel, byl

sudo ls -hal /root/ | sudo dd of=/root/test.out

Linux
  1. Jak přesměrovat výstup programu do souboru ZIP?

  2. Jak použít chmod ke změně oprávnění k souboru?

  3. Jak přesměrovat výstup do souboru a stdout

  1. Přesměrování výstupu příkazu do souboru a terminálu

  2. Jak přesměrovat výstup služby systemd do souboru

  3. Jak připojit k souboru jako sudo?

  1. Jak používat Nginx k přesměrování

  2. Jak přesměrovat výstup do souboru a Stdout v Linuxu

  3. Jak mohu použít sudo ke kontrole, zda soubor existuje?