Làm việc với dấu pipes (|) trong Linux

Chia sẻ

Một trong những công cụ mạnh mẽ cho shell là dấu pipe (|). Dấu pipe lấy output từ câu lệnh này và dùng nó làm input cho câu lệnh kế tiếp. Trong một câu lệnh chúng ta có thể dùng bao nhiêu dấu pipes tuỳ thích, cho tới khi đạt được output bạn muốn xuất ra

Một trong những công dụng chủ yếu là lọc. Chúng ta dùng dấu pipe để lọc nội dung của một files lớn, để tìm một chuỗi hoặc một từ cụ thể (Kết hợp với công cụ grep và sort). Hãy quan sát ví dụ sau

cmd1 | cmd2

Cả cmd1 và cmd2 đều là công cụ dòng lệnh và có in kết quả ra màn hình, nhưng khi thêm dấu pipes vào thì thông tin của cmd1 không được in ra màn hình mà được chuyển thành input của cmd2
Lưu ý: Đừng nhầm dấu pipe (|) với dấu File Redirection (>) hay (<). Khi dùng dấu (>) hay (<) kết quả được in vào một files thay vì dùng làm input cho câu lệnh sau
Chúng ta cùng xem một số ví dụ cụ thể dưới đây

Mục lục

Kiểm tra network interface cards (NICs)
Kiểm tra phân quyền
Xác định các tiến trình
Sắp xếp kết quả

Kiểm tra network interface cards (NICs)

  • Kiểm tra các NICs có IP bắt đầu bằng 192
ifconfig | grep 192 inet 192.168.1.96 netmask 255.255.255.0 broadcast 192.168.1.255
  • Kiểm tra các NICs đang UP
ifconfig | grep UP enp0s3: flags=4163 mtu 1500 lo: flags=73 mtu 65536

Kiểm tra phân quyền

Maybe you want to find out how many directories under /etc are writeable by root:
Bạn cần tìm có bao nhiêu thư mục con của thư mục etc mà root được quyền write. Chúng ta sẽ kết hợp giữa lệnh ls, lệnh grep để lọc các chuỗi có giá trị drwx và lệnh wc (Word Count) để đếm

sudo ls -lR | grep drwx | wc -l 285

Xác định các tiến trình

Để liệt kê hết các IDs (PIDs) của tất cả những tiến trình liên quan tới systemd

ps -ef | grep systemd | awk '{ print $2 }' 1 471 500 608 631 7449 7494 17242

Câu lệnh awk $2 để lọc thông tin ở cột thứ 2 của output. Ví dụ như một output đầy đủ dưới đây thì nó sẽ lọc ra cột PID là 17242

khess 17242 7505 0 09:40 pts/0 00:00:00 grep --color=auto systemd

Sắp xếp kết quả

Bạn có thể dùng kết hợp giữa lệnh cat và lệnh sort (Đã được nhắc tới trong bài: Hướng dẫn sử dụng câu lệnh sort để xử lí text trên Linux )

cat contacts.txt Bob Jones Leslie Smith Dana David Susan Gee Leonard Schmidt Linda Gray Terry Jones Colin Doe Jenny Case

Sắp xếp lại file text

cat contacts.txt | sort Bob Jones Colin Doe Dana David Jenny Case Leonard Schmidt Leslie Smith Linda Gray Susan Gee Terry Jones

Đảo ngược kết quả sắp xếp

cat contacts.txt | sort -r Terry Jones Susan Gee Linda Gray Leslie Smith Leonard Schmidt Jenny Case Dana David Colin Doe Bob Jones

Sắp xếp các text ở 2 cột

cat contacts.txt | sort -k2 Jenny Case Dana David Colin Doe Susan Gee Linda Gray Bob Jones Terry Jones Leonard Schmidt Leslie Smith

Bạn cũng có thể dùng kèm với uniq để lọc các line bị trùng

cat contacts.txt | sort -k2 | uniq > contact_list.txt
Chia sẻ

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *