Minh họa lệnh rm trong Linux xóa tệp mà không có đầu ra hiển thị trên terminal.
Máy Tính

Phân Loại Các Kiểu Chương Trình Cơ Bản Trong Linux: Từ Daemon Đến TUI

Hệ điều hành Linux, thừa hưởng triết lý thiết kế mạnh mẽ và có nguyên tắc của Unix, nổi tiếng với cách các chương trình giao tiếp qua văn bản, khả năng kết hợp chúng qua các đường ống (pipelines), và mỗi chương trình thường chỉ làm tốt một việc duy nhất. Tuy nhiên, đằng sau sự đơn giản đó, các chương trình trong Linux lại có thể hoạt động rất khác nhau và thể hiện nhiều hành vi đa dạng. Việc hiểu rõ các kiểu chương trình Linux này không chỉ giúp bạn sử dụng hệ thống hiệu quả hơn mà còn củng cố kiến thức nền tảng về cách một hệ điều hành Linux vận hành. Từ các tiến trình chạy ngầm đến những công cụ giao diện dòng lệnh mạnh mẽ hay các ứng dụng tương tác đồ họa văn bản, mỗi loại đều đóng một vai trò quan trọng trong việc định hình trải nghiệm và khả năng của người dùng.

Tiến Trình Nền (Background Processes)

Trong một hệ điều hành đa nhiệm như Linux, rất nhiều chương trình chạy đồng thời. Những chương trình hoạt động mà không có sự kiểm soát trực tiếp từ người dùng được gọi là các tiến trình nền. Về cơ bản, chỉ có một loại tiến trình nền chính, thường được biết đến với cái tên “daemon”.

Daemon

Thuật ngữ “daemon” có vẻ lạ lẫm, nhưng nó chỉ đơn giản có nghĩa là “tiến trình chạy ngầm” hoặc “chương trình nền”. Một daemon thường sử dụng nhiều kỹ thuật để đảm bảo rằng nó luôn hoạt động, bất kể điều gì xảy ra trên hệ thống. Ví dụ, nó sẽ fork (tạo một bản sao) của chính nó để chạy độc lập với shell (môi trường dòng lệnh). Các dịch vụ như inetd hoặc launchd có thể thực hiện việc này thay mặt cho một chương trình, và bản thân chúng cũng là các daemon.

Các daemon thường kết thúc tên của chúng bằng chữ “d”, chẳng hạn như httpd (máy chủ web Apache), inetd (daemon dịch vụ internet), và systemd (hệ thống khởi tạo và quản lý dịch vụ). Nếu một chương trình bên ngoài—hoặc người dùng—cần giao tiếp với một daemon, nó thường thực hiện điều đó bằng cách gửi một tín hiệu (signal) để chỉ thị daemon khởi động lại hoặc tải lại cấu hình của nó. Bạn có thể sử dụng công cụ ps để khám phá những daemon nào đang chạy trên hệ thống của mình, đây là một cách quan trọng để quản lý tiến trình Linux.

Giao Diện Dòng Lệnh (Command Line Interface – CLI)

Hầu hết các ứng dụng Linux đều có giao diện dòng lệnh (CLI), có nghĩa là bạn sử dụng chúng bằng cách gõ các lệnh văn bản. Đây là những chương trình terminal phổ biến nhất và thường là dễ sử dụng nhất. Những chương trình này thường khởi động, chạy nhanh và sau đó dừng lại ngay khi chúng hoàn thành công việc.

Cantrip

Loại chương trình đơn giản nhất—được đặt tên không chính thức là “cantrip”—sẽ chỉ hoạt động mà không cần bất kỳ đầu vào hay đầu ra nào. Những chương trình này thường thao tác trên các tệp hoặc thực hiện các tác vụ quản trị hệ thống (sysadmin) liên quan. Lệnh rm, dùng để xóa một tệp, là một ví dụ điển hình:

rm myfile.txt

Nếu tệp tồn tại, rm sẽ xóa nó và terminal của bạn sẽ hiển thị dấu nhắc trên dòng tiếp theo, chờ đợi chương trình hoặc lệnh kế tiếp:

Minh họa lệnh rm trong Linux xóa tệp mà không có đầu ra hiển thị trên terminal.Minh họa lệnh rm trong Linux xóa tệp mà không có đầu ra hiển thị trên terminal.

Lệnh rm có một số tùy chọn để kiểm soát cách nó hoạt động, nhưng sự đơn giản của nó nằm ở việc thiếu cả đầu vào và đầu ra trực tiếp trong quá trình thực thi cơ bản.

Filter (Bộ Lọc)

Nhiều công cụ dòng lệnh Linux lại hoàn toàn ngược lại: chúng yêu cầu đầu vào và tạo ra đầu ra. Thường thì, những chương trình này sẽ sửa đổi đầu vào của chúng theo một cách nào đó, và có rất nhiều chương trình như vậy: cut, head, sort, uniq, v.v.

Lệnh grep thể hiện ý nghĩa của “bộ lọc” đặc biệt rõ ràng: nó quét từng dòng đầu vào, tái tạo nó làm đầu ra nếu nó thỏa mãn một điều kiện nhất định. Trong trường hợp của grep, điều kiện là một biểu thức chính quy (regular expression) khớp với một mẫu văn bản cụ thể:

Ví dụ sử dụng lệnh grep trong Linux để lọc kết quả đầu ra từ lệnh ls qua pipeline.Ví dụ sử dụng lệnh grep trong Linux để lọc kết quả đầu ra từ lệnh ls qua pipeline.

Các bộ lọc rất xuất sắc trong việc thao tác dữ liệu và thường được sử dụng trong các pipeline Linux nối chuỗi nhiều lệnh với nhau để thực hiện một tác vụ phức tạp. Bạn thậm chí có thể kết hợp các công cụ này để xây dựng một cơ sở dữ liệu thô sơ.

Sink (Bộ Tiếp Nhận)

Ngược lại với bộ lọc, có rất ít bộ tiếp nhận. Loại chương trình này nhận đầu vào nhưng không tạo ra đầu ra—ít nhất là không có đầu ra hiển thị trên màn hình terminal của bạn. Một ví dụ là lpr, trình in dòng, dùng để in một tệp hoặc đầu vào tiêu chuẩn ra giấy.

Các bộ tiếp nhận thường xuất ra các phương tiện khác ngoài màn hình, như chương trình espeak chuyển đổi văn bản thành giọng nói.

Source (Nguồn)

Đối lập với bộ tiếp nhận là “nguồn”, một chương trình tạo ra đầu ra mà không xử lý bất kỳ đầu vào nào. Các chương trình nguồn lấy dữ liệu của chúng từ nơi khác: môi trường hoặc một tệp được chỉ định làm đối số, chẳng hạn.

Lệnh ls sử dụng nhiều cách tiếp cận khác nhau để liệt kê các tệp, nhưng nó không bao giờ xử lý đầu vào tiêu chuẩn. Trong trường hợp đơn giản nhất, ls thậm chí không cần bất kỳ đối số nào:

ls

Theo mặc định, ls hoạt động trên thư mục hiện tại, in ra nội dung của nó. Bạn có thể hiển thị chi tiết của một thư mục, tệp, hoặc một tập hợp các tệp khác bằng cách truyền các đối số dòng lệnh:

ls /tmp
ls /etc/passwd
ls ~/.*

Compiler (Trình Biên Dịch)

Trình biên dịch là loại chương trình CLI phức tạp nhất, thường dành riêng cho lập trình. Một trình biên dịch sẽ chạy như bất kỳ chương trình nào khác, nhưng nó có thể mất nhiều thời gian hơn để hoàn thành vì công việc của nó khá phức tạp.

Tên của chúng thường kết thúc bằng chữ “c” cho “compiler”: cc, javac, hoặc rustc. Một trình biên dịch hơi giống một cantrip, nhưng nó luôn làm việc với các tệp, biến đổi một loại dữ liệu thành một loại khác.

Trình biên dịch C, cc, thể hiện hành vi điển hình của một trình biên dịch:

cc file1.c file2.c -o program

Lệnh này chạy trình biên dịch đối với hai tệp—file1.cfile2.c—tạo ra một tệp thứ ba có tên program. Ở đây, đối số “-o” viết tắt cho “output file” (tệp đầu ra).

Điều quan trọng cần lưu ý là một trình biên dịch có thể lấy thêm các tệp bổ sung làm nguồn, tùy thuộc vào tác vụ của nó hoặc ngôn ngữ lập trình cơ bản. Một chương trình C như file1.c có thể bao gồm một tệp tiêu đề (ví dụ: file1.h) mà trình biên dịch sẽ định vị và sử dụng để tạo ra chương trình cuối cùng, ngay cả khi nó không được đặt tên rõ ràng khi bạn chạy lệnh. Đây là một phần lý do khiến các trình biên dịch trở nên phức tạp: chúng có thể làm nhiều việc “đằng sau hậu trường” mà không cần được chỉ thị trực tiếp.

Chương Trình Tương Tác (Interactive Programs)

Các chương trình đã đề cập trước đó đều chạy không tương tác. Khi bạn chạy chúng, bạn không có quyền kiểm soát trực tiếp cách chúng hoạt động. Hai loại chương trình cuối cùng này rất khác biệt, chúng cho phép người dùng can thiệp trực tiếp vào quá trình thực thi.

Từng Dòng (Line-by-line)

Hình thức tương tác đơn giản nhất là từng dòng một. Vào buổi đầu của lịch sử Unix, những lệnh này khá phổ biến vì chúng chạy trên máy điện báo chữ in (teletypes): những chiếc máy đánh chữ được nâng cấp hoạt động từng dòng một.

Ngày nay, những chương trình này thực sự mang lại cảm giác “tương tác chỉ trên danh nghĩa”, nhưng vào những năm 1960, chúng khá mang tính cách mạng. Nếu bạn đủ dũng cảm, bạn có thể sống lại những ngày xưa cũ với trình soạn thảo văn bản gốc, ed:

Màn hình terminal hiển thị trình soạn thảo văn bản ed trong Linux với các lệnh tạo và lưu tệp.Màn hình terminal hiển thị trình soạn thảo văn bản ed trong Linux với các lệnh tạo và lưu tệp.

Đoạn hội thoại với ed này cho thấy các lệnh viết văn bản “hello world” vào một tệp có tên foo.txt. Một số dòng đó được người dùng gõ: “a” là lệnh để thêm văn bản vào bộ đệm, “,p” in bộ đệm hiện tại, và “w” ghi bộ đệm vào một tệp. Sau khi ghi, ed báo cáo số byte đã ghi, trong trường hợp này là 13.

Nếu bạn nhớ một điều về ed, đó nên là lệnh “q” dùng để thoát chương trình. Nó sẽ không lưu bất kỳ văn bản mới nào bạn đã nhập, nhưng nếu bạn vô tình chạy ed, gõ “q” theo sau là Enter sẽ cho phép bạn thoát khỏi nó nhanh nhất có thể!

Như bạn có thể thấy, việc chỉnh sửa văn bản từng dòng là một quá trình gian khổ và dễ mắc lỗi. Chương trình ed có thể hữu ích trong trường hợp khẩn cấp, nhưng các chương trình từng dòng nói chung đã lỗi thời.

TUI (Text-User Interface – Giao Diện Người Dùng Văn Bản)

Một lựa chọn thay thế tốt hơn nhiều cho các chương trình tương tác, đặc biệt là các trình soạn thảo văn bản, là kiểu TUI: giao diện người dùng văn bản. Tên này dùng để phân biệt các chương trình này với các ứng dụng GUI (Graphical User Interface), vốn sử dụng đồ họa để đạt được kết quả tương tự: một chương trình thực sự tương tác.

Trình soạn thảo văn bản vim, mặc dù vẫn dựa nhiều vào lệnh, nhưng bạn có thể sử dụng nó để di chuyển khắp một tệp văn bản, tìm kiếm văn bản, xóa toàn bộ các khối, và nhìn thấy mọi thứ xảy ra trên màn hình, theo thời gian thực. Các TUI hiện đại tận dụng rộng rãi màu sắc và các ký tự vẽ hộp để mô phỏng một giao diện đồ họa:

Giao diện người dùng văn bản (TUI) của ứng dụng Bagels hiển thị nhiều tính năng trong các khung cửa sổ khác nhau.Giao diện người dùng văn bản (TUI) của ứng dụng Bagels hiển thị nhiều tính năng trong các khung cửa sổ khác nhau.

Mặc dù bạn sẽ không phải lúc nào cũng thấy các tài liệu tham khảo về các loại chương trình này, nhưng việc biết chúng tồn tại và hiểu chúng làm gì là rất hữu ích. Mỗi loại đều có những điểm mạnh đặc biệt và có thể được sử dụng trong các ngữ cảnh nhất định để hoàn thành nhiều tác vụ khác nhau. Việc nắm vững các khái niệm chương trình Linux này sẽ giúp bạn trở thành một người dùng hoặc quản trị viên hệ thống thành thạo hơn.


Hiểu rõ các loại chương trình khác nhau trong Linux là một bước quan trọng để khai thác tối đa sức mạnh của hệ điều hành này. Từ những daemon thầm lặng chạy nền đến các công cụ dòng lệnh mạnh mẽ, và những giao diện tương tác trực quan như TUI, mỗi loại đều phục vụ một mục đích riêng và góp phần tạo nên sự linh hoạt và hiệu quả của Linux. Bằng cách nhận diện và biết cách sử dụng từng loại, bạn có thể tối ưu hóa quy trình làm việc, giải quyết vấn đề hiệu quả hơn và kiểm soát hệ thống của mình một cách chuyên nghiệp.

Bạn có câu hỏi nào về các kiểu chương trình trong Linux hay muốn khám phá sâu hơn về một loại cụ thể không? Hãy chia sẻ suy nghĩ của bạn trong phần bình luận bên dưới và đừng ngần ngại tìm hiểu thêm các bài viết chuyên sâu khác về Linux trên Thời Báo Công Nghệ để củng cố kiến thức công nghệ của mình!

Related posts

7 Mẫu Mac Cũ Bạn Tuyệt Đối Nên Tránh Xa Khi Mua Lại

Administrator

Mở Khóa Tiềm Năng Excel: Phím F1 Và 5 Tổ Hợp Phím Đỉnh Cao

Administrator

Những “Kỷ Vật” Công Nghệ Đã Lùi Sâu Vào Quên Lãng Nhưng Vẫn Đáng Được Tôn Vinh

Administrator