当前位置: 首页 > news >正文

小工具大体验:rlwrap加持下的Oracle/MySQL/SQL Server命令行交互

rlwrap = readline wrapper:不改你的客户端二进制,外面套一层,就能在 sqlplus/rman/dgmgrl 里用方向键、历史、Ctrl+A/ECtrl+R 搜索等“现代化”编辑体验。只对交互有用;脚本里别用。

1 为什么需要 rlwrap(痛点→收益)

  • 原生 sqlplus/rman/dgmgrl 在很多 Linux 发行版上不带 readline:方向键鬼畜、退格混乱、历史丢失。

  • DBA 日常交互多:敲错一行回天乏术,效率肉眼可见地掉。

  • rlwrap 让交互体验直线上升:可编辑、可搜索、可补全(伪字典)、可记忆

  • rlwrap 运行在你的终端目标程序之间,提供一个伪 TTY。

  • 你敲的键先到 rlwrap → 交给 GNU Readline 做行编辑/历史/快捷键 → 再把结果喂给 sqlplus 等。

  • “外套式”:目标程序不需要任何修改;rlwrap 也不解析 SQL,仅做行层面的编辑与历史管理。

2 何时该用、何时不该用

2.1 该用:

  • 你在终端里交互式使用 sqlplusrmandgmgrlredis-clipsql 等。

  • 你想统一全家桶的交互体验(同一套快捷键、同一套历史搜索逻辑)。

2.2 不该用:

  • 脚本/cron/非交互场景(没有 TTY,rlwrap 反而会制造问题)。

  • 需要严格可重放的自动化执行(历史/别名会引入不确定性)。

  • 你要把密码写在命令行(历史记录会“抓包”到敏感信息,强烈不建议)。

3 安装 & 配置(极简)

3.1 服务器可联网

=== 一键设置 rlwrap + Oracle/MySQL/SQL Server 别名(含备份)===
建议使用具备 sudo 权限的账号执行1) 安装 rlwrap
if command -v dnf >/dev/null 2>&1; thensudo dnf -y install rlwrap
elsesudo yum -y install rlwrap || { sudo yum -y install epel-release && sudo yum -y install rlwrap; }
fi2) 备份 .bash_profile(回滚更安心)
2.1 oracle 用户
sudo bash -lc '[ -f ~oracle/.bash_profile ] && cp -a ~oracle/.bash_profile ~oracle/.bash_profile.bak.$(date +%F-%H%M%S) || true'
2.2 当前登录用户
[ -f ~/.bash_profile ] && cp -a ~/.bash_profile ~/.bash_profile.bak.$(date +%F-%H%M%S) || true3) 设置别名
3.1 Oracle(写入 oracle 用户)
sudo bash -lc "cat >> ~oracle/.bash_profile <<'EOF'
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias dgmgrl='rlwrap dgmgrl'
EOF
source ~oracle/.bash_profile"3.2 MySQL/MariaDB + SQL Server(写入当前用户)
cat >> ~/.bash_profile <<'EOF'
alias mysql='rlwrap mysql'
alias mysqladmin='rlwrap mysqladmin'
alias mysqldump='rlwrap mysqldump'
alias mariadb='rlwrap mariadb'   # 如使用 MariaDB 客户端
alias sqlcmd='rlwrap sqlcmd'
alias bcp='rlwrap bcp'
alias osql='rlwrap osql'         # 如果还在用 osql
EOF
source ~/.bash_profile4.(可选)系统级:所有用户登录 shell 生效
# sudo tee /etc/profile.d/rlwrap_aliases.sh >/dev/null <<'EOF'
# case $- in *i*) ;; *) return ;; esac
# if command -v rlwrap >/dev/null 2>&1; then
#   alias sqlplus='rlwrap sqlplus'; alias rman='rlwrap rman'; alias dgmgrl='rlwrap dgmgrl'
#   alias mysql='rlwrap mysql'; alias mysqladmin='rlwrap mysqladmin'; alias mysqldump='rlwrap mysqldump'; alias mariadb='rlwrap mariadb'
#   alias sqlcmd='rlwrap sqlcmd'; alias bcp='rlwrap bcp'; alias osql='rlwrap osql'
# fi
# EOF

3.2 服务器不可联网

内网环境分三招:有内网仓库直接装;没有就“离线打包 RPM”;再不行就“源码编译”。以下三种方式和三大库别名都塞进一个框里(任选其一路径执行即可)。

# =========================
# 内网服务器安装 rlwrap + 三大数据库别名(任选其一路径)
# =========================# ==== 路径 A:已有公司内网 YUM/DNF 仓库(最省事)====
# EL8/Oracle Linux 8+
sudo dnf -y install rlwrap || true
# EL7/CentOS7/RHEL7
sudo yum -y install rlwrap || true# ==== 路径 B:离线 RPM 安装(推荐通用)====
# 步骤 B1(在一台“可上网且与目标机同发行版/同大版本”的机器上):
#   EL8:
#     sudo dnf -y install epel-release dnf-plugins-core
#     dnf download --resolve rlwrap
#   EL7:
#     sudo yum -y install epel-release yum-utils
#     yumdownloader --resolve rlwrap
#   然后把当前目录下的 *.rpm 打包并拷到内网服务器:
#     tar czf rlwrap-offline.tgz *.rpm
#     scp rlwrap-offline.tgz user@<内网服务器>:/tmp/# 步骤 B2(在内网服务器上解包并安装):
#   cd /tmp && tar xzf rlwrap-offline.tgz
#   EL8 优先:
sudo dnf -y localinstall /tmp/*.rpm || \
#   EL7 其次:
sudo yum -y localinstall /tmp/*.rpm || \
#   兜底:
sudo rpm -Uvh /tmp/*.rpm --nodeps# ==== 路径 C:源码编译(万不得已)====
# 1) 准备依赖(按发行版选一组):
#   EL8:
sudo dnf -y install gcc make readline-devel ncurses-devel || true
#   EL7:
sudo yum -y install gcc make readline-devel ncurses-devel || true
# 2) 将 rlwrap-<version>.tar.gz 复制到内网机并编译安装:
#   tar xzf rlwrap-*.tar.gz && cd rlwrap-*
#   ./configure && make
#   sudo make install
# 3) 验证路径(通常在 /usr/local/bin):
which rlwrap || echo "rlwrap 未在 PATH 中,考虑将 /usr/local/bin 加入 PATH"# ==== 验证安装(任一安装路径完成后执行)====
rlwrap -v | head -n1 || echo "rlwrap 未安装成功,请改用其他路径重试"# ==== 起别名前,建议备份 .bash_profile(可回滚)====
# 备份 oracle 用户
sudo bash -lc '[ -f ~oracle/.bash_profile ] && cp -a ~oracle/.bash_profile ~oracle/.bash_profile.bak.$(date +%F-%H%M%S) || true'
# 备份当前登录用户
[ -f ~/.bash_profile ] && cp -a ~/.bash_profile ~/.bash_profile.bak.$(date +%F-%H%M%S) || true# ==== Oracle:写到 oracle 用户 ====
sudo bash -lc "grep -q 'rlwrap sqlplus' ~oracle/.bash_profile 2>/dev/null || cat >> ~oracle/.bash_profile <<'EOF'
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias dgmgrl='rlwrap dgmgrl'
EOF
source ~oracle/.bash_profile"# ==== MySQL/MariaDB:写到“你平时登录的账号” ====
grep -q "rlwrap mysql" ~/.bash_profile 2>/dev/null || cat >> ~/.bash_profile <<'EOF'
alias mysql='rlwrap mysql'
alias mysqladmin='rlwrap mysqladmin'
alias mysqldump='rlwrap mysqldump'
alias mariadb='rlwrap mariadb'   # 若用 MariaDB 客户端
EOF# ==== SQL Server(Linux 终端):仍写当前账号 ====
grep -q "rlwrap sqlcmd" ~/.bash_profile 2>/dev/null || cat >> ~/.bash_profile <<'EOF'
alias sqlcmd='rlwrap sqlcmd'
alias bcp='rlwrap bcp'
alias osql='rlwrap osql'
EOF# 让当前账号的别名生效
source ~/.bash_profile 2>/dev/null || true# ==== 使用与提示 ====
echo "✅ 完成:交互使用时通过别名启动(sqlplus/mysql/sqlcmd 等);脚本/cron 请直接调用原始二进制,勿用 rlwrap。"
echo "🔙 回滚:用备份文件覆盖回去,再 source 对应的 .bash_profile 即可。"
http://www.dtcms.com/a/456718.html

相关文章:

  • AI智能体的未来:从语言泛化到交互革命
  • 云计算划分标准与Kubernetes NetworkPolicy深度解析
  • 学院网站建设功能网络公关案例
  • 【HTML】实现一个AI角色切换网页页面
  • 【51单片机】【protues仿真】基于51单片机矩阵电子琴系统
  • 网站怎样做免费优化有效果组织部信息化建设官方网站
  • 使用telnet进行Dubbo接口测试
  • 定时器实现非阻塞式程序
  • ArrayList - 数据结构 - 数组
  • 做网站的注意什么问题哪些经营范围是包含网站开发的
  • 【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具
  • MyBatis Plus 核心功能与用法
  • LNMP架构实践
  • 自己怎么建个网站赚钱吗外贸品牌推广公司
  • 在线咨询 1 网站宣传建立免费公司网站
  • 10-存储过程和存储函数
  • leetCode101:对称二叉树
  • 【Linux】网络部分——Socket编程 UDP实现网络云服务器与本地虚拟机的基本通信
  • 实战项目:鸿蒙多端协同智能家居控制 App 开发全流程
  • 个人用云计算学习笔记 --19 (MariaDB服务器)
  • Linux -- 信号【中】
  • Azure - 尝试创建并使用一下Azure AI Search
  • NtripShare GNSS接收机配置系统SPI读取村田SCL3300倾角数据
  • Python私教FastAPI+React构建Web应用02 什么是全栈Web应用
  • 开源安全管理平台wazuh-文件完整性监控FIM
  • 网站建设选超速云建站黄页88成立时间
  • 南通做网站ntwsd开发公司总工年终总结
  • VS Code文件监视排除设置详解
  • 3D坐标旋转公式
  • 《Git 从入门到进阶》教学大纲