systemctl针对service类型的配置文件

news2024/12/28 20:09:35

文章目录

  • systemctl针对service类型的配置文件
    • systemctl配置文件相关目录简介
    • systemctl配置文件的设置项目简介
      • 两个vsftpd运行的实例
      • 多重的重复设置方式:以getty为例
        • 将tty数量由6个降低为4个
        • 暂时新增vsftpd到1212端口
      • 自己做个服务

systemctl针对service类型的配置文件

systemctl配置文件相关目录简介

现在我们知道服务的管理是通过systemd来完成,而systemd的配置文件大部分放置于/usr/lib/systemd/system/ 目录中,但是Red Hat官方文件指出,该目录的文件主要是原本软件所提供的设置,建议不要修改。而要修改的位置应该放置于/etc/systemd/system目录中。举例来说你想要额外修改vsftpd.service的话,官方建议你放在哪些地方呢?

  • /usr/lib/systemd/system/vsftpd.service:官方发布的默认配置文件

  • /etc/systemd/system/vsftpd.serivce.d/custom.conf:在/etc/systemd/system 下面建立于配置文件相同的目录,但是要加上.d的扩展名,然后在该目录下建立配置文件即可。另外,配置文件的扩展名最好使用.conf。在这目录下的文件会【累加其他设置】到 /usr/lib/systemd/system/vsftpd.service中。

  • /etc/systemd/system/vsftpd.service.wants/*:此目录内的文件为链接文件,设置依赖服务的链接,意思是启动vsftpd.service之后,最好再加上该目录下面建议的服务。

  • /etc/systemd/system/vsftpd.service.requires/*:此目录内的文件为链接文件,设置依赖服务的链接。意思就是在启动vsftpd.service 之前,需要事先启动哪些服务的意思。

基本上,在配置文件里你都可以自由设置依赖服务的检查,并且设置加入到哪些target里面。但是如果是已经存在的配置文件,或是官方提供的配置文件,Red Hat建议你不要修改原设置,而是到上面提到的几个目录去进行额外的自定义设置比较好,如果你硬要修改原始的/usr/lib/systemd/system 下面的配置文件,那也是没问题的。

systemctl配置文件的设置项目简介

了解完目录在了解一下文件本身的内容,让我们来看看sshd.service的内容。

[root@localhost ~]# cat /usr/lib/systemd/system/sshd.service 
[Unit]      # 这个项目与此unit的解释、执行服务依赖性有关。
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]   # 这个项目与实际执行的命令参数有关
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]   # 这个项目说明此unit要挂载哪个到target下面。
WantedBy=multi-user.target

[Service]、[Socket]、[Timer]、[Mount]、[Path]:不同的unit类型就得要使用相对应的设置项目。我们使用sshd.service来当模板,所以这边就使用[service]来设置。

分析上面的配置文件,大概可以将整个设置分为3个部分

  1. [Unit] 部分包含了服务的元数据,Description 字段说明了服务的描述信息,即 OpenSSH 服务器守护进程。Documentation 字段指定了服务的文档信息,即 sshd 服务的 man 页面。After 字段指定了服务需要在 network.targetsshd-keygen.service 启动之后启动,Wants 字段指定了服务需要依赖于 sshd-keygen.service 服务。
  2. [Service] 部分定义了服务的具体行为,Type 字段指定了服务的类型为 notify,表示当服务准备就绪时会发送一个通知给 systemd。EnvironmentFile 字段指定了服务需要读取的环境变量文件,ExecStart 字段指定了服务的启动命令和选项,ExecReload 字段指定了服务的重载命令。KillMode 字段指定了服务的停止策略,Restart 字段指定了服务的重启策略为在失败时重启,RestartSec 字段指定了服务重启的时间间隔为 42 秒。
  3. [Install] 部分定义了服务的安装方式,WantedBy 字段指定了服务需要在 multi-user.target 启动之后启动。

此外每个部分里面还有很多的设置,如下所示

unit部分

设置参数参数意义说明
Description是当我们使用【systemctl list-units】时,会输出给管理员看的建议说明信息。
Documentation这个项目在提供给管理员能够进行进一步的文件查询的功能。提供的文件可以是如下内容:
Documentation=http://www…
Documentation=man:sshd(8)
Documentation=file:/etc/ssh/sshd_config
After说明此unit是在哪个daemon启动之后才启动的意思。基本上仅是说明服务启动顺序而已,并没有强制要求里面的服务一定启动后,此unit才能启动。
Before与After的意义相反,是在什么服务启动前最好启动这个服务的意思。仅是规范服务启动顺序,并非强制要求的意思
Requires明确的定义unit需要在哪个daemon启动后才能够启动,就是设置依赖服务。如果在此项设置的前导服务没有启动,那么此unit就不会被启动
Wants与Requires刚好相反,规范的是这个unit之后最好还要启动什么服务比较好的意思。如果Wants后面接的服务没有启动,其实不会影响到这个unit本身
Conflicts代表冲突的服务。就是这个项目后面接的服务如果有启动,那么我们这个unit本身就不能启动。如果我们unit有启动,则此项目后面的服务就不能启动。就是冲突性的检查

Service部分

设置参数参数意义说明
Type该字段指定了服务的类型,一般来说有如下几种类型:
1. simple:最常用的类型,用于启动一个进程,systemd会等待这个进程运行完毕后再启动下一个服务。
2. forking:用于启动一个进程,但是systemd会等待这个进程fork出一个子进程,然后父进程退出,而子进程则继续运行。常用于一些需要后台运行的服务,比如nginx。
3. oneshot:用于只需要执行一次的服务,systemd会等待这个服务执行完毕后就退出。
4. dbus:用于启动一个dbus服务。
5. notify:用于启动一个进程,但是这个进程会在运行完毕后向systemd发送一个通知,告诉它服务已经启动完毕了。
6. idle:用于启动一个进程,但是会等待一段时间,直到系统处于空闲状态时再启动服务。
EnvironmentFile指定启动脚本需要读取的环境配置文件。
ExecStart字段指定了服务的启动命令和选项
ExecStop与systemctl stop 的执行有关,关闭此服务时所运行的命令
ExecReload与systemctl reload 有关的命令操作
Restart指定服务的重启策略
RemainAfterExit当设置RemainAfterExit=1时,则当这个daemon所属的所有进程都终止之后,此服务会再尝试启动,如果设置为0,则服务再退出后视为不再启动。
TimeoutSec若这个服务在启动或关闭时,因为某些缘故导致无法顺利【正常启动或正常结束】的情况下,则我们要等多久才进入【强制结束】的状态。
KillMode字段指定了服务的停止策略
RestartSec字段指定了服务重启的时间

Install部分

设置参数参数意义说明
WantedBy指定服务需要在哪个target启动之后启动,而且这个服务必须是启动的
Also指定与此服务一起启动的服务。
Alias运行一个链接的别名的意思

接下来根据上面这些数据来进行一些简易的操作

两个vsftpd运行的实例

因为某些原因,你可能会使用到两个端口,分别是正常的21以及特殊的555.这两个port都启用的情况下,你可能使用到两个配置文件以及两个启动脚本设置。假设是这样:

  • 默认的21端口:使用/etc/vsftpd/vsftpd.conf 配置文件,以及/usr/lib/systemd/system/ vsftpd.service设置脚本
  • 特殊的2121端口:使用/etc/vsftpd/vsftpd2.conf 配置文件,以及 /etc/systemd/system/ vsftpd2.service 设置脚本。

我们可以这样做

  1. 先建立好需要的配置文件
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# cp vsftpd.conf vsftpd2.conf
[root@localhost vsftpd]# vim vsftpd.conf 
#listen_port=2121
[root@localhost vsftpd]# vim vsftpd2.conf 
listen_port=2121
[root@localhost vsftpd]# diff vsftpd.conf vsftpd2.conf 
129c129
< #listen_port=2121
---
> listen_port=2121
# 注意这两个配置文件的差别,只有这一行不同而已
  1. 开始处理启动脚本设置
[root@localhost vsftpd]# cd  /etc/systemd/system/
[root@localhost system]# cp /usr/lib/systemd/system/vsftpd.service vsftpd2.service
[root@localhost system]# vim vsftpd2.service 
[Unit]
Description=Vsftpd ftp daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf

[Install]
WantedBy=multi-user.target
  1. 重新加载systemd的脚本配置文件内容
[root@localhost system]# systemctl daemon-reload
[root@localhost system]# systemctl list-unit-files --all |grep vsftpd
vsftpd.service                                enabled 
vsftpd2.service                               disabled
vsftpd@.service                               disabled
vsftpd.target                                 disabled
[root@localhost system]# systemctl status vsftpd2.service
● vsftpd2.service - Vsftpd ftp daemon
   Loaded: loaded (/etc/systemd/system/vsftpd2.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@localhost system]# systemctl restart vsftpd.service vsftpd2.service
[root@localhost system]# systemctl enable vsftpd.service vsftpd2.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd2.service to /etc/systemd/system/vsftpd2.service.

image-20230514203647117

image-20230514203710210

很简单地将你的systemd所管理的vsftpd做了另一个相同的服务。如果你有需求按照上面的方法做就行了。

多重的重复设置方式:以getty为例

我们的Centos 7启动完成后,不是说有6个终端可以使用吗?就是tty1~tty6,这个东西是有agetty命令完成的。那么这个终端的功能又是哪个项目所提供的呢?其实,这个东西涉及很多层面,主要管理的是getty.target 这个target unit,不过,实际产生tty1~tty6的则是由getty@.service所提供。

先来看看/usr/lib/systemd/system/getty@.service的内容

[root@localhost ~]# cat /usr/lib/systemd/system/getty@.service
[Unit]
Description=Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
After=systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target
After=rc-local.service
Before=getty.target
IgnoreOnIsolate=yes
ConditionPathExists=/dev/tty0
[Service]
ExecStart=-/sbin/agetty --noclear %I $TERM
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes
[Install]
WantedBy=getty.target

当然比较重要的就是ExecStart项目。那么我们去man agetty时,发现到它的语法应该是【agetty --noclear tty1】之类的字样,因此,我们如果要启动6个tty的时候,基本上应该有6个启动配置文件。就是可能会用到getty1.service、getty2.service…getty6.service才对。但是这样管理很麻烦,所以,才会出现 @ 的项目。这个@是怎么回事呢?先来看看getty@.service 的上游

[root@localhost ~]# systemctl show getty.target
Names=getty.target
Wants=getty@tty1.service
WantedBy=multi-user.target
Conflicts=shutdown.target
Before=multi-user.target
After=getty@tty2.service getty@tty1.service getty@tty3.service getty@tty4.service getty@tty6.service getty@tty5.service
.....
......
....

你会发现,怎么多出了6个怪异的service呢?我们拿getty@tty1.service 说明一下。当我们执行完getty.target之后,它会持续要求 getty@tty1.service 等 6个服务继续启动。那我们的systemd就会这么做

  • 先看 /usr/lib/systemd/system/、/etc/systemd/system/ 有没有getty@tty1.service 的设置,若有就执行,若没有则执行下一步
  • 找getty@.service的设置,若有则将@后面的数据带入成%I 的变量,进入getty@.service执行。

也就是说,其实getty@tty1.service实际上是不存在的。主要是通过getty@.service来执行。也就是说,getty@.service的目的是为了要简化多个执行的启动设置,它的命名方式是这样的

原始文件:执行服务名称@.service
执行文件:执行服务名称@范例名称.service

因此当有范例名称带入时,则会有一个新的服务名称产生。你再回头看看getty@.service的启动脚本

ExecStart=-/sbin/agetty --noclear %I $TERM

上表中那个 %I 指定就是【范例名称】。根据getty.target 的信息输出来看,getty@tty1.service 的 %I 就是tty1,因此执行脚本就会变成【/sbin/agetty --noclear tty1】。所以我们才有办法以一个配置文件来启动多个tty1给用户登录。

将tty数量由6个降低为4个

现在你应该会感到困扰的是,那么【6个tty是谁规定的】?为什么不是5个或是7个?这是由systemd的登录配置文件 /etc/systemd/logind.conf 里面规范的。加入你想要tty数量降低到剩下4个的话,可以这样实验

  1. 修改默认的logind.conf内容,将原本6个终端改为4个
[root@localhost ~]# vim /etc/systemd/logind.conf
[Login]
NAutoVTs=4
ReserveVT=0
....
# 原本是6个而且还注释,请取消注释,然后改成4
  1. 关闭不小心启动的tty5、tty6并重新启动getty.target
[root@localhost ~]# systemctl stop getty@tty5.service
[root@localhost ~]# systemctl stop getty@tty6.service
[root@localhost ~]# systemctl restart systemd-logind.service

现在你再到桌面环境下,按下[ctrl]+[Alt]+[F1]~[F6]就会发现,只剩下4个可用tty,后面的tty5、tty6已经被废弃,不再被启动。那么我暂时需要启动tty8时,又该如何处理?可以这样做

[root@localhost ~]# systemctl start getty@tty8.service

无须额外建立其他的启动服务配置文件

暂时新增vsftpd到1212端口

不知道你有没有发现,其实再/usr/lib/systemd/system/ 下面还有个特别的 vsftpd@.service 。来看看它的内容

[root@localhost ~]# cat /usr/lib/systemd/system/vsftpd@
@::1                      @localhost4               @localhost6               @localhost.localdomain    
@localhost                @localhost4.localdomain4  @localhost6.localdomain6  
[root@localhost ~]# cat /usr/lib/systemd/system/vsftpd@.service
[Unit]
Description=Vsftpd ftp daemon
After=network.target
PartOf=vsftpd.target

[Service]
Type=forking
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/%i.conf

[Install]
WantedBy=vsftpd.target

根据前面getty@.service的说明,我们知道在启动的脚本设置当中,%i或%I 就是代表@后面接的范例文件名的意思。那么能不能建立vsftpd3.conf文件,如何通过该文件来启动新的服务?下面试试看

[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# cp vsftpd.conf vsftpd3.conf
[root@localhost vsftpd]# vim vsftpd3.conf
listen_port=1212

image-20230514213022531

image-20230514213143535

因为我们启用了vsftpd@vsftpd3.service,代表要实验的配置文件在 /etc/vsftpd/vsftpd3.conf 的意思,所以可以直接通过vsftpd@.service 而无须重新设置启动脚本。这样设置会比前面一个小节中的方法要简单,不过你要注意到 @ 这个东西。

自己做个服务

我们自己做个服务。假设我要制作一个可以备份自己系统的服务,这个脚本放在/backups下面,内容如下

[root@localhost ~]# vim /backups/backup.sh
#!/bin/bash
source="/home /root /var/lib /var/spool/{cron,at,mail}"
target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz"
[ ! -d /backups ] && mkdir /backups
tar -zcvf ${target} ${source} &> /backups/backup.log

脚本解释:

这是一个bash脚本,用于备份系统的重要文件和目录。下面是每个部分的解释:

  1. source=“/home /root /var/lib /var/spool/{cron,at,mail}”:这个变量定义了需要备份的目录,包括/home、/root、/var/lib、/var/spool/cron、/var/spool/at和/var/spool/mail。
  2. target=“/backups/backup-system-$(date +%Y-%m-%d).tar.gz”:这个变量定义了备份文件的路径和名称,其中$(date +%Y-%m-%d)表示当前日期,tar.gz表示压缩格式。
  3. [ ! -d /backups ] && mkdir /backups:如果/backups目录不存在,则创建这个目录。
  4. tar -zcvf ${target} ${source} &> /backups/backup.log:使用tar命令将source变量定义的目录打包成一个压缩文件,保存到target变量定义的位置。-z表示使用gzip进行压缩,-c表示创建新的存档文件,-v表示显示打包的详细过程,-f表示指定存档文件的名称。使用&>将tar命令的输出和错误信息都重定向到/backups/backup.log文件中,以便记录备份过程中出现的任何问题。
[root@localhost ~]# chmod a+x /backups/backup.sh 
[root@localhost ~]# ll /backups/backup.sh 
-rwxr-xr-x. 1 root root 215 514 23:29 /backups/backup.sh
# 记得要赋予它可执行权限才行

那么接下来如何设计一个名为backup.service的启动脚本设置?可以如下这样做

[root@localhost ~]# vim /etc/systemd/system/backup.service
[Unit]
Description=backup my server
Requires=atd.service
[Service]
Type=simple
ExecStart=/bin/bash -c "echo /backups/backup.sh | at now"
[Install]
WanteBy=multi-user.target
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start backup.service
[root@localhost ~]# systemctl status backup.service
● backup.service - backup my server
   Loaded: loaded (/etc/systemd/system/backup.service; static; vendor preset: disabled)
   Active: inactive (dead)

514 23:11:38 localhost.localdomain systemd[1]: [/etc/systemd/system/backup.service:8] Unknown lvalu...ll'
5月 14 23:11:38 localhost.localdomain systemd[1]: Started backup my server.
5月 14 23:11:38 localhost.localdomain bash[3022]: job 1 at Sun May 14 23:11:00 2023
5月 14 23:11:45 localhost.localdomain systemd[1]: [/etc/systemd/system/backup.service:8] Unknown lvalu...ll'
Hint: Some lines were ellipsized, use -l to show in full.
# 为什么Active是inactive?这是因为我们的服务仅是一个简单的脚本
# 因此执行完毕就完毕了,不会继续常驻在内存中。
[root@localhost backups]# cd /backups/
[root@localhost backups]# ls
backup.log  backup.sh  backup-system-2023-05-14.tar.gz

配置文件解释:

  1. [Unit]:这个部分是设置服务的描述信息和依赖关系,Description是服务的描述信息,Requires=atd.service 表示这个服务依赖于 atd.service 服务,也就是说,只有在 atd.service 运行的情况下,这个服务才能运行。
  2. [Service]:这个部分是设置服务的运行参数,Type=simple 表示这个服务是最常用的类型,即启动一个进程,systemd会等待这个进程运行完毕后再启动下一个服务。ExecStart=/bin/bash -c “echo /backups/backup.sh | at now” 表示启动这个服务时,会执行这个命令,即在当前时间调用 at 命令,将备份脚本 /backups/backup.sh 添加到任务队列中,并在任务队列中立即执行。
  3. [Install]:这个部分是设置服务的安装信息,WantedBy=multi-user.target 表示将这个服务添加到 multi-user.target 的依赖关系中,也就是说,系统启动时会自动启动这个服务。

完成上述的操作之后,以后你都可以直接实验【systemctl start backup.service 】进行系统的备份了。非常方便!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/526595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

事件循环Event Loop

什么是事件循环&#xff08;event loop&#xff09; 主线程不断的从消息队列中获取消息&#xff0c;执行消息&#xff0c;这个过程被称为事件循环&#xff0c;在javaScript中就是采用事件循环来解决单线程带来的问题 线程和进程 进程&#xff1a;计算机已经运行的程序&#…

睿智的目标检测66——Pytorch搭建YoloV8目标检测平台

睿智的目标检测66——Pytorch搭建YoloV8目标检测平台 学习前言源码下载YoloV8改进的部分&#xff08;不完全&#xff09;YoloV8实现思路一、整体结构解析二、网络结构解析1、主干网络Backbone介绍2、构建FPN特征金字塔进行加强特征提取3、利用Yolo Head获得预测结果 三、预测结…

GOOGLE|只有大模型才能理解你举的例子(In-context learning)是什么

一、概述 title&#xff1a;LARGER LANGUAGE MODELS DO IN-CONTEXT LEARNING DIFFERENTLY 论文地址&#xff1a;https://arxiv.org/abs/2303.03846 参考&#xff1a;https://www.xiaohongshu.com/user/profile/5f01057f0000000001003c91/640aa237000000001303d871 1.1 Moti…

Java高阶数据结构 图补充-拓扑排序

拓扑排序 文章目录 Java高阶数据结构 & 图补充-拓扑排序1. 什么是拓扑排序2. 拓扑排序算法思想-卡恩算法3. 拓扑排序代码实现3.1 遍历链表计算入度3.2 挑选一个入度为0的顶点3.3 输出顶点3.4 判断循环结束是否为全-13.4 *kahn*方法3.5 测试 Java高阶数据结构 & 图补充…

python内置函数,推导式

abs&#xff1a;取绝对值 data abs&#xff08;-10&#xff09; pow&#xff1a;次方 data pow&#xff08;2&#xff0c;5&#xff09; sum&#xff1a;求和 num_list p[1,2,10,20] res sum(num_list) divmod取商和余数&#xff1a; v1&#xff0c;v2 divmod&…

第七届福州大学信息安全竞赛——shellcode1 绕过strlen检查,绕过沙箱检查,执行orw shellcode拿到flag

题目自取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1HrMqh-lX-mkfueVeLzoEJg 提取码&#xff1a;oyel 介绍下这可恶的沙箱机制 这是一道非常让人蛋疼的题目&#xff0c;之前我只听说过沙箱&#xff0c;但是并没有自己实际接触过沙箱这个保护机制&#xff0c;大…

基于PKI的物联网安全服务体系建设

文章目录 1. PKI 概况1.1 PKI 简介1.2 CA 介绍1.2.1 CA证书包含主要内容1.2.1 CA 的工作原理1.2.2 主流的CA机构 1.4 PKI 应用场景 2. PKI 在物联网领域中的应用2.1 物联网PKI架构包含组件2.2 物联网PKI证书链 3. 创建自签CA证书3.1 自签名根证书创建3.2 创建云平台证书3.3 创建…

甘肃非煤矿山电子封条 智慧矿山 opencv

甘肃非煤矿山电子封条 智慧煤矿接入国家矿山安全平台是通过pythonopencv网络模型&#xff0c;甘肃非煤矿山电子封条pythonopencv网络模型对关键位置&#xff08;回风井口、运人井口、车辆出入口&#xff09;对现场人员行为、数量、穿戴着装及设备状态各数据进行实时监控分析。p…

【连续介质力学】特征值和特征向量问题

特征值和特征向量问题 二阶张量和一个向量&#xff08;单位向量 n ^ ′ \hat n n^′&#xff09;的点积会得到一个向量&#xff0c;也就是说&#xff0c;将一个二阶张量投影到某个方向所得到的向量的方向实际上与 n ^ ′ \hat n n^′ 的方向不一样&#xff1a; 特征值和特征向…

IDEA添加.gitignore忽略不需要提交的文件

问题 git上传的时候&#xff0c;我们已经将 xxx 文件添加到了.gitignore 中&#xff0c;但是在push 后&#xff0c;远程仓库还是会显示此文件&#xff0c;比如我们在.gitignore文件当中添加了不需要提交的target目录&#xff0c;但是提交的时候&#xff0c;还是会被提交。 原因…

2023.5.14总结

这周平时在刷蓝桥杯的题目&#xff0c;周天打了一场2021年陕西省的省赛的重现赛。 重现赛我们没打满&#xff0c;打了三个小时&#xff0c;A了四个&#xff0c;不过应该也差不多了。 登录—专业IT笔试面试备考平台_牛客网 以前没学过数论分块&#xff0c;今天学了学。对于一些向…

Hadoop上传及下载数据流程

网络拓扑及机架感知 网络拓扑 节点距离&#xff1a;两个节点到达共同父节点的距离和 机架感知 &#xff08; 副本节点的选择 &#xff09; 例如&#xff1a;500个节点&#xff0c;上传数据my.tar.gz,副本数为3&#xff0c; 根据机架感知&#xff0c;副本数据…

防止攻击者对您使用合法工具

恶意行为者越来越多地利用合法工具来实现其目标&#xff0c;其中包括禁用安全措施、横向移动和传输文件。使用常用工具可以让攻击者逃避检测。 虽然端点产品可以将定制工具或恶意软件标记为恶意软件&#xff0c;但商业上可用的工具通常被组织标记为干净或列入允许列表。 这让…

MacBook Pro合上盖子不休眠的问题简单分析

15年款的MacBook Pro每次不用的时候都是直接合上盖子&#xff08;开着一堆程序&#xff09;系统会自动休眠&#xff0c;但是升级了新系统Sierra之后就发现合上盖子竟然没有休眠&#xff08;第二次打开盖子后发现掉了50%多的电&#xff0c;而且温度比较高&#xff09;&#xff0…

软考A计划-真题-分类精讲汇总-第十一章(多媒体基础)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

MySQL只有information_schema一个数据库

背景&#xff1a;centos新安装的mysql数据库。使用DbEaver连接mysql库时&#xff0c;发现左边不显示表。使用命令框mysql -uroot回车登录时&#xff0c;发现只能看到information_schema一个数据库了。 原因&#xff1a;   因为mysql数据库的user表里&#xff0c;存在用户名为…

Julia入门-1、使用C++调用Julia脚本语言

文章目录 0、开发环境1、测试Julia环境2、调用Julia脚本语言准备3、使用C++调用Julia脚本语言(1)使用C++调用简单的Julia脚本语言(2)使用C++调用复杂的Julia脚本语言0、开发环境 操作系统: ①Windows 10 开发编译器: ①VS 2015 Professional ②VS Code + julia-vscode插件(…

《计算机网络—自顶向下方法》 第六章Wireshark实验:IP 协议分析

IP 协议&#xff08;Internet Protocol&#xff09;&#xff0c;又译为网际协议或互联网协议&#xff0c;是用在 TCP/IP 协议簇中的网络层协议。主要功能是无连接数据报传送、数据报路由选择和差错控制。IP 协议是 TCP/IP 协议族的核心协议&#xff0c;其主要包含两个方面&…

Spring Boot 配置文件总结

前言 Spring Boot 中提供一个全局的配置文件&#xff1a;application.properties&#xff0c;这个配置文件的作用就是&#xff0c;允许我们通过这个配置文件去修改 Spring Boot 自动配置的默认值。 Spring Boot 支持两种格式的配置文件&#xff1a;application.properties 和…

C/C++每日一练(20230515) 区间和的个数、BST最近公共祖先、最接近元素

目录 1. 区间和的个数 &#x1f31f;&#x1f31f;&#x1f31f; 2. 二叉搜索树的最近公共祖先 &#x1f31f; 3. 找最接近元素 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏…