Cách Linux sử dụng / dev / tty và / dev / tty0


8

Tôi có thể thấy sự khác biệt giữa / dev / tty và / dev / tty0 bằng cách thử nghiệm phương thức được cung cấp từ câu hỏi này . Nhưng tôi thực sự tự hỏi về việc sử dụng thực tế của các thiết bị đó (như các tình huống chúng sẽ được sử dụng).


@ 0xC0000022L Bằng cách nào đó, tôi không thể liên hệ tty với sda vì không giống như sda, tty có 3 loại khác nhau (tty, tty0, tty [1, .., N]).
Ron Vince

Tôi nghĩ rằng sự tương tự được cung cấp bởi @ 0xC0000022L là khá sai lệch. Cả hai /dev/sda/dev/sda1chỉ định các thiết bị khối cụ thể (một thiết bị là một phần của thiết bị còn lại). /dev/ttymặt khác, là một thiết bị ảo liên quan đến không có tty cụ thể nào khác.
Celada

Câu trả lời:


16

/dev/ttylà tty kiểm soát của quy trình hiện tại , cho bất kỳ quy trình nào thực sự mở tệp đặc biệt này. Nó không nhất thiết là một thiết bị điều khiển ảo ( /dev/ttyn ) và có thể là một, một cổng nối tiếp, v.v. Nếu tty điều khiển không phải là bàn điều khiển ảo, thì quá trình không phải tương tác với các thiết bị bàn điều khiển ngay cả khi giả hành của nó thực sự được thực hiện trên bảng điều khiển hệ thống. Ví dụ. đối với hệ vỏ trong trình giả lập thiết bị đầu cuối trong máy chủ X chạy cục bộ, các chương trình cho biết tạo thành chuỗi tương tác như:

   Unix shell
     ⇕ /dev/pts/2(≡ /dev/ttycho các quá trình của nó)
 kernel pty lái xe
     ⇕ /dev/ptmx
 terminal emulator
     ⇕ X Window giao thức
   X server
     ⇕ /dev/tty7(≡ /dev/ttycho máy chủ)
 hệ thống giao diện điều khiển
zxc↿⇂ [_̈░░]
    người dùng

Sử dụng /dev/ttybởi các chương trình người dùng bao gồm:

  • Viết một cái gì đó đến thiết bị đầu cuối kiểm soát, bỏ qua tất cả các chuyển hướng và đường ống;
  • Tạo một ioctl () - xem tty_ioctl (4);
  • Ví dụ: tách khỏi thiết bị đầu cuối (TIOCNOTTY).

/dev/tty0bảng điều khiển ảo hiện đang hoạt động (tức là hiển thị trên màn hình) của hệ điều hành . Phần mềm đặc biệt này không được sử dụng đáng kể bởi phần mềm hệ thống, nhưng /dev/consolehầu như là một bí danh của Googletty0/dev/consoleđược sử dụng nhiều bởi các trình nền syslog và đôi khi, bởi chính hạt nhân.

Thử nghiệm để cho thấy sự khác biệt: chạy rootshell trên tty3( Ctrl+ Alt+ F3) hoặc trong trình giả lập thiết bị đầu cuối. Hiện nay

# sleep 2; echo test >/dev/tty

sau đó nhanh chóng Ctrl+ Alt+ F2, đợi trong hai giây và Ctrl+ Alt+ bất cứ điều gì trở lại. Bạn thấy đầu ra ở đâu?
Và bây giờ thử nghiệm tương tự cho /dev/tty0.


Câu trả lời của bạn không có gì khác biệt với câu trả lời được cung cấp bởi câu hỏi mà tôi đã liên kết trong câu hỏi của mình. Điều tôi quan tâm là quá trình nhân sử dụng chúng cùng nhau như thế nào.
Ron Vince

@Ron Vince: đã cập nhật.
Incni Mrsi

Có bắt buộc cho một quá trình ghi vào / dev / tty thay vì cụ thể / dev / tty của họ [1, .., N] không?
Ron Vince

@Ron Vince: Một lần nữa, một quy trình được thực hiện trong phiên SSH (về mặt kỹ thuật, là con của sshd) hoặc trong một xtermcửa sổ, không có / dev / tty n cụ thể  . Nó không tương tác với các thiết bị của bảng điều khiển hệ thống , vì nó được gắn vào thiết bị đầu cuối giả. Điều này không loại trừ nó khỏi việc mở / dev / tty  n nếu đó là một quá trình root hoặc cùng một người dùng đã đăng nhập vào tty  n . Giới thiệu về việc thêm một số điểm về câu hỏi cụ thể của Tty vào câu trả lời.
Incni Mrsi

Giả sử tôi sử dụng xterm, một trình giả lập đầu cuối. Đây có phải là chuỗi (xterm -> / dev / tty -> / dev / pty -> / dev / tty [1, .., N] -> shell)? Đối với / dev / tty0, tôi nghĩ rằng tôi rõ ràng về nó. Đầu ra từ bất kỳ tiến trình và kernel nào sẽ được gửi đến / dev / tty [1, .., N] mà trình điều khiển thiết bị tty xử lý ngay bây giờ. Đây là chuỗi (kernel / process -> / dev / tty0 -> current / dev / tty [1, .., N])
Ron Vince

2

/ dev / tty là tty kiểm soát cho bất kỳ quy trình nào. Đây có thể là vỏ của bạn.

Nếu quy trình của bạn không có tty kiểm soát, / dev / tty không có sẵn, ví dụ này đúng với daemon.

Nếu quy trình của bạn có tty kiểm soát, thì / dev / tty là bí danh trình điều khiển cho trình điều khiển tty thực mà quy trình của bạn đang sử dụng cho stdin, stdout hoặc stderr.

Xem man -s7d ttyđể biết thêm thông tin. Lưu ý rằng phần hướng dẫn sử dụng này có thể khác nhau giữa các hệ điều hành khác nhau và không nên nhầm lẫn với trang man trong phần 1. Vì vậy, hãy kiểm tra, ví dụ man -k tty.


"Bí danh cho trình điều khiển tty thực mà quá trình của bạn đang sử dụng". Là văn bản trích dẫn đề cập đến tty [1, .., N]?
Ron Vince

Bí danh tài xế là một cái gì đó khác với chỉ bí danh. Nó là một trình điều khiển khác nhau nhưng nó hướng công việc đến bất cứ quy trình nào của bạn thực sự được kết nối.
schily

Nếu tôi hiểu chính xác (cũng tham khảo tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3 ), / dev / tty là giao diện cho quy trình hiện tại (hiện đang được CPU xử lý) thành / dev / tty [1, .., N]. Trong khi đó, / dev / tty0 là để xuất dữ liệu không thuộc về cụ thể / dev / tty [1, .., N], do đó xuất ra / dev / tty [1, .., N] thuộc về quy trình hiện tại . Nếu đó là chính xác, tôi tự hỏi khi nào / dev / tty0 sẽ thực sự được sử dụng.
Ron Vince

Nếu bạn không có nhà riêng, một lối vào thay thế có thể vào ngôi nhà đó sẽ không cung cấp cho bạn một ngôi nhà.
schily

Vì vậy, / dev / tty0 là xuất dữ liệu sang phiên shell hiện tại của siêu người dùng (được liên kết với / dev / tty [1, .., N]).
Ron Vince
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.