Lệnh exec trong Linux rất dễ sử dụng và có thể áp dụng cho nhiều mục đích khác nhau. Thông thường, lệnh exec thực thi các chương trình hoặc lệnh cụ thể mà không tạo ra một tiến trình mới. Bài viết này Vietnix sẽ hướng dẫn bạn cách sử dụng lệnh exec trong Linux một cách hiệu quả thông qua 8 các ví dụ cụ thể.
Lệnh exec trong Linux là gì?
Lệnh exec trong Linux là một công cụ cho phép thay thế tiến trình hiện tại bằng một lệnh mới, có quyền điều khiển bộ nhớ, ID tiến trình và một số tài nguyên khác. Nếu lệnh exec được thực thi mà không có lệnh nào khác kèm theo, lệnh sẽ kết thúc hoạt động của terminal.
Cú pháp của lệnh exec rất đơn giản như sau:
exec [OPTION]... [ARGUMENT]...
Mọi người cũng xem:
Tùy chọn của lệnh exec trong Linux
Lệnh exec trong Linux hỗ trợ một số tùy chọn khác nhau. Để khám phá thêm nhiều tùy chọn, bạn có thể truy cập trang trợ giúp của lệnh exec.
Bạn chạy lệnh sau trong terminal để xem trang trợ giúp:
help exec
Gợi ý tùy chọn hữu ích:
-c
: Đây là tùy chọn dùng để chạy lệnh với môi trường rỗng.
8 ví dụ cụ thể lệnh exec trong Linux
- Liệt kê nội dung của directory hiện tại bằng lệnh exec
- Liệt kê tất cả các biến môi trường và giá trị bằng exec
- Chạy chương trình trong tập lệnh bash bằng lệnh exec
- Dùng lệnh exec để ghi log stdout và stderr trong tập lệnh bash
- Tạo môi trường sạch bằng cách chạy tập lệnh
- Tìm kiếm và hiển thị nội dung các file bằng lệnh exec trong Linux
- Tìm kiếm và nén nhiều file cùng lúc bằng lệnh exec trong Linux
- Tìm kiếm và thay đổi quyền truy cập file bằng exec
Ví dụ 1: Liệt kê nội dung của directory hiện tại bằng lệnh exec
Bạn có thể dùng lệnh exec để xem chi tiết nội dung của directory hiện tại trong Linux. Có 5 bước thực hiện:
Bước 1: Mở Terminal trên Ubuntu.
Bước 2: Chạy lệnh sau trong terminal:
bash
Bước 3: Nhấn Enter.
Bước 4: Sao chép lệnh sau vào terminal:
exec ls -la
Bước 5: Nhấn Enter. Kết quả, bạn sẽ thấy nội dung của directory hiện tại được liệt kê chi tiết trên màn hình.
Ví dụ 2: Liệt kê tất cả các biến môi trường và giá trị bằng exec
Lệnh exec cũng cho phép bạn liệt kê tất cả các biến môi trường và giá trị tương ứng của chúng trong Linux. Có 3 bước thực hiện:
Bước 1: Mở cửa sổ Terminal trên Ubuntu.
Bước 2: Gõ lệnh sau và nhấn Enter:
bash
Bước 3: Tiếp tục gõ lệnh sau và nhấn Enter:
exec env
Kết quả: Màn hình terminal sẽ hiển thị danh sách tất cả các biến môi trường và giá trị tương ứng của chúng.
Ví dụ 3: Chạy chương trình trong tập lệnh bash bằng lệnh exec trong Linux
Lệnh exec cũng có thể được sử dụng trong tập lệnh bash để chạy một chương trình khác. Có 5 bước thực hiện:
Bước 1: Mở cửa sổ Terminal trên Ubuntu.
Bước 2: Gõ lệnh sau và nhấn Enter để tạo một file tập lệnh mới có tên là script.sh:
nano script.sh
Bước 3: Dán đoạn code sau vào file script.sh:
#!/bin/bash
while true
do
echo "1) Update "
echo "2) Upgrade "
echo "3) Exit"
read Input
case "$Input" in
1) exec sudo apt update ;;
2) exec sudo apt upgrade ;;
3) break
esac
done
Bước 4: Lưu và đóng tập lệnh bằng tổ hợp phím Ctrl + S và Ctrl + X.
Bươc 5: Chạy tập lệnh bằng lệnh sau và nhấn Enter.
. script.sh
Kết quả: Trong hình dưới đây, kết quả cho thấy chương trình trong tập lệnh tên là script.sh đã được chạy. Bạn có thể gõ 1, 2, hoặc 3 và nhấn Enter để chạy chức năng cập nhật, nâng cấp hoặc thoát.
Ví dụ 4: Dùng lệnh exec để ghi log stdout và stderr trong tập lệnh bash
Trong Linux, bạn có thể sử dụng lệnh exec để ghi lại cả đầu ra chuẩn (stdout) và báo lỗi chuẩn (stderr) vào một file log trong tập lệnh bash. Có 7 bước thực hiện
Bước 1: Mở Terminal trên Ubuntu.
Bước 2: Gõ lệnh sau và nhấn Enter để tạo file script mới:
nano logging.sh
Bước 3: Dán đoạn code sau vào tập lệnh:
#!/bin/bash
# Create testFile.log file
touch testFile.log
# Save testFile.log to log_file variable
log_file="testFile.log"
# Redirect stdin to $log_file
exec >>$log_file
# Redirect stderr to the same place as stdin
exec 2>&1
echo "This line is the first line of the log file"
echo "This line is the second line of the log file"
eho "This line is the third line and has an error"
Bước 4: Lưu tập lệnh và thoát bằng cách nhấn tổ hợp phím CTRL + S và CTRL + X.
Bước 5: Để cấp quyền thực thi cho tập lệnh logging.sh, bạn chạy lệnh sau và nhấn Enter:
chmod +x logging.sh
Bước 6: Chạy tập lệnh bằng lệnh sau và nhấn Enter:
./logging.sh
Bước 7: Xem nội dung file log bằng lệnh sau và nhấn Enter:
cat testFile.log
Kết quả: File testFile.log sẽ chứa đầu ra chuẩn (stdout) và báo lỗi chuẩn (stderr) như hình minh hoạ bên dưới.
Ví dụ 5: Tạo môi trường sạch bằng cách chạy tập lệnh
Bạn có thể tạo môi trường sạch bằng cách sử dụng lệnh exec trong Linux kết hợp với lệnh printenv và tùy chọn -c trong Linux. Có 4 bước thực hiện:
Bước 1: Mở Terminal trên Ubuntu.
Bước 2: Gõ lệnh sau và nhấn Enter để hiển thị tất cả các biến môi trường hiện tại:
printenv
Bước 3: Chạy lệnh bash:
bash
Bước 4: Gõ lệnh sau và nhấn Enter để tạo một môi trường sạch:
exec -c printenv
Kết quả: Trong hình bên dưới, bạn có thể thấy kết quả là các biến môi trường và giá trị của biến đã bị xoá sạch bằng cách sử dụng lệnh exec kết hợp với lệnh printenv và tùy chọn -c.
Ví dụ 6: Tìm kiếm và hiển thị nội dung các file bằng lệnh exec trong Linux
Bạn có thể dùng lệnh find để tìm kiếm các file và lệnh cat trong Linux để xem nội dung. Lệnh exec kết hợp hai lệnh này để hiển thị nội dung của các file tìm được. Bạn muốn xem nội dung của tất cả các file .txt trong thư mục MyFolder nằm trong thư mục home. Bạn có thể sử dụng lệnh find để tìm các file này, sau đó dùng exec để hiển thị nội dung:
Bước 1: Khởi động Terminal trên Ubuntu.
Bước 2: Sao chép lệnh sau vào dòng lệnh và nhấn Enter:
find ~/MyFolder -name "*.txt" -exec cat {} \;
Kết quả: Như bạn có thể thấy trong hình bên dưới, terminal đang hiển thị nội dung của tất cả các file .txt được tìm kiếm bởi lệnh find.
Ví dụ 7: Tìm kiếm và nén nhiều file cùng lúc bằng lệnh exec trong Linux
Bạn có thể dùng lệnh find để tìm kiếm các file và lệnh gzip để nén chúng trong Linux. Lệnh exec kết hợp hai lệnh này để nén các file được tìm thấy. Ví dụ, bạn muốn nén tất cả các file .log trong thư mục MyFolder nằm trong thư mục home. Bạn có thể sử dụng lệnh find để tìm các file này, sau đó dùng exec để nén chúng bằng lệnh gzip. Có 4 bước thực hiện:
Bước 1: Khởi động Terminal trên Ubuntu.
Bước 2: Gõ lệnh sau vào dòng lệnh và nhấn Enter để xem danh sách các file hiện có trong directory MyFolder/:
ls MyFolder/
Bước 3: Sao chép lệnh sau và dán vào dòng lệnh rồi nhấn Enter:
find ~/MyFolder -name "*.log" -exec gzip {} \;
Bước 4: Gõ lệnh sau vào dòng lệnh và nhấn Enter để kiểm tra kết quả:
ls MyFolder/
Kết quả: Bạn có thể thấy trong hình bên dưới, tất cả các file .log được tìm kiếm bởi lệnh find đã được nén bằng lệnh gzip. Các file .log ban đầu sẽ được thay thế bằng các file .log.gz.
Ví dụ 8: Tìm kiếm và thay đổi quyền truy cập file bằng exec
Bạn có thể dễ dàng tìm và thay đổi quyền truy cập của nhiều file cùng lúc. Trong ví dụ này sẽ thực hiện thay đổi quyền truy cập của tất cả các file .log trong directory MyFolder/. Có 4 bước thực hiện:
Bước 1: Khởi động Terminal trên Ubuntu.
Bước 2: Gõ lệnh sau vào dòng lệnh và nhấn Enter để xem danh sách chi tiết các file hiện có trong directory MyFolder/, bao gồm cả quyền truy cập:
ls -la MyFolder/
Bước 3: Sao chép lệnh sau và dán vào dòng lệnh rồi nhấn Enter:
find ~/MyFolder -name "*.log" -exec chmod +x {} \;
Bước 4: Gõ lệnh sau vào dòng lệnh và nhấn Enter để kiểm tra kết quả:
ls -la MyFolder/
Kết quả: Trong hình bên dưới, bạn có thể thấy quyền của tất cả các file .log được tìm kiếm bởi lệnh find đã được thay đổi bằng cách sử dụng lệnh chmod trong Linux.
Câu hỏi thường gặp
Lệnh exec khác với việc chạy một chương trình bình thường như thế nào?
Lệnh exec thay thế chương trình đang chạy hiện tại bằng một chương trình khác. Còn khi chạy trực tiếp một chương trình thì chương trình đó sẽ chạy như một tiến trình con.
Sự khác biệt giữa lệnh exec và lệnh ./
như thế nào?
Lệnh ./
chỉ đơn giản là chạy một chương trình trong thư mục hiện tại mà không thay thế chương trình đang chạy.
Lệnh exec có ảnh hưởng gì đến các quá trình con (child process) không?
Khi sử dụng exec, quá trình hiện tại sẽ bị thay thế hoàn toàn, nên không có khái niệm quá trình con trong trường hợp này. Tất cả các thông tin về quá trình gốc sẽ bị mất.
Lời kết
Qua bài viết này, bạn đã nắm bắt được cú pháp, các tùy chọn chức năng cũng như những ứng dụng cụ thể của lệnh exec. Để thực sự trở thành một chuyên gia trong việc sử dụng Linux, bạn hãy dành thời gian thực hành cùng với các ứng dụng của lệnh exec trong các tình huống thực tế.