暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

命令老是找不到,多半是用户没切对,加个“-”就好了

111

在鄙人的日常工作中,经常会出现类似以下的场景的对话:

“张工,为什么系统提示我psql命令找不到了?是不是数据库出什么问题了?”

“切换到postgresql专用的操作系统用户了吗?如果切换了是用什么命令切换的?”

“切换过了,我用的命令是su postgres”

“你先退出,用su - postgres这个命令切换再试试看。”

“真的可以了,好神奇!”

类似上述的对话通常来源于一个对Linux系统相对不那么熟悉的同事,但这却是一个经常会发生在实际场景中的典型案例。

今天通过这个案例,我来为大家分享两个Linux相关的知识点:

  • Linux中的PATH环境变量

  • su命令的用法



Linux中的PATH环境变量



在 Linux 系统中,环境变量(Environment Variables) 是一组动态存储的键值对,用于描述系统运行环境的参数,它们会影响进程的行为和配置。简单来说,环境变量就像系统的 “全局参数表”,为程序和 Shell 提供运行时所需的关键信息(如路径、用户信息、系统设置等)

其中PATH就是最核心的环境变量之一,它决定了系统在哪些目录中搜索可执行命令(程序),直接影响能否便捷地运行命令。

PATH是一个字符串变量,由一系列目录路径组成,路径之间用冒号(:)分隔。

例如:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

当我们输入一个命令(例如ls、top等等)时,系统会自动在PATH包含的目录中依次搜索同名可执行文件,找到后就立即执行,若PATH指定的所有目录都没有找到指定的命令时,则会返回command not found错误。

如果我们输入的命令没有在PATH指定的目录中,我们要调用这个命令就只能使用命令的绝对路径(例如/usr/bin/ls)来调用,将会非常不方便。

以下是关于PATH环境变量的一些常用操作:

  • 查看当前PATH

    echo $PATH
    • 临时将目录添加到PATH中(本例中的/usr/pgsql-16/bin)

      #方式一:添加到开头,新增的目录优先级最高
      export PATH=/usr/pgsql-16/bin:$PATH
      #方式二:添加到末端,避免覆盖PATH中的命令
      export PATH=$PATH:/usr/pgsql-16/bin
      • 永久修改当前用户的PATH环境变量

        在~/.bashrc文件的末尾添加修改环境变量的命令:
        export PATH=/usr/pgsql-16/bin:$PATH
        重新登录或执行source ~/.bashrc使环境变量生效。
        • 永久修改所有用户的PATH环境变量

          在/etc/profile文件末尾添加修改环境变量的命令:
          export PATH=/usr/pgsql-16/bin:$PATH
          重新登录或执行source /etc/profile使环境变量生效。

          通常我们在安装完数据库后,会把数据库相关的环境变量写到数据库管理用户的profile中。所以当我们使用数据库用户登录服务器时,可以便捷的使用数据库相关的命令。





          su 命令的用法



          su是Linux中用于切换用户的命令,是英文“switch user”的简写。

          “su 用户名”和“su - 用户名”是su命令最常用的两种方式,其中“su - 用户名”是“su -l 用户名”的简写。在非特殊情况下,鄙人建议都使用“su - 用户名”的方式来进行用户切换。

          以下是这两种命令形式的差别:


          此外,我们还可以使用 -c参数来以指定用户的身份执行一条命令。

          例如:

            su - postgres -c 'pg_ctl -D $PGDATA status'

            当我们用root用户执行上面这条命令时,代表使用了postgres用户的身份执行了PG数据库的启动命令,执行完该命令后,我们当前依然是root用户的身份,并不会真正的切换到postgres用户。



            题外话



            为什么要想学好数据库技术,离不开扎实的Linux技能基础?

            以下几点是鄙人的一些愚见:

            • 数据库的运行依赖Linux环境,基础操作离不开Linux命令。

            • 数据库性能与Linux系统资源深度绑定,调优须懂Linux底层。

            • 许多数据库故障排查,本质是Linux系统级问题的定位。


            可以说数据库是业务系统的底座,操作系统是数据库稳定运行的根基。


            最后,欢迎感兴趣的各位老铁加入DB演武场交流群,在这里可以交流PostgreSQL、Linux、Kingbase、openGauss等各类技术知识。



            关注 [张家辉的DB演武场],获取更多实战干货。

            文章转载自张家辉的DB演武场,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论