Tại sao việc chuyển hướng 'tập lệnh' sang / dev / null / cho phép 'màn hình' hoạt động trong khi được chọn là người dùng khác?


37

Tôi đã được đưa vào một người dùng để chạy một kịch bản chạy dài cụ thể. Tôi muốn sử dụng màn hình nhưng tôi nhận được thông báo lỗi "Không thể mở thiết bị đầu cuối của bạn '/ dev / pts / 4' - vui lòng kiểm tra."

Vì vậy, tôi đã đi vòng quanh và bắt gặp một bài đăng trên diễn đàn hướng dẫn chạy $ script '/dev/null/'. Tôi đã làm như vậy và sau đó tôi có thể sàng lọc.

Tại sao điều này làm việc? Bạn đang làm gì mà màn hình đó không thể chạy với tư cách là người dùng đã bị kiện? Tại sao việc chuyển hướng lại 'tập lệnh' thành / dev / null lại bị ngăn cản như vậy? Có phải nó đang sử dụng script để viết một bản ghi như người dùng ban đầu đến một nơi nào đó?


2
Cleaner sẽ được chạy sutừ trong một phiên màn hình.
justarobert

@justarobert không nếu bạn muốn nhiều người dùng có thể đính kèm vào cùng một màn hình cho một tài khoản chạy dịch vụ / tập lệnh.
Ashley

Câu trả lời:


41

Vâng, về mặt kỹ thuật bạn không chuyển hướng bất cứ điều gì ở đây.

Gọi script /dev/nullchỉ làm cho scripttiết kiệm toàn bộ nguyên cảo vào /dev/nullmà trong thực tế có nghĩa là loại bỏ các nội dung.

Xem man scriptđể biết thông tin chi tiết và gói tiện ích linux-ng để thực hiện ( misc-utils/script.c).

Điều này không có gì để làm với screenthực sự. Tại sao công việc này được gọi scriptcó tác dụng phụ là tạo thiết bị đầu cuối giả cho bạn tại /dev/pts/X. Bằng cách này, bạn không phải tự làm điều đó và màn hình sẽ không có vấn đề về quyền - nếu bạn sutừ người dùng A đến người dùng B , bằng cách trực tiếp gọi screenbạn cố gắng giành quyền sở hữu thiết bị đầu cuối giả của người dùng A. Điều này sẽ không thành công trừ khi bạn root . Đó là lý do tại sao bạn thấy thông báo lỗi.


6

Để xuất trực tiếp ra cửa sổ thiết bị đầu cuối của bạn, chương trình đang chạy cần có khả năng ghi vào thiết bị đầu cuối kiểm soát của bạn. Nếu bạn đang sử dụng xterm hoặc ssh hoặc một số kết nối ảo khác (trái ngược với thiết bị đầu cuối được kết nối trực tiếp thực) thì thiết bị đầu cuối điều khiển của bạn là giả (pty).

Pty của bạn được thiết lập với quyền ghi chỉ cho bạn khi bạn đăng nhập, nếu không, những người dùng khác có thể viết nguệch ngoạc trên màn hình của bạn (hoặc đọc nó). Do đó, khi bạn kiện người dùng khác (và người dùng đó không phải là root), người dùng đó không có quyền truy cập vào pty cơ bản.

Tuy nhiên, I / O phức tạp hơn như màn hình yêu cầu truy cập trực tiếp vào pty để hoạt động, đó là phép thuật kiểm soát toàn bộ màn hình của bạn. Đó là khi bạn gặp vấn đề với người đang chạy lệnh không có quyền truy cập thích hợp vào thiết bị đầu cuối điều khiển.

Chuyển hướng tập lệnh sang / dev / null khiến màn hình không cố ghi vào thiết bị đầu cuối kiểm soát, vì vậy nó không gặp phải vấn đề về quyền.


2
Vì vậy, làm thế nào tôi có thể xem màn hình ghi gì nếu nó chuyển sang / dev / null? Tôi khá chắc chắn rằng tôi đã hiểu nhầm và nó không thực sự đi đến / dev / null, nhưng nó đi đâu?
dùng63623

"Nó", có nghĩa là đầu ra màn hình, không đi đến /dev/null. Đầu tiên: tập lệnh ghi lại phiên của bạn (xem trang chủ) và bạn hoàn toàn không cần nó: vì vậy , nó sẽ chuyển sang / dev / null. Nhưng nó không có tác dụng phụ: nó tạo ra một thiết bị đầu cuối giả, và bây giờ bạn đang sử dụng cái này, và màn hình có thể ghi vào anwer của oneSee @ karol-piczak này.
Nanne
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.