前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这条命令有可能断送DBA职业生涯,我今天真的执行了

这条命令有可能断送DBA职业生涯,我今天真的执行了

作者头像
DBA札记
发布2024-06-03 10:29:28
760
发布2024-06-03 10:29:28
举报
文章被收录于专栏:MySQL参数系列MySQL参数系列

前言

废话不多说,直接上图。

没错就是rm -rf *,就问你猛不猛吧?哈哈

这个是从库,没有读业务和其他下游同步,风险可控。但是大家还是要谨慎。我执行这个命令是因为我搜到的菜鸟教程的split命令案例错误导致我生成了大量小文件。没想到大名鼎鼎的菜鸟教程也会有问题,大家还用man或者tldr查看帮助手册吧。

AI 解析报错(问题答案由AI生成,使用前请测试验证)

Q:rm -f * -bash: /usr/bin/rm: Argument list too long 的原因是啥?

A:当你尝试使用 rm -f * 命令删除当前目录下的所有文件时,如果遇到错误信息 -bash: /usr/bin/rm: Argument list too long,这通常意味着你的当前目录下有大量的文件,多到超过了系统能够处理的参数列表长度限制。

这个问题可以通过以下几种方法解决:

使用 find 命令: 使用 find 命令可以递归地找到所有文件并删除它们。例如:

代码语言:javascript
复制
find . -type f -exec rm -f {} \;

这个命令会找到当前目录及子目录下的所有文件(-type f)并逐个执行 rm -f

分批删除: 你可以将文件列表分割成较小的部分,然后分别删除。例如,使用 xargs

代码语言:javascript
复制
find . -type f | xargs -n 100 rm -f

这里 -n 100 表示每次传递给 rm 的文件数量限制为100。

使用循环: 如果你不想使用 findxargs,也可以使用简单的循环来删除文件:

代码语言:javascript
复制
for file in *; do
  rm -f "$file"
done

注意,这种方法可能不会递归地删除子目录中的文件。

增加参数列表大小: 在某些情况下,你可以临时增加 shell 的参数列表大小限制。这可以通过设置 ARG_MAX 环境变量来实现,但这通常不推荐,因为它可能会影响系统的稳定性:

代码语言:javascript
复制
export ARG_MAX=1048576
rm -f *

请注意,这种方法可能会对系统性能产生影响,并且不是所有系统都支持这种方法。

使用 rsync 删除rsync 可以用来删除文件,并且它不受参数列表大小的限制:

代码语言:javascript
复制
rsync --remove-source-files --delete-excluded . /dev/null

这个命令会将当前目录同步到 /dev/null,实质上是删除所有文件。

选择哪种方法取决于你的具体需求和环境。在执行这些操作之前,请确保你了解它们的作用,并小心使用,因为删除文件是不可逆的操作。

追问(问题答案由AI生成,使用前请测试验证)

系统能够处理的参数列表长度限制,是在哪里定义的?系统能够处理的参数列表长度限制是由多个因素决定的,主要包括操作系统的内核参数和shell的配置。以下是一些定义参数列表长度限制的关键点:

  1. 操作系统内核参数
    • 在Linux系统中,参数列表的长度限制可以通过内核的 sysctl 设置进行调整。例如,kernel.pid_max 定义了系统可以处理的最大进程数,这间接影响了参数列表的大小,因为每个进程都需要在参数列表中被引用。
    • 另一个相关的内核参数是 fs.aio-max-nr,它定义了异步I/O操作的最大数量,这也会影响参数列表的大小。
  2. exec系统调用的限制
    • 在Unix-like系统中,exec 系统调用用于执行新程序。exec 调用的参数列表长度受到系统定义的 ARG_MAX 限制。这个值定义了传递给 exec 的参数列表的最大字节数。
  3. shell的配置
    • Bash shell 有一个 ARG_MAX 环境变量,它表示可以传递给命令的最大参数长度。这个值通常在 /etc/profile/etc/bash.bashrc 等配置文件中设置。
    • 如果没有显式设置,Bash 会尝试读取 /proc/sys/kernel/argmax 来获取这个值。
  4. 系统资源限制
    • 每个进程可以使用的内存和其他资源是有限的,这些限制也会影响到参数列表的大小。
  5. 硬件架构
    • 系统的硬件架构也会影响参数列表的大小。例如,32位系统和64位系统在内存寻址和处理能力上有所不同,这会影响到参数列表长度的限制。

要查看当前系统的 ARG_MAX 值,你可以使用以下命令:

代码语言:javascript
复制
getconf ARG_MAX

如果你需要调整参数列表的长度限制,可以通过修改内核参数或shell配置来实现,但请注意,这可能会对系统的稳定性和安全性产生影响。在进行这类调整之前,建议详细了解相关的系统文档和最佳实践。

结论

我模拟了删除大量小文件的过程,用strace追踪结果同样报错。

那我strace追踪一个小文件删除过程吧

代码语言:javascript
复制
root@huoshan1 /data_test2# strace rm -f aaa.txt 
execve("/usr/bin/rm", ["rm", "-f", "aaa.txt"], 0x7ffe6d888a30 /* 26 vars */) = 0
brk(NULL)                               = 0x560c3d84a000
arch_prctl(0x3001 /* ARCH_??? */, 0x7fffbdbb9df0) = -1 EINVAL (Invalid argument)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf0e583000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=18383, ...}) = 0
mmap(NULL, 18383, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e57e000
close(3)                                = 0
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\256\3\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2089936, ...}) = 0
lseek(3, 808, SEEK_SET)                 = 808
read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32
mmap(NULL, 3950816, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdf0df92000
mprotect(0x7fdf0e14e000, 2093056, PROT_NONE) = 0
mmap(0x7fdf0e34d000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bb000) = 0x7fdf0e34d000
mmap(0x7fdf0e353000, 14560, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdf0e353000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf0e57c000
arch_prctl(ARCH_SET_FS, 0x7fdf0e584680) = 0
mprotect(0x7fdf0e34d000, 16384, PROT_READ) = 0
mprotect(0x560c3bccc000, 4096, PROT_READ) = 0
mprotect(0x7fdf0e585000, 4096, PROT_READ) = 0
munmap(0x7fdf0e57e000, 18383)           = 0
getrandom("\xe8\xc0\x1b\x81\xbd\x2f\x31\x44", 8, GRND_NONBLOCK) = 8
brk(NULL)                               = 0x560c3d84a000
brk(0x560c3d86b000)                     = 0x560c3d86b000
brk(NULL)                               = 0x560c3d86b000
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2997, ...}) = 0
read(3, "# Locale name alias data base.\n#"..., 4096) = 2997
read(3, "", 4096)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=368, ...}) = 0
mmap(NULL, 368, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e582000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=26998, ...}) = 0
mmap(NULL, 26998, PROT_READ, MAP_SHARED, 3, 0) = 0x7fdf0e575000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=23, ...}) = 0
mmap(NULL, 23, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e581000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_TELEPHONE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_TELEPHONE", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=59, ...}) = 0
mmap(NULL, 59, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e580000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_ADDRESS", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_ADDRESS", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=167, ...}) = 0
mmap(NULL, 167, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e57f000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_NAME", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_NAME", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=77, ...}) = 0
mmap(NULL, 77, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e57e000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_PAPER", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_PAPER", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=34, ...}) = 0
mmap(NULL, 34, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e574000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=57, ...}) = 0
mmap(NULL, 57, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e573000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_MONETARY", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_MONETARY", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=286, ...}) = 0
mmap(NULL, 286, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e572000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_COLLATE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_COLLATE", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2586930, ...}) = 0
mmap(NULL, 2586930, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0dd1a000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_TIME", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_TIME", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3316, ...}) = 0
mmap(NULL, 3316, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e571000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=54, ...}) = 0
mmap(NULL, 54, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e570000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.utf8/LC_CTYPE", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=337024, ...}) = 0
mmap(NULL, 337024, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf0e51d000
close(3)                                = 0
ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0
newfstatat(AT_FDCWD, "aaa.txt", {st_mode=S_IFREG|0644, st_size=5, ...}, AT_SYMLINK_NOFOLLOW) = 0
unlinkat(AT_FDCWD, "aaa.txt", 0)        = 0
lseek(0, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
close(0)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

大家感兴趣可以把这段代码丢你大模型解释一下,哈哈

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA札记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • AI 解析报错(问题答案由AI生成,使用前请测试验证)
  • 追问(问题答案由AI生成,使用前请测试验证)
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档