我尝试用 whereis nginx
返回了
nginx: /usr/lib64/nginx /etc/nginx /usr/local/sbin/nginx /usr/share/nginx
这几个目录下都没有nginx。。。
如何找?
我尝试用 whereis nginx
返回了
nginx: /usr/lib64/nginx /etc/nginx /usr/local/sbin/nginx /usr/share/nginx
这几个目录下都没有nginx。。。
如何找?
尽管已经有很多答案了,但我还是想分享下我的方式,毕竟我以前也遭受过这样的痛苦。
不知道你用的哪个发行版,可以类推下。
我 CentOS 下,都是这样找到它的:
systemctl status nginx
展示出的信息很详细:
nginx.service - SYSV: NGINX is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server
Loaded: loaded (/etc/rc.d/init.d/nginx; bad; vendor preset: disabled)
Active: active (running) since 六 2021-10-09 08:35:38 CST; 1 weeks 6 days ago
Docs: man:systemd-sysv-generator(8)
Main PID: 1150 (nginx)
Tasks: 3
Memory: 44.4M
CGroup: /system.slice/nginx.service
├─ 1050 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
├─216670 nginx: worker process
└─216671 nginx: worker process
其中这句就指出 nginx 的具体位置:
nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
这个没有完全可行的办法,因为whereis之搜索PATH路径下的情况,而实际用到的nginx可能是某个软件自包含,且没有在搜索路径中的。
要么用进程全路径来判断,要么用全局搜索来找
不过你其实还可以找相关软件,是否在相关软件中包含。
作为运维人员的分析如下:
首先我们分析问题“找不到NG安装路径”,提问者应该是想放新文件到网站内容目录,或者确认某信息。
我们要找的应该是正在运行的NG,不管机器上有多少个NG可执行文件。//查找机器上存在的东西可以用find,或者更好的是locate再加以过滤定位。
思路应该从“正在运行的”入手: //
如果which无法在变量环境找到nginx,那么说明正在运行的NG并未加入变量环境、而是直接指定绝对路径或者相对路径来启动的。另一个可能是NG运行后变量环境中的NG被清除了。
思路从运行中的NG入手
获取进程信息:
ps -ef |grep nginx
尝试获取“用带路径的启动方式”的NG其位置:
pwdx PID 命令
[root@BLUBN-ALY-02 ~]# pwdx $(ps -ef | grep -v grep | grep nginx | awk '{print$2}')
1375: /usr/local/nginx/sbin
1376: /usr/local/nginx/sbin
如果到这里得到的是 ./nginx ,那么只剩下一种可能,启动时那个死鬼跑到目录后用了相对路径来启动。这样变量环境也找不到,也没有更多信息了。 这是最无语的一种情况。
如果是此类情况,记得以后一定要让你们的运维杜绝,太不负责任了~
此时有3中方法做进一步尝试:
1>:在 /proc/进程号/ 目录下找到有用的信息;
2>: 使用locate命令快捷查找,如下:
locate nginx |grep "nginx$" // 建议执行前先执行 updatedb更新最新索引
从这里可以得到关键的有用信息
3>: 最后一招是无赖的大招 -- 从网站内容入手 (通过网站内容精准的判断网站的代码目录)
nohup grep -ir "关键字" / >grepout.log &
可以把 / 换成可能的目录节省时间;或者直接从/找所有但可能要几天几夜(看服务器文件多少)。可以一边执行,一边继续找。
最后执行完毕后(通过 ps -ef 命令确认是否结束),查看输出日志grepout.log
这篇文章写的很详细了https://segmentfault.com/a/11...不同系统不同编译参数导致的各种目录都可能不一样。通过命令查询是最准确的
8 回答3.6k 阅读
2 回答1.8k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答1.8k 阅读
1 回答1.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
不应该啊……正常安装的化 whereis 不应该找不到啊……
或者你可以试试通过其他方式查找。
如果是通过 apt/yum 这些包管理器安装的,只需要:
如果是自己编译的或者其他安装方式,一种办法是通过进程标识符找。如果 nginx 进程正在运行着,你可以先找到它的 pid,然后再去 proc 里找:
打印结果里就有程序的启动路径,一般而言就是安装路径了。
另一种方式是通过系统服务找。比如你可能会用 systemd 来管理系统服务,那么它的配置文件里就会记录程序的启动路径。