Lệnh Linux: Cách sử dụng echo-grep-awk-find

Các lệnh echo, grep, awk chủ yếu để hiển thị hoặc tìm một một số thứ cần tìm bên trong tập tin hoặc một danh sách nội dung nào đó nhất định. Còn find thì chủ yếu dùng để tìm tập tin bên trong các thư mục đáp ứng với một số yêu cầu tìm kiếm của bạn. Trong bài viết này mình sẽ đưa ra một số trường hợp phổ dụng nhất khi sử dụng các lệnh trên.

echo + awk

echo là lệnh hiển thị một thứ còn awk là bộ lọc giữ lại những gì cần hiển thị.

Echo ra một chũi chỉ tính từ ký tự thứ 8 trở đi 1000 ký tự tiếp theo:

[root@voduy ~]# echo "USCAGoleta93117" | awk '{print substr($0,8,1000)}'

eta93117

In ra ký tự thứ 1 2 3 của dòng đầu tiên và phải cách nhau bằng space:

root@voduy:~# cat /etc/issue  | awk 'NR==1 {print $1" "$2" "$3}'

Ubuntu 19.04 LTS
NR==1 tức là dòng 1
$1" "$2" "$3 tức là cột 1 2 và 3 cách nhau cách space " "

awk in ra cột đầu tiên trong nội dung cho trước:

root@voduy:~# cat /etc/hosts | awk {'print $1'}

127.0.0.1
13.1.43.12
::1
fe00::0
ff00::0
ff02::1
ff02::2
ff02::3

In ra tất cả các cột trừ cột đầu tiên:

root@voduy:~# cat /etc/hosts |awk '{$1 = ""; print $0}'

 localhost.localdomain localhost
 ip6-localhost ip6-loopback
 ip6-localnet
 ip6-mcastprefix
 ip6-allnodes
 ip6-allrouters
 ip6-allhosts

In ra dòng đầu tiên của cột đầu tiên:

root@voduy:~# awk 'NR==1{print $1}' /etc/hosts

127.0.0.1

In ra dòng nào có chũi “clflush size“:

root@voduy:~# awk -F: '/clflush size/' /proc/cpuinfo

clflush size    : 64

Chỉ in ra dòng nào có chũi “clflush size“, và cụ thể là cột thứ 2 của hàng đó:

root@voduy:~# awk -F: '/clflush size/ {name=$2} END {print name}' /proc/cpuinfo

 64

In ra và loại bỏ các dòng trùng lặp giống nhau nếu có:

root@voduy:~# cat /etc/hosts | awk '!x[$0]++'

Hiện ra theo list dãy số cho trước:

root@voduy:~# echo 10.10.{1..254}.{1..254} | tr ' ' '\n'

10.10.254.250
10.10.254.251
10.10.254.252
10.10.254.253
10.10.254.254

Hiển thị tổng số dòng line trong file:

root@voduy:~# cat /etc/passwd | wc -l

342

grep

Hiển thị những dòng nào có chứa ký tự root:

[root@voduy ~]# cat /etc/passwd|grep "root"

root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

In ra những dòng nào có ký tự root đứng đầu dòng:

[root@voduy ~]# cat /etc/passwd|grep "^root"

root:x:0:0:root:/root:/bin/bash

Tìm ký tự xuyên file trong thư mục /etc:

[root@voduy ~]# egrep "root" /etc/ -R | cut -d: -f1 | uniq

find

Tìm tập tin hoặc thư mục có tên passwd trong /etc

[root@voduy ~]# find /etc -name passwd

/etc/passwd

Tìm trong thư mục /etc xem file nào có dòng “root:x” port:

[root@voduy ~]# find /etc -type f -print0 | xargs -0 egrep 'root:x'

/etc/group:root:x:0:
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
/etc/group-:root:x:0:

Tìm file có đuôi .log trong folder /var/log và xếp theo thứ tự chữ cái tên:

[root@voduy ~]# find /var/log/ -name "*.log" | sort -k 5 -n

/var/log/anaconda/anaconda.log
/var/log/anaconda/ifcfg.log
/var/log/anaconda/journal.log
/var/log/anaconda/ks-script-2NYYqD.log
/var/log/anaconda/ks-script-sugpFo.log
/var/log/anaconda/packaging.log
/var/log/anaconda/program.log
/var/log/anaconda/storage.log

Tìm file có đuôi .sql và phân quyền lại:

[root@voduy ~]# find /root/ -name "*.sql" | xargs chmod 600

Tìm các danh sách các thư mục có tên public_html trong /home và copy 1 file anaconda-ks.cfg vào:

[root@voduy ~]# find /home -name public_html | xargs -n 1 cp /root/anaconda-ks.cfg

Cám ơn bạn đã đọc hết bài viết, hãy bấm chia sẻ lên mạng xã hội để nhớ rằng bạn đã từng nắm được kiến thức do bài viết này cung cấp rồi:
Share

Trả lời

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 *