1. dd
磁盘写入1G数据用的时间和写入速率
time dd if=/dev/zero of=txt of=1M count=1000
2. RPM(Redhat Package Manager)命令
查询指定软件的安装路径与文件列表
rpm -ql <Package>
查询指定软件的配置文件
rpm -qc <Package>
查询指定软件有那个软件所安装
rpm -qf <Package>
查询指定软件的依赖软件(指定软件是基于那个软件安装的)
rpm -qpi <Package>
追踪软件状态(软件是否被篡改),根据返回状态查看具体的更改,如果没有返回内容则未被篡改
rpm -V <Package>
返回状态:
5: MD5状态被改变
S: 文件大小被改变
L: 链接文件的源被改变
T: 文件的最后修改时间被改变
D: 设备改变
U: 用户被改变
G: 用户组被改变
M: 包括权限和类型在内的模式已改变
?: 不可读文件
rpm的数据库 放在/var/lib/rpm下,修复损坏的数据库资料
rpm --rebuilddb
3. yum(Yellow Dog Update Modify)命令
查看yum源中所有可用的升级,
yum check-update
查看软件包信息
yum info <Package>
yum配置内置变量,Euler系统可以尝试更改下Centos的源获取部分依赖
releasever————系统发行版本号
arch————CPU架构
basearch————系统架构
YUM0-9————shell对应的0-9个变量替换
4. vim
快捷键
多窗口编辑
5. 编译安装
make的作用——将软件源代码编译成计算机可以直接识别的机器语言。
6. 一次性计划任务
at 命令的全量格式
at 12:00 2022-10-17
7. df命令
查看文件系统类型
df -T
查看磁盘inode
df -i
inode的个数决定了分区可以创建文件的数量,该分区有多少个inode就可以创建多少个文件
8. top命令
命令行显示程序名及运行参数
top -c
输出示例:
top - 22:42:42 up 17:46, 4 users, load average: 0.55, 0.59, 0.46
Tasks: 197 total, 1 running, 196 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4.8 us, 2.6 sy, 0.0 ni, 92.4 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 3861256 total, 968252 free, 1068432 used, 1824572 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2497564 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24068 root 20 0 1164484 321768 42128 S 23.6 8.3 23:19.39 kube-apiserver --advertise-address=16.188.100.6 --allow-privileged=true --authorization-mode=Node,RBAC --client-ca-file=/etc/kubernetes/pki/ca.crt --enable-admission-plugins=+
指定刷新间隔(默认3秒)
top -d <Time>
显示活跃进程
top -i
显示指定数量的进程
top -n <Number>
显示指定PID的进程
top -p <PID>
显示指定用户的进程
top -u <User>
CPU占用us的含义:用户空间占用CPU时间百分比,在默认刷新3s的间隔下,us=cpu占用时间/3s #(/表示除以)
top命令输入:
M: 按照内存使用率排序
N: 根据进程号排序
z: 高亮显示
1(阿拉伯数字1):查看CPU个数,显示各逻辑CPU状态
f: 查看全称信息,输出示例:
Fields Management for window 1:Def, whose current sort field is %CPU
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
* PID = Process Id
* USER = Effective User Name
* PR = Priority
* NI = Nice Value
* VIRT = Virtual Image (KiB)
* RES = Resident Size (KiB)
* SHR = Shared Memory (KiB)
* S = Process Status
%CPU = CPU Usage
* %MEM = Memory Usage (RES)
* TIME+ = CPU Time, hundredths
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
RUID = Real User Id
RUSER = Real User Name
SUID = Saved User Id
SUSER = Saved User Name
GID = Group Id
GROUP = Group Name
PGRP = Process Group Id
TTY = Controlling Tty
TPGID = Tty Process Grp Id
SID = Session Id
nTH = Number of Threads
P = Last Used Cpu (SMP)
TIME = CPU Time
SWAP = Swapped Size (KiB)
CODE = Code Size (KiB)
DATA = Data+Stack (KiB)
nMaj = Major Page Faults
nMin = Minor Page Faults
nDRT = Dirty Pages Count
WCHAN = Sleeping in Function
Flags = Task Flags <sched.h>
CGROUPS = Control Groups
SUPGIDS = Supp Groups IDs
SUPGRPS = Supp Groups Names
TGID = Thread Group Id
ENVIRON = Environment vars
vMj = Major Faults delta
vMn = Minor Faults delta
USED = Res+Swap Size (KiB)
nsIPC = IPC namespace Inode
nsMNT = MNT namespace Inode
nsNET = NET namespace Inode
nsPID = PID namespace Inode
nsUSER = USER namespace Inode
nsUTS = UTS namespace Inode
d: 块状显示高亮行
9. 路由命令
查看路由表
route -n
输出示例:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 16.188.100.2 0.0.0.0 UG 0 0 0 ens33
10.244.219.64 0.0.0.0 255.255.255.192 U 0 0 0 *
10.244.219.71 0.0.0.0 255.255.255.255 UH 0 0 0 cali9b2a359ac01
10.244.219.72 0.0.0.0 255.255.255.255 UH 0 0 0 calid43fa40202c
10.244.219.73 0.0.0.0 255.255.255.255 UH 0 0 0 caliba7c6861cce
16.188.100.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
添加默认网关为16.188.100.254
route add default gw 16.188.100.254
添加网段
route add -net 16.188.100.0/24 gw 16.188.100.254
添加路由记录,指定eth0网卡传输到16.188.100.0网段
route add -net 16.188.100.0 netmask 255.255.255.0 dev eth0
删除默认网关
route del default gw 16.188.100.254
删除指定网段的网关记录
route del -net 16.188.100.0/24
配置文件设置路由参数
[root@master ~]# vim /etc/sysconfig/network-scripts/route-eth0
16.188.100.0/24 via 172.16.8.88
[root@master ~]# systemctl restart network
路由追踪
traceroute -n <IP>
traceroute -I <DomainName>
另外,查询DNS记录
nslookup <Domain>
dig <Domain>
10. 内核模块
查询已加载的内核模块
lsmod
查看已加载的模块信息
modinfo <ModuleName>
加载内核模块
modprobe <MouleName>
卸载内核模块
modprobe -r <ModuleName>
开机加载文件: /etc/rc.sysinit
echo "modprobe <ModuleName>" > /etc/rc.sysinit
内核参数配置文件:/etc/sysctl.conf,使参数生效
sysctl -p
11. history
Ctrl+r 打开history搜索,输入关键字可在历史命令中搜索相关命令,按Enter即可输入命令
history显示日期和时间
export HISTTIMEFORMAT='%F-%T '
12. 控制台快捷键
快捷键 | 功能 | 快捷键 | 功能 |
Ctrl+a /Home | 移至行首 | Ctrl+u | 删除光标至行首的字符 |
Ctrl+e /End | 移至行尾 | Ctrl+k | 删除光标至行尾的字符 |
Ctrl+f | 右移一个字符 | Ctrl+w | 删除光标前一个单词 |
Ctrl+b | 左移一个字符 | Alt+d | 删除光标后一个单词 |
13. Bash环境
变量属性设置
typeset
预定义变量
declare
位置变量$*和$@的区别:
两者都代表脚本所有参数的内容,区别在于$*会将所有的参数看做一个整体,$@将所有的参数作为个体看待。
变量的展开替换
${var:-word} if var exist and not null,return var;else return word
${var:+word} if var exist and not null,return word;else return null
${var:=word} if var exist and not null,return var;else set var=word
${var:?word} if var exist and not null,return var;else print 'var:word'
修改变量的值后输出
[root@master scripts]# cat vartest.sh
#!/bin/bash
Content=`head -1 /etc/passwd`
echo ${Content}
echo ''
echo ${Content#*:} #从头删除,执行最短匹配
echo ${Content##*:} #从头删除,执行最长匹配
echo ${Content%:*} #从尾删除,执行最短匹配
echo ${Content%%:*} #从尾删除,执行最长匹配
echo ''
echo ${Content/root/admin} #替换第一个匹配的root为admin
echo ${Content//root/admin} #替换所有匹配的root为admin
[root@master scripts]# ./vartest.sh
root:x:0:0:root:/root:/bin/bash
x:0:0:root:/root:/bin/bash
/bin/bash
root:x:0:0:root:/root
root
admin:x:0:0:root:/root:/bin/bash
admin:x:0:0:admin:/admin:/bin/bash
数组
数组索引是从0开始的整数,无大小限制
创建数组
listname[index]=value
listname=(value1 value2 ...)
定义空数组(类似Python的变量占位)
declare -a <listname>
数组调用
${listname[index]}
${listname[@]} #调用所有数组成员
${listname[*]} #调用所有数组成员
${#listname[index]} #返回${listname[index]}的长度
${#listname[@]} #返回数组中的元素个数
${#listname[*]} #返回数组中的元素个数
数值计算
语法格式: $((expression))
$((x+y)) #变量相加
- 减
* 乘
/ 除
% 取余
++ 自加1
-- 自减1
** 幂运算
expr 工具:
expr arg1 + arg2 #加
- 减
\* 乘
/ 除
% 取余
内容测试
需要注意,“[”之后,“]”之前必须要有空格
[ -s FILE ] 文件存在且不为空
[ -e FILE ] 文件存在
[ -n STRING ] 字符串长度不为0
[ -z STRING ] 字符串长度为0
14. sed命令
-f: 从文件中读取脚本指令
sed -f sed.sh test.txt
sed 替换执行多个指令的3种方式
使用";"隔离
sed -i 's/yes/no/;s/landpage/LandingPage/' /usr/local/land/BOOT/classes/aplication.proprities
使用-e选项
sed -i -e 's/yes/no/' -e 's/landpage/LandingPage/' /usr/local/land/BOOT/classes/aplication.proprities
分行写
sed -i '
> s/yes/no/
> s/landpage/LandingPage/' /usr/local/land/BOOT/classes/aplication.proprities
first~step: 从first开始打印,步长为step
sed -n '1~2p' test.txt #打印奇数行
替换匹配到的第n个内容
替换第二个body为/body
sed -i 's#body#/body#2' /usr/local/nginx/index.html
15. awk
输出字段个数
awk '{print NF}'
输出最后一个字段
awk '{print $NF}'
打印倒数第3行
awk '{print $(NF-3)}' destfile
打印空白行个数
awk '/^$/ (x+=1) END {print x}' destfile
16. shell
几种不同的运行脚本的方式:
1. 添加执行权限后使用 ./scripts.sh,用户当前shell下开启一个新的子进程,并在子进程的环境中运行脚本程序;
2. 使用bash或者sh运行脚本,系统不再关心脚本 #! 后面的解释器,直接使用bash或者sh为解释器解释并运行程序;
3. 使用 . scripts.sh 或者source scripts.sh,脚本将在用户当前的shell中运行。