Terminal so với Command Line so với Shell so với Console: Chúng có thực sự khác biệt không?

Bạn đã bao giờ gọi “terminal” là “shell” hay “dòng lệnh” chưa? Mặc dù bạn không sai khi gọi như vậy, nhưng có những khác biệt rõ rệt giữa các thuật ngữ này. Tôi sẽ phân tích những khác biệt đó và nguồn gốc của các thuật ngữ này; bạn có thể trả lời đúng bao nhiêu câu?

Terminal là gì?
Từ “terminal” là viết tắt của “terminal emulator”, một chương trình mô phỏng hoạt động của các thiết bị đầu cuối máy tính vật lý kiểu cũ. Vào những ngày đầu của máy tính, người dùng tương tác với máy tính từ xa thông qua các thiết bị đầu cuối phần cứng chuyên dụng thông qua một liên kết truyền thông. Các thiết bị đầu cuối này có bàn phím và màn hình, hoặc trong một số trường hợp, có cả máy in. Người dùng sử dụng terminal để gửi lệnh và xem văn bản đầu ra.

Video trước cho thấy một thiết bị đầu cuối máy tính DEC VT100 được kết nối với một máy tính lớn đã được phục hồi.

Khi máy tính cá nhân trở nên phổ biến hơn, các hệ điều hành bắt đầu mô phỏng các thiết bị đầu cuối phần cứng trong phần mềm. Điều này cho phép người dùng tương tác với các hệ thống từ xa mà không cần phần cứng thiết bị đầu cuối vật lý. Ngày nay, di sản của các thiết bị đầu cuối vật lý vẫn tiếp tục thông qua các trình giả lập thiết bị đầu cuối, mà chúng ta sử dụng theo cách rất tương tự.

Trình giả lập thiết bị đầu cuối cho phép bạn gửi lệnh và nhận đầu ra văn bản đến và đi từ máy tính; cửa sổ thiết bị đầu cuối là vùng chứa đồ họa bao quanh nó. Vì vậy, về mặt kỹ thuật, định nghĩa phổ biến và hiện đại của từ “thiết bị đầu cuối” trên Linux không đề cập đến bản thân cửa sổ mà là một thiết bị mô phỏng để gửi lệnh và nhận văn bản.

Nếu bạn quan tâm, chúng tôi có hai bài viết về lịch sử của thiết bị đầu cuối. Bài thứ nhất đề cập đến ba kỷ nguyên của thiết bị đầu cuối Unix, và bài thứ hai đề cập đến quá trình phát triển từ máy in đến thiết bị đầu cuối video.

Shell là gì?
Shell là lớp ngoài cùng của một hệ thống, giúp người dùng tương tác dễ dàng hơn. Trong một hệ điều hành, shell có thể ở dạng giao diện dòng lệnh hoặc giao diện người dùng đồ họa (GUI). Nó thường hoạt động như một chương trình không gian người dùng giao tiếp với hệ thống thông qua các kênh không gian người dùng tiêu chuẩn, thay vì tương tác trực tiếp với nhân hệ thống.

Trong ngôn ngữ Linux thông dụng, shell thường có nghĩa là trình thông dịch dòng lệnh, tiếp nhận các lệnh và tập lệnh để thực hiện các tác vụ trên hệ điều hành. Nó là một chương trình đọc, hiểu và thực thi các lệnh. Ví dụ về các shell điển hình trên Linux là Bash, Zsh và fish. Mỗi shell có cách xử lý lệnh và thực thi tập lệnh riêng.

Bạn cũng có thể đã nghe nói về Gnome shell; đây là một ví dụ về shell đồ họa, và người dùng giao tiếp với nó để điều khiển hệ thống—ví dụ: tạo và xóa tệp, v.v. Một shell đồ họa trên Linux sẽ giao tiếp với hệ thống cửa sổ và có dạng menu, cửa sổ và các chức năng khác trên màn hình nền.

Dòng lệnh là gì?
Dòng lệnh (CLI hoặc giao diện dòng lệnh) đơn giản là nơi nhập lệnh vào hệ thống, thường thông qua shell lệnh. Đây là một thuật ngữ phổ biến, và dòng lệnh có thể tồn tại như một phần của hệ điều hành hoặc thậm chí là một chương trình. Mọi người thường nhầm lẫn thuật ngữ này với các thuật ngữ khác có liên quan chặt chẽ—như terminal hoặc shell—nhưng nó có một ý nghĩa riêng biệt. Sự khác biệt đó sẽ không khiến bạn lo lắng mất ngủ, nhưng nó thực sự tồn tại.

Hai ví dụ phổ biến về dòng lệnh là các dòng văn bản mà bạn nhập vào Bash hoặc Zsh.

Một ví dụ khác về dòng lệnh là Emacs, cho phép bạn nhập lệnh ngay lập tức bằng Elisp.

Console là gì?
Console Linux là một hệ thống con nhập/xuất đi kèm với nhân Linux. Nó nhận các thông báo và cho phép tương tác với nhân.

Sự khác biệt giữa console Linux và trình giả lập thiết bị đầu cuối là trình điều khiển console Linux chạy trong không gian nhân, hiển thị các thông báo hệ thống và cho phép tương tác trực tiếp với hệ thống Linux. Mặt khác, trình giả lập thiết bị đầu cuối chỉ là các chương trình để gửi lệnh và nhận phản hồi, chạy hoàn toàn trong không gian người dùng. Console Linux cũng có ít tính năng hiện đại hơn nhiều so với trình giả lập thiết bị đầu cuối.

Console Linux quản lý các terminal ảo được gọi là TTY (hay còn gọi là console ảo). Bạn có thể tương tác với console Linux thông qua các TTY này, nằm tại /dev/tty, trong đó “” là một số. Tương tự, trình giả lập thiết bị đầu cuối giao tiếp với các terminal giả nằm trong thư mục /dev/pts/ (ví dụ: /dev/pts/0, /dev/pts/1, v.v.).

TTY là viết tắt của teletypewriter (máy điện báo). Trước đây, đây là những thiết bị cơ điện, tương tự như máy đánh chữ, có thể gửi và nhận tin nhắn điện tử qua đường truyền thông tin (như điện thoại, điện báo hoặc đường truyền nối tiếp). Những thiết bị này có nguồn gốc từ thời đại điện báo (một phiên bản nâng cấp của mã Morse). Các hệ thống Linux hiện đại mô phỏng chúng.

Các video trước cho thấy một máy điện báo được kết nối với máy chủ Linux qua đường truyền nối tiếp. Người dùng đang ra lệnh và nhận đầu ra từ bảng điều khiển Linux thông qua các nút thiết bị TTY nối tiếp (ví dụ: /dev/ttyS0).

Thông qua một cơ chế nào đó, cả bảng điều khiển ảo và trình giả lập thiết bị đầu cuối đều chạy một shell, thường là Bash. Các shell có thể khiến chúng trông giống nhau, nhưng ngữ cảnh hoạt động của chúng lại rất khác nhau.

Bạn có thể truy cập TTY bằng tổ hợp phím Ctrl+Alt+F, trong đó “” là một số (1-7). Các bản phân phối Linux thường cấu hình TTY1 để khởi chạy trình quản lý hiển thị (màn hình đăng nhập), sau đó sẽ khởi chạy shell đồ họa của bạn (tức là môi trường máy tính để bàn). Các số từ 2-7 thường có sẵn để sử dụng, nhưng việc chuyển về TTY1 sẽ đưa bạn trở lại màn hình nền.

Sử dụng lệnh sau để xem phiên đăng nhập của bạn được kết nối với bảng điều khiển ảo nào.

loginctl session-status

Phiên làm việc hiện tại của tôi được kết nối với vc1 (hay còn gọi là bảng điều khiển ảo 1 hoặc TTY1) như được hiển thị trong hình ảnh trước.

Nói tóm lại, bảng điều khiển Linux là một hệ thống con đầu vào/đầu ra ở cấp độ nhân hệ thống, có thể được điều khiển thông qua bảng điều khiển ảo. Các thiết bị TTY này có nguồn gốc lịch sử và mô phỏng các thiết bị máy đánh chữ điện báo. Vẫn có thể gửi và nhận lệnh đến nhân hệ thống Linux thông qua các thiết bị máy đánh chữ điện báo.

Mọi người thường nhầm lẫn các thuật ngữ này, nhưng chúng có sự phân biệt kỹ thuật rõ ràng. Ví dụ, CLI có thể đúng nghĩa là thiết bị đầu cuối hoặc bảng điều khiển. Shell có thể có nghĩa là bất kỳ thuật ngữ nào trong số này. Thông thường, mọi người sẽ nói “mở shell”, nhưng ý họ thực sự là mở một thiết bị đầu cuối. Tuy nhiên, bạn cũng có thể thực hiện tác vụ được chỉ định thông qua bảng điều khiển ảo.

Cụm từ chính xác nên sử dụng là “cửa sổ thiết bị đầu cuối” đối với hầu hết người dùng. Bạn mở một cửa sổ đồ họa và thực thi các lệnh. Cụm từ “CLI” cũng hợp lệ vì nó có thể có nghĩa là bất kỳ giao diện lệnh nào (bao gồm cả bộ đệm nhỏ Emacs). Tuy nhiên, nếu ai đó yêu cầu bạn mở một bảng điều khiển, đó là một yêu cầu rất cụ thể, vì vậy bạn nên chú ý đến lý do.

Giờ đây, khi đã biết sự khác biệt giữa các thuật ngữ khác nhau, bạn có thể quan tâm đến việc học Linux terminal khi mới bắt đầu.