linux运维问题解决思路

在日常使用linux系统的时候,有时候会碰到一些莫名奇妙的问题,无论是在搭建web应用还是开发环境,出现一些报错往往超出我们的预期,对此类问题应该有我们自己行之有效的解决方法,常见问题类型在下文列出,没有列出的在今后的技术生涯中再做补充

  1. 编译安装程序时出现的问题

    1. 提示某头文件或某源文件不存在
      这个问题一般是因为启用了某个编译选项,但是系统中没有相关源码包所导致的,为了解决此问题我们选择安装该依赖包,但是安装之后依然提示该错误,事实上我们应该安装该依赖的源码包,即包名-devel。

    2. 提示找不到某个命令
      某命令找不到,说明对应的软件包没有安装,那如何才能找到包含该命令的软件包呢,一种方法是在google搜索引擎中搜索该命令,一般都可以得到想要的信息,另一种方法是通过软件包管理工具,搜索包含该命令的软件包。各个linux发行版有自己的软件包管理工具,以redhat系列为例,软件包管理工具为yum,yum命令有个provides选项,用来查找提供某命令的软件包

      yum provides netstat

    3. 编译安装软件的时候,我们需要了解一些编译c程序的基本知识,比如编译过程中一些变量代表的含义,编译软件的过程,编译选项的含义,如何控制编译行为,如何达到自己想要的编译预期,等等诸如此类的问题,如果我们系统学习c语言开发流程的话,会更容易解决,时间来看还是要掌握编译原理与流程,熟悉编译过程中各种命令的作用。

  2. 配置一些网络应用

    1. 查看应用程序输出
      健壮的应用都会提供调试模式来让部署人员可以发现部署过程中出现的问题,使程序运行在调试模式,一般程序会将信息直接输出至控制台标准输出,我们在控制台可以清楚的看到后台发生了那些事情,比如openldap的slapd服务可以通过-d选项运行在调试模式,正常情况下客户端的每次查询都会在控制台有相应的打印输出,如果查询失败,我们可以根据slapd调试模式输出来找相应的原因
    2. 查看应用程序日志
      更为一般的解决方法是查看应用程序日志,有时候程序的报错详细信息并没有完全输出至控制台,而是输出至日志文件中,通过查阅日志文件,可以了解应用程序产生的消息,这里用到linux文本处理工具,包括tail,head,awk,sed,grep,熟练掌握此类工具可以让我们在使用linux 的过程中事半功倍
    3. 查看网络数据包
      网络数据包比应用程序输出更为偏向底层,应用解析数据包,判断发生事件类型,产生 记录,有时候我们无法获取相关消息,直接抓取网络数据包也是一个不错的思路,如果可以看到数据包内容的话,我们还是可以获取一些信息的。图形化抓包应用wireshark、命令行抓包应用tcpdump都是很不错的工具,花时间了解这两个工具的用法是值得的,包括抓取过滤和显示过滤
    4. 为了解决此类问题,解决思路为想方设法看到应用程序输出,看到后台发生了什么事情
  3. 搭建环境的一般思路

    1. 了解我们的目标
      我们应该明白我们的目标是什么,比如安装jumpserver,这个软件是什么,可以提供怎样的功能,一般应用在哪些场景,安装依赖有哪些,我们在动手之前需要考虑这些问题,关于类似的概念,建议英文不错的同学可以去官方查看文档,因为最为可靠,而且也最为全面,有针对各个系统的解决方案。如果查看官方文档有困难的话,建议通过一些相关书籍和google搜索引擎来获取该目标的简要帮助信息,比如csdn技术博客,segmentfault,linux社区,随后务必耐心查阅官方文档,在这个阶段不要急于动手,先获取足够的信息,这是之后成功应用的关键
    2. 从github获取信息
      有相当一部分的开源项目托管在github上,通过wiki说明可以获取很多信息,如何安装,如何使用等等
    3. 从技术博客获取信息
      从其他前辈的技术博客中,我们可以找到一些我们需要的东西,更多的是对于某服务概念的理解,而不是操作,切忌盲目抄袭技术博客中的内容,自己应该对自己运行的每一条命令做到心知肚明,我在做什么,我要做什么,从而不让自己陷入系统崩溃的困境
    4. 尽量从官方文档中获取安装步骤
      博客总有过时的时候,因为系统在更新,软件在更新,更新了就意味着有些操作可能和之前的版本不一样,就意味着照其他前辈的博客进行操作的时候可能会出错,官方的是最为可靠的参考资料,优于书籍
  4. 积累
    我觉得积累还是比较重要的,我们没有必要了解所有应用程序的部署步骤,但是我们有必要了解一些常识,比如因为防火墙导致的访问异常现象是什么,因为网络导致的访问异常,因为权限导致的访问异常,如果不了解应用程序传达的基本信息,那么行进的道路就会很艰难,相反如果我们知道症结所在,就可以快速解决问题

你可能感兴趣的:(linux运维问题解决思路)