命令行工具进阶指南

🚀 命令行工具进阶指南:Git、Shell与效率工具的进阶之路

掌握命令行工具,让你的开发效率突飞猛进。本文将深入探讨 Git 高级技巧、Shell 脚本自动化以及各种效率倍增的 CLI 工具。

📑 目录

  • Git 高级技巧与工作流
  • Shell 脚本自动化
  • 效率倍增的 CLI 工具
  • 容器与云原生工具
  • 网络诊断与监控
  • 文本处理工具链

🎯 Git 高级技巧与工作流

1. 🔄 Git 工作流最佳实践

Gitflow 工作流
# 初始化 Gitflow
git flow init

# 开始新功能开发
git flow feature start my-feature

# 完成功能开发
git flow feature finish my-feature

# 开始发布
git flow release start v1.0.0
git flow release finish v1.0.0
常用 Git 别名配置
# 在 ~/.gitconfig 中添加
[alias]
    # 状态简览
    st = status -sb
    
    # 优雅的日志展示
    lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
    
    # 快速提交
    cm = commit -m
    
    # 分支操作
    co = checkout
    cb = checkout -b
    
    # 撤销操作
    undo = reset --soft HEAD^
    
    # 储藏操作
    save = stash save
    pop = stash pop

2. 🛠 高级 Git 技巧

交互式 rebase
# 重写最近的 N 个提交
git rebase -i HEAD~3

# 常用 rebase 命令
# p, pick = 使用提交
# r, reword = 使用提交,但修改提交信息
# e, edit = 使用提交,但停下来修改
# s, squash = 使用提交,但合并到前一个提交
Git 补丁管理
# 创建补丁
git format-patch -1 HEAD

# 应用补丁
git am < patch-file.patch

# 检查补丁
git apply --check patch-file.patch
Git 子模块管理
# 添加子模块
git submodule add https://github.com/user/repo.git path/to/submodule

# 更新所有子模块
git submodule update --init --recursive

# 删除子模块
git submodule deinit path/to/submodule
git rm path/to/submodule

🤖 Shell 脚本自动化

1. 📝 Shell 脚本最佳实践

脚本模板
#!/usr/bin/env bash

# 严格模式
set -euo pipefail
IFS=$'\n\t'

# 变量声明
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"

# 日志函数
log() {
    echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $@"
}

# 错误处理
trap 'log "Error on line $LINENO"' ERR

# 帮助信息
show_help() {
    cat << EOF
Usage: ${SCRIPT_NAME} [options]

Options:
    -h, --help      显示帮助信息
    -v, --verbose   显示详细信息
EOF
}

# 参数解析
while [[ $# -gt 0 ]]; do
    case $1 in
        -h|--help)
            show_help
            exit 0
            ;;
        -v|--verbose)
            set -x
            shift
            ;;
        *)
            log "未知参数: $1"
            show_help
            exit 1
            ;;
    esac
done

# 主函数
main() {
    log "开始执行..."
    # 在这里添加你的代码
    log "执行完成"
}

# 执行主函数
main

2. 🔧 实用自动化脚本示例

项目初始化脚本
#!/usr/bin/env bash

# 项目初始化脚本
init_project() {
    local project_name=$1
    
    # 创建项目目录结构
    mkdir -p "${project_name}"/{src,tests,docs,scripts}
    
    # 创建基础文件
    touch "${project_name}/README.md"
    touch "${project_name}/.gitignore"
    
    # 初始化 Git 仓库
    cd "${project_name}"
    git init
    
    # 创建虚拟环境(Python 项目)
    python3 -m venv .venv
    
    echo "✅ 项目 ${project_name} 初始化完成!"
}
自动化部署脚本
#!/usr/bin/env bash

# 部署脚本
deploy() {
    local env=$1
    
    log "开始部署到 ${env} 环境..."
    
    # 运行测试
    npm test
    
    # 构建项目
    npm run build
    
    # 部署到对应环境
    case ${env} in
        prod)
            aws s3 sync dist/ s3://my-bucket/prod/
            ;;
        stage)
            aws s3 sync dist/ s3://my-bucket/stage/
            ;;
        *)
            log "未知环境: ${env}"
            exit 1
            ;;
    esac
    
    log "部署完成!"
}

⚡ 效率倍增的 CLI 工具

1. 🔍 模糊搜索工具

fzf - 命令行模糊查找器
# 安装 fzf
brew install fzf

# 配置 fzf
# 在 .zshrc 或 .bashrc 中添加
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --border"

# 使用示例
# 查找文件
vim $(fzf)

# 查找历史命令
ctrl-r

# 查找目录
cd $(find * -type d | fzf)

2. 📊 系统监控工具

htop - 进程监控
# 安装 htop
brew install htop

# 常用快捷键
# F1 - 帮助
# F2 - 设置
# F3 - 搜索
# F4 - 过滤
# F5 - 树形视图
# F6 - 排序
# F9 - 结束进程
tldr - 命令示例查看
# 安装 tldr
npm install -g tldr

# 使用示例
tldr tar
tldr git
tldr docker

3. 🚀 开发效率工具

httpie - HTTP 客户端
# 安装 httpie
brew install httpie

# 基本使用
http GET api.example.com/data

# 发送 JSON
http POST api.example.com/data name=test age:=25

# 自定义头部
http GET api.example.com/data Authorization:"Bearer token"
jq - JSON 处理工具
# 安装 jq
brew install jq

# 基本使用
echo '{"name": "John", "age": 30}' | jq '.name'

# 处理数组
echo '[{"id": 1}, {"id": 2}]' | jq '.[].id'

# 条件过滤
echo '[{"id": 1, "active": true}, {"id": 2, "active": false}]' | jq '.[] | select(.active == true)'

🐳 容器与云原生工具

1. Docker 常用命令与技巧

# 构建优化
docker build --no-cache --pull -t myapp:latest .

# 多阶段构建示例
FROM node:alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

# 容器资源限制
docker run -d \
  --name myapp \
  --memory="512m" \
  --cpus="0.5" \
  myapp:latest

# 清理无用资源
docker system prune -af --volumes

2. kubectl 效率提升技巧

# 上下文切换
kubectl config use-context my-context

# 命名空间切换
kubens my-namespace

# 快速查看所有资源
kubectl get all -A

# 保存 YAML 模板
kubectl get deployment my-app -o yaml > template.yaml

# 使用代理调试
kubectl port-forward svc/my-service 8080:80

# 查看容器日志
kubectl logs -f deployment/my-app -c main-container

🔍 网络诊断与监控

1. 网络诊断工具集

# mtr - 网络诊断
mtr google.com

# netstat 替代品 ss
ss -tuln

# 网络带宽测试
iperf3 -s  # 服务端
iperf3 -c server-ip  # 客户端

# tcpdump 抓包分析
tcpdump -i any port 80 -w output.pcap

2. 系统性能分析

# 磁盘 IO 监控
iostat -xz 1

# 内存分析
vmstat 1

# 进程分析
pidstat -d 1

# 网络连接监控
netstat -tnp

# 系统负载查看
uptime
w

⚙️ 文本处理工具链

1. awk 高级用法

# 计算总和
awk '{sum += $1} END {print sum}' numbers.txt

# 文本分列
awk -F',' '{print $1, $3}' data.csv

# 条件处理
awk '$3 > 1000 {print $1, $2}' sales.txt

# 格式化输出
awk '{printf "%-20s %10.2f\n", $1, $2}' data.txt

2. sed 实用技巧

# 批量替换
sed 's/old/new/g' file.txt

# 多行处理
sed '/start/,/end/d' file.txt

# 指定行修改
sed '3,6d' file.txt

# 条件替换
sed '/pattern/s/old/new/g' file.txt

3. 文本分析工具

# ripgrep - 超快的代码搜索
rg -i pattern
rg -g '*.js' 'function'

# fd - 更好的 find
fd -e md  # 查找 markdown 文件
fd -H -I  # 包含隐藏文件但排除 .git

# bat - better cat
bat --style=numbers file.txt

🔐 安全性与加密工具

1. GPG 密钥管理

# 生成密钥对
gpg --full-generate-key

# 导出公钥
gpg --export --armor user@example.com > public.key

# 加密文件
gpg -e -r user@example.com file.txt

# 解密文件
gpg -d file.txt.gpg

2. SSH 高级配置

# SSH 配置模板 (~/.ssh/config)
Host dev
    HostName dev.example.com
    User developer
    Port 2222
    IdentityFile ~/.ssh/dev_rsa
    ForwardAgent yes

# SSH 隧道
ssh -L 8080:localhost:80 user@remote

# SSH 跳板机
ssh -J jumphost user@destination

📊 数据可视化工具

1. 终端图表工具

# termgraph - 终端图表
echo "1 2 3 4" | termgraph

# asciigraph - ASCII 图表
echo "1 2 3 4" | asciigraph

2. 实时监控

# dstat - 系统资源统计
dstat -cdngy

# glances - 系统监控
glances

# ctop - 容器监控
ctop

🎯 效率提升最佳实践

  1. 建立个人的命令行工具箱

    • 收集常用命令
    • 编写自定义函数
    • 创建快捷别名
  2. 自动化日常任务

    • 使用 cron 调度任务
    • 编写工作流脚本
    • 配置自动备份
  3. 优化工作环境

    • 自定义提示符
    • 配置命令补全
    • 使用快捷键
  4. 持续学习和改进

    • 关注新工具
    • 参与开源社区
    • 分享经验心得

📚 扩展资源

  • 命令行艺术
  • Bash 指南
  • Shell 脚本示例
  • Awesome Shell
  • Docker 实践

🎉 结语

命令行工具的学习是一个持续的过程,建议:

  1. 从基础开始,逐步深入
  2. 多实践,多总结
  3. 关注工具更新
  4. 参与社区交流
  5. 建立个人知识库

记住:工具的价值在于使用,多练习、多实践才能真正提升效率!


💡 提示:本文介绍的工具和技巧需要在实践中不断调整和优化,找到最适合自己的工作方式。如果你有任何问题或建议,欢迎交流讨论!

如果你觉得这篇文章有帮助,欢迎点赞转发,也期待在评论区看到你的想法和建议!👇

咱们下一期见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/914420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RNN(循环神经网络)详解

1️⃣ RNN介绍 前馈神经网络&#xff08;CNN&#xff0c;全连接网络&#xff09;的流程是前向传播、反向传播和参数更新&#xff0c;存在以下不足&#xff1a; 无法处理时序数据&#xff1a;时序数据长度一般不固定&#xff0c;而前馈神经网络要求输入和输出的维度是固定的&a…

github加速下载zip

加速下载 1. 第一个网站 https://github.moeyy.xyz/把需要下载的链接复制进去&#xff0c;点下载https://github.com/dotnet/sdk/archive/refs/tags/v8.0.400.zip2. 第二个网站 https://gh-proxy.com/ 加速访问 2、查询github的ip地址 打开此网址&#xff1a;[IP 查询](http…

微服务电商平台课程三:搭建后台服务

前言 上节课,我们一起完成基础环境搭建,这节课, 我们利用上节课搭建我们电商平台.这节课我们采用开源代码进行搭建, 不论大家后续从事什么行业,都要学会站在巨人的肩膀上. 之前所说的,整个微服务平台的技术栈也是非常多的, 由于时间和效果的关系, 我们不可能从每个技术一步一…

模拟 [leecode 54] 螺旋矩阵

一、题解&#xff1a;上下左右四条线不断收紧 int l 0, r matrix[0].size() - 1;int high 0, low matrix.size() - 1;从左到右&#xff0c;顶部一层遍历完往下移一位&#xff0c;high&#xff1b;if(high>low) break;//遍历完了从上到下&#xff0c;遍历完右侧往左移一位…

丹摩征文活动|Llama3.1的部署与使用指南

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 丹摩征文 1. 初识Llama3.12. 部署流程创建实例登录实例部署LLama3.1 3. 实践使用教程4. 实践感想 前言&#xff1a;人工智能&#xff08;AI&…

人际交往中,想要有好人缘,需做到“三要”,做到一个,也是好事

人际交往中&#xff0c;想要有好人缘&#xff0c;需做到“三要”&#xff0c;做到一个&#xff0c;也是好事 在这个世上&#xff0c;每个人都是一座孤岛&#xff0c;但通过人际交往这座桥梁&#xff0c;我们能够彼此相连&#xff0c;共同编织出一张温暖的社会网络。 好人缘&a…

Sql server 备份还原方法

备份 方法1&#xff0c;选择对应的数据库名-------》右键 任务---------》备份 默认备份类型 完整 文件后缀 .bak 方法2,选择对应的数据库名-------》右键 任务----------》生成脚本 选择要编写的数据库对象(表&#xff0c;视图&#xff0c;存储过程等) 选择对应的 服…

NVR设备ONVIF接入平台EasyCVR私有化部署视频平台如何安装欧拉OpenEuler 20.3 MySQL

在当今数字化时代&#xff0c;安防视频监控系统已成为保障公共安全和个人财产安全的重要工具。NVR设备ONVIF接入平台EasyCVR作为一款功能强大的智能视频监控管理平台&#xff0c;它不仅提供了视频远程监控、录像、存储与回放等基础功能&#xff0c;还涵盖了视频转码、视频快照、…

【MySQL】数据库知识突破:数据类型全解析与详解

前言&#xff1a;本节内容讲述MySQL的数据类型&#xff0c; 我们在学习之前的建表的时候已经用过各种各样的数据类型。 比如int、varchar、char类型等等。其中它们是对表的结构的操作&#xff0c; 并没有对数据的内容进行操作&#xff0c;所以它叫做DDL。另外&#xff0c;还有…

管理 Elasticsearch 变得更容易了,非常容易!

作者&#xff1a;来自 Elastic Ken Exner Elasticsearch 用户&#xff0c;我们听到了你的心声。管理 Elasticsearch 有时会变得很复杂&#xff0c;面临的挑战包括性能调整、问题检测和资源优化。我们一直致力于简化你的体验。今天&#xff0c;我们宣布了自收购 Opster 以来的一…

Android Parcelable和Serializable的区别与联系

在Android开发中&#xff0c;Parcelable和Serializable是两种用来在组件之间传递数据的序列化机制。它们有不同的使用场景和性能特点。 以下是它们之间的关系和区别&#xff1a; 1. 什么是 Parcelable Parcelable 是 Android 特有的接口&#xff0c;用于高效地在进程间传递数…

Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载

Moonshine 是由 Useful Sensors 公司推出的一系列「语音到文本&#xff08;speech-to-text, STT&#xff09;转换模型」&#xff0c;旨在为资源受限设备提供快速而准确的「自动语音识别&#xff08;ASR&#xff09;服务」。Moonshine 的设计特别适合于需要即时响应的应用场景&a…

GitHub桌面版汉化

桌面版下载地址 https://desktop.github.com/ 汉化包下载地址 Releases cngege/GitHubDesktop2Chinese GitHub 点击运行 重启后

linux-vlan(1)

# VLAN # 1.topo # 2.创建命名空间 ip netns add ns1 ip netns add ns2 ip netns add ns3 # 3.创建veth设备 ip link add ns1-veth0 type veth peer name ns21-veth0 ip link add ns3-veth0 type veth peer name ns23-veth0 # 4.veth设备放入命名空间,启动接口 ip link set n…

鸿蒙ArkTS中的获取网络数据

一、通过web组件加载网页 在C/S应用程序中&#xff0c;都有网络组件用于加载网页&#xff0c;鸿蒙ArkTS中也有类似的组件。   web组件&#xff0c;用于加载指定的网页&#xff0c;里面有很多的方法可以调用&#xff0c;虽然现在用得比较少&#xff0c;了解还是必须的。   演…

屏幕解析工具——OmniParser

0 引言 OmniParser是微软开源的一种屏幕解析工具&#xff0c;提供了一种将用户界面截图解析为结构化元素的综合方法&#xff0c;通过此方法可以对UI界面进行可交互元素的提取和描述&#xff0c;然后将此结构化信息和任务指令&#xff0c;输入到大模型中&#xff0c;以增强大模…

string------1

文章目录 一. STL1.概念2.版本 二. string类2.1 为什么学习string类2. 标准库中的string类2.2.1 构造&#xff08;7个&#xff09;2.2.2 对string类对象进行“访问和修改”&#xff08;1&#xff09;operator[]&#xff08;2&#xff09;迭代器1.迭代器的使用2.迭代器的价值&am…

Docker-软件容器平台

一、容器 1、什么是容器 容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署 容器镜像是轻量的、可执行的独立软件包 &#xff0c;包含软件运行所需的所有内容&#xff1a;代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于 Linux 和 Windows…

LED和QLED的区别

文章目录 1. 基础背光技术2. 量子点技术的引入3. 色彩表现4. 亮度和对比度5. 能效6. 寿命7. 价格总结 LED和 QLED都是基于液晶显示&#xff08;LCD&#xff09;技术的电视类型&#xff0c;但它们在显示技术、色彩表现和亮度方面有一些关键区别。以下是两者的详细区别&#xff…

速通LoRA:《LoRA: Low-Rank Adaptation of Large Language Models》全文解读

文章目录 总览AbstractIntroductionProblem StatementAren’t Existing Solutions Good Enough?Our MethodLow-Rank-Parametrized Update MatricesApplying LoRA to Transformer 何为高斯随机初始化Empirical ExperimentsBaselinesRoBERTa base/largeDeBERTa XXLGPT-2 medium/…