如何通过Linux脚本检查PostgreSQL是否已安装?
我想签入一个脚本,看看是否在Linux上安装了PostgreSQL,然后打印结果。 对如何进行检查有什么建议吗 如果它是基于debian的如何通过Linux脚本检查PostgreSQL是否已安装?,linux,postgresql,shell,Linux,Postgresql,Shell,我想签入一个脚本,看看是否在Linux上安装了PostgreSQL,然后打印结果。 对如何进行检查有什么建议吗 如果它是基于debian的 aptitude show postgresql | grep State 但我想您可以尝试使用一些标志启动它,比如--version,它只打印一些信息并退出 使用“服务博士后状态”更新。尝试: 没有直接的方法可以做到这一点。您所能做的就是使用软件包管理器(rpm、dpkg)检查或探测所需文件的一些可能位置。或者您可以尝试连接到一个可能的端口(5432),
aptitude show postgresql | grep State
但我想您可以尝试使用一些标志启动它,比如--version
,它只打印一些信息并退出
使用“服务博士后状态”更新。尝试:
没有直接的方法可以做到这一点。您所能做的就是使用软件包管理器(rpm、dpkg)检查或探测所需文件的一些可能位置。或者您可以尝试连接到一个可能的端口(5432),看看是否得到PostgreSQL协议响应。但这一切都不会非常强劲。您可能需要查看您的要求。转到postgres db的bin目录,例如
/opt/postgresql/bin
&运行以下命令:
[...bin]# ./psql --version
psql (PostgreSQL) 9.0.4
给你 试试
哪个
命令怎么样
如果要运行哪个psql
且未安装Postgres,则似乎没有输出。您只需让终端提示符准备接受另一个命令:
> which psql
>
但是如果安装了Postgres,您将得到一个响应,其中包含指向Postgres安装位置的路径:
> which psql
/opt/boxen/homebrew/bin/psql
看看man,其中似乎还有一个选项可以帮助您:
-s No output, just return 0 if any of the executables are found, or
1 if none are found.
因此,似乎只要您使用的任何脚本语言都可以执行终端命令,就可以发送which-s psql
,并使用返回值确定是否安装了Postgres。从那里你可以打印出你喜欢的结果
我的机器上确实安装了postgres,所以我运行以下程序
> which -s psql
> echo $?
0
这告诉我命令返回0,表示在我的计算机上找到了Postgres可执行文件
没有一种简单的方法可以做到这一点,因为PostgreSQL可能以多种不同的方式安装和设置:
- 从用户主目录中的源安装
- 从源代码安装到
/opt
或/usr/local
,手动启动或由初始化脚本启动
- 从分发服务器
rpm
/deb
软件包安装,并通过初始化脚本启动
- 从第三方
rpm
/deb
软件包安装,并通过初始化脚本启动
- 从软件包安装,但未设置为启动
- 已安装客户端,正在连接到另一台计算机上的服务器
- 已安装并正在运行,但不在默认路径或默认端口上
您不能依赖psql
位于路径上。您不能指望系统上只有一个psql
(多个版本可能以不同的方式安装)。您不能基于端口执行此操作,因为无法保证它位于端口5432上,或者没有多个版本
提示用户并询问他们。如果这些答案中的所有其他选项都失败了,您可以像这样使用“查找”。或者您可能需要使用sudo
如果您是root用户,只需键入$$>find/-name'postgres'
如果您是用户,则需要sudopriv在所有目录中运行它
我以这种方式运行它,从/
基找到元素所在的整个路径。这将返回任何包含“postgres”的文件或目录
如果您运行的是Debian Linux(或其衍生物),并且有一个带有哪个psql的正返回,那么只需键入psql-V
(大写字母“V”),您就会得到如下返回:psql(postgresql)9.4.8
您也可以签入/opt
挂载在以下路径/opt/PostgresPlus/9.5AS/bin/
智能显示postgresql | grep版本为我工作了很多年我使用了这个命令:
ps aux | grep postgres
一方面,它是有用的(对于任何流程),并提供有用的信息(但来自流程POV)。但另一方面,它用于检查您知道的、您已经安装的服务器是否正在运行
在我找到的某个地方,显示了locate命令的用法。对于这种情况,这个命令似乎更为贴切。我们可以简单地写下:
psql --version
输出显示如下:
psql (PostgreSQL) 11.5 (Ubuntu 11.5-1.pgdg18.04+1)
好吧,所有的回答都是好的,但不是所有的情况都是这样
基本上检查文件夹/etc/postgresql/
在大多数情况下,将有一个子文件夹,例如/etc/postgresql/11/
(或/etc/postgresql/12
),这意味着您已经安装了11(或12)版本,但在许多情况下,您可能有许多这样的子文件夹,因此拥有它们都意味着所有这些版本都已经安装并可以使用。。。所以要注意这个重要的线索
ps使用Ubuntu18.04值得注意的是,这个命令只适用于基于Debian的Linux发行版系列。没有工作,没有找到命令,我知道命令服务posrgres状态
,但是如何检查结果我没有安装它,所以它打印出了“posrgres:无法识别的服务”有些系统没有服务
命令。在Ubuntu或Debian中,我会检查/etc/init.d/postgres status
或类似的东西。我应该指出,如果它说“posrgres:unrecognedservice”[sic],你可能仍然安装了“postgres”。只是说,万一有人复制粘贴,绝对正确。我已在teapot
用户名下从源代码安装了PostgreSQL server,并将二进制/服务名称更改为TeaPotSQL
。没有其他用户具有读取安装目录的权限。默认端口也会更改。找到它:-)你说的“安装了PostgreSQL”是什么意思?Pgsql客户端?客户端库?Pgsql server?另请参见这些通用BASH命令:唯一选项w
psql (PostgreSQL) 11.5 (Ubuntu 11.5-1.pgdg18.04+1)