自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1548)
  • 资源 (19)
  • 收藏
  • 关注

原创 Linux: dev: cmake --help-policy CMP0115

今天遇到一个新的policy,有点奇怪,感觉老的行为更方便一点。算是cmake新版导致的一个行为改变。继续使用原来的行为。

2025-05-08 05:45:26 383

原创 [晕事]今天做了件晕事75 as: unrecognized option ‘--gdwarf-4‘

说是不认识的as选项。那就是gcc传递进来的这个参数,as不认识,最后调查的原因是在本地手动编译过gcc-11 这个版本,但是as对应的版本是8.5。binutils和gcc的版本不匹配导致。

2025-05-08 05:39:58 253

原创 Linux:network: errno :101 destination unreachable

这个原因是:route cache的最大个数值设置的太小,只有4K。如果系统需要的cache记录很多,导致后续的添加不上了,就会出现destination unreachable。在内核的log里应该会有很多相关的日志。最近看到一个destination unreachable的例子,这个问题的情况还是第一次遇到,记录在这里以防下次碰到类似的问题。后来系统的默认设置都非常大。应该出现的几率非常小。

2025-05-07 11:10:06 12

原创 第一次听说:dell avamar 备份恢复产品

Avamar服务器则是整个系统的核心,负责存储、管理和恢复备份数据。Dell EMC Avamar是一种备份和恢复解决方案,它通过先进的技术和功能帮助企业实现数据保护目标。快速备份和恢复:Avamar的去重技术使得备份速度显著加快,同时支持快速数据恢复,确保业务连续性。扩展性:Avamar服务器可以轻松扩展以支持更多的数据和客户端,适应企业不断增长的需求。集中管理:Avamar提供集中管理和监控功能,使企业能够轻松管理备份任务和资源。安全性:Avamar提供强大的加密功能,确保备份数据的安全性和完整性。

2025-05-07 09:38:52 7

原创 Linux: zmq: memory leak,隐藏的坑

这个就比较烦人了,因为没有根本解决,就是一个隐藏的坑。每个人都有很大概率会遇到相似的问题,而且遇到问题的人都需要从网上搜索,查看这个问题,然后找到workaround。下面这个链接,说了一个zmq可能产生memory leak的场景。所以谁有时间来调查问题?

2025-05-06 11:43:45 98

原创 Linux: tools: memory: valgrind: massif

提到了使用masif来分析问题。发现使用这个工具可以查看heap的使用详情,这个是非常有用。有时候使用valgrind的memcheck工具,检查不到问题,因为这个内存一直到程序退出的时候才会释放。工作中肯定会有此类问题。所以这个工具还是相当有用的。

2025-05-06 10:00:37 118

原创 [英语单词] from under

意思是我们还在使用这些数据,绝不许被删除,可能导致诸如segv之类的严重问题。所以需要使用rcu_read_lock和rcu_read_unlock来包围,读取代码段。最近在看RCU的资料,读到下面的一句,感觉总是特别怪怪的,就是从单词的组合角度,记录一下。,这些数据是我们站立的一个基石,绝不能被删掉。

2025-05-02 19:24:20 326

原创 学习:困?

在多处理器的系统中,软件必须考虑到,除了参与分页结构条目修改的当前处理器之外,其他的处理器的TLB和分页结构缓存中可能也有这个分页结构条目。其实困的主要原因是,在大家的对当前上看的整体逻辑思路不清晰,脑力训练不够。比如下面这一句,就比较长,其实要在脑子里需要一个可用存储信息的栈空间,来整体理解这个话的含义。当然数学课,需要的栈空间,内存空间,关联空间会更大。在包含多个逻辑处理器的系统中,软件必须考虑到,除了用于修改分页结构条目的逻辑处理器之外,其他逻辑处理器的 TLB 和分页结构缓存中可能存在条目。

2025-05-02 19:10:41 691

原创 Linux:network: mtu: 隐形知识frag_max_size

这个知识点绝对有隐蔽性,一般上层很少需要关注这类细节。

2025-04-30 09:06:17 279

原创 Linux: filesystem: fcntl

原因是:建议性锁:fcntl 设置的锁是建议性锁(advisory lock),而不是强制性锁(mandatory lock)。锁的范围:确保锁正确应用于文件的预期部分。在示例中,锁被设置为覆盖整个文件(l_start = 0 和 l_len = 0),这应该锁定整个文件。如果另一个进程使用不同的文件描述符打开文件,它也必须使用 fcntl 来检查锁,然后才能执行操作。锁的类型:确保锁的类型正确设置为写锁(F_WRLCK)。即使用下面的代码,将一个文件lock住,仍然不能控制器别的程序不能修改文件。

2025-04-29 07:42:28 16

原创 Linux: network: ipv6 mtu设置的限制,sysctl这条路

在修改设备的ip6MTU的时候,使用sysctl设置的这条路和ip link 修改的这条路是不一样的。这里注册的时候设置的。这里的extra2就是最大值的一个限制。

2025-04-29 07:40:32 130

原创 [晕事]今天做了件晕事74,mtu变了?1396

然后做了一个ping操作,要ping消息的大小是1400(但是加上ICMP6,IP6的头信息,总长度会超过1400)因为在GRE6隧道的peer端路由有一个设置,2620:0:62:124::911这个IP是隧道的另一端IP。去掉GRE需要的 44个字节,再去掉分片头8个encaplimit的预留,就是1396。在gre6的tunnel接口上设置的是1456;看了半天也没搞懂为什么本机回的这个mtu:1396是在哪里设置上去的!这里的580 sec,是大约10分钟的时长,就是这个MTU的有效时间。

2025-04-28 07:58:17 30

原创 Linux: network: gre6: mtu:encap_limit 多占用MTU的值;

这个是必须知道的一个知识点。要不就不要自己设置gre6相关MTU,以及相关route的MTU。

2025-04-28 06:10:01 152

原创 [晕事]今天做了件晕事73,添加操作与删除反着来?

最近做了一个配置大量IP的一个改进功能,在内存里存放这些IP的数据结构是一个数组。添加是挨个添加,在删除的时候,会遍历整个数组,找到相应的元素,做一些其他的处理,中间还会用到这个数组,处理完成之后,然后再删除。这个时候,如果所有的IP都做删除,这个时候,也行选择从后往前删,效率更高一些。要看具体的代码处理逻辑。

2025-04-24 10:36:53 118

原创 Linux:network:multicast 问题 VMware平台问题 又一例

VMware平台维护的同事说修改了一下配置,将IGMP的配置设置为默认值,并且将下面这个组播地址添加进来:Multicast range (224.1.1.0/24).后续的就没有问题再出现。看来VMware平台维护的人动了IGMP相关的配置。最近发现从其他VM过来的组播包,不时的有丢包的问题,从VM上抓包,源地址已经发了,就是在目的VM上抓不到。你要是问我具体是什么原因,我上回答不上来,因为没有再往下继续研究,因为访问不到底层的信息。这个时候就是没有别的办法了,就是VMware底层提供的虚拟网络有问题。

2025-04-23 09:11:13 252

原创 [晕事]今天做了件晕事72,取模运算,多线程同步

解释,假如两个线程,同事获取到cnt_snap的值是49,然后两个线程先后做loc_cnt的加加,接下来的cnt_snap的值可能是51。在代码里,多线程可能调用到的一个代码片段里,定义了一个临时变量,临时存放多线程可访问的变量,然后做取模运算。所以,最好的方式,是按照增量来做判断,如果增量大于50做相应的逻辑。最近在看一个问题,应该是一个多线程同步的问题。

2025-04-23 09:10:28 114

原创 Linux: network: UDP receive drop一例,recvbuff设置太小导致

因为业务量增加导致有些UDP的包丢了,继而导致业务处理受到影响。最后查看是因为socket的receive buff size设置是128K(内核里乘2是256K)这个文件的最后一列是drop的计数。修改buff到256K(内核512K)业务恢复正常。相应的错误计数使用netstat -s查看。

2025-04-22 10:12:04 468

原创 Linux: log:logrotate: diskspace full,rotate失败

如果磁盘空间不够用,logrotate就会失败,然后产生一个backup文件。logrotate有没有功能,可以不复制做压缩,或者将大文件删除掉?

2025-04-22 09:47:09 38

原创 Linux: network: qemu-kvm: tap 丢包?延迟

最近遇到一个现象上看是: 网络丢包的问题,问题点是host主机上创建的一个tap设备,名称是vnet22,和对应虚拟机上的virtio-net设备,名称是int0,之间,从vnet22上抓包可以看到,但是在int0上没有抓到。后续仔细看wireshark,根据IP里的id字段看,是vnet22发的包到了int0,但是时间上有delay,而后续重传的包没有deliver到int0,这个可能是qemu-kvm的实现机制问题。进一步分析为什么有delay,发现虚拟机上起了太多的高消耗CPU进程。

2025-04-21 07:57:28 28

原创 gdb:backtrace:显示问号又一例

那为什么内存错乱呢?因为这个程序是多线程,主线程已经进入到了exit过程,而上面那个对象所引用的是一个全局对象,所以内存已经被释放,这样已经进入到了未定义行为状态。出现coredump也不为过。发现这里的vtable的指针指向的完全不算SocketStream 类的虚函数表,而是INetSocket类的,所以说是内存完全就错乱了。dump这个虚函数表内容。这样算下来,call的地址就是0了,所有就出现了问号的显示。反汇编frame-1,dump寄存器。通过p命令查看stream对象。

2025-04-21 07:56:12 128

原创 Linux: security: openssh: ssh-agent: SSH_AGENT_PID;sigterm;systemd

在使用 systemd 时,可以通过配置服务单元文件来设置程序的返回值。通常,systemd 会将返回值非零视为错误,但可以通过 SuccessExitStatus 指令来指定哪些返回值应被视为成功。这样,systemd 就会将返回值 2 视为成功,而不会将其视为错误。exit返回的值是2;所以如果需要将ssh-agent设置为systemd的一个服务,需要对这个服务的返回值做特殊处理,怎么。可以根据环境变量kill之前的ssh-agent进程。之后,你可以重新启动或重新加载相关服务以应用新的配置。

2025-04-18 03:08:19 230

原创 Linux: command: timedatectl set-timezone, chrony, ntp

这个可以查看状态,比如下面的ntp链接有些问题。最终调用的是系统调用:adjtimex。是systemd提供的一个命令来查看时间相关的信息。

2025-04-18 03:05:23 159 1

原创 [晕事]今天做了件晕事71,_GNU_SOURCE

通过搜索发现需要include的头文件就是:netinet/in.h。加上这个头文件,还是出现找不到结构体的错误。最后通过仔细查看头文件,发现,这个结构体定义是在宏判断里:#ifdef __USE_GNU。说明要是有gnu相关的扩展功能。

2025-04-17 05:18:31 85

原创 [晕事]今天做了件晕事70,英语理解drop

其实这里的drop暗含的意思是丢下,也就是这个东西必须在手上,才能丢,如果本来就是在地板上,怎么再丢呢?为什么在脑子里会有,第二种理解的可能。感觉on the floor修饰packet。

2025-04-17 05:03:21 239

原创 Linux: network:synchronize_net

最近在看一个关闭af-packet的socket慢的问题,在相关的代码调用路径里有这个函数。synchronize_net 是一个用于网络子系统中的同步操作的函数。它确保在调用该函数之前启动的所有网络处理(例如软中断处理、定时器处理等)都已经完成。这对于确保网络子系统的安全更新和删除操作非常重要。具体来说,synchronize_net 的作用是等待所有正在进行的网络处理完成,以确保在进行某些关键操作(例如删除网络设备或修改网络配置)时不会有并发访问导致数据不一致或系统崩溃。

2025-04-16 03:27:56 41

原创 Linux:Vmware: 怎么dump vmcore

下面两个链接里有提供一些方法,来收取vmcore;

2025-04-16 03:24:24 162

原创 gdb: intel: movsl

这里的0x9c83c是一个字节数,不用再乘4. 641084+260729*4 = 1684000,这个可以计算ok没问题。最后发现,是传递进来的源内存地址空间,在copy的时候超出了时间new出来的内存空间。也就是第三个参数的值传递进来的错误了。根据esi/edi的值和传递进来的参数对比,差值是0x9c83c,说明已经copy了这么多的数据。在实际的内存分配是:638976,和641084差不多,所以可能还是内存分配的问题。memcpy传递进来的参数值。还是在说是内存访问错误。

2025-04-10 13:51:24 36

原创 gdb: 怎么查看vector的内容

这里是iMessages向量的第i个元素,然后调用所存类的成员函数:IncomingMessage。提示:You can’t do that without a process to debug.如果有一个vector的变量,在程序里可能使用所以来使用比如。怎么看这个vector里的内容呢?

2025-04-09 15:06:22 43

原创 gdb: backtrace: 显示问号的一个情况

在glibc的sysdeps/i386/i686/memcpy.S文件理,memcpy函数,在代码段理会向栈push一个eax,然后在调用movsl的时候出现coredump,这个时候,push eax这个操作会导致栈上的内容不全,从而导致gdb推理出现混乱。其实要根据gdb function backtrace的实现来说,它就是依据当时的esp/ebp寄存器的值,来往前推理整个函数调用栈。function backtrace如下,而且frame-1显示是一个无效的代码地址,然后显示了问号。

2025-04-09 13:04:45 181

原创 Linux: network: tcpdump: packets dropped by kernel

捕获缓冲区大小不足:tcpdump 使用的捕获缓冲区大小可能不足以容纳所有的数据包。捕获过滤器效率低:如果使用的捕获过滤器效率低,可能会导致内核处理更多的数据包,从而增加丢包的可能性。系统资源不足:如果系统的CPU或内存资源不足,可能会导致内核无法及时处理所有捕获的数据包,从而导致数据包丢失。网络流量过高:当网络流量非常高时,内核可能无法及时处理所有的数据包,导致部分数据包被丢弃。系统配置问题:某些系统配置可能会影响数据包捕获的性能,例如网络接口的配置、内核参数等。优化捕获过滤器,减少不必要的数据包捕获。

2025-04-08 15:05:32 766

原创 英语学习:单复数宏

在tcpdump的代码里对单复数的判断还有宏定义,第一次看到。这个单复数的语义还是非常的重要,尤其是用在合同/法律/等需要严格定义的地方。

2025-04-08 14:42:44 88

原创 ML:Sigmoid 饱和函数

当输入值 ( x ) 很小时, ( e^{-x} ) 会趋向于无穷大,导致 ( \sigma(x) ) 接近于0。在这些极端情况下,函数的输出变化非常小,即进入了饱和状态。总的来说,这篇论文确实非常重要,因为它为神经网络的计算能力提供了理论证明,并且在计算理论和人工智能领域产生了深远的影响。当 ( \sigma(x) ) 接近于0或1时,导数 ( \sigma’(x) ) 也会非常小,这进一步解释了饱和现象。理论基础:这篇论文为神经网络的理论基础提供了重要的贡献,帮助研究人员理解神经网络的潜力和局限性。

2025-04-07 14:35:58 387

原创 Linux: network :创建raw socket的时候

如果注册的是arp层的raw socket,最终二层ARP的处理是通过遍历ptype,会顺序调用arp_rcv/arp_process来完成neigbor的更新等操作,也会调用packet_rcv来将数据传递到socket上。创建socket的函数packet_create,会注册一个 packet_rcv相关的回调函数。这个函数负责将packet,skb的对象,放到socket queue里。

2025-04-07 14:34:53 185

原创 ML:Non-deterministic Turing Machine,简称 NTM

非确定性图灵机(Non-deterministic Turing Machine,简称 NTM)是一种理论计算模型,它与确定性图灵机(Deterministic Turing Machine,简称 DTM)类似,但有一个关键的区别:在每一步计算中,非确定性图灵机可以有多个可能的转移,而不是像确定性图灵机那样只有一个确定的转移。多重选择:在给定的状态和读到的符号下,非确定性图灵机可以选择多个不同的动作(例如,移动读写头、改变状态、写入符号等)。并行计算:非确定性图灵机可以被视为同时探索所有可能的计算路径。

2025-04-04 16:21:43 246

原创 Linux: network: 两台直连的主机业务不通

最近遇到一个问题,说一个主机发的包,没有到对端,一开始怀疑设定的bond设备的问题,检查了bond的设置状态,发现没有问题,就感觉非常的奇怪。所以问题的根本是,现在两台主机不是直连的状态。STP消息(BPDU,Bridge Protocol Data Units)主要由网络中的交换机设备发送和处理。这些虚拟交换机也支持STP协议,并会发送和处理STP消息,以防止虚拟网络中的环路。主要发送和处理STP消息的设备包括交换机、网桥、集成了交换功能的路由器、高级无线接入点、网络管理设备以及虚拟交换机。

2025-04-04 16:17:52 471

原创 英语学习:读科技论文的难处

每个处理单元,通过应用“sigmoidal” 标量非线性化,在所有单元之前状态的线性组合结果之上,然后形成一个新的数值,最后来更新自己的状态。其实这一句英语代表了一个过程,首先是需要所有单元之前的一个状态的线性组合,然后应用S标量非线性化,然后再更新状态。英语是完全的倒装了整个过程。每个处理器通过将“sigmoidal”标量非线性应用于所有单元的先前状态的线性组合来更新其状态。而且还要面临语言的差异性困难。比如这一句怎么翻译比较合适?我们就知道自己到底欠缺什么知识了,那是一个挨着一个的缺。

2025-04-03 05:18:42 633

原创 gdb: Python Exception <class ‘NameError‘> Installation error: gdb._execute_unwinders function is mis

这个方法的副作用是,会将所有的错误都输出到/dev/null,万一是其他命令执行错误,需要查看错误信息的时候,就不好办了,比如,如果一个数据类型的大小超过了max-value-size的大小,会有一个错误的提示,这个时候就看不到了,需要注意。如果编译gdb,不带python的支持,运行的时候会有下面这个提示,调试的时候,每一步都可能打出来这个警告,非常不友好,其实打一次就够了。所以可以考虑,将这个错误导向一个不用的临时文件?怎么抑制这个警告不停的打印呢?这个方法,会遇到问题。

2025-04-03 05:16:10 39

原创 [英语单词] Propagation

在工作中也经常用,尤其是软件版本管理里,如果产品维护的版本,分支比较多,在一个分支上的bug fix,可能要propagate到所有的分支。这个词propagation,如果是单按照传播是没有方向的,需要加一个参照物,或者背景之后,才能说是前向的还是后向的。相当于replicated 页表结构的改动传播到其他的processor。back-propagation,反向传播。【医】 传播, 繁殖, 持续培养。n. 增殖, 繁殖, 宣传。

2025-04-02 07:14:00 180

原创 英语单词: stride

这个是线性代数里的跨度概念,像几何里的三维物体,有长,宽,高。线性数据的表示也有:行,列,stride。n. 大步, 步幅, 步态, 进步。vt. 迈大步走, 跨过, 跨。vi. 迈大步走, 跨过, 跨。

2025-04-02 06:53:17 115

原创 Linux:glibc: No such file or directory

最后调查是,这个程序是32位的程序,而当前机器没有安装相应版本的glibc,导致没有相应的动态解释器:/lib/ld-linux.so.2。最后,还是要说一下,这个execv的返回值,找不到文件,也没有打印出来到底是哪一个文件没有。这个让人比较苦恼,如果可以直接知道哪一个文件缺了,问题就好解决了。可以确保当前文件夹下面有这个文件。使用strace和ldd显示下面的结果。是不是感觉没有思路,怎么可能是这个情况呢?最近编译了一个程序,运行的时候出现错误,

2025-04-01 13:49:25 153

免安装的perf程序,基于内核4.18.0-553.27.1

免安装的perf程序,基于内核4.18.0-553.27.1 ldd perf linux-vdso.so.1 (0x00007ffebbb64000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f57ed065000) librt.so.1 => /lib64/librt.so.1 (0x00007f57ece5d000) libm.so.6 => /lib64/libm.so.6 (0x00007f57ecadb000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f57ec8d7000) libelf.so.1 => /lib64/libelf.so.1 (0x00007f57ec6be000) libdw.so.1 => /lib64/libdw.so.1 (0x00007f57ec421000) libcrypto.so.1.1 => /lib64/lib

2024-12-07

图解socket级别的sk-forward-alloc分配

该PPT对socket级别的sk_forward_alloc做了详细的说明。有图解!

2024-11-07

iperf-rhel6

iperf免安装版,rhel-6版本。

2023-07-19

容量提高遇到的问题汇总

在增加产品内部IP、subnet、VLAN个数增加做的一个小总结。

2023-06-10

C,删除无用ifdef宏的工具

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=5575120baf228fa8a319b45294f974979efe29d7, not stripped, too many notes (256) https://mzhan017.blog.csdn.net/article/details/128826587

2023-02-03

MTU 相关知识总结点(一)

某些事物与我们的工作、生活、社会息息相关,却又不甚了解其内部实现运行机制。 MTU就是其中一个例子! 其实MTU 还好,起码有源码可以自己调查,有书籍可看。网络分享的经验。网络上的MTU的知识量非常庞大

2022-10-17

刨析极限的保号性(一)

刨析极限的保号性(一)

2022-10-03

性能优化实例分析(一)

根据Kernel的一个优化,做的一个小分析。

2022-09-29

一次kernel bug的分析过程

记录一次kernel bug的分析过程,万事开头难,希望此次是一个好的开端。

2022-08-30

cron-job-pam

介绍cron-job-pam之间的联系。

2022-08-14

通过interface名称,查询索引值

通过interface名称,查询索引值

2022-07-15

glibc configure后的中间文件

glibc configure后的中间文件包括 Makefile config.status

2022-06-09

数学题里的逆向思维(一)

数学题里的逆向思维(一)

2022-06-01

glibc-getopt

从glibc摘出来的getopt函数,可以直接运行产生coredump。有兴趣的可以下载研究。

2022-05-21

symbolic logic

symbolic logic

2022-05-18

ip添加vlan interface的strace日志

./strace ip link add link int0 name int0.1111 type vlan protocol 802.1Q id 1111 及ip link code 分析

2022-03-29

Linux绿色gdb,无需安装,支持c++对象

需要在/目录解压使用

2022-03-29

netlink查询数据时的避坑总结

netlink查询数据时的避坑总结

2022-03-29

避免挖坑-pselect 和select的使用

避免挖坑-pselect 和select的使用

2022-03-29

Netlink 实际操作代码,实际可以参考iproute源代码做,这里只是方便自己使用的一个样例

Netlink 实际操作代码,实际可以参考iproute源代码做,这里只是方便自己使用的一个样例

2022-03-12

Linux Kernel 日常分析总结

Linux Kernel 日常分析总结,函数调用流程图;持续更新中。

2022-02-16

RHEL8 Kernel 编译配置文件样例

RHEL8 Kernel 编译config配置

2022-02-16

timer_signal 实例

timer_signal 实例

2022-01-10

RFC_0826_ARP.docx

整理的word格式,加注释

2021-09-08

免安装strace strace.zip

免安装strace [root@vmtca-2003 strace-5.1]# ldd strace linux-vdso.so.1 (0x00007ffc14ffb000) librt.so.1 => /lib64/librt.so.1 (0x00007fe620539000) libc.so.6 => /lib64/libc.so.6 (0x00007fe620174000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe61ff54000) /lib64/ld-linux-x86-64.so.2 (0x00007fe620741000)

2021-07-20

gdb-10.1.tar.gz

免安装,免依赖,Linux系统可使用的gdb

2021-06-09

pktDump.cap

pktDump.cap

2021-04-13

Linux Kernel设置irq affinity选项的callback

dmesg 日志

2021-04-07

Net-Interface-1.016.tar.gz

http://search.cpan.org/perldoc?Net::Interface 对Redhat 8 做了适配,可以使用高级gcc版本来编译;

2021-01-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除