Trang chủTác giảLiên hệ

Linux command line Pipelines và 1 số ví dụ

By Lê Hải Băng
Published in General
December 14, 2021
3 min read

1. Pipeline là gì

Pipeline là một tính năng của shell cho phép các câu lệnh có thể đọc dữ liệu từ đầu vào chuẩn và gửi đến đầu ra chuẩn. Bằng việc sử dụng toán tử pipe | (dấu gạch dọc), chúng ta có thể điều hướng đầu ra của một câu lệnh trở thành đầu vào của một câu lệnh khác.

Ví dụ với việc pipe câu lệnh less sau câu lệnh ls -l /usr/bin chúng ta có thể hiển thị kết quả của câu lệnh ls -l /usr/bin bằng giao diện của lệnh less.

2. Một số ví dụ của toán tử pipe cho việc lọc kết quả

Toán tử pipe thường được dùng cho mục đích lọc kết quả từ một câu lệnh nào đó. Chẳng hạn trường hợp chúng ta muốn liệt kê các chương trình trong hai thư mục /bin/usr/bin và sắp xếp các dòng kết quả theo thứ tự, chúng ta có thể làm như sau:

Câu lệnh uniq - loại bỏ các thành phần trùng lặp

Câu lệnh uniq thường được dùng theo sau câu lệnh sort. Câu lệnh uniq nhận đầu vào là một danh sách dữ liệu đã sắp xếp (có thể từ đầu vào chuẩn hoặc từ một file text) và loại bỏ các thành phần trùng lặp trong danh sách đó. Ứng dụng vào câu lệnh ở ví dụ trên, ta có thể loại bỏ các câu lệnh trùng lặp nhau trong hai thư mục /bin/usr/bin như sau:

Nếu muốn liệt kê riêng các thành phần trùng lặp nhau chúng ta dùng tùy biến -d với lệnh uniq:

Câu lệnh wc - truy xuất thông tin số dòng, số từ và số byte

Câu lệnh wc được dùng để truy xuất thông tin số dòng, số từ và số byte của một file nào đó. Ví dụ:

Nếu muốn chỉ hiển thị số dòng, chúng ta dùng câu lệnh wc với tùy biến -l. Ứng dụng để đếm số lượng chương trình có trong hai thư mục /bin//usr/bin trong ví dụ trên như sau:

Câu lệnh grep - in các dòng chứa mẫu tìm kiếm

grep là một câu lệnh rất phổ biến khi cần tìm các dòng text trong một file chứa một mẫu tìm kiếm nào đó. Câu lệnh sẽ xuất ra danh sách các dòng có chứa mẫu đang tìm kiếm. Ứng dụng điều này để tìm các chương trình có tên bao gồm một mẫu nào đó, chẳng hạn ‘zip’, trong các chương trình thuộc hai thư mục /bin//usr/bin như sau:

Câu lệnh grep có một số tùy biến thường hay được dùng, ví dụ -i - bỏ qua phân biệt chữ hoa chữ thường trong khi tìm kiếm (mặc định là có phân biệt), -v - chỉ in các dòng không chứ mẫu đang tìm kiếm.

Câu lệnh head, tail - in các dòng ở phần đầu hoặc phần cuối của file

Đôi khi chúng ta chỉ muốn xem một số lượng dòng nhất định ở phần đầu hoặc cuối một file nào đó, trong trường hợp này chúng ta có thể dùng câu lệnh head hoặc tail. Mặc định hai câu lệnh này sẽ in ra 10 dòng đầu tiên (hoặc cuối cùng) của file chỉ định, và chúng ta có thể tùy biến số lượng này bằng tùy biến -n.

Ví dụ chúng ta có thể dùng head, tail để in ra chỉ 5 kết quả đầu tiên hoặc 5 kết quả cuối cùng của câu lệnh ls /usr/bin như sau:

Câu lệnh tail có một tùy biến -f giúp chúng ta có thể theo dõi liên tục thay nội dung của một file trong thời gian thực. Tùy biến này rất hữu ích khi chúng ta theo dõi các nội dung được ghi mới liên tục ở một file log nào đó. Ví dụ:

Câu lệnh tee - đọc từ Stdin và xuất kết quả ra Stdout và file

Với một sự liên tưởng đến hệ thống đường ống nước, Linux cung cấp câu lệnh tee (hình dung như một ống chữ T trong hệ thống đường ống nước) giúp đọc kết quả từ đầu vào chuẩn và xuất ra cả đầu ra chuẩn và một hoặc nhiểu file. Câu lệnh này sẽ hữu dụng trong trường hợp chúng ta muốn lưu kết quả trung gian của một pipeline vào file nào đó. Như trong ví dụ sau, kết quả của câu lệnh ls /usr/bin sẽ được lưu vào file ls.txt trước khi được xử lý tiếp bởi câu lệnh grep:

Tham khảo

  • Book ‘The Linux Command Line’

Tags

GENERAL

Lê Hải Băng

Related Posts

Xử lý Deadlocks
October 02, 2022
3 min
© 2022, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media