RHCSA学习笔记(RHEL8) - Part1.RH124

Chapter Ⅰ 入门

- Linux 开源系统,命令行,模块化(软件包的形势)
- Windows 闭源

Linux是类UNIX系统,mac系统也是类UNIX系统,所以二者的图形化界面比较相似

开源许可证:公共版权;宽松许可证

redhat是一家开源服务提供商,其收费范围如下:

  • 开case处理故障
  • 补丁更新
  • 知识库
  • 培训

RHEL(RedHat Enterprise Linux)

Fedora
RHEL
CentOS
  • Fedora:上游,实验版,半年更新,一年技术支持,提供最新的软件,不建议用在生产环境
  • RHEL:商业版本
  • CentOS:下游,拿掉RedHat中有知识版本的部分,如图标、功能等

Kdump,有助于系统故障时查找原因,但会占用磁盘空间

Chapter Ⅱ 访问命令行

Kernel是负责与硬件交互的,Shell是应用程序与Kernel间交互的,Bash是实现Shell众多程序中的一种,目前使用是最为广泛的。
Bash是默认的Shell程序

echo $SHEELL

在这里插入图片描述
在这里插入图片描述
1个物理控制台默认虚拟出来6个虚拟控制台tty
tty1 - tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名, 系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。
使用Alt+[F1—F6]组合键时,可以切换到tty2、tty3等上面去。

[root@localhost ~]# who
root     tty1         2022-10-30 19:09
root     pts/0        2023-11-28 10:02 (192.168.0.6)

**id:**获取用户ID(UID)和组ID(GID)
**whoami:**当前使用的用户

查看系统版本:
uname -r (uname=Unix Name)
cat /etc/redhat-release

alt + . 或 esc + . :补充上条指令的参数到此次命令
ctrl + a 光标到行首
ctrl + e 光标到行尾
ctrl + <- 以单词向左移动
ctrl + -> 以单词向右移动
ctrl + u 删除光标前的内容
ctrl + k 删除光标后的内容

“less is more”,less与more的功能类似,但比more更好用:
1、less支持上下翻页
2、less不必读整个文件,速度更快
3、less退出后shell不会留下刚显示的内容,更安全

history
!数字 执行该数字对应的历史指令
!c 匹配以c开头的最近一条指令
ctrl + c,搜索历史指令

Chapter Ⅲ 管理文件

在这里插入图片描述
启动分区

/boot 启动Linux和核心文件,存放开机文件,相当于C盘

根分区

/bin  二进制可执行命令,普通命令,如文件操作等,主要用于具体应用(软链接到/usr/bin)
/sbin 系统管理命令,如分区、格式化操作,主要用于系统管理(软链接到/usr/sbin)
/lib 标准程序设计库,又叫动态链接共享库
/lib64 64位的库文件
/dev 设备文件目录,如/dev/tty, /dev/hd*, /dev/sd*等
/etc 配置文件
/media 挂载设备目录(自动)
/mnt 挂载设备目录(手动)
/tmp 临时文件(/usr/tmp软链接到此)
/usr 通过系统自动安装的软件目录
/var 软件运行所产生的数据存放目录,如日志、数据库文件、缓存文件
/opt 可选的应用程序,一般是自己安装的第三方软件
/srv 服务存放一些对外的服务数据,如web、ftp、流媒体等
/root 系统管理员主目录
/lost+found 系统非正常关机而留下的文件
/misc 可以让多用户堆积和临时转移自己的文件
/sys 正在运行的硬件设备的驱动程序信息
/proc 由核心在内存中产生

用户分区

/home 除root用户之外其他用户的home目录

交换机分区

/swap 交换分区、虚拟内存,一般为物理内存的1.5~2倍

.(单个句点):当前目录
…(两个句点):一级目录

pwd:print working directory

cd:change directory
cd或者cd~:进入家目录
cd~:进入上一次的目录

ls -R:递归显示
ls -d:显示目录
ls -l:长列表显示
ls -i:显示inode

mkdir -p:递归创建
rmdir:删除空目录(实际中用处不大)

软链接:快捷方式,指向文件名;仅指向文件名,大小很小;删除原文件后,软链接文件不会自动删除,但会失去指向
硬链接:Inode的链接,指向文件的存储数据块地址;大小、时间和原文件完全相同,所有硬链接都删除后,文件的数据才会从硬盘中删除
在这里插入图片描述
原文件的inode值和硬链接的inode值相同;但软链接的inode则不同
在这里插入图片描述
通配符

通配符说明
*任意匹配
?任意单个字符
[abc]包含a或b或c中任意一个
[^abc]不包含a、b和c
{a,b,c}
{a…c}
遍历a、b、c(一般用于创建文件或目录)

{} 也可以用于保护变量,{$number}
$() 或者 `` 用于嵌套命令,echo "today is $(date +%A)"或者 echo "today is `date +%A`"

符号说明
单引号 ‘’单引号内全部都是字符
双引号 “”双引号内保留命令、变量,通过\进行转义

Chapter Ⅳ 获得帮助

man 文件类型
用如下命令查询

man man

常用的为:1-命令;5-配置文件

1   Executable programs or shell commands
2   System calls (functions provided by the kernel)
3   Library calls (functions within program libraries)
4   Special files (usually found in /dev)
5   File formats and conventions eg /etc/passwd
6   Games
7   Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8   System administration commands (usually only for root)
9   Kernel routines [Non standard]

不同文档类型的对比

[root@localhost ~]# man 1 passwd
PASSWD(1)                                                       User utilities                                                      PASSWD(1)

NAME
       passwd - update user's authentication tokens

SYNOPSIS
       passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]

DESCRIPTION
       The passwd utility is used to update user's authentication token(s).

       This  task  is achieved through calls to the Linux-PAM and Libuser API.  Essentially, it initializes itself as a "passwd" service with
       Linux-PAM and utilizes configured password modules to authenticate and then update a user's password.

       A simple entry in the global Linux-PAM configuration file for this service would be:

        #
        # passwd service entry that does strength checking of
        # a proposed password before updating it.
        #
        passwd password requisite pam_cracklib.so retry=3
        passwd password required pam_unix.so use_authtok
        #

       Note, other module types are not required for this application to function correctly.
[root@localhost ~]# man 5 passwd
PASSWD(5)                                                 Linux Programmer's Manual                                                 PASSWD(5)

NAME
       passwd - password file

DESCRIPTION
       The /etc/passwd file is a text file that describes user login accounts for the system.  It should have read permission allowed for all
       users (many utilities, like ls(1) use it to map user IDs to usernames), but write access only for the superuser.

       In the good old days there was no great problem with this general read permission.  Everybody could read the encrypted passwords,  but
       the hardware was too slow to crack a well-chosen password, and moreover the basic assumption used to be that of a friendly user-commu‐
       nity.  These days many people run some version of the shadow password suite, where /etc/passwd has an 'x' character  in  the  password
       field, and the encrypted passwords are in /etc/shadow, which is readable by the superuser only.

       If  the  encrypted  password, whether in /etc/passwd or in /etc/shadow, is an empty string, login is allowed without even asking for a
       password.  Note that this functionality may be intentionally disabled in applications, or configurable (for example using the "nullok"
       or "nonull" arguments to pam_unix.so).

       If the encrypted password in /etc/passwd is "*NP*" (without the quotes), the shadow record should be obtained from an NIS+ server.

       Regardless  of  whether  shadow  passwords are used, many system administrators use an asterisk (*) in the encrypted password field to
       make sure that this user can not authenticate him- or herself using a password.  (But see NOTES below.)

       If you create a new login, first put an asterisk (*) in the password field, then use passwd(1) to set it.

       Each line of the file describes a single user, and contains seven colon-separated fields:

              name:password:UID:GID:GECOS:directory:shell

man -k:索引搜索,速度快,模糊匹配
mandb:用于初始化或手动更新 索引 数据库缓存
man -t:查询结果保存成文件
whatis:功能类似于man
pinfo:相当于帮助的百科全书

Chapter Ⅴ 创建、查看和编辑文本文件

在这里插入图片描述

编号通道名称描述默认连接用法
0stdin标准输入键盘仅读取
1stdout标准输出终端仅写入
2stderr标准错误终端仅写入
3+filename其他文件读取、写入
用法说明视觉辅助
> file重定向stdout以覆盖文件在这里插入图片描述
>> file重定向stdout以附加到文件在这里插入图片描述
2> file重定向stderr以覆盖文件在这里插入图片描述
2> /dev/null将stderr错误消息重定向到/dev/null,从而将它丢弃在这里插入图片描述
> file 2>&1
&>file
重定向stdout和stderr以覆盖同一个文件在这里插入图片描述
>> file 2>&1
>>file
重定向stdout和stderr以附加到同一个文件在这里插入图片描述

& 标准输出、标准错误输出到一起
2>&1 通道2从通道1出
1>&2 通道1从通道2出

管道符
管道是一个或多个命令的序列,用竖线字符(|)分隔。管道将第一个命令的标准输出连接到下一个命令的标准输入。
在这里插入图片描述

在管道中,tee将其标准输入复制到其标准输出中,并且还将标准输出重定向到指定为命令参数的文件。如果您将数据想象成流经管道的水,那么可将tee视觉化为管道中的T形接头,它负责输出在两个方向上的流向。
在这里插入图片描述
文本编辑器VIM

  • 字符模式v
    在这里插入图片描述
  • 行模式V
    在这里插入图片描述
  • 块模式ctrl+v
    在这里插入图片描述
  • 撤销u
  • 取消撤销ctrl+r
  • 复制y(yank)
  • 黏贴p(paste)
  • 复制当前行yy
  • 复制n行,数字+yy

SHELL变量
变量 = { S H E L L 变量 环境变量 变量=\left\{ \begin{matrix} SHELL变量 \\ 环境变量 \end{matrix} \right. 变量={SHELL变量环境变量

[root@localhost ~]# echo $PS1
[\u@\h \W]\$

将SHELL变量声明为环境变量export
删除SHELL变量:unset

Chapter Ⅵ 管理本地用户和组

一个用户有一个主要组,还可以有其他的补充组,即一个用户可以归属到多个组中

wheel组,是一个特殊组,具有管理员权限
{ s u r o o t :用原来的环境变量 s u − r o o t :重新登录,用 r o o t 的环境变量 \left\{ \begin{matrix} su root:用原来的环境变量 \\ su - root:重新登录,用root的环境变量 \end{matrix} \right. {suroot:用原来的环境变量suroot:重新登录,用root的环境变量

/etc/suoders
有%是组,没有%是用户
%wheel ALL=(ALL) NOPASSWD: ALL
ALL:哪些主机可以
ALL:可以切换到哪些用户或组
ALL:可以执行的指令

visudo也可以修改,同时支持语法检查

sudo -l查看用户权限

/etc/shadow
user:$6$BPFl0wz5$.Nxsxt6vvS/fQTU8hr9EUuDZSmR8Kl7.Qo/pP2nzsnPzmrMJJp5ZvibB.2J4K7KSEUoyJ7jF2q7WqiW8YeQjY1:18508:0:99999:7:::
字段1:用户名
字段2:密码,SHA512加密,$分割,第一个字段是随机字符串,之后是密码
字段3:最后一次修改时间,时间为据1970年1月1日多少天,可以通过 date -d “1970-01-01 18508 days” 查询
字段4:最小修改时间间隔,最后一次修改密码的日期起,多长时间之内不能修改密码;如果是 0,则密码可以随时修改
字段5:密码有效期,最后一次更改密码多长时间内需要再次变更密码(密码过期但账号可用);默认值为 99999(273 年),即永久生效
字段6:密码需要变更前的警告天数
字段7:密码过期后的宽限天数,如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效
字段8:账号失效时间,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用
字段9:保留

chage,等同于修改shadow文件

Options:
  -d, --lastday LAST_DAY        set date of last password change to LAST_DAY
  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE
  -h, --help                    display this help message and exit
  -I, --inactive INACTIVE       set password inactive after expiration
                                to INACTIVE
  -l, --list                    show account aging information
  -m, --mindays MIN_DAYS        set minimum number of days before password
                                change to MIN_DAYS
  -M, --maxdays MAX_DAYS        set maximum number of days before password
                                change to MAX_DAYS
  -R, --root CHROOT_DIR         directory to chroot into
  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS

例:chage -d 0 -m 3 -M 100 -W -I
也可以不加参数,交互式修改

/etc/passwd
user:x:500:500::/home/user:/bin/bash
字段1:用户名
字段2:密码,由于/etc/passwd文件对所有用户都可读,存在安全隐患,都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符
字段3:UID
字段4:GID
字段5:注释性描述
字段6:家目录
字段7:用户的登录shell

/etc/login.defs
设置用户帐号限制的文件,该文件里的配置对root用户无效
如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,/etc/shadow的配置优先级高于/etc/login.defs,可以理解成login.defs是全局设置,而shadow则是针对账号的设置,所以优先级更高

#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#

# *REQUIRED*
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#
#QMAIL_DIR      Maildir
MAIL_DIR        /var/spool/mail
#MAIL_FILE      .mail

创建一个用户时,要在目录/var/spool/mail中创建一个用户mail文件

# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_MIN_LEN    Minimum acceptable password length.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
# System accounts
SYS_UID_MIN               201
SYS_UID_MAX               999

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
# System accounts
SYS_GID_MIN               201
SYS_GID_MAX               999
  • PASS_MAX_DAYS:密码最大有效期
  • PASS_MIN_DAYS:两次修改密码的最小时间间隔
  • PASS_MIN_LEN:密码最小长度,对于root无效
  • PASS_WARN_AGE:密码过期前多少天提示
  • UID_MIN:用户ID的最小值(RHEL7之前的惯例是,1-499用于系统用户,500+用于普通用户)
  • UID_MAX:用户ID的最大值
  • GID_MIN:组ID的最小值
  • GID_MAX:组ID的最大值
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD    /usr/sbin/userdel_local

删除用户时执行的脚本 USERDEL_CMD

#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME     yes

使用useradd的时候是否创建家目录 CREATE_HOME

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK           077

设置UMASK值

# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes

删除用户时是否删除对应的组 USERGROUPS_ENAB

# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512

使用MD5加密 ENCRYPT_METHOD

useradd

选项用法
-c, --comment COMMNET将用户的真实姓名添加到注释字段
-g, --gid GROUP为用户账户指定主要组
-G, --groups GROUPS为用户账户指定补充组的逗号分隔列表
-a, --append利用-G选项将补充组添加到用户当前的组成员集合中,而不是将补充组集合替换为新的集合
-d, --home HOME_DIR为用户账户指定特定的主目录
-m, --move-home将用户的主目录移到新的位置。必须与-d搭配使用
-s, --shell SHELL为用户账户指定特定的登录shell
-L, --lock锁定用户账户
-U, --unlock解锁用户账户

userdel
从/etc/passwd中删除username的详细信息,但保留家目录
userdel -r username从/etc/passwd中删除详细信息的同时,也删除家目录
不指定-r选项的时候,删除用户的UID如果再次分配给其他用户,新用户将拥有删除用户的文件权限,存在信息泄露风险。
在这里插入图片描述
在这里插入图片描述
usermod

选项用法
-c修改注释
-d修改家目录
-md移动家目录
-e修改有效期
-g修改所属组
-G修改用户补充组
-aG增加补充组
-u修改UIID

Chapter Ⅶ 控制对文件的访问

权限文件目录
r(读取)读取文件内容列出目录中的文件名
w(写入)更改文件内容创建或删除目录中的文件
x(执行)执行文件可以cd进入目录

chmod(change mode)
chmod WHO WHAT WHICH file|directory

  • WHO是指u、g、o、a(用户、组、其他、全部)
  • WHAT是指+、-、=(添加、删除、精确设置)
    WHICH是指r、w、x(读取、写入、执行)

特殊权限
特殊权限位只在执行位x上有效

特殊权限对文件的影响对目录的影响
u+s,suid以文件拥有者身份运行无影响
g+s,sgid以归属组身份运行以归属身份创建文件
o+t,sticky无影响只能删除自己的文件,不能删除其他用户的文件

以passwd为例,passwd指令在普通用户执行的时候,会以root身份运行,虽然shadow文件对任何用户都没有权限,但因为以root身份运行,所以可以正常修改密码
在这里插入图片描述
用数值表示(第四位):suid=4、sgid=2、sticky=1
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
数值表示为4755

默认权限
文件/目录的默认权限

类别说明
文件666 - umask
目录777 - umask

/etc/profile:主默认启动文件,系统上每一个用户在登陆时都将执行此文件,一些重要的变量就是在这个脚本文件中设置的
/etc/profile.d/:存放的是一些应用程序所需的启动脚本,其中包括了颜色、语言、less、vim及which等命令的一些附加设置
~/.bash_profile:用来设置一些环境变量,功能和/etc/profile 类似,但是这个是针对用户来设定的,也就是说,你在/home/user1/.bash_profile 中设定了环境变量,那么这个环境变量只针对 user1 这个用户生效。(/.bash_profile、/.bash_login和~/.profile先找到哪个用哪个)
~/.bashrc:作用类似于/etc/bashrc, 只是针对用户自己而言,不对其他用户生效;当登录时以及每次打开新的shell时,该该文件被读取
/etc/bashrc:这个文件设置系统bash shell相关的东西,对系统内所有用户生效。只要用户运行bash命令,那么这里面的东西就在起作用;当bash shell被打开时,该文件被读取
在这里插入图片描述

添加环境变量的三种方法:
1、临时生效:export PATH= P A T H : / o p t / b i n / ,只对当前会话有效 2 、只对当前用户永久生效: v i m   / . b a s h p r o f i l e ,并执行 s o u r c e   / . b a s h p r o f i l e 在 P A T H = PATH:/opt/bin/,只对当前会话有效 2、只对当前用户永久生效:vim ~/.bash_profile,并执行source ~/.bash_profile 在PATH= PATH:/opt/bin/,只对当前会话有效2、只对当前用户永久生效:vim /.bashprofile,并执行source /.bashprofilePATH=PATH: H O M E / b i n 行后添加 : / o p t / b i n / 3 、对系统内所有用户永久生效: v i m / e t c / p r o f i l e ,文件末尾增加 P A T H = HOME/bin行后添加 :/opt/bin/ 3、对系统内所有用户永久生效:vim /etc/profile,文件末尾增加 PATH= HOME/bin行后添加:/opt/bin/3、对系统内所有用户永久生效:vim/etc/profile,文件末尾增加PATH=PATH:/opt/bin
export PATH

ssh ip + 指令,非登录shell操作

[root@localhost ~]# ssh root@192.168.255.1 ls -l /root
root@192.168.255.1's password:
total 52
-rw-------. 1 root root  1293 Jun  2  2022 anaconda-ks.cfg
-rw-r--r--  1 root root 47508 Aug  9 16:09 tree-1.6.0-10.el7.x86_64.rpm

Chapter Ⅷ 监控和管理进程

进程是已启动的可执行程序的运行中实例。进程由以下组成部分:

  • 已分配内存的地址空间
  • 安全属性,包括所有权凭据和特权
  • 程序代码的一个或多个执行线程
  • 进程状态

进程的环境包括:

  • 本地和全局变量
  • 当前调度上下文
  • 分配的系统资源,如文件描述符和网络端口

每个新进程分配有一个唯一进程ID (PID),满足跟踪和安全性之需。所有进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫init进程,在RHEL8中该init进程是systemd
fork函数可以创造子进程
在这里插入图片描述
通过fork,子进程继承安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec其自己的程序代码。通常,父进程在子进程运行期间处于睡眠状态,设置一个在子进程完成时发出信号的请求(wait)。在退出时,子进程已经关闭或丢弃了其资源和环境。唯一剩下的资源称为僵停,是进程表中的一个条目。父进程在子进程退出时收到信号而被唤醒,清理子条目的进程表,由此释放子进程的最后一个资源。然后,父进程继续执行自己的程序代码。
个人理解:父进程创造出多个子进程后,可以多进程运行,然后当子进程任务结束后再由父进程将他们清理

在多任务处理操作系统中,每个CPU(或CPU核心)在一个时间点上处理一个进程。在进程运行时,它对CPU时间和资源分配的直接要求会有变化。进程分配有一个状态,它随着环境要求而改变。
在这里插入图片描述

名称标志内核定义的状态名称和描述
运行RTASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪。
睡眠STASK_INTERRUPTIBLE:进程正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中。
DTASK_UNINTERRUPTIBLE:此进程也在睡眠,但与S状态不同,不会响应信号。仅在进程中断可能会导致意外设备状态的情况下使用。
KTASK_KILLABLE:与不可中断的D状态相同,但有所修改,允许等待中的任务响应要被中断(彻底退出)的信号。实用程序通常将可中断的进程显示为D状态。
ITASK_REPORT_IDLE: D状态的一个子集。在计算负载平均值时,内核不会统计这些进程。用于内核线程。设置了 TASK_UNINTERRUPTABLE和 TASK NOLOAD标志。类似于TASK_KILLABLE,也是D状态的一个子集。它接受致命信号。
已停止TTASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复)。
TTASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个T状态标志。
僵停ZEXIT ZOMBIE:子进程在退出时向父进程发出信号。除进程身份(PID)之外的所有资源都已释放。
XEXIT DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到。

PS指令
常用的两种命令:ps -efps aux
如果想查看进程的CPU占用率和内存占用率,可以使用aux
如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef

选项意义
a所有进程,包括其他用户进程
u以用户为主的格式来显示程序状况
x显示所有进程,不以终端来区分
-e显示所有进程
-f全格式

Linux版的ps命令支持三种选项格式:

  • UNIX(POSIX)选项,可以分组但必须以短划线开头 ps -aux
  • BSD选项,可以分组但不可与短划线同用 ps aux
  • GNU长选项,以双短划线开头 ps aux --sort
    例如,ps -aux不同于ps aux。 当有x用户的时候ps -aux 相当于x用户执行 ps,UNIX标准要求“ps -aux”打印名为“x”的用户拥有的所有进程,以及所有可能的进程由-a选项选择。如果名为“x”的用户不存在,该ps可能解释该命令以"ps aux"代替,并打印一个警告。这种行为是为了帮助老年人过渡scripqs和习惯。它是脆弱的,易变的,因此不应该依赖。

按内存升序排列:ps aux --sort=rss
按CPU降序排列:ps aux --sort=-%cpu

后台作业
如果利用&符号将包含管道的命令行发送到后台,管道中最后一个命令的PID将用作输出。管道中的所有进程仍是该作业的成员。
在这里插入图片描述
通过jobs可以查看后台作业及作业编号

后台→前台:fg %作业编号
前台→后台:ctrl+z,前台作业置于后台后并暂停
启动后台暂停作业:bg %作业编号
在这里插入图片描述

中断进程

信号编号短名称定义用途
1HUP挂起用于报告终端控制进程的终止。也用于请求进程重新初始化(重新加载配置)而不终止。
2INT键盘中断导致程序终止。可以被拦截或处理。通过按INTR键序列 (Ctrl+c)发送。
3QUIT键盘退出与SGNT相似;在终止时添加进程转储。通过按QUIT键序列(Ctrl+)发送。
9KILL中断,无法拦截导致立即终止程序。无法被拦截、忽略或处理;总是致命的。
15默认TERM终止导致程序终止。和SIGKILL不同,可以被拦截、忽略或处理。要求程序终止的“友好”方式;允许自我清理。
18CONT继续发送至进程使其恢复(若已停止)。无法被拦截。即使被处理,也始终恢复进程。
19STOP停止,无法拦截暂停进程。无法被拦截或处理。
20TSPT键盘停止和SIGSTOP不同,可以被拦截、忽略或处理。通过按SUSP键序列(Ctrl+z)发送。
[root@localhost ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

killall命令可以根据命令名称向多个进程发送信号
在这里插入图片描述
pkill相当于是模糊匹配的kill,可以同时杀死多个进程,常用选项如下

选项意义
-U匹配真实用户ID
-u匹配有效用户ID
-v查找不符合条件的

实际用户ID(实际组ID):标识当前用户(所属组)是谁,当用户登陆时取自口令文件。
有效用户ID(有效组ID):用来决定我们(当前进程)对文件的访问权(即实际该进程的是以那个用户运行的)。
在这里插入图片描述passwd实际是以用户ID:root,组ID:zzg来运行的,即对PID=8444的进程来说:
它的实际用户ID为zzg(由于是当前用户是zzg)
它的有效用户ID为root
它的实际用户组ID为zzg
它的有效用户组ID为zzg

Chapter Ⅸ 控制服务和守护进程

守护进程一般用进名称+d表示,比如httpd、sshd等
Centos 5:SysV init
Centos 6:Upstart
Centos 7:Systemd
Centos 8:Systemd

systemctl支持管理的单元类型

[mysql@localhost ~]$ systemctl -t help
Available unit types:
service
socket
busname
target
snapshot
device
mount
automount
swap
timer
path
slice
scope

在RHEL8中,netstat和ss功能一样

systemctl cat httpd可以直接查看对应服务的配置文件

systemctl restart、reload、reload-or-restart 进程

  • restart,PID改变
  • reload,仅重新加载配置文件,PID不变,但部分服务可能不支持
  • reload-or-restart,不支持reload的话再restart

systemctl选项

选项意义
start启动
stop停止
restart重启
enable开机启动
disable禁止开机启动,删除符号链接
mask屏蔽,建立一个指向/dev/null的符号链接,无法启动
unmask解除屏蔽

disable后,不影响启动该服务
在这里插入图片描述
mask后,服务就不无法再次启动
在这里插入图片描述
systemctl enable --now httpd设置开机启动,同时开启该服务

uptime 可以查看负载情况
top指令
s:修改刷新时间,默认位3秒
x:高亮排序,shift+←或shift+→调整排序列
k:结束进程,与kill类似

Chapter Ⅹ 配置和保护SSH

w,查看目前在线的用户信息
pkill -t tty信息,踢掉在线用户

SSH登录

  • 密码登录
    在这里插入图片描述
  • 密钥登录
    在这里插入图片描述
    使用密钥登录配置
    1、生成公私钥的密钥对
    ssh-keygen -t rsa -f .ssh/lab_rsa
    -t表示类型,默认位rsa;-f指定生成的密钥对位置及命名,默认在~/.ssh/下,私钥为id_rsa,公钥为id_rsa.pub
    创建的时候还可以加入密语,进一步增加密钥的安全性
    2、修改被管机器上的ssh配置文件
    AuthorizedKeysFile .ssh/authorized_keys,指定公钥的存储位置
    3、将公钥复制到被管机器上
    ssh-copy-id -i /home/student/.ssh/id_rsa.pub devops@servera
    复制成功后,会在authorized_keys中查到公钥信息
    4、使用私钥登录
    ssh -i /home/student/.ssh/id_rsa devops@servera

Chapter Ⅺ 分析和存储日志

主要系统日志

日志文件存储的消息类型
/var/log/messages大多数系统日志消息记录在此处。例如包括与身份验证、电子邮件处理和调度作业执行相关的消息一级纯粹与调试相关的消息
/var/log/secure与安全性和身份验证事件相关的syslog消息
/var/log/maillog与邮件服务器相关的syslog消息
/var/log/cron与调度作业执行相关的syslog消息
/var/log/boot.log与系统启动相关的非syslog控制台消息

关于系统日志的两个重要服务:systemd-journald和rsyslogd
systemd-journald记录了最全的所有系统日志;rsyslogd只记录syslog协议产生的日志
在这里插入图片描述
rsyslog优先级

代码优先级严重性
0emerg系统不可用
1alert必须立即采取措施
2crit临界情况
3err非严重错误状况
4warning警告情况
5notice正常但重要的事件
6info信息性事件
7debug调试级别消息

/etc/rsyslog.conf中配置syslog日志的规则
产生源.级别 日志路径
如uucp,news.crit /var/log/spooler,表示uucp、news产生的crit级别事件,会存储到/var/log/spooler文件中
在这里插入图片描述
日志轮转
logrotate工具会轮转日志文件,以防止它们在含有/var/log目录的文件系统中占用太多空间。轮转日志文件时,使用指示轮转日期的扩展名对其重命名。

手动发送syslog消息
logger -p local7.notice "Log entry created on host"

保留系统日志
默认情况下,系统日志保在在/run/log/journal目录中,这意味着系统重启时这些日志会被清除。/etc/systemd/journald. conf文件中的Storage参数决定系统日志以易失性方式存储,还是在系统重启后持久保留。
在这里插入图片描述

  • persistent
    将日志存储在/var/log/journal 目录中,这可在系统重启后持久保留。
  • volatile
    将日志存储在易失性/run/log/journal 目录中。因为/run文件系统是临时的,仅存在于运行时内存中,存储在其中的数据(包括系统日志)不会在系统启后持久保留。
  • auto(默认)
    rsyslog决定要使用持久存储还是易失性存储。如果/var/log/journal 目录存在,那么rsyslog会使用持久存储,否则使用易失性存储。

timedatectl set-timezone Asia/Shanghai
timedatectl set-time 2020-11-3018:41:00

timedatectl set-ntp true/false

systemctl status chronyd
RHEL从7.0开始改用chrony同步时间,原ntp同步方式也可以使用,但要安装ntp服务
chronyc sources -v
在这里插入图片描述
rpm -qc chrony
q:query
c:configfiles

Chapter Ⅻ 管理网络

RHEL 7:使用network或NetworkManager服务管理网络均可
RHEL 8:只用NetworkManager管理网络

接口命名
ens:Ethernet s 扩展槽的索引号(独立)
eno:Ethernet o 集成设备的设备索引号(集成)
enp4s0:ps 基于总线及槽的拓扑结构进行命名
enp4s0f0:function 虚拟接口

ip link show:查看链路状态
ip -s link show:查看链路收发包信息
ip addr:查看IP地址
ip route:查看路由表

tracepath、traceroute都可以查看路径,其中tracepath是系统默认安装的,都使用UDP协议

ss等同于netstat

选项描述
-n显示接口和端口的编号,而不显示名称
-t显示TCP套接字
-u显示UDP套接字
-l仅显示侦听中的套接字
-a显示所有(侦听中和已建立的)套接字
-p显示使用套接字的进程

nmcli命令
连接配置文件(Connection)和物理网口,一个物理网口可以有多个配置文件,但只能有一个生效

nmcli device status
nmcli device disconnect ens33; nmcli connect ens33

在这里插入图片描述
注:ens33是物理网口device;Wired connection 1是连接文件,相当于物理网口的一个配置

nmcli connection show
nmcli connection add con-name test-port ifname ens33 type ethernet ipv4.method manual ipv4.address 172.25.250.100/24 ipv4.gateway 172.25.250.254
nmcli connection modify test-port ipv4.dns 172.25.250.254
nmcli connection reload test-port
nmcli connection down test-port; nmcli connection up test-port

hostname命令
永久修改:hostnamectl set-hostname xxx
或者 vim /etc/hostname
临时修改:hostname xxx

/etc/resolv.conf
在这里插入图片描述
search作用:补全要访问的短域名
比如访问servera,不全后就是servera.lab.example.com

Chapter XIII 归档和传输文件

压缩和解压
tar操作
cf压缩;xf解压;tf查看

选项描述
-c, --create创建存档,压缩
-x, --extract从存档中提取,解压
-t, --list列出存档的目录,查看
-f, --file文件名,需要放在参数最后面
-C指定存放解压文件的路径

三种存档类型gzip、bzip2和xz

选项特点
-z, --gzip速度快,压缩率低
-j, --bzip2居中
-J, --xz速度慢。压缩率高

SCP指令
Secure CoPy,安全传输文件
本机→远端:scp local_path/file_name user@host:/path
远端→本机:scp user@host:/path local_path/file_name
scp /etc/yum.conf student@servera:/home/student/
如果传送目录,用-r选项

Chapter XIV 安装和更新软件包

安装方式 = { 源码安装:源码形式发布,需要编译成二进制后使用; . c o n f i g u r e ∣ m a k e ∣ m a k e i n s t a l l R P M ( R e d h a t P a c k a g e M a n a g e r ):管理方便,但依赖关系复杂 Y U M : R P M 的前端程序,可自动解决 R P M 的依赖关系 安装方式=\left\{ \begin{matrix} 源码安装:源码形式发布,需要编译成二进制后使用; .configure | make | make install \\ RPM(Redhat Package Manager):管理方便,但依赖关系复杂 \\ YUM:RPM的前端程序,可自动解决RPM的依赖关系 \end{matrix} \right. 安装方式= 源码安装:源码形式发布,需要编译成二进制后使用;.configuremakemakeinstallRPMRedhatPackageManager):管理方便,但依赖关系复杂YUMRPM的前端程序,可自动解决RPM的依赖关系

软件包的命名
name-version-release.architecture.rpm
在这里插入图片描述
NAME:软件名名称
VERSION:原始软件的版本号
RELEASE:发行版号
ARCH:编译的软件包运行的处理架构;noarch标识不限定架构;x86_64表示64位的x86指令集;aarch64表示64位的ARMv8

RPM更新软件包:先删除旧版本,再安装新版本

检查RPM安装包

命令说明
rpm -qa列出当前安装的所有RPM包
rpm -q NAME显示系统上安装的NAME版本
rpm -qi NAME显示有关软件包的详细信息
rpm -ql NAME列出软件包中含有的所有文件
rpm -qc NAME列出软件包中含有的配置文件
rpm- qd NAME列出软件包中含有的文档文件
rpm -q --change-log NAME查询软件包的更新信息
rpm -q --scripts NAME查询安装、卸载前后执行的脚本
rpm -qf 文件路径查看一个文件是由哪个包安装的

从软件包查文件在这里插入图片描述
从文件查软件包
在这里插入图片描述
安装:rpm -ivh 软件包
更新:rpm -Uvh 软件包
卸载:rpm -e 软件包

YUM安装
在RHEL8中把软件源分成了两部分,分别是:
BaseOS 存储库 - BaseOS 存储库以传统 RPM 包的形式提供底层核心 OS 内容
AppStream 存储库 - Application Stream 存储库提供您可能希望在给定用户空间中运行的所有应用程序

yum仓库用来存放所有的现有的.rpm包,当使用yum安装一个rpm包时,需要依赖关系,会自动在仓库中查找依赖软件并安装。仓库可以是本地的,也可以是HTTP、FTP、nfs形式使用的集中地、统一的网络仓库。安装的时候,会现在RPM包,然后再在安装。

命令说明
yum list列出已安装和可用的软件包
yum group list列出已安装和可用的组
yum search KEYWORD按关键字搜索软件包
yum info PACKAGE显示软件包的详细信息
yum install PACKAGE安装软件包
yum group install GROUP安装软件包组
yum update更新所有软件包
yum remove PACKAGE删除软件包
yum history显示安装和删除历史

所有安装和删除事务的日志都记录在/var/log/dnf.rpm.log中
在这里插入图片描述

创建YUM仓库
本质:在 / e t c / y u m . r e p o s . d / 下创建 r e p o 文件 { 手工创建 y u m − c o n f i g − m a n a g e r 指令 本质:在/etc/yum.repos.d/下创建repo文件\left\{ \begin{matrix} 手工创建 \\ yum-config-manager指令 \end{matrix} \right. 本质:在/etc/yum.repos.d/下创建repo文件{手工创建yumconfigmanager指令

仓库类型 { 本地 y u m 源仓库 网络 y u m 源仓库 自建 y u m 源仓库 仓库类型\left\{ \begin{matrix} 本地yum源仓库 \\ 网络yum源仓库 \\ 自建yum源仓库 \end{matrix} \right. 仓库类型 本地yum源仓库网络yum源仓库自建yum源仓库
在这里插入图片描述

参数说明
[base]软件源的名称,自定义,所有repo文件中必须唯一,不能有空格
name软件仓库的名称
mirrorlist镜像列表,多个镜像网站,一般不用,因为部分镜像在国外,搜索起来很慢
baseurl镜像URL地址,唯一的一个,是搜索RPM包的关键
enable0表示禁用
gpgcheck0表示不进行gpg校验
gpgkey指定校验的gpg密钥文件
priority优先级,1为最高,设置不同repo的执行顺序

Chapter XV 访问Linux文件系统

硬盘命名

s d a 1 { s : s c s i 接口 d :磁盘 a :第几块磁盘 1 :第几个分区 sda1\left\{ \begin{matrix} s:scsi接口 \\ d:磁盘 \\ a:第几块磁盘 \\ 1:第几个分区 \end{matrix} \right. sda1 sscsi接口d:磁盘a:第几块磁盘1:第几个分区
vda:虚拟磁盘
nvme0p1:nvme磁盘,0表示第几块磁盘,1表示第几个分区(partition)

df -h:1G=1024M
df -H:1G=1000M
进制方式不一样,会导致识别出来的空间大小存在一定误差
在这里插入图片描述
硬盘 → 分区 → 格式化 → 文件系统 → 挂载

  • 分区:fdisk、parted

  • 格式化:mkfs

  • 挂载:临时挂载mount;永久挂载/etc/fstab
    fstab挂载的时候推荐使用UUID(用磁盘命名挂载,可能在磁盘命名错乱的时候造成系统崩溃)
    查看UUID的方法:
    lsblk -fp /dev/sda1
    blkid /dev/sda1
    取消挂载umount时如果报错,可能是有用户正在使用此分区,可用lsof查看谁在使用
    在这里插入图片描述
    在这里插入图片描述
    查找文件
    locate:搜索预生成的文件名或文件路径,从mlocate数据库中查找信息
    find:通过爬取整个文件系统层次结构来实时搜索

  • locate命令
    locate数据库每日自动更新,也可以通过updatedb命令强制即时更新
    -i 忽略大小写
    -n 限制搜索结果数量

  • find命令

选项说明示例
-iname忽略大小写find /etc -iname test
-f搜索文件find /etc -name test -f
-d搜索文件夹find /etc -name test -d
-user所有者find /etc -name test -user student
-group所属组find /etc -name test -group student
-size大小find /etc -name test -size 10M查找大小10M的文件
find /etc -name test -size +10M大于10M的文件
find /etc -name test -size -10M小于10M的文件
-mmin修改时间find /etc -mmin -10查找10分钟内修改的文件
find /etc -mmin +10查找10分钟前修改的文件

find -exec
find / -user student -exec cp -a {} /root/dfiles \;
在根目录/下查找student用户的文件,并copy到/root/dfiles目录下
相当于是把查找后的结果,即exec前执行的结果放到{}中

Chapter XVI 分析服务器和获取支持

cockpit:WEB控制台监控系统
使用TCP:9090端口

firewalld添加cockpit服务

sudo firewalld-cmd --add-service=cockpit --permanent
sudo firewalld-cmd --reload

在这里插入图片描述
“Reuse my password for privileged tasks”,允许使用sudo特权

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp-从后台返回的一串地址信息上,提取省市区进行赋值

1.这是接口返回的地址信息 2.要实现的效果 3.实现代码&#xff1a; <view class"address">{{item.address}}</view>listFun() {let url this.$url.url.positionInfoCompany;let param {page: this.page,limit: this.limit,keyword: this.keyword,};thi…

Rust语言项目实战(二) - 准备键盘和终端屏幕

上一章节中&#xff0c;我们实现了游戏开始音频的播放&#xff0c;本章我们开始编写游戏界面。我们的游戏是在命令行终端中运行的&#xff0c;因此编写的界面也是终端中展示的界面&#xff0c;上一章中&#xff0c;我们已经把相关的依赖包crossterm添加到了依赖列表中。本章首先…

【嵌入式Linux程序开发综合实验】-1(附流程图) | ARM开发板 | 测试“Hello World” | Makefile文件 | 实现加法相加

任务&#xff1a;编写在标准输出终端输出“Hello World&#xff01;”的C语言代码以及输入指定数字相加结果、Makefile&#xff0c;并分别编译出在PC与ARM上运行的可执行程序文件。 设备以及工具 硬件&#xff1a;Linux开发板、PC机、串口连接线 图1 Linux开发板以及串口接线 …

原生video设置控制面板controls显示哪些控件

之前我们学习了如何使用原生video播放视频 今天来一个进阶版的——设置控制面板controls显示哪些控件 先看一下当我们使用原生video时&#xff0c;controls属性为true时&#xff0c;相关代码如下&#xff1a; 正常的控制面板默认显示的控件有&#xff1a;播放、时间线、音量调…

四、Zookeeper节点类型

目录 1、临时节点 2、永久节点 Znode有两种,分别为临时节点和永久节点。 节点的类型在创建时即被确定,并且不能改变。 1、临时节点 临时节点的生命周期依赖于创建它们的会话。一旦会话结束,临时节点将被自动删除,

机器学习笔记 - 基于百度飞桨PaddleSeg的人体分割模型以及TensorRT部署说明

一、简述 虽然Segment Anything用于图像分割的通用大模型看起来很酷(飞桨也提供分割一切的模型),但是个人感觉落地应用的时候心里还是更倾向于飞桨这种场景式的,因为需要用到一些人体分割的需求,所以这里主要是对飞桨高性能图像分割开发套件进行了解和使用,但是暂时不训练…

LiteOS内存管理:TLSF算法

问题背景 TLSF算法主要是面向实时操作系统提出的&#xff0c;对于RTOS而言&#xff0c;执行时间的确定性是最根本的&#xff0c;然而传统的动态内存分配器&#xff08;DMA&#xff0c;Dynamic Memory Allocator&#xff09;存在两个主要问题&#xff1a; 最坏情况执行时间不确…

Vue3+nuxt+ts项目引入高德地图API实现步骤

看了好多相关的文章都没有完全贴合选用Vue3nuxtts框架的&#xff0c;也不太靠谱&#xff0c;只好自己踩坑实现了 首先去高德开放平台用自己的账号申请一个key&#xff0c;位置如下&#xff0c;申请好后保存好生成的key 我们使用vuemap/vue-amap&#xff0c;一个高德地图2.0版本…

微信小程序自定义tabBar简易实现

文章目录 1.app.json设置custom为true开启自定义2.根目录创建自定义的tab文件3.app.js全局封装一个设置tabbar选中的方法4.在onshow中使用选中方法最终效果预览 1.app.json设置custom为true开启自定义 2.根目录创建自定义的tab文件 index.wxml <view class"tab-bar&quo…

Vue + Element ui 实现动态表单,包括新增行/删除行/动态表单验证/提交功能

原创/朱季谦 最近通过Vue Element ui实现了动态表单功能&#xff0c;该功能还包括了动态表单新增行、删除行、动态表单验证、动态表单提交功能&#xff0c;趁热打铁&#xff0c;将开发心得记录下来&#xff0c;方便以后再遇到类似功能时&#xff0c;直接拿来应用。 简化的页…

用通俗的方法讲解:大模型微调训练详细说明(附理论+实践代码)

本文内容如下 介绍了大模型训练的微调方法&#xff0c;包括prompt tuning、prefix tuning、LoRA、p-tuning和AdaLoRA等。 介绍了使用deepspeed和LoRA进行大模型训练的相关代码。 给出了petals的介绍&#xff0c;它可以将模型划分为多个块&#xff0c;每个用户的机器负责其中一…

七、FreeRTOS之FreeRTOS中断管理

这部分非常重要&#xff0c;小伙伴们必须要掌握的哈~本节需要学的内容如下&#xff1a; 1&#xff0c;什么是中断&#xff1f;&#xff08;了解&#xff09; 2&#xff0c;中断优先级分组设置&#xff08;熟悉&#xff09; 3&#xff0c;中断相关寄存器&#xff08;熟悉&…

VLAN间路由详细讲解

本次实验拓扑的主要概述以及设计到的相关技术 VLAN技术&#xff1a; VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。 每个VLAN是一个广播域&#xff0c;VLAN内的主机间可以直…

Leetcode—704.二分查找【简单】

2023每日刷题&#xff08;四十七&#xff09; Leetcode—704.二分查找 实现代码 int lower_bound(int* arr, int numsSize, int tar) {int left 0, right numsSize;int mid left (right - left) / 2;while(left < right) {mid left (right - left) / 2;if(arr[mid] …

论文精读 Co-DETR(Co-DINO、Co-Deformable-DETR)

DETRs with Collaborative Hybrid Assignments Training 基于协作混合分配训练的DETRs 论文链接&#xff1a;2211.12860.pdf (arxiv.org) 源码链接&#xff1a;https://github.com/Sense-X/Co-DETR 总结&#xff1a; Co-DETR基于DAB-DETR、Deformable-DETR和DINO网络进行了实…

ElasticSearch知识体系详解

1.介绍 ElasticSearch是基于Lucene的开源搜索及分析引擎&#xff0c;使用Java语言开发的搜索引擎库类&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业级搜索引擎。 它可以被下面这样准确的形容&#xff1a; 一个分布式的实时文档存储&#xf…

fastmock如何判断头信息headers中的属性值

fastmock可以快速提供后端接口的ajax服务。 那么&#xff0c;如何判断头信息headers中的属性值呢&#xff1f; 可以通过function中的参数_req可以获得headers中的属性值&#xff0c;比如 User-Agent&#xff0c;由于User-Agent属性带有特殊符号&#xff0c;因此使用[]方式而不…

什么是CDN?CDN的网络监控是在怎么样的?怎么用?

随着互联网的飞速发展&#xff0c;网站已经成为我们日常生活和工作中的重要组成部分。为了确保网站的稳定性和安全性&#xff0c;CDN&#xff08;内容分发网络&#xff09;和网站监控功能成为了不可或缺的技术手段。在这篇文章中&#xff0c;我们将深入了解CDN的重要性和如何通…

【开源】基于JAVA的厦门旅游电子商务预订系统

项目编号&#xff1a; S 030 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S030&#xff0c;文末获取源码。} 项目编号&#xff1a;S030&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒…

Kafka中的auto-offset-reset配置

Kafka这个服务在启动时会依赖于Zookeeper&#xff0c;Kafka相关的部分数据也会存储在Zookeeper中。如果kafka或者Zookeeper中存在脏数据的话&#xff08;即错误数据&#xff09;&#xff0c;这个时候虽然生产者可以正常生产消息&#xff0c;但是消费者会出现无法正常消费消息的…