当前位置: 首页 > news >正文

linux基础操作11------(运行级别)

一.前言

这个是linux最后一章节内容,主要还是介绍一下,这个就和安全有关系了,内容还是很多的,但是呢,大家还是做个了解就好了。

二.权限掩码

运行级别 0 关机

运行级别 1 单用户 ,这个类似于windows安全模式,可以用于找回密码等操作。

运行级别 2 不带网络的多用户 ,这种是不能联网的。

运行级别 3 完整的多用户模式 multi-user.target , 我们平常使用的模式

运行级别 4 保留

运行级别 5 桌面模式 graphical.target , 桌面版系统就是这个模式,如果不想开机进入图形化界 面,就需要修改运行级别,可以试一下

运行级别 6 重启

centos6是通过数字来设置,centos7都不是用数字了,而是用下面的方式,不过数字设置依然有效:

#切换运行级别

init

# 执行init 6,就会重启,执行init 0就会关机

#查看运行级别

runlevel

systemctl get-default #

#设置运行级别,设置之后一重启就改变了

systemctl set-default graphical.target #设置默认运行级别为图形,注意没有安装图形化界面 工具的话是不能切换为桌面版的

systemctl set-default multi-user.target #设置默认运行级别为命令行 

2.1 掩码

查看掩码值

umask

[root@localhost ~]# umask
0022

这个值就决定着我们创建文件的初始权限,比如我们创建个目录和文件,如下

[root@localhost ~]# mkdir jaden

[root@localhost ~]# touch wulaoban.txt

[root@localhost ~]# ll -h

总用量 4.0K

-rw-------. 1 root root 1.3K 3月 15 20:14 anaconda-ks.cfg

drwxr-xr-x 2 root root 6 3月 27 09:29 jaden

-rw-r--r-- 1 root root 0 3月 27 09:29 wulaoban.txt

# 可以看到,目录的初始权限为755,文件的初始权限为644。这些权限都是通过umask掩码计算得来的。

# 文件权限计算:0666-0022 = 0644

# 目录权限计算:0777-0022 = 0755 

我们还可以修改掩码值来控制初始文件和文件夹的权限:

#修改文件vim /etc/profile,找到umask来修改

root 默认权限掩码 022

普通用户 默认权限掩码 002 

2.2 inode和block 

inode :存储除文件名以外的属性,比如文件路径,inode全称index node,索引节点的意思。索引主 要是用于方便我们进行文件查找的。我们也叫它为目录文件。

block: 存储文件的内容。 

[jaden@localhost ~]$ df -h #查看硬盘空间

文件系统 容量 已用 可用 已用% 挂载点

devtmpfs 980M 0 980M 0% /dev

tmpfs 991M 0 991M 0% /dev/shm

tmpfs 991M 9.6M 981M 1% /run

tmpfs 991M 0 991M 0% /sys/fs/cgroup

/dev/sda1 100G 2.0G 98G 2% /

tmpfs 199M 0 199M 0% /run/user/0

tmpfs 199M 0 199M 0% /run/user/1000

[jaden@localhost ~]$ df -ih # 查看inode空间

文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点

devtmpfs 245K 369 245K 1% /dev

tmpfs 248K 1 248K 1% /dev/shm

tmpfs 248K 707 247K 1% /run

tmpfs 248K 16 248K 1% /sys/fs/cgroup

/dev/sda1 50M 60K 50M 1% /

tmpfs 248K 1 248K 1% /run/user/0

tmpfs 248K 1 248K 1% /run/user/1000

可以看到我们的虚拟机,硬盘100G,inode空间为50M,所以其实硬盘会划分两个空间,一个是存数据 的空间,一个是存文件索引的空间。每个文件会用多个block块来存储,这个block就类似于windows上 我们说的簇,文件数据的最小存放空间单元,每个文件都会有一条目录索引记录到inode空间中,方便 以后我们找寻找个文件。

 

我们在linux上创建文件的时候,可能会看到一个报错信息: No space left on device ,意思是没有 可用空间了。说明要么是硬盘确实存满了,要么是inode空间存满了,如果是inode空间存满了,那么就 去删除那些临时文件或者一些无用的空文件、小文件等等来清理inode空间。 

三.特殊权限 

讲这个的原因是,后期安全课程中有一个叫做提权的概念,可以借助到特殊权限来进行权限提升,让普 通用户能变为root用户。

3.1 suid

例子1:

passwd 是用来修改密码的一个命令文件

[root@localhost ~]# passwd jaden

#看一下passwd文件的权限

[root@localhost ~]# ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd

# 可以看到ugo权限组合中的u权限rws,这个s其实就是x权限,但是s就是用来标记这个文件是一个具有suid权限的特殊执行文件。由于权限位只有9位,所以特殊权限的执行权限用s代替了x。

# 有执行权限的时候是小写的s,去掉用户的执行权限之后,这个地方是大写的S。如下[root@localhost ~]# chmod u-x /usr/bin/passwd

[root@localhost ~]# ll /usr/bin/passwd

-rwSr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd

# 再将执行权限加回来,看效果,又变回了小s

[root@localhost ~]# ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd

# 那么,为什么会给这个文件一个叫做suid的权限呢?这个文件是用来修改密码的执行文件,普通用户是不是 也可以修改自己的密码啊,对吧,但是修改密码修改的是/etc/shadow文件内容,看一下/etc/shadow文件 权限:

[root@localhost ~]# ll /etc/shadow

---------- 1 root root 768 3月 27 10:45 /etc/shadow

# /etc/shadow文件权限是000,普通用户根本就没有修改这个文件的权限。因为如果普通用户能修改这个文件,那么root用户的密码就能被普通用户修改了,这就很不安全,对吧。但是每次改密码都找root用户,也 是很麻烦的,所以普通用户也有自己改密码的需求,这怎么办。比如我们登录一下普通用户,修改一下密码试试 

[jaden@localhost ~]$ passwd

更改用户 jaden 的密码 。

为 jaden 更改 STRESS 密码。

(当前)UNIX 密码: # 普通用户修改密码,必须要输入原来的密码,root用户不需要

新的 密码: # 而且密码复杂度要高,比如我设置的是123@qq.com,才行

无效的密码: 密码少于 8 个字符

[jaden@localhost ~]$ passwd

更改用户 jaden 的密码 。

为 jaden 更改 STRESS 密码。

(当前)UNIX 密码: 新的 密码:

重新输入新的 密码:

passwd:所有的身份验证令牌已经成功更新。

# 普通用户修改密码其实比较麻烦,要输入原密码、还要将密码复杂度加高。

# 普通用户也要用passwd修改密码,有这种需求,所以给系统给passwd执行文件了一个特殊权限,就是s。

[root@localhost ~]# ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd

# 那么普通用户使用这个文件的时候,可以拥有这个文件属主的执行权限,也就是root的x权限。所以我们看 到普通用户可以使用passwd来修改自己的密码,这就是suid权限的意思,但是只能修改当前自己的用户密 码,而且是用的root身份来执行的,如下,用普通用户修改一下root用户的密码,看看效果

[jaden@localhost ~]$ passwd root

passwd:只有根用户才能指定用户名。 # 只有root用户才能指定用户名来修改某个用户的密码,普通用户 不能指定用户名,只能修改自己的。

# 如果将passwd文件的s权限去掉了,那么普通用户就没有修改密码的能力了,如下[root@localhost ~]# chmod u-s /usr/bin/passwd

[root@localhost ~]# ll /usr/bin/passwd

-rwxr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd

# 切换到普通给用户修改密码看效果:

[jaden@localhost ~]$ passwd

更改用户 jaden 的密码 。

为 jaden 更改 STRESS 密码。

(当前)UNIX 密码:

新的 密码: # abc.123.xx

重新输入新的 密码:

passwd: 鉴定令牌操作错误

# 发现密码修改不了了。因为passwd没有了suid权限。、

# 我们把suid权限再给加回去就可以了。

[root@localhost ~]# chmod u+s /usr/bin/passwd

[root@localhost ~]# ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd

例子2:

netstat -ltp

# root用户身份运行,结果如下

[root@localhost ~]# netstat -ltp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

PID/Program name

tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN

1185/sshd

tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN

1330/master

tcp6 0 0 [::]:ssh [::]:* LISTEN

1185/sshd

tcp6 0 0 localhost:smtp [::]:* LISTEN 1330/master

#普通用户运行,结果如下

[jaden@localhost ~]$ netstat -ltp #p参数普通用户不能使用

(No info could be read for "-p": geteuid()=1000 but you should be root.) # 看到了 一个报错提示,并且PID数据没显示

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

PID/Program name

tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN

-

tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN

-

tcp6 0 0 [::]:ssh [::]:* LISTEN

-

tcp6 0 0 localhost:smtp [::]:* LISTEN

-

# 给netstat执行文件加上suid权限

[root@localhost ~]# chmod u+s /usr/bin/netstat

[root@localhost ~]# ll /usr/bin/netstat

-rwsr-xr-x. 1 root root 155008 8月 9 2019 /usr/bin/netstat

#普通用户再运行,就不报错了,而且看到了PID数据

[jaden@localhost ~]$ netstat -ltp
Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

PID/Program name

tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN

1185/sshd

tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN

1330/master

tcp6 0 0 [::]:ssh [::]:* LISTEN

1185/sshd

tcp6 0 0 localhost:smtp [::]:* LISTEN

1330/master

#加上suid权限,就表示普通用户使用这个执行文件的时候,会用root的身份来运行。#这是suid的作用,但是好多黑客利用它来进行恶意的权限提升。

sgid 其他用户,拥有该文件属组的权限 locate 针对命令文件,一般是读取文件,不能用来搞事情,所 以简单了解一下即可。

# 这个sgid,我找了很久,也就找到一个例子,就是这个locate指令。

# 先安装一下locate指令,如果不知道安装哪个软件包,就查询一下yum provides locate

# yum install mlocate.x86_64 -y # 需要用root用户来安装
 

[root@localhost ~]# locate

locate: 没有指定任何搜索模式[

root@localhost ~]# touch test.txt

[root@localhost ~]# locate test.txt

locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录

[root@localhost ~]# ls

anaconda-ks.cfg jaden jaden2 test.txt wu2.txt wulaoban.txt

[root@localhost ~]# locat wulaoban.txt

-bash: locat: 未找到命令

[root@localhost ~]# locate wulaoban.txt

locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录

[root@localhost ~]# updatedb # 更新一下文件路径记录的缓存,就可以通过locate查看到文件的路径了。

[root@localhost ~]# locate wulaoban.txt

/root/wulaoban.txt

[root@localhost ~]# ll /var/lib/mlocate/mlocate.db

-rw-r----- 1 root slocate 1389239 3月 27 13:43 /var/lib/mlocate/mlocate.db

[root@localhost ~]# which locate

/usr/bin/locate

[root@localhost ~]# ll /usr/bin/locate

-rwx--s--x 1 root slocate 40520 4月 11 2018 /usr/bin/locate

[root@localhost ~]# chmod g-x /usr/bin/locate

[root@localhost ~]# ll /usr/bin/locate

-rwx--S--x 1 root slocate 40520 4月 11 2018 /usr/bin/locate

[root@localhost ~]# chmod g+x /usr/bin/locate

[root@localhost ~]# ll /usr/bin/locate

-rwx--s--x 1 root slocate 40520 4月 11 2018 /usr/bin/locate 

#切换到普通用户

[jaden@localhost ~]$ ls

jaden jaden2 jaden2.txt jaden.txt

[jaden@localhost ~]$ locate jaden.txt # 普通用户也是在slocate组的,所以可以通过locate

查看文件路径

/home/jaden/jaden.txt

[jaden@localhost ~]$ updatedb

updatedb: 无法为 `/var/lib/mlocate/mlocate.db' 打开临时文件

[jaden@localhost ~]$ ll /usr/bin/locate

-rwx--s--x 1 root slocate 40520 4月 11 2018 /usr/bin/locate

# 这个简单了解一下即可。

sticky 叫做粘滞位,这个是针对目录的权限,很多用户共同使用的目录,实现用户之间不能互相删除改 变对方的文件的权限

# 例子:

[jaden@localhost ~]$ ll /

总用量 20

lrwxrwxrwx. 1 root root 7 3月 15 20:10 bin -> usr/bin

dr-xr-xr-x. 5 root root 4096 3月 15 20:14 boot

...

drwxrwxrwt. 13 root root 4096 3月 27 13:58 tmp # 可以看到一个权限位是t,所有用户都有 这个目录的操作权限。

# 为什么需要这么个权限呢?我们自行搞一个目录来看效果:

[root@localhost ~]# cd /

[root@localhost /]# mkdir data

[root@localhost /]# chmod 777 data

[root@localhost /]# ll

总用量 20

lrwxrwxrwx. 1 root root 7 3月 15 20:10 bin -> usr/bin

dr-xr-xr-x. 5 root root 4096 3月 15 20:14 boot

drwxrwxrwx 2 root root 6 3月 27 14:01 data

drwxr-xr-x 19 root root 3160 3月 27 09:22 dev

# 切换到普通用户,去data目录中写入文件

[jaden@localhost ~]$ cd /data/

[jaden@localhost data]$ touch jaden.txt

[jaden@localhost data]$ ls jaden.txt

# 再切换到root下,写文件

[root@localhost /]# cd data/

[root@localhost data]# touch root.txt

[root@localhost data]# ll

总用量 0

-rw-rw-r-- 1 jaden jaden 0 3月 27 14:02 jaden.txt

-rw-r--r-- 1 root root 0 3月 27 14:03 root.txt 

# 现在这个data目录的权限是777,所以任意用户都可以往里面写文件。

# 再切换回普通用户,来删除一下root用户创建的root.txt

[jaden@localhost data]$ ll

总用量 0

-rw-rw-r-- 1 jaden jaden 0 3月 27 14:02 jaden.txt

-rw-r--r-- 1 root root 0 3月 27 14:03 root.txt

[jaden@localhost data]$ rm -rf root.txt

[jaden@localhost data]$ ll

总用量 0

-rw-rw-r-- 1 jaden jaden 0 3月 27 14:02 jaden.txt

# 删除成功了。这就容易混乱了,不同用户之间的文件都可以互相修改删除等。

# 创建data目录的目的就是让大家共享这个目录,但是不能让用户做一些恶意的操作,比如恶意删除其他用户 创建的文件,那么就可以用到sticky 粘滞位来标记这个目录,如下[root@localhost data]# chmod o+t /data/

[root@localhost data]# cd ..

[root@localhost /]# ll

总用量 20

lrwxrwxrwx. 1 root root 7 3月 15 20:10 bin -> usr/bin

dr-xr-xr-x. 5 root root 4096 3月 15 20:14 boot

drwxrwxrwt 2 root root 23 3月 27 14:04 data

drwxr-xr-x 19 root root 3160 3月 27 09:22 dev

# 此时再用root在data目录中去创建个root.txt文件

[root@localhost /]# cd data/

[root@localhost data]# touch root.txt

[root@localhost data]# ll

总用量 0

-rw-rw-r-- 1 jaden jaden 0 3月 27 14:02 jaden.txt

-rw-r--r-- 1 root root 0 3月 27 14:08 root.txt

# 再切换到普通用户,删除root.txt试试

[jaden@localhost data]$ ll

总用量 0

-rw-rw-r-- 1 jaden jaden 0 3月 27 14:02 jaden.txt

-rw-r--r-- 1 root root 0 3月 27 14:08 root.txt

[jaden@localhost data]$ rm -rf root.txt

rm: 无法删除"root.txt": 不允许的操作

# 粘滞位保护了共享目录中,不同用户之间不能互相删除对方的文件。

# /tmp/目录就是这么一个目录。

查看 /tmp 目录的权限 

[root@localhost data]# stat /tmp

        文件:"/tmp"

        大小:4096 块:8 IO 块:4096 目录

设备:801h/2049d Inode:75 硬链接:13

权限:(1777/drwxrwxrwt) ... # 1777,这个1就是粘滞位权限的值,suid这个值是4,sgid这个值是2。

四.su和sudo

4.1 su 

su全称:switch user

# root用户可以很方便的切换到任意用户

[root@localhost ~]# su - jaden

上一次登录:一 3月 27 15:03:29 CST 2023从 192.168.2.110pts/1 上

[jaden@localhost ~]$ ls

jaden jaden2 jaden2.txt jaden.txt 

[jaden@localhost ~]$ exit # 退出,又回到root用户了

登出

[root@localhost ~]#

# 普通用户切换到root用户,必须输入root密码

[jaden@localhost ~]$ su - root

密码: # 需要输入root用户的密码

上一次登录:一 3月 27 10:48:24 CST 2023从 192.168.2.110pts/0 上

[root@localhost ~]# exit

登出

[jaden@localhost ~]$

# 不带-也是可以的,带-的话,就是切换完用户之后,直接到用户家目录下,不带-就不是家目录。

[jaden@localhost ~]$ su root

密码:

[root@localhost jaden]# exit

4.2 sudo 

sudo全称:superuser do,它的作用是用来授权的。就是给普通用户高级权限用的。原因就是很多的操 作,如果都需要root用户去做,太麻烦了,所以可以给普通用户做一些授权,普通用户操作就方便了。 授权就用到了sudo,sudo并不是一下子给用户很多权限,而是一个命令一个命令的授权。

sudo需要修改配置才能开启。 

# root用户才能修改这个配置。

1.配置/etc/sudoers

# 直接visudo就能编辑这个文件

[root@localhost ~]# visudo

#用户名 所有终端 = 运行的用户身份 命令ALL,ALL是所有指令,不能给所有的,不然权限太高了

#在100行下面添加如下内容

jaden ALL=(ALL) /bin/systemctl,/usr/bin/vim,/usr/sbin/reboot # 单独给指令 权限,而且要写指令的绝对路径,逗号分割

# 修改完配置文件,保存退出之后,立马就生效了,不需要重启或者重新登录。

#切换到普通用户,查看可以使用的授权命令

sudo -l

[jaden@localhost ~]$ sudo -l

我们信任您已经从系统管理员那里了解了日常注意事项。

总结起来无外乎这三点:

        #1) 尊重别人的隐私。

        #2) 输入前要先考虑(后果和风险)。

        #3) 权力越大,责任越大。

[sudo] jaden 的密码: # 需要输入jaden用户的密码

匹配 %2$s 上 %1$s 的默认条目:

        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,

        env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME

        LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",

        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE 

        LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 jaden 可以在 localhost 上运行以下命令: # 提示可以使用sudo来执行的命令

        (ALL) /bin/systemctl, /usr/bin/vim, /usr/sbin/reboot

[jaden@localhost ~]$

2.使用sudo执行命令

# 授权的命令使用起来和普通指令是不同的,需要使用sudo来执行命令,也就是以授权的方式来执行指令。

# 比如reboot重启

[jaden@localhost ~]$ sudo reboot

Connection closing...Socket close.

Connection closed by foreign host.

...

# 比如重启网卡

# sudo systemctl restart network #start,stop,restart

# 比如:vim权限

[jaden@localhost ~]$ vim /etc/shadow

[jaden@localhost ~]$ sudo vim /etc/shadow

# 注意,vim的权限很大,比如可以修改密码,可以修改授权配置文件等,甚至root用户的密码都可以修改, 所以不要将vim的root权限给普通用户。

五.linux普通用户提权 

5.1 sudo提权 

就是我们进行sudo授权时给的授权太高,或者给授权时控制的不合理,就会被普通用户利用来提权。

示例1:

vim # 命令模式执行: !/

        # 通过vim修改/etc/sudoers,授权ALL

        # 再通过vim进入一个文件

        # :输入指令,是可以直接输入系统指令的,前面加一个!即可,比如创建一个文件,!touch 3.txt

        # 查看3.txt信息如下

        [jaden@localhost ~]$ ll

        总用量 0

        -rw-r--r-- 1 root root 0 3月 27 17:05 3.txt # 以root用户身份创建的文件

        # 如果在vim文件时,执行!/bin/bash,就进入到了root的命令终端,可以为所欲为。

        # 这就是sudo提权,但是sudo提权需要借助到可以执行系统指令的交互式的功能,比如vim。

示例2:

        find # sudo find . -exec bash \; # 直接进入root的命令终端,这个指令退出root终端可能 要退好几次才行,看find找到了几个文件,找到了3个文件,就输入三次exit才能退出。

示例3:

        awk # sudo awk 'BEGIN {system("/bin/bash")}' jaden.txt # 直接进入到root命令终 端,exit直接退出。

# 还有好多指令可以提权,比如cp命令也可以提权,将其他电脑上的/etc/shadow文件拷贝到这个系统中, 密码就改掉了,再su切换到root即可等等,还有什么mv、vi、sed修改文件、chmod改重要文件权限等等这 里就不多提了。大家可以试试,普通用户使用sudo来修改shadow文件的root用户的密码。 

5.2 脏牛提权 

dcow全称dirty cow,脏牛,原理:Linux内核的内存子系统在处理写入时复制(copy-on-write, COW, 组合起来是牛的意思)时产生了竞争条件。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进 行写访问,所以大家都管这个提权方式叫做脏牛提权。原理这一块大家不需要掌握,会监测是否存在这 个漏洞即可。

仓库地址:https://github.com/gbonacini/CVE-2016-5195

# github上对它有介绍,比如哪些版本的系统有这样的漏洞。要某个系统版本和gcc版本同时满足的时候才会 有这个漏洞,我们的centos7.8虽然系统版本能对上,但是gcc版本高,对不上,所有没有这个漏洞,不能用 这个程序提权,所以我给大家准备了一个虚拟机系统,大家打开直接用来玩玩即可。 

#上传文件 脏牛提权.zip

unzip 脏牛提权.zip

cd CVE-2016-5195-master/

make         #编译

./dcow -s         #提权

# 看内核版本,比如我们使用的

[jaden@dms CVE-2016-5195-master]$ cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core) 

说明这个系统有这个漏洞,解决这个漏洞就是升级系统或者升级gcc软件版本。也可以用我们的centos7.8自己试试,应该是不能提权。

六.总结 

本期的linux基础到这已经全部更新完,本期还涉及到了网路安全的内容,大家做个小知识了解一下就好了,后期还会更新其他的知识点,期待大家的点赞关注加收藏。 

 

 

相关文章:

linux基础操作11------(运行级别)

一.前言 这个是linux最后一章节内容,主要还是介绍一下,这个就和安全有关系了,内容还是很多的,但是呢,大家还是做个了解就好了。 二.权限掩码 运行级别 0 关机 运行级别 1 单用户 ,这个类似于windows安全…...

Python Ray 扩展指南

Python Ray 扩展指南 Ray 是一个开源的分布式计算框架,专为扩展 Python 应用程序而设计,尤其在人工智能和机器学习领域表现出色。它提供了简单的 API,使开发者能够轻松编写并行和分布式代码,而无需关注底层复杂性。以下是关于 Py…...

笑林广记读书笔记三

​《锯箭杆》​​ 一人往观武场,飞箭误中其臂。请外科医治疗,医遂用小锯截其外露箭杆,即索谢礼。 问:“内截箭头如何?” 医曰:“此是内科的事,你去找他们。” ​​白话翻译​​: 有…...

npm、pnpm、yarn 各自优劣深度剖析

在前端开发领域,包管理工具是开发者的得力助手,它们负责处理项目中的依赖安装、更新与管理。npm、pnpm、yarn 是目前最主流的三款包管理工具,它们在功能上有诸多相似之处,但在实际使用中又各有优劣。本文将结合包管理工具常见问题…...

Ulisses Braga-Neto《模式识别和机器学习基础》

模式识别和机器学习基础 [专著] Fundamentals of pattern recognition and machine learning / (美)乌利塞斯布拉加-内托(Ulisses Braga-Neto)著 ; 潘巍[等]译 推荐这本书,作者有自己的见解,而且提供代码。问题是难度高,对于初学…...

python查询elasticsearch 获取指定字段的值的list

from elasticsearch import Elasticsearch from datetime import datetime, timedelta# 1.connect to Elasticsearch------------------------------------------------------------------------------------------------------ # prod连接到 Elasticsearch es_of_prod Elasti…...

百度Q1财报:总营收325亿元超预期 智能云同比增速达42%

发布 | 大力财经 5月21日晚,百度发布2025年第一季度财报,显示一季度总营收达325亿元,百度核心营收255亿元,同比增长7%,均超市场预期。一季度,百度核心净利润同比增48%至76.3亿元,智能云持续强劲…...

BurpSuite Montoya API 详解

文章目录 前言1. API 结构1.1 概述1.2 API文件源码解析 2. BurpExtension 接口3. MontoyaApi接口4. package burp.api.montoya.proxy4.1 Proxy 接口4.2 ProxyRequestHandler接口4.3 Demo 5. BurpSuite burpSuite()6. Extension extension()7. Http http()参考 前言 我们已经学…...

oracle使用SPM控制执行计划

一 SPM介绍 Oracle在11G中推出了SPM(SQL Plan management),SPM是一种主动的稳定执行计划的手段,能够保证只有被验证过的执行计划才会被启用,当由于种种原因(比如统计信息的变更)而导致目标SQL产生了新的执…...

YCKC【二分查找专题】题解

数的范围题解点击跳转题目链接:数的范围 比较经典的二分查找例题,不做过多赘述。注意看二分的对象以及最终想求什么:想求尽可能大 ,那么就是最大值类型的二分;想求尽可能小,就是最小值类型的二分。注意二分…...

【Java高阶面经:微服务篇】8.高可用全链路治理:第三方接口不稳定的全场景解决方案

一、第三方接口治理的核心挑战与架构设计 1.1 不稳定接口的典型特征 维度表现影响范围响应时间P99超过2秒,波动幅度大(如100ms~5s)导致前端超时,用户体验恶化错误率随机返回5xx/429,日均故障3次以上核心业务流程中断,交易失败率上升协议不一致多版本API共存,字段定义不…...

关于FPGA 和 ASIC设计选择方向的讨论

FPGA 和 IC 设计怎么选?哪个发展更好? 一句话总结: 如果你学历极高,追求高薪资、愿意投入长期学习,目标是进入大型芯片公司,建议走 IC(ASIC)设计;如果你更看重灵活性、创…...

项目中常用的docker指令

1. docker ps 查看当前正在运行的容器。 docker ps -a 这将列出所有容器,包括停止运行的。 2. docker exec 在已经运行的容器中执行命令的工具 启动一个交互式 Bash 会话 docker exec -it my-container bash介绍 docker exec 命令 docker exec 是 Docker 提供的…...

以加减法计算器为例,了解C++命名作用域与函数调用

************* C topic: 命名作用域与函数调用 ************* The concept is fully introducted in the last artical. Please refer to 抽象:C命名作用域与函数调用-CSDN博客 And lets make a calculator to review the basic structure in c. 1、全局函数 A…...

MySQL EXPLAIN 使用详解与执行计划分析优化

MySQL EXPLAIN 使用详解与执行计划分析优化 一、什么是 EXPLAIN? EXPLAIN 是 MySQL 提供的 SQL 语句分析工具,可以显示 SQL 语句在执行时的执行计划,包括表的访问顺序、使用的索引、连接类型、扫描行数等。通过分析 EXPLAIN 的输出结果&…...

Arthas:Java诊断利器实战指南

在Java应用开发和运维中,线上问题排查往往是一场与时间的赛跑。传统的日志分析、重启大法或JVM工具(如jstack、jmap)虽然有效,但存在操作复杂、无法实时追踪等问题。Arthas作为阿里巴巴开源的Java诊断工具,凭借无需重启…...

一文读懂迁移学习:从理论到实践

在机器学习和深度学习的快速发展历程中,数据和计算资源成为了制约模型训练的关键因素。当我们面对新的任务时,重新训练一个从头开始的模型往往耗时耗力,而且在数据量不足的情况下,模型的性能也难以达到理想状态。这时,…...

ElasticSearch安装

ElasticSearch 脑图知识图谱地址:ProcessOn Mindmap|思维导图 简介 ES是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建,专为处理海量数据设计,支持实时搜索、分析和可视化。 排行第一的搜索引擎 官网地址&#xff1…...

c#中添加visionpro控件(联合编程)

vs添加vp控件 创建窗体应用 右键选择项 点击确定 加载CogAcqfifoTool工具拍照 设置参数保存.vpp 保存为QuickBuild或者job, ToolBlock 加载保存的acq工具 实例化相机工具类 //引入命名空间 using Cognex.VisionPro; //实例化一个相机工具类 CogAcqFifoTool cogAcqFifoTool n…...

MySQL主键与外键详解:数据关系的基石与守护者

引言 在数据库设计中,主键(Primary Key)和外键(Foreign Key)是构建数据关系模型的核心工具。它们不仅保障了数据的唯一性和完整性,还实现了跨表数据关联的逻辑闭环。本文将通过实例解析这两大关键概念&…...

Go语言打造:超高性能分布式唯一ID生成工具

一、简介 这是一个超高性能唯一ID生成工具,支持docker一键部署,提供API接入功能支持高性能生成Snowflake ID、Sonyflake ID、UUID v1、UUID v4、XID、KSUID以及自定义ID的服务可以用来生成订单编号、学号、高标准唯一标识、有序ID等等开源地址参考&#…...

列表计量单位显示

列表计量单位显示 E:\javaDev\tender-project-vben5\apps\web-antd\src\views\tender\material\data.ts import type { FormSchemaGetter } from #/adapter/form; import type { VxeGridProps } from #/adapter/vxe-table;import { getDictOptions } from #/utils/dict; impor…...

RAG系统的现实困境与突破:数据泥潭到知识自由

一、当前RAG系统的核心痛点 1. 数据处理的阿喀琉斯之踵 知识形态的暴力归一化:将PDF、视频、数据库等异构数据强行转化为统一文本,导致: 纸质文献中的数学公式OCR错误率高达37%(ICDAR2023数据)流程图/思维导图等非连续…...

项目执行中缺乏问题记录和总结,如何改进?

要有效改进项目执行中的问题记录与总结机制,应采取建立标准化问题记录流程、引入专业管理工具、定期开展问题复盘、设立知识库系统、强化团队总结意识等措施。其中,建立标准化问题记录流程是核心。没有统一流程,问题易被忽视、重复发生&#…...

docker中使用openresty

1.为什么要使用openresty 我这边是因为要使用1Panel,第一个最大的原因,就是图方便,比较可以一键安装。但以前一直都是直接安装nginx。所以需要一个过度。 2.如何查看openResty使用了nginx哪个版本 /usr/local/openresty/nginx/sbin/nginx …...

红杉资本2025 AI 峰会之Cybersecurity

红杉资本2025年AI峰会中,三位合伙人分享中与security相关的观点。 1、Pat Grady认为需要在AI 时代的价值累积将主要发生在应用层,在举例当前的空白领域时,展示了在security领域目前还没产生巨头; 2、Sonia 认为垂直领域agent将是创业者的重大机遇,通过强化学习、合成数据…...

高并发架构设计之限流

一、引言 再强大的系统,也怕流量短事件内集中爆发,就像银行怕挤兑一样,所以,高并发另一个必不可少的模块就是限流。限流是一种通过控制请求的速率或数量来保护系统免受过载的技术。流控的精髓是限制单位时间内的请求量&#xff0…...

PostgreSQL中通过查询数据插入到表的几种方法( SELECT INTO和INSERT INTO ... SELECT)

使用 SELECT INTO 创建新表 在PostgreSQL中,SELECT INTO语法有两种主要用途:创建新表和将查询结果存储到变量中(在PL/pgSQL函数或存储过程中)。以下是详细介绍: 1. 创建新表并复制数据(类似SQL标准) SELECT * INTO new_table FROM existing_table WHERE condition;说…...

大语言模型 16 - Manus 超强智能体 Prompt分析 原理分析 包含工具列表分析

写在前面 Manus 是由中国初创公司 Monica.im 于 2025 年 3 月推出的全球首款通用型 AI 智能体(AI Agent),旨在实现“知行合一”,即不仅具备强大的语言理解和推理能力,还能自主执行复杂任务,直接交付完整成…...

Windows逆向工程提升之IMAGE_FILE_HEADER

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 IMAGE_FILE_HEADER 介绍 IMAGE_FILE_HEADER 结构 核心字段解析 Machine(目标平台架构) NumberOfSections(节数目) TimeDateStamp&…...

基于Matlab建立不同信道模型

在MATLAB中建立不同的信道模型是无线通信系统仿真的重要组成部分。信道模型用于模拟信号在传输过程中受到的各种影响,如衰减、多径效应、噪声等。以下是一些常见的信道模型及其在MATLAB中的实现方法: 1. 理想信道模型 理想信道假设信号在传输过程中不受…...

苍穹外卖05 Redis常用命令在Java中操作Redis_Spring Data Redis使用方式店铺营业状态设置

2-8 Redis常用命令 02 02-Redis入门 ctrlc :快捷结束进程 配置密码: 以后再启动客户端的时候就需要进行密码的配置了。使用-a 在图形化界面中创建链接: 启动成功了。 03 03-Redis常用数据类型 04 04-Redis常用命令_字符串操作命令 05 05-Redis常用命令…...

JS 应用安全案例泄漏云配置接口调试代码逻辑框架漏洞自检

在 Javascript 中也存在变量和函数,当存在可控变量及函数调用即可参数漏洞。 JS 开发应用和 PHP , JAVA 等区别在于即没源代码,也可通过浏览器查看源代码。 获取 URL ,获取 JS 敏感信息,获取代码传参等&…...

嵌入式八股,空闲任务

空闲任务是FreeRTOS内核创建的一个默认任务,其优先级是系统中最低的。它在系统初始化时自动创建,并且始终处于就绪状态。当系统中没有任何其他任务可以运行时,调度器会选择空闲任务运行。 一句话总结,为了让系统不重启&#xff0…...

wd软件安装

* wd软件安装 * 磁盘读取数据的基本原理 * 分区软件使用 * 磁盘格式化/挂载的方式任务背景某天接到短信报警提示,显示某主机的根分区空间使用率超过85%,该主机用于影评(MySQL)和报表数据库(Oracle)。经查看…...

Redis数据库-消息队列

一、消息队列介绍 二、基于List结构模拟消息队列 总结: 三、基于PubSub实现消息队列 (1)PubSub介绍 PubSub是publish与subscribe两个单词的缩写,见明知意,PubSub就是发布与订阅的意思。 可以到Redis官网查看通配符的书写规则: …...

使用脚本备份和还原Windows环境变量

使用脚本备份和还原Windows环境变量 你是否遇到过这样的场景?为什么环境变量如此脆弱?全量备份及还原全量备份系统环境变量全量恢复系统环境变量PATH变量份及还原备份PATH变量精准还原PATH变量环境变量实时刷新器必看注意事项Windows环境变量误删别抓狂!用好 脚本 免重启「时…...

卫星互联网:构建全球无缝通信网络的未来

随着全球数字化进程的加速,人们对通信网络的需求越来越高。传统的地面通信网络虽然在城市和发达地区表现良好,但在偏远地区、海洋和空中等场景中仍存在覆盖不足的问题。卫星互联网作为一种新兴的通信技术,正在逐渐成为解决全球通信覆盖问题的…...

VS2022离线安装包

这是VS2022离线安装包下载链接 ▶ 夸克网盘 下载解压后,双击vs_setup.exe即可安装...

PDF 文档结构化工具对比:Marker 与 MinerU

模型训练数据-MinerU一款Pdf转Markdown软件 https://codeyuan.blog.csdn.net/article/details/144315141 在当前大模型(LLM)和自然语言处理(NLP)应用快速发展的背景下,如何高效地将 PDF 等非结构化文档转换为结构化数…...

【优秀三方库研读】在 quill 开源库 LogMarcos.h 中知识点汇总及讲解

以下是LogMarcos.h中的主要知识点汇总及详细讲解: 大纲目录 编译时日志级别过滤预处理宏与条件编译可变参数处理技巧格式化字符串生成日志宏的分发机制线程本地存储(TLS)零成本抽象设计动态日志级别支持结构化日志标签日志频率限制机制1. 编译时日志级别过滤 核心宏:QUILL…...

第14天-Matplotlib实现数据可视化

一、Matplotlib简介 Matplotlib是Python最基础的数据可视化库,提供类似MATLAB的绘图接口,支持2D/3D图形绘制。其核心特点: 丰富的图表类型(折线图/柱状图/饼图/散点图等) 高度可定制化(颜色/字体/刻度/标注) 矢量图输出(PDF/SVG)支持 与Jupyter无缝集成 二、环境准备…...

快速刷机Android10+Root

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除 作者:zhu6201976 一、下载android10源码 1.确认手机可刷机范围 比如我的Piexel3机型,支持刷android9-android12 Android源码。 https://de…...

文章相似度对比

from transformers import AutoTokenizer, AutoModel import torch import torch.nn.functional as F # 加载中文句向量模型(BGE) model_name "BAAI/bge-large-zh-v1.5" tokenizer AutoTokenizer.from_pretrained(model_name) model AutoM…...

认知计算:迈向人类级智能的 AI 新范式

一、认知计算:定义与核心技术架构 1.1 超越传统 AI 的 “类人智能” 新维度 认知计算的本质是构建具备感知、推理、学习和交互能力的智能系统,其核心特征包括: 多模态理解:处理文本、图像、语音等非结构化数据(如分…...

数据被泄露了怎么办?

数据泄露是严重的网络安全事件,需立即采取行动以降低风险。以下是关键应对步骤: 1. 确认泄露范围 核实泄露内容:确定泄露的是密码、财务信息、身份证号还是其他敏感数据。 评估来源:检查是个人设备被入侵、某平台漏洞&#xff0c…...

从 CANopen到 PROFINET:网关助力物流中心实现复杂的自动化升级

使用 CANopen PLC 扩展改造物流中心的传送带 倍讯科技profinet转CANopen网关BX-601-EIP将新的 PROFINET PLC 系统与旧的基于 CANopen 的传送带连接起来,简化了物流中心的自动化升级。 新建还是升级?这些问题通常出现在复杂的内部物流设施中,…...

关于收集 Android Telephony 网络信息的设计思考2

需求: 目标1: Android Telephony data(数据模块)侧收集多源(ServiceStateTracker/ImsService/其他)网络状态信息。目标2: 收集的数据需统一上报/存储到外部App的Provider。字段分散,不方便只在ServiceStateTracker中收集和插入。多触发点/多场景,需要统一插入。一、架构…...

android RecyclerView列表DiffCallback说明

一 代码 private class DiffCallback : DiffUtil.ItemCallback<xxxVolumeInfo>() {override fun areItemsTheSame(oldItem: xxxVolumeInfo,newItem: xxxVolumeInfo): Boolean {return oldItem.uuid newItem.uuid}override fun areContentsTheSame(oldItem: xxxVolumeIn…...

Day123 | 灵神 | 二叉树 | 找树左下角的值

Day123 | 灵神 | 二叉树 | 找树左下角的值 513.找树左下角的值 513. 找树左下角的值 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 初学者可以看灵神视频二叉树的层序遍历【基础算法精讲 13】_哔哩哔哩_bilibili 我的思路就是在每层的循环前加个判断&#xf…...