rhcsa学习2(vim、创建管理用户、组等)
创建、查看和编辑文本文件
重定向符号 >
进程使用称为文件描述符的编号通道来获取输入并发送输出。所有进程在开始时至少要有三个文件描述符。如果程序打开连接至其他文件的单独连接,则可能要使用更大编号的文件描述符
上述通过通道1去写入,且写入的文件不存在会自动创建。且数字1可以省略
如下通道1和通道2的区别
通道2是输入错误信息,当写入的内容并不是标准错误时则不会写入文件,而是直接打印出来
注意当没有用追加时,会清空原有内容:
有选择的存储(下图表示ls为正确的命令就将执行结果存储在right中,错误则将错误信息存储在error中,且两个文件如果并不存在会自动被创建
当没有追加内容时,原有的信息会被覆盖,即使命令正确存储到right中,在error中原有的内容会被清空(所以记得可以追加>>
&> 不管命令对错都可存储到文件中
将返回值进行筛选:
在/etc目录下查找名字为passwd的内容,可以看到很多都是拒绝访问的错误信息,
如下筛选,将查找的内容存储到rr.txt中,错误内容存储到ee中
将内容放到/dev/null 中,其表示一个回收站,放进去的内容则会被清空:
/dev/null 在长列表的开头字母c可以看出null是一个字符设备
可以知道:
Ls >> rr.txt 2>&1 和 Ls &>> rr.txt 效果相同,都是所有内容都存入rr.txt中
(补充:关于用su切换用户
su 用户名则会切换到指定用户的同一个视图下,如root用户是在log目录下,则切换到student用户时也是在这个目录下,su - 用户名,则时切换过去的用户在该用户的家目录视图下。切换到管理员root用户:
构建管道:
管道是一个或多个命令的序列,用竖线字符| 分隔。管道将第一个命令的标准输出连接到下一个命令的标准输入。
如上两个命令效果相同(grep过滤关键字),都是在/etc/passwd中过滤带有root的信息
又如将ls -l 中的执行结果内容交给grep去过滤带有txt的信息
就是传递执行结果,如再又用管道符去查看行数
tee命令
将筛选或者说处理过的内容不直接将
(图中权限拒绝访问的内容没有存储,只是被过滤掉打印出来了)图中用tee命令,将 /etc下的所有内容都存进了hh.txt文件中,然后再对具有关键字passwd的内容存进haha.txt文件中:
vim编辑器
vim运行模式:包括命令模式、扩展模式(末行模式)、编辑模式和可视化模式
第一次打开Vim时,是命令模式启动,用于导航、剪切和粘贴,及其其他文本操作,通过单字符击键操作进入各个其他模式。
按i键进入插入模式
按v键进入可视化模式
。。。。。。。。
如图所示:
(上述操作中3dd是向下删除包括所在行在内的三行。3yy也是向下复制三行)
打开文件后分屏操作:
先打开进入,再输入:sp
退出分屏
同时打开两个文件(用分屏操作)
上下分屏打开两个文件:
左右分屏打开:
关闭方法:
:qa表示同时关闭打开的多个文件
:q则可关闭当前光标所在的文件(一个个关闭)
可视化操作:
ctrl v 可选择文本块
像左或向右则是代表选中行后再选中列的范围(一块一块的选中,可以不是每行一整行)
按v 或 shift v
v是可以选择多个字符进行文本操作,shift v选择多行,若是选中整行则二者没有不同
选中行后往下移会选中整行
批量注释:
光标停在注释的该行首字母 --> ctrl v --> I (大写的i)----> # ----->esc 键
如上图,我要将这6行注释,我先将光标放到第一行注释的第一个字母上,然后ctrl v进入文本块选择的可视化模式,然后向下选中这要注释的6行
选中后添加按大写的I进入插入模式,输入#
最后按退出键esc就可以看到被批量注释
若是要批量删除则营进行如下操作
ctrl v 选中注销注释的行头的# ---》 按x键
(如果不是删除和增加注释也是一样的操作)
(补充:
a、输入
#
后,Vim会自动将光标所在位置的单词作为搜索模式,并向前搜索匹配的单词。所有匹配的单词都会被强调显示。
:nohl取消高亮
b、按0可以回到该行首(shfit 6 也是一样的效果
c、shift 4 则移动到行尾
d、w往后跳,b往前跳一个单词(3w往后跳3个,3b也是一样
更改SHELL环境
Bash shell允许您设置shell变量,可以使用这些变量来帮助运行命令或修改shell的行为。还可以将shell变量导出为环境变量,它们会在程序启动时自动复制到从该shell运行的程序中。
为变量分配值:
变量名称可以包含大写或小写字符、数字和下划线字符(_)
使用set命令列出当前所有的shell变量
使用Shell变量配置Bash
使用环境变量配置程序
(不是环境变量的Shell变量只能由Shell使用。环境变量可以由shell以及从该shell运行的程序使用)
shell中定义的任何变量都可以变为环境变量,(方法是将它变量标记为使用export命令导出)。应用程序和绘画使用这些变量来确定齐行为
上图两种方式都可
PATH变量:包含一个含有程序的目录的冒号分隔列表
当运行ls(在/usr/bin/ls)等命令时,shell会按照顺序逐一在这些目录中查找可执行文件ls,并且运行它找到的第一个匹配文件。
如果某个目录中有像常规命令一样运行的可执行程序或脚本,可以添加到PATH中
例如:将/home/user/sbin目录添加到PATH的末尾
可以用env命令列出特定shell的所有环境变量
设置默认文本编辑器用EDITOR环境变量指定要用作命令行程序的默认文本编辑器的程序,
可根据需要覆盖原先的默认值
取消设置(unset)和取消导出设置(export -n)
取消设置:
用来从当前会话中移除变量,不再保留该变量的定义。它适用于所有类型的变量,包括环境变量和普通变量。使用
unset
命令后,该变量将不再可见,无法直接访问和使用。取消导入设置:
用来取消将一个变量导出为环境变量,使其不再对子进程可见。它只适用于环境变量,不会影响普通变量。使用
export -n
命令后,在当前会话和其子进程中取消导出的环境变量将不再可见,但在当前会话中仍然保留其定义。补充:如果你希望变量的取消设置或删除是永久性的,可以考虑编辑相关的配置文件,如
.bashrc
、.bash_profile
或其他 shell 配置文件,在其中对变量进行设置。这样,在每次启动终端会话时,变量会被自动重新设置。请注意,对环境变量的修改并不会影响到其他用户的环境。环境变量通常是在用户级别进行设置,每个用户可以独立地管理自己的环境变量。
管理本地用户和组
用户账户有三种类型:超级用户、系统用户和普通用户
超级用户(名称为root,账户UID为0):
- 根账户,也称为超级用户或管理员账户。
- 具有系统上所有权限,可以执行任何操作。
- 用于系统管理和配置,对系统文件和设置进行更改。
系统用户:
- 用于运行系统服务和进程的特殊账户。
- 系统进程、服务和守护进程会使用这些账户运行。
- 通常不允许交互式登录。
普通用户:
- 用于一般用户操作,如打开应用程序、存储文件等。
- 没有对系统底层进行修改的权限(对系统具有有限的访问权限)。
使用id命令显示有关当前已登录用户的信息
查看有关用户的基本信息,id 用户名
用ps查看进程信息(默认显示当前shell中的进程)
ps -a(添加-a选项可查看与某一终端相关的所有进程)
ps -u(可查看与进程相关联的用户)
ps -au
操作系统内部利用UID来跟踪用户,用户名到UID的映射在账户信息数据库中定义。默认情况下,系统使用/etc/passwd文件存储有关本地用户的信息。
该文件中每一行都包含有关某个用户的信息(其分为七个以冒号分隔的字段)
vim /etc/passwd
每个字段代表内容:
5、用户的描述
vim /etc/shadow
/etc/passwd和/etc/shadow
/etc/passwd
文件中存储了用户账户的基本信息,而/etc/shadow
文件则存储了用户账户的加密口令信息。这种设计有助于保护用户账户的安全性,防止密码被直接读取。只有系统管理员才能访问和修改/etc/shadow
文件,而普通用户只能读取/etc/passwd
文件中的信息。(补充:
UID是用户ID的缩写。UID的范围通常是从0开始,预留了几个特殊的UID:
UID 0:特殊的UID 0代表超级用户(root)。超级用户具有系统上最高的权限,可以执行任何操作,对系统进行任意更改。
UID 1-999:保留给特殊系统账户和系统进程使用。
UID 1000及以上:为普通用户所使用。
UID号不能直接用来评判是系统用户还是普通用户,因为在创建用户时可以设置UID号,且1-999不是所有的UID都已经指定给了不同用户(没有用光)。
UID的分配是由系统管理员进行管理的。在创建新用户时,系统会为其分配一个唯一的UID,并将其记录在
/etc/passwd
文件中。通过UID可以确定用户的身份和权限,例如文件所有权和访问权限等。
创建用户(在root用户下)
可以看到新创建的用户信息被写入/etc/passwd的最后一行
::第五个字段(就是那个真实姓名)是注释行(可写可不写),因为我们没有添加,所以没有内容
可以看到第六个字段/home/forget 对于新创建的用户,其主目录通常位于
/home
目录下,以用户名命名。最后一个字段为bash 说明该用户可以登录系统
一开始我们没有设置密码,所以在/etc/shadow中该第二个字段为!
设置密码
因为是管理员设置,所以尽管没有达到标准(提示说短于8个字符)。也可以设置成功
可以返现密码以加密格式保存在了/etc/shadow文件中
(补充:将密码通过passwd的标准输入通道传递给要设置密码的用户
或者时自己输入的复杂的值,按前面的密码设置,可能自己看不到,如下很方便:
![]()
创建用户不用密码也可以登录
如图需要密码才能登录,
进行如下操作
![]()
这时直接点击即可登录,不需要输入密码
创建用户,并添加注释行(即第5个字段)
-c选项(comment,注释的意思)可以看到第5个字段即是我们添加的注释信息
在已经创建好的用户下添加注释行
可以发现一开始Tina第5个字段没有内容,后来就有了
如果再执行同样的操作,添加了不同的注释信息,其会把之前的注释内容覆盖,若要追加则进入/etc/passwd去修改,而且/etc/shadow也不会同步
该目录下的注释行没有变化
创建一个用户,指定第7个字段(/bin/bash 或是 /sbin/nologin,默认情况是后者)
如下发现haha用户确实无法登录
删除用户(在root用户下)
userdel 用户名 虽然删除了该用户,却没有删除用户下创建的家目录
当又创建同名用户,该该存在未删除的目录将会被新创建的目录覆盖(这是在新创建的用户的家目录同名的情况下)如:
且删除了用户未删除其家目录,系统将具有未分配UID所拥有的文件。如下:
图上可发现,一个可用UID(1002原先是Tom的,后来删除了Tom用户)被分配给新用户Nana,则之前未删除的Tom的家目录的所有权与UID关联,也就转移给了Nana。(也可以发现,图上仍可以找到以Nana命名的家目录,说明不影响其创建)
如果要完成删除要加上-r选项,递归删除其及目录。
在将用户清楚的同时,将家目录删掉。如图,在创建同名用户后没有什么提示(没有userdel删除后在创建的提示
组
共享文件和其他系统资源访问权限的用户的集合,在内部通过分配的唯一标识号(组ID或GID)来区分不同的组。组名称道GID的映射在组账户信息数据库中定义。默认情况下,系统使用/etc/group文件存储有关本地组的信息。
该文件每一行都包含了有关某个组的信息。每个组条目被分为四个以冒号分隔的字段:
vim /etc/group
每个字段表示的内容:
主要组和补充组:
每个用户只有一个主要组。
如图gid=1000(student)说明student就是该用户的主要组,该组名称为student,gid为1000
group=后面是用户所属的所有组,可以知道student为主要组,则wheel为附加组(附加组不唯一,可以有多个)
通常创建一个新的用户时会自动创建一个与该用户同名的新组,该组将用作新用户的主要组,而该用户时这一个用户专用组的唯一成员。
(例如创建一个用户forget,如果不加设定,系统会自动创建一个同名的主要组,且该用户自动在该组成员)
创建用户组
可以发现创建的用户组的gid为1005
此时我再创建一个用户,可以发现其uid为1005,但是gid为1006,一般情况下,可能uid和gid比较一致,如果单独创建了用户组,该号数被占用,二者再数值上就不会比较同步。
在创建用户时设置主要组(用-g 选项)
useradd -g 组名 用户名
(注意:
该用户的主要组被设置以后,不会自动创建同名主要组
且设置成功的前提是该组已经存在:
如果是对已经存在的用户的主要组去修改(用usermod
删除用户组
如果是删除单独创建的用户组则可以直接用groupdel去删除
如果是删除一个用户的主要组则不可以:
如果你想删除一个用户的主要用户组,你可以先将该用户从其他用户组中删除,然后再删除主要用户组。
查看该用户所属的用户组:
只有Tina(其实如果是其他用户所属多组就可以都列出来,虽然这里可以不用,且用id 也可以知道)
从其他用户组中删除用户:
如果是从主要组中删除该用户,暂时还不知道,到时再补充。
将用户添加到一个组中,且该组为附加组 user -G 组名 用户名
第一种方法:在创建用户时加入该组
前提是该组已经存在:(如下创建用户时加入一个未创建的组)
第二种方法:用usermod(修改已经存在的用户)
但发现之前添加的class组被覆盖了, 如果想之前添加的附加组不被覆盖用-a选项:
usermod -aG 组名 用户名(注意a要写在G前面)
补充:
当遇到删除用户失败的情况:
这是因为在尝试删除用户时,发现该用户正在由某个进程使用。系统会拒绝删除一个正在被使用的用户账户,以防止可能的数据丢失或其他问题。要成功删除用户,你需要先确保没有任何进程在使用该用户。
在root用户下可能更不一样吧,直接告诉你进程数了,然后直接kill运行了该用户的进程,就可以删除该用户了。
如果没有直接给出进程数还需要用别的命令(fuser -u 用户名),且如果有多个进程,可采取别的高效方式去删除(例如使用循环结构),避免一个个手动删除。
kill -9 PID 会强制终止进程而不给予进程进行清理操作的机会。这可能导致数据丢失、资源泄漏或其他不良影响。
kill PID 发送一个终止信号给指定的进程,请求它正常地退出。进程有机会在终止之前完成清理工作,关闭文件、释放资源等。这是一个较为温和的终止方式,通常可以让进程正常退出。
同时修改用户信息
一开始user01的信息:
后来:(把主要组改成class,附加组添加了haha,注释行改了,交互式登录权限改了)
根据命令的选项进行一点解释说明
-u修改uid号,当指定的uid数很大时,则创建的下一个用户为其uid数+1
当给一个用户修改名字时用-l选项,且要注意要同步家目录名字
原来:
之后:
用usermod --help可以知道:
可以发现,原来的家目录/home/My 没有了
但是可以发发现主要组的名字还是没有变,
可以使用groupmod -n 新名 旧名
groupmod -g 可指定新的gid
也可以在创建时指定
上述内容的操作都是在root用户下,具有较高的管理权限。
获取root用户访问权限:用sudo命令
切换用户:su命令,如果从root用户运行su,不用输入密码。普通用户则需要
su 用户名和su - 用户名二者区别:命令su将启动非登录shell,仅以该用户身份启动shell,但使用的是原始用户的环境设置。
后者启动登录shell,将环境设置为如同以该用户身份重新登录一样。
su和su - 在省略用户名情况下,默认切换到root。
在普通用户中无法查看一些文件,如果要登录root用户又要知道其密码
给用户提权
一开始用head读取不了第一行,用sudo后可以,但是要输入当前用户自己的密码(输入后就可看到内容)
之后再去查看:
就不需要输入了,只要输入一次密码即可
(注意,普通用户可以查看/etc/passwd,不可以查看/etc/shadow)
如上在student用户没有查看权限的前提下在该命令开头加上sudo就可以查看,那是因为在装机之前就已经提升了管理员的权限,所以只要在执行命令时加上sudo即可
如果不是事先已经提权的用户,即使命令执行时加上sudo,也没有访问权限:
(sudoers文件时用来管理特权用户账户的,所以可以被提权的用户的信息及权限内容都在这个文件里。所以我们可以通过修改该文件内容来修改用户权限
在root用户下执行 vim /etc/sudoers 进入该文件
可以发现root用户权限无限大的原因
我们要想给用户提权或修改权限也可按照该语法去修改内容,注意该文件是只读,所以要想写入并保存要加上!,强制执行
保存退出之后再登录hello用户可以发现:
hello用户已提权, 可以查看内容
当给用户提权成root权限时,可以发现使用sudo去执行命令时,就相当于root在执行:
如上图,提权后像管理员一样不用输入密码,可以直接切换。
如上图,提权执行id命令,展示初的是管理员的信息。
如上图,sudo -i 也可以切换到管理员用户,和su - 一样
而sudo -s 和 su 相同
出于安全考虑我们可以只是给用户提升相关权限,而不是全部权限,这时就不是上面编辑的ALL,而是具体的某个权限,到那时并不是命令名字,而是该命令的绝对路径
可用which 命令获取命令所在绝对路径
如图修改,如果有多条命令可以用逗号隔开。(注意是usr不是user,很容易写错
保存修改文件后退出,登录hello用户在执行读取操作可以发现
执行useradd命令(提权后记得使用sudo执行该命令才有效,容易忘记
我们发现在这个文件中并没有student用户,但是我们可以发现:
%表示其不是一个用户而是一个用户组,
我们知道student在wheel这个附加组里,所以该组有的权限,组内的用户成员都享有。
但是我们可以发现每次执行命令都要输入密码,按文件内容提示,我们可以进行如下操作:
我们可以按照图上的注释知道,当我们对该组内容进行修改则可以不用密码:
可以发现不用再输入密码:
用visudo 去查看和编辑/etc/sudoers
在文件中可以知道用visudo /etc/sudoers 编辑器内容是可读可写不用强制退出的,
只是失去了颜色罢了🙃
(补充:logout和exit的区别
logout
命令用于注销用户(和ctrl d效果等同),而exit
命令用于退出当前的Shell会话。
管理用户密码
加密的密码被移动到只有root用户才能读取的独立/etc/shadow文件中(之前在passwd文件),与/etc/passwd相似,每个用户在/etc/shadow文件中都有对应的一行内容,其由九个冒号分隔字段组成。
每个字段代表内容:
vim /etc/shadow 可以看到
1、root用户名
2、加密的密码
3、1970-1-1距今天数,18389天
4、 该值为0代表可以随时更改密码,如果为n等其它数值代表改后的n天内不的更改密码。代表n天后可以更改。(最小数值为0)
5、上面该值为99999天的密码有效期,这个时间内密码有效,可以不用更改(最大数值为99999)
6、上图该值为7,代表距离过期的7天前会提示警告过期信息
7、该值为空,代表过期了该账户不会被锁定,可继续使用,如果是n天,则表示过期后的n天内该账户还可以登录使用,过了n天则不可以
8、该值为空,表示不会在特定日期失效。直接设置密码多少天后过期(从1970-1-1开始算的天数),该字段优先级高于前面设置的有效期等,优先级高,到了天数直接过期。
加密密码的格式:
加密密码字段中存储了三段信息:所用的哈希算法、salt及加密哈希值。每段信息由¥符号分隔。每个字段内容如下:
密码验证
配置密码期限
想要修改密码内容,可以直接编辑/etc/shadow文件进行修改。(记得要强制保存退出)
下图分别用root用户和student用户对hello用户的密码的最小修改密码的天数进行修改。
只要记得参数选项就好(不同选项代表不同的修改字段)
根据不同选项即可对不同字段做出相应修改。
chage -d 0 用户名 表示强制用户在下一次登录时更新密码
chage -E 时间 用户名 表示用户在这个设定时间到期(时间可以自己设置,
可设置天数,如果不好计算具体哪天,可以用格式YYYY-MM-DD设定。如下
chage -l 用户 显示用户的密码期限详情
可用date -d 命令去计算距今天数对应的日期。-u选项可改变时区,变成UTC时区
注意要加days。
限制访问
如上图,通过usermod修改账户到账日期并通过-L选项将user11用户锁定
图中所示,即使通过密码去的公路该锁定用户也无法登录。
其实也可修改锁定时间
r颗两个选项同时使用,记得-e在后面(忽略图中打错的命令🙃
(补充:在一些操作系统中,默认情况下,普通用户可以使用sudo命令修改密码,但在其他一些系统中,可能需要登录root用户才能执行这个操作。
相关文章:

rhcsa学习2(vim、创建管理用户、组等)
创建、查看和编辑文本文件 重定向符号 > 进程使用称为文件描述符的编号通道来获取输入并发送输出。所有进程在开始时至少要有三个文件描述符。如果程序打开连接至其他文件的单独连接,则可能要使用更大编号的文件描述符 上述通过通道1去写入,且写入的文…...

【使用教程】Github(自用)
1.下载Git⼯具 使在windows 命令⾏下边可以输⼊这两个命令: gitssh-keygen 2.配置git信息: 在命令⾏⾥输⼊: $ git config --global user.name “你在Github上注册的账号” $ git config --global user.email 你在Github上注册的邮箱 3. c…...

typeScript学习笔记(一)
学习资源来自: 类与接口 TypeScript 入门教程 (xcatliu.com) 一.TypeScript的安装和运行 1.安装TypeScript 通过npm(Node.js包管理器)安装Visual Studio的TypeScript插件:(Visual Studio 2017和Visual Studio 2015 Update 3默认包含了Ty…...

第4章:网络层
文章目录 一、概述和功能2.SDN二、转发1.IP数据报(1)IP数据报的首部字段(2)IP数据报的分片2.IPv4地址:<网络号>,<主机号>3.IP编址 (三个历史阶段)(1)分类IP地址①特殊IP地址②私有IP地址③网络地址转换NAT:导致IP地址变化MAC地址、IP地址变化问题(2)子网划分与子…...

C高级day1 shell 指令的补充学习
使用cut截取出Ubuntu用户的家目录,要求:不能使用":"作为分割 2.思维导图...

灰度变换与空间滤波
灰度变换与空间滤波 背景知识 空间域指包含图像像素的平面,灰度变换与空间滤波均在空间域进行,即直接在图像像素上操作,表示为 g ( x , y ) T [ f ( x , y ) ] g(x,y)T[f(x,y)] g(x,y)T[f(x,y)] ,其中 T T T 是在点 ( x , y…...

敏感接口权限校验
前端校验 (从前端或者从token里面拿一下),看一下用户有没有这个页面的权限(但是一般不用,因为nodejs也可以写后端,但是放到前端去校验不安全) 后端校验 需要梳理敏感数据接口,将这…...

[LeetCode周赛复盘] 第 112场双周赛20230903
[LeetCode周赛复盘] 第 112场双周赛20230903 一、本周周赛总结2839. 判断通过操作能否让字符串相等 I1. 题目描述2. 思路分析3. 代码实现 2840. 判断通过操作能否让字符串相等 II1. 题目描述2. 思路分析3. 代码实现 2841. 几乎唯一子数组的最大和1. 题目描述2. 思路分析3. 代码…...

Spark【RDD编程(二)RDD编程基础】
前言 接上午的那一篇,下午我们学习剩下的RDD编程,RDD操作中的剩下的转换操作和行动操作,最好把剩下的RDD编程都学完。 Spark【RDD编程(一)RDD编程基础】 RDD 转换操作 6、distinct 对 RDD 集合内部的元素进行去重…...

【2023最新版】MySQL安装教程
目录 一、MySQL简介 二、MySQL安装 1. 官网 2. 下载 3. 安装 4. 配置环境变量 配置前 配置中 配置后 5. 验证 一、MySQL简介 MySQL是一种开源的关系型数据库管理系统(RDBMS),它被广泛用于存储和管理结构化数据。MySQL提供了强大的功…...

关于mysql数据文件损坏导致的mysql无法启动的问题
环境 rocky linux 9 (跟centos几乎一模一样) myqsl 8.0, 存储引擎使用innodb 问题描述 1. 服务器异常关机,重启启动后发现mysql无法连接,使用命令查看mysql状态: systemctl status mysqld 发现mysql服…...

深度学习之视频分类项目小记
写在前面,最近一阵在做视频分类相关的工作,趁有时间来记录一下。本文更注重项目实战与落地,而非重点探讨多模/视频模型结构的魔改 零、背景 目标:通过多模态内容理解技术,构建视频层级分类体系原技术方案:…...

pandas(四十三)Pandas实现复杂Excel的转置合并
一、Pandas实现复杂Excel的转置合并 读取并筛选第一张表 df1 pd.read_excel("第一个表.xlsx") df1# 删除无用列 df1 df1[[股票代码, 高数, 实际2]].copy() df1df1.dtypes股票代码 int64 高数 float64 实际2 int64 dtype: object读取并处理第二张表…...

42、springboot 的 路径匹配 和 内容协商
springboot 的 路径匹配 和 内容协商 对于路径匹配,自己的总结就是: 以前路径匹配时默认不检查后缀,http://localhost:8080/aaa.json 可以直接访问到 RequstMapping(“/aaa”) 的方法。现在不行了。现在会检查后缀了。 内容协商的理解总结&…...

一文讲解Linux内核内存管理架构
内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对性能也有很高的要求。本文从内存管理硬件架构、地址…...

教你如何使用API接口获取数据
随着互联网技术的发展和应用的普及,越来越多的系统和应用提供API接口供其他系统和应用进行数据交互。通过API接口,我们可以获取到各种各样的数据,例如天气预报、股票行情、新闻摘要等等。本文将介绍如何使用API接口获取数据,并附有…...

集美大学计算机改考408!福建省全面改考,仅剩一个自命题院校
9月5日,集美大学发布通知,0835软件工程、0854电子信息2024考试科目发生变更!由822数据结构调整为408计算机学科专业基础 https://zsb.jmu.edu.cn/info/1532/4701.htm 直接由一门改为考四门,难度升级不小。 目前福建省内计算机考…...

Hololens2部署很慢可能是unity工程选择不对
这样就很快,几分钟就完成了。(虽然又遇到新问题了) 第一次使用时如下,直接运行了一个多小时还没有完...

群论学习记录
群论学习记录 1. 2023.09.07 1. 2023.09.07 群论 (Group Theory) 终极速成 / 物理系零基础火箭级 notes https://zhuanlan.zhihu.com/p/378039151 https://zhuanlan.zhihu.com/p/164653537 群的定义重排定理子群陪集定理:由重排定理可推出1.4-(2&#x…...

Fiddler安装与使用教程(2) —— 软测大玩家
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…...

ChatGPT集锦
目录 1. 一条指令让ChatGPT变的更强大2. 对ChatGPT提问时,常见的10种错误描述3. Custom instructions如何设置1. 一条指令让ChatGPT变的更强大 在使用GPT的过程中,如何让AI更清晰地了解你的需求很重要?今天分享一个指令,可以让GPT成为你的好同事,与你一起分析和解决问题,…...

CRM系统中的工作流管理及其重要性
工作流是CRM系统中较为常见的功能,它可以有效减少重复工作、提高销售效率。如果您想深入了解,本文就来详细说说,CRM工作流是什么?工作流的作用? 什么是CRM工作流? CRM工作流是指在CRM系统中,根…...

Go framework-go-zero
一、Go Go天然适配云原生,而云原生时代已经到来,各个应用组件基础设施等都应该积极的去拥抱云原生。 不要让框架束缚开发。 1、go-zero介绍 go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,…...

【Python】【Fintech】用Python和蒙特卡洛法预测投资组合未来收益
【背景】 想利用蒙特卡洛方法和yahoo,stooq等财经网站上的数据快速预测特定portfolio的收益。 【分析】 整个程序的功能包括 读取json中的portfolio组合创建蒙特卡洛模拟预测收益的算法创建从财经网站获得特定投资组合数据,并根据2的算法获得该Index或Portfolio收益预测结…...

网络层重点协议-IP协议(结构分析)
IP协议数据报格式 一.4位版本号 用来表示IP协议的版本,现有的IP协议只有两个版本IPv4和IPv6 二.4位首部长度 IP协议数据报报头的长度 三.8位服务类型 3位优先权字段(已经弃用),4位TOS字段,和1位保留 字段(必…...

windows使用vim编辑文本powershell
windows使用vim编辑文本 1、安装 chocolatey 包 以管理员身份打开 PowerShell 进行安装 Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(https://chocolatey.org/install.ps1))2、管理员身份打开 PowerShell 并使…...

学单片机有前途吗?
学单片机有前途吗? 个人认为学习任何一门技术都比不学的强,针对学单片机有前途吗?那么比较对象当然就是在整个IT行业做对比。因此我们可以从职业前景、钱景、这几方面综合考量。 学单片机有前途吗?我觉得重要的一点就是是否适合职业生涯发展,总说程序…...

【计算机网络】 子网划分
文章目录 IP地址分类子网掩码网关广播地址非默认子网掩码子网划分常见问题 IP地址分类 学会十进制和二进制的相互转换可以很快速的有规律的记住 子网掩码 又叫网络掩码,地址掩码,子网络遮罩,就是说把子网络遮起来,不让外界窥探到…...

vscode ros配置
【ROS】VSCODE ROS 配置方法(保姆级教程,总结了多篇)_ros vscode_晴明大大的博客-CSDN博客...

【权限提升-Windows提权】-UAC提权之MSF模块和UACME项目-DLL劫持-不带引号服务路径-不安全的服务权限
权限提升基础信息 1、具体有哪些权限需要我们了解掌握的? 后台权限,网站权限,数据库权限,接口权限,系统权限,域控权限等 2、以上常见权限获取方法简要归类说明? 后台权限:SQL注入,数…...