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

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<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING> 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ẻ