BÀI VIẾT

Hướng dẫn sử dụng Pipe trong Linux

1.6K
author Huỳnh Đình Hiếu - 2022-08-05 16:41:00 (GMT+7)

Giới thiệu

Đường ống (pipe) là một dạng chuyển hướng trên hệ điều hành Linux và các hệ điều hành giống Unix, nó cho phép chúng ta sử dụng hai hoặc nhiều lệnh sao cho đầu ra của một lệnh đóng vai trò trực tiếp làm đầu vào của lệnh tiếp theo.

Kết nối trực tiếp giữa các lệnh cho phép chúng hoạt động đồng thời và cho phép dữ liệu được truyền giữa chúng liên tục thay vì phải chuyển qua các tệp văn bản tạm thời hoặc qua màn hình hiển thị

Biểu tượng | biểu thị một đường ống.

Các đường ống là một chiều tức là luồng dữ liệu chuyển hướng từ trái sang phải qua đường ống.

Cú pháp như sau:

lệnh_1 | lệnh_2 | lệnh_3 | ... | lệnh_n

Ví dụ sử dụng pipe

Sử dụng đường ống kết hợp lệnh cat, less

Khi chúng ta sử dụng lệnh cat để xem một file nhưng khi file có nhiều trang thì đầu ra sẽ nhanh chóng đến trang cuối cùng của file và chúng ta sẽ không thấy nội dung ở giữa.

bash (non-root)
 cat /usr/local/apache2/logs/wordpress-error-log
[Mon Jul 04 15:00:34.024898 2022] [proxy_fcgi:error] [pid 529532:tid 140097508251392] [client 103.255.238.20:57163] AH01071: Got error 'PHP message: PHP Warning:  phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /var/www/wordpress/public_html/info.php on line 3\n'
[Mon Jul 04 15:10:00.493072 2022] [proxy_fcgi:error] [pid 529430:tid 140097516644096] [client 103.255.238.20:57213] AH01071: Got error 'PHP message: PHP Warning:  phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /var/www/wordpress/public_html/info.php on line 3\n'
[Wed Jul 06 09:02:34.514923 2022] [proxy_fcgi:error] [pid 529532:tid 140097508251392] [client 61.14.233.190:45742] AH01067: Failed to read FastCGI header, referer: http://example.vn/wp-cron.php?doing_wp_cron=1657072953.7378430366516113281250
[Wed Jul 06 09:02:34.515128 2022] [proxy_fcgi:error] [pid 529532:tid 140097508251392] (104)Connection reset by peer: [client 61.14.233.190:45742] AH01075: Error dispatching request to : , referer: http://example.vn/wp-cron.php?doing_wp_cron=1657072953.7378430366516113281250
[Fri Jul 08 11:25:45.811568 2022] [proxy_fcgi:error] [pid 529532:tid 140097303295744] [client 61.14.233.190:46596] AH01067: Failed to read FastCGI header, referer: http://example.vn/wp-cron.php?doing_wp_cron=1657254344.9992809295654296875000
[Fri Jul 08 11:25:45.811802 2022] [proxy_fcgi:error] [pid 529532:tid 140097303295744] (104)Connection reset by peer: [client 61.14.233.190:46596] AH01075: Error dispatching request to : , referer: http://example.vn/wp-cron.php?doing_wp_cron=1657254344.9992809295654296875000

Để có thể xem toàn bộ nội dung file chúng ta có thể chuyển hướng đầu ra của lệnh cat thành đầu vào lệnh less như sau:

bash (non-root)
 cat /usr/local/apache2/logs/wordpress-error-log | less
[Mon Jun 27 13:54:45.254852 2022] [:error] [pid 2955:tid 139644917688064] [client 103.255.238.20:52200] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /var/www/wordpress/public_html/wp-includes/wp-db.php on line 1643
[Mon Jun 27 13:54:46.121528 2022] [:error] [pid 2957:tid 139644909295360] [client 103.255.238.20:52204] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /var/www/wordpress/public_html/wp-includes/wp-db.php on line 1643
[Mon Jun 27 13:56:55.428440 2022] [:error] [pid 2955:tid 139644813436672] [client 103.255.238.20:52216] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /var/www/wordpress/public_html/wp-includes/wp-db.php on line 1643
[Mon Jun 27 13:56:57.365269 2022] [:error] [pid 2957:tid 139644813436672] [client 103.255.238.20:52217] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /var/www/wordpress/public_html/wp-includes/wp-db.php on line 1643
[Mon Jun 27 14:01:02.868922 2022] [:error] [pid 3442:tid 139644917688064] [client 103.255.238.20:52292] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /var/www/wordpress/public_html/wp-includes/wp-db.php on line 1643
[Mon Jun 27 14:07:37.238939 2022] [:error] [pid 3907:tid 140465137178368] [client 103.255.238.20:52413] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /var/www/wordpress/public_html/wp-includes/wp-db.php on line 1643
[Mon Jun 27 14:07:39.512219 2022] [:error] [pid 3907:tid 140465120392960] [client 103.255.238.20:52414] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /var/www/wordpress/public_html/wp-includes/wp-db.php on line 1643
[Mon Jun 27 14:08:41.362816 2022] [:error] [pid 4775:tid 140465137178368] [client 103.255.238.20:52426] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /var/www/wordpress/public_html/wp-includes/wp-db.php on line 1643
[Mon Jun 27 14:09:14.312125 2022] [:error] [pid 4775:tid 140465120392960] [client 103.255.238.20:52432] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql
:

Chúng ta nhấn Enter để di chuyển sang từ dòng, nhấn space để di chuyển sang một trang và nhấn q để thoát

Sử dụng đường ống kết hợp lệnh cat, grep, tee

Để thực hiện chọn từ 123host trong file 123hostvn và lưu trữ chúng trong demo-pipe.txt chúng ta dùng lệnh như sau:

bash (non-root)
cat 123hostvn | grep "123host" | tee demo-pipe.txt
123host.vn
demo@123host.vn

File demo-pipe.txt đã được tạo, chúng ta hãy mở file và xem nội dung file

bash (non-root)
cat demo-pipe.txt
123host.vn
demo@123host.vn

Sử dụng đường ống kết hợp lệnh ps aux, grep

Khi chúng ta sử dụng ps aux để xem các tiến trình đang chạy, thì sẽ hiện thị ra rất nhiều tiến trình đang chạy trên hệ điều hành của chúng ta.

bash (non-root)
ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.4 101668 12808 ?        Ss   Jul18   0:38 /sbin/init
root           2  0.0  0.0      0     0 ?        S    Jul18   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Jul18   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   Jul18   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   Jul18   0:00 [netns]
root           7  0.0  0.0      0     0 ?        I<   Jul18   0:00 [kworker/0:0H
root          10  0.0  0.0      0     0 ?        I<   Jul18   0:00 [mm_percpu_wq
root          11  0.0  0.0      0     0 ?        S    Jul18   0:00 [rcu_tasks_ru
root          12  0.0  0.0      0     0 ?        S    Jul18   0:00 [rcu_tasks_tr
root          13  0.0  0.0      0     0 ?        S    Jul18   0:11 [ksoftirqd/0]
root          14  0.0  0.0      0     0 ?        I    Jul18   0:07 [rcu_sched]
root          15  0.0  0.0      0     0 ?        S    Jul18   0:01 [migration/0]
root          16  0.0  0.0      0     0 ?        S    Jul18   0:00 [idle_inject/
root          17  0.0  0.0      0     0 ?        S    Jul18   0:00 [cpuhp/0]
root          18  0.0  0.0      0     0 ?        S    Jul18   0:00 [kdevtmpfs]
root          19  0.0  0.0      0     0 ?        I<   Jul18   0:00 [inet_frag_wq
root          20  0.0  0.0      0     0 ?        S    Jul18   0:00 [kauditd]
root          21  0.0  0.0      0     0 ?        S    Jul18   0:00 [khungtaskd]
root          22  0.0  0.0      0     0 ?        S    Jul18   0:00 [oom_reaper]
root          23  0.0  0.0      0     0 ?        I<   Jul18   0:00 [writeback]
root          24  0.0  0.0      0     0 ?        S    Jul18   0:07 [kcompactd0]
root          25  0.0  0.0      0     0 ?        SN   Jul18   0:00 [ksmd]
root          26  0.0  0.0      0     0 ?        SN   Jul18   0:00 [khugepaged]
root          72  0.0  0.0      0     0 ?        I<   Jul18   0:00 [kintegrityd]
root          73  0.0  0.0      0     0 ?        I<   Jul18   0:00 [kblockd]
root          74  0.0  0.0      0     0 ?        I<   Jul18   0:00 [blkcg_punt_b
root          75  0.0  0.0      0     0 ?        I<   Jul18   0:00 [tpm_dev_wq]
root          76  0.0  0.0      0     0 ?        I<   Jul18   0:00 [ata_sff]
root          77  0.0  0.0      0     0 ?        I<   Jul18   0:00 [md]

Để xem một tiến trình cụ thể nào đó, chúng ta có thể chuyển hướng đầu ra của lệnh ps aux thành đầu vào của lệnh grep để tìm kiếm tiến trình chúng ta cần xem như sau.

bash (non-root)
ps aux | grep mysql
root      319442  0.0  0.0   4020  2092 pts/2    S+   13:15   0:00 grep --color=auto mysql

Tổng kết

Như trong các ví dụ trên, chúng ta có thể thấy đầu ra của lệnh trước sẽ là đầu vào của các lệnh tiếp theo, chúng ta có thể kết hợp hai hoặc nhiều hơn các lệnh cho đến khi chúng ta đạt được kết quả mong muôn. Hy vọng bài viết này sẽ giúp các bạn hiểu rỏ hơn về đường ống (pipe) trong Linux.


Bạn có làm được theo hướng dẫn này không?

Bài liên quan

Lệnh xác định vị trí của tệp hoặc thư mục trên Linux
Lệnh xác định vị trí của tệp hoặc thư mục trên Linux
Lệnh kiểm tra nhiều cổng port đang mở của một tên miền trên Linux
Lệnh kiểm tra nhiều cổng port đang mở của một tên miền trên Linux
Lệnh tạo một dãy số tăng dần trên Linux
Lệnh tạo một dãy số tăng dần trên Linux

Object Storage

Chuẩn S3, không giới hạn băng thông

Object Storage

Thuê Server Riêng

Chi phí thấp, cấu hình cao

Thuê Server Riêng
Thông tin tác giả
Bình luận

Tính năng đang được phát triển

Đang tải bình luận
Liên hệ chúng tôi