Shell-14-常用命令和工具
常用命令
有人说 Shell 脚本是命令堆积的一个文件, 按顺序去执行
还有人说想学好 Shell 脚本,要把 Linux 上各种常见的命令或工具掌握了,这些说法都没错
Shell 语言本身在语法结构上比较简单,是面向过程编程,想实现复杂的功能有点强人所难
而且 Shell 本身又工作在 Linux 内核之上,在用户态调用 Linux 命令会很方便
所以大多数情况下我们都是依靠这些命令来完成脚本中的某些功能,
比如文本处理、获取系统状态等等
然后通过 Shell 语法结构组织代码逻辑
1.线上查询以及帮助命令(2个)
2.文件和目录操作命令(18个)
3.查看文件以及内容处理命令(21个)
4.文件压缩以及压缩命令(4个)
5.信息显示命令(11个)
6.搜索文件命令(4个)
7.用户管理命令(10个)
8.基础网络操作命令(11个)
9.深入网络操作命令(9个)
10.有关磁盘与文件系统的命令(16个)
11.系统以及用户权限相关命令(4个)
12.查看系统用户登录信息的命令(7个)
13.内置命令以及其他(19个)
14.系统管理与性能监视命令(9个)
15.关机、重启、注销和查看系统信息的命令(6个)
16.进程管理相关命令(15个)
示例
printf
功能: 格式化打印数据。默认打印字符串不换行
一些常用的空白符:
\n 换行
\r 回车
\t 水平制表符
tac
功能: 连接文件和倒序打印文件
倒叙打印
rev
功能: 反向打印文件的每一行
rename
功能: 重命名文件,支持通配符
这个命令有三个参数,分别是from : 修改什么名字,to:改成什么名字,file:需要修改的文件是哪些
sshpass
免交互ssh登录
免交互传输文件
密码传入系统变量:
# 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
转载请注明出处哟~
https://www.cnblogs.com/lichengguo