企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

10个看起来让你像devops高手的命令

wudianyun 2025-06-10 02:17:33 精选文章 7 ℃

使用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命令过于复杂,建议大家在实际使用场景中多总结.

最近发表
标签列表