<,> 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.php
thì shell nhận được điều này khi đầu vào cố gắng mở tệp /var/www/info.php
và cung cấp tệp đó làm đầu ra tiêu chuẩn cho sudo
lệnh. Các sudo
lệ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 tee
lệ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ó tee
cũ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 tee
sẽ 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ề tee
có thể có thông qua info tee
tại một thiết bị đầu cuối.