网站首页 > 精选文章 正文
使用find+grep找到所需内容
如果在一个拥有数千文件的项目或者目录中,需要找到特定的内容,可以使用如下命令:
find . -type f -name "*.java" -exec grep -l "DatabaseConnection" {} \;
在当前目录及其子目录中搜索所有Java文件中包含文本DatabaseConnectio的文件名,且仅列出匹配的文件名.
使用场景:
- 确认特定函数的定位位置
- 定位配置设置
查找所有微服务的项目中,使用log4j的maven项目
find . -type f -name "pom.xml" -exec grep -l "log4j" {} \; | xargs code #使用vscode打开
grep 添加-i 参数时,进行不区分大小写的搜索.
awk
ps aux | awk '$4 > 5.0 {print $2, $4, $11}'
查找使用超过 5%内存的所有进程,并打印它们的 PID、内存使用量和命令名称。
使用场景
- 从命令输出中提取指定列
- 对数据进行计算
- 格式化输出文本
awk与日志解析进行结合示例:
cat access.log | awk -F'"' '{print $2}' | awk '{print $2}' | sort | uniq -c | sort -nr | head -10
小Tips: -F 可以更改字段分隔符,便于处理CSV或者自定义日志格式时非常有用.
sed
sed -i 's/old-api-url\.com/new-api-url\.com/g' config/*.json
在 config 目录下的所有 JSON 文件中将“old-api-url.com”替换为“new-api-url.com”。
使用场景:
- 批量更新配置文件
- 清理或转换数据
- 删除或替换文本模式
find . -name "application.properties" -exec sed -i 's/jdbc:mysql:\/\/old-db:3306/jdbc:mysql:\/\/new-db-cluster:3306/g' {} \;
手动批量更新项目中所有的数据库连接字符串.
在实际使用时,可以先不要使用 -i 标志, 确认改变内容后,再进行持久化更改.
jq
在实际的devops场景中,与API和JSON数据会经常打交道,jq是我们最常使用的工具之一,另外的工具我也比较推荐yq,它还支持yaml文件的解析.
curl -s https://api.github.com/repos/kubernetes/kubernetes/releases | jq '.[0].tag_name'
获取最新的k8s版本信息并提取标签名.
使用场景
- 处理API响应
- 从json数据结构中获取指定字段
- 转换json数据
jq -r 标志可以输出不带引号的原始字符串.
tmux
tmux new -s deploy
这将创建一个名为“deploy”的新 tmux 会话,在其中拥有多个面板和窗口。
常用快捷键
Ctrl+b " - 水平分割面板
Ctrl+b % - 垂直分割面板
Ctrl+b 箭头 - 在标签页之间切换
Ctrl+b d - 从会话中分离(它将在后台继续运行)
tmux attach -t deploy - 重新连接到会话
使用场景:
- 同时监控多台服务器
- 运行需要持续连接的长时间进程
- 在单个窗口中配置多个相关任务
- 当VPN连接过程中断时,可以重新连接到tmux会话
(|) 管道符
ps aux | grep java | grep -v grep | awk '{print $2}' | xargs kill -9
查找所有 Java 进程,排除 grep 进程本身,提取进程 ID 并杀死它们。
使用场景:
- 多命令组合的复杂操作
- 过滤和转换命令输出
ps aux | grep tomcat | grep -v grep | grep -v active | awk '{if ($10 > "3:00") print $2}' | xargs -r kill -9
运行时间超过 3 小时且未标记为活动的 Tomcat 进程会被kill 掉.
tail -f 和 grep实时查看日志
tail -f application.log | grep --color=always -i error | grep -v "known issue"
实时跟踪日志文件,用颜色突出显示错误,但过滤掉known issue。
使用场景:
- 部署期间查看日志
- 实时排查问题
- 过滤多余日志获取相关信息
tail -f /var/log/application.log | grep -E --color=always "ERROR|WARN|CRITICAL" | grep -v "/api/v1/legacy" | tee -a migration-issues.log
Tips: 添加tee -a filename.txt 可以将过滤后的输出保存到文件,同时仍在屏幕上查看.
使用ssh配置和密钥实现安全的多服务器管理
配置~/.ssh/config
Host production
HostName 203.0.113.10
User deployer
IdentityFile ~/.ssh/production_key
ForwardAgent yes
Host staging
HostName staging.example.com
User deployer
IdentityFile ~/.ssh/staging_key
远程操作,无需再输入完整的主机名 用户名 和密码等信息.
ssh production "tail -f /var/log/application.log"
使用场景:
- 管理多台服务器
- 创建连接服务器的快捷方式
- 用于不同的环境
Tips: 支持ProxyJump配置代理
Host internal-server
HostName 10.0.0.5
User admin
ProxyJump bastion
使用shell函数和别名
为了避免反复输入相同的冗长命令,我们可以通过别名自定义快捷方式.
# Simple alias
alias k="kubectl"
# Function with parameters
dps() {
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep "$1"
}
使用场景:
- 缩短常用的命令
- 可以为流程创建自定义工具
- 标准化复杂命令
在k8s集群中,有很多很长且重复的命令我们可以定义一系列的别名和函数,提高效率
# Quick access to pods
kp() {
kubectl get pods | grep "$1"
}
# Easily tail logs for a pod
kl() {
POD=$(kubectl get pods | grep "$1" | head -1 | awk '{print $1}')
if [ -z "$POD" ]; then
echo "No pod found matching: $1"
return 1
fi
kubectl logs -f "$POD" ${@:2}
}
# Exec into a pod
ke() {
POD=$(kubectl get pods | grep "$1" | head -1 | awk '{print $1}')
if [ -z "$POD" ]; then
echo "No pod found matching: $1"
return 1
fi
kubectl exec -it "$POD" -- ${@:2:-bash}
}
Tips: 我们可以通过在git中创建一个共享的shell配置仓库,制定标准化方便团队每个人的使用.
git操作
git log --oneline --graph --decorate --all -10
使用场景
- 处理复杂的分支结构
- 调试合并的问题
- 确定何时引入更改
git bisect start # 开启一次二分查找会话
git bisect bad HEAD # 把当前所在的提交(HEAD 所指向的提交)标记为 “坏的” 提交
git bisect good last-known-good-tag # 把指定标签(last-known-good-tag)对应的提交标记为 “好的” 提交
git bisect run ./test-script.sh # 自动开展二分查找过程。git 会在 “好的” 提交和 “坏的” 提交之间挑选一个中间提交,然后切换到这个提交,接着运行指定的测试脚本(./test-script.sh)
git命令过于复杂,建议大家在实际使用场景中多总结.
猜你喜欢
- 2025-06-10 Go 程序员学 Zig 指南(上篇)(程序员 怎么学)
- 2025-06-10 Ollama使用指南【超全版】(ola的)
- 2025-06-10 G++编译链接的那些事!G++的特殊使用方法[常用]
- 2025-06-10 vscode 运行java(vscode运行java显示无法加载主类)
- 2025-06-10 教你把多个视频合并成一个视频的方法
- 2025-06-10 无限使用Cursor,解决 Cursor Too many free trial accounts used on this
- 2025-06-10 vscode修改背景色(vscode修改背景图片)
- 2025-06-10 一款神奇的极客工具,用了永无 Bug
- 2025-06-10 使用awk命令5秒替换700M文件内容(awk替换空格)
- 最近发表
-
- 一文讲透支付宝沙箱的基本应用(支付宝沙箱是干什么的)
- 管理系统 UI 设计,怎样让操作效率提升 50%?
- 哎?你的Python代码怎么这么像TypeScript
- web前端培训需要多少时间(web前端培训需要多少时间完成)
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
- 大雨暴雨!考生注意,昆明将迎强降雨,最强时段在→
- 用Python写了一个上课点名系统(附源码)(自制考勤系统)
- 在uniapp中实现3D模型展示:基于Three.js的组件开发实践
- 细聊single-spa + vue来实现前端微服务项目
- springboot+Neo4j:快速搭建自己的知识图谱可视化构建平台
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)