đầu ra chương trình đuôi để tập tin trong Linux


9

Tôi biết chúng ta có thể sử dụng định dạng dưới đây để chuyển hướng đầu ra màn hình sang một tệp:

$ your_program > /tmp/output.txt

Tuy nhiên, khi tôi sử dụng lệnh bên dưới, nó báo "-bash: /home/user/errors.txt: Quyền bị từ chối"

sudo tail /var/log/apache2/error.log > ~/errors.txt

Tôi có thể biết làm thế nào để đầu ra này hoạt động? ~ / Error.txt không tồn tại. Tôi có cần tạo tệp txt này trước khi sử dụng lệnh redirect không?


1
Điều gì xảy ra nếu bạn gõ echo hi > ~/errors.txt? Là /home/userthư mục chính xác của bạn (hoặc bash bằng cách nào đó bị nhầm lẫn về nơi thư mục chính của bạn)?
cjm

userngười dùng chạy lệnh?
người dùng không xác định

vâng, người dùng là người dùng chạy lệnh
Xianlin

Đây là hành vi bình thường cho sudo. sudokhông cho phép chuyển hướng. quá nhiều cách để mọi người có thể sử dụng điều đó để làm những việc nghịch ngợm không được bao gồm trong sudoers.conftệp. Để thay thế, bạn có thể chạy sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"để loại bỏ phần cuối của lỗi.log vào tệp trong thư mục nhà của bạn.
Tim Kennedy

Câu trả lời:


17

Đằng sau đường ống, sudo không hoạt động. Tôi không biết tại sao bạn không thể viết thư đến nhà của bạn - có thể tệp thuộc về root?

 sudo tail /var/log/apache2/error.log | sudo tee ~/errors.txt

Có lẽ bạn cần một người dùng khác đằng sau đường ống. Để chắc chắn, bạn không cần một tập tin có sẵn.


Vâng, điều đó đã làm việc ...
Xianlin

Đối với vấn đề cấp phép, có lẽ $ HOME được gắn NFS với rootquash?
Ansgar Esztermann

$ HOME không được gắn NFS.
Xianlin

6

Khi bạn viết sudo somecommand > ~/errors.txt, cái vỏ đang gọi sudo(và đang chạy như bạn) là cái vỏ thực hiện chuyển hướng và mở ~/errors.txt. Xem Chuyển hướng xuất chuẩn sang tệp bạn không có quyền ghi . Thông thường vấn đề trong trường hợp đó là bạn muốn root ghi vào tệp; xem câu hỏi liên kết để biết cách làm điều này

Ở đây, thật kỳ lạ khi bạn không thể ghi vào một tệp trong thư mục nhà của bạn. Rất có thể là trước đây bạn đã lưu một số đầu ra dưới dạng root /home/user/errors.txtvà tệp đó hiện tồn tại và thuộc về root. Xóa tệp (bạn có thể làm điều đó miễn là bạn có quyền ghi /home/user, và sau đó bạn sẽ có thể tạo tệp đó với tư cách là người dùng của mình.

rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt

Nếu tập tin thực sự không tồn tại, thì bạn không có quyền ghi trong thư mục chính của bạn. Mặc dù về mặt kỹ thuật có thể, và thực sự đôi khi hữu ích cho một số người dùng bị hạn chế, điều đó rất bất thường.


Tôi đã thử xóa '/home/user/errors.txt' và sử dụng lệnh trên của bạn. Nó không hoạt động, vẫn cấm tôi viết vào thư mục nhà. Dù sao, tôi đoán liên kết bạn cung cấp có thể sử dụng như là giải pháp của tôi. Nó giống như câu trả lời đầu tiên trong bài viết này. Tuy nhiên, bạn đã đưa ra một số lời giải thích chi tiết về thiết bị xuất chuẩn chuyển hướng đến một tệp và tôi cảm ơn bạn vì điều đó.
Xianlin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.