2016/12/15
目的
写一段自动化shell脚本, 获取mysql的安装bin目录, 比如 /dir1/dir2/mysql/bin/
假设:
1. mysql已经跑起来了
2. 不是从apt-get之类的安装的mysql, 而是自己编译安装的
3. 此时mysql这个命令没有被加到 PATH 中, 因此只能使用绝对路径调用它
思路
利用 read -p , 由用户输入, (不好, 不自然)
利用 ps -ef , 然后从中截取到我所需要的目录 (倾向于这个, 但是有几个问题没有解决, 见下文 )
其他方法( 也许有更好的方法 ? )
问题
. 截取的数据不干净( 见相关代码 )
比如
root 813 1 0 Dec13 ? 00:00:00 /usr/bin/abrt-watch-log -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detected ernel BUG at list_del corruption list_add c
能得到
/usr/bin/abrt-watch-log
然后 dirname
得到 /usr/bin/
总感觉这个思路很脆弱( 比如做很多前提假设, 不健壮, 脆弱 )
有更好的方法?
shell脚本, 我的思路
1. ps -ef 输出如下格式
UID PID PPID C STIME TTY TIME CMD
2. 利用 grep 'mysql' 过滤
3. 利用 cut 或 awk 取需要的数据
产品版本: mysql(自己编译)
操作系统: RedHatLinux
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
不知道行不行
可以从这个思路出发
查找
比如对于
ps -ef的输出,查找mysql查找要求
mysql后面有空格,前面允许有路径,最好的情况下前面不会再有其他的可执行文件之类的东西就是说不会出现
/usr/bin/something mysql ....之类的情况用正则来匹配分隔之后的字符串就是
^[a-zA-Z/]*/mysql|^mysql然后我们的目标就是进程号
路径
在
/proc/进程号/下面,exe对应就是可执行文件的路径思路:
使用netstat查找mysql进程,并获取进程号
拿着进程号到/proc/<进程号>/查看exe的链接地址
dirname获取路径
获得只存在于/dir1/dir2/mysql/bin/下的命令名,假设为 mysqld_safe,然后使用find命令:
试试这个
查询语句:
ps -ef | grep mysql | grep basedir | awk '{ print $9 }'| cut -d '=' -f2