<,> Ve >>, komutlar için giriş / çıkış yeniden yönlendirmesi için kullanılır - kabuk tarafından sağlanan bir özelliktir (örn. Bash). Dolayısıyla, böyle bir komut yazarsanız sudo cat > /var/www/info.php, bunu giriş olarak alan kabuk dosyayı açmaya çalışır /var/www/info.phpve bu dosyayı sudokomuta standart çıktı olarak sağlar . sudoÇağırır onu bu kabuk tarafından halledilir nedeniyle çıkış, bir konsola gidiş veya bir dosyaya yönlendirilmiş olup olmadığı komut farkında bile değildir.
Komutunuzu yazdığınız kabuk, oturum açma kabuğunuz veya kullanıcı kimliğinizle bir terminalde çalışan başka bir kabuksa, kullanıcı kimliğinizle aynı ayrıcalıklara sahiptir - kök ile değil.
Yani sizin durumunuzda, cat komutu root olarak yürütülürken, çıktısının kopyalanması /var/www/info.phpnormal bir kullanıcı olarak çalışan kabuk tarafından kopyalanır , bu da beklendiği gibi başarısız olur.
Bu gibi durumlar için bir geçici çözüm teekomutu kullanmaktır :
sudo tee /var/www/info.php
Bu, konsola girilen tüm metni ^ D'ye kadar parametre olarak belirtilen dosyaya koymak gibi bir etki yaratacaktır.
Belki de israf edilebilir bir yan etki, teeçıktıyı stdout'a da yansıtacaktır , bu nedenle her satırı yazıp enter tuşuna bastıktan teesonra geri bir kopyası çıkarır . Bundan kaçınmak için aşağıdaki varyantı kullanabilirsiniz.
sudo tee /var/www/info.php > /dev/null
İlgili ayrıntılar teearacılığıyla bulunabilmektedir info teebir terminal de.