获取主机 IP 地址:
ifconfig 命令获取网络信息:
首先通过 ifconfig 获取网络信息;
然后通过 grep 进行赛选,-A 选项表示,除了显示满足要求的那一行外,还显示它之后的一行;
然后通过 xargs 获取过滤后的内容,并输出,一次输出两行(将两行合并成一行);
最后通过 cut 进行分割,获取想要的内容:
it@testsvr:~$ ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.10.105 netmask 255.255.255.0 broadcast 10.10.10.255
inet6 fe80::8fe8:54d3:3956:e8a6 prefixlen 64 scopeid 0x20<link>
ether 00:50:56:94:fd:b1 txqueuelen 1000 (Ethernet)
RX packets 243685 bytes 257259963 (257.2 MB)
RX errors 0 dropped 7 overruns 0 frame 0
TX packets 88031 bytes 6713353 (6.7 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 15.83.246.94 netmask 255.255.255.0 broadcast 15.83.246.255
inet6 fe80::5907:5319:fd31:3be2 prefixlen 64 scopeid 0x20<link>
ether 00:50:56:94:41:dd txqueuelen 1000 (Ethernet)
RX packets 53608 bytes 3973156 (3.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 30096 bytes 11723379 (11.7 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 4048 bytes 367602 (367.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4048 bytes 367602 (367.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
it@testsvr:~$ ifconfig | grep -A 1 ^en
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.10.105 netmask 255.255.255.0 broadcast 10.10.10.255
--
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 15.83.246.94 netmask 255.255.255.0 broadcast 15.83.246.255
it@testsvr:~$ ifconfig | grep -A 1 ^en | xargs -l3
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.10.10.105 netmask 255.255.255.0 broadcast 10.10.10.255 --
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 15.83.246.94 netmask 255.255.255.0 broadcast 15.83.246.255
it@testsvr:~$ ifconfig | grep -A 1 ^en | xargs -l3 | cut -d " " -f1,6,8
ens160: 10.10.10.105 255.255.255.0
ens192: 10.10.11.104 255.255.255.0
ip addr 命令:
过程很类似,区别在于合并行的数不一样,以及切割后,获取的列数也不一样:
it@testsvr:~$ ip addr | grep -A 1 ens | xargs -l6 | cut -d " " -f2,20
ens160: 10.10.10.105/24
ens192: 10.10.11.104/24
查出分区空间使用率的最大百分比值:
通过 df 命令获取分区信息‘
然后通过 grep 进行赛选,找到磁盘分区;
tr 将分割符从空格替换成 %;然后再通过 cut 根据 % 分割,取第 5 列;然后再通过 sort 进行从大到小排序,选择最大的:
it@testsvr:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 988552 0 988552 0% /dev
tmpfs 203500 1412 202088 1% /run
/dev/sda5 163571508 8833108 146359776 6% /
tmpfs 1017492 0 1017492 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 1017492 0 1017492 0% /sys/fs/cgroup
/dev/loop1 56320 56320 0 100% /snap/core18/1880
/dev/loop3 51072 51072 0 100% /snap/snap-store/467
/dev/loop2 63616 63616 0 100% /snap/gtk-common-themes/1506
/dev/loop5 52352 52352 0 100% /snap/snap-store/518
/dev/loop8 56832 56832 0 100% /snap/core18/1988
/dev/loop6 31872 31872 0 100% /snap/snapd/11036
/dev/loop0 261760 261760 0 100% /snap/gnome-3-34-1804/36
/dev/loop7 66432 66432 0 100% /snap/gtk-common-themes/1514
/dev/loop9 224256 224256 0 100% /snap/gnome-3-34-1804/66
/dev/sda1 523248 4 523244 1% /boot/efi
tmpfs 203496 24 203472 1% /run/user/125
tmpfs 203496 8 203488 1% /run/user/1000
/dev/loop10 33152 33152 0 100% /snap/snapd/11107
it@testsvr:~$ df | grep ^/dev/s
/dev/sda5 163571508 8833108 146359776 6% /
/dev/sda1 523248 4 523244 1% /boot/efi
it@testsvr:~$ df | grep ^/dev/s | tr -s " "
/dev/sda5 163571508 8833108 146359776 6% /
/dev/sda1 523248 4 523244 1% /boot/efi
it@testsvr:~$ df | grep ^/dev/s | tr -s " " | cut -d " " -f5
6%
1%
it@testsvr:~$ df | grep ^/dev/s | tr -s " " | cut -d " " -f5 | sort -nr
6%
1%
it@testsvr:~$ df | grep ^/dev/s | tr -s " " | cut -d " " -f5 | sort -n
1%
6%
it@testsvr:~$ df | grep ^/dev/s | tr -s " " | cut -d " " -f5 | sort -nr
6%
1%
it@testsvr:~$ df | grep ^/dev/s | tr -s " " | cut -d " " -f5 | sort -nr | head -l
head: invalid option -- 'l'
Try 'head --help' for more information.
it@testsvr:~$ df | grep ^/dev/s | tr -s " " | cut -d " " -f5 | sort -nr | head -1
6%
统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来:
先通过 tty 命令,查看当前的终端
通过 cat 命令查看用户信息,并通过 grep 筛选出非/sbin/nologin的用户;
然后通过 cut 命令以 “:" 作为分隔符进行切割,并保留第一列(用户名);
然后在通过 wc 统计行数,为了显示出具体的用户名,在统计行之前通过 tee 将输出的用户名定向到终端:
it@testsvr:~$ tty
/dev/pts/1
it@ubuntusvr:~$ cat /etc/passwd |grep -v /sbin/nologin
root:x:0:0:root:/root:/bin/bash
sync:x:4:65534:sync:/bin:/bin/sync
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
speech-dispatcher:x:114:29:Speech Dispatcher,,,:/run/speech-dispatcher:/bin/false
hplip:x:119:7:HPLIP system user,,,:/run/hplip:/bin/false
whoopsie:x:120:125::/nonexistent:/bin/false
gnome-initial-setup:x:124:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:125:130:Gnome Display Manager:/var/lib/gdm3:/bin/false
it:x:1000:1000:it,,,:/home/it:/bin/bash
it@ubuntusvr:~$ cat /etc/passwd |grep -v /sbin/nologin | cut -d: -f1
root
sync
tss
speech-dispatcher
hplip
whoopsie
gnome-initial-setup
gdm
it
it@testsvr:~$ cat /etc/passwd | grep -v /sbin/nologin | cut -d: -f1 | tee /dev/pts/1 | wc -l
root
sync
tss
speech-dispatcher
hplip
whoopsie
gnome-initial-setup
gdm
it
9
上面的方法,你必须要知道具体的终端才行,所有我们可以使用两条命令,并通过 &&(或 ;) 来连接,同时执行两条命令来实现:
rep -v /sbin/nolcat /etc/passwd |grep -v /sbin/nologin | cut -d: -f1 && cat /etc/passwd |grep -v /sbin/nologin | cut -d: -f1 | wc -l
root
sync
tss
speech-dispatcher
hplip
whoopsie
gnome-initial-setup
gdm
it
9
it@ubuntusvr:~$ cat /etc/passwd |grep -v /sbin/nologin | cut -d: -f1;cat /etc/passwd |grep -v /sbin/nologin | cut -d: -f1 | wc -l
root
sync
tss
speech-dispatcher
hplip
whoopsie
gnome-initial-setup
gdm
it
9
查出用户UID最大值的用户名、UID及shell类型:
通过 cat 命令获取 passwd 文件内容(用户信息);
然后使用 sort 以 “:" 作为切割符,根据第三例进行从大到小的排序;然后通过 head 获取最大的;
最后通过 cut 根据 “:" 作为切割符,选择 1,3,7 列:
it@testsvr:~$ cat /etc/passwd | sort -t : -k 3 -nr | head -1
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
it@testsvr:~$ cat /etc/passwd | sort -t : -k 3 -nr | head -1 | cut -d : -f1,3,7
nobody:65534:/usr/sbin/nologin
查出/tmp的权限,以数字方式显示:
通过 stat 命令获取文件的权限,因为要以数字方式显示,所以不能使用 ls -l 的方式;
然后通过 grep 进行筛选,筛选的关键字有很多,只要能找到对应的行就行;
然后通过 tr 命令,将 空格替换成 “:",;
然后通过 cut 以 “:" 作为分隔符,获取相应的列(获取权限);
然后再次使用 grep 获取权限(数字);
it@testsvr:~$ stat /tmp/
File: /tmp/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 805h/2053d Inode: 7208961 Links: 18
Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-05 09:37:48.141425685 +0800
Modify: 2021-03-05 07:39:40.888559282 +0800
Change: 2021-03-05 07:39:40.888559282 +0800
Birth: -
it@testsvr:~$ stat /tmp/ | grep Uid
Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
it@testsvr:~$ stat /tmp/ | grep Uid | tr -s " " :
Access:(1777/drwxrwxrwt):Uid:(:0/:root):Gid:(:0/:root)
it@testsvr:~$ stat /tmp/ | grep Uid | tr -s " " : | cut -d : -f2
(1777/drwxrwxrwt)
it@testsvr:~$ stat /tmp/ | grep Uid | tr -s " " : | cut -d : -f2 | grep -oE [0-9]{4}
1777
统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序:
通过 ss -nt 或者本地主机的连接;
然后通过 tr 命令进行分隔符替换,替换成 “:";
然后使用 tail 命令,删掉第一行,
然后再使用 cut 命令进行分隔,并只保留远端 IP;
然后使用 sort 进行排序(将相同的 IP 放到一起);
然后再使用 uniq 进行去重,并通过 -c 选项显示重复的次数;
最后再次使用 sort 进行从大到小的排序:
it@ubuntusvr:~$ ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 10.10.10.104:22 10.10.10.34:50701
ESTAB 0 0 10.10.10.104:22 10.10.10.34:50711
ESTAB 0 0 10.10.10.104:22 10.10.10.105:47372
ESTAB 0 0 10.10.10.104:22 10.10.10.34:50707
ESTAB 0 0 10.10.10.104:22 10.10.10.34:50709
it@ubuntusvr:~$ ss -nt | tr -s " " :
State:Recv-Q:Send-Q:Local:Address:Port:Peer:Address:Port:Process:
ESTAB:0:0:10.10.10.104:22:10.10.10.34:50701:
ESTAB:0:36:10.10.10.104:22:10.10.10.34:50711:
ESTAB:0:0:10.10.10.104:22:10.10.10.105:47372:
ESTAB:0:0:10.10.10.104:22:10.10.10.34:50707:
ESTAB:0:0:10.10.10.104:22:10.10.10.34:50709:
it@ubuntusvr:~$ ss -nt | tr -s " " : | tail -n +2
ESTAB:0:0:10.10.10.104:22:10.10.10.34:50701:
ESTAB:0:36:10.10.10.104:22:10.10.10.34:50711:
ESTAB:0:0:10.10.10.104:22:10.10.10.105:47372:
ESTAB:0:0:10.10.10.104:22:10.10.10.34:50707:
ESTAB:0:0:10.10.10.104:22:10.10.10.34:50709:
it@ubuntusvr:~$ ss -nt | tr -s " " : | tail -n +2 | cut -d: -f6
10.10.10.34
10.10.10.34
10.10.10.105
10.10.10.34
10.10.10.34
it@ubuntusvr:~$ ss -nt | tr -s " " : | tail -n +2 | cut -d: -f6 | sort -n
10.10.10.105
10.10.10.34
10.10.10.34
10.10.10.34
10.10.10.34
it@ubuntusvr:~$ ss -nt | tr -s " " : | tail -n +2 | cut -d: -f6 | sort -n | uniq -c
1 10.10.10.105
4 10.10.10.34
it@ubuntusvr:~$ ss -nt | tr -s " " : | tail -n +2 | cut -d: -f6 | sort -n | uniq -c | sort -nr
4 10.10.10.34
1 10.10.10.105