Trong bài viết này, chúng ta sẽ xem xét một số công cụ dòng lệnh hoạt động như bộ lọc/ filter văn bản trong Linux. Một bộ lọc là một chương trình đọc đầu vào tiêu chuẩn, thực hiện một thao tác lên nó và ghi kết quả ra đầu ra tiêu chuẩn.
Vì lý do này, nó có thể được sử dụng để xử lý thông tin một cách mạnh mẽ như tái cấu trúc đầu ra để tạo báo cáo hữu ích, sửa đổi văn bản trong các tệp và nhiều tác vụ quản trị hệ thống khác.
Với nhưng quan điểm trên, dưới đây là một số bộ lọc tệp hoặc văn bản hữu ích trong Linux.
1. Lệnh Awk
Awk là ngôn ngữ xử lý và quét chuỗi đáng chú ý, nó có thể được sử dụng để xây dựng bộ lọc hữu ích trong Linux. Bạn có thể bắt đầu sử dụng nó bằng cách đọc qua chuỗi hướng dẫn Awk Part 1 đến Part 13 của chúng tôi.
Ngoài ra, cũng đọc qua trang man của awk để biết thêm thông tin và tùy chọn sử dụng:
$ man awk
2. Lệnh Sed
Sed là một trình biên tập dòng mạnh mẽ để lọc và biến đổi văn bản. Trang man của sed đã thêm các tùy chọn điều khiển và hướng dẫn:
$ man sed
3. Lệnh Grep, Egrep, Fgrep, Rgrep
Các bộ lọc này xuất các dòng phù hợp với một mẫu cho trước. Chúng đọc các dòng từ một tệp hoặc đầu vào tiêu chuẩn và mặc định in tất cả các dòng phù hợp ra đầu ra tiêu chuẩn.
Lưu ý: Chương trình chính là grep, các biến thể khác chỉ là việc sử dụng các tùy chọn grep cụ thể như dưới đây (và vẫn được sử dụng để tương thích ngược):
$ egrep = grep -E
$ fgrep = grep -F
$ rgrep = grep -r
Dưới đây là một số lệnh grep cơ bản:
tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:
tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:
4. Lệnh Head
Head được sử dụng để hiển thị các phần đầu của một tệp, mặc định là in ra 10 dòng đầu tiên. Bạn có thể sử dụng cờ -n
num để chỉ định số dòng cần hiển thị:
tecmint@TecMint ~ $ head /var/log/auth.log
Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan 2 10:51:34 TecMint sudo: tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan 2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Jan 2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root
Jan 2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root
Jan 2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)
tecmint@TecMint ~ $ head -n 5 /var/log/auth.log
Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan 2 10:51:34 TecMint sudo: tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan 2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
5. Lệnh Tail
Tail in ra các phần cuối (mặc định là 10 dòng) của một tệp. Sử dụng cờ -n
num để chỉ định số dòng cần hiển thị.
Lệnh dưới đây sẽ xuất ra 5 dòng cuối cùng của tệp đã chỉ định:
tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Thêm vào đó, tail có một tùy chọn đặc biệt -f
để theo dõi các thay đổi trong một tệp thời gian thực (đặc biệt là các tệp nhật ký).
Lệnh sau sẽ cho phép bạn theo dõi các thay đổi trong tệp đã chỉ định:
tecmint@TecMint ~ $ tail -f /var/log/auth.log
Jan 6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22.
Jan 6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan 6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Đọc qua trang man của tail để biết danh sách đầy đủ các tùy chọn và hướng dẫn sử dụng:
$ man tail
6. Lệnh Sort
Sort được sử dụng để sắp xếp các dòng của một tệp văn bản hoặc từ đầu vào tiêu chuẩn.
Dưới đây là nội dung của một tệp có tên domain.list:
tecmint@TecMint ~ $ cat domains.list
tecmint.com
tecmint.com
news.tecmint.com
news.tecmint.com
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com
Bạn có thể chạy một lệnh sắp xếp đơn giản để sắp xếp nội dung tệp như sau:
tecmint@TecMint ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.tecmint.com
news.tecmint.com
tecmint.com
tecmint.com
windowsmint.com
windowsmint.com
7. Lệnh Uniq
Lệnh uniq được sử dụng để báo cáo hoặc loại bỏ các dòng lặp lại, nó lọc các dòng từ đầu vào tiêu chuẩn và ghi kết quả ra đầu ra tiêu chuẩn.
Sau khi chạy sort trên luồng đầu vào, bạn có thể loại bỏ các dòng lặp lại bằng uniq như ví dụ dưới đây.
Để chỉ số lượng lần xuất hiện của một dòng, sử dụng tùy chọn -c
và bỏ qua sự khác biệt trong việc so sánh bằng cách bao gồm tùy chọn -i
:
tecmint@TecMint ~ $ cat domains.list
tecmint.com
tecmint.com
news.tecmint.com
news.tecmint.com
linuxsay.com
linuxsay.com
windowsmint.com
tecmint@TecMint ~ $ sort domains.list | uniq -c
2 linuxsay.com
2 news.tecmint.com
2 tecmint.com
1 windowsmint.com
Đọc qua trang man của uniq để biết thêm thông tin sử dụng và các cờ khác:
$ man uniq
8. Lệnh Fmt
Fmt là công cụ định dạng văn bản đơn giản và tối ưu, nó định dạng lại đoạn văn bản trong tệp đã chỉ định và in kết quả ra đầu ra tiêu chuẩn.
Dưới đây là nội dung được trích xuất từ tệp domain-list.txt:
1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com
Để định dạng lại nội dung trên thành một danh sách chuẩn, chạy lệnh sau với cờ -w
để xác định độ rộng dòng tối đa:
tecmint@TecMint ~ $ cat domain-list.txt
1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com
tecmint@TecMint ~ $ fmt -w 1 domain-list.txt
1.tecmint.com
2.news.tecmint.com
3.linuxsay.com
4.windowsmint.com
9. Lệnh Pr
Pr chuyển đổi các tệp văn bản hoặc đầu vào tiêu chuẩn cho việc in. Ví dụ trên các hệ thống Debian, bạn có thể liệt kê tất cả các gói đã cài đặt như sau:
$ dpkg -l
Để tổ chức danh sách thành trang và cột sẵn sàng cho việc in, sử dụng lệnh sau:
tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20
2017-01-06 13:19 Page 1
Desired=Unknown/Install ii adduser ii apg
| Status=Not/Inst/Conf- ii adwaita-icon-theme ii app-install-data
|/ Err?=(none)/Reinst-r ii adwaita-icon-theme- ii apparmor
||/ Name ii alsa-base ii apt
+++-=================== ii alsa-utils ii apt-clone
ii accountsservice ii anacron ii apt-transport-https
ii acl ii apache2 ii apt-utils
ii acpi-support ii apache2-bin ii apt-xapian-index
ii acpid ii apache2-data ii aptdaemon
ii add-apt-key ii apache2-utils ii aptdaemon-data
2017-01-06 13:19 Page 2
ii aptitude ii avahi-daemon ii bind9-host
ii aptitude-common ii avahi-utils ii binfmt-support
ii apturl ii aview ii binutils
ii apturl-common ii banshee ii bison
ii archdetect-deb ii baobab ii blt
ii aspell ii base-files ii blueberry
ii aspell-en ii base-passwd ii bluetooth
ii at-spi2-core ii bash ii bluez
ii attr ii bash-completion ii bluez-cups
ii avahi-autoipd ii bc ii bluez-obexd
.....
Các cờ được sử dụng ở đây là:
--column
xác định số cột được tạo ra trong đầu ra.
-l
chỉ định độ dài trang (mặc định là 66 dòng).
10. Lệnh Tr
Công cụ này dịch hoặc xóa các ký tự từ đầu vào tiêu chuẩn và ghi kết quả ra đầu ra tiêu chuẩn.
Cú pháp sử dụng tr như sau:
$ tr options set1 set2
Xem các ví dụ dưới đây, trong lệnh đầu tiên, set1( [:upper:] )
đại diện cho trường hợp của các ký tự đầu vào (tất cả đều viết hoa).
Sau đó, set2([:lower:])
đại diện cho trường hợp các ký tự kết quả sẽ được. Tương tự trong ví dụ thứ hai và dãy thoát \n
có nghĩa là in kết quả trên một dòng mới:
tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
www.tecmint.com
tecmint@TecMint ~ $ echo "news.tecmint.com" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM
11. Lệnh More
More là một lệnh sàng lọc xem tệp hữu ích được tạo ra chủ yếu để xem các chứng chỉ. Nó hiển thị nội dung tệp dưới dạng trang, trong đó người dùng có thể nhấn [Enter] để xem thêm thông tin.
Bạn có thể sử dụng nó để xem các tệp lớn như sau:
tecmint@TecMint ~ $ dmesg | more
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
4.4.6)
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] Centaur CentaurHauls
[ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[ 0.000000] x86/fpu: Using 'eager' FPU context switches.
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
--More--
12. Lệnh Less
Less là ngược của lệnh more trên và nó cung cấp thêm tính năng và nhanh hơn đối với các tệp lớn.
Sử dụng nó theo cùng cách như more:
tecmint@TecMint ~ $ dmesg | less
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
4.4.6)
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] Centaur CentaurHauls
[ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[ 0.000000] x86/fpu: Using 'eager' FPU context switches.
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
:
Đó là tất cả cho bây giờ, hãy cho chúng tôi biết về bất kỳ công cụ dòng lệnh hữu ích nào không được đề cập ở đây, hoạt động như các bộ lọc văn bản trong Linux thông qua phần bình luận dưới đây.