如何找到nginx安装目录?

我尝试用 whereis nginx

返回了

nginx: /usr/lib64/nginx /etc/nginx /usr/local/sbin/nginx /usr/share/nginx

这几个目录下都没有nginx。。。

如何找?

阅读 11.9k
7 个回答

不应该啊……正常安装的化 whereis 不应该找不到啊……

或者你可以试试通过其他方式查找。


如果是通过 apt/yum 这些包管理器安装的,只需要:

which nginx

image.png


如果是自己编译的或者其他安装方式,一种办法是通过进程标识符找。如果 nginx 进程正在运行着,你可以先找到它的 pid,然后再去 proc 里找:

ps -aux | grep nginx
# 假如得到的 pid 是 10086,那么就再执行
ls -l /proc/10086/exe

打印结果里就有程序的启动路径,一般而言就是安装路径了。

image.png


另一种方式是通过系统服务找。比如你可能会用 systemd 来管理系统服务,那么它的配置文件里就会记录程序的启动路径。

cat /usr/lib/systemd/system/nginx.service # 假如你的配置文件在此路径下

image.png

find / -name 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更新最新索引
image.png
从这里可以得到关键的有用信息
3>: 最后一招是无赖的大招 -- 从网站内容入手 (通过网站内容精准的判断网站的代码目录)
nohup grep -ir "关键字" / >grepout.log &
可以把 / 换成可能的目录节省时间;或者直接从/找所有但可能要几天几夜(看服务器文件多少)。可以一边执行,一边继续找。
最后执行完毕后(通过 ps -ef 命令确认是否结束),查看输出日志grepout.log

这篇文章写的很详细了https://segmentfault.com/a/11...不同系统不同编译参数导致的各种目录都可能不一样。通过命令查询是最准确的

  • nginx -t 查询配置目录
  • which nginx 查询启动目录
  • nginx -T 其他各种相关目录 (比如日志之类的)
推荐问题
宣传栏