linux 中文实用型手册 基于RHEL(红帽系)
硬件系统
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
硬件信息
-
机器型号
dmidecode | grep "Product Name" -
CPU型号
cat /proc/cpuinfo |grep "model name" | uniqWWW -
CPU详情
lscpu -
CPU个数
cat /proc/cpuinfo |grep "physical id" | sort | uniq|wc -l -
CPU核数
export vc=`cat /proc/cpuinfo |grep "cores"|uniq` export text='单颗CPU核数为: ' echo $text$vc -
CPU线程
cat /proc/cpuinfo | grep "processor" | wc -lcat /proc/cpuinfo | grep -c "processor"grep 'processor' /proc/cpuinfo | sort -u | wc -l -
内存
# l 显示最高最低 free -m # m 以M为单位 free -lm -
硬盘
fdisk -lfdisk -l | grep Diskfdisk -l | grep "磁盘 "
系统信息
-
系统版本
cat /etc/os-release -
系统版本(红帽系)
cat /etc/redhat-release cat /etc/centos-release -
内核版本
cat /proc/version -
机器名
hostname -
系统位数
file /sbin/init -
系统字符集
locale
系统时钟
-
直接修改系统时间
date -s "2020-06-30 22:20:00" -
配置ntp时钟自动同步
-
手动同步
# 服务启动之前可用 ntpdate 10.8.1.102 -
修改配置
vim /etc/ntp.conf# WA时钟服务器 server 10.8.1.102 prefer server 10.8.1.103 -
增加配置
echo "server 10.8.1.102 prefer" > /etc/ntp.conf echo "server 10.8.1.103" > /etc/ntp.conf -
启动服务
systemctl status ntpdsystemctl restart ntpd -
开机自启
systemctl enable ntpd.service -
检查时差
ntpdate -d 10.8.1.102ntpdc -c loopinfo
存储挂载
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
mount挂载硬盘
-
列出所有硬盘和它们的分区信息
fdisk -l -
打开分区管理进行分区
fdisk /dev/nvme0n1*** -
格式化分区为ext4文件系统
mkfs.ext4 /dev/nvme1n1p1 -
创建目录
mkdir /srv/BigData/elasticsearch -
挂载分区到目录
mount /dev/nvme0n1p1 /srv/BigData/elasticsearch/esnode1
挂载raw格式的镜像
-
获取可以挂载的环回设备
losetup -f /dev/loop0 -
进行块设备挂载
losetup /dev/loop0 abc.img -
执行块设备的分区映射
kpartx -a /dev/loop0 -
查看映射分区入口
ls /dev/mapper/ -
查看磁盘情况(找到需要挂载的数据分区)
fdisk -l -
mount分区
mount /dev/mapper/loop0p1 /mnt/ -
去挂载步骤
umount kpartx -d losetup -d
用户权限
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
-
查看登陆历史
-
last -
查看在线用户
w who
user
-
查看所有用户
cat -n /etc/passwd -
创建用户
useradd username这里会自动创建一个与用户同名的组,并作为这个用户的主组
-
创建用户并添加到组
useradd -g groupname username -
删除用户
不加参数
-r不会删除/home下的用户目录userdel -r username -
强制删除用户
强制删除用户会导致该用户的所有登录会话被强制下线,系统会终止用户的所有进程,并立即断开用户连接。
userdel -f username
group
-
查看用户所属组
groups testuser -
创建用户组
groupadd testgroup -
删除用户组
groupdel testgroup
passwd
passwd
更改用户密码或其他密码信息
-
语法参数
用法: passwd [选项...] <帐号名称>-k, --keep-tokens 保持身份验证令牌不过期-d, --delete 删除已命名帐号的密码(允许用户不输密码登录)-l, --lock 锁定指名帐户的密码-u, --unlock 解锁指名账户的密码-e, --expire 终止指名帐户的密码-f, --force 强制执行操作-x, --maximum=DAYS 密码的最长有效时限-n, --minimum=DAYS 密码的最短有效时限-w, --warning=DAYS 在密码过期前多少天开始提醒用户-i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用-S, --status 报告已命名帐号的密码状态--stdin 从标准输入读取令牌(可以绕过密码强度限制)更改当前用户密码
passwd -
更改其他用户密码
passwd username -
强制用户在下次登录时更改密码
passwd -e username -
锁定用户账户
passwd -l username -
显示用户密码的状态
passwd -S username -
绕过密码强度检查
echo "123" | passwd --stdin root
shadow
-
查看用户是否设置密码
cat /etc/shadow:是分隔符,第一列是密码,如果第一列为!!则证明此用户未设置密码,无法使用密码方式登录如果第一列为空则表示用户可以不输入密码登录
chown
chown (Change Owner)
更改或目录所有者
-
语法参数
chown [OPTION]... [OWNER][:[GROUP]] FILE... -R:递归更改指定目录及其下所有文件和子目录的属主和属组。 -v:详细显示所有更改。 --reference=<ref_file>:将指定文件的属主和属组信息应用到目标文件上。 -
更改文件属主
chown user1 file.txt -
更改文件属主和属组
chown user1:group1 file.txt -
递归更改目录及其子目录下所有文件的属主
chown -R user1 /path/to/directory -
使用参考文件的属主和属组信息更改目标文件
chown --reference=ref_file target_file
chmod
chmod (Change Mode)
更改文件或目录权限
-
语法参数
chmod [OPTION]... MODE[,MODE]... FILE... -R:递归更改指定目录及其下所有文件和子目录的权限。 -v:详细显示所有更改。 --reference=<ref_file>:将指定文件的权限信息应用到目标文件上。# 八进制模式: 4:读权限 (r) 2:写权限 (w) 1:执行权限 (x)# 符号模式: u:属主 (user) g:属组 (group) o:其他用户 (others) a:所有用户 (all),相当于 u, g, o 组合 ## 权限符号: +:增加权限 -:去除权限 =:设置为指定权限 ## 权限类型: - `r`:读权限 - `w`:写权限 - `x`:执行权限 -
文件权限标识
[type][owner][group][others] -
使用八进制模式更改文件权限
7(4+2+1):rwx 6(4+2): rw- 5(4+1): r-x- 修改文件权限为u7-g5-o4
chmod 754 flie1递归更改目录及其子目录下所有文件的权限
chmod -R 644 /path/to/directory -
使用符号模式更改文件权限
所有用户和组都可执行
chmod +x script.sh为文件增加执行权限。
chmod u+rwx,g+rx,o+r file.txt为属主增加读、写、执行权限,属组增加读、执行权限,其他用户增加读权限。
-
复制
ref_file的权限到target_file:chmod --reference=ref_file target_file
文件目录
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
ls
ls (List)
-
语法参数
ls [选项] [文件...] -l:使用长格式显示文件信息。 -a:显示所有文件,包括隐藏文件(以 `.` 开头的文件)。 -h:以人类可读的格式显示文件大小。 -t:根据修改时间排序。 -r:逆序排列。 -R:递归列出子目录内容。 -S:根据文件大小排序。 --time-style=long-iso:指定时间显示格式,如 ISO 标准格式。- 显示标准日期格式
ls -l --time-style=long-iso- 列出当前目录的所有文件,包括隐藏文件
ls -la- 列出目录内容,并以人类可读的格式显示文件大小
ls -lh- 根据修改时间逆序列出文件
ls -ltr- 递归列出目录内容
ls -R
du
du (Disk Usage)
磁盘使用
-
语法参数
du [选项] [文件或目录] -h:人类可读 -s:总计,仅显示指定文件或目录的总大小。 -a:显示每个文件,包括目录下的所有文件,而不仅是目录本身的大小。 -c:累计,显示总计大小。 -d N 或 --max-depth=N:指定深度,限制目录遍历的深度,例如 -d 1 只显示当前目录,不递归子目录。 -k:以 KB 为单位显示文件大小。 -m:以 MB 为单位显示文件大小。 -
当前目录大小
du -h -
子目录大小
du -h -d 1 -
子目录和文件大小
du -ah -d 1 -
目录大小排名
du -ah /path/to/directory | sort -rh | head -10
touch
-
创建空文件或更新文件时间戳
touch file1.txt
wc
wc (Word Count)
-
语法参数
# word count wc [选项] 文件名 -l:统计行数。 -w:统计单词数。 -c:统计字节数。 -m:统计字符数(字符数与字节数在 ASCII 文件中相同,但在多字节编码文件中可能不同)。 -L:显示最长行的长度。 -
统计文件行数
wc -l sample.txt -
统计当前目录中的文件和目录数量
ls | wc -l
awk
awk (Aho、Weinberger、Kernighan)
作者,一种用于文本处理的编程语言
-
语法参数
awk [选项] '脚本' 文件名 -F:指定输入字段分隔符。 -v:设置变量。 '{print $n}':打印第 n 个字段。 '{action}':对每一行执行指定的操作。 -
打印文件的所有行
awk '{print}' sample.txt -
使用分隔符提取字段
awk -F ',' '{print $1}' sample.csv -
统计某列的总和
awk '{sum += $1} END {print sum}' sample.txt
find
find 查找文件和目录
语法参数
-
语法
find [路径] [选项] [表达式] # 路径:指定要查找的目录,默认为当前目录(.) # 选项:默认print(打印查找结果) -
参数
-name:根据文件名查找(区分大小写) -iname:根据文件名查找(不区分大小写) -type [f,d,;]:指定查找的文件类型f:查找普通文件d:查找目录l:查找符号链接 -mtime:按修改时间查找(以天为单位)+n:在 n 天前修改-n:在 n 天内修改 -size:按文件大小查找+n:大于 n 的文件-n:小于 n 的文件 -empty:查找空文件或空目录 -user:查找属主为指定用户的文件 -group:查找属组为指定组的文件 -perm:按权限查找文件 -exec:对找到的文件执行指定命令 -delete:直接删除找到的文件(小心使用) 表达式:可以组合多个条件,使用逻辑操作符如 -and、-or、-not 来构建复杂查询
文件和目录查找
-
按照文件名查找(不区分大小写)
find path -iname "*.log"
按修改时间查找
-
查找 7 天前修改的文件
find path -mtime +7
按文件大小查找
-
查找大于 1GB 的文件
find path -size +1GB
按文件权限查找
-
按属主查找文件
find path -user username -
按权限查找文件
find path -perm 644
排除目录查找
-
排除特定目录不进行查找
find path -path "path/dir_to_exclude" -prune -o -name "*.txt" -print
复合示例
-
对找到的 .log 文件执行删除命令(此命令极度危险)
find path -name "*.log" -exec rm {} \; -
查找修改时间为 3 天前,类型为文件
find path -type f -mtime +3 -
查找 5 天前类型为文件的对象,并删除
find path -type f -mtime +5 | xargs rm -rf -
查找大于 100MB 且 7 天前修改的 .log 文件
find path -name "*.log" -size +100M -mtime +7 -
查找空目录
find path -type d -empty -
查找空文件(文件大小为 0 字节的文件)
find path -type f -empty -
限制查找的最大目录深度
find path -maxdepth 2 -name "*.txt"
tar
tar (Tape Archive)
磁带归档
打包(.tar)
tar -cvf file.tar.gz filedir
打包压缩(.tar.gz)
# 正常打包.tar.gz
tar -czvf file.tar.gz file
解包解压(.tar.gz)
# 解压.tar.gz 到指定目录(需先创建目录)
tar -xzvf file.tar.gz -C /path/to/directory
创建归档文件
- -c:创建新的归档文件(create)tar -cf archive.tar file1 file2
- -z:使用 gzip 压缩归档文件tar -czf archive.tar.gz file1 file2
- -j:使用 bzip2 压缩归档文件tar -cjf archive.tar.bz2 file1 file2
- -J:使用 xz 压缩归档文件tar -cJf archive.tar.xz file1 file2解压归档文件
- -x:从归档文件中提取文件(extract)tar -xf archive.tar
- -z:解压 .gz 格式的归档文件tar -xzf archive.tar.gz
- -j:解压 .bz2 格式的归档文件tar -xjf archive.tar.bz2
- -J:解压 .xz 格式的归档文件tar -xJf archive.tar.xz查看归档文件内容
- -t:列出归档文件中的内容(list)tar -tf archive.tar追加内容到现有归档文件
- -r:将文件追加到现有归档文件中(append)tar -rf archive.tar file3更新归档文件中的内容
- -u:只添加修改过的文件到归档中(update)tar -uf archive.tar file1删除归档中的文件
- --delete:从归档文件中删除指定的文件(通常不与压缩选项一起使用)tar --delete -f archive.tar file1文件和目录选项
- -C:切换到指定目录,然后再执行 tar 操作tar -czf archive.tar.gz -C /path/to/directory .
- -v:显示操作过程中的详细信息(verbose)tar -cvf archive.tar file1
- -P:保留绝对路径名(默认 tar 忽略路径的 /)tar -cvPf archive.tar /etc/hosts
- --exclude=PATTERN:在打包时排除符合模式的文件tar -czf archive.tar.gz --exclude='*.log' /path/to/directory归档完整性校验
- -W 或 --verify:在归档后校验归档文件的完整性tar -cf archive.tar file1 --verify归档格式
- --format=FORMAT:指定归档的格式(如 ustar、gnu、posix)tar --format=gnu -cf archive.tar file1特别重要的 f 参数
- -f:指定归档文件名(file),用来告诉 tar 归档到某个文件,而不是设备。-f 参数通常必须与 c, x, t 等操作符一起使用,它指明了操作的是哪个归档文件。tar -cf archive.tar file1tar -xf archive.tar若未指定 -f,tar 默认操作的是磁带设备文件。示例组合用法
1. 创建并压缩目录:tar -czvf backup.tar.gz /home/user
2. 只查看归档内容,不解压:tar -tvf archive.tar.gz
3. 解压归档文件到指定目录:tar -xzf archive.tar.gz -C /path/to/extract
zip
-
语法参数
-r:递归,将目录及其内容压缩。 -j:忽略目录结构,仅压缩文件。 -q:安静模式,不输出压缩过程信息。 -v:详细模式,显示压缩的详细信息。 -9:最高压缩率(压缩率从 -0 到 -9,-9 最慢但压缩效果最好)。 -m:压缩后删除源文件,移动文件到 .zip 文件中。 -o:设置压缩文件的日期为最新文件的日期。 -e:加密,压缩过程中需要输入密码。 -P:设置密码(不安全,建议用 -e 代替)。 -
压缩目录递归子目录及文件
zip -r archive.zip directory/ -
压缩单个文件
zip archive.zip file.txt -
加密压缩
# 提示输入密码 zip -e archive.zip file.txt # 命令行直接设置密码 zip -P your_password archive.zip file.txt -
解压到当前目录
unzip archive.zip -
解压到指定目录
unzip archive.zip -d /path/to/destination/ -
rm
rm参数
# rm 命令的常用参数:(rm是个高危操作)
-f:# 强制删除,不提示确认。 不加f删除每个文件前都需要确认
-i:# 每次删除时提示一次确认。
-I:# 在删除多个文件或目录时才提示确认。
-r:# 等同于-R 递归删除目录及其中的文件。
-v:# 显示正在删除的文件或目录。
-d:# 删除空文件夹?
比较安全的删除方式
# 先显示会被删除的文件 然后删除前会进行一次确认
echo rm -rf 20240908*
rm -rf -I 20240908*
删除前提示 双与符方式
echo rm -rf dir1* && rm -rf -I dir1* && echo rm -rf dir2* && rm -rf -I dir2*
删除前提示 多行命令方式
echo rm -rf dir1* && rm -rf -I dir1*; \
echo rm -rf dir2* && rm -rf -I dir2*
scp
scp (Secure Copy)
-
语法参数
# secure copy scp [选项] 源文件 目标路径 -r:递归复制文件夹。 -P:指定 SSH 端口(默认是 22 端口)。 -C:在传输过程中压缩数据。 -i:指定私钥文件,用于身份验证。 -q:安静模式,抑制非错误信息。 -
scp文件(上传)
scp会直接覆盖目标端文件 没有提示
不加用户默认使用当前登录用户
目标端不加文件名也行
scp -P 5000 zxrw_jjzx_yjj.dmp 14.16.4.42:/srv/BigData/elasticsearch/esnode4/backup20240911
scp -P 5000 ./file1.log root@14.16.4.59:/srv/file1.log
- scp文件(下载)
scp -P 5000 root@14.16.4.57:/srv/file1.log ./file1.log
- scp目录
scp -r -P 5000 ./dir1 root@14.16.4.59:/srv/dir1
-
A to B
此命令会将 host1 上的文件复制到 host2,无需将文件下载到本地。
scp user1@host1:/path/to/file user2@host2:/path/to/destination/
rsync
rsync (Remote Sync)
-
远程同步文件
rsync -av -e "ssh -p 5000" ./iso7.5.repo 192.168.1.66:/etc/yum.repos.d
文本操作
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
grep
grep (Global Regular Expression Print)
全局正则表达式打印
-
语法参数
grep [选项] '模式' [文件...] -i:不区分大小写。 -v:反向匹配,显示不匹配模式的行。 -r 或 -R:递归查找子目录。 -n:显示行号。 -l:仅显示匹配模式的文件名。 -c:只显示匹配的行数。 -A NUM:显示匹配行及其后面 NUM 行。 -B NUM:显示匹配行及其前面 NUM 行。 -C NUM:显示匹配行及其前后各 NUM 行。 -
默认在文件中查找包含 pattern 的所有行grep "pattern" file.txt -
|从标准输入中搜索patterncat file.txt | grep "pattern" -
-i默认`在文件中查找包含 pattern 的所有行(不区分大小写)grep -i "attern" file.txt -
-v反向查找,排除匹配的行grep -v "pattern" file.txt -
-l只显示包含匹配内容的文件名,不显示具体内容(用于在多个文件中搜索时快速定位文件)。grep -l "pattern" *.txt -
-c只输出匹配的行数,不显示具体内容grep -c "pattern" file.txt -
-n显示匹配行的行号grep -n "pattern" file.txt -
-rin复合查找grep -rin 'hello' /path/to/directory递归查找
/path/to/directory中包含hello的行,且不区分大小写,并显示行号。 -
与逻辑| grep 5000 |grep 9000 -
或逻辑grep -E "8123|9000"注意只要是引号内对象前后不能加空格!空格也会被认定为参数内容
xargs
xargs(extended arguments)
扩展参数
-
语法参数
xargs [options] [command [command-args]] -n, --max-args=MAX-ARGS:每个命令行最多使用 MAX-ARGS 个参数(每次传递给命令的参数数量) -P, --max-procs=MAX-PROCS:最多同时运行 MAX-PROCS 个进程 -p, --interactive:在运行命令之前进行提示 -t, --verbose:在执行命令之前打印命令 -0:与 -print0 结合使用,处理包含空格或特殊字符的文件名 -
逐行处理输出
-nls | xargs -n 1 echo这个命令将
ls输出的每个文件名逐个传递给echo命令。 -
**对特殊字符处理
-0**find . -name "*.log" -print0 | xargs -0 rm这个命令安全地删除包含空格或特殊字符的
.log文件。 -
执行每一
批命令前确认echo "file1 file2 file3" | xargs -p rm这个命令在删除
file1、file2和file3之前会询问用户确认。
sort
# 正排序
sort
# 倒排序
sort -r# 按指定行
sort - k
cat
cat (Concatenate)
连接
-
语法参数
cat [OPTION]... [FILE]... -n:为所有输出的行加上行号。 -b:为非空行加上行号(空行不编号)。 -s:压缩多个空行为一个空行。 -
合并文件
cat file1.txt file2.txt > merged.txt -
创建文件
cat > newfile.txt -
追加内容
cat anotherfile.txt >> targetfile.txt -
tac行倒序输出行
echo -e "1\n2\n3" > a.txt tac a.txt 3 2 1
head
head -n 30 prolog.txt
tail
tail -100 ggserr.log
# tail follow
tail -f -n 100 ggserr.log
more
# 逐页阅读文本
more file1
less
大文件工具 分页加载 不占内存
-
语法参数
less filename.txt -N:显示行号 -S:不自动换行 -X:不清屏 -F:内容适合一页时直接显示 -i:忽略大小写搜索 -p <pattern>:自动定位到匹配的模式 -g:只高亮当前匹配项 -m:显示详细提示信息 +/ <pattern>:启动时搜索 -r / -R:显示控制字符 -
操作说明
向下翻页:按 Space(空格键)或者 PgDn(Page Down)。 向上翻页:按 b 或 PgUp(Page Up)。 向下滚动一行:按 j 或箭头键 ↓。 向上滚动一行:按 k 或箭头键 ↑。 跳至文件开头:按 g。 跳至文件末尾:按 G。 搜索:按 / 后输入搜索关键词,然后按回车。可以使用 n 和 N 在匹配项之间跳转(n 向下查找,N 向上查找)。 退出 less:按 q。
vim
vim (Visual IMproved)
改进版Vi
-
向下搜索
pattern。/pattern -
向上搜索
pattern?pattern -
搜索并替换
# 在整个文件中将 old 替换为 new。 :%s/old/new/g# 在替换前提示确认 :%s/old/new/gc# 其他标志: i: 忽略大小写 c: 确认每次替换 g: 替换每一行中的所有匹配项
网络管理
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
IP
IP (Internet Protocol)
互联网协议
ip a
ifconfig
dns
DNS (Domain Name System)
域名系统
cat /etc/resolv.conf
-
虚系统设置IP为本机同IP段的IP
-
完成,别写错字尤其是GATEWAY(真TM坑)
-
#Centos7之前 vi /etc/sysconfig/network-scripts/ifcfg-eth0 #Centos7之后 vi /etc/sysconfig/network-scripts/ifcfg-ens33
IP参数注释
UUID=39b9e1b8-73b2-4eb3-bb79-72cdbacdd997 #唯一识别码
DEVICE=eth0 # 网卡设备名
HWADDR=00:0C:29:01:4D:22 # MAC地址
TYPE=Ethernet # 类型为以太网
ONBOOT=yes # 是否启动网络服务,eth0生效
BOOTPROTO=static # 是否自动获取IP(none、static、dhcp)
IPADDR=192.168.0.118 # IP地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.0.1 # 网关
DNS1=111.11.1.1 # 主DNS
DNS1=111.11.1.1 # 备DNS
IPV6INIT=no # IPV6未开启
NM_CONTROLLED=yes # 是否可以由network manager图形管理工具托管
USERCTL=no # 禁止非root用户控制次网卡
重新加载网络配置
#entos6
service network restart
#centos7查看状态
systemctl status network.service
#centos7重启
systemctl restart network
不能使用service和systemctl
没有安装NetMamager的情况
nmcli c reload ens33
# 重载所有ifcfg或route到connection(不会立即生效)
nmcli c reload ifcfg-ens33
# 重载指定ifcfg或route到connection(不会立即生效)
nmcli c load /etc/sysconfig/network-scripts/ifcfg-eth0
nmcli c load /etc/sysconfig/network-scripts/route-eth0
# 立即生效connection,有3种方法
nmcli c up ens33
nmcli d reapply eth0
nmcli d connect eth0
netstat
netstat (Network Statistics)
网络统计
netstat -anutp
netstat -anltup | grep 808
netstat -tunlp | grep 7809
lsof
lsof (List Open Files)
列出已打开文件
lsof -i
lsof -i:7809
firewall
- firewall file command
systemctl restart firewalld
systemctl status firewalld.service
- 显示防火墙白名单列表(基于配置文件)
firewall-cmd --list-all
# 增加IP/端口(基于配置文件)
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="14.31.107.58" port protocol="tcp" port="5000" accept"
# 移除IP/端口(基于配置文件)
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="14.16.4.75" port protocol="tcp" port="9100" accept"
text area
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="14.31.107.66" port protocol="tcp" port="8123" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="14.121.160.63" port protocol="tcp" port="16200" accept"
vim /etc/firewalld/zones/public.xml
<-->开放14.31.107.66的9111端口</-->
<rule family="ipv4"><source address="14.31.107.66"/><port protocol="tcp" port="9111"/><accept/>
</rule>
- 端口段
<rule family="ipv4"><source address="14.16.3.0/24"/><port protocol="tcp" port="1-65535"/><accept/>
</rule>
- firewall configration command
永久生效,需要reload或restart
不加 “–permanent” 参数默认为临时生效
以下命令不会显示在配置文件中,只能使用 “–list-ports” 参数查询
# 开放端口列表
firewall-cmd --list-ports --permanent
# 增加端口
firewall-cmd --zone=public --add-port=1521/tcp --permanent
# 移除端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --zone=public --remove-port=8081/tcp --permanent
- firewall for services
# 已开放的服务
firewall-cmd --list-services
# 可操作的服务列表
firewall-cmd --get-services
# 开放指定服务
firewall-cmd --enable service=ssh
# 移除指定服务
firewall-cmd --disable service=ssh
# 常用示例
firewall-cmd --add-service=mysql
firewall-cmd --add-service=http
- firewall service disable / enable
# status
systemctl list-unit-files | grep firewalld.service
# enable
systemctl enable firewalld.service
# disable
systemctl disable firewalld.service
- firewalld start / stop
# status
systemctl status firewalld.service
# start
systemctl start firewalld.service
# stop
systemctl stop firewalld.service
# reload
systemctl reload firewalld
# restart
systemctl restart firewalld
- 漏洞扫描-禁用 ICMP
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p ICMP --icmp-type timestamp-request -m comment --comment "deny ICMP timestamp" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type timestamp-request -m comment --comment "deny ICMP timestamp" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p ICMP --icmp-type timestamp-reply -m comment --comment "deny ICMP timestamp" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type timestamp-reply -m comment --comment "deny ICMP timestamp" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type 0 -m comment --comment "deny traceroute" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type 3 -m comment --comment "deny traceroute" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type 11 -m comment --comment "deny traceroute" -j DROPfirewall-cmd --direct --get-all-rules
firewall-cmd --reload
- 端口转发transpond
# 将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# 将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080
远程交互安全
远程SSH限制
-
限制所有
vim /etc/hosts.deny插入一行:
sshd:ALL -
开放指定IP
vim /etc/hosts.allow插入一行:
sshd:192.168.0.241
远程端口修改
auth:wangjing
date:2021-03-24 01:06
sshd
listener statuts
netstat -tunlp | grep sshd
service status
systemctl status sshd
edit config
vim /etc/ssh/sshd_config
restart service
systemctl restart sshd.service
selinux管理
yum install policycoreutils-python
yum provides semanage
selinux status
semanage port -l | grep ssh
add port
semanage port -a -t ssh_port_t -p tcp 5555
delete port
semanage port -d -t ssh_port_t -p tcp 5555
SELINUX Sets
不建议的操作
vi /etc/selinux/config
SELINUX=enforcing(强制)
permissive(宽容)
disabled(关闭)
hints
使用ssh工具连接5000端口,测试是否成功。如果连接成功,则再次编辑sshd_config的设置,将里边的Port22删除
之所以先设置成两个端口,测试成功后再关闭一个端口,是为了方式在修改的过程中,万一出现掉线、断网、误操作等未知情况时候,还能通过另外一个端口连接上去调试以免发生连接不上必须派人去机房,导致问题更加复杂麻烦。
远程超时时间
查看超时时间
echo $TMOUT
设置超时时间
vim /etc/profile
export TMOUT=600 # 600秒无操作自动退出登录
readonly TMOUT # 防止非root用户更改
使配置生效
source /etc/profile
取消超时
unset TMOUT
进程程序
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
kill
kill -9
kill -15
ps -ef | grep chrome | awk '{print $2}' | xargs kill -9
ps auxw | grep orarootagent.bin | grep -v grep
nohup
nohup (No Hang Up)
不挂起
- 后台运行
nohup java -jar /path/to/mhlg69.jar > /path/to/mhlg69.log &
- 不挂断运行+后台运行
(2定向到&1 定向到 test.log)0输入 1输出 2错误
nohup java -jar /path/to/mhlg69.jar > /path/to/mhlg69.log 2>&1 &
crontab
查看日志
grep CRON /var/log/cron
编辑 crontab
crontab -e
添加定时任务,按照以下格式添加定时任务
* * * * * <你的命令>
每个星号代表的时间单位为: - 第1个星号:分钟(0 - 59) - 第2个星号:小时(0 - 23) - 第3个星号:日期(1 - 31) - 第4个星号:月份(1 - 12) - 第5个星号:星期几(0 - 7,0和7都是星期日)例如,如果你想每天上午8点执行命令:0 8 * * * <你的命令>
- 超长命令方案:
创建一个脚本文件:
vim /path/to/script.sh
在脚本中写入你的长命令:
#!/bin/bash
/path/to/command --option1 value1 --option2 value2 --option3 value3 --option4 value4
保存并关闭编辑器。然后确保脚本有可执行权限:
chmod +x /path/to/script.sh
在 crontab中调用脚本:
0 8 * * * /path/to/script.sh
软件管理
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
rmp
rpm (Red Hat Package Manager)
红帽包管理器
-
rpm查看是否安装
rpm -qa|grep cpp
yum
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
yum (Yellowdog Updater, Modified)
Yellowdog 更新管理器的修改版
1.挂载本地iso镜像
-
将系统镜像拷贝到
opt目录(常规路径) -
创建挂载目录
mkdir -p /media/iso -
临时一次性挂载
mount -o loop /opt/CentOS-7-x86_64-DVD-1908.iso /media/iso -
配置自动挂载方式
编辑
/etc/fstab文件,添加以下行以在启动时自动挂载:/opt/CentOS-7-x86_64-DVD-1908.iso /media/iso iso9660 loop 0 0 -
使fstab配置生效
[root@192 iso]# mount -a mount: /dev/loop0 is write-protected, mounting read-only -
检查挂载是否成功
# 列出所有已挂载的文件系统 mountls -l /media/iso
2.配置本地yum源
-
创建或编辑 yum 源配置文件
/etc/yum.repos.d/local.repo,并指定挂载目录:[LocalRepo] name=Local Repository baseurl=file:///media/iso enabled=1 gpgcheck=0 -
禁用其他yum源
如果仍然存在其他 YUM 源(如
/etc/yum.repos.d/CentOS-Base.repo或其他 repo 文件),请禁用它们。可以通过在文件中将enabled=1改为enabled=0来实现(当然也可以直接将其他库移出备份到其他目录)。vim /etc/yum.repos.d/CentOS-Base.repo # 在其他yum源增加或者修改参数(每一个都加) enabled=0 -
更新缓存
sudo yum clean all sudo yum makecache -
现在本地可以使用yum了
sudo yum install -y gcc readline-devel zlib-devel bison flex perl
3.远程yum源服务
服务节点:配置 HTTP 服务共享挂载目录
-
安装 HTTP 服务器(如 Apache):
yum install httpd -y -
配置 HTTP 服务:
创建符号链接
ln -s /media/iso /var/www/html/centos检查符号链接是否正确
ls -l /var/www/html/正确的会显示浅蓝色,错误的符号链接显示会红色 或者 红底字闪烁
如果符号链接创建不正确 可以删除重建
rm -rf /var/www/html/centos -
启动 HTTP 服务:
systemctl start httpd systemctl enable httpd -
关闭防火墙或者放行 HTTP 端口(确保外部节点可以访问)
firewall-cmd --permanent --add-service=http firewall-cmd --reload -
测试http服务是否正常
curl http://192.168.1.201/centos/
访问节点:配置yum源
-
创建yum源文件
cd /etc/yum.repos.d/ vim /etc/yum.repos.d/repo201.repo[repo201] name=Repo201 baseurl=http://192.168.1.201/centos enabled=1 gpgcheck=0 -
清理并更新缓存
yum clean all yum makecache -
测试yum源可用性
yum repolist -
尝试安装个小包测试
yum install wget
4.yum管理软件包
-
查看yum源中所有可用包
yum list available -
查询
# 已安装
yum list installed
# 带@是已经安装的
# base是linux自带的软件包
# Centos7.4-BM 是安装BM时,BM提供的软件包# 软件详细信息
# 查资源库里的
yum list zipyum info clickhouseyum search ifconfig
yum -y install net-tools.x86_64
资源库目录
/etc/yum.repos.d
- 安装
yum -y install clickhouse-server
yum -y install clickhouse-client
yum 资源库和本地列表
带@是已安装的
yum list | grep clickhouse
yum 已安装列表
yum list installed | grep clickhouse
yum 增加库
/etc/yum.repo.d/xxx.repo
scp iso7.6.repo 14.16.4.20:/etc/yum.repos.d/iso7.6.repo
yum 重新加载库
yum clean all
vsftpd
vsftpd (Very Secure FTP Daemon)
非常安全的FTP守护进程Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
说明: 匿名用户模式和本地用户模式只可同时配置一种。
一、安装
yum方式
yum install -y vsftpd
rpm方式
#查看
rpm -qa | grep vsftp
#安装
rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm
#卸载
rpm -e vsftpd
开机自启
systemctl enable vsftpd.service
二、操作
重启
systemctl restart vsftpd.service
查看监听端口
netstat -antup | grep ftp
查看进程
ps -aux|grep vsftpd
三、用户
创建用户
useradd zcdj
passwd zcdj
查看用户
cat /etc/passwd
删除用户
userdel zcdj
四、目录
创建目录
mkdir /data2/ftp/upload
目录授权
chown -R zcdj:zcdj /data2/ftp/upload
查看授权
此命令也可设置权限,待补充
getfacl /data2/ftp/upload
五、配置
主配置文件
#打开以下参数
pasv_min_port=61001
pasv_max_prot=62000
#启动服务就会出现如下报错:
Jan 04 11:09:53 13.novalocal systemd[1]: Starting Vsftpd ftp daemon...
Jan 04 11:09:53 13.novalocal vsftpd[131021]: 500 OOPS: unrecognised variable in config file: pasv_max_prot
Jan 04 11:09:53 13.novalocal systemd[1]: vsftpd.service: control process exited, code=exited status=2
Jan 04 11:09:53 13.novalocal systemd[1]: Failed to start Vsftpd ftp daemon.
Jan 04 11:09:53 13.novalocal systemd[1]: Unit vsftpd.service entered failed state.
Jan 04 11:09:53 13.novalocal systemd[1]: vsftpd.service failed.#如不增加此参数则无法打开防火墙?
其他配置文件
添加例外用户名单
使用vim命令编辑chroot_list文件,添加例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
说明: 没有例外用户时,也必须创建chroot_list文件,内容可为空。
vim /etc/vsftpd/chroot_list
Shell脚本
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
man
man (Manual Pages)
查看命令的手册页
-
语法参数
man [OPTION]... [COMMAND] -k:通过关键字搜索手册页。 -f:显示与命令匹配的手册页概述。 -a:显示所有匹配的手册页。 -
查看命令的手册页
man ls -
通过关键字搜索手册页
man -k keyword -
查看命令的手册页概述
man -f command -
显示所有匹配的手册页
man -a command
which
# 显示命令全路径
which cd
多行命令续行
echo "This is a \
multi-line \
command"
逻辑符命令拼接
# 双与符 && 执行成功后执行后面的命令
echo 111 && echo 222# 双或符 && 执行失败后执行后面的命令,执行成功后不执行
echo 111 || echo 222
cd XXX || echo 222# 分号 && 无论是否成功都执行后面的命令
echo 111 ; echo 222
设置会话字符集
export LANG=en_US.UTF-8
管道符
-
语法和参数
|(管道符):将一个命令的标准输出(stdout)作为下一个命令的标准输入(stdin)。
-
示例:
-
cat输出文件内容,grep过滤包含"pattern"的行,sort对结果进行排序。cat file.txt | grep "pattern" | sort -
ps aux显示进程信息,grep过滤包含"apache"的进程,awk提取进程号。ps aux | grep apache | awk '{print $2}'
重定向符
重定向符 <, >(1>), >>, 2>, &>, |&
-
标准输出
>和 追加输出>>>:将命令的标准输出重定向到文件,覆盖原有内容。ls > files.txt>>:将命令的标准输出追加到文件末尾。echo "New entry" >> files.txt -
标准输入
<<:将文件内容作为命令的输入。sort < file.txt -
错误输出
2>2>:将标准错误输出(stderr)重定向到文件。command 2> error.log -
同时重定向输出与错误输出
&>&>:将标准输出和标准错误输出都重定向到文件。command &> output.log -
错误通过管道传递
|&|&:将标准输出和标准错误一起通过管道传递给下一个命令。command1 |& command2
按日期统计文件数
ls -l --time-style=+%Y-%m-%d | awk '{print $6}' | sort | uniq -c
-
按日期统计注释
--time-style=+%Y-%m-%d:将文件的修改日期格式化为“年-月-日”,忽略具体时间。 awk '{print $6}':ls -l 输出的第 6 列是文件的修改日期,awk 提取这一列。 sort:对提取出的日期进行排序。 uniq -c:统计每个日期出现的次数,也就是统计每天的文件数量。
拙劣的脚本
-
生成删除命令的脚本
#!/bin/bash # 生成带确认的删除命令 # 2024-09-14 17:58:54:wangjing power by chatgpt4 # 1. 日期格式:脚本接受的日期格式是 YYYYMMDD,并根据输入的开始和结束日期生成命令。 # 2. 日期递增:脚本使用 date 命令递增日期,并将其格式化为 YYYYMMDD 格式。 # 3. 生成命令:每次循环都会生成一行 echo rm -rf -I <date>* && rm -rf -I <date>; 的命令。# 示例用法: # 假设你需要从 20240911 到 20240913 生成命令,你可以这样运行: # ./script.sh 20240911 20240913# 生成的输出将会是: # echo rm -rf -I 20240911* && rm -rf -I 20240911; # echo rm -rf -I 20240912* && rm -rf -I 20240912; # echo rm -rf -I 20240913* && rm -rf -I 20240913;# 生成带确认的删除命令 # 2024-09-14 17:58:54:wangjing power by chatgpt4# 检查输入参数 if [ "$#" -ne 2 ]; thenecho "Usage: $0 <start_date> <end_date>"echo "Dates should be in format YYYYMMDD"exit 1 fistart_date=$1 end_date=$2current_date=$start_datewhile [ "$current_date" -le "$end_date" ]; do# 生成并输出命令if [ "$current_date" -ne "$end_date" ]; thenecho "echo rm -rf -I ${current_date}* && rm -rf -I ${current_date}; \\"elseecho "echo rm -rf -I ${current_date}* && rm -rf -I ${current_date}"fi# 日期递增(使用 date 命令)current_date=$(date -I -d "$current_date + 1 day" | sed 's/-//g') done
工具配置
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
常见问题
-
xhell删除键映射问题
属性 终端 键盘 把backspace和delete改成 ASCII 127 -
linux Terminal too wide
vi报错 屏幕太宽
# q退出 stty -a stty columns 132
相关文章:
linux 中文实用型手册 基于RHEL(红帽系)
硬件系统 Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing. 硬件信息 机器型号 dmidecode | grep "Product Name"CPU型号 cat /proc/cpuinfo |grep "model name" | uniqWWWCPU详情 lscpuCPU个数 cat /proc/cpuinfo |grep &q…...
Hash表算法
哈希表 理论知识(本文来自于代码随想录摘抄)什么是哈希常见的三种哈希结数组:set:map:其他常用方法或者技巧(自己总结的) 练习题和讲解有效的字母移位词349. 两个数组的交集1. 两数之和454. 四数相加 II15. 三数之和 总…...
MySQL企业常见架构与调优经验分享
文章目录 一、选择 PerconaServer、MariaDB 还是 MYSQL二、常用的 MYSQL 调优策略三、MYSOL 常见的应用架构分享四、MYSOL 经典应用架构 观看学习课程的笔记,分享于此~ 课程:MySQL企业常见架构与调优经验分享 mysql官方优化文档 调优MySQL参数 一、选择 …...
C++引用类型变量
引用变量的主要用途是用作函数的形参。这样函数将使用原始数据,而不是副本。除指针之外,引用也为处理大型结构提供了一种非常方便的途径。 再C中使用&符号标识引用。也就是说C给&符号赋予了另一个含义,将其用来声明引用。 引用的声…...
《C++23 新特性:现代软件开发的变革力量》
在软件开发的快速演进中,C作为一种强大且广泛应用的编程语言,不断推陈出新以适应日益复杂的开发需求。C23 的到来,为现代软件开发带来了诸多新的机遇和挑战。它的新特性不仅影响着开发者的编程习惯,也在代码效率、可维护性以及软件…...
Educational Codeforces Round 88 E. Modular Stability
题目链接 Educational Codeforces Round 88 E. Modular Stability 思路 对于任意的非负整数 x x x,我们要满足 x % a % b x % b % a x \% a \% b x \% b \% a x%a%bx%b%a。因为 a < b a < b a<b,所以只有 b b b为 a a a的倍数时才满足条件…...
Android中SurfaceView与GLSurfaceView 的关系
SurfaceView 与 GLSurfaceView 的关系 在 Android 开发中,SurfaceView 和 GLSurfaceView 是实现自定义渲染效果的关键组件。它们提供了不同的渲染方式,适用于不同的应用场景。我们将通过以下几个方面详细说明 SurfaceView 和 GLSurfaceView 的特点及实现…...
numpy——数学运算
一、标量——矢量 import numpy as npa 3.14 b np.array([[9, 5], [2, 7]])print(a) print(b)# ---------- 四则运算 ---------- print(a b) # np.add print(a - b) # np.subtract print(a * b) # np.multiply print(a / b) # np.divide 二、矢量——矢量 import nump…...
【工具】Charles对360浏览器抓包抓包
Charles 和 switchy sharp 配合,可以对 Chrome 进行抓包也可以配合对360安全浏览器抓包。 本文以Windows 电脑中的配置为例,介绍如何实现抓包。(Mac中操作基本一致) 1.安装Charles 可根据自己的电脑下载对应的版本:…...
【HarmonyOS】判断应用是否已安装
【HarmonyOS】判断应用是否已安装 前言 在鸿蒙中判断应用是否已安全,只是通过包名是无法判断应用安装与否。在鸿蒙里新增了一种判断应用安装的工具方法,即:canOpenLink。 使用该工具函数的前提是,本应用配置了查询标签querySch…...
Qt Designer客户端安装和插件集(pyqt5和pyside2)
GitHub - PyQt5/QtDesignerPlugins: Qt Designer PluginsQt Designer Plugins. Contribute to PyQt5/QtDesignerPlugins development by creating an account on GitHub.https://github.com/PyQt5/QtDesignerPlugins 一、下载客户端 https://github.com/PyQt5/QtDesigner/rel…...
基于边缘计算的智能门禁系统架构设计分析
案例 阅读以下关于 Web 系统架构设计的叙述,回答问题1至问题3。 【说明】 某公司拟开发一套基于边缘计算的智能门禁系统,用于如园区、新零售、工业现场等存在来访被访业务的场景。来访者在来访前,可以通过线上提前预约的方式将自己的个人信息…...
鸿蒙实现相机拍照及相册选择照片
前言: 1.如果你的应用不是存储类型或者相机拍照类型,你就需要用 kit.CameraKit Api 实现相机拍照和相册选择照片功能,如果你不用这个的话,你使用 picker.PhotoViewPicker ,你就需要申请权限,那你提交应用审…...
「C/C++」C++17 之 std::filesystem::recursive_directory_iterator 目录及子目录迭代器
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...
智能EDA小白从0开始 —— DAY30 冉谱微RFIC-GPT
在科技日新月异的今天,电子设计自动化(EDA)行业正以前所未有的速度推动着半导体产业的革新与发展,引领着全球电子产业迈向更加智能化、高效化的未来。作为EDA领域的佼佼者,冉谱公司始终站在技术创新的前沿,…...
Android -- 调用系统相册之图片裁剪保存
前言 最近线上反馈,部分vivo手机更换头像时调用系统相册保存图片失败,经本人测试,确实有问题。 经修复后,贴出这块的代码供小伙伴们参考使用。 功能 更换头像选择图片: 调用系统相机拍照,调用系统图片…...
读《道德经》让人感到心胸气闷?董仲舒篡改
为什么读《道德经》会让人感到心胸气闷?难道是董仲舒篡改所致? 作为世界智慧源头的《老子》,享誉古今中外,是世界历史上最伟大的著作之一。 然而,很多人读《道德经》时会感到心胸气闷,这究竟是为什么呢&am…...
D52【python 接口自动化学习】- python基础之模块与标准库
day52 标准库 学习日期:20241029 学习目标:模块与标准库 -- 67 标准库:Python默认提供的便携功能有哪些? 学习笔记 标准库中的常见组件 如何通过官方文档学习标准 from urllib.request import urlopen with urlopen(http://ww…...
基于yolov8的布匹缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】
更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 基于yolov8的布匹缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili (一)简介 基于yolov8的布匹缺陷检测系统是在 PyTo…...
SQL Server 中,将单行数据转换为多行数据
在 SQL Server 中,将单行数据转换为多行数据通常涉及到将某个字段中的逗号分隔的值拆分成多行。这种操作通常称为“拆分”或“展开”(Explode)。以下是一些常用的方法来实现这一目标: 1. 使用内置函数 STRING_SPLIT 从 SQL Serv…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
