【工具】Linux远程开发核心工具,Git命令缩写与SSH常用命令
文章目录
嗯,我又来灌水每月的基础指标了~(最近发现git的命令缩写很好用,开一篇记录一下
1、git命令缩写(分支管理,提交撤销,合并变基,远程协作)
shell
# ==================== 基础操作 ====================
g = 'git' # git 命令本身缩写
ga = 'git add' # 添加文件到暂存区
gaa='git add --all' # 添加所有修改/新增/删除的文件到暂存区
gapa='git add --patch' # 交互式选择修改块添加到暂存区
gcf='git config --list' # 查看git配置列表
gcl='git clone --recursive' # 克隆仓库并递归拉取子模块
gclean='git clean -fd' # 清理未跟踪的文件和目录(-f强制 -d目录)
gpristine='git reset --hard && git clean -dfx' # 重置到干净状态(硬重置+清理所有)
gst='git status' # 查看工作区状态
gsb='git status -sb' # 简洁格式查看状态(-s简短 -b显示分支)
gss='git status -s' # 简短格式查看状态
# ==================== 分支管理 ====================
gb='git branch' # 列出本地分支
gba='git branch -a' # 列出所有分支(本地+远程)
gbl='git blame -b -w' # 查看文件每行的修改记录(-b忽略空白 -w忽略空格变化)
gbnm='git branch --no-merged' # 列出未合并到当前分支的分支
gbr='git branch --remote' # 列出远程分支
gcb='git checkout -b' # 创建并切换到新分支
gco='git checkout' # 切换分支/恢复文件
gcm='git checkout master' # 切换到master分支
# ==================== 提交与撤销 ====================
gc='git commit -v' # 提交并显示详细修改记录(-v详细)
gca='git commit -v -a' # 提交所有已跟踪文件的修改(-a自动add)
gcam='git commit -a -m' # 提交所有已跟踪文件并加提交信息
gcmsg='git commit -m' # 提交并指定提交信息
gcs='git commit -S' # 签名提交(需配置GPG)
grh='git reset HEAD' # 撤销暂存区的修改(保留工作区)
grhh='git reset HEAD --hard' # 硬重置(清空暂存区+工作区,恢复到指定版本)
gru='git reset --' # 恢复指定文件到暂存区状态
gcp='git cherry-pick' # 挑选单个提交应用到当前分支
# ==================== 日志查看 ====================
glg='git log --stat' # 查看日志并显示文件修改统计
glgp='git log --stat -p' # 查看日志+修改统计+详细diff
glgg='git log --graph' # 图形化显示提交日志
glgga='git log --graph --decorate --all' # 图形化显示所有分支的日志(带装饰)
glgm='git log --graph --max-count=10' # 图形化显示最近10条日志
glo='git log --oneline --decorate' # 单行显示日志(带分支/标签装饰)
glol="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" # 彩色图形化单行日志
glola="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all" # 彩色图形化单行日志(所有分支)
glog='git log --oneline --decorate --graph' # 单行+装饰+图形化日志
gloga='git log --oneline --decorate --graph --all' # 单行+装饰+图形化日志(所有分支)
gdct='git describe --tags `git rev-list --tags --max-count=1`' # 获取最近的标签
gdt='git diff-tree --no-commit-id --name-only -r' # 显示某次提交修改的文件列表
# ==================== 远程协作 ====================
gf='git fetch' # 拉取远程仓库更新(不合并)
gfa='git fetch --all --prune' # 拉取所有远程仓库更新并清理无效远程分支
gl='git pull' # 拉取并合并远程分支
gp='git push' # 推送本地分支到远程
gpd='git push --dry-run' # 模拟推送(不实际执行,检查是否有问题)
gpoat='git push origin --all && git push origin --tags' # 推送所有分支和标签到origin
gpu='git push upstream' # 推送到upstream远程仓库
gpv='git push -v' # 详细输出推送过程
gr='git remote' # 查看远程仓库列表
gra='git remote add' # 添加远程仓库
grmv='git remote rename' # 重命名远程仓库
grrm='git remote remove' # 删除远程仓库
grset='git remote set-url' # 修改远程仓库地址
grup='git remote update' # 更新远程仓库信息
grv='git remote -v' # 查看远程仓库地址(详细)
gup='git pull --rebase' # 拉取远程更新并变基(避免多余合并提交)
grt='cd $(git rev-parse --show-toplevel || echo ".")' # 切换到git仓库根目录
# ==================== 合并与变基 ====================
gm='git merge' # 合并分支
gmom='git merge origin/master' # 合并origin/master到当前分支
gmum='git merge upstream/master' # 合并upstream/master到当前分支
gmt='git mergetool --no-prompt' # 启动合并工具(无提示)
gmtvim='git mergetool --no-prompt --tool=vimdiff' # 使用vimdiff作为合并工具
grb='git rebase' # 变基
grba='git rebase --abort' # 终止变基
grbc='git rebase --continue' # 继续变基(解决冲突后)
grbi='git rebase -i' # 交互式变基(修改提交历史)
grbm='git rebase master' # 基于master分支变基
grbs='git rebase --skip' # 跳过当前提交(变基时)
gbs='git bisect' # 二分查找定位bug提交
gbsb='git bisect bad' # 标记当前提交为有bug
gbsg='git bisect good' # 标记当前提交为无bug
gbsr='git bisect reset' # 重置二分查找
gbss='git bisect start' # 开始二分查找
# ==================== 暂存管理 ====================
gsta='git stash save' # 暂存当前工作区修改
gstaa='git stash apply' # 应用最近的暂存(不删除暂存记录)
gstd='git stash drop' # 删除最近的暂存记录
gstl='git stash list' # 列出所有暂存记录
gstp='git stash pop' # 应用并删除最近的暂存记录
gsts='git stash show --text' # 显示暂存的详细修改内容
# ==================== 差异对比 ====================
gd='git diff' # 查看工作区与暂存区的差异
gdca='git diff --cached' # 查看暂存区与本地仓库的差异
gdw='git diff --word-diff' # 按单词粒度显示差异
# ==================== 子模块/其他 ====================
gsi='git submodule init' # 初始化子模块
gsu='git submodule update' # 更新子模块
gsps='git show --pretty=short --show-signature' # 显示提交信息+签名
gsd='git svn dcommit' # 将git提交推送到svn仓库
gsr='git svn rebase' # 从svn仓库拉取更新并变基
2、SSH常用命令(连接管理,密钥管理,服务管理)
1、基础命令(连接管理,密钥管理,服务管理)
shell
# ==================== 连接管理 ====================
ssh user@hostname # 基础远程登录(默认端口22)
ssh user@hostname -p 2222 # 指定端口登录远程服务器(-p指定端口)
ssh -l user hostname # 等价于ssh user@hostname(-l指定登录用户)
ssh hostname "ls -l /home" # 远程执行单条命令(执行后断开连接)
ssh -t user@hostname "bash -l" # 强制分配伪终端(解决远程执行交互式命令报错)
ssh -o ConnectTimeout=10 user@ip # 设置连接超时时间(10秒,避免长时间等待)
ssh -v user@hostname # 详细输出连接过程(排错用,-vv/-vvv更详细)
# ==================== 密钥管理(免密登录核心) ====================
ssh-keygen # 生成默认RSA密钥(存~/.ssh/id_rsa)
ssh-keygen -t ed25519 -C "email@example.com" # 生成更安全的ed25519密钥(推荐)
ssh-keygen -t rsa -b 4096 -C "email@example.com" # 生成4096位RSA密钥(兼容老服务器)
ssh-keygen -f ~/.ssh/my_key # 指定密钥文件名(避免覆盖默认密钥)
ssh-keygen -p -f ~/.ssh/id_rsa # 修改现有密钥的密码(-p修改密码)
ssh-keygen -R hostname # 移除known_hosts中指定主机的指纹(解决主机指纹变更报错)
ssh-copy-id user@hostname # 将本地公钥复制到远程服务器(免密登录核心)
ssh-copy-id -p 2222 -i ~/.ssh/my_key.pub user@hostname # 指定端口和公钥文件复制
cat ~/.ssh/id_rsa.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" # 手动复制公钥(无ssh-copy-id时用)
ssh-agent bash # 启动ssh-agent(管理私钥密码缓存)
ssh-add # 将默认私钥添加到ssh-agent(免重复输密码)
ssh-add ~/.ssh/my_key # 添加指定私钥到ssh-agent
ssh-add -l # 列出已添加的密钥
ssh-add -d ~/.ssh/my_key # 从ssh-agent删除指定密钥
ssh-add -x # 锁定ssh-agent(需密码解锁)
ssh-add -X # 解锁ssh-agent
# ==================== SSH服务管理(服务器端) ====================
systemctl start sshd # 启动SSH服务(CentOS/RHEL)
systemctl start ssh # 启动SSH服务(Ubuntu/Debian)
systemctl enable sshd # 设置SSH开机自启
systemctl status sshd # 查看SSH服务状态
systemctl restart sshd # 重启SSH服务(修改配置后生效)
vim /etc/ssh/sshd_config # 编辑SSH服务配置文件
sshd -t # 检查sshd_config配置语法是否正确
grep Port /etc/ssh/sshd_config # 查看SSH服务监听端口
grep PermitRootLogin /etc/ssh/sshd_config # 查看是否允许root登录
2、更多命令(文件传输、端口转发、配置与优化、故障排查)
shell
# ==================== 故障排查 ====================
ssh -vvv user@hostname # 最详细的连接日志(定位连接失败原因)
telnet hostname 22 # 测试远程服务器22端口是否开放
nc -zv hostname 22 # 等价于telnet,测试端口连通性
grep ssh /var/log/auth.log # 查看SSH登录日志(Ubuntu/Debian)
grep ssh /var/log/secure # 查看SSH登录日志(CentOS/RHEL)
# ==================== 文件传输(基于SSH) ====================
# SCP(简单文件传输)
scp local_file user@hostname:/remote/path # 上传本地文件到远程服务器
scp user@hostname:/remote/file local_path # 下载远程文件到本地
scp -r local_dir user@hostname:/remote/path # 递归上传目录(-r递归)
scp -P 2222 local_file user@hostname:/remote/path # 指定端口传输(注意是大写P)
scp -C local_file user@hostname:/remote/path # 压缩传输(-C启用压缩,节省带宽)
# RSYNC(增量同步,比SCP高效)
rsync -avz local_file user@hostname:/remote/path # 上传文件(-a归档 -v详细 -z压缩)
rsync -avz user@hostname:/remote/file local_path # 下载文件
rsync -avz --delete local_dir user@hostname:/remote/path # 同步并删除远程多余文件
rsync -e "ssh -p 2222" local_file user@hostname:/remote/path # 指定SSH端口同步
# SFTP(交互式文件传输)
sftp user@hostname # 进入交互式SFTP界面
sftp -P 2222 user@hostname # 指定端口进入SFTP
sftp -b batch.txt user@hostname # 执行批量SFTP命令(batch.txt为命令列表)
# ==================== 端口转发(内网穿透/代理) ====================
# 本地端口转发(访问远程内网服务)
ssh -L 8080:192.168.1.100:80 user@jump_server # 本地8080端口映射到远程内网192.168.1.100的80端口
ssh -L 0.0.0.0:8080:192.168.1.100:80 user@jump_server # 允许局域网其他设备访问转发端口
# 远程端口转发(暴露本地服务到远程)
ssh -R 8080:127.0.0.1:80 user@public_server # 远程服务器8080端口映射到本地80端口
ssh -R 0.0.0.0:8080:127.0.0.1:80 user@public_server # 远程服务器所有网卡监听8080
# 动态端口转发(SOCKS代理,全局翻墙)
ssh -D 1080 user@proxy_server # 本地1080端口开启SOCKS5代理
ssh -D 0.0.0.0:1080 user@proxy_server # 允许局域网使用该代理
# 持久化端口转发(断开不失效)
ssh -fN -L 8080:192.168.1.100:80 user@jump_server # -f后台运行 -N不执行远程命令
# ==================== 配置与优化 ====================
ssh -o ServerAliveInterval=60 user@hostname # 每60秒发送心跳包(防止连接断开)
ssh -o StrictHostKeyChecking=no user@hostname # 跳过主机指纹验证(测试环境用,不安全)
ssh -o UserKnownHostsFile=/dev/null user@hostname # 不保存主机指纹到known_hosts
# 编辑SSH配置文件(简化连接)
vim ~/.ssh/config # 打开本地SSH配置文件
# 配置示例(添加后可直接ssh server1登录)
# Host server1
# HostName 192.168.1.100
# User root
# Port 2222
# IdentityFile ~/.ssh/my_key
# ServerAliveInterval 60
chmod 700 ~/.ssh # 设置.ssh目录权限(必须700,否则SSH报错)
chmod 600 ~/.ssh/id_rsa # 设置私钥权限(必须600,否则SSH拒绝使用)
chmod 644 ~/.ssh/id_rsa.pub # 设置公钥权限
chmod 600 ~/.ssh/authorized_keys # 设置远程服务器授权密钥文件权限