Shell-14-常用命令和工具




常用命令

有人说 Shell 脚本是命令堆积的一个文件, 按顺序去执行
还有人说想学好 Shell 脚本,要把 Linux 上各种常见的命令或工具掌握了,这些说法都没错


Shell 语言本身在语法结构上比较简单,是面向过程编程,想实现复杂的功能有点强人所难
而且 Shell 本身又工作在 Linux 内核之上,在用户态调用 Linux 命令会很方便
所以大多数情况下我们都是依靠这些命令来完成脚本中的某些功能,
比如文本处理、获取系统状态等等
然后通过 Shell 语法结构组织代码逻辑


1.线上查询以及帮助命令(2个)

image-20210817153913559



2.文件和目录操作命令(18个)

image-20210817153937307



3.查看文件以及内容处理命令(21个)

image-20210817154026975



4.文件压缩以及压缩命令(4个)

image-20210817154102070



5.信息显示命令(11个)

image-20210817154125925



6.搜索文件命令(4个)

image-20210817154147586



7.用户管理命令(10个)

image-20210817154211156



8.基础网络操作命令(11个)

image-20210817154241837



9.深入网络操作命令(9个)

image-20210817154315866



10.有关磁盘与文件系统的命令(16个)

image-20210817154344847



11.系统以及用户权限相关命令(4个)

image-20210817154407868



12.查看系统用户登录信息的命令(7个)

image-20210817154434196



13.内置命令以及其他(19个)

image-20210817154500796



14.系统管理与性能监视命令(9个)

image-20210817154526987



15.关机、重启、注销和查看系统信息的命令(6个)

image-20210817154548140



16.进程管理相关命令(15个)

image-20210817154612959




示例

printf

功能: 格式化打印数据。默认打印字符串不换行

一些常用的空白符:

\n 换行

\r 回车

\t 水平制表符

image-20210817154748471



tac

功能: 连接文件和倒序打印文件

倒叙打印

image-20210817154819294



rev

功能: 反向打印文件的每一行

image-20210817154841968



rename

功能: 重命名文件,支持通配符

这个命令有三个参数,分别是from : 修改什么名字,to:改成什么名字,file:需要修改的文件是哪些

image-20210817154908327



sshpass

免交互ssh登录

image-20210817154934164

免交互传输文件

image-20210817154950488

密码传入系统变量:

# SSHPASS=123456 rsync -avz /etc/hosts -e "sshpass -e ssh" root@192.168.1.221:/opt



ss

功能: 比 netstat 更强大的 socket 查看工具
格式: ss [options] [ FILTER ]
filter:过滤

常用选项:
-n 不解析名字
-a 显示所有 socket
-l 显示所有监听的 socket
-o 显示计时器
-e 显示 socket 详细信息
-m 显示 socket 内存使用
-p 显示进程使用的 socket
-i 显示内部 TCP 信息
-s 显示 socket 使用汇总
-4 只显示 IPV4 的 socket
-0 显示包 socket
-t 只显示 TCP socket
-u 只显示 UDP socket
-d 只显示 DCCP socket
-w 只显示 RAW socket
-x 只显示 Unix 域 socket
-f FAMILY 只显示 socket 族类型( unix, inet, inet6, link, netlink)
-A 查询 socket {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D 将原始的 TCP socket 转储到文件
-F 从文件中读取过滤信息

过滤:
-o state 显示 TCP 连接状态信息


示例:
显示所有 TCP 连接:
# ss -t -a

显示所有 UDP 连接:
# ss -u –a

显示 socket 使用汇总:
# ss -s

显示所有建立的连接:
# ss -o state established

显示所有的 TIME-WAIT 状态:
# ss -o state TIME-WAIT

搜索所有本地进程连接到 X Server:
# ss -x src /tmp/.X11-unix/*


lsof

功能: 列出打开的文件


选项:
-i [i] 监听的网络地址,如果没有指定,默认列出所有。
[i]来自[46][protocol][@hostname|hostaddr][:service|port]
-U 列出 Unix 域 socket 文件
-p 指定 PID
-u 指定用户名或 UID 所有打开的文件
+D 递归搜索


示例:
列出所有打开的文件:
# lsof

查看哪个进程占用文件:
# lsof /etc/passwd

列出所有打开的监听地址和 unix 域 socket 文件:
# lsof -i -U

列出 80 端口监听的进程:
# lsof -i:80

列出端口 1-1024 之间的所有进程:
# lsof -i:1-1024

列出所有 TCP 网络连接:
# lsof -i tcp

列出所有 UDP 网络连接:
# lsof -i udp

根据文件描述符列出打开的文件:
# lsof -d 1

列出某个目录被打开的文件:
# lsof +D /var/log

列出进程 ID 打开的文件:
# lsof -p 5373

打开所有登录用户名 abc 或 user id 1234,或 PID 123 或 PID 456:
# lsof -p 123,456 -u 123,abc

列出 COMMAND 列中包含字符串 sshd:
# lsof -c sshd


vmstat

功能: 报告虚拟内存、 swap、 io、上下文和 CPU 统计信息。
分析了这些文件:
/proc/meminfo
/proc/stat
/proc/*/stat
常用选项:
-a 打印活跃和不活跃的内存页
-d 打印硬盘统计信息
-D 打印硬盘表
-p 打印硬盘分区统计信息
-s 打印虚拟内存表
-m 打印内存分配(slab)信息
-t 添加时间戳到输出
-S 显示单位,默认 k、 KB、 m、 M,大写是*1024


示例:
分析系统性能:
# vmstat

每秒刷新一次,统计五次:
# vmstat -t 1 5


iostat

功能: 报告 CPU 利用率和磁盘 I/O
用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
常用选项:
-c 显示 CPU 使用率
-d 只显示磁盘使用率
-k 单位 KB/s 代替 Block/s
-m 单位 MB/s 代替 Block/s
-N 显示所有映射设备名字
-t 打印报告时间
-x 显示扩展统计信息


示例:
显示 CPU 使用率:
# iostat -c 1 3

显示 I/O 磁盘统计信息:
# iostat -d -x -k 1 3 # 间隔 1 秒,输出 3 次



sar

功能: 查看系统资源综合方面利用率
常用选项:
-u, CPU
-r, memory
-b, disk
-n DEV, NIC traffic
-q, systemload
-b, TPS(Transaction Per Second,每秒事务处理量)
-o, output to file


示例:
# sar -u 2 3 #每两秒执行一次, 采集三次
# sar -u 2 3 -o cpu.out
# sar -f cpu.out #读取文件


dstat

功能: 查看系统资源综合方面利用率(需要安装)
常用选项:
-c cpu 统计
-d 磁盘统计
-m 内存统计
-n 网络统计
-s swap 统计
-l 负载统计
--tcp tcp 状态统计
--udp udp 状态统计
--socket socket 数量统计
-t 输出时间
--output 写入 csv 文件

插件:
--list 支持的插件
--top-bio-adv 详细显示 I/O 进程写入 block 量, 包括 pid、 r、 w 和 cpu
--top-io-adv 进程写入磁盘总量
--top-cpu 占用 CPU 进程
--top-cpu-adv 查看最高 CPU 进程
--top-mem 内存进程


示例:
查看 CPU 利用率:
# dstat -c

查看 TCP 连接状态:
# dstat --tcp



nc

功能: TCP 和 UDP 连接和监听
常用选项:
-i interval 指定间隔时间发送和接受行文本
-l 监听模式,管理传入的连接
-n 不解析域名
-p 指定本地源端口
-s 指定本地源 IP 地址
-u 使用 udp 协议,默认是 tcp
-v 执行过程输出
-w timeout 连接超时时间
-x proxy_address[:port] 请求连接主机使用代理地址和端口
-z 指定扫描监听端口,不发送任何数据


示例:
端口扫描:
# nc -z 192.168.1.10 1-65535

TCP 协议连接到目标端口:
# nc -p 31337 -w 5 192.168.1.10 22

UDP 协议连接到目的端口:
# nc -u 192.168.1.10 53

指定本地 IP 连接:
# nc -s 192.168.1.9 192.168.1.10 22

探测端口是否开启:
# nc -z -w 2 192.168.1.10 22

创建监听 Unix 域 Socket:
# nc -lU /var/tmp/ncsocket

通过 HTTP 代理连接主机
# nc -x10.2.3.4:8080 -Xconnect 10.0.0.10 22

监听端口捕获输出到文件:
# nc -l 1234 > filename.out

从文件读入到指定端口:
# nc host.example.com 1234 < filename.in

收发信息:
# nc -l 1234
# nc 127.0.0.1 1234

执行 memcahced 命令: printf "stats\n" |nc 127.0.0.1 11211
发送邮件:
# nc [-C] localhost 25 << EOF
HELO host.example.com
MAIL FROM: <user@host.example.com>
RCPT TO: <user2@host.example.com>
DATA
Body of email.
.
QUIT
EOF
# echo -n "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80


time

功能: 执行脚本时间
常用选项:


示例:
查看执行 ls 所需的时间:
# time ls


eval

功能: 执行参数作为 shell 命令

示例:
for i in $@; do
eval $i
done
echo ---
echo $a
echo $b
# bash test.sh a=1 b=2
---
1 2

posted @ 2021-08-17 15:56  李成果  阅读(98)  评论(0编辑  收藏  举报