`/ Dev / console` được dùng để làm gì?


13

Từ câu trả lời này cho Linux: Sự khác biệt giữa / dev / console, / dev / tty và / dev / tty0

Từ tài liệu :

/dev/tty      Current TTY device
/dev/console  System console
/dev/tty0     Current virtual console

Ngày xưa /dev/consolelà bảng điều khiển System Administrator. Và TTY là thiết bị nối tiếp của người dùng được gắn vào máy chủ. Bây giờ /dev/console/dev/tty0đại diện cho hiển thị hiện tại và thường là như nhau. Bạn có thể ghi đè nó chẳng hạn bằng cách thêm console=ttyS0vào grub.conf. Sau đó, bạn /dev/tty0là một màn hình và /dev/console/dev/ttyS0.

Theo " Bảng điều khiển hệ thống ", /dev/consolecó vẻ như tệp thiết bị của thiết bị đầu cuối vật lý văn bản, giống như /dev/tty{1..63}các tệp thiết bị cho bảng điều khiển ảo.

Bởi " /dev/console/dev/tty0đại diện cho màn hình hiện tại và thường giống nhau", /dev/consoledường như nó cũng có thể là tệp thiết bị của bảng điều khiển ảo. /dev/consolecó vẻ giống như thích /dev/tty0hơn /dev/tty{1..63}( /dev/tty0là bảng điều khiển ảo hiện đang hoạt động và có thể là bất kỳ /dev/tty{1..63}).

/dev/consolegì Cái này được dùng để làm gì?

/dev/consoleđóng vai trò tương tự cho nhân Linux như /dev/ttyđối với một quy trình không? ( /dev/ttyLà thiết bị đầu cuối kiểm soát của phiên quá trình quá trình này, và có thể là một điểm, /dev/ttynnơi nlà 1-63, hoặc nhiều hơn?)

Các trả lời khác đề cập:

Tài liệu kernel chỉ định /dev/consolelà một thiết bị ký tự được đánh số 5: 1. Mở thiết bị nhân vật này sẽ mở giao diện điều khiển "chính", đây là tty cuối cùng trong danh sách bảng điều khiển.

"Danh sách bảng điều khiển" có nghĩa là tất cả các console=trong tùy chọn khởi động không?

Bởi " /dev/consolenhư một thiết bị ký tự được đánh số 5: 1", điều đó có nghĩa đó /dev/consolelà tệp thiết bị của thiết bị đầu cuối văn bản vật lý, tức là bảng điều khiển hệ thống? (Nhưng một lần nữa, câu trả lời đầu tiên tôi trích dẫn ở trên /dev/consolecó thể giống như /dev/tty0đó không phải là một thiết bị đầu cuối văn bản vật lý, mà là một giao diện điều khiển ảo)

Cảm ơn.


Tôi đã tạo một số thay thế cho các trang thủ công đã bị mất nhiều năm trước: jdebp.eu./Proposals/linux-kvt-manual-pages.html
JdeBP

Câu trả lời:


18

/dev/consoletồn tại chủ yếu để đưa giao diện điều khiển của kernel vào không gian người dùng. Tài liệu của nhân Linux trên các thiết bị hiện nói

Thiết bị bảng điều khiển /dev/console, là thiết bị mà các thông báo hệ thống sẽ được gửi và thông tin đăng nhập nào sẽ được cho phép trong chế độ một người dùng. Bắt đầu với Linux 2.1.71, /dev/consoleđược quản lý bởi kernel; đối với các phiên bản trước, nó phải là một liên kết tượng trưng cho một trong hai /dev/tty0bàn điều khiển ảo cụ thể /dev/tty1, hoặc đến một thiết bị chính ( tty*không phải cu*) cổng nối tiếp , tùy thuộc vào cấu hình của hệ thống.

/dev/console, nút thiết bị với chính 5 và phụ 1, cung cấp quyền truy cập vào bất cứ thứ gì mà kernel coi là phương tiện chính để tương tác với quản trị viên hệ thống; đây có thể là bàn điều khiển vật lý được kết nối với hệ thống (với sự trừu tượng của bàn điều khiển ảo ở trên cùng, vì vậy nó có thể sử dụng tty0hoặc bất kỳ ttyNnơi nào có N trong khoảng từ 1 đến 63), hoặc bàn điều khiển nối tiếp, hoặc bàn điều khiển hypanneror, hoặc thậm chí là thiết bị chữ nổi. Lưu ý rằng bản thân kernel không sử dụng /dev/console: các nút thiết bị dành cho không gian người dùng, không dành cho kernel; tuy nhiên, nó kiểm tra xem có /dev/consoletồn tại và có thể sử dụng được không, và thiết initlập với đầu vào, đầu ra và lỗi tiêu chuẩn của nó /dev/console.

Như được mô tả ở đây, /dev/consolelà một thiết bị ký tự có một chính và phụ cố định vì nó là một thiết bị riêng biệt (như trong, một phương tiện truy cập kernel; không phải là thiết bị vật lý), không tương đương với /dev/tty0bất kỳ thiết bị nào khác. Điều này hơi giống với tình huống/dev/tty là thiết bị của chính nó (5: 0) vì nó cung cấp các tính năng hơi khác so với các thiết bị đầu cuối hoặc bảng điều khiển ảo khác.

Danh sách các bảng điều khiển của người dùng thực sự là danh sách các bảng điều khiển được xác định bởi các console=tham số khởi động (hoặc bảng điều khiển mặc định, nếu không có bảng điều khiển). Bạn có thể thấy các bảng điều khiển được xác định theo cách này bằng cách nhìn vào /proc/consoles. /dev/consolethực sự cung cấp quyền truy cập vào cuối cùng trong số này :

Bạn có thể chỉ định nhiều tùy chọn console = trên dòng lệnh kernel. Đầu ra sẽ xuất hiện trên tất cả chúng. Thiết bị cuối cùng sẽ được sử dụng khi bạn mở /dev/console.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
terdon

6

"Cái gì /dev/console?" được trả lời trong câu trả lời trước . Có lẽ câu trả lời đó rõ ràng hơn khi bạn biết câu trả lời cho hai câu hỏi còn lại.

Q1. "Tập tin thiết bị đại diện cho thiết bị đầu cuối vật lý là gì?"

Không có tập tin thiết bị như vậy.

Quý 2 " /dev/consoleDùng để làm gì?"

Trên Linux, /dev/consoleđược sử dụng để hiển thị các thông báo trong khi khởi động (và tắt máy). Nó cũng được sử dụng cho "chế độ người dùng đơn", như được chỉ ra trong câu trả lời của Stephen Kitt. Không có nhiều ý nghĩa khác để sử dụng nó cho.

"Ngày xưa" của Unix, /dev/consolelà một thiết bị vật lý chuyên dụng. Nhưng đây không phải là trường hợp trong Linux.

Bằng chứng liên quan

1. "Tệp thiết bị đại diện cho thiết bị đầu cuối vật lý là gì?"

Hãy để tôi cố gắng hiểu theo cách này. /dev/tty{1..63}/dev/pts/nlà các tệp thiết bị đại diện cho chính các thiết bị (mặc dù chúng là mô phỏng), không liên quan đến quá trình hoặc kernel. /dev/tty0nhắc lại cái /dev/tty{1..63}mà hiện đang được sử dụng bởi một cái gì đó (có thể là kernelhoặc quá trình vỏ?). /dev/ttyđại diện cho thiết bị đầu cuối kiểm soát hiện đang được sử dụng bởi một phiên quy trình. /dev/consoleđại diện cho thiết bị đầu cuối hiện đang được sử dụng bởi kernel?

Tệp thiết bị đại diện cho thiết bị đầu cuối vật lý, không liên quan đến kernel hoặc quá trình là gì?

Các thiết bị cơ bản (s) cho /dev/tty{1..63}struct con_driver. Để xem tất cả các trình điều khiển có thể, hãy xem https://elixir.bootlin.com/linux/v4.19/ident/do_take_over_console

Không có tệp thiết bị cho (các) thiết bị cơ bản này!


Chỉ có một giao diện không gian người dùng tối thiểu để quản lý chúng.

$ head /sys/class/vtconsole/*/name
==> /sys/class/vtconsole/vtcon0/name <==
(S) dummy device

==> /sys/class/vtconsole/vtcon1/name <==
(M) frame buffer device

Nếu bạn thực sự muốn biết thêm, các (M)đại diện cho mô-đun . Tức là thiết bị bảng điều khiển giả không được cung cấp bởi mô-đun hạt nhân có thể tải; nó là một phần của hình ảnh hạt nhân ban đầu (còn gọi là "dựng sẵn").

Thứ hai, bindtệp trong mỗi thư mục con /sys/class/vtconsolexuất hiện để cho bạn biết thiết bị vtconsole nào đang hoạt động. Nếu tôi viết 0cho một hoạt động, nó xuất hiện để chuyển sang một hình nộm. (GUI VT có vẻ không bị ảnh hưởng, nhưng VT văn bản ngừng hoạt động). Viết 1cho người giả không kích hoạt nó. Hoặc là phương pháp hoạt động để chuyển trở lại thực tế. Nếu tôi đọc mã chính xác, mẹo là echo 1 > bindchỉ được cho là hoạt động đối với trình điều khiển bàn điều khiển được xây dựng dưới dạng mô-đun (?!).

Đối với các bảng điều khiển bộ đệm khung cụ thể, có một số thông tin khác về việc liên kết các thiết bị bộ đệm khung khác nhau ( /dev/fb0...) với các bảng điều khiển ảo cụ thể trong https://kernel.org/doc/Documentation/fb/fbcon.txt . Điều này liên quan đến một tùy chọn kernel fbcon:map=hoặc một lệnh được gọi con2fbmap.

Tất nhiên các chi tiết có thể thay đổi với các phiên bản kernel, kiến ​​trúc, phần cứng, thiết bị, trình điều khiển khác nhau, v.v. Tôi chưa bao giờ thực sự phải sử dụng bất kỳ giao diện nào ở trên. Hạt nhân chỉ cho phép i915/ inteldrmfb/ bất cứ điều gì bạn muốn gọi nó khi nó tải, thay vào đó, ví dụ vgacon.

Có vẻ như máy EFI của tôi không bao giờ có vgacon. Vì vậy, trước tiên, nó sử dụng một giao diện điều khiển giả, và thứ hai sau 1,2 giây nó chuyển sang fbcon, chạy trên đầu trang efifb. Nhưng cho đến nay tôi vẫn chưa quan tâm chi tiết là gì; nó chỉ hoạt động.

$ dmesg | grep -C2 [Cc]onsole
[    0.230822] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.233164] NR_IRQS: 65792, nr_irqs: 728, preallocated irqs: 16
[    0.233346] Console: colour dummy device 80x25
[    0.233571] console [tty0] enabled
[    0.233585] ACPI: Core revision 20180810
[    0.233838] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 133484882848 ns
--
[    1.228393] efifb: scrolling: redraw
[    1.228396] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    1.230393] Console: switching to colour frame buffer device 170x48
[    1.232090] fb0: EFI VGA frame buffer device
[    1.232110] intel_idle: MWAIT substates: 0x11142120
--
[    3.595838] checking generic (e0000000 408000) vs hw (e0000000 10000000)
[    3.595839] fb: switching to inteldrmfb from EFI VGA
[    3.596577] Console: switching to colour dummy device 80x25
[    3.596681] [drm] Replacing VGA console driver
[    3.597159] [drm] ACPI BIOS requests an excessive sleep of 20000 ms, using 1500 ms instead
[    3.599830] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
--
[    3.657050] e1000e 0000:00:19.0 eth0: MAC: 11, PHY: 12, PBA No: FFFFFF-0FF
[    3.657869] e1000e 0000:00:19.0 eno1: renamed from eth0
[    4.711453] Console: switching to colour frame buffer device 170x48
[    4.734356] i915 0000:00:02.0: fb0: inteldrmfb frame buffer device
[    4.778813] Loading iSCSI transport class v2.0-870.

2. " /dev/consoleDùng để làm gì?"

Bạn có thể sử dụng / dev / console làm thiết bị TTY. Viết cho nó, ví dụ, sẽ viết cho một thiết bị cơ bản cụ thể, cũng sẽ có một số thiết bị ký tự của riêng nó.

Thường thì / dev / console được gắn với / dev / tty0, nhưng đôi khi nó có thể được gắn với một thiết bị khác.

Vì vậy, trong trường hợp này, ghi vào / dev / console sẽ ghi vào / dev / tty0. Và lần lượt, ghi vào / dev / tty0 tương đương với việc ghi vào thiết bị nào / dev / ttyN hiện đang hoạt động.

Nhưng điều này đặt ra một câu hỏi thú vị. Truy cập tty0sẽ truy cập các bảng điều khiển ảo khác nhau, tùy thuộc vào hiện đang hoạt động. Mọi người thực sự sử dụng tty0để làm gì, và tương tự như những gì được consolesử dụng cho Linux?

  1. Về mặt kỹ thuật, bạn có thể đọc và viết từ console/ tty0, ví dụ như chạy một gettyđể cho phép đăng nhập tty0. Nhưng điều này chỉ hữu ích như một hack nhanh chóng. Bởi vì điều đó có nghĩa là bạn không thể tận dụng nhiều bảng điều khiển ảo của Linux.

  2. systemdtìm sysfskiếm một thuộc tính được liên kết với thiết bị / dev / console để phát hiện thiết bị TTY nằm bên dưới. Điều này cho phép systemdtự động sinh ra a gettyvà cho phép đăng nhập, ví dụ như bảng điều khiển nối tiếp, khi người dùng thiết lập bảng điều khiển hạt nhân bằng cách khởi động cùng console=ttyS0. Điều này là thuận tiện; nó tránh sự cần thiết phải cấu hình giao diện điều khiển này ở hai nơi khác nhau. Một lần nữa, xem man systemd-getty-generator. Tuy nhiên, systemdkhông thực sự mở /dev/consolecho điều này.

  3. Trong quá trình bootstrap hệ thống, bạn thậm chí có thể chưa cài đặt sysfs. Nhưng bạn muốn có thể hiển thị thông báo lỗi và tiến trình càng sớm càng tốt! Vì vậy, chúng tôi vòng quanh điểm 1). Nhân khởi động PID 1 với stdin / stdout / stderr được kết nối với /dev/console. Thật tuyệt khi có cơ chế đơn giản này được thiết lập ngay từ đầu.

  4. Bên trong một thùng chứa Linux, tệp tại /dev/consolecó thể được tạo như một thứ gì đó khác - không phải số thiết bị ký tự 5:1. Thay vào đó, nó có thể được tạo như một tệp thiết bị PTS. Sau đó, nó sẽ có ý nghĩa để đăng nhập thông qua /dev/consoletập tin này . systemdbên trong một container sẽ cho phép đăng nhập vào một thiết bị như vậy; thấy man systemd-getty-generator.

    Cơ chế này được sử dụng khi bạn chạy một container với systemd-nspawnlệnh. (Tôi chỉ nghĩ rằng khi bạn chạy systemd-nspawntrên TTY, mặc dù tôi không thể biết được việc tìm kiếm trang nam).

    systemd-nspawntạo bộ chứa /dev/consoledưới dạng gắn kết của thiết bị PTS từ máy chủ. Điều này có nghĩa là thiết bị PTS này không thể nhìn thấy bên /dev/pts/trong container.

    Các thiết bị PTS là cục bộ cho một devptsgắn kết cụ thể . Các thiết bị PTS là một ngoại lệ đối với quy tắc thông thường, rằng các thiết bị được xác định bằng số thiết bị của chúng. Các thiết bị PTS được xác định bằng cách kết hợp số thiết bị và giá devptsđỡ của chúng .

  5. Bạn có thể viết tin nhắn khẩn cấp tới console/ tty0, để viết lên bảng điều khiển ảo hiện tại của người dùng. Điều này có thể hữu ích cho các thông báo lỗi không gian người dùng khẩn cấp, tương tự như các thông báo kernel khẩn cấp được in ra bàn điều khiển (xem man dmesg). Tuy nhiên, điều này không phổ biến để làm điều này, ít nhất một khi hệ thống đã khởi động xong.

    rsyslog có một ví dụ trên trang này , nó in các thông điệp kernel đến /dev/console; Điều này là vô nghĩa trên Linux vì kernel sẽ làm như vậy theo mặc định. Một ví dụ mà tôi không thể tìm thấy một lần nữa nói rằng không nên sử dụng nó cho các tin nhắn không phải kernel vì có quá nhiều tin nhắn nhật ký hệ thống, bạn làm ngập bảng điều khiển của bạn và nó gây cản trở quá nhiều.

    systemd-journald tương tự có các tùy chọn để chuyển tiếp tất cả các bản ghi đến bàn điều khiển. Về nguyên tắc, điều này có thể hữu ích để gỡ lỗi trong môi trường ảo. Mặc dù, để gỡ lỗi, chúng tôi thường chuyển tiếp để /dev/kmsgthay thế. Điều này lưu chúng trong bộ đệm nhật ký kernel để bạn có thể đọc chúng với dmesg. Giống như các tin nhắn được tạo bởi chính kernel, các tin nhắn này có thể được lặp lại tới bàn điều khiển tùy thuộc vào cấu hình kernel hiện tại.


Là một bổ sung cho điểm 2, nó thường được sử dụng (không chỉ trên Linux) để chạy xconsoleđể theo dõi những gì đang diễn ra ;-). (Và để tránh có tin nhắn được viết trực tiếp cho bộ đệm khung, ví dụ như trên SPARCstations.)
Stephen Kitt

@StephenKitt khi tôi sử dụng SUSE Linux lần đầu tiên, tôi nghĩ rằng nó đã khởi động xconsole hoặc ste nó để bạn có thể khởi động nó từ menu chính của máy tính để bàn, hoặc một cái gì đó - Tôi không nhớ chính xác nhưng tôi đã thấy nó :-).
nguồn

Hãy để tôi cố gắng hiểu theo cách này. /dev/tty{1..63}/dev/pts/nlà các tệp thiết bị đại diện cho chính các thiết bị (mặc dù chúng là mô phỏng), không liên quan đến quá trình hoặc kernel. /dev/tty0lặp lại một trong /dev/tty{1..63}đó hiện đang được sử dụng bởi một cái gì đó (có thể là quá trình kernel hoặc shell?). /dev/ttyđại diện cho thiết bị đầu cuối kiểm soát hiện đang được sử dụng bởi một phiên quy trình. /dev/consoleđại diện cho thiết bị đầu cuối hiện đang được sử dụng bởi kernel? Tệp thiết bị đại diện cho thiết bị đầu cuối vật lý, không liên quan đến kernel hoặc quá trình là gì?
Tim

@Tim "/ dev / tty0 lặp lại một trong /dev/tty đũa1..63} hiện đang được sử dụng bởi một cái gì đó (có thể là quá trình kernel hoặc shell?)" - kernel.
sourcejedi

Tệp thiết bị đại diện cho thiết bị đầu cuối vật lý, không liên quan đến kernel hoặc quá trình là gì?
Tim
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.