Skip to main content

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:

[[email protected] ~]# 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:

[email protected]:~# 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:

[email protected]:~# 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:

[email protected]:~# 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:

[email protected]:~# awk 'NR==1{print $1}' /etc/hosts

127.0.0.1

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

[email protected]:~# 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 đó:

[email protected]:~# 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ó:

[email protected]:~# cat /etc/hosts | awk '!x[$0]++'

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

[email protected]:~# 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:

[email protected]:~# cat /etc/passwd | wc -l

342

grep

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

[[email protected] ~]# 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:

[[email protected] ~]# 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:

[[email protected] ~]# 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

[[email protected] ~]# find /etc -name passwd

/etc/passwd

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

[[email protected] ~]# 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:

[[email protected] ~]# 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:

[[email protected] ~]# 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:

[[email protected] ~]# 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 *

Share