[工具] Shell 显示系统常用信息

介绍

基本信息

作者:朱明宇
名称:显示系统常用信息
作用:显示系统常用信息

使用方法

1. 在此脚本的分割线内写入相应的内容
2. 给此脚本添加执行权限
3. 执行此脚本

脚本分割线里的变量

1. times=5 #显示系统常用信息的次数
2. sleeptime=0.3 #大部分行与行之间显示的间隔时间

注意

1. 需要安装 sysstat 软件
2. 执行此脚本的用户能够使用 sudo ip a s 命令
3. 执行此脚本的用户能够使用 sudo ss -ntulap 命令
4. 搭建了 KVM 虚拟化平台后执行此脚本的用户能够使用 sudo virsh list 命令后才能实现

脚本

#!/bin/bash

####################### Separator ########################
times=5
sleeptime=0.3
####################### Separator ########################

nowtime=1

while (( nowtime <= times))
do
        echo -e "Start Monitoring: \c"
	for i in {1..94}
	do
	        echo -e "#\c"
		sleep 0.01
        done
	echo

	sleep $sleeptime
        host=`hostname`
        echo -e "Name:\t\t\t\t\t\t\t \033[1m$host\033[0m"

        ip=`sudo ip a s | awk '/[1-2]?[0-9]{0,2}\.[1-2]?[0-9]{0,2}/&&!/127.0.0.1/{print $2}' | awk -F/ '{print $1}'`
	for iip in $(echo $ip)
        do
		sleep $sleeptime
                echo -e "IP Address:\t\t\t\t\t\t \033[1m$iip\033[0m"
        done

        sleep $sleeptime

        cpu=`top -bn 1 | awk -F',' '/^%Cpu/{print $4 }' | awk '{print $1}' | awk '{print 100-$1}'`
        echo -e "CPU Usage (Total):\t\t\t\t\t \033[1m$cpu%\033[0m"

        sleep $sleeptime

        mem=`free | grep Mem | awk '{print $3/$2 * 100.0}' | egrep -o "[1]?[0-9]{0,2}\.[0-9]"`
        echo -e "Memory Usage (Total):\t\t\t\t\t \033[1m$mem%\033[0m"

	directory=`df -h | grep -v run | grep -v boot | awk '$1~/\/dev/{print $6}'`
        for idirectory in `echo $directory`
        do
                sleep $sleeptime
                directoryusage=`df -h | grep -v run | grep -v boot | awk '$1~/\/dev/{print}' | grep $idirectory$ | awk '{print $5}'`
		if [ $idirectory == / -o $idirectory == /sda -o $idirectory == /sdb  ];then
                        echo -e "Directory Usage ($idirectory):\t\t\t\t\t \033[1m$directoryusage\033[0m"
	        else
                        echo -e "Directory Usage ($idirectory):\t\t\t\t \033[1m$directoryusage\033[0m"
		fi
        done

	sudo -l | grep 'virsh list' &> /dev/null
        if [ $? -eq 0 ];then
	        sleep $sleeptime
	        virtual=`sudo virsh list | egrep [0-9] | wc -l`
	        echo -e "Number of Virtual Machines (Total):\t\t\t \033[1m$virtual\033[0m"
        fi

        sleep $sleeptime

        user=`who | wc -l`
        echo -e "Number of User Logins (Total):\t\t\t\t \033[1m$user\033[0m"

        soft=`rpm -qa | wc -l`
        echo -e "Number of Softwares (Total):\t\t\t\t \033[1m$soft\033[0m"

        sleep $sleeptime

        port=`sudo ss -ntulap | wc -l`
        echo -e "Number of Open Ports (Total):\t\t\t\t \033[1m$port\033[0m"

        which sar &> /dev/null
        if [ $? -eq 0 ];then
                networkcard=`ifconfig | awk -F: '/flags/&&!/lo/{print $1}'`
                for inetworkcard in `echo $networkcard`
                do
                        networkread="`sar -n DEV 1 1 | grep $inetworkcard | awk '/[0-9][0-9]:[0-9][0-9]/{print $3/1000}'` m/s"
                        networkwrite="`sar -n DEV 1 1 | grep $inetworkcard | awk '/[0-9][0-9]:[0-9][0-9]/{print $4/1000}'` m/s"
			echo $inetworkcard | grep eth &> /dev/null
			if [ $?  -ne 0 ];then
	                echo -e "Network Card IO ($inetworkcard):\t\t\t\t \033[1m$networkread\033[0m (Read)\t\033[1m$networkwrite\033[0m (Write)"
		        else
	                echo -e "Network Card IO ($inetworkcard):\t\t\t\t\t \033[1m$networkread\033[0m (Read)\t\033[1m$networkwrite\033[0m (Write)"
			fi
                done
        fi

        which iostat &> /dev/null
        if [ $? -eq 0 ];then
	        disk=`iostat -d -k 1 1 | awk '!/^$/&&!/Device/&&!/Linux/{print $1}'`
                for idisk in `echo $disk`
	        do
			sleep $sleeptime
		        diskread="`iostat -d -k 1 1 | grep $idisk |  awk '{print $3/1000}'` m/s"
		        diskwrite="`iostat -d -k 1 1 | grep $idisk |  awk '{print $4/1000}'` m/s"
			echo $idisk | grep 'nvme' &> /dev/null
			if [ $? -eq 0 ];then
		                echo -e "Disk IO (/dev/$idisk):\t\t\t\t\t \033[1m$diskread\033[0m (Read)\t\033[1m$diskwrite\033[0m (Write)"
		        else
		                echo -e "Disk IO (/dev/$idisk):\t\t\t\t\t \033[1m$diskread\033[0m (Read)\t\033[1m$diskwrite\033[0m (Write)"
			fi
	        done

        fi

        echo -e "Complete Monitoring: \c"
        for i in {1..91}
        do
                echo -e "#\c"
                sleep 0.01
        done
        echo
        sleep $sleeptime

        let nowtime++
done

        echo -e "Terminal Monitoring: \c"
        for i in {1..91}
        do
                echo -e "#\c"
                sleep 0.01
        done

exit

[步骤] Linux 加密压缩 (tar 版)

步骤一:创建测试文件

# touch test.txt

(补充:这里以创建 test.txt 文件为例)

步骤二:加密压缩文件或目录

2.1 交互式加密压缩文件或目录

# tar -zcf - test.txt | openssl des3 -salt | dd of=test1.tar.gz
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
0+1 records in
0+1 records out
224 bytes copied, 7.04902 s, 0.0 kB/s


补充:
1) 这里以将 test.txt 文件加密压缩成 test1.tar.gz (压缩)包为例
2) 如果要以 bzip2 的格式进行压缩,则将命令中的 -zcf 换成 -jcvf 将 test1.tar.gz 换成 test1.tar.bz2
3) 如果要以 xz 的格式进行压缩,则将命令中的 -zcf 换成 -Jcvf 将 test1.tar.gz 换成 test1.tar.xz

2.2 非交互式加密压缩文件或目录

# tar -zcf - test.txt | openssl des3 -salt -f eternalcenter | dd of=test2.tar.gz
des3: Unrecognized flag f
des3: Use -help for summary.
0+0 records in
0+0 records out
0 bytes copied, 0.00376576 s, 0.0 kB/s


补充:
1) 这里以将 test.txt 文件加密压缩成 test1.tar.gz (压缩)包并且将密码设置为 eternalcenter 为例
2) 如果要以 bzip2 的格式进行压缩,则将命令中的 -zcf 换成 -jcvf 将 test1.tar.gz 换成 test2.tar.bz2
3) 如果要以 xz 的格式进行压缩,则将命令中的 -zcf 换成 -Jcvf 将 test1.tar.gz 换成 test2.tar.xz

步骤三:解压加密文件或目录

3.1 交互式解压加密文件或目录

3.1.1 删除原测试目录和里面的文件
# rm -rf test.txt

(补充:这里以删除 test.txt 文件为例)

3.1.2 交互式解压加密文件或目录
# dd if=test2.tar.gz | openssl des3 -d | tar zxf -
0+1 records in
0+1 records out
224 bytes copied, 0.000589721 s, 380 kB/s
enter des-ede3-cbc decryption password:
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.


补充:
1) 这里以解压 test2.tar.gz (压缩)包为例
2) 如果是 bzip2 格式的(压缩)包,则将命令中的 -zxf 换成 -jcvf 将 test1.tar.gz 换成 test1.tar.bz2
3) 如果是 xz 格式的(压缩)包,则将命令中的 -zxf 换成 -Jcvf 将 test1.tar.gz 换成 test1.tar.xz

3.2 非交互式解压加密文件或目录

3.2.1 删除原测试目录和里面的文件
# rm -rf test.txt

(补充:这里以删除 test.txt 文件为例)

3.2.2 非交互式解压加密文件或目录
# dd if=test1.tar.gz | openssl des3 -d -k eternalcenter | tar zxf -
0+1 records in
0+1 records out
224 bytes copied, 0.000574539 s, 390 kB/s
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.


补充:
1) 这里以解压 test1.tar.gz (压缩)包并且解压密码为 eternalcenter 为例
2) 如果是 bzip2 格式的(压缩)包,则将命令中的 -zxf 换成 -jcvf 将 test1.tar.gz 换成 test1.tar.bz2
3) 如果是 xz 格式的(压缩)包,则将命令中的 -zxf 换成 -Jcvf 将 test1.tar.gz 换成 test1.tar.xz

[步骤] Linux 加密压缩 (zip 版)

步骤一:创建测试目录和测试文件

# mkdir test
# touch test/test.txt

(补充:这里以创建 test 目录和里面的 test.txt 文件为例)

步骤二:加密压缩文件或目录

2.1 交互式加密压缩文件或目录

# zip -re test1.zip test
Enter password: 
Verify password: 
  adding: test/ (stored 0%)
  adding: test/test.txt (stored 0%)

(补充:这里以将 test 目录和里面的 test.txt 文件加密压缩成 test1.zip (压缩)包为例)

2.2 非交互式加密解压文件或目录

# zip -rP eternalcenter test2.zip test
  adding: test/ (stored 0%)
  adding: test/test.txt (stored 0%)

(补充:这里以将 test 目录和里面的 test.txt 文件加密压缩成 test2.zip (压缩)包并且将密码设置为 eternalcenter 为例)

步骤三:解压加密文件或目录

3.1 交互式解压加密文件或目录

3.1.1 删除原测试目录和里面的文件
# rm -rf test

(补充:这里以删除 test 目录和里面的文件为例)

3.1.2 交互式解压加密文件或目录
# unzip test2.zip
Archive:  test2.zip
   creating: test/
[test2.zip] test/test.txt password: 
 extracting: test/test.txt

(补充:这里以解压 test2.zip (压缩)包为例)

3.2 非交互式解压加密文件或目录

3.2.1 删除原测试目录和里面的文件
# rm -rf test

(补充:这里以删除 test 目录和里面的文件为例)

3.2.2 非交互式解压加密文件
# unzip -P eternalcenter test1.zip 
Archive:  test1.zip
   creating: test/
 extracting: test/test.txt  

(补充:这里以解压 test2.zip (压缩)包并且解压密码为 eternalcenter 为例)

[命令] Linux 命令 rm (删除目录或文件)

案例一:删除某一个文件

# rm <file>

案例二:删除某一个目录以及目录里的所有文件

# rm -r <directory>

案例三:非交互式删除某一个目录以及目录里的所有文件

# rm -rf <directory>

案例四:非交互式删除当前目录下的所有隐藏文件

# rm -rf .#*

案例五:非交互式删除所有特定后缀名称的文件

# rm -rf *txt

(补充:这里以非交互式删除所有以 txt 作为后缀名称的文件为例)