【LinuxC高级】汇总

ls

ls -l:显示文件的详细信息

ls -a:显示隐藏文件

ls -lh:文件大小单位显示

ls -i:显示文件的inode号

 修改密码

passwd 用户名

su 用户名 -----> 用户名

su ----> 如果不加用户名,默认切换到超级用户

cd

cd 路径(可以是相对路径,也可以是绝对路径)

cd -----> 切换到当前用户的家目录

pwd 直接回显当前的绝对路径

新建文件/文件夹

touch 文件名 ----> 创建文件

touch 同名文件名 -----> 会更新时间戳

mkdir 目录名 ----> 创建目录名

mkdir 同名目录名 ----> 报错:文件已存在

cp/mv

cp 拷贝文件

cp 源文件的路径 目标文件的路径 (拷贝目录时需要再命令的后面加上 -r 选项)

mv 移动文件 (重命名)

mv 源文件的路径 目标文件的路径

rm

rm 文件名 ----> 删除文件

rmdir 目录名 -----> 删除空目录

rm -r 目录名 -----> 删除目录

 shell指令

1.用户、shell、内核、硬件之间的关系

用户在命令行提示符下键入命令文本,开始与Shell进行交互。

接着,Shell将用户的命令或按键转化成内核所能够理解的指令

控制操作系统做出响应,直到控制相关硬件设备。

然后,Shell将输出结果通过Shell提交给用户。

 文件相关的操作

head

head 文件名 -----> 回显文件的前十行内容到终端

head -n 文件名 -----> 回显文件的前n行内容

tail

tail 文件名 ------> 回显文件的后10行内容到终端

tail -n 文件名 ------> 回显文件的后n行内容

| 管道符

将前一个命令的输出结果作为后一个命令的输入

shell指令1 | shell指令2

wc(word count)

wc 文件名 ---> 回显文件行数、单词数、字符个数

wc -l 文件名 ---> 回显文件行数

wc -w 文件名 ---> 回显文件中单词的个数

wc -c 文件名 ---> 回显文件中字符的个数

通配符

通配符

含义

*

匹配一个或多个字符

?

匹配一个字符

[...]

匹配其中指定的一个字符

[-]

匹配指定一个字符范围

[^...]

除了其中指定的字符都可以

[[:lower:]]

匹配所有小写字母

[[:upper:]]

匹配所有大写字

 find

常用文件名来查找文件

find 指定路径 -name 文件名

用于模糊查找文件(当文件数量比较多时)

find 指定路径 -name *.c ---> 查找 指定路径下 所有的 .c 结尾文件

涉及*,存在转义问题,如果查找结果不对,就加上 \ -----> find 指定路径 -name \*.c

如果加上*导致报错,就直接使用

file *

file 文件名 ---> 显示文件的信息

file a.out

a.out: 文件名

ELF:类型

64-bit LSB shared object:小端存储

x86-64:64位操作系统

version 1 (SYSV):版本

dynamically linked, interpreter /lib64/l:动态链接的库

for GNU/Linux 3.2.0:gcc 编译器的版本 BuildID[sha1]=d0331b1eef2ecb7710b847e23849e40b98b323d9:动态ID

not stripped:文件没有被压缩,arm课程会讲到

grep

grep按照字符串查找内容

grep "要查找的字符串" 要查找的路径

-n:回显查找到字符串的行数

-R:查找的路径可以是目录,-R会进行递归查找

-i:不区分大小写的查找

-w:按单词查找关键字

查找以ubuntu开头的一行内容

grep "^ubuntu" /etc/passwd -n

查找hello.c中以;结尾的一行

grep ";$" hello.c

cut

cut -d "分隔符" -f "要截取的区域" 文件名

-d: 自定义分隔符,默认为制表符\t

-f: 与-d一起使用,指定截取哪个区域

grep root /etc/passwd -wn | cut -d ":" -f "1,8" ---> ("1,8" 截取第1个和第8个区域)

 压缩和解压缩

三种压缩工具:gz、bz2、xz

压缩: gzip 要压缩的文件名 ---> 自动生成.gz后缀的压缩文件

bzip2 要压缩的文件名 ---> 自动生成.bz2后缀的压缩文件

xz 要压缩的文件名 ---> 自动生成.xz后缀的压缩文件

特点:

1. 只能对单个的普通文件进行压缩

2. 不能进行归档,压缩后或解压后源文件都不存在

解压: 指定后缀的文件,需要用相同的压缩工具进行解压

gunzip 要解压的文件名

bunzip2 要解压的文件名

unxz 要解压的文件名

三种压缩工具的对比

压缩效率:xz > bz2 > gz

压缩时间:xz > bz2 > gz

gz用于临时的传输,xz用于文件的长期存储

打包并压缩和拆包解压

zip

压缩:

zip 命令用于将一个文件或多个文件压缩成单一的压缩文件 .zip

zip 压缩文件名 要压缩的文件列表

注意:

        a. 具有归档动能,并进行压缩

        b. 可以压缩文件夹,后缀 .zip,压缩文件夹需要加 -r

        c. 压缩或解压后源文件依然存在

解压:

unzip 要解压的压缩文件

tar

打包并压缩

选项:

-x:释放归档文件

-c:创建一个新的归档文件

-v:显示归档和释放的过程信息

-f:用户指定归档文件的文件名,否则使用默认名称 后跟文件名

tar -cvf 打包后生成的文件名.tar 要打包的文件列表

tar 指令已然依赖,压缩工具完成压缩:

-j:由 tar 生成归档,然后由 bzip2 压缩 .bz2

-z:由 tar 生成归档,然后由 gzip 压缩 .gz

-J:由 tar 生成归档,然后由 xz 压缩 .xz

tar -cvjf xxx.tar.bz2 要压缩的文件列表

tar -cvzf xxx.tar.gz 要压缩的文件列表

tar -cvJf xxx.tar.xz 要压缩的文件列表

拆包解压

如何拆包

tar -xvf 要拆包的文件

如何拆包并解压

仍然可以使用压缩工具的参数进行解压缩

tar -xvjf xx.tar.bz2

tar -xvzf xx.tar.gz

tar -xvJf xx.tar.xz

文件权限相关的操作

chgrp ----> 修改文件的所属组

 sudo chgrp 新的组名 文件名

chown ---> 修改文件的所属用户

sudo chown root xxx ---> 将xxx文件的所属用户改为root用户

sudo chown root: xxx ---> 将xxx文件的所属用户和所属组改为root用户

sudo chown :ubuntu xxx ---> 将xxx文件的所属组改为ubuntu

sudo chown ubuntu:root xxx ---> 将xxx文件的所属用户改为ubuntu,将xxx所属组改为root

链接文件的创建

硬链接文件

ln 被链接的文件(源文件) 生成的链接文件名(新文件)

(可以使用绝对路径,也可以使用相对路径)

硬链接文件的注意事项:

1. 硬链接文件和源文件拥有相同的inode号

2. 一个文件修改,另一个文件也会跟着发生修改

3. 删除源文件/链接文件,链接文件/源文件不受影响仍然存在,文件硬链接个数为0时才会被删除

4. 删除掉源文件后,即使创建一个和源文件同名的文件,也和硬链接文件之间不存在链接关系

5. 硬链接文件的文件类型是-,就是一个普通文件

6. 目录不能创佳绩硬链接

7. 和源文件是同一文件

 软链接文件

ln -s 被链接的文件(源文件) 生成链接的文件名(新文件)

软链接文件的注意事项:

1. 和源文件是两个不同的文件

2. 文件类型是l

3. 创建时一般使用绝对路径

4. 一个文件修改,另一个文件也会跟着发生修改

5. 如果源文件被删除,软链接文件会失效,在之前的位置创建一个同名的源文件软链接文件会重新生效

6. 在软链接文件失效的情况下,vim打开文件并保存退出,实际上是新创建了一份源文件保存并退出

7. 软链接文件可以链接目录

8. 拷贝目录的软链接可以拷贝,如果需要拷贝普通文件的软链接文件,需要加上 -d 选项保证链接属性依然存在

 用户相关的操作

 用户相关的配置文件

  1. /etc/passwd:存储用户的详细信息
  2. /etc/group:存储已有的用户组的信息
  3. /etc/shadow:存储用户密码

用户相关的指令

whoami ---> 查看当前用户

id -u ---> 查看当前用户的uid,选项后面不加用户名,默认查看当前登录用户的信息

id -u root ---> 查看指定的root用户的信息

id -g ---> 查看当前用户gid(组id)

id ---> 查看当前用户的信息

新建用户

sudo adduser 用户名 (新建用户必须使用sudo权限)

创建新用户时,会默认创建一个新用户同名的组并将新用户添加到该组中

sudo addgroup -g 组用户名 添加组用户(可以通过/etc/group查看组是否添加成功)

删除用户

sudo deluser 用户名 ---> 删除用户,但是不会删除用户的目录(残留目录可以直接使用rm -r 删除)

sudo userdel -r 用户名 ---> 删除用户的同时,删除用户的目录

sudo deluser --remove-home 用户名

开关机相关的操作

关机

sudo shutdown ---> 立即关机

sudo shutdown 时间 ---> 定时关机

sudo shutdown +10 ---> 在10分钟后关机

重启

sudo reboot ---> 立即重启

sudo shutdown -r ---> 立即重启

sudo shutdown -r 时间 ---> 定时重启

sudo shutdown -r +10 ---> 在10分钟后重启

磁盘相关的操作

查看U盘是否链接成功

ls /dev/sd*

如果终端回显包含除了ada外的其他内容,说明U盘链接并识别

所有sda开头的全部都是ubuntu镜像 自己的空间

对磁盘分区

查看磁盘使用率

df -h

如果U盘刚连入虚拟机,就可以使用df -h指令查找到,说明U盘被自动挂载

磁盘分区

需要使用到 fdisk 工具

sudo apt-get install fdisk (没有就下载软件)

sudo fdisk /dev/sdb ---> 要对整个磁盘进行分区

m:显示提示

p:打印已有的内存分区

n:新建分区

d:删除分区

q:不保存退出

w:写入磁盘并退出

格式化

格式化操作,一般是对具体分区的格式化

sudo mkfs.文件系统类型 分区名

sudo mkfs.ntfs /dev/sdb1

格式化错误:

说明分区已经被挂载(使用状态),需要取消挂载

sudo umount /dev/sdb1

挂载

sudo mount 要挂载的分区名 要挂载的目录

sudo umount 要取消挂载的分区

sudo umount 要取消的挂载点(挂载目录) ---->如果U盘是自动挂载到Linux中使用挂载点取消挂载有时会失效

sudo mount /dev/sdb1 /home/ubuntu/udisk

shell脚本

编程语言的分类

  1. 编译型语言:C、C++ 需要编译器
  2. 解释型语言:shell、python 需要解析器

操作系统架构

应用层:app、代码、shell命令

                    |                         |shell解析器

                C库                         |

                                 |

——————————————系统调用—————————————————————— 内核层:五大功能

        内存管理

        文件管理

        设备管理

        网络管理

        进程管理 ———————————————————————————————————————————— 硬件层:鼠标、键盘

shell ----> 贝壳

起到保护内核的作用,将内核和用户隔离开来

第一个shell脚本

#!/bin/bash ##说明使用的shell解析器

echo hello world #输出hello world

#在shell中表示注释

echo打印指令,将hello world输出

#! ------>用于指明该脚本默认使用的shell解析器

执行脚本的三种方式

bash 文件名

通过shell解析器,直接解析脚本,bash即是解析器

bash shell.sh

执行过程:

        在后台打开一个终端,在后台执行指令,将结果返回给当前终端

直接运行脚本

需要给脚本文件添加可执行文件

chmod 777 shell.sh         执行:./shell.sh

 source 脚本名

 不需要给脚本添加可执行权限

source 脚本名

执行过程:

        执行脚本和返回结果都在当前终端

shell中的变量

shell中的格式

变量名=变量的值

变量名='变量的值' ---> 用于变量的值中间有空格

变量名="变量的值" ---> 用于使用已有变量的值和空格拼接给新变量赋值时(只要需要用已有变量的值都建议加"")

HELLO=hello

WORLD="$HELLO world"

=两侧不能有空格

' '内不能使用$展开变量的值

 如何访问变量

$变量名 ---> 获取变量的值

${变量名} ---> 获取变量的值,为了更好区分变量名的范围

修饰变量的关键字

readonly :只读变量,只不能更改

unset :清空变量的值,不能清空

readonly修饰变量的值 local :定义局部变量,只能在函数中使用

 外部传参/位置变量

$0 ---> 执行的脚本名

$1-$9

$n ---> n >= 10,必须加上{}

${10}-${n}

$# ---> 获取所有外部参数的个数(不包括脚本名)

$* 或者 $@ ---> 获取所有的外部参数(不包含脚本名)

输出

echo 输出内容(将内容回显到终端,并自动换行)

echo默认不解析转义字符

echo -n 输出内容 ------>取消echo输出时的换行

echo -e "hello\n" ------->解析转义字符

输入

read 变量名 ---> 直接加变量名即可

read -p "提示信息" 变量名 ---> 在终端给用户输入提示信息

read -s 变量名 ---> 输入的信息不回显

read -t 秒数 变量名 ---> 如果用户n秒不输入,就结束输入并向后执行语句

read -n 个数 变量名 ---> 如果输入n个字符,输入自动停止

命令置换符

1. `指令` (反引号)

2. $(指令)

shell中的运算

(())

常用于shell中的整数算术运算

使用方法:

  1. (())几乎支持所有的C语言语法,还支持shell中幂运算**
  2. ((表达式1, 表达式2, 表达式2, ...)) 每个表达式都会执行,获取最右侧一个表达式的结果
  3. 想要获取运算结果,需要使用 $(()),还可以((变量名=表达式))
  4. 在(())中,使用变量,可以加$,也可以不加
  5. 在(())中,运算符两侧可以有空格

$[]

使用方法:

  1. 变量名=$[表达式1,表达式2,表达式3,·······]只获取最右侧表达式的结果
  2. 使用变量时,可以加$也可以不加$
  3. 运算符两侧可以加空格,也可以不加空格
  4. 仍然支持幂运算
  5. $[]的结果,建议直接按照"变量名=$[]"格式接收,因为$[]本质上,会遗留一个运算结果在表达式的位置,如果不接受继续向后运行指令会报错

expr

expr是一个终端指令

使用方法:

  1. expr 中使用变量,必须加$
  2. 如果想要接收expr的结果,必须使用命令置换符
  3. expr中运算符两侧必须有空格,不支持自增、自减和shell中幂运算
  4. expr中使用某些运算符是,需要转义|、>、
  5. expr指令的结果,可以直接回显到终端上,可以使用命令置换符接收
  6. expr操作数值不能为空

 let

 

使用方法:

  1. let运算时,运算符两侧一定不能有空格
  2. let 变量名=表达式 ---> let和变量名中一定要有空格
  3. let运算时,可以加$,也可以不加
  4. 如果直接写成 let 表达式,表达式会运行,但是没有办法接收

 shell中的数组

定义

c语言中的数组

int arr[32];

int arr[] = {};

int arr[3] = {1, 2, 3};

shell中的数组

数组名=(val1 val2 val3 ...)

# shell中的数组,不需要写出数组长度

# shell中的数组初始化时,直接使用()

# shell中的数组每个元素之间是空格,不是逗号

# 访问仍然需要通过下标,下标从0开始

采用键值对的方式赋值

数组名=([下标值]=val1 [下标值]=val2 ...)

arr=([9]=1 [0]=4 ...) 下标可以不连续

采用列表名的方式赋值

列表名="val1 val2 val3 ..."

数组名=($列表名)

通过分别定义数组变量的方式赋值

数组名[0]="val1"

数组名[1]="val2"

访问数组中的元素

只要在shell中需要使用变量的值,都需要用 $ 进行访问

${数组名[下标]} ---> 获取数组中指定下标的元素值

获取数组中所有元素

${数组名[*]} ---> 获取数组中的所有元素

${数组名[@]} ---> 获取数组中的所有元素

获取数组中元素的个数

${#数组名[*]} ---> 获取数组中元素的个数

${#数组名[下标]} ---> 获取数组中指定下标元素的长度(字符个数)

对数组元素重新赋值

数组名[下标]=新值

稀疏数组

使用已有的数组给新的数组赋值

arr=(1 2 3 4 5)

arr1=(a b c d)

arr2=(${arr[*]} ${arr1[*]}) # 拼接加空格

echo ${arr2[*]}

echo ${#arr2[*]} # 9

if分支结构

if对整数进行判断

if对字符串进行判断

if对文件的判断

case...in分支结构

while循环结构

for循环结构

select..in语句

辅助控制关键字

 shell中的函数

 

Makefile

Makefile文件由:规则、变量、条件编译、函数构成

规则的构成

 Makefile中的变量

预定义变量

 引入自动变量和通配符

伪目标

在Makefile中,有些目标并不需要生成文件,也没有文件依赖,往往把这样的目标定义为伪目标,为了防止,因为存在和目标同名的文件而不能执行目标的情况发生。

直接将目标定义为伪目标.PHONY

.PHONY:目标

引入函数

 wildcard

功能:根据给定的条件,获取指定的文件名(找文件名的功能)

$(wildcard 指定字符串的格式)

$(wildcard *.c) ---> 找到当前路径下,所有.c文件的文件名

patsubst

功能:模式匹配替换字符串

$(patsubst 源格式,目标格式,要替换的字符串)······

$(patsubst %.c,%.o,main.c add.c) ---> 获取到 main.c add.c字符串,根据模式匹配,得到 main.o add.o 字符串

每一个参数之间以逗号作为分隔,要替换的字符串之间以空格作为分隔

 Makefile文件

EXE=main

FILES=$(wildcard *.c)

OBJS=$(patsubst %.c,%.o, $(FILES))

CC=gcc

CFLAGS=-c -g -Wall -o

all:$(EXE)

$(EXE):$(OBJS)

        $(CC) $^ -o $(EXE)

%.o:%.c

        $(CC) $(CFLAGS) $@ $<

.PHONY:clean

clean:

        $(RM) $(OBJS) $(EXE)

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

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

相关文章

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;“松鹤长春”则成为了整个社会的共同期待。 根据…

【初阶数据结构】排序——插入排序

目录 前言直接插入排序希尔排序 前言 排序&#xff1a;所谓排序就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。排序算法&#xff0c;就是如何使得记录按照要求排列的方法。   例如&#xff1a;买东西时会根据销量或价…

java并发编程笔记 之 线程和进程

文章目录 前言线程线程优先级和时间片创建多线程及运行线程的状态 进程查看进程的命令进程的通信方式 线程和进程的区别从关系上疑问集锦 前言 并发 1、并发是指在同一时间段内&#xff0c;计算机系统能够处理多个任务的能力。 2、在并发编程中&#xff0c;我们可以理解为多个…

代码随想录算法训练营第三十九天 | 198.打家劫舍 ,213.打家劫舍II,337.打家劫舍III

第三十九天打卡&#xff0c;今天解决打家劫舍系列问题&#xff0c;树形dp比较难。 198.打家劫舍 题目链接 解题过程 dp[i]&#xff1a;考虑下标i&#xff08;包括i&#xff09;以内的房屋&#xff0c;最多可以偷窃的金额为dp[i]。 要么不偷这一间&#xff0c;那就是前面那间…

毕业设计选题:基于ssm+vue+uniapp的校园失物招领小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

大瓜-CSP-J/S2024第一轮认证题目涉嫌泄露。竞赛公平能否维护?

2024年全国信息学奥赛&#xff08;CSP-J/S&#xff09;泄题事件在竞赛界掀起了巨大的波澜。这场赛事本应是全国最具公信力的编程竞赛之一&#xff0c;但部分题目在考试前已被某些培训机构押中&#xff0c;这一泄题行为不仅让考生与家长感到愤怒&#xff0c;也让公众对奥赛的公平…

scp 命令:在两台主机间远程传输文件

一、命令简介 ​scp​ 命令使用 SSH ​加密的方式在本地主机和远程主机之间复制文件。 ‍ 二、命令参数 格式 scp [选项] 发送方主机和目录 接收方主机和目录注意&#xff1a;左边是发送方&#xff0c;右边是接收方。固定格式。 示例 #示例1 scp ~/test.txt soulio172.1…

豆包MarsCode体验

这个AI助手贴合做题者的思路&#xff0c;可以实时对代码进行分析&#xff0c;提出纠错、优化、规范性意见&#xff0c;非常好用。

基于数据挖掘的航空客户满意度分析预测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 航空公司致力于提供多样化的服务以满足乘客需求&#xff0c;包括但不限于提供免费无线网络、免费食物饮品、提供网上预约服务、飞机出口位置、座椅舒适度、卫生状况等&#xff0c;并希望以此提升乘…

构造者模式多种实现方式

构造者模式 ​ 构造者模式建议将对象构造代码从产品类中抽取出来&#xff0c; 并将其放在一个名为构造者的独立对象中 ​ 构建者模式也是用来创建对象&#xff0c;但是相对于工厂模式来说&#xff0c;建造者模式适用于构建复杂对象&#xff0c;而工厂模式适用于创建对象的封装…

asp.net core日志与异常处理小结

asp.net core的webApplicationBuilder中自带了一个日志组件,无需手动注册服务就能直接在控制器中构造注入&#xff0c;本文主要介绍了net core日志与异常处理小结&#xff0c;需要的朋友可以参考下 ILogger简单使用 asp.net core的webApplicationBuilder中自带了一个日志组件…

网络安全-长亭雷池waf的sql绕过,安全狗绕过(5种绕过3+2)

目录 一、环境 二、讲解 三、绕过前思路整理 3.1 思路 3.1.1 入门思路 0x00截断filename 3.1.2 双写上传描述行(差异绕过&#xff09;【成功】 3.1.3双写整个 part 开头部分 3.1.4 构造假的 part 部分 1【成功】 3.1.5 构造假的 part 部分2【成功】 3.1.6 两个 bounda…