Linux:八种重定向详解(万字长文警告)

相关阅读Linuxicon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482


        本文将讨论Linux中的重定向相关问题,在阅读本文前,强烈建议先学习文件描述符的相关内容Linux:文件描述符详解。

         重定向分为两类:第一类是全局重定向,它对后续在Bash中创建的所有子进程都生效(因为文件描述符的继承);第二类是命令重定向,它只对单个命令生效。

全局重定向

输入重定向

exec [number|varname]< filename 
# 如果不使用exec,则无法影响当前Bash进程
# [number|varname]和<之间不能有空格

        输入重定向会首先将文件名进行拓展(如参数扩展和命令替换),如果使用number,会在文件描述符number上以读模式打开该文件(实际上,系统调用open打开一个文件返回的文件描述符是最小可用的整数值,这是不能直接控制的,但可以用系统调用dup、dup2或fcntl进行复制);如果使用varname,则会自动分配一个大于等于10的文件描述符并将其赋值给变量varname;如果未指定number或varname,则默认为标准输入(文件描述符0)。

        例1展示了指定数字分配文件描述符和自动分配文件描述符的过程。

例1
[zhangchen@EDA Desktop]$ psPID TTY          TIME CMD34005 pts/0    00:00:00 bash34070 pts/0    00:00:00 ps
[zhangchen@EDA Desktop]$ ls -al /proc/34005/fd # 查询bash进程的文件描述符
total 0
dr-x------. 2 zhangchen zhangchen  0 Sep 24 14:08 .
dr-xr-xr-x. 9 zhangchen zhangchen  0 Sep 24 14:08 ..
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:08 0 -> /dev/pts/0
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:08 1 -> /dev/pts/0
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:08 2 -> /dev/pts/0
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:09 255 -> /dev/pts/0
[zhangchen@EDA Desktop]$ exec 5< test1 # 指定数字分配文件描述符
[zhangchen@EDA Desktop]$ ls -al /proc/34005/fd
total 0
dr-x------. 2 zhangchen zhangchen  0 Sep 24 14:08 .
dr-xr-xr-x. 9 zhangchen zhangchen  0 Sep 24 14:08 ..
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:08 0 -> /dev/pts/0
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:08 1 -> /dev/pts/0
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:08 2 -> /dev/pts/0
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:09 255 -> /dev/pts/0
l-wx------. 1 zhangchen zhangchen 64 Sep 24 14:08 5 -> /home/zhangchen/Desktop/test1
[zhangchen@EDA Desktop]$ exec {fd}< test2 # 自动分配文件描述符
[zhangchen@EDA Desktop]$ echo $fd
10
[zhangchen@EDA Desktop]$ ls -al /proc/34005/fd
total 0
dr-x------. 2 zhangchen zhangchen  0 Sep 24 14:08 .
dr-xr-xr-x. 9 zhangchen zhangchen  0 Sep 24 14:08 ..
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:08 0 -> /dev/pts/0
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:08 1 -> /dev/pts/0
l-wx------. 1 zhangchen zhangchen 64 Sep 24 14:08 10 -> /home/zhangchen/Desktop/test2
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:08 2 -> /dev/pts/0
lrwx------. 1 zhangchen zhangchen 64 Sep 24 14:09 255 -> /dev/pts/0
l-wx------. 1 zhangchen zhangchen 64 Sep 24 14:08 5 -> /home/zhangchen/Desktop/test1

        例2展示了输入重定向过程中的系统调用,由于strace无法直接在交互式bash中追踪内建命令exec,我们选择编写一个测试脚本。

# 例2
# 文件:redirection.sh
exec 5< test1
exec {fd}< test2[zhangchen@EDA Desktop]$ strace bash redirection.sh
*****
open("test1", O_RDONLY)                 = 3
fcntl(5, F_GETFD)                      = -1 EBADF (Bad file descriptor)
dup2(3, 5)                              = 5
close(3)                                = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
open("test2", O_RDONLY)                 = 3
fcntl(3, F_DUPFD, 10)                   = 10
close(3)
*****

        可以看出,在系统调用open打开文件test1和test2时,返回的文件描述符都是其实3,但是系统调用dup2(3, 5)和fcntl(3, F_DUPFD, 10)将其复制为了文件描述符5和10。系统调用open的参数O_RDONLY表示以只读模式打开。

        如果在交互式bash中,将标准输入重定向为了其他文件,则终端会直接退出,如例3所示。

# 例3
[zhangchen@EDA Desktop]$ exec 0< test         # 终端会直接退出
[zhangchen@EDA Desktop]$ exec 0< test; sleep 5 # 终端会在等待5秒后退出

        下面的命令可以关闭已打开的文件描述符,如例4所示。

exec [number|varname]<& - 
exec [number|varname]>& - 
# 两种命令效果是一样的,并不区分输入还是输出
# 它们唯一的区别在于,不指定number或varname时
# <&-默认指的是关闭标准输入描述符,即0<&-;>&-默认指的是关闭标准输出描述符,即1>&-
# [number|varname]和<、>和&之间不能有空格,和-间可以有
# 例4
[zhangchen@EDA Desktop]$ exec 5<& -     # 关闭文件描述符5
[zhangchen@EDA Desktop]$ exec {fd}>& -  # fd的值为10,因此关闭文件描述符10

输出重定向

exec [number|varname]>[|] filename 
# 如果不使用exec,则无法影响当前Bash进程
# [number|varname]和>h和[|]之间不能有空格

        输出重定向会首先将文件名进行拓展(如参数扩展和命令替换),如果使用number,会在文件描述符number上以写模式打开该文件,如果文件不存在则会创建它;如果使用varname,则会自动分配一个大于等于10的文件描述符并将其数字赋值给变量varname;如果未指定number或varname,则默认为标准输出(文件描述符1)。

        如果重定向操作符是>,并且启用了noclobber选项(通过命令set -o noclobber启用),则如果目标文件已经存在且是常规文件,则重定向会失败。

        如果重定向操作符是>|,或者使用>但未启用noclobber选项,则如果目标文件已经存在,会将其截断为零字节。

        例5展示了输出重定向过程中的系统调用,由于strace无法直接在交互式bash中追踪内建命令exec,我们选择编写一个测试脚本。

# 例5
# 文件:redirection.sh
set -o noclobber
exec 5> test1    # 重定向失败
exec {fd}>| test2[zhangchen@EDA Desktop]$ strace bash redirection.sh
*****
write(2, "redirection.sh: line 2: test1: c"..., 62redirection.sh: line 2: test1: cannot overwrite existing file
) = 62
open("test2", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
fcntl(3, F_DUPFD, 10)                   = 10
close(3)
*****

        系统调用open的参数O_WDONLY表示以只写模式打开,参数O_CREAT表示如果文件不存在,则创建它,参数O_TRUNC表示如果文件已存在,则将其内容截断为零字节。

        例6展示了输出重定向后,后续命令的输出都不出现在终端。

# 例6
[zhangchen@EDA Desktop]$ exec > test1         # 标准输出(文件描述符1)重定向到文件test1
[zhangchen@EDA Desktop]$ echo 123456789       # 向标准输出(文件描述符1)输出文本
[zhangchen@EDA Desktop]$ exec >&-             # 关闭标准输出(文件描述符1)
[zhangchen@EDA Desktop]$ cat test1            # 向标准输出(文件描述符1)输出文本
cat: standard output: Bad file descriptor     # 标准输出(文件描述符1)已被关闭
[zhangchen@EDA Desktop]$ exec > /dev/pts/0    # 重新让标准输出(文件描述符1)指向终端
[zhangchen@EDA Desktop]$ cat test1            # 向标准输出(文件描述符1)输出文本
123456789                                     # 成功输出文本

        例6中还存在一个插曲,当将标准输出重定向到test1并写入文本12345678后,使用exec >&-关闭文件描述符,此时如果尝试使用cat输出test1文件的内容会报错,这是因为此时标准输出,即文件描述符0并未指向有效的终端,因此需要将标准输出重定向回终端,此时才能正常显示。

输出追加重定向

exec [number|varname]>> filename 
# 如果不使用exec,则无法影响当前Bash进程
# [number|varname]和>>之间不能有空格

        与输出重定向类似,不同的是,如果文件已经存在,则新的输出将附加到文件末尾,而不会清空原有内容。

        例7展示了输出追加重定向过程中的系统调用,由于strace无法直接在交互式bash中追踪内建命令exec,我们选择编写一个测试脚本。

# 例7
# 文件:redirection.sh
exec 5>> test1[zhangchen@EDA Desktop]$ strace bash redirection.sh
*****
open("test1", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
fcntl(5, F_GETFD)                       = -1 EBADF (Bad file descriptor)
dup2(3, 5)                              = 5
close(3)                                = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
*****

        系统调用open的参数O_WDONLY表示以只写模式打开,参数O_CREAT表示如果文件不存在,则创建它,参数O_APPEND表示在写入数据时,所有数据都会追加到文件的末尾,而不是从文件开头开始写入。

        例8展示了输出追加重定向后,输出的内容是追加到文件末尾的。

# 例8
[zhangchen@EDA Desktop]$ cat test1
123456789
[zhangchen@EDA Desktop]$ exec >> test1        # 标准输出(文件描述符1)重定向到文件test1
[zhangchen@EDA Desktop]$ echo 123456789       # 向标准输出(文件描述符1)输出文本
[zhangchen@EDA Desktop]$ exec >&-             # 关闭标准输出(文件描述符1)
[zhangchen@EDA Desktop]$ exec > /dev/pts/0    # 重新让标准输出(文件描述符1)指向终端
[zhangchen@EDA Desktop]$ cat test1            # 向标准输出(文件描述符1)输出文本
123456789                                     # 追加输出
123456789

标准输出和标准错误重定向

exec &> filename # 更好的格式
exec >& filename
# 如果不使用exec,则无法影响当前Bash进程
# &和>之间不能有空格

        标准输出和标准错误重定向会首先将文件名进行拓展(如参数扩展和命令替换),然后将标准输出(文件描述符1)和标准错误输出(文件描述符2)都重定向到同一个文件。

        需要注意的是,使用>&时文件不能扩展为number或-,如果是,则会被当作是复制文件描述符(见后),这是为了兼容性考虑。 

        例9展示了标准输出和标准错误重定向过程中的系统调用,由于strace无法直接在交互式bash中追踪内建命令exec,我们选择编写一个测试脚本。

# 例9
# 文件:redirection.sh
exec &> test1[zhangchen@EDA Desktop]$ strace bash redirection.sh
*****
open("test1", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1)                              = 1
close(3)                                = 0
dup2(1, 2)                              = 2
*****

        在系统调用open打开文件test1时,返回的文件描述符是3,而dup2(3, 1)将其复制为了文件描述符1,进一步dup2(1, 2)将文件描述符1复制为了文件描述符2,此时文件描述符1和2都指向test1文件。

        例10展示了标准输出和标准错误重定向后,后续命令的输出不出现在终端。

# 例10
# 文件:redirection.sh
exec &> test1
echo "This is standard output"            # 标准输出
ls non_existent_file                      # 这将导致错误,产生标准错误
echo "This will also be standard output"  # 另一个标准输出[zhangchen@EDA Desktop]$ bash redirection.sh
[zhangchen@EDA Desktop]$ cat test
This is standard output
ls: cannot access non_existent_file: No such file or directory
This will also be standard output

标准输出和标准错误追加重定向

exec &>> filename
# 如果不使用exec,则无法影响当前Bash进程
# &和>>之间不能有空格

        与标准输出和标准错误重定向类似,不同的是,如果文件已经存在,则新的输出将附加到文件末尾,而不会清空原有内容。 

        例11展示了标准输出和标准错误追加重定向过程中的系统调用,由于strace无法直接在交互式bash中追踪内建命令exec,我们选择编写一个测试脚本。 

# 例11
# 文件:redirection.sh
exec &>> test1[zhangchen@EDA Desktop]$ strace bash redirection.sh
*****
open("test1", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1)                              = 1
close(3)                                = 0
dup2(1, 2)                              = 2
*****

        在系统调用open打开文件test1时,返回的文件描述符是3,而dup2(3, 1)将其复制为了文件描述符1,进一步dup2(1, 2)将文件描述符1复制为了文件描述符2,此时文件描述符1和2都指向test1文件。 

        例12展示了标准输出和标准错误追加重定向后,输出的内容是追加到文件末尾的。 

# 例12
# 文件:redirection.sh
exec &> test1
echo "This is standard output"            # 标准输出
ls non_existent_file                      # 这将导致错误,产生标准错误
echo "This will also be standard output"  # 另一个标准输出[zhangchen@EDA Desktop]$ cat test
12345678
[zhangchen@EDA Desktop]$ bash redirection.sh
[zhangchen@EDA Desktop]$ cat test
12345678
This is standard output
ls: cannot access non_existent_file: No such file or directory
This will also be standard output

复制文件标识符

exec [number|varname]<& filename
exec [number|varname]>& filename
# 两种命令效果是一样的,并不区分输入还是输出,,但建议与被复制(关闭)的文件描述符方向一致
# 它们唯一的区别在于,不指定number或varname时
# <& filename默认指的是被复制(关闭)的标准输入描述符,即0<& filename;>& filename默认指的是被复制(关闭)的标准输出描述符,即1>& filename
# [number|varname]和<、>和&之间不能有空格
  • 如果filename展开为数字,则其表示要被复制的文件描述符,那么文件描述符number(指定)或varname(自动分配)将成为该文件描述符的副本,即指向同一个文件。
  • 如果filename展开为-,则其表示要关闭文件描述符。
  • 如果filename展开文件名,则其表示标准输出和标准错误重定向。
  • 其他情况下,会出现错误。

        例13展示了复制文件标识符过程中的系统调用,由于strace无法直接在交互式bash中追踪内建命令exec,我们选择编写一个测试脚本。 

# 例13
# 文件:redirection.sh
exec 3> test1
exec 4>& 3[zhangchen@EDA Desktop]$ strace bash redirection.sh
*****
open("test1", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
fcntl(4, F_GETFD)                       = -1 EBADF (Bad file descriptor)
dup2(3, 4)                              = 4
*****

        在系统调用open打开文件test1时,返回的文件描述符是3,此时不再需要系统调用dup2调整了,因为这就是我们指定的数字,而dup2(3, 4)将其复制为了文件描述符4,此时文件描述符3和4都指向test1文件。

移动文件描述符

exec [number|varname]<& number-
exec [number|varname]>& number-
# 两种命令效果是一样的,并不区分输入还是输出,但建议与被移动的文件描述符方向一致
# 它们唯一的区别在于,不指定number或varname时
# <& number-默认指的是移动到标准输入描述符,即0<& number-;>& number-默认指的是标准输出描述符,即1>& number-
# [number|varname]和<、>和&之间不能有空格,number和-之间不能有空格,&与和number之间可以有空格

        该命令将文件描述符number复制为文件描述符number(指定)或varname(自动分配),并在此后关闭文件描述符number。

        例14展示了移动文件描述符过程中的系统调用,由于strace无法直接在交互式bash中追踪内建命令exec,我们选择编写一个测试脚本。 

# 例14
# 文件:redirection.sh
exec 3> test1
exec 4>& 3-[zhangchen@EDA Desktop]$ strace bash redirection.sh
*****
open("test1", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
fcntl(4, F_GETFD)                       = -1 EBADF (Bad file descriptor)
fcntl(4, F_GETFD)                       = -1 EBADF (Bad file descriptor)
dup2(3, 4)                              = 4
fcntl(3, F_GETFD)                       = 0
close(3)                                = 0
*****

        可以看到,在系统调用dup2将文件描述符3赋值为了文件描述符4后,紧接着就是用系统调用close关闭了文件描述符3。

输入和输出重定向

exec [number|varname]<> filename 
# 如果不使用exec,则无法影响当前Bash进程
# [number|varname]和<和>之间不能有空格

        以读写方式打开一个文件,是用文件描述符number(指定)或varname(自动分配),如果未指定number或varname,则默认为标准输入(文件描述符0)。 

        例15展示了移动文件描述符过程中的系统调用,由于strace无法直接在交互式bash中追踪内建命令exec,我们选择编写一个测试脚本。  

# 例15
# 文件:redirection.sh
exec 3<> test1[zhangchen@EDA Desktop]$ strace bash redirection.sh
*****
open("test1", O_RDWR|O_CREAT, 0666)     = 3
*****

        系统调用open的参数O_RDWR表示以读写模式打开,参数O_CREAT表示如果文件不存在,则创建它。

叠加使用

        上面的八种重定向命令,可以多个混合使用,此时从左往右依次执行,如下所示。

exec &> filename  等价于  exec > filename 2>& 1或exec > filename 2<& 1(不建议)
exec &>> filename 等价于  exec > filename 2>>& 1或exec > filename 2<<& 1(不建议)

命令重定向

        全局重定向的影响范围很广,所有后续的命令都会受到影响(因为文件描述符继承),但命令重定向只针对一条命令而言,重定向只发生在子进程中,其他都是相同的。

        下面给了一个例子,将echo命令的标准输出(文件描述符1)重定向至文件test1。

[zhangchen@EDA Desktop]$ echo test_message > test1
[zhangchen@EDA Desktop]$ cat test1
test_message

        下面展示了命令重定向过程中的系统调用情况。

# 文件:redirection.sh
ls > test1
echo 111111111111111111111
[zhangchen@EDA Desktop]$ strace -f bash redirection.sh # -f选项很重要,加上它才能追踪子进程的系统调用
*****
[pid 71192] open("test1", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
[pid 71192] dup2(3, 1)                  = 1
[pid 71192] close(3)                    = 0
[pid 71192] execve("/usr/bin/ls", ["ls"], 0x12f4bb0 /* 66 vars */) = 0
*****
write(1, "111111111111111111111\n", 22111111111111111111111 # 后面一串是命令的输出
) = 22
*****

        可以看到,系统调用open是在子进程[pid 71192]中进行的,echo的输出使用原本的标准输出(文件描述符1),即还是原来的终端,所以在后面看到了命令的输出。

        细心的人可能会发现,echo命令并没有创建子进程,虽然echo命令不是内建命令,但它是直接在原bash进程中执行的,如果重定向它的标准输入输出,岂不是会影响全局?其实不会,下面举例说明。

# 文件:redirection.sh
echo 111111111111111111111 > test1
echo 222222222222222222222[zhangchen@EDA Desktop]$ strace -f bash redirection.sh # -f选项很重要,加上它才能追踪子进程的系统调用
open("test1", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
fcntl(1, F_GETFD)                       = 0
fcntl(1, F_DUPFD, 10)                   = 10
fcntl(1, F_GETFD)                       = 0
fcntl(10, F_SETFD, FD_CLOEXEC)          = 0
dup2(3, 1)                              = 1
close(3)                                = 0
fstat(1, {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6e4f095000
write(1, "111111111111111111111\n", 22) = 22
dup2(10, 1)                             = 1
fcntl(10, F_GETFD)                      = 0x1 (flags FD_CLOEXEC)
close(10)                               = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
write(1, "222222222222222222222\n", 22222222222222222222222
) = 22
*****

        原来在使用dup2函数将标准输出(文件描述符1)指向test1前,先使用了fcntl(1, F_DUPFD, 10)将文件描述符1原本指向的终端保存了下来,第一个echo执行后,又使用了dup2(10, 1) 将其还原!

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

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

相关文章

个性化大语言模型:PPlug——让AI更懂你

在当今数字化转型的时代&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已经成为了不可或缺的工具&#xff0c;它们在自然语言理解、生成和推理方面展现了非凡的能力。然而&#xff0c;这些模型普遍采用的是“一刀切”的方式&#xff0c;即对于相同的输入给予所有用户相…

MySQL的乐观锁、悲观锁机制及实现

乐观锁 乐观锁的实现参考了这篇文章&#xff0c;里面还将了乐观锁的时间戳实现方式&#xff1a; 跳转 概述 乐观锁是一种并发控制策略&#xff0c;它假设多个事务不会发生冲突&#xff0c;在执行操作时不加锁&#xff0c;非常乐观&#xff0c;只需每次进行提交时利用标识进行…

ansible批量安装postgresql软件

本文为杭州云贝教育 刘老师 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。 随着分布式系统和大规模应用的普及&#xff0c;自动化部署和管理变得越来越重要。Ansible 是一种流行的自动化工具&#xff0c;它…

DAY80服务攻防-中间件安全HW2023-WPS 分析WeblogicJettyJenkinsCVE

知识点 1、中间件-Jetty-CVE&信息泄漏 2、中间件-Jenkins-CVE&RCE执行 3、中间件-Weblogic-CVE&反序列化&RCE 4、应用WPS-HW2023-RCE&复现&上线CS 中间件-Jetty-CVE&信息泄漏 Jetty是一个开源的servlet容器&#xff0c;它为基于Java的Web容器…

分布式光伏监控系统 在鄂尔多斯市鄂托克旗某煤矿项目中的应用

摘 要&#xff1a;分布式光伏发电就是将太阳能光伏板分散布置在各个区域&#xff0c;通过小规模、模块化的方式实现电能的并网或独立使用&#xff0c;这种发电方式具有就近发电、就近并网、就近转换、就近使用的特点。近年来&#xff0c;技术和政策支持推动了光伏组件的成本持续…

sed(1):强大的文本处理命令

一、命令简介 ​sed​&#xff08;stream editor&#xff09;是一个强大的文本处理工具&#xff0c;它能够执行基本的文本转换&#xff0c;如替换、删除、插入和修改文本行的特定部分。sed​ 命令通常用于对文本文件进行批量编辑&#xff0c;也可以用于处理来自管道的输入。 …

煤矿井下钻场目标检测数据集 5类 voc格式

煤矿井下钻场目标检测数据集 本数据集包含了来自不同钻场和环境背景条件下的70948张图片&#xff0c;涵盖了夹持器、钻机卡盘、煤矿工人、矿井安全帽和钻杆等五类目标&#xff0c;并提供了PASCAL VOC格式的标注文件。 摘要 煤矿井下钻场打钻是解决瓦斯灾害、水害、隐蔽地质灾害…

9.24-k8s服务发布

Ingress 使用域名发布 K8S 服务 部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 ki…

灵当CRM multipleUpload.php 文件上传致RCE漏洞复现

0x01 产品描述&#xff1a; 灵当CRM是一款专为中小企业量身定制的智能客户关系管理工具&#xff0c;由上海灵当信息科技有限公司开发和运营。该系统广泛应用于多个行业&#xff0c;包括金融、教育、医疗、IT服务及房地产等领域&#xff0c;旨在满足企业对客户个性化管理的需求&…

使用yum为centos系统安装软件以及使用(包含阿里云yum源配置)

centos系统配置阿里云yum源 因为centos7官方停止维护&#xff0c;自带yum源用不了了&#xff0c;所以可以更换成阿里云yum源 方法&#xff1a; 使用root权限执行以下语句 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo CentOS…

【LinuxC高级】汇总

ls ls -l&#xff1a;显示文件的详细信息 ls -a&#xff1a;显示隐藏文件 ls -lh&#xff1a;文件大小单位显示 ls -i&#xff1a;显示文件的inode号 修改密码 passwd 用户名 su 用户名 -----> 用户名 su ----> 如果不加用户名&#xff0c;默认切换到超级用户 cd cd 路径…

YOLOv10改进,YOLOv10主干网络替换为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点

摘要 基础模型的核心理念是“更多即不同”,这一理念在计算机视觉和自然语言处理领域取得了惊人的成功。然而,变压器模型的优化挑战和固有复杂性呼唤一种向简化转变的范式。在本研究中,引入了 VanillaNet,一种拥抱设计优雅的神经网络架构。通过避免高深度、快捷方式和复杂操…

MySQL—存储过程详解

基本介绍 存储过程和函数是数据库中预先编译并存储的一组SQL语句集合。它们的主要目的是提高代码的复用性、减少数据传输、简化业务逻辑处理&#xff0c;并且一旦编译成功&#xff0c;可以永久有效。 存储过程和函数的好处 提高代码的复用性&#xff1a;存储过程和函数可以在…

记某地级市护网的攻防演练行动

0x1 前言 哈喽&#xff0c;师傅们&#xff01; 这次给师傅们分享的是上上个星期的地级市护网的攻防演练的两个案例&#xff0c;涉及到的知识点可能比较偏&#xff0c;下面我也会提前给师傅们拓展下改漏洞相关的知识点内容。护网攻防演练中&#xff0c;涉及到的很多敏感内容这…

【Linux】驱动的基本架构和编译

驱动源码 /** Silicon Integrated Co., Ltd haptic sih688x haptic driver file** Copyright (c) 2021 kugua <daokuan.zhusi-in.com>** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public Licen…

css实现自定义静态进度条-vue2

实现如图所示 html&#xff1a; <div class"progress-container"><div class"progress-box left" :style"leftStyle"><div class"progress-value-top left">总中标电量</div><div class"progress-val…

前端请求音频返回pcm流进行播放

业务场景是chat回答&#xff0c;点击播放则会将回答内容进行请求&#xff0c;返回音频数据流进行播放 实现方案&#xff0c;因为后端返回的是流式接口&#xff0c;但是流式接口我去截取后用自己完成的流式播放器方法进行播放会存在杂音&#xff0c;但是短句接口返回速度尚可&a…

composer环境变量(phpstudy集成环境)无法使用问题

composer 不是内部或外部命令,也不是可运行的程序 或批处理文件。 按下WinR组合键打开“运行”&#xff0c;输入sysdm.cpl 回车&#xff0c;打开“系统属性”并切换至“高级”选项卡&#xff0c;点击“环境变量”进行配置 配置完后点击确定&#xff0c;重新打开命令行&#x…

Bootstrap框架-container类,container-fluid类,栅格系统

1.Bootstrap Bootstrap为页面内容和栅格系统包裹了一个.container容器&#xff0c;框架预先定义类 1.1container类 响应式布局容器的宽度 手机-小于768px 宽度设置100%&#xff1b; 平板-大于等于768px 设置宽度为750px 桌面显示器-大于等于992px 设置宽度 970px 大屏幕显…

康养为松,智能为鹤:华为全屋智能画出的松鹤长春图

在道家文化中&#xff0c;喜欢将松与鹤并举&#xff0c;以其长寿与仙逸表达对老年人的美好祝愿。松鹤延年、松龄鹤寿等成语皆出于此。松鹤长春图&#xff0c;也成为国画当中的经久不衰的题材。 当我们迎来老龄化时代&#xff0c;“松鹤长春”则成为了整个社会的共同期待。 根据…