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