<,> Và >> được sử dụng để chuyển hướng đầu vào / đầu ra cho các lệnh - là một tính năng được cung cấp bởi trình bao (ví dụ: bash). Vì vậy, nếu bạn gõ một lệnh như thế sudo cat > /var/www/info.phpthì shell nhận được điều này khi đầu vào cố gắng mở tệp /var/www/info.phpvà cung cấp tệp đó làm đầu ra tiêu chuẩn cho sudolệnh. Các sudolệnh là không hề biết dù sản lượng của nó đang đi đến một giao diện điều khiển hoặc chuyển hướng đến một tập tin, vì đây được đưa về chăm sóc bằng vỏ mà gọi nó.
Nếu shell bạn nhập lệnh của bạn vào là shell đăng nhập của bạn hoặc shell khác chạy trong một thiết bị đầu cuối với id người dùng của bạn, thì nó có các đặc quyền giống như id người dùng của bạn - không phải là root.
Vì vậy, trong trường hợp của bạn, trong khi lệnh cat được thực thi như root, việc sao chép đầu ra của nó /var/www/info.phpđược cố gắng bởi shell chạy như một người dùng bình thường, như mong đợi, thất bại.
Một cách giải quyết cho các tình huống như vậy là sử dụng teelệnh:
sudo tee /var/www/info.php
Điều đó sẽ có tác dụng dự định là đưa tất cả văn bản được nhập vào bàn điều khiển lên tới ^ D vào tệp được chỉ định làm tham số.
Một hiệu ứng phụ không mong muốn là nó teecũng sẽ lặp lại đầu ra cho thiết bị xuất chuẩn, vì vậy sau khi bạn nhập từng dòng và nhấn enter teesẽ xuất ra một bản sao của nó. Để tránh điều này, bạn có thể sử dụng các biến thể sau đây.
sudo tee /var/www/info.php > /dev/null
Thông tin chi tiết về teecó thể có thông qua info teetại một thiết bị đầu cuối.