Možný duplikát:
Přesměrování stdout do souboru, do kterého nemáte oprávnění k zápisu
echo "some words" >> /etc/apt/source.list
permission denied
sudo echo "some words" >> /etc/apt/source.list
také povolení k vrácení odepřeno
Pak si myslím, že operátor append je další příkaz, měl bych před něj dát sudo, tak to zkusím
echo "some words" >> sudo /etc/apt/source.list
také povolení k vrácení odepřeno
jak mám tento úkol provést?
Přijatá odpověď:
sudo sh -c 'echo "some words" >> /etc/apt/source.list'
Důvod, proč sudo echo „některá slova“>> /etc/apt/source.list nefunguje, je ten, že sudo zvyšuje oprávnění příkazu ‚echo‘ a ne přesměrování.
Přesměrování>> způsobí, že se aktuální shell vytvoří/připojí k souboru. Selže, protože váš shell k tomu nemá oprávnění.
Důvod, proč moje odpověď funguje, je ten, že celou věc (echo a přesměrování) spouštíte v novém shellu, který byl sudo’d. sh -c ...
vyvolá nový shell a spustí příkaz uvedený v tomto subshell. Sudo před spuštěním tohoto subshell se spustí s eskalovanými oprávněními.
Druhý příklad sudo nedává smysl, protože sudo vyžaduje příkaz ke spuštění, a to není to, co předáváte. Vsadím se, že nyní máte v místním adresáři soubor s názvem sudo s obsahem „nějaká slova“. Klidně to smažte 🙂