作者:Chancel, 更新:2023 Jan 13, 字数:5072, 已阅:51
从事软件开发行业经常要接触一些命令,相较于图形操作系统的易用性,命令操作更多专业领域上,本文结合实际使用场景记录一些复杂的命令行用法。
netstat
与 ss
是非常常见的端口占用查询方式,以下命令等价
netstat -tulpn | grep 8080 # 查找占用端口8080的程序
ss -tulpn | grep 8080 # 查找占用端口8080的程序
lsof
与 fuser
是Linux中用于查看打开文件的命令行程序,也可以用于查看端口占用情况
lsof -i :8080 # 查找占用端口8080的程序
fuser -v 8080/tcp # 查找占用端口8080的程序
nc
命令是Linux中非常好用的网络探测器,常用于检查对向端口(tcp/udp)是否开启
nc -zuv -w 5 114.114.114.114 53 # 查询114.114.114.114服务器的53端口是否接受UDP
nc -ztv -w 5 114.114.114.114 53 # 查询114.114.114.114服务器的53端口是否接受TCP
此外,还可以利用nc来扫描服务器开放端口
nc -ztv -w 2 114.114.114.114 1-100 # 查询114.114.114.114端口1-100的开放情况(tcp)
telnet
命令是Linux/Windows下都支持的端口连通测试工具
telnet 114.114.114.114 53
traceroute
命令用于追查数据包的路由走向,判断两个网络之间的连通情况
traceroute -q 5 119.29.113.112
常见-q
参数用于设置数据包数量,默认是3个数据包
grep
查找匹配文本,sed
更进一步查找匹配并编辑文本,awk
适合定义复杂处理编辑文本方法
grep
是global regular expression print的缩写,其工作原理是读取每行并与搜索的字符串相匹配输出,支持正则表达式的输出
如常见的查找进程
❯ ps -ef | grep aria2c
chancel 1715 1358 0 2022 ? 00:00:30 /usr/bin/aria2c --conf=/etc/aria2c/aria2c.conf
对于grep而言,以下列举较为常见的匹配
# 统计head.js出现的次数
➜ grep -c 'head.js' www.log
449
# 搜索出现head.js的日志文件
➜ grep -l 'head.js' *
blog.log
www.access.log
www.log
# head.js出现的位置上下行展示 -A表示后面内容,-B表示前面内容,-C可代表A+B
➜ grep -A2 -B2 'head.js' www.log
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/css/mdui.min.css HTTP/1.1" 200 325338 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/js/mdui.min.js HTTP/1.1" 200 74021 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/js/head.js HTTP/1.1" 200 4602 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/icons/material-icons/MaterialIcons-Regular.woff2 HTTP/1.1" 304 0 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/fonts/roboto/Roboto-Regular.woff2 HTTP/1.1" 304 0 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
# 正则表达式匹配
➜ grep -E '\?v\=[0-9]+' www.log
...
14.145.137.86 - - [03/Jan/2023:09:08:53 +0000] "GET /static/js/vue.min.js?v=1672489087.0 HTTP/1.1" 304 0 "https://www.chancel.me/articles/71" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
14.145.137.86 - - [03/Jan/2023:09:08:53 +0000] "GET /static/js/mdui.min.js?v=1672489087.0 HTTP/1.1" 304 0 "https://www.chancel.me/articles/71" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
14.145.137.86 - - [03/Jan/2023:09:08:53 +0000] "GET /static/js/head.js?v=1672489087.0 HTTP/1.1" 304 0 "https://www.chancel.me/articles/71" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
14.145.137.86 - - [03/Jan/2023:09:08:53 +0000] "GET /static/fonts/roboto/Roboto-Bold.woff2 HTTP/1.1" 304 0 "https://www.chancel.me/static/css/mdui.min.css?v=1672489087.0" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
此外,还有以下常见参数
sed
是stream editor的缩写,常见的用法是用于搜索替换一行,其形式通常类似于
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
# 删除gfwlist文件中的@@和||
➜ sed -i '/^$\|@@/d' gfwlist.txt
...
ssh-copy-id
可推送ssh公钥到指定服务器上,将自动创建$HOME/.ssh/authorized_keys
文件并写入公钥,如下
ssh-copy-id -i id_rsa.pub -p 22 chancel@192.168.1.1
du
指令用于查看当前文件目录大小,但并不直观,以下列举常规用法
# 查看整个文件夹大小
du -sh
# 查看文件夹中分布的文件大小
du -hsx *
# 使用排序查看前6个文件夹大小
du -hsx *| sort -rh |
column -t
可以将大部分输出规整为表格形式输出,如下
mount | column -t
若无特别说明,以下命令均基于Windows10
以上版本
route
命令是Windows下的路由表管理工具,常见用法
ROUTE [-f] [-p] [-4|-6] command [destination]
打印路由表
route print
也可以单独打印ipv4的路由规则
route print -4
添加/删除路由
# 添加192.168.8.0/24网段默认路由走192.168.2.1,优先级为2,网卡指定1号网卡
route ADD 192.168.8.0/24 192.168.2.1 metric 2 if 1
# 删除上述路由规则
route DELETE 192.168.8.0/24 192.168.2.1 metric 2 if 1
修改由于route
程序只支持修改网管跟跳数,所以用的少,一般直接删除重新添加
netstat
是Windows下用于查看所有端口监听情况的程序,使用如下
netstat -ano
查找8080端口如下
netstat -ano | findstr '8080'