保证Linux系统安全之分析和排查系统故障

2023-11-05

在处理Linux操作系统出现的各种故障时,故障的症状是最容易发现的,但导致故障的原因才是最终排除故障的关键。熟悉Linux操作系统中常见的日志文件,了解一般故障的分析与解决办法,将有助于管理员快速定位故障点,“对症下药”,及时解决各种系统问题。

博文大纲:
一、分析日志文件;
二、排除系统启动类故障;
三、排除文件系统类故障;

一、分析日志文件

日志文件是用于记录Linux操作系统中各种运行消息的文件,相当于Linux主机的“日记”。不同的日志文件记载了不同类型的信息,如Linux内核消息、用户登录事件、程序错误等。

日志文件对于诊断和解决系统中的问题很有帮助,因为在Linux操作系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会“有据可查”,此外,当主机遭受 破坏时,日志文件还可以帮助寻找破坏 者留下别的痕迹。

1.主要日志文件

在Linux操作系统中,日志数据主要包括以下三种类型:

  • 内核及系统日志:这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。 系统中有相当一部分程序会把自己的日志文件交由rsyslog管理,因而这些程序使用的日志记录也具有相似的格式;
  • 用户日志:这种日志数据用于记录Linux操作系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等;
  • 程序日志:有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同程序所使用的日志记录格式可能会存在较大的差异;

Linux操作系统本身和大部分的服务器程序的日志文件都默认放在目录/var/log/下。一部分程序公用一个日志文件,一部分程序使用单个日志文件;而有些大型的服务程序由于日志文件不止一个,所以会在/var/log/目录中建立相应的子目录来存放日志文件,这样既保证了日志文件目录的结构清晰,又可以快速定位日志文件。有相当一部分日志文件只有root用户才有权限读取,这保证了相关信息的安全性。

对于Linux操作系统中的日志文件,有必要了解其各自的用途,这样才能在需要的时候更快地找到问题所在、及时地解决各种故障。

常见的一些日志文件,如图:
保证Linux系统安全之分析和排查系统故障

2.日志文件分析

分析日志文件的目的在于通过浏览日志查找关键信息,对系统服务进行调试,以及判断发生故障的原因等。

对于大多数文本格式的日志文件(如内核及系统日志、大多数的程序日志),可以使用tail、more、cat、less等命令进行查看,对于一些特殊的二进制的日志文件(如用户日志)则需要使用特定的查询命令。

(1)内核及系统日志

rsyslog服务所使用的配置文件为/etc/rsyslog.conf。

[root@localhost ~]# grep -v "^$" /etc/rsyslog.conf 
//过滤空行
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
                      ……………………                       //省略部分内容

从配置文件中可以看出,受rsyslog服务管理的日志文件都是Linux操作系统中主要的日志文件,它们记录了Linux操作系统中内核、用户认证、电子邮件、计划任务等基本的系统消息。在Linux内核中,根据日志消息的重要程度不同,将其分为不同的优先级别(数字越小,优先级越高,消息越重要)。如图:
保证Linux系统安全之分析和排查系统故障
内核及大多数系统消息被记录到公共日志文件/var/log/messages中,而其他一些程序消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者直接发送给指定用户。

对于rsyslog服务统一管理的大部分日志文件,使用的日志记录格式基本上是相同的。以公共日志/var/log/messages文件的记录格式为例,其中每一行表示一条日志消息,每一条消息均包括以下四个字段:

  • 时间标签:消息发出的日期和时间;
  • 主机名:生成消息的计算机名称;
  • 子系统名称:发出消息的应用程序的名称;
  • 消息:消息的具体内容;

在有些情况下,可以设置rsyslog,使其在把日志信息记录到文件的同时将日志信息发送到打印机进行打印,这样无论网络 非法进入 者怎么修改日志都不能清除***的痕迹。rsyslog日志服务是一个常被 破坏 的的显著目标,破坏了它将管理员难以发现 非法进入 及相关信息,因此要特别注意监控其守护进程及配置文件。

(2)用户日志

在wtmp、btmp、lastlog等日志文件中,保存了系统用户登录、退出等相关的时间消息。但是这些文件都是二进制的数据文件,不能直接使用tail、less等文本查看工具进行浏览,需要使用who、w、users、last和lastb等用户查询命令来获取日志信息。

1)查询当前登录的用户情况——users、who、w命令

user命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那么他的用户名将显示与其相同的次数。操作如下:

[root@localhost ~]# users
(unknown) root root root

who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法的用户,从而对其进行审计和处理。who的默认输出包括用户名、终端类型、登录日期及远程主机。操作如下:

[root@localhost ~]# who
(unknown) :0           2019-09-10 00:01 (:0)
root     tty2         2019-09-10 00:10
root     pts/0        2019-09-09 16:25 (192.168.1.253)
root     tty3         2019-09-09 16:42

w命令用于显示当前系统中的每个用户及其运行的进程信息,比users、who命令的输出内容更丰富一些,操作如下:

[root@localhost ~]# w
 16:49:29 up 48 min,  4 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCU WHAT
root     tty2                      00:10     ?     0.84s  0.84s -bash
root     pts/0    192.168.1.253    16:25    1.00s  0.10s  0.06s w
root     tty3                      16:42     ?     0.08s  0.03s -bash

2)查询用户登录的历史记录——last、lastb命令

last命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。

[root@localhost ~]# last
xiaoli   tty3                          Thu Sep 12 04:49   still logged in   
root     pts/0        192.168.1.253    Thu Sep 12 04:47   still logged in   
root     tty2                          Thu Sep 12 04:46   still logged in   

lastb命令用于查询登录失败的用户记录,如登录的用户名错误,密码不正确等情况都将记录下来。

[root@localhost ~]# lastb
xiaowang tty3                          Thu Sep 12 04:52 - 04:52  (00:00)    
xiaoli   tty3                          Thu Sep 12 04:52 - 04:52  (00:00)    

除了使用lastb命令以外,还可以查看安全日志/var/log/secure。查看日志文件可以使用webalizer、Awstats软件可以通过图形化查看日志,通俗易懂!

3)程序日志

在Linux操作系统中,还有相当一部分应用程序没有使用rsyslog服务来管理日志,而是由程序自己维护日志记录。例如:http网站服务等。不同应用程序i的日志记录格式差别很大,且没有严格使用统一的格式。

作为一名合格的系统管理人员,应该提高警惕,随时注意各种可疑状况,定期并随机检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志及用户登录日志记录等。在检查这些日志时,要注意是否有不和常理的时间或操作记录。

出现以下情况之一,就需要多加注意:

  • 用户在非常规的时间登录,或者用户登录系统的IP地址和往常的不一样;
  • 用户登录失败的日志记录,尤其是那些一再连续尝试进入系统失败的日志记录;
  • 非法使用或不正当使用超级用户权限;
  • 无故或者非法重新启动各项网络服务的记录;
  • 不正常的日志记录,如日志残缺不全,或者比如wtmp这样的日志文件无故缺少了中间的记录文件。

另外,需要管理人员注意的是,日志并不是完全可靠的,聪明的黑 客在进入系统后经过会打扫现场。所以管理人员需要综合运用以上的系统命令,全面、综合地进行审查和检测。切记不要断章取义,否则将会做出错误的判断。

二、排除系统启动类故障

Linux操作系统的启动过程涉及到MBR、GRUB启动菜单、系统初始化配置文件等各方面,其中任何一个环节出现故障都可能导致系统启动失常,因此一定要在注意好相关文件的备份工作。

1.MBR扇区故障

MBR扇区包括三部分:

  • 系统引导程序(GRUB引导菜单占用446字节);
  • 分区表(最多可以有四个主分区,每个分区占用16字节);
  • 扇区的结束标志占用2字节;

MBR位于物理硬盘的第一个扇区(512字节),该扇区又称为主引导扇区(MBR扇区),除了包含系统引导程序的部分数据外部分数据外,还包含整个硬盘的分区表记录。当主引导扇区发生故障时,将很有可能无法进入引导才散,或者无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏、死机状态。

通过下面示例我们开始对MBR扇区进行备份、模拟破坏、修复的过程:

(1)备份MBR扇区数据

由于MBR扇区中包含了整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他的存储设备中,否则在恢复时将无法读取到备份文件。例如:

[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/sdb1 /backup
[root@localhost ~]# dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
//使用dd命令将第一块硬盘中的MBR扇区数据备份到第二块硬盘sdb1分区中

关于硬盘分区等详细情况可以参考博文:Linux磁盘和文件系统管理(一)

(2)模拟MBR扇区故障

[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
//使用/dev/zero(无限写零)文件覆盖原本的MBR扇区数据

系统重启,将会出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机。

(3)从备份文件中恢复MBR扇区数据

由于MBR扇区被破坏以后,就无法再从硬盘启动系统化,所以需要使用其他硬盘中的操作系统进行引导,或者使用Centos系统的安装光盘进行引导,不管使用什么方式,目的都是相同的——获得一个可以执行命令的Shell环境,以便从备份文件中恢复MBR扇区中的数据。

我们使用系统盘引导为例,操作如图:
保证Linux系统安全之分析和排查系统故障
保证Linux系统安全之分析和排查系统故障
保证Linux系统安全之分析和排查系统故障
完成以上操作后,就会出现一个带“sh-4.2#”提示符的bash环境,如图:
保证Linux系统安全之分析和排查系统故障
完成恢复操作以后,执行“exit”命令退出当前临时shell环境,系统将会自动重启!

2.GRUB引导菜单故障

GRUB是大多数Linux操作系统默认使用的引导程序,可以通过启动菜单的方式选择进入不同的操作系统(如果有别的系统),当配置文件/boot/grub2/grub.cfg 丢失,或者关键配置出现错误,或者MBR中的引导程序遭到破坏时,
提前备份grub配置文件:

[root@localhost ~]# vim /boot/grub2/grub.cfg 
[root@localhost ~]# mv /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
//将原本的grub配置文件改名

重启之后,Linux主机启动后可能会出现“grub>”的提示符,无法完成进一步的系统启动过程。如图:
保证Linux系统安全之分析和排查系统故障
解决方案:
进入急救模式,如图:
保证Linux系统安全之分析和排查系统故障
保证Linux系统安全之分析和排查系统故障
保证Linux系统安全之分析和排查系统故障
完成以上操作后,就会出现一个带“sh-4.2#”提示符的bash环境,具体操作命令如图:
保证Linux系统安全之分析和排查系统故障

当选择启动方式为光盘启动时,建议修改完成之后依然选择硬盘启动,也可以根据光盘启动的提示信息手工选择本地硬盘启动,如图:
保证Linux系统安全之分析和排查系统故障
保证Linux系统安全之分析和排查系统故障

完成以后操作后,系统就可正常启动!

注意:CentOS7因为使用的是grub2,配置文件同grub有不少变化,一定要切记备份grub.cfg以便恢复。

遗忘root密码可以参考博文:遗忘Linux系统root密码所采取的必要措施

无论是MBR扇区故障、GRUB引导菜单还是遗忘root密码相关操作,都可进入急救模式进行修复。

三、排除文件系统类故障

文件系统及磁盘中所存储的数据的价值是无法估量的,管理员的工作职责之一就是必须确保数据的安全。由于磁盘属于易损耗品,无法预估它什么时候会损坏,所以最好的办法就是建立完整的备份机制。当系统出现文件系统或磁盘故障时没一定要慎重处理。

1.修复文件系统

在Linux主机中,可能会因为非正常关机、突然断电、设备数据读写异常等原因导致文件系统破坏。比较常见的是超级快损坏。超级快是文件系统的核心“档案”,它记录了该文件系统的类型、大小、空闲磁盘块等信息。

当文件系统的超级块数据损坏是,Linux将无法识别该文件系统,挂载时会出现错误提示以致不能正常使用。执行下列操作可以破坏文件的超级块数据库。命令如下:

[root@localhost ~]# dd if=/dev/zero of=/dev/sdb1 bs=512 count=4
记录了4+0 的读入
记录了4+0 的写出
2048字节(2.0 kB)已复制,0.000868901 秒,2.4 MB/秒
[root@localhost ~]# mkdir /a
[root@localhost ~]# mount /dev/sdb1 /a
mount: /dev/sdb1 写保护,将以只读方式挂载
mount: 未知的文件系统类型“(null)”
[root@localhost ~]# vim /etc/fstab
                      ……………………                //省略部分内容
/dev/sdb1               /a                      xfs     defaults        0 1
//实现自动挂载

重启系统后,会出现以下错误,如图:
保证Linux系统安全之分析和排查系统故障
保证Linux系统安全之分析和排查系统故障
修复完毕!!!

2.磁盘资源耗尽故障

显而易见,当一个文件系统的磁盘空间耗尽以后,将无法继续在该分区中创建新的文件数据,从而导致故障的出现。

当因为根分区磁盘空间不足,而无法启动进入Linux操作系统时,可以进入急救模式,清理占用大量空间的文件。可以使用命令“dd if=/dev/zer0 of=/a bs=1M count=999999”模拟故障。

除此之外,在每一个文件系统中,能够使用的文件数量(对应i结点的数量)也是有限的,当一个文件系统被格式化后,其i结点数也就固定了,如果用户故意消耗i结点数量,那么,及时该分区有大量的空间,也不可以创建文件。

通过示例了解一下:

(1)模拟i结点耗尽故障

[root@localhost ~]# mkdir /a
[root@localhost ~]# mount /dev/sdb1 /a
[root@localhost ~]# df -i /a
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/sdb1      10485248       3 10485245       1% /a

编写一个小脚本,消耗i结点数量,脚本内容如下:

[root@localhost ~]# vim a.sh
#!/bin/bash
i=1
while [ $i -le 310485245 ]
do
touch /a/file$i
let i++
done
[root@localhost ~]# sh a.sh &
[root@localhost ~]# df -i /a
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/sdb1      10485248    0   3 10485245       100% /a
[root@localhost ~]# touch /a/newfile
touch: 无法创建“/a/newfile” :设备上没有空间
[root@localhost ~]# df -hT /a
文件系统            类型  容量  已用  可用 已用% 挂载点
/dev/mapper/cl-root xfs    17G  4.5G   13G   26% /

(2)修复i结点故障

[root@localhost ~]# rm -rf /a/file*

3.检测硬盘坏道

磁盘坏道分为逻辑坏道和物理坏道来哪种,前者是由于软件操作不当造成,可以使用软件修复工具进行修复,而后者是物理性损坏,只能通过更改磁盘分区或扇区的占用位置进行进行改善,从而排除包含坏块的磁盘空间,若磁盘出现以下现象,则有可能是磁盘出现坏道,需要检测和修复。

  • 读取磁盘中的数据时,磁盘设备发出异响;
  • 访问磁盘中的某个文件时,反复读取且出错,提示文件损坏;
  • 对于新建立的分区无法格式化;
  • 系统使用该磁盘时,频繁死机;
  • 此案出现坏道后,如果不及时更换或进行技术处理,坏道则会越来越多,且可能造成频繁死机和数据丢失的后果,因此必要时应该对磁盘进行定期检测,检测是否存在坏道。

在Linux系统中,检测磁盘的坏道情况可以使用badblocks命令进行,结合“-s”用于显示进度信息;“-v”选项用于显示详情。

[root@localhost ~]# badblocks -sv /sdb/sdb

在长期使用计算机的过程中,文件系统和磁盘类的故障现象很难完全避免,对于此类故障的修复需要十分谨慎,如果操作不当可能会加重数据破坏的程度。当发现磁盘中存在坏道时,应尽快停止系统中的应用服务、备份相关数据,必要时立即关闭系统一方磁盘坏道进一步扩散,避免导致更大的损失。对于存在坏道的硬盘设备,应使用其他完好的硬盘进行替换。

———————— 本文至此结束,感谢阅读 ————————

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保证Linux系统安全之分析和排查系统故障 的相关文章

  • 判断是当前是什么手机和判断是在微信内还是浏览器内

    判断是android还是ios switch uni getSystemInfoSync platform case android console log 运行在安卓手机上 break case ios console log 运行在io
  • web自动化如何区分在不同浏览器运行_Web自动化测试:浏览器不同页签之间的切换(handle)

    一 切换页签 句柄handle 的基础用法 备注 部分方法为老写法 官方已经不推荐使用 点击这篇文章查看切换handle新写法 1 获取浏览器当前所在页签的句柄 current window handle 2 获取所有页面窗口的句柄 win
  • 40. 实战:基于tkinter实现用户UI界面——对34小节的VIP音乐解析系统的全面升级(附源码)

    目录 前言 目的 思路 代码实现 1 首先设计主页UI界面 2 封装核心解析歌曲代码 3 下载音乐到本地 4 将界面居中 禁止修改窗口大小 等待关闭 退出指令 完整源码 运行效果 使用过程 菜单栏 打包的exe 总结 前言 本节将升级34
  • VS2005 VS2010数据断点不能设置的原因 new data breakpoint is disabled

    数据断点是VS的一项犀利功能 尤其在我司这种代码量巨大的大型系统中 想知道一个被很多地方访问的类的变量是在什么时候被改变的是一件很困难的事情 使用数据断点能极大提高debug的效率 可昨天突然遇到了数据断点按钮变灰的情况 无法进行设置 原因
  • P4197 Peaks(主席树+Kruskal重构树+倍增)

    传送门 前缀知识 Kruskal重构树 题面 思路 看到困难值小于等于x就应该想到用Kruskal重构树了 首先我们构建一颗Kruskal重构树 然后询问是问我们从某个点 u u u出发 不超过困难值 h h h 那么这个过程我们可以用倍增
  • easyPoi实现Excel文件上传图片并改变自定义图片上传地址

    使用easypoi遇到的一个上传图片自定义图片地址的问题 解决后就保留一下 您正在使用easypoi进行excel导入图片 并希望可以更改导入后的图片地址 希望这篇文章能帮到您 本文主要是使用easypoi通过模版的形式导入图片 Maven
  • 远控免杀专题(67)-白名单(113个)总结篇

    关于白名单程序 相信大家对白名单程序利用的手法也已经非常熟悉了 白名单程序利用其实是起源于LOLBins 全称 Living Off the Land Binaries 直白翻译为 生活在陆地上的二进制 这个概念最初在2013年DerbyC
  • 2021-08-24

    记录一下在射线碰撞到得物体旁边创建一个颜色盒子UI墙 using System using System Collections using System Collections Generic using System IO using
  • Jupyter Notebook 的使用指南

    前言 Jupyter Notebook是一个开源的Web应用程序 允许用户创建和共享包含代码 方程式 可视化和文本的文档 它的用途包括 数据清理和转换 数值模拟 统计建模 数据可视化 机器学习等等 它具有以下优势 可选择语言 支持超过40种
  • 蓝桥杯——分巧克力

    标题 分巧克力 儿童节那天有K位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有N块巧克力 其中第i块是Hi x Wi的方格组成的长方形 为了公平起见 小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们 切出的巧克力需
  • 《CSAPP》(第3版)答案(第二章)(一)

    CSAPP 答案 第二章 一 P55 include
  • Qt开发 之 删除文件或文件夹到回收站(详解)

    文章目录 1 简介 1 1 问题描述 1 2 解决方案 2 源代码 2 1 WinAPI调用 2 2 两行代码解决Release版本根目录驱动问题 2 3 解决部分文件删除不成功的问题 3 QFileInfo官方说明 4 Qt 5 15版本
  • 利用HashSet求集合的交集、并集

    package com test import java util ArrayList import java util HashSet import java util Iterator import java util Set publ
  • Shell 脚本等待上一行执行完成再执行下一行的方法

    在开发中 我们有时候需要使用 Shell 脚本完成一些简单的操作 但是往往有的操作比较耗时 但是我们又不得不等待它执行完成后才能进行下面的步骤 所以许多朋友往往使用sleep等方法来强制等待操作完成 其实完全没有必要 我们只需要使用一个小小
  • sqoop:【error】ERROR tool.ImportTool: Import failed: java.io.IOException: Filesystem closed

    19 06 06 12 04 08 ERROR tool ImportTool Import failed java io IOException Filesystem closed at org apache hadoop hdfs DF
  • 机器学习——图片处理应用(人脸补全)

    0 前言 本文内容是机器学习算法回归预测的应用 其中数据集主要来自sklearn库自带的人脸数据 目的是通过KNN回归 线性回归 岭回归算法通过人物的左半张脸预测人物的右半张脸 意义1 通过该项目掌握图片数据在机器学习当中的处理方法 意义2
  • 统计学习方法学习梳理(一)统计学习的分类

    目录 1 基本分类 1 监督学习 2 无监督学习 3 强化学习 4 半监督学习 5 主动学习 2 按模型分类 1 概率模型与非概率模型 2 线性模型与非线性模型 3 参数化模型与非参数化模型 3 按算法分类 1 在线学习 2 批量学习 4
  • 为什么区块链宠物得到这么多资本家的青睐?

    区块链宠物最早进入人们视野是一款由Axiom Zen和以太坊智能合作开发的区块链宠物养成游戏 谜恋猫 也有人称其为加密猫 这款游戏基于以太坊产生 通过以太坊区块链上的智能合约进行追踪 用户需使用以太币购买猫咪 并通过智能合约自动分配 每15
  • typora的使用

    typora的使用 1 换行的实现 在一行的结尾加上两个空格实现换行 在两行之间加回车实现换行 2 标题 多少个 就多少级标题 一共六级标题 记得输完 要加空格 1 2 3 4 5 6 3 分割线 就出现分割线 要回车 4 强调 斜体 字体

随机推荐

  • numpy 寻找两个二维数组中重复的行(附代码)

    numpy 两个 N M 维度的 二维数组a 和 b 以行为单位 找到 a 和 b 中都存在的行 相同的行不一定出现在同一行的位置 通过遍历每一行寻找 import numpy as np 创建两个示例数组 a sorted np arra
  • 玩转触发器之Jenkins Generic Webhook使用技巧

    1 预备知识 目标 学习HTTP基础知识 掌握如何使用Postman和Curl调用接口的方法 1 1 Web HTTP基础知识 HTTP请求是什么 HTTP超文本传输协议 是确保服务器 Server 和客户端 Client 之间的正确通信
  • php同时作为server端和client端(soapclient)的超时时间设置小结

    http blog sina com cn s blog 475429950101bt7x html 场景 A通过HTTP请求B 同时B通过soap请求C webservice 然后B得到C的返回内容后 再响应回A client A gt
  • Linux系统编程——线程

    Linux系统编程 线程 1 线程概述 与进程的区别及线程的优势 2 线程创建等待退出 3 线程共享内存空间的代码验证 4 线程同步之互斥量加锁解锁 5 互斥锁限制共享资源的访问 6 什么情况造成死锁 7 线程条件控制实现线程的同步 1 线
  • 【基于Arduino的蓝牙控制小车】3D+电路图+控制代码详解

    更好的阅读体验 目录 1 环境搭建 1 1 电路模拟环境 3D建模环境 1 2蓝牙小车控制代码环境 2 Arduino串口通信 2 1 Arduino串口 2 2 系统函数 2 3 串口函数 2 3 1 Serial begin 2 3 2
  • STM32 websocket,TCP和UDP的传输速率

    网络上经常有人提到websocket TCP和UDP 的差别 说的大都是协议之间的差别 没有提及它们的传输能力 为了设计高吞吐量的物联网微服务器 最近对websocket TCP UDP的传输能力做了测试 使用STM32F746 处理器 操
  • 建立自己的机械臂–编程

    现在 手臂已经组装好了 是时候将其提升到一个新的水平了 现在是释放野兽并完全控制整个机器人手臂的时候了 在这篇文章的结尾 您应该对如何对该机械臂进行编程以完成您想要的事情有一个想法 要了解我如何到达这里 请访问我以前的文章 该文章描述了组装
  • Library\PackageCache\com.unity Error (are you missing a using directive or an assembly reference?)

    Library PackageCache com unity cinemachine 2 2 7 Runtime Timeline CinemachineTrack cs 16 6 error CS0246 The type or name
  • PAT考试 一日游记

    今天下午去考了PAT 真的很懵逼 首先 编译器炸了 弄了一个小时多的编译器 早知道就先不点击开始了 然后就是遇到了头文件CB不能调试 主要是用了unorder map unorder set 习惯性写的头文件 开局先默写头文件 然后就这样
  • MFC菜单的使用

    1 创建弹出菜单 1 利用向导 创建一个基于单文档的应用程序 2 在资源视图中选中 menu 鼠标右键插入一新菜单IDR POPMENU 3 在IDR POPMENU菜单中添加 弹出菜单 选项 在 弹出菜单 下添加菜单命令 复制 粘贴 查找
  • getResourceAsStream方法及缓存问题

    缓存问题 getResourceAsStream会先到缓存中读取文件 若缓存中没有 才会到真正的路径下去读取文件 所以用getResourceAsStream方法获取配置文件时 获取的不是最新配置 可以使用以下方法代替 该方法直接读文件 所
  • 算法(63)-二叉树的递归-搜索二叉树-满二叉树-平衡二叉树-

    目录 1 二叉树 2 搜索二叉树 3 满二叉树 4 平衡二叉树 1 二叉树 先 中 后序遍历 先序 中 左 右 1 2 4 5 3 6 7 中序 左 中 右 4 2 5 1 6 3 7 后序 左 右 中 4 5 2 6 7 3 1 void
  • 【推荐算法】推荐系统的评估

    一 离线评估的主要方法 1 Holdout检验 Holdout检验是基础的离线评估方法 它将原始的样本集合随机划分为训练集和验证集两部分 比如70 训练集 30 测试集 但现在很多机器学习框架 深度学习框架中都增加了验证集 即将整个数据集分
  • python创建sqlite3 unicode error_在python2.7.3中使用sqlite3的Unicode

    我试图插入到一个表中 但似乎我打开的文件中有非ascii字符 这是我得到的错误 sqlite3 ProgrammingError You must not use 8 bit bytestrings unless you use a tex
  • IDEA捕获异常快捷键(try/catch……)

    捕获异常 这时候快捷键的时候就可以事半功倍 ctrl alt t
  • 每日10行代码125: 用python计算快乐8一等奖的中奖概率

    先简单介绍下快乐8一等奖的规则 投注人从80个数中选10个 开奖时会从80个数中开出20个 如果选择的10个数均在开出的20个数中 那么就是中一等奖 也叫选十中十 那么中一等奖的概率是多少呢 这其实是数学中的概率问题 解题方法 选求所有可能
  • Python算法:动态规划

    转载自伯乐在线 本节主要结合一些经典的动规问题介绍动态规划的备忘录法和迭代法这两种实现方式 并对这两种方式进行对比 大家都知道 动态规划算法一般都有下面两种实现方式 前者我称为递归版本 后者称为迭代版本 根据前面的知识可知 这两个版本是可以
  • moviepy基础_1:使用moviepy提取视频的音频及合成

    任务 提取 a mp4 的音频部分 然后把提取到的音频添加到 b mp4 里 程序实现 from moviepy editor import 读取2个视频文件 videoclip 1 VideoFileClip a mp4 videocli
  • Java实现棒球比赛(栈的利用)

    你现在是一场采特殊赛制棒球比赛的记录员 这场比赛由若干回合组成 过去几回合的得分可能会影响以后几回合的得分 比赛开始时 记录是空白的 你会得到一个记录操作的字符串列表 ops 其中 ops i 是你需要记录的第 i 项操作 ops 遵循下述
  • 保证Linux系统安全之分析和排查系统故障

    在处理Linux操作系统出现的各种故障时 故障的症状是最容易发现的 但导致故障的原因才是最终排除故障的关键 熟悉Linux操作系统中常见的日志文件 了解一般故障的分析与解决办法 将有助于管理员快速定位故障点 对症下药 及时解决各种系统问题