- 前言
- 1.nc命令
- 2. dstat命令
- 3.url拨测
- 4.dd命令生成文件
- 5.命令行临时配置ip地址
- 6.命令行临时添加路由
- 7.修改firewalld策略
- 8.cut命令
- 9.diff命令
- 10.wc命令
- 11.sort命令
- 12.uniq命令
- 13.join命令
- 14.wget命令
- 15.curl命令
- 16.iconv命令
- 17.ss命令
- 18.vmstat命令
- 19.iostat命令
- 20.tcpdump命令
- 21.nmap命令
- 22.windows文本到linux下格式转换
- 23.jvm垃圾回收统计jstat
- 24.查看jvm详细信息jmap
- 25.lsof命令
前言
1.nc命令总结平时常用的一些命令 ,并不是命令详解 , 持续更新
nc是netcat的简写
yum -y insatll nc
功能
(1)网络端口连通性
nc -vz -w 1 192.168.1.129 3306 Centos6
nc -w 1 192.168.1.129 3306 a.txt A机器开启一个端口(任意)
nc A机器ip 10000 /dev/null A机器开启一个端口
nc A机器ip 10000 < dev/zero B机器像A机器无限传输数据
dstat查看网卡在B发送的数据和在A接收的数据
(4) nc -4u 192.168.1.129 162 发送udp数据
(5) nc -vuz 192.168.1.129 162 测试udp端口连通性
2. dstat命令
yum -y install dstat
dstat命令有默认选项,执行dstat命令不加任何参数,它默认会收集-cpu-、-disk-、-net-、-paging-、-system-的数据,
一秒钟收集一次。 默认输入 dstat 等于输入了dstat -cdngy 1或dstat -a 1。
常用选项:
-c,--cpu 统计CPU状态,包括 user, system, idle(空闲等待时间百分比), wait(等待磁盘IO)等;
-d, --disk 统计磁盘读写状态
-D total,sda 统计指定磁盘或汇总信息
-l, --load 统计系统负载情况,包括1分钟、5分钟、15分钟平均值
-m, --mem 统计系统物理内存使用情况,包括used, buffers, cache, free
-s, --swap 统计swap已使用和剩余量
-n, --net 统计网络使用情况,包括接收和发送数据
-N eth1,total 统计eth1接口汇总流量
-r, --io 统计I/O请求,包括读写请求
-p, --proc 统计进程信息,包括runnable、uninterruptible、new
-y, --sys 统计系统信息,包括中断、上下文切换
-t 显示统计时时间,对分析历史数据非常有用
--fs 统计文件打开数和inodes数
常用命令:
dstat -cmsdnl
3.url拨测
域名返回码
curl -I -m 10 -o /dev/null -s -w %{http_code} 域名(port)
4.dd命令生成文件
dd if=/dev/zero of=/testblock bs=1M count=3 if:inputfile of:outputfile bs:blocksize5.命令行临时配置ip地址
ifconfig eth0 192.168.1.10/24 # 更改ip ip a a 1.1.1.1/24 dev eth0 # 添加ip6.命令行临时添加路由
route add -net 192.168.2.0/24 gw 192.168.2.254 route add –net 180.200.0.0 netmask 255.255.0.0 gw 10.200.6.201 dev eth0 metric 1 命令格式: route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]] 参数: add:添加一条新路由。 del:删除一条路由。 -net:目标地址是一个网络。 -host:目标地址是一个主机。 netmask:当添加一个网络路由时,需要使用网络掩码。 gw:路由数据包通过网关。注意,你指定的网关必须能够达到。 metric:设置路由跳数。 Command 指定您想运行的命令 (Add/Change/Delete/Print)。 Destination 指定该路由的网络目标。 mask Netmask 指定与网络目标相关的网络掩码(也被称作子网掩码)。 Gateway 指定网络目标定义的地址集和子网掩码可以到达的前进或下一跃点 IP 地址。 metric Metric 为路由指定一个整数成本值标(从 1 至 9999),当在路由表(与转发的数据包目标地址最匹配)的多个路由中进行选择时可以使用。 if Interface 为可以访问目标的接口指定接口索引。若要获得一个接口列表和它们相应的接口索引,使用 route print 命令的显示功能。可以使用十进制或十六进制值进行接口索引。7.修改firewalld策略
firewall-cmd --list-all firewall-cmd --zone=public --add-port=22/tcp --permanent # 新增端口 firewall-cmd --zone= public --remove-port=80/tcp --permanent # 删除端口 firewall-cmd --reload #重载生效8.cut命令
截取信息
cut -d'分隔字符' -f fields 常用选项: -d :后面接分隔字符。与 -f 一起使用; -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思; -b 选中第几个字符 -c 选中多少个字符 echo "a:b:c" |cut -d: -f2 echo "a:b:c" |cut -b 3 echo "a:b:c" |cut -c 1-39.diff命令
diff -w a.txt b.txt > 111 < 44 "<"表示a.txt有,但是b.txt里面不包含;">"表示a.txt没有,但是b.txt包含。 diff -w a.txt b.txt | grep ^< 只输出a.xt里面有,但是b.txt里面不包含的文件内容 diff -w a.txt b.txt | grep ^> 只输出b.xt里面有,但是a.txt里面不包含的文件内容10.wc命令
主要用于统计,如行数、字符数
常用选项: -c 打印文件字节数,一个英文字母 1 字节,一个汉字占 2-4 字节(根据编码) -m 打印文件字符数,一个汉字占 2 个字符 -l 打印多少行 -L 打印最长行的长度,也可以统计字符串长度 wc -l file # 统计文件行数 echo "hello" |wc -L # 获取字符串长度11.sort命令
主要用于排序
常用选项: -f 忽略字母大小写 -M 根据月份比较,比如 JAN、DEC -h 根据易读的单位大小比较,比如 2K、1G -g 按照常规数值排序 -n 根据字符串数值比较 -r 倒序排序 -k 位置 1,位置 2 根据哪一列排序 -t 指定分隔符 -u 去重重复行 du -sh * |sort -k1 -hr # 根据文件大小排序 echo -e "1n1n2n3n3" |sort -u # 去重12.uniq命令
主要用于去重,与统计重复次数
常用选项: -c 打印出现的次数 -d 只打印重复行 -u 只打印不重复行 -D 只打印重复行,并且把所有重复行打印出来 -f N 比较时跳过前 N 列 -i 忽略大小写 -s N 比较时跳过前 N 个字符 -w N 对每行第 N 个字符以后内容不做比较 cat file abc cde cde xyz xyz abd sort file |uniq # 去重 abc abd cde xyz sort file |uniq -c # 打印每行出现的次数 1 abc 1 abd 2 cde 2 xyz sort file |uniq -u # 打印没有重复的数据的行 abc abd sort file |uniq -d # 打印有重复数据的行 cde xyz sort file |uniq -d -c # 打印有重复数据的行并打印重复次数 2 cde 2 xyz13.join命令
连接两个文件
常用选项: -i 忽略大小写 -o 按照指定文件栏位显示 cat file1 1 a 2 b 3 c cat file2 1 x 2 y 3 z join file1 file2 # 将两个文件相同字段合并一列 1 a x 2 b y 3 c z join -o 1.2 2.2 file1 file2 # 打印 file1 第二列和 file2 第二列: a x b y c z14.wget命令
命令行下用于下载
常用选项: -b, --background 后台运行 日志记录和输入文件: -o, --output-file=FILE 日志写到文件 -a, --append-output=FILE 日志追加到文件 -d, --debug 打印 debug 信息,会包含头信息 -q, --quiet 退出,不输出 -i, --input-file=FILE 从文件中读取 URL 下载 下载选项: -t, --tries=NUMBER 设置链接重试次数 -O, --output-document=FILE 写入内容到文件 -nc, --no-clobber 跳过下载现有的文件 -c, --continue 断点续传 服务器响应头信息 --spider 不下载任何内容 -T, --timeout=SECONDS 设置相应超时时间(还有--dns-timeout、--connect-timeout 和 --read-timeout) -w, --wait=SECONDS 两次重试间隔等待时间 --limit-rate=RATE 限制下载速度 目录: -P, --directory-prefix=PREFIX 保存文件目录 FTP 选项: --ftp-user=USER 设置 ftp 用户名 --ftp-password=PASS 设置 ftp 密码 --no-passive-ftp 禁用被动传输模式 wget http://nginx.org/download/nginx-1.11.7.tar.gz # 下载文件 wget -b http://nginx.org/download/nginx-1.11.7.tar.gz # 后台下载 wget --ftp-user=admin --ftp-password=admin ftp://192.168.x.x/file/downloan.file # ftp下载文件15.curl命令
类似于HTTP客户端,实现浏览器的功能
常用选项: -k, --insecure 允许 HTTPS 连接网站 -C, --continue-at 断点续传 -b, --cookie STRING/FILE 从文件中读取 cookie -c, --cookie-jar 把 cookie 保存到文件 -D, --dump-header 保存头信息到文件 -H, --header 自定义头信息发送给服务器 -I, --head 查看 HTTP 头信息 -o, --output FILE 输出到文件 -x, --proxy [PROTOCOL://]HOST[:PORT] 使用代理 -U, --proxy-user USER[:PASSWORD] 代理用户名和密码 -O, --remote-name 使用远程服务器上名字写到本地 --connect-timeout 连接超时时间,单位秒 --retry NUM 连接重试次数 --retry-delay 两次重试间隔等待时间 -s, --silent 静默模式,不输出任何内容 -Y, --speed-limit 限制下载速率 -u, --user USER[:PASSWORD] 指定 http 和 ftp 用户名和密码 curl -o badu.html http://www.baidu.com # 下载页面 curl -O ftp://user:pass@ip/a.txt # ftp下载 curl ftp://ip/filename -u user:pass -o filename # ftp下载16.iconv命令
转换字符集
常用选项: -l 列出所有已知的字符集 -f 原始文本编码 -t 输出编码 -o 输出到文件 iconv -f gbk -t utf8 old.txt -o new.txt # 转换字符集 echo $(echo "content" | iconv -f utf8 -t gbk) # 防止短信或者邮件乱码17.ss命令
强大的socket查看工具
选项常用: -n 不解析名字 -a 显示所有 socket -l 显示所有监听的 socket -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 -D 将原始的 TCP socket 转储到文件 过滤: -o state 显示 TCP 连接状态信息 ss -t -a # 显示所有 TCP 连接 ss -u –a # 显示所有 UDP 连接 ss -s # 显示 socket 使用汇总 ss -o state established # 显示所有建立的连接 ss -o state TIME-WAIT # 显示所有的 TIME-WAIT 状态18.vmstat命令
获取内存、swap、cpu、io等统计信息
常用选项: -a 打印活跃和不活跃的内存页 -d 打印硬盘统计信息 -D 打印硬盘表 -p 打印硬盘分区统计信息 -s 打印虚拟内存表 -m 打印内存分配(slab)信息 -t 添加时间戳到输出 -S 显示单位,默认 k、KB、m、M,大写是*1024 vmstat -t 1 5
详解: r:CPU 正在运行的进程数 b:在等待 I/O 的进程数 swpd:已经使用的交换内存(kb) free:空闲的物理内存(kb) buff:已经使用的缓冲区内存(kb);一般对设备数据缓存,写入到磁盘的数据。 cache:已经使用的缓冲区内存(kb);一般对文件数据缓存,从磁盘读取的数据。 si:从磁盘交换到内存的交换页数量(kb/s) so:从内存交换到磁盘的交换页数据(kb/s) bi:块设备接收的块数量(kb/s) bo:块设备发送的块数量(kb/s) in:每秒 CPU 中断次数 cs:每秒 CPU 上下文切换次数 us:用户进程使用 CPU 时间(%) sy:系统进程使用 CPU 时间(%) id:CPU 空闲时间(%) wa:等待 I/O 响应所消耗的 CPU 时间(%) st:从虚拟设备中获得的时间(%)19.iostat命令
输出cpu负载与磁盘io
常用选项: -c 显示 CPU 使用率 -d 只显示磁盘使用率 -k 单位 KB/s 代替 Block/s -m 单位 MB/s 代替 Block/s -N 显示所有映射设备名字 -t 打印报告时间 -x 显示扩展统计信息
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s rsec/s: 每秒读扇区数。即 delta(rsect)/s wsec/s: 每秒写扇区数。即 delta(wsect)/s rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算) wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算) avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio) avgqu-sz:平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。 await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio) svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio) %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒) 如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘 可能存在瓶颈20.tcpdump命令
捕获和分析数据包
tcpdump [ 选项 ] [ -c 数量 ] [ -i 网络接口 ] [ -w 文件名 ] [ 表达式 ] 常用选项: -l:使标准输出变为缓冲行形式 -c:抓包次数 -nn:直接以 IP 及 Port Number 显示,而非主机名与服务名称 -s :<数据包大小> 设置每个数据包的大小 -i:指定监听的网络接口 -r:从指定的文件中读取包 -w:输出信息保存到指定文件 -a:将网络地址和广播地址转变成名字 -d:将匹配信息包的代码以人们能够理解的汇编格式给出 -e:在输出行打印出数据链路层的头部信息 -f:将外部的Internet地址以数字的形式打印出来 -t:在输出的每一行不打印时间戳 -v :输出稍微详细的报文信息;加一个v更详细 tcpdump -c10 -nn tcp port 22 -i ens33 and source 192.168.1.129 # 抓取来自192.168.1.129到ens33网卡22端口的数据包 tcpdump -i ens33 tcp port 22 and host 192.168.1.129 -w /tmp/tmp.file # 抓取主机192.168.1.129ens33网卡22端口的所有数据包 保存在/tmp/tmp.file tcpdump port 80 # 抓取80端口的所有数据包 tcpdump src 192.168.1.129 # 抓取来自192.168.1.129的所有数据包21.nmap命令
探测主机是否在线、扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描
Nmap [ 扫描类型 ] [ 通用选项 ] { 扫描目标说明 }
常用选项:
-sT:TCP connect()扫描,这是最基本的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标端口正在监听,否则认为目标端口没有监听程序。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。
-sS:TCP同步扫描(TCP SYN),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口没有监听程序。所以这项技术通常称为半开扫描(half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。
-sF,-sX,-sN:秘密FIN数据包扫描、圣诞树(Xmas Tree)、空(Null)扫描模式。这些扫描方式的理论依据是:关闭的端口需要对你的探测包回应RST包,而打开的端口必需忽略有问题的包,通过这种扫描,可间接用于检测防火墙的健壮性。
-sP:ping扫描,用ping方式检查网络上哪些主机正在运行。当主机阻塞ICMP echo请求包是ping扫描是无效的。nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。
-sU:UDP扫描,如果你想知道在某台主机上提供哪些UDP服务,可以使用此选项。
-sA:ACK扫描,这项高级的扫描方法通常可以用来穿过防火墙。
-sW:滑动窗口扫描,非常类似于ACK的扫描。
-sR:RPC扫描,和其它不同的端口扫描方法结合使用。
-b:FTP反弹攻击(bounce attack),连接到防火墙后面的一台FTP服务器做代理,接着进行端口扫描。
-n:不做反向DNS解析,以加快扫描速度
-P0:在扫描之前,不ping主机;有些网络防火墙可能禁止ICMP请求包,使用这种扫描类型可以跳过ping测试
-PT:扫描之前,使用TCP ping确定哪些主机正在运行。
-PS:对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描。
-PI:设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。
-PB:这是默认的ping扫描选项。它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。
-O:这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志,也就是操作系统类型。
-I:打开nmap的反向标志扫描功能。
-f:使用碎片IP数据包发送SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的企图。
-v:强烈推荐使用这个选项,它会给出扫描过程中的详细信息。
-S :在一些情况下,nmap可能无法确定你的源地址(nmap会告诉你)。在这种情况使用这个选项给出你的IP地址。
-g port:设置扫描的源端口。一些天真的防火墙和包过滤器的规则集允许源端口为DNS(53)或者FTP-DATA(20)的包通过和实现连接。显然,如果攻击者把源端口修改为20或者53,就可以摧毁防火墙的防护。
-oN:把扫描结果重定向到一个可读的文件logfilename中。
-oS:扫描结果输出到标准输出。
-A:打开操作系统探测和版本探测。
-iL filename:从filename文件中读取扫描的目标。
-iR:让nmap自己随机挑选主机进行扫描。
-p:端口,这个选项让你选择要进行扫描的端口号的范围。可使用逗号分隔多个端口,减号连接一个端口范围,在列表前指定T:表示TCP端口,U:表示UDP端口
-exclude:排除指定主机
-exclude file:排除指定文件中的主机
nmap -sT -PO 10.50.133.222 # 探测主机存活及监听端口
nmap -sS -n -p 22 10.50.133.0/24 # 扫描一个网段的主机是否开启22端口
nmap -O -n 10.50.133.222 # 获取操作系统及kernel
nmap –sS 10.50.133.0/24 # 探测一个网段开启的服务
22.windows文本到linux下格式转换
方法1: :set fileformat=unix 方法2: :%s/r*$// # ^M可用r代替23.jvm垃圾回收统计jstat
jstat -gc24.查看jvm详细信息jmap
jmap -heap25.lsof命令Heap Configuration: # 堆栈配置情况,也就是JVM参数配置 MinHeapFreeRatio = 0 # 最小堆使用比例 MaxHeapFreeRatio = 100 # 最大堆可用比例 MaxHeapSize = 2147483648 (2048.0MB) # 最大堆空间大小 NewSize = 1310720 (1.25MB) # 新生代分配大小 MaxNewSize = 268435456 (256.0MB) # 新生代可分配最大空间大小 OldSize = 5439488 (5.1875MB) # 老年代大小 NewRatio = 2 # 新生代比例,新生代与老年代比值1:3 SurvivorRatio = 8 # 新生代与suvivor的比例 PermSize = 134217728 (128.0MB) # perm区 永久代大小 MaxPermSize = 268435456 (256.0MB) # 最大可分配perm区 也就是永久代大小 G1HeapRegionSize = 0 (0.0MB) Heap Usage: # 堆使用情况【堆内存实际的使用情况】 PS Young Generation # 新生代 Eden Space: # 伊甸区Eden区 capacity = 265289728 (253.0MB) # eden区大小 used = 66380696 (63.305564880371094MB) # 已使用大小 free = 198909032 (189.6944351196289MB) # 剩余大小 25.021962403308734% used # 使用率 From Space: # 幸存区survior0 capacity = 1572864 (1.5MB) # survior0区大小 used = 589824 (0.5625MB) # 已使用大小 free = 983040 (0.9375MB) # 剩余大小 37.5% used # 使用率 To Space: # 幸存区survior1 capacity = 1572864 (1.5MB) # survior1区大小 used = 0 (0.0MB) # 已使用大小 free = 1572864 (1.5MB) # 剩余大小 0.0% used # 使用率 PS Old Generation # 老年代 capacity = 805306368 (768.0MB) # 老年代大小 used = 361444264 (344.70011138916016MB) # 已使用大小 free = 443862104 (423.29988861083984MB) # 剩余大小 44.8828270037969% used # 使用率 PS Perm Generation # 永久代 capacity = 134217728 (128.0MB) # 永久代大小 used = 130136904 (124.10822296142578MB) # 已使用大小 free = 4080824 (3.8917770385742188MB) # 剩余大小 96.95954918861389% used # 使用率
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,一切事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
lsof -p# 查看某个程序打开的文件及关联进程 lsof -p 10000 lsof -i: # 查看端口监听情况 lsof -i:22 lsof # 查看文件系统正在被谁使用(在mount、umount时很好用) lsof /dev lsof +d # 查看目录下被进程打开的文件 lsof /var/log
lsof数据恢复:
当文件正在被程序使用(写入、读取)时,我们rm这个文件,文件并不会直接从磁盘被删除,而是依然存在磁盘中,因为程序并不知道文件已经被删除,所以还会继续该文件的文件描述符写入或读取,我们删除的文件就像文件描述符的一个软连接,连接被删除了,“源文件”还在。我们在进程里可以查看到文件是deleted状态。
rm -f /var/log/messages lsof |grep /var/log/messages
在这里也很好的解析了,当我们文件系统使用比较高的时候为什么rm掉文件之后空间并没有释放,要重启程序之后空间才释放出来。因为我们并没有本质删除文件,删除的只是类似一个软连接。现在我们知道文件内容是存在文件描述符,我们只需要把它存储的数据恢复到某个文件下,就实现了文件的恢复。
我们使用lsof查看到程序使用的文件描述符,也就是7,我们看下7的内容,也就是message日志
此时,我们就可以把文件内容重定向到另一个文件实现文件恢复(主机时间不准确,没有对时,忽略时间)



