❀My学习Linux命令小记录(12)❀
目录
❀My学习Linux命令小记录(12)❀
46.arp指令
47.tcpdump指令
48.chmod指令
49.chown指令
50.bash调用脚本指令
shell介绍
shell脚本的组成部分
脚本执行方式
检查脚本语法
bash之变量
变量的种类:根据生效的范围不同来区分
bash的配置文件
profile类:为交互式登录的shell提供配置
bashrc类:为非交互式登录的shell提供配置
bash的IO重定向
bash算数运算:bash对数字进行隐式的类型转换
bash条件测试
bash的测试类型:
文件测试:测试文件存在与否,属性信息等
bash的逻辑运算:true(0)、false(1-255)
编写脚本backup.sh,可实现每日将/etc/目录备份到 /root/etcYYYY-mm-dd中
编写脚本nologin.sh和login.sh,实现禁止和允许普通用户登录系统
编写脚本disk.sh,显示当前硬盘分区中空间利用率最大的值
❀My学习Linux命令小记录(12)❀
46.arp指令
功能说明:arp 命令用于显示和修改 IP 到 MAC 转换表。
(ps.arp 命令是 Address Resolution Protocol,地址解析协议,是通过解析网络层地址来找寻数据链路层地址的一个网络协议包中极其重要的网络传输协议。而该命令可以显示和修改 arp 协议解析表中的缓冲数据。它将 IP 地址映射到物理 MAC 地址。)
基本语法:arp(选项)(参数)
选项:
-a 主机 :显示 arp 缓冲区的所有条目;
-H 地址类型 :指定 arp 指令使用的地址类型;
-d 主机 :从 arp 缓冲区中删除指定主机的 arp 条目;
-D:使用指定接口的硬件地址;
-e:以 Linux 的显示风格显示 arp 缓冲区中的条目;
-i 接口 :指定要操作 arp 缓冲区的网络接口;
-s 主机 MAC 地址 :设置指定的主机的 IP 地址与 MAC 地址的静态映射;
-n:以数字方式显示 arp 缓冲区中的条目;
-v:显示详细的 arp 缓冲区条目,包括缓冲区条目的统计信息;
-f 文件 :设置主机的 IP 地址与 MAC 地址的静态映射。
实例:
# arp -a #显示系统的 ARP 表
# arp -v #显示arp 缓冲区内容
#添加静态 arp 映射
arp -s IP MAC-ADDRESS
arp -s 192.168.1.1 00:b1:b2:b3:b4:b5
#删除 arp 缓存条目
arp -d 192.168.1.1
47.tcpdump指令
功能说明:一款sniffer工具,是Linux上的抓包工具,嗅探器。
(ps.tcpdump命令是一款抓包,嗅探器工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。)
基本语法:tcpdump(选项)
选项:
-a:尝试将网络和广播地址转换成名称;
-c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作;
-d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出;
-dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出;
-ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出;
-e:在每列倾倒资料上显示连接层级的文件头;
-f:用数字显示网际网络地址;
-F<表达文件>:指定内含表达方式的文件;
-i<网络界面>:使用指定的网络截面送出数据包;
-l:使用标准输出列的缓冲区;
-n:不把主机的网络地址转换成名字;
-N:不列出域名;
-O:不将数据包编码最佳化;
-p:不让网络界面进入混杂模式;
-q :快速输出,仅列出少数的传输协议信息;
-r<数据包文件>:从指定的文件读取数据包数据;
-s<数据包大小>:设置每个数据包的大小;
-S:用绝对而非相对数值列出TCP关联数;
-t:在每列倾倒资料上不显示时间戳记;
-tt: 在每列倾倒资料上显示未经格式化的时间戳记;
-T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型;
-v:详细显示指令执行过程;
-vv:更详细显示指令执行过程;
-x:用十六进制字码列出数据包资料;
-w<数据包文件>:把数据包数据写入指定的文件。
实例:
# tcpdump #直接启动tcpdump将监视第一个网络接口上所有流过的数据包
# tcpdump -i eth0 #捕获指定网络接口的所有数据包
# tcpdump udp port 123 #对本机的udp 123 端口进行监视 123 为ntp的服务端口
# tcpdump -i any port 80 -A #抓取80端口的HTTP报文,以文本形式展示
# tcpdump ip and not net localnet #打印所有源地址或目标地址是本地主机的IP数据包(如果本地网络通过网关连到了另一网络,则另一网络并不能算作本地网络。)
# tcpdump host 192.168.1.1 #捕获指定主机的数据包
# tcpdump src port 80 or dst port 80 #捕获源或目标端口为80的数据包
# tcpdump -X #显示数据包的内容(以16进制和ASCII形式)
# tcpdump -i eth0 -w capture.pcap #将捕获的数据包保存到文件中
# tcpdump -r capture.pcap #从保存的文件中读取数据包进行分析
# tcpdump -v #显示捕获的数据包的包头信息
# tcpdump -vv #显示更详细的包头信息
# tcpdump -i eth0 -n 'tcp port 80' #捕获并显示特定协议的数据包(例如,只显示HTTP流量)
48.chmod指令
功能说明:用来变更文件或目录的权限。
(ps.chmod命令 用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。)
权限范围的表示法如下:
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
r 读取权限,数字代号为“4”;
w 写入权限,数字代号为“2”;
x 执行或切换权限,数字代号为“1”;
- 不具任何权限,数字代号为“0”;
s 特殊功能说明:变更文件或目录的权限。
基本语法: chmod(选项)(参数)
选项:
u # 操作对象简称,用户user,文件或目录的所有者。
g # 操作对象简称,同组用户group,文件或目录所属群组
o # 操作对象简称,其它用户others
a # 操作对象简称,所有用户all,系统默认使用此项
+ # 权限操作符,添加某些权限
- # 权限操作符,取消某些权限
= # 权限操作符,设置文件的权限为给定的权限
r # 权限设定(英文),表示可读权限
w # 权限设定(英文),表示可写权限
x # 权限设定(英文),表示可执行权限
- # 权限设定(英文字符),表示没有权限
X # 权限设定,如果目标文件是可执行文件或目录,可给其设置可执行权限
s # 权限设定,设置权限suid和sgid,使用权限组合“u+s”设定文件的用户的ID位,“g+s”设置组ID位
t # 权限设定,只有目录或文件的所有者才可以删除目录下的文件
-c或——changes # 效果类似“-v”参数,但仅回报更改的部分,如果文件权限已经改变,显示其操作信息;
-f或--quiet或——silent # 操作过程中不显示任何错误信息;
-R或——recursive # 递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose # 显示命令运行时的详细执行过程;
--reference=<参考文件或目录> # 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
<权限范围>+<权限设置> # 开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置> # 关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置> # 指定权限范围的文件或目录的该选项权限设置;
--help # 显示帮助信息
--version # 显示版本信息
知识扩展和实例:
Linux用户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group內!
linux文件的用户权限的分析图
-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆ ┆ ╰┈ 0 其他人
# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
# ┆ ╰┈┈┈┈ u 属组
# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件
例:rwx rw- r--
r=读取属性 //值=4
w=写入属性 //值=2
x=执行属性 //值=1
# chmod u+x,g+w abc.txt # 为文件abc.txt设置自己可以执行,组员可以写入的权限
# chmod u=rwx,g=rw,o=r abc.txt #给文件abc.txt设置权限,使用者权限为rwx即可读可写可执行,组员权限可读可写不可执行,其他人权限只可读
# chmod 764 abc.txt #为文件abc.txt增加权限764,使用者权限7(4+2+1)读可写可执行,组员权限6(4+2)可读可写不可执行,其他人权限4(4)只可读
# chmod a+x abc.txt # 对文件abc.txt的u,g,o都设置可执行属性
将/home/wwwroot/里的所有文件和文件夹设置为755权限
①# chmod -R 755 /home/wwwroot/*
②# cd /home/wwwroot
# chmod -Rv 755 * #注意:“*”表示通配符,指的是所有文件和文件
# sudo chmod o+rw /shared #设置文件夹权限以保证其余用户可以访问它
49.chown指令
功能说明:用来变更文件或目录的拥有者或所属群组。
(ps.chown命令 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。)
语法:chown(选项)(参数)
选项:
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-v或——version:显示指令执行过程;
--dereference:效果和“-h”参数相同;
--help:在线帮助;
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
--version:显示版本信息。
实例:
# chown -R rosy /usr/meng #将目录/usr/meng及其下面的所有文件、子目录的文件主改成 rosy
50.bash调用脚本指令
编程语言分为两种
过程式:以指令为中心,数据服务于指令
对象式:以数据为中心,指令服务于数据
shell介绍
shell是一个用C语言编写的程序,它是用户使用Linux系统的窗口,一个桥梁,起到人机交互的作用。
shell既是一种命令语言,又是一种简单的程序设计语言,为什么说简单,因为有很多复杂的工作不用Shell去做。
shell本身是一种应用程序,运行与内核之上,这个应用程序为提供了一个界面,用户可通过这个界面访问操作系统内核的服务。shell是Linux系统内嵌的,安装操作系统之后看到的界面就是一个shell程序提供的界面。
shell程序: 是一个过程式的解释器,把源代码翻译成机器语言,然后执行,对于过程式语言来讲,是一行一行翻译并执行的;
shell脚本的组成部分
shell程序开头的环境指定:称之为shebang,如下:
#!/bin/bash
#!/bin/python
#!/bin/perl
shebang是告诉操作系统内核通过哪一个解释器来执行当前脚本;
#:行首为#号则为注释行,额外的解释信息
第一个脚本
#!/bin/bash
echo "Hello World !!!"
脚本执行方式
需给予脚本执行权限
# chmod +x hello.sh
通过脚本文件所在绝对路径进行执行
# /root/hello.sh
直接运行解释器,将脚本作为解释器的参数来执行
# sh hello.sh
检查脚本语法
bash -n :测试语法是否正确
bahs -x :查看脚本执行过程
bash -xv :更详细的查看脚本执行过程
例:bash -x hello.sh
bash之变量
变量=变量名+指向的内存空间
将数据存放于内存中,为了方便使用,为这段数据取了个名字,使用时,直接调用变量名,系统会根据变量名指向的数据位置将数据提取,进行使用。
变量赋值:就是将数据存储于这个变量名指向的内存空间的过程
变量的类型:定义数据存储的格式
①字符型
②数值型:整数型、浮点型
对于编程语言来说变量还分为:强类型和弱类型,bash为弱类型变量语言,如果没有明确表明,bash把所有变量统统视为字符型,而当我们运算时,bash会自动将变量值转为数值型。bash不支持浮点型,除非借助外部工具。
bash中的变量无需事先声明,随用随时到内存空间中定义。
变量的种类:根据生效的范围不同来区分
本地变量:范围是当前shell进程
环境变量:范围是当前shell进程和子shell进程
局部变量:范围是当前shell进程某个代码块(通常指函数)
位置变量:用于放在脚本代码块中调用通过命令行传递给脚本的参数
特殊变量:
$?:命令执行的状态值,值的范围0-255,其中0为真,表示命令执行成功,1-255为假,表示命令执行失败。
$#:传递给脚本的参数的个数。
$*:传递给脚本的所有参数,全部参数合为一个字符串。
$@:传递给脚本的所有参数,每个参数为独立字符串。
$0:表示命令本身。
本地变量:
变量赋值:name="value"
value的值也可以引用:
可以直接使用字符串:name="username"
可以使其他变量的值:name="$username"
可以直接引用命令的值:name=`hostname`或者name=#(hostname);
变量引用:${var_name},可简写为$var_name
"":弱引用,其中的变量引用会被替换成变量的值
例:[root@centos_7 ~]# NUM="$PATH";echo $NUM
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
'':强引用,其中的变量引用不会被替换,而是保留引号内原字符串
例:[root@centos_7 ~]# NUM='$PATH';echo $NUM
$PATH
``:命令引用,如括号内是命令,会被识别,返回的是命令执行完成的值
例:[root@centos_7 ~]# NUM=`seq 1 10`;echo $NUM
1 2 3 4 5 6 7 8 9 10
查看变量:set
撤销变量:unset name
输出变量:echo $name
环境变量:
变量赋值:export name=value
declare -x name=value
查看变量:export、declare、env
撤销变量:unset name
输出变量:echo $name
bash有许多内建的环境变量:
PATH,PWD,USER,HOSTNAME,SHELL,UID,HOME等等
只读变量:只读变量的证明周期为当前shell进程的生命周期,随着shell进程的终止而终止
变量赋值:declare -r name
readonly name
位置变量:$1,$2……$10,对应第1,第2个参数
shift:轮替,将第1个参数踢掉,第2个参数变为第一个参数,可一次踢多个,shift#;
set – :清空所有位置变量
命令行中定义的变量会随着当前shell进程的生命周期,Shell进程结束,变量时效
变量名的命名规则:
只能用数字,字母,下划线,且不能使数字开头。
变量名尽量做到见名知意
且不能使用程序的保留字,如PATH、PWD、if、else之类的 。
bash的配置文件
全局配置文件:对当前主机所有用生效
/etc/profile
/etc/profile.d/*.sh
个人配置文件:只对当前用户生效
.bash_profile
.bashrc
按照功能分,分为两类:
profile类:为交互式登录的shell提供配置
交互式登录:直接通过某终端输入账号和密码后登录打开的shell进程
使用su -命令登陆的方式:su - username
全局:/etc/profile,/etc/profile.d/*.sh
个人:.bash_profile
作用:用于定义环境变量
运行命令或脚本
交互式登录方式文件的读取顺序:
/etc/profile --> /etc/profile.d/*.sh --> .bash_profile --> /etc/bashrc --> .bashrc
注意:仅管理员可修改全局配置文件
bashrc类:为非交互式登录的shell提供配置
非交互式登录:图形界面下打开的终端
使用su username
运行脚本
全局:/etc/bashrc
个人:.bashrc
作用:定义本地变量
定义命令别名
非交互式登录文件的读取顺序:
.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
配置文件定义的特性,只对随后的shell进程生效
让通过编辑配置稳健的特性立即生效:
退出并重新登录
通过命令行重复定义一次
让shell进程重读配置文件
source FileName
. FileName
bash的IO重定向
输出重定向:
> :覆盖输出
>> :追加输出,在原有文件的尾部添加内容
set -C :禁止覆盖输出重定向至已存在的文件
>| :强行覆盖输出
set +C :关闭上述特性
错误输出重定向:
2> :错误覆盖
2>> :错误追加
合并正常输出和错误输出:
&> :覆盖
&>> :追加
/dev/null:相当于一个垃圾箱,当我们不需要将命令执行结果输出至屏幕时,可使用&> /dev/null,把结果丢进垃圾箱,只判断命令执行状态返回值;
重定向写入文件:
cat << EOF
content
...
EOF
----
cat > /PATH/TO/FILE << EOF
content
……
EOF
bash算数运算:bash对数字进行隐式的类型转换
+,-,*,/,%(取模),**(乘方)
实现算数运算:
let var=算数表达式,如:let var=1+2
例:
[root@centos_7 ~]# let var=1+2
[root@centos_7 ~]# echo $var
3
var=$[算数表达式],如:var=$[1+2]
var=$((算数表达式)),如:var=$((1+2))
echo '算数表达式' | bc ,如echo ‘1+2’ | bc
expr 数值1 运算符 数值2,如expr 1 + 2
增强型复制:
+=,-=,*=,/=,%=
使用方法:let 变量名运算符算数表达式
例:let=i+=1即i=i+1
自增,自减
let i+=1 即let i++
let i-=1 即let i--
例:
[root@centos_7 ~]# let i++;echo $i
1
[root@centos_7 ~]# let i++;echo $i
2
[root@centos_7 ~]# let i++;echo $i
3
bash条件测试
判断某条件是否满足,满足则完成某项任务,不满足则退出
条件测试命令的表达式:
test 表达式
[ 表达式 ]
[[ 表达式 ]]
与[ ]不同,[[ ]]双括号内支持正则表达式,而[ ]单括号不支持
常用例:N=abc;[[ $N =~ ^[0-9]+$ ]] && echo true || echo false :解释为,如果$N的值为整数型,则返回true,否则返回false。
注意:表达式两边必须要有空格!
bash的测试类型:
数值测试:
-eq:是否等于
-ne:是否不等
-gt:是否大于
-lt:是否小于
-ge:是否大于或等于
-le:是否小于或等于
字符测试:
==:是否等于
!=:是否不等
>:是否大于
<:是否小于
=~:左侧字符串是否能被右侧模式所匹配
-z "string":测试字符串是否为空,空则为真,不空则为假
-n "string":测试字符串是否不空,不空为真,空则为假
文件测试:测试文件存在与否,属性信息等
- 测试文件是否存在和文件类别
-e file:测试指定文件是否存在,存在为真,不存在则为假
-b file:文件是否存在且为块设备
-d file:文件是否存在且为目录
-c file:文件是否存在且为字符设备
-f file:文件是否存在且为普通文件
-h file:文件是否存在且为符号链接文件
-p file:文件是否存在且为命名管道文件
-S file:文件是否存在且为套接字文件
1)文件权限测试
-r file:文件是否存在且当前用户是否可读
-w file:文件是否存在且当前用户是否可写
-x file:文件是否存在且当前用户是否有执行权限
-u file:文件是否存在且拥有suid权限
-g file:文件是否存在且拥有sgid权限
-k file:文件是否存在且拥有sticky权限
2)文件大小测试
-s file:文件是否存在且非空
3)文件是否被打开
-N file:文件自从上一次被读取之后是否被修改过
-O file:当前用户是否为文件属主
-G file:当前用户是否为文件属组
bash的逻辑运算:true(0)、false(1-255)
与运算:
真 && 真 = 真
真 && 假 = 假
假 && 真 = 假
假 && 假 = 假
只要有假便为假
或运算:
真 || 真 = 真
真 || 假 = 真
假 || 真 = 真
假 || 假 = 假
只要有真便为真
非运算:
! 真 = 假
! 假 = 真
ls / &> /dev/null && echo 'hello' :当&&左边条件为真时,&&右边条件执行,&&左边条件为假时,&&右边条件不执行
ls /// &> /dev/null || echo 'hello' :当||左边条件为假时,||右边条件执行,||左边条件为真时,||右边条件不执行
第二种方式:
-a:与远算
-o:或运算
!:非运算
例:主机名是否为localhost,如果是改为centos
[ `hostname` == localhsot ] && hostname centos || echo "current hostname is `hostname`"
例:测试文件是否存在
[ -e /etc/passwd ] && cat /etc/passwd || echo "file not exist.."
例:测试主机名是否为空或者为localhost,如果为空或者为localhost则将其改为centos
[ -z `hostname` -o hostname == `hostname` ] && hostname centos || echo "current hostname is `hostname`"
编写脚本backup.sh,可实现每日将/etc/目录备份到 /root/etcYYYY-mm-dd中
#!/bin/bash#Filename: backup.sh
#Description: create script file
#Date: 2019-08-20 11:20:30
#*************************************************dir=etc`date +"%Y-%m-%d"`
DIR=/root/$dir
[ -d $DIR ] && echo "dir exist.." && exit 0
mkdir $DIR
cp -ar /etc/* $DIR && echo -e "\033[1;5;31mcopy finished...\033[0m"
编写脚本nologin.sh和login.sh,实现禁止和允许普通用户登录系统
[root@centos7 bin]#cat nologin.sh
#!/bin/bash##*************************************************
#Filename: login.sh
#Description: create script file
#Date: 2019-08-20 11:38:59
#*************************************************[ `id -u $1` -ge 1000 ] || exit 1
[ $# -lt 1 ] && echo "please input a users .." && exit 0
read -p "your ensure ban user nologin ? input y/n:" NOLOGIN
[ $NOLOGIN == y ] && sed -i -r '/^'''$1'''/s#(.*:)([^:]+)$#\1/bin/nologin#' /etc/passwd && exit 0
[ $NOLOGIN == n ] && exit 0
[root@centos7 bin]#cat login.sh
#!/bin/bash##*************************************************
#Filename: login.sh
#Description: create script file
#Date: 2019-08-20 12:55:48
#*************************************************[ $# -lt 1 ] && echo "please input a user .." && exit 0
[ ` id -u $1 ` -ge 1000 ] && sed -i -r '/^'''$1'''/s#(.*:)([^:]+)$#\1/bin/bash#' /etc/passwd
read -p "you need login system ? input y/n :" LOGIN
[ $LOGIN == y ] && su - $1
[ $LOGIN == n ] && exit 0
编写脚本disk.sh,显示当前硬盘分区中空间利用率最大的值
[root@centos7 bin]#cat disk.sh
#!/bin/bash##*************************************************
#Filename: disk.sh
#Description: create script file
#Date: 2019-08-20 13:08:14
#*************************************************device=`df | grep "/dev/sd" |tr -s " " % | sort -t% -k5 -nr | cut -d% -f1 |head -1`
DISK=`df | grep "/dev/sd" | tr -s " " : | cut -d: -f5 | sort -nr|head -1`
echo "The most used is $device already use $DISK"
❀My学习Linux命令小记录(12)❀over~
相关文章:
❀My学习Linux命令小记录(12)❀
目录 ❀My学习Linux命令小记录(12)❀ 46.arp指令 47.tcpdump指令 48.chmod指令 49.chown指令 50.bash调用脚本指令 shell介绍 shell脚本的组成部分 脚本执行方式 检查脚本语法 bash之变量 变量的种类:根据生效的范围不同来区分 …...
MySQL学习day05
DCL(Data Control Language)数据控制语言学习 作用:用来创建数据库用户、控制数据库的访问权限 1)查询用户: use mysql; select * from user; 2)创建用户: create user 用户名主机名 identifi…...
JAVA面试题7
1.Java中的ClassLoader是什么? 它有什么作用? 答案:ClassLoader是一种加载Java类文件的机制,可以从不同的来源加载类文件,如本地文件系统、网络等。ClassLoader可以帮助实现模块化开发和动态加载类等功能。 2.什么是J…...

好用免费的AI换脸5个工具
在当今社会的发展中,人工智能(Artificial Intelligence, AI)扮演着关键的角色,其应用领域不断扩展。作为AI的一个分支,换脸技术近年来备受欢迎。这项技术使得将一个人的面部特征迁移到另一个人的照片或视频成为可能。除…...

【Linux】公网远程访问AMH服务器管理面板
目录 1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装Cpolar4. 配置AMH面板公网地址5. 远程访问AMH面板6. 固定AMH面板公网地址 AMH 是一款基于 Linux 系统的服务器管理面板,它提供了一系列的功能,包括网站管理、FTP 管理、数据库管理、DNS 管理、…...

随笔-这都是命吗
我与鹏哥、小付有个小群,前几天,鹏哥在群里发了一个图,是他那个城市准备扶持的高新产业,有元宇宙、量子信息、生物制药、人工智能什么的。 先前的时候鹏哥给我说过,当地准备了六百多亩地,准备发展高新产业…...
优化网站性能,从容谈CDN加速的部署与运维
随着互联网的迅猛发展,网站的性能优化成为网站运维工作中不可或缺的一环。其中,CDN(Content Delivery Network)加速技术因其在全球范围内提供快速、可靠的内容分发而备受关注。本文将从一个网站运维的角度出发,深入探讨…...

JavaScript-事件
事件 事件流 指的是事件完整执行过程中的流动路径 两个阶段: 捕获阶段:从大到小冒泡阶段:从小到大 实际开发中都是使用事件冒泡为主 事件捕获 从DOM的根元素开始取执行对应的事件(从外到里) document.addEventLis…...
linux的磁盘管理
Linux 提供了多种工具和技术来进行磁盘管理。下面是对 Linux 磁盘管理的详细解释: 磁盘和分区: 磁盘(硬盘):Linux 系统中的磁盘通常是通过 SATA、SCSI、NVMe 等接口连接的物理硬盘。可以使用工具如 lsblk、fdisk、pa…...

qt-C++笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题
qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题 code review! 文章目录 qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题1.Qt的app.exec()详解2.ros::spin()详解3.ros::AsyncSpinner详解4.主线程中结合使用…...

【Docker】从零开始:18.使用Dockerfile构造自己的KingbaseES数据库镜像
【Docker】从零开始:17.使用Dockerfile构造自己的数据库镜像 新建一个自定义目录并创建Dockerfile文件上传需要的文件到自定义目录下注意docker-circle-init.sh文件内容password 内容 开始打包注意打包完成后执行 尝试用工具连接数据库 kingbase.tar.gz 包过大我就上…...
YOLOv8独家改进《全网无重复 YOLOv8专属打造》感知聚合SERDet检测头:简单高效涨点,即插即用|检测头新颖改进
💡本篇内容:YOLOv8独家改进《全网无重复,YOLOv8专属》感知聚合SERDet检测头:高效涨点,即插即用|检测头新颖改进 💡🚀🚀🚀本博客 YOLO系列 + 全新原创感知聚合SERDet检测头 改进创新点改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可,附改进源代…...
Android Studio中Flutter项目找不到Android真机设备解决方法
起因:创建正常Android项目可以运行在真机设备上,创建flutter项目就找寻不到Android真机设备。 1:在flutter sdk安装目录按下Shift和鼠标右键,打开Powershell窗口 2:输入以下,然后回车 flutter config --…...

Vue 静态渲染 v-pre
v-pre 指令:用于阻止 Vue 解析这个标签,直接渲染到页面中。 语法格式: <div v-pre> {{ 数据 }} </div> 基础使用: <template><h3>静态渲染 v-pre</h3><p v-pre>静态渲染:{{ n…...
C语言基础概念考查备忘 - 标识符、关键字、预定义标识符、语法检查、语义检查 ... 左值、右值、对象、副作用、未定义行为、sizeof是什么等等
什么是标识符、关键字和预定义标识符?三者有何区别? 当谈论C语言中的标识符、关键字和预定义标识符时,让我们从每个概念的基础开始。 标识符(Identifiers): 标识符是用来给变量、函数、类型等命名的。在…...
插件原理与开发
插件原理与开发 在 Mybatis总体执行流程 一文中简单的介绍了插件的初始化过程,本文将从源码的角度介绍一下mybatis的插件原理与简单开发实战。 插件原理 插件的注册和管理是通过InterceptorChain进行的,在创建Executor、StatementHandler、ParameterH…...

Git 分支合并时 Merge, Rebase, Squash 的使用场景
前言 Git 的分支设计大大提升了并行开发的能力,但相应的,也就要解决如何进行分支合并。毕竟分久必合,最终还是要把大家的工作合并起来,进行统一发布的。在合并时,通常有三种操作: Merge commitsRebaseSqu…...
第5节:Vue3 JavaScript 表达式
在 Vue3 中,JavaScript 表达式的使用方式与 Vue2 有所不同。 在 Vue3 中,你可以使用 v-bind 指令来绑定 JavaScript 表达式。例如: <template><div>{{ count }}</div> </template><script> import { ref } f…...
StarRocks 存算分离最佳实践,让降本增效更简单
StarRocks 存算分离自版本 3.0.0 开放使用,已经历过多个大版本迭代,在众多客户生产环境中得到验证。但在用户使用过程中也反馈了一些问题,大多源自对新能力不够熟悉导致无法达到最佳效果。因而,本文提供 StarRocks 存算分离最佳实…...

虚拟网络技术:bond技术
网卡bond也称为网卡捆绑,就是将两个或者更多的物理网卡绑定成一个虚拟网卡。 bond的作用: 1.提高网卡的吞吐量 2.增加网络的高可用,实现负载均衡。 一、bond简介 bond技术即bonding,能将多块物理网卡绑定到一块虚拟网卡上&…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...