- 命令篇
- ls—查看文件
- cd—切换目录
- history—查看历史使用的命令
- mkdir—创建目录
- rm—删除
- cp—复制
- cat—查看文件
- more—以分页的形式查看
- less—以分页的形式查看
- head—显示文件头行
- tail—显示文件末行
- vim—文本编辑器
- ifconfig—显示网络状态(需要yum安装)
- useradd—添加用户
- userdel—删除用户
- usermod—修改用户信息
- chown—修改文件所属者
- chgrp—修改文件用户组
- chmod—修改文件权限
- getfacl—获取文件特殊权限
- setfacl—设置文件特殊权限
- lsattr—查看文件扩展权限
- chattr—设置文件扩展权限
- stat—查看文件详情
- tar—压缩和解压
- unzip—管理压缩文件 (需要yum安装)
- file—查看文件类型
- sort—排序
- ps—静态查看进程
- uptime—查看cpu负载
- top—动态查看进程情况
- lsof—查看进程打开的文件
- free—查看内存使用情况
- kill、pkill、killall—结束进程
- nice—修改进程优先级
- screen—后台执行 (需要yum安装)
- which—查询命令属于哪个目录
- ntpdate—时间同步(需要yum安装)
- hwclock—查看硬件时间
- lftp—下载工具(需要yum安装)
- rpm—软件包安装
- yum—软件包安装(自动解决依赖)
- ulimit—查看进程最多可以打开文件数
- | tee—读取标准输入的内容,将内容输出成文件
- which—查看可执行文件的位置
- whereis—查看可执行的文件位置和相关文档
- locata—配置系统数据库缓存查找文件(需要yum安装)
- grep—过滤,可配合正则表达式使用
- find—查找
- pv 物理卷管理(需要yum装lvm2)
- vg 逻辑卷管理(需要yum装lvm2)
- lv 逻辑卷组(需要yum装lvm2)
- fdisk 分区
- at 一次性计划任务 (需要yum安装)
- crontab 周期性计划任务(需要yum安装)
- systemctl 进程使用
- dd 用指定方式拷贝文件
- nmcli 网卡调试命令
- netstat 端口检查
- route 路由命令
- ping 网络测试命令
- traceroute 路由追踪命令
- watch 实时监测命令的运行结果
- sed流编辑器
- cut 截取命令
- awk 文本报告生成器
- shell语法
- 匹配0或多个字符
? # 匹配任意一个字符
[abcd] # 匹配abcd任意单一字符
[!abdc] # 匹配除了abcd任意单一字符
[0-9] # 匹配0-9任意单一字符
{string1,string2..} # 匹配string1 和 string2 其中一个字符串 - !/bin/expect 定义脚本使用shell
set timeout 30 设置超时时间,以秒为单位
spawn 让代码输出后的结果进入expect外壳
expect 判断输出结果是否包含某项字符串,没有则立即返回,否则就等待一段时间
seed 需要执行的交互命令,执行完后需要加上”/r”
exp_continue 继续执行的交互命令
interact 执行完后保持交互状态,将控制权交给控制台
$argv 可以接受bash传递过来的参数
命令篇
ls—查看文件
-l 详细列出文件列表
-d 只显示目录,不显示目录中的内容
-S 以文件的大小进行排序
-h 打印文件大小
-r 从小到大排序,配合-S使用
-a 查看隐藏文件
cd—切换目录
history—查看历史使用的命令
mkdir—创建目录
rm—删除
cp—复制
cat—查看文件
more—以分页的形式查看
less—以分页的形式查看
head—显示文件头行
tail—显示文件末行
-n 显示文件末行开始的行数
-f 动态显示文件信息,用于查看日志
vim—文本编辑器
i 光标前插入
I 行首插入
A 光标后输入
A 行尾插入
o 下一行插入
O 上一行插入
x 向后删一个字符
X 向前删一个字符
u 撤销一步,按一次撤销一步
r 替换
Ctrl+v 可视化模块
命令行模式:
:w 保存
:w! 强制保存
:q 退出
:q! 强制退出
:wq 保存并退出
:wq! 强制保存并退出
:x 保存并退出
ifconfig—显示网络状态(需要yum安装)
ifconfig 网卡名:0 ip netmask 子网掩码 # 临时增加ip
Ip addr delete ip dev 网卡名 # 删除临时ip
useradd—添加用户
-d 创建指定用户家目录
-M 不创建用户家目录
-g 设置用户的初始组id
-G 设置用户的附加组
-s 指定用户登录使用的shell
userdel—删除用户
usermod—修改用户信息
-u 修改用户uid
-d 修改用户家目录
-g 修改用户起始组
-G 修改用户附加组
-s 修改用户登录的shell
-L 禁止用户登录
chown—修改文件所属者
chgrp—修改文件用户组
chmod—修改文件权限
chmod 777 文件名
rwx 7
r-x 5
rw- 6
chmod u+s 文件名
文件特殊权限只能给二进制文件,让文件执行者变成文件所属者,只适用于二进制文件
chmod g+s 文件名
文件特殊权限一般给目录,让目录下创建的文件都属于目录所属组,文件和目录都可以设置
chmod o+t 目录
文件特殊权限只能给目录,让目录下创建的文件,别人无法删除
getfacl—获取文件特殊权限
setfacl—设置文件特殊权限
-m 增加扩展权限
-R 需要用到-m之前,表示递归操作
-x 删除单个全部权限
-b 移除扩展权限
例子:setfactl -m 用户名:权限 文件名
lsattr—查看文件扩展权限
chattr—设置文件扩展权限
+i 不能被修改
+a 只能追加内容
-i 取消不能被修改
-a 取消只能追加内容
stat—查看文件详情
tar—压缩和解压
-c 创建文件
-x 解压还原
-v 显示详细的执行过程
-f 指定备份的文件
-t 显示压缩包的内容不解压
-C 指定解压位置
归档类型:
-z 使用gzip类型压缩解压
-j 使用bz2类型压缩解压
-J 使用xz类型压缩解压
压缩比:xz > bz2 > gzip
时间比:gzip > bz2 > xz
unzip—管理压缩文件 (需要yum安装)
zip 压缩包名 文件名 # 打包文件成zip压缩包格式
zip -r 压缩包名 文件夹 # 打包文件夹到压缩包
unzip 压缩包名 # 解压zip压缩包
file—查看文件类型
sort—排序
-n 字符串比较,默认从小到大
-r 反序排序
-t 指定分隔符
-k 指定从第几列开始排序
ps—静态查看进程
-a 显示和当前终端关联的所有进程
-u 显示某个用户的格式显示
-x 显示所有进程,不以终端机来区分
-e 显示所有进程
-f 显示完整格式输出
使用组合1:
ps -aux显示解释:
USER 用户名
PID 进程id
%CPU 占用cpu的百分比
%MEM 占用内存的百分比
VSZ 进程占用的虚拟内存大小# 单位为KB
RSS 进程占用的实际内存大小# 单位为KB
TTY 进程使用的终端
STAT 进程目前状态:
R:正在运行,或是可被运行的程序
S:该进程正在睡眠中
T:该进程停止了
Z:僵尸进程
D:不可中断的进程
5个状态后还可以加一些字母,如下:
含义如下:
<:该进程在高优先级上
N:该进程在低优先级上
L: 表示进程有页面所在内存中
s: 表示进程是控制进程
l: 表示进程是多线程的
+: 表示进程运行在前台
START 进程启动的时间
TIME 进程占用cpu的时间
COMMAND 进程的实际指令
使用组合2:
ps -ef
包含信息如下:
UID 启动该进程的用户
PID 该进程的 ID
PPID 该进程的父进程ID
C 进程生命周期占用的CPU百分比
STIME 进程启动的时候系统时间
TTY 表示在哪个终端上运行
TIME 进程累计占用cpu的时间
CMD 启动的程序名称
uptime—查看cpu负载

含义如下:
13.22.30 系统当前时间
up 20days 系统运行的时间
2 user 系统登录的用户总数
load average 系统负载,三个为系统在单位时间内队伍排序:1分钟,5分钟,15分钟
top—动态查看进程情况
第一行弹出的内容与uptime弹出的信息一行
进程和CPU的信息# 二、三行
Tasks:481total 进程总数
1 runing 正在运行的进程数
480 正在睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
%Cpu(s):0.0us 系统用户进程占cpu百分比
0.0sy 内核中的进程占用cpu百分比
0.0ni 用户改变进程优先级的进程占用的cpu百分比
100 id 空闲cpu百分比
0.0wa cpu等待I/o 完成的时间总量# 如果占用过高可能是磁盘性能问题,建议更换磁盘
0.0hi 硬终端消耗时间
0.0si 软终端消耗时间
0.0 st 虚拟化软件占用cpu时间
内存信息# 四五行
KiB Mem 物理内存
2033552 total 真实内存总量
1376636 free 空闲内存总量
340392 used 使用的内存量
316524 buff/cache 用作内核缓存的内存量
KiB Swap 虚拟交换分区
2097148 total 交换分区总量
2097148 free 空闲总量
0 used 使用量
1518140 avail Mem 总的可利用内存总量
注:如果swap交换分区开始使用,证明内存不够用了
进程信息# 七行
PID 进程数
USER 进程使用的有用户
PR 优先级# 内核决定,用户无法调整
NI 进程优先级
VIRT 进程申请需要的虚拟内存
RES 进程使用的物理内存
SHR 共享内存大小
S 进程状态
进程状态:
D 不可中断状态
R 运行中
S 睡眠状态
T 停止状态
Z 僵尸进程
%CPU cpu占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用cpu时间的总量
COMMAND 命令名/命令行
top快捷键
默认3秒刷新一次
s 修改刷新时间
q 退出
P 按CPU消耗排序# 从大到小
M 按内存消耗排序# 从大到小
T 按时间排序
p 输入进程PID查看某个进程
数字1显示每个CPU使用率,再按一次收起
u/U 输入用户指定查看某个用户
h 帮助
lsof—查看进程打开的文件
-i 列出符合条件的进程
-p 列出指定进程号所打开的文件
-c
-u
free—查看内存使用情况
-b 以字节显示
-m 以MB为单位显示
-k 以KB为单位显示
-g 以GB为单位显示
kill、pkill、killall—结束进程
kill -l # 显示可用的所有信号,-9 使用较多
killall 进程名 # 结束进程
kill -9 PID # 结束进程
nice—修改进程优先级
优先级的取值范围-20,19,数值越小优先级越高,默认是0。同时优先级越高,占用cpu越高
nice n 进程名 # 改变进程优先级
renice -n PID # 改变进程的优先级
screen—后台执行 (需要yum安装)
可以关闭终端但是继续执行后台命令
- screen 进入
- 执行命令
- 按快捷键 Ctrl+a+d
screen -ls # 查看已经建立的会话ID
screen -r 会话ID # 进入保存的回话
screen -S 名字 # 创建指定名字的回话
which—查询命令属于哪个目录
ntpdate—时间同步(需要yum安装)
例子: ntpdate ip # 可以使用ip同步时间,也可以使用域名来同步
hwclock—查看硬件时间
lftp—下载工具(需要yum安装)
rpm—软件包安装
-i 安装软件包
-h 输出显示进度条
-v 显示详细信息
-V 校验软件包,可以看出是否软件包内是否有文件修改
-e 卸载软件包
-U 升级软件包
—nodeps 忽略依赖升级
rpm -q组合查询软件包:
-a 查询所有软件包
-f 查询文件所属的软件包
-i 查询已安装包信息
-l 查询软件包会生成什么文件
-p 查询未安装软件包信息
-R 查询软件包依赖性
yum—软件包安装(自动解决依赖)
-y 安装全部同意
update 升级软件
upgrade 升级软件,不改变软件设置和系统设置
info 查看详细信息
provides 查看文件属于哪个软件包
remove 删除软件包
search 通过关键字来查询软件包
groupinstall 安装工具包
list 软件列表
clean all 删除软件包缓存
ulimit—查看进程最多可以打开文件数
ulimit -pid # 查看进程打开文件数
ulimit -pid 数量 # 设置进程可以打开的进程数
| tee—读取标准输入的内容,将内容输出成文件
which—查看可执行文件的位置
whereis—查看可执行的文件位置和相关文档
locata—配置系统数据库缓存查找文件(需要yum安装)
grep—过滤,可配合正则表达式使用
-v 取反
-i 忽略大小写
^# 以#为开头的文件
#$ 以#为结尾的文件
^$ 空行
-n 对过滤内容加上行号
find—查找
-name 按照文件名字查找
-perm 按照文件的权限查找
-user 按照文件属主来查找文件
-group 按照文件所属组查找文件
-ctime 文件最后一次变化时间,即权限修改
-atime 文件最后一次访问时间,类似cat
-mtime -n/+n 文件最后一次修改时间,类似vim
- n 表示文件更改在多少天以内
+ n 表示文件更改在多少天之前
-type 查找文件类型
-size 查找符合指定的大小的文件
+ 20K超过20K - 20K 没超过20K的
-a 并且
-o 或者
pv 物理卷管理(需要yum装lvm2)
pvscan # 扫描相关卷
pvcreate #创建物理卷
pvdisplay # 显示物理卷
pvremove #移除物理卷
-y # 全部同意
vg 逻辑卷管理(需要yum装lvm2)
vgscan # 扫描逻辑卷
vgcreate # 创建逻辑卷
vgdisplay # 显示逻辑卷
vgremove # 移除逻辑卷
vgextend # 增加逻辑卷
vgreduce # 减少逻辑卷
-s 指定PE块的大小
lv 逻辑卷组(需要yum装lvm2)
lvscan # 扫描逻辑卷组
lvcreate # 创建逻辑卷组
lvdisplay # 查看逻辑卷组
lvremove # 移除逻辑卷组
lvextend # 逻辑卷组扩展
lvreduce # 逻辑卷组减少
-n # 指定逻辑卷名字
-L # 指定lv大小 直接跟M或者G
-l # 指定LE的数量 (n*PE Size)
-r # 顺便扩展正在使用的文件系统大小
fdisk 分区
fdisk 磁盘 # 给该磁盘分区
at 一次性计划任务 (需要yum安装)
-l #查看计划任务(同atq)
-c # 将任务输出到屏幕
atrm # 删除计划任务
crontab 周期性计划任务(需要yum安装)
-l # 查看列表
-u # 指定用户
-r # 删除计划任务
-e # 编辑计划任务
systemctl 进程使用
daemon-reload 服务 # 重新加载服务(部分服务不支持)
start 服务 # 启动服务
stop 服务 # 停止服务
restart 服务 # 重启服务
status 服务 # 查看服务运行状态
enable 服务 # 服务开机自启
disable 服务 # 服务不开机自启
list-unit-files —type service # 查看本机所有开机自启服务
is-enabled 服务 # 服务是否开机自启
list-dependencies 运行级别 # 查看运行级别需要的依赖
isolate 运行级别 # 切换运行级别
set-default 运行级别 # 切换系统默认启动级别
get-default 运行级别 # 查看系统默认启动级别
备注:查看所有运行级别:ll /usr/lib/systemd/system/*.target | grep runlevel
dd 用指定方式拷贝文件
if # 代表输入文件,如果不指定if,默认会从键盘读取输入
of # 代表输出文件,如果不指定of,默认会从屏幕显示
bs # 代表字节为单位的块大小
count # 代表复制的块数
nmcli 网卡调试命令
device status # 查看所有网卡的链接是否正常
connection reload # 重载
connection up 网卡名 # 启动网卡
connection down 网卡名 # 关闭网卡
con # 查看网卡UUID
nmtui # 字符见面配ip
netstat 端口检查
-a # 显示本机所有连接和端口监听
-n # 以数字显示当前建立的有效连接和端口
-u # 显示udp协议
-t # 显示tcp协议
-p # 显示连接对应的PID和程序名
route 路由命令
-n # 查看路由表
添加路由:
route add -net网段 netmask 子网掩码 dev 网卡名
删除路由:
route del -net 网段 netmask 子网掩码 dev 网卡名
ping 网络测试命令
-c # 指定发包数目
-i # 秒数,指定间隔几秒发一次包
-w # 指定等待时间
traceroute 路由追踪命令
-I # 指定网卡
watch 实时监测命令的运行结果
-d # 用高亮显示网卡相关信息
-n # 指定指令执行的间隔时间
sed流编辑器
sed 选项 ‘执行模块’ 文件
选项:
-a 在当前行下面插入文件
-n
-i 替换
-i.bak 替换的同时创建.bak的备份
-r 使用扩展正则表达式
执行命令:
i 在当前行上面插入文件
c 把选定的行改为新的指定的文本
p 打印
d 删除
w 另存
s 替换
g 替换所有匹配到的行
例子:
sed ‘s/root/xuegod’ /etc/passwd
# 把/etc/passwd中带有root的字符,替换成xuegod打印(并未替换,只打印)
sed ‘2s/bin/xuegod/’ passwd
# 将第二行的bin替换成xuegod
sed ‘2,4d’ /etc/hosts
# 删除文本中的第二行到第四行
sed ‘/192.168/d’ /etc/hosts
# 删除文件中带192.168的行
sed ‘i/192.168.1.100/xuegod’ /etc/hosts
# 在文本中匹配192.168.1.100并在上一行插入xuegod
sed ‘2a/ xuegod’ /etc/hosts
# 在文本中的第二行的下一行插入xuegod
sed ‘4c\aaaaa bbbb’ /etc/hosts
# 将文本中第4行的aaaaa全部改成bbbb
sed -n ‘2p’ /etc/hosts
# 打印文本中的第二行
sed -n ‘/root/w c.txt’ /etc/passwd
# 匹配文本中带有root的行,并写入到c.txt
cut 截取命令
-b 仅显示行中指定范围的字节数
-c 仅显示行中指定范围的字符
-d 指定字段分隔符
-f 显示指定字段的内容
awk 文本报告生成器
awk BEGIN{coms} /pattern/{coms} END{coms}
BEGIN和END必须大写
内置变量:
$n # 当前记录的第几个字段
FS # 字段分隔符,默认空格
NF # 表示列的个数
NR # 表示当前行号
$0 # 表示整行
\t # 制表符
\n # 换行符
~ # 匹配
!~ # 不匹配
-F’[:#/]}’ # 定义三个分隔符
命令选项:
-F # 和fs一样,指定分隔符
-v # 用户自定义赋值
-f # 指定脚本文件,从脚本中读取awk
‘{}’ # 引用代码块
{…} # 命令代码块,包含一条或多条
/str/ # 匹配代码块,可以是字符串或正则
例子:
awk -F:’{prinr $1}’
# 以冒号为分隔符,输出第一个字段
awk ‘BEGIN{FS=:}{print $!}’
# 效果同上,写法不同
awk -F: ‘$3<10{print $! $NF}’ /etc/passwd
# 显示出文本中第二个字段小于10时,第一个字段和最后一个字段
awk ‘NR==2{print $2}’
# 以空格为分隔符,显示第二行第二个字段
shell语法
语法相关
shell中单引号和双引号的区别:
单引号中所有的特殊字符,都将解释成为字符本身而成为普通字符(所见即所得)
双引号中,除了$ ” ` 和 \ 以外所有字符都解释成字符本身
变量
/etc/profile # 系统全局环境和登录系统的一些配置
/etc/bashrc # bash全局自定义配置文件,用于自定义shell
/root/.bashrc # 用于定义用户自定义的bash
/root/.bash_profile # 用于用户自定义的系统环境
特殊变量
$* # 表示这个程序的所有参数
$# # 表示这个程序的参数个数
$$ # 表示这个程序的进程号
$! # 表示上一个后台运行的进程ID
$? # 返回上条命令执行的结果
流程控制语句if
单分支if语句:
if 条件
then
输出
fi
双分支if语句:
if 条件 ; then
输出
else
输出
fi
双分支if语句:
if 条件 ; then
输出
elif 条件 ; then
输出
elif 条件 ; then
输出
else
输出
fi
数字比较
-eq # 等于为真
-ne # 不等于为真
-gt # 大于为真
-ge # 大于等于为真
-le # 小于等于则为真
-lt # 小于则为真
字符串比较
== # 等于则为真
!= # 不等于则为真
-z 字符串 # 字符串的长度为零则为真
-n 字符串 # 字符串的长度部位空则为真
> # 大于则为真
< # 小于则为真
文件比较
-e # 存在则为真
-r # 文件可读则为真
-w # 文件可写则为真
-x # 文件可执行则为真
-s # 文件存在且至少有一个字符微针
-d # 目录存在则为真
-f # 存在且为普通文件则为真
-c # 如果文件存在且为字符型文件微针
-b # 文件存在且为块文件为真
file1 -nt file2 # file1比file2新则为真
file1 -ot file2 # file1 比 file2 旧则为真
流程控制中复杂条件
判断一:两个条件都为真,或者有一个为真就执行
if [条件1] && [条件2]; then
输出
elif [条件1] || [条件2]; then
输出
else
输出
fi
判断二
if[条件一 -a 条件二];then
输出
elif[条件一 -o 条件二];then
输出
else
输出
fi
判断三
if[[条件一 && 条件二]];then
输出
elif [[条件一 || 条件二]];then
输出
fi
通配符
匹配0或多个字符
? # 匹配任意一个字符
[abcd] # 匹配abcd任意单一字符
[!abdc] # 匹配除了abcd任意单一字符
[0-9] # 匹配0-9任意单一字符
{string1,string2..} # 匹配string1 和 string2 其中一个字符串
流程控制语句case
方法1:
case 变量或表达式 in
选项1)
命令块
;;
选项2)
命令块
;;
*)
命令块
;;
esac
for循环语句
方法1:
for var in list
do
代码块
done
方法二:
for var in list ; do
代码块
done
C语言风格:
for (( i=xx ; i <= xx ; i++ ))
do
代码块
done
while循环语句
while 测试
do
命令
done
特殊语法
break 跳出所有循环
continue 跳过这次循环进入下次循环
shift 左移参数,每次使用一次参数,丢弃使用后的参数,使用下一个参数
exit 退出整个脚本
函数的使用
函数声明方法一:
function name{
代码
}
函数声明方法二:
name (){
代码
}
return 退出函数并返回特定的退出码
expect实现无交互登录
!/bin/expect 定义脚本使用shell
set timeout 30 设置超时时间,以秒为单位
spawn 让代码输出后的结果进入expect外壳
expect 判断输出结果是否包含某项字符串,没有则立即返回,否则就等待一段时间
seed 需要执行的交互命令,执行完后需要加上”/r”
exp_continue 继续执行的交互命令
interact 执行完后保持交互状态,将控制权交给控制台
$argv 可以接受bash传递过来的参数
正则表达式
- 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
. 匹配除换行符以为的任何单字符
? 匹配前面的子表达式一次或多次
| 或者
^ 匹配输入字符串开始的位置
$ 匹配输入字符串结尾的位置
shell中的色彩处理
通用语法:
echo -e “\e[底色;字色 输出内容\e[0m”
选项控制:
\e[0m # 关闭,只显示一次
\e[1m # 设置高亮加粗
\e[5m # 闪烁
通用颜色:
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m”
