Skip to content

Tiện Ích Thủ Thuật

  • Sample Page

Tiện Ích Thủ Thuật

  • Home » 
  • Thủ Thuật Máy Tính » 
  • Cơ chế thực thi lệnh Linux: Từ Alias đến Chương trình nhị phân

Cơ chế thực thi lệnh Linux: Từ Alias đến Chương trình nhị phân

By Administrator Tháng 8 23, 2025 0
Cấu hình biến môi trường PATH trong Linux, hiển thị danh sách các thư mục mà shell sẽ tìm kiếm lệnh.
Table of Contents

Khi bạn nhập một lệnh vào terminal Linux, điều gì thực sự xảy ra? Hành động tưởng chừng đơn giản này lại ẩn chứa một quá trình phức tạp, tùy thuộc vào việc bạn đang chạy một chương trình thực thi, một shell script, một lệnh nội bộ của shell (builtin), một hàm do người dùng định nghĩa hay một bí danh (alias). Việc hiểu rõ cơ chế này không chỉ giúp bạn sử dụng Linux hiệu quả hơn mà còn cung cấp cái nhìn sâu sắc về cách hệ điều hành tương tác với các lệnh, từ đó tối ưu hóa quy trình làm việc và xử lý sự cố. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết về các loại lệnh khác nhau và cách Linux thực thi chúng, giúp độc giả của tienichthuthuat.com nắm vững những kiến thức nền tảng quan trọng này.

Các loại lệnh cơ bản trong Linux

Trong môi trường Linux, các lệnh mà chúng ta thường sử dụng có thể được phân loại thành năm dạng chính, mỗi loại có đặc điểm và cách thức hoạt động riêng biệt:

  • Chương trình (Program/Binary): Đây là các tệp nhị phân có thể thực thi được lưu trữ trên đĩa, thường ở các định dạng như ELF trên Linux hoặc Mach-O trên macOS. Chúng là các chương trình cấp thấp, thân thiện với máy, mà shell có thể chuyển cho kernel để chạy. Ví dụ điển hình là các lệnh như cat, grep, awk hoặc các ứng dụng lớn hơn như Apache.

  • Shell Script: Là một dạng chương trình cấp cao hơn, được viết bằng văn bản có thể đọc được bởi con người. Một shell script có thể chạy các lệnh khác và được viết bằng ngôn ngữ thông dịch như Perl, Python hoặc chính shell script (bash, sh, zsh). Chúng thường bắt đầu bằng dòng “shebang” để chỉ định trình thông dịch.

  • Builtin (Lệnh nội bộ Shell): Là các lệnh được tích hợp sẵn bên trong shell, luôn có sẵn và thường hoạt động ở cấp độ thấp để thực hiện các thao tác ảnh hưởng trực tiếp đến shell. Các lệnh cd, echo, kill là những ví dụ phổ biến của lệnh builtin. Chúng không tương ứng với một tệp cụ thể trên đĩa.

  • Shell Function (Hàm Shell): Tương tự như một shell script thu nhỏ, đóng gói một tập hợp các lệnh dưới một tên duy nhất. Các hàm shell thường được tải để luôn có sẵn khi cần thiết, giúp tái sử dụng mã lệnh và đơn giản hóa các tác vụ phức tạp.

  • Alias (Bí danh): Là một tên thay thế ngắn gọn cho bất kỳ loại lệnh nào kể trên. Bạn có thể tạo một alias cho một lệnh dài hoặc một chuỗi lệnh thường dùng để tiết kiệm thời gian và công sức khi thực hiện các tác vụ phổ biến.

Thứ tự mà một shell như Bash tìm kiếm các loại lệnh này là rất quan trọng. Nói một cách đơn giản, Bash sẽ ưu tiên theo thứ tự sau: alias, function, builtin, program/script.

1. Thực thi Chương trình nhị phân (Executable Program)

Loại lệnh quen thuộc nhất là tệp chương trình thực thi. Nhiều chương trình phổ biến là một phần của tiêu chuẩn POSIX, có nghĩa là chúng phải có sẵn trên hầu hết các hệ thống Unix hoặc tương tự Unix, bao gồm Linux và macOS. Các ví dụ về các lệnh như vậy bao gồm cat, diff và vi.

Các chương trình dòng lệnh khác – như Apache, Neofetch hoặc tree – có thể cần được cài đặt vì chúng thường không được bao gồm trong một bản phân phối mặc định. Tuy nhiên, giống như các chương trình lệnh POSIX, chúng sẽ chạy thông qua một tệp chương trình duy nhất ở đâu đó trên đĩa của bạn.

Có hai cách phổ biến để chạy một chương trình. Đầu tiên, bạn có thể gõ đường dẫn đến một tệp chương trình, ví dụ như ./myprog hoặc /usr/bin/awk. Nếu phần đầu tiên của lệnh của bạn chứa bất kỳ dấu gạch chéo về phía trước nào, shell sẽ cố gắng tìm một tệp tại đường dẫn tương ứng. Ví dụ, bạn có thể chạy một chương trình tại /bin/cat như sau:

/bin/cat myfile

Shell sẽ kiểm tra một chương trình thực thi tại /bin/cat, sau đó chạy nó nếu tệp tồn tại.

Trên Linux, các chương trình thực thi thường không có phần mở rộng tệp, vì vậy một lệnh như “grep” được chứa trong một tệp có tên grep. Đây chỉ là một quy ước, vì việc làm cho các tệp thực thi dễ nhận biết bằng tên tệp là tiện lợi. Tuy nhiên, nếu bạn thực sự muốn, bạn hoàn toàn có thể đặt tên cho các tệp thực thi của mình bất cứ điều gì bạn muốn, chẳng hạn như “myprog.exe” hoặc “myprog.RUNME.”

Trường hợp thứ hai xảy ra khi bạn gõ tên chương trình mà không có đường dẫn; ví dụ:

cat myfile

Với một hệ thống được thiết lập đúng cách, điều này sẽ có cùng hiệu ứng như trước, vì shell sẽ định vị cùng một chương trình cat. Nó thực hiện điều này bằng cách kiểm tra một biến môi trường đặc biệt có tên PATH, trông giống như sau:

Cấu hình biến môi trường PATH trong Linux, hiển thị danh sách các thư mục mà shell sẽ tìm kiếm lệnh.Cấu hình biến môi trường PATH trong Linux, hiển thị danh sách các thư mục mà shell sẽ tìm kiếm lệnh.

Đây là một danh sách các đường dẫn được phân tách bằng dấu hai chấm mà shell sẽ tìm kiếm để định vị một chương trình. Thứ tự là quan trọng vì bạn có thể có hai tệp có cùng tên ở các vị trí khác nhau. Ví dụ, nếu bạn có một tệp /usr/bin/grep và một tệp /bin/grep, PATH ở trên sẽ khiến shell chạy phiên bản /usr/bin. Hệ thống này cho phép bạn ghi đè một lệnh hệ thống bằng một lệnh tùy chỉnh phù hợp hơn với nhu cầu của bạn, điều này có thể rất hữu ích.

2. Chạy một Shell Script

Một shell script chạy hơi khác so với một chương trình thực thi và nó là một loại tệp rất khác. Một shell script đơn giản trông như thế này:

#!/bin/sh
echo Just a simple, pointless shell script

Dòng đầu tiên được gọi là “shebang” hoặc “hash-bang”, được đặt tên theo sự kết hợp của các ký tự # và !. Đây là một chỉ dẫn đặc biệt cho shell biết trình thông dịch nào sẽ sử dụng cho phần còn lại của script. Trong trường hợp trên, đó là chính shell, tại /bin/sh.

Phần còn lại của script là một chương trình văn bản mà trình thông dịch hiểu được. Trong trường hợp này, shell có thể chạy các lệnh như echo theo cách tương tự như khi bạn gõ chúng trên dòng lệnh.

Ngoài ra, một shell script rất giống với một chương trình thực thi, và shell của bạn sẽ tìm kiếm nó bằng cách sử dụng biến PATH theo cùng một cách. Đối với cả chương trình và shell script, điều quan trọng cần lưu ý là quyền trên tệp tương ứng sẽ ảnh hưởng đến cách bạn chạy nó. Với quyền thực thi được đặt, bạn có thể chạy chương trình bằng cách gõ tên hoặc đường dẫn của nó. Nhưng nếu quyền thực thi không được đặt, bạn sẽ thấy lỗi:

Lỗi "Permission denied" khi cố gắng chạy một file không có quyền thực thi trong terminal Linux.Lỗi "Permission denied" khi cố gắng chạy một file không có quyền thực thi trong terminal Linux.

Bạn luôn có thể chạy một tệp như vậy bằng cách truyền tên của nó làm đối số cho một trình thông dịch thích hợp. Ví dụ, bạn có thể chạy một shell script như sau:

sh myscript.sh

Bạn thậm chí có thể chạy một chương trình thực thi theo cách này, nhưng bạn sẽ cần thực hiện một số nghiên cứu trước. Lệnh file cung cấp thông tin về loại tệp, bao gồm trình thông dịch của nó:

Sử dụng lệnh "file" để kiểm tra loại file nhị phân và lệnh "ls" để xác nhận file không có quyền thực thi.Sử dụng lệnh "file" để kiểm tra loại file nhị phân và lệnh "ls" để xác nhận file không có quyền thực thi.

Trong trường hợp này, bạn có thể chạy tệp nhị phân pwd bằng chương trình /lib/ld-linux-aarch64.so.1:

Thực thi một chương trình nhị phân Linux thông qua trình tải động (dynamic loader) ngay cả khi không có quyền thực thi trực tiếp.Thực thi một chương trình nhị phân Linux thông qua trình tải động (dynamic loader) ngay cả khi không có quyền thực thi trực tiếp.

3. Thực hiện Lệnh Builtin của Shell

Một số lệnh rất cơ bản đối với bản chất của shell đến nỗi chúng cần hoạt động theo một cách hơi khác. Đây được gọi là các lệnh “builtin” (nội bộ) vì chúng, về cơ bản, là một phần của chính shell.

Các lệnh builtin thường là các lệnh cấp thấp và bạn sử dụng thường xuyên: cd, echo và kill là những ví dụ phổ biến. Không giống như các chương trình và shell script, các lệnh này không tương ứng với một tệp cụ thể vì chúng là một phần của chính shell, được biên dịch vào tệp thực thi của shell.

Một số hệ thống có thể bao gồm các tập lệnh bao bọc (wrapper scripts) để chạy các lệnh builtin. Ví dụ, trên hệ thống macOS của tôi, có một tập lệnh /usr/bin/cd sử dụng lệnh builtin để chạy lệnh nội bộ tương ứng. Điều này nhằm mục đích tương thích POSIX, và bạn có thể bỏ qua phiên bản tập lệnh này.

Các lệnh builtin có thể khó tìm hiểu vì chúng hoặc không có trang hướng dẫn (ví dụ: trên Ubuntu Linux) hoặc chúng có một trang hướng dẫn lớn, chung (macOS). Chương trình tldr là một cách tuyệt vời để tìm hiểu thêm về các lệnh builtin.

Vì những lý do tương tự, các lệnh builtin thường hỗ trợ ít tùy chọn dòng lệnh hơn so với các chương trình đầy đủ. Ví dụ, cd thường chỉ hỗ trợ hai tùy chọn khá ít được biết đến: -L (để theo dõi các liên kết tượng trưng) và -P (để tránh các liên kết tượng trưng). Điều này có nghĩa là, đáng tiếc, các tùy chọn như -h hoặc --help không được hỗ trợ.

4. Gọi một Hàm Shell (Shell Function)

Một lệnh cũng có thể là một lời gọi đến một hàm. Bất cứ lúc nào trong phiên làm việc, bạn có thể tải hoặc định nghĩa một hàm bằng cú pháp này (trong bash):

function_name() {
  commands
}

Ngoài ra, bạn có thể sử dụng cú pháp chèn từ khóa “function” trước tên hàm và bỏ dấu ngoặc đơn sau nó:

function function_name {
  commands
}

Sau đó, bạn có thể gọi một hàm bằng cách gõ tên của nó, theo sau là bất kỳ đối số nào. Ví dụ, tôi có hàm trợ giúp sau được định nghĩa trong một tệp:

mkd () { mkdir -p "$@" && cd "$@" || exit }

Sau đó, tôi tải tệp này từ tập lệnh điều khiển chạy của shell (~/.zshrc), và tôi có thể chạy lệnh này để tạo một thư mục mới và ngay lập tức chuyển đến đó:

mkd new_dir

Bạn có thể gọi một hàm như vậy trên dòng lệnh bất cứ khi nào bạn muốn. Bạn cũng có thể gọi nó từ các script, nhưng hãy nhớ rằng nó cần phải được tải (sử dụng lệnh source builtin, hoặc tương đương của nó là ., để làm như vậy).

5. Sử dụng Alias (Bí danh)

Một alias là một tiện ích giúp bạn không phải gõ các tên lệnh dài hoặc các tùy chọn phổ biến. Ví dụ, trên hệ thống của tôi, tôi có một alias để đảm bảo các danh sách tệp có màu, với các hậu tố loại:

ls='ls -GF'

Bây giờ, nếu tôi chỉ gõ “ls,” lệnh “ls -GF” sẽ chạy thay thế.

Bạn có thể tạo một alias bất cứ lúc nào, sử dụng lệnh alias builtin, ví dụ:

alias ls="ls -GF"

Lưu ý rằng cần có dấu nháy kép khi bạn chạy alias, nếu chuỗi thay thế chứa bất kỳ khoảng trắng nào. Bạn có thể xem tất cả các alias bằng cách chạy alias, và bạn có thể xóa một alias bằng lệnh unalias. Một lần nữa, bạn sẽ muốn thêm các alias vào một tệp khởi động, như ~/.zshrc hoặc ~/.bashrc, nếu bạn muốn chúng áp dụng cho các phiên làm việc khác.

Kết luận

Việc hiểu rõ cách Linux thực thi các loại lệnh khác nhau, từ các chương trình nhị phân đến các bí danh đơn giản, là chìa khóa để trở thành một người dùng dòng lệnh thành thạo. Mỗi loại lệnh đều có mục đích và cơ chế hoạt động riêng, và shell Linux thông minh đủ để biết cách ưu tiên và xử lý chúng một cách hiệu quả. Nắm vững biến môi trường PATH, quyền thực thi tệp, cấu trúc shebang trong script, cũng như cách định nghĩa và sử dụng các hàm và bí danh sẽ giúp bạn tối ưu hóa quy trình làm việc, gỡ lỗi hiệu quả hơn và tận dụng tối đa sức mạnh của hệ điều hành Linux.

Hy vọng bài viết này đã cung cấp cho bạn cái nhìn sâu sắc và toàn diện về cơ chế thực thi lệnh trong Linux. Bạn có bất kỳ mẹo hay kinh nghiệm nào khác khi làm việc với các loại lệnh này không? Hãy chia sẻ ý kiến của bạn trong phần bình luận dưới đây hoặc khám phá thêm các bài viết hữu ích khác trên tienichthuthuat.com để nâng cao kiến thức công nghệ của mình!

Share
facebookShare on FacebooktwitterShare on TwitterpinterestShare on Pinterest
linkedinShare on LinkedinvkShare on VkredditShare on ReddittumblrShare on TumblrviadeoShare on ViadeobufferShare on BufferpocketShare on PocketwhatsappShare on WhatsappviberShare on ViberemailShare on EmailskypeShare on SkypediggShare on DiggmyspaceShare on MyspacebloggerShare on Blogger YahooMailShare on Yahoo mailtelegramShare on TelegramMessengerShare on Facebook Messenger gmailShare on GmailamazonShare on AmazonSMSShare on SMS
Post navigation
Previous post

Sự Thật Bất Ngờ Về Chế Độ Ẩn Danh: Bạn Không Riêng Tư Như Vẫn Tưởng

Next post

ASUS Zenbook A14 (UX3407): Laptop Copilot+ PC Snapdragon X Đầu Tiên

Administrator

Related Posts

Categories Thủ Thuật Máy Tính Cơ chế thực thi lệnh Linux: Từ Alias đến Chương trình nhị phân

Khám phá sức mạnh của FFmpeg: 10 lệnh thiết yếu trên Linux Terminal cho người dùng công nghệ

Categories Thủ Thuật Máy Tính Cơ chế thực thi lệnh Linux: Từ Alias đến Chương trình nhị phân

Zoom Docs: Công Cụ Xử Lý Văn Bản Tích Hợp AI Mới Từ Zoom – Nâng Tầm Cộng Tác

Categories Thủ Thuật Máy Tính Cơ chế thực thi lệnh Linux: Từ Alias đến Chương trình nhị phân

Cách Tắt Tính Năng Recall Trên Windows Để Bảo Vệ Dữ Liệu Cá Nhân

Leave a Comment Hủy

Recent Posts

  • Triệu Hồi Toyota Tundra: Hơn 443.000 Xe Gặp Lỗi Đèn Lùi Ảnh Hưởng Đến An Toàn Giao Thông
  • Khám phá sức mạnh của FFmpeg: 10 lệnh thiết yếu trên Linux Terminal cho người dùng công nghệ
  • Zoom Docs: Công Cụ Xử Lý Văn Bản Tích Hợp AI Mới Từ Zoom – Nâng Tầm Cộng Tác
  • Hối hận vì chi tiền cho màn hình 240Hz: Đắt đỏ nhưng không đáng giá?
  • iPadOS 26: Khám phá những Tính năng Đột phá Nâng tầm Trải nghiệm iPad của Bạn

Recent Comments

Không có bình luận nào để hiển thị.
Copyright © 2025 Tiện Ích Thủ Thuật - Powered by Nevothemes.
Offcanvas
Offcanvas

  • Lost your password ?