Piping Command Output và Chạy Nhiều Lệnh Trên Một Dòng trong Linux
Trong Linux, ngoài việc điều hướng luồng output (STDOUT), input (STDIN) và error (STDERR), bạn còn có thể chuyển kết quả đầu ra của một lệnh thành đầu vào của một lệnh khác. Kỹ thuật này được gọi là piping.
1. Piping – Kết nối đầu ra và đầu vào của lệnh
Ví dụ:
ps -ef | grep ssh
Giải thích:
Ví dụ nâng cao – Piping nhiều lệnh liên tiếp:
ps -ef | grep ssh | sort -d
Điểm mạnh của piping là bạn có thể kết hợp bất kỳ số lượng lệnh nào, miễn là lệnh sau có thể nhận dữ liệu từ STDIN.
2. Chạy nhiều lệnh trong cùng một dòng
Khác với piping (chuyển dữ liệu giữa lệnh), việc chạy nhiều lệnh trên cùng một dòng chỉ đơn giản là thực hiện tuần tự nhiều lệnh, lệnh này xong mới đến lệnh kia.
Ký hiệu: &&
Ví dụ khi compile source code:
./configure && make && make install
Nếu một lệnh thất bại, toàn bộ chuỗi sẽ dừng lại, giúp tránh các lỗi liên tiếp.
3. Câu hỏi ôn tập
Câu 1: Piping thực hiện chức năng nào?
✅ Cho phép người dùng gửi output của một lệnh sang lệnh khác để xử lý.
Câu 2: Để chạy nhiều lệnh trên cùng một dòng (theo thứ tự và chỉ khi lệnh trước thành công), dùng ký hiệu nào?
✅ &&
Trong Linux, ngoài việc điều hướng luồng output (STDOUT), input (STDIN) và error (STDERR), bạn còn có thể chuyển kết quả đầu ra của một lệnh thành đầu vào của một lệnh khác. Kỹ thuật này được gọi là piping.
1. Piping – Kết nối đầu ra và đầu vào của lệnh
Ví dụ:
ps -ef | grep ssh
Giải thích:
- Lệnh ps -ef liệt kê toàn bộ các tiến trình đang chạy.
- Ký tự | (pipe) sẽ chuyển output của ps thành input của grep.
- Lệnh grep ssh sẽ lọc và chỉ hiển thị các dòng có chứa chuỗi "ssh".
- Kết quả: bạn chỉ thấy các tiến trình liên quan đến SSH, thay vì toàn bộ danh sách.
Ví dụ nâng cao – Piping nhiều lệnh liên tiếp:
ps -ef | grep ssh | sort -d
- ps -ef → liệt kê tiến trình.
- grep ssh → lọc kết quả.
- sort -d → sắp xếp kết quả theo thứ tự bảng chữ cái.
Điểm mạnh của piping là bạn có thể kết hợp bất kỳ số lượng lệnh nào, miễn là lệnh sau có thể nhận dữ liệu từ STDIN.
2. Chạy nhiều lệnh trong cùng một dòng
Khác với piping (chuyển dữ liệu giữa lệnh), việc chạy nhiều lệnh trên cùng một dòng chỉ đơn giản là thực hiện tuần tự nhiều lệnh, lệnh này xong mới đến lệnh kia.
Ký hiệu: &&
Ví dụ khi compile source code:
./configure && make && make install
- ./configure → cấu hình build.
- make → biên dịch.
- make install → cài đặt.
- && đảm bảo rằng lệnh tiếp theo chỉ chạy nếu lệnh trước đó thành công (exit code = 0).
Nếu một lệnh thất bại, toàn bộ chuỗi sẽ dừng lại, giúp tránh các lỗi liên tiếp.
3. Câu hỏi ôn tập
Câu 1: Piping thực hiện chức năng nào?
✅ Cho phép người dùng gửi output của một lệnh sang lệnh khác để xử lý.
Câu 2: Để chạy nhiều lệnh trên cùng một dòng (theo thứ tự và chỉ khi lệnh trước thành công), dùng ký hiệu nào?
✅ &&