<,> I >> są używane do przekierowywania wejścia / wyjścia dla poleceń - co jest funkcją zapewnianą przez powłokę (np. Bash). Jeśli więc wpiszesz polecenie takie jak sudo cat > /var/www/info.phpwtedy, powłoka, która je odbiera jako dane wejściowe, próbuje otworzyć plik /var/www/info.phpi udostępnia ten plik jako standardowe wyjście sudopolecenia. sudoPolecenie nie jest nawet świadoma tego, czy jego wyjście idzie do konsoli lub przekierowane do pliku, ponieważ jest to załatwione przez powłokę, która powołuje się na niego.
Jeśli powłoka, w której wpisałeś swoje polecenie, jest powłoką logowania lub inną powłoką działającą w terminalu z twoim identyfikatorem użytkownika, to ma takie same uprawnienia jak twój identyfikator użytkownika - nie uprawnienia roota.
Tak więc w twoim przypadku, podczas gdy polecenie cat jest wykonywane jako root, /var/www/info.phppróba kopiowania jego danych wyjściowych jest wykonywana przez powłokę działającą jako zwykły użytkownik, co zgodnie z oczekiwaniami kończy się niepowodzeniem.
Obejściem takich sytuacji jest użycie teepolecenia:
sudo tee /var/www/info.php
Spowoduje to zamierzony efekt umieszczenia całego tekstu wprowadzonego w konsoli do ^ D w pliku określonym jako parametr.
Jednym być może niepożądanym efektem ubocznym jest teetakże echo wyjścia na standardowe wyjście, więc po wpisaniu każdego wiersza i naciśnięciu klawisza enter teewyświetli jego kopię z powrotem. Aby tego uniknąć, możesz użyć następującego wariantu.
sudo tee /var/www/info.php > /dev/null
Szczegółowe informacje teemożna uzyskać info teena terminalu.