服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 原本可幸免于难的Linux故障情况如何避免?你也可以搞定

原本可幸免于难的Linux故障情况如何避免?你也可以搞定

2024-01-10 17:03未知服务器之家 Linux

上一篇复盘和总结了Linux下容易发生的意外损坏情况、如何提前检测和预防的思路。 Linux系统一般在以下方面出现潜在问题而影响正常工作: 硬件故障; 内核错误; 文件系统损坏; 软件冲突; 系统更新问题; 恶意软件; 过度负

上一篇复盘和总结了Linux下容易发生的意外损坏情况、如何提前检测和预防的思路。

Linux系统一般在以下方面出现潜在问题而影响正常工作:

  • 硬件故障;
  • 内核错误;
  • 文件系统损坏;
  • 软件冲突;
  • 系统更新问题;
  • 恶意软件;
  • 过度负载;
  • 配置错误。

本文继续分析第4-8的问题。

原本可幸免于难的Linux故障情况如何避免?你也可以搞定

软件冲突

Linux下的软件冲突有哪些表现?

软件冲突1:依赖库缺失,软件找不到依赖的函数

比如很多开发人员,从源码编译方式安装了一些基础的类库到自定义库路径下,然后发现系统和桌面的其他软件启动异常。以下是 QT 相关的软件启动失败的报错日志:

…… libQt5XcbQpa.so.5: undefined symbol: FT_Property_Set

根据关键词搜索得到一大堆结果,大家往往发现网上有各种有效、无效的解决办法,各说一套

原本可幸免于难的Linux故障情况如何避免?你也可以搞定

对此,我的观点是,建议Linux的使用者要知其然,知其所以然,要深入理解Linux问题的根源。并从根源上解决,举一反三在发生类似问题后,也能自主解决。

比如上面的错误日志,如果是新安装了自己编译的库文件到系统目录后发生的问题,那么往往跟QT软件依赖的库(如libfreetype.so)被替换为不兼容的版本引起的。FT_Property_Set 关键词,可帮我们确定问题范围与freetype相关 也可受到 /etc/ld.so.conf.d/.conf 的文件中的。

可以判断这个问题不是libfreetype.so库被删引起的,因为若是系统库libfreetype.so被删,那么Qt的报错将会类似required libfreetype.so library not found。

如何避免?可通过在局部使用LD_LIBRARY_PATH ,比如在脚本内、在命令行前面 以LD_LIBRARY_PATY=自定义库的路径 +命令的这种方式调用软件。就可以避免不同环境和库的相互干扰、污染的问题。

采用conda环境隔离、python的venv 环境隔离等方式;使用docker 容器环境运行不同软件、甚至在virtualbox等虚拟机运行不同软件;这些方式也可以帮助避免软件冲突的问题。

安装时的软件包冲突2:

比如centos的yum方式安装软件包时,提示错误尝过添加"--skip-broken"来跳过无法安装的软件包 或'--nobest'来不只使用软件包的最佳候选)

原本可幸免于难的Linux故障情况如何避免?你也可以搞定

原本可幸免于难的Linux故障情况如何避免?你也可以搞定

这类问题往往由于软件源配置存在多个不同版本的软件源,需要避免/etc/yum.d/*.repo文件中存在重复的不同版本的仓库:

原本可幸免于难的Linux故障情况如何避免?你也可以搞定

否则通过yum安装指定软件名时,将提示版本冲突。

系统更新问题

Linux系统更新失败而导致的软件冲突,一旦发生,往往是比较严重的问题。所以小编建议,当大版本更新前,一定要做好系统配置文件和数据文件的异机备份。

一个好消息是,Deepin、Ubuntu等发行版,对系统升级、内核加装新版本等重大更新,更新后不会替换原始文件,而是在系统启动时另起一个引导菜单入口,这样新引导启动的系统就会是更新后的系统;老版本的系统内容仍然可在旧的引导入口进入。在新软件系统发生异常后,可以进入老系统软件继续使用。

恶意软件问题

恶意软件的问题、过度负载问题,往往运维人员遇到比较多。恶意软件也是系统过载、网络流量异常的元凶。恶意软件的入侵,除了人为安装了恶意软件,还有主动入侵,比如网站代码漏洞、系统软件对外服务漏洞(如nginx或nodejs软件漏洞)就可以被外界利用,向系统植入恶意软件。

对此,小编建议,在Linux下,启用防火墙、关闭非必要的对外端口、不要使用弱密码、及时更新已知存在漏洞的软件到安全的版本、不访问危险站点、通过容器等隔离工具进行存在风险的访问操作。

配置错误

Linux用户最常遇到的配置错误导致的系统问题,往往是添加修改了环境变量文件,影响了正常变量的访问效果。

对于Linux系统,环境变量分为系统级别变量、用户级别变量、脚本范围内的运行时环境变量。

写在/etc/profile中的 属于系统级别的全局脚本和环境变量。写在~/.bashrc文件里的脚本和环境变量,将在用户shell或桌面登录后生效。而类似tomcat 的startup.sh等控制jvm启动过程的脚本内的变量,将只影响脚本范围内的软件。因此不会影响系统或用户其他软件的正常运行。例如pycharm 的安装包,内涵 pycharm.sh[1],就是一个.sh文件,pycharm 的启动脚本,也是.sh文件,它把pycharm运行所需的库所在路径,通过脚本内的环境变量,让 pycharm 的最终二进制文件感知、从pycharm的当前子目录加载(如./lib/libmy.so)。

写在 /etc/ld.so.conf.d/xxxx.conf 里的会作用域 整个系统的 LD_LIBRARY_PATH 变量等效的动态库文件搜索路径。

总之,系统级别的配置文件尽量少改动,除非很清楚系统配置文件的内容原理。用户级别的配置文件可以改,修改后多测试。软件级别的配置文件可以按需改,因为不影响其他用户。

TIPs:

懂得软件开发的朋友们,还可以利用git功能,在修改配置之前,做一下版本管理。以备配置文件错误后,及时恢复。

参考资料:

[1]pycharm 的安装包,内涵 pycharm.sh :https://download.jetbrains.com.cn/python/pycharm-community-2023.2.5.tar.gz

延伸 · 阅读

精彩推荐
  • Linux将 Linux 终端与 Nautilus 文件管理器结合起来

    将 Linux 终端与 Nautilus 文件管理器结合起来

    Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。 尽管并非所有人都喜欢使用终端来管理文件和目录,...

    未知812023-08-08
  • LinuxLinux系统下无法卸载挂载的目录怎么办?

    Linux系统下无法卸载挂载的目录怎么办?

    我们在日常运维中经常性会遇到需要进行磁盘的扩容、卸载、挂载等操作,但是有时候这个系统上跑的应用并没有停止或者有其他的运维同事在操作这个目...

    今日头条10302020-12-30
  • Linuxlinux top命令详解

    linux top命令详解

    这篇文章主要介绍了linux top命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev5622022-03-01
  • Linux在Linux系统中创建新的亚马逊AWS访问密钥的方法

    在Linux系统中创建新的亚马逊AWS访问密钥的方法

    如何在Linux系统中创建新的亚马逊AWS访问密钥?我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID和秘密访问密钥,我怎样创建一个...

    Linux教程网6182019-10-30
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye9922021-12-16
  • Linux理解 Linux/Unix 登录脚本的技巧

    理解 Linux/Unix 登录脚本的技巧

    有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,程序通常只需要在 登陆时运行一次,例如...

    未知1042023-05-12
  • Linuxlinux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下...

    Linux教程网8512021-10-10
  • Linuxlinux驱动程序开发详细介绍

    linux驱动程序开发详细介绍

    前提,一般来说内核代码的错误可能会引起一个用户进程的死亡,或者整个系统的瘫痪,更严重的后果,可能导致磁盘损伤~因此建议最好有一台实验机进行...

    Linux教程网5392019-12-17