shell简单技巧之一(含实用linux命令用法介绍)

文章目录

shell中可能经常能看到:>/dev/null 2>&1 (等价于 &> /dev/null )

#知识了解,在Linux系统中
    标准输出的文件描述符为     1       #1可以不写,默认就是1
    标准错误输出文件描述符为    2
    标准输入文件描述符为      0

#分解这个组合:“>/dev/null 2>&1” 为五部分。(其实专为此定义了一种特殊写法  &>  等价于 2>&1 )
    1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
    2:/dev/null 代表空设备文件
    3:2> 表示stderr标准错误
    4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
    5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"

#因此,>/dev/null 2>&1 也可以写成“1> /dev/null 2> &1”

#那么本文标题的语句执行过程为:
    1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
    2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

#最常用的方式有:
    command > file 2>file  与command > file 2>&1

#它们有什么不同的地方吗?
      1、首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command  > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
     2、 而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
     3、 从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。

理解管道符 |

# 定义(工作逻辑):将管道左边的标准输出 作为标准输入 传递给管道右边的命令

理解kill

## 介绍
    1、kill是一个进程,本身不具备杀死其他进程的能力,平时说用kill去杀掉某个进程,其实涉及进程与进程间的通讯
    2、kill工作逻辑,发送一个信号给对应的进程。大部分进程对收到的信号都有一套约定的处理方式如下
        # 比如 kill pid号7812    : 默认发送15信号给这个pid为7812的进程(至于程序如何处理信号,那是程序自己的事)

        2       # 退出信号(Tips:ctrl+c  是2信号)
        15      # 退出信号,
        9       # (特殊,不是向应用程序发信号,而是给系统进程发送信号,通知系统来杀该进程)

## 用法
    kill -2 pid     # 
    kiil -l         # (小写的L)罗列支持发送的信号,查看kill支持的信号
[root@localhost ~]# kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

输入输出介绍

    /dev/stdin      # 标准输入
    /dev/stdout     # 标准输出
    /dev/stderr     # 标准错误输出

几种远程运行shell脚本的方式

# 使用ssh通道,远程运行本地的shell脚本(保护shell脚本内容)
    ssh root@serverip 'bash -s' < /root/test.sh

借助/dev/vcs 实现查看linux物理终端屏幕输出

    # 原理:/dev/vcs 是特殊设备(虚拟控制台设备,允许用户读取第一个tty的屏幕内容),通过fold 命令设置输出宽度,并且过滤特殊字符
    fold -w 160 /dev/vcs1 | tr -cd '\11\12\15\40-\176' | awk 'NF'

    # 结合watch命令 可以近乎实时查看linux屏幕物理终端的输出内容
    watch "fold -w 160 /dev/vcs1 | tr -cd '\11\12\15\40-\176' | awk 'NF'"

linux查看tcp链接数

    ss -ant | grep ESTAB | wc -l

烤CPU模拟跑负载|CPU烤机

    cat /dev/urandom | md5sum

挂载的nfs机器,dh -h卡住不出数据,如何处理

思路:卸载了重新挂载
    mount -l     # 查看挂载情况
    umont -l     # 卸载掉重新挂载

dmesg 命令用法

# dmesg
    dmesg -L            # 用不同颜色进行标记显示
    dmesg --follow      # 持续观察输出
    dmesg -x            # 同时打印日志级别
    dmesg -l err        # 显示不同级别的日志(emerg|紧急系统不可用、alert|警告、crit|严重事件、err|错误事件、warn|警告事件、notice|、info|、debug|、)
    dmesg -l err,warn   # 同时显示多个级别的日志
    dmesg -f syslog     # 根据用户类别打印日志(kern|user|mail|daemon|auth|syslog|lpr|news)

# 实战案例
    dmesg | grep -i eth     # 看网卡相关
    dmesg | grep -i disk    # 看磁盘相关

linux下如何测试 主机TCP端口是否开启

1、telnet方式
    telnet x.x.x.x 80

2、ssh方式
    ssh -v -p 80 baidu.com    # (查看是否有 debug1: Connection established. 这一行,有表示监听)
    [root@WXY-docker ~]# ssh -v -p 80 baidu.com
    OpenSSH_8.0p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: Connecting to baidu.com [39.156.66.10] port 80.
    debug1: Connection established.

3、echo方式,第一种无显示表示正常监听,第二种就不行
    [root@WXY-docker ~]# echo >/dev/tcp/baidu.com/80
    [root@WXY-docker ~]# echo >/dev/tcp/baidu.com/801

    ^C^C-bash: connect: Interrupted system call
    -bash: /dev/tcp/baidu.com/801: Interrupted system call

如何让linux非交互式的用key登录另外一台linux

# 1、假设需要从A登录B,那么需要在A上配置(不配置的话,第一次登录就会让你输入yes,信任key)适用于CICD场景
    cat > ~/.ssh/config << EOF
Host *
  ServerAliveInterval=30
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null
EOF

# 2、给文件赋予权限
    chmod 600 -R ~/.ssh/config
    chmod 600 sd.pem

# 3、ssh 指定key 登录B
    [root@localhost ~]# ssh -i sd.pem root@10.15.11.58
    Warning: Permanently added '10.15.11.58' (ECDSA) to the list of known hosts.
    [root@C20240220069670 ~]# 

非交互式密码登录ssh

    ssh root:abcd1234@192.168.31.143

SSH 如何远程主机后,立马一次执行多个命令

# 方式一:多个分号隔开
    ssh root@10.10.10.42 'w ; date ; ls -lh'

    # 效果如下
    root@fuse01:~# ssh root@10.10.10.42 'w ; date ; ls -lh'
    20:17:22 up 123 days, 7 min,  0 users,  load average: 0.55, 0.66, 0.73
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    Fri 03 Nov 2023 08:17:22 PM CST
    total 4.0K
    drwxr-xr-x 2 3434 3434  56 Nov 30  2022 node_exporter

# 方式二:EOF追加方式
    ssh root@10.10.10.42 bash << EOF
    date
    ls -la
    uptime
    EOF

    # 效果如下
    root@fuse01:~# ssh root@10.10.10.42 bash << EOF
    date
    ls -la
    uptime
    EOF

    Fri 03 Nov 2023 08:18:54 PM CST
    total 48
    drwx------  5 root root   187 Oct 30 17:18 .
    drwxr-xr-x 17 root root   251 Apr 12  2021 ..
    -rw-------  1 root root  8791 Oct 30 17:18 .bash_history
    -rw-r--r--  1 root root   549 Dec 17  2021 .bashrc
    -rw-r--r--  1 root root    31 Apr 28  2023 .forward
    drwx------  3 root root    31 Apr 12  2021 .gnupg
    drwxr-xr-x  2 3434 3434    56 Nov 30  2022 node_exporter
    -rw-r--r--  1 root root   161 Jul  9  2019 .profile
    -rw-------  1 root root  1024 Mar 29  2023 .rnd
    -rw-r--r--  1 root root    75 Jul  3  2022 .selected_editor
    drwxr-xr-x  2 root root    75 Apr 12  2021 .ssh
    -rw-------  1 root root 10757 May  4  2023 .viminfo
    20:18:54 up 123 days, 9 min,  0 users,  load average: 0.65, 0.69, 0.73

# 方式三:将本地脚本传送到远程执行
    echo date > test.sh
    echo w >> test.sh
    ssh root@10.10.10.42 bash -s < test.sh

    # 效果如下
    root@fuse01:~# echo date > test.sh
    root@fuse01:~# echo w >> tets.sh
    root@fuse01:~# ssh root@10.10.10.42 bash -s < test.sh
    Fri 03 Nov 2023 08:20:35 PM CST
    20:20:35 up 123 days, 10 min,  0 users,  load average: 0.56, 0.66, 0.72
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

查看磁盘通电时长

root@fuse01:~# smartctl -A /dev/sda
smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.15.107-1-pve] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 4
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0032   100   100   ---    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   ---    Old_age   Always       -       16840
 12 Power_Cycle_Count       0x0032   100   100   ---    Old_age   Always       -       129
165 Total_Write/Erase_Count 0x0032   100   100   ---    Old_age   Always       -       10180463841036
166 Min_W/E_Cycle           0x0032   100   100   ---    Old_age   Always       -       335
167 Min_Bad_Block/Die       0x0032   100   100   ---    Old_age   Always       -       27
168 Maximum_Erase_Cycle     0x0032   100   100   ---    Old_age   Always       -       411
169 Total_Bad_Block         0x0032   100   100   ---    Old_age   Always       -       227
170 Unknown_Marvell_Attr    0x0032   100   100   ---    Old_age   Always       -       0
171 Program_Fail_Count      0x0032   100   100   ---    Old_age   Always       -       0
172 Erase_Fail_Count        0x0032   100   100   ---    Old_age   Always       -       0
173 Avg_Write/Erase_Count   0x0032   100   100   ---    Old_age   Always       -       374
174 Unexpect_Power_Loss_Ct  0x0032   100   100   ---    Old_age   Always       -       124
184 End-to-End_Error        0x0032   100   100   ---    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   ---    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   100   ---    Old_age   Always       -       0
194 Temperature_Celsius     0x0022   068   048   ---    Old_age   Always       -       32 (Min/Max 15/48)
199 SATA_CRC_Error          0x0032   100   100   ---    Old_age   Always       -       0
230 Perc_Write/Erase_Count  0x0032   100   100   ---    Old_age   Always       -       14673 13610 14673
232 Perc_Avail_Resrvd_Space 0x0033   100   100   004    Pre-fail  Always       -       100
233 Total_NAND_Writes_GiB   0x0032   100   100   ---    Old_age   Always       -       87549
234 Perc_Write/Erase_Ct_BC  0x0032   100   100   ---    Old_age   Always       -       207310
241 Total_Writes_GiB        0x0030   253   253   ---    Old_age   Offline      -       65716
242 Total_Reads_GiB         0x0030   253   253   ---    Old_age   Offline      -       3146
244 Thermal_Throttle        0x0032   000   100   ---    Old_age   Always       -       0

对 linux 进程 pid 占用 内存大小(单位 MByte) 进行排序

# 前面是pid  后面是占用内存的大小
root@pve:~# for i in `cd /proc;ls | grep "^[0-9]" | awk '$0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done 2>&1 | sort -k2nr | head
1083 34.3242M
1092 32.582M
1046 24.8203M
976 8.26172M
2547393 1.47656M
1031 0.144531M
682 0.101562M
967 0.078125M
434 0.0742188M
681 0.0625M

创建软链接、删除软链接

# ln -s 真实文件路径  链接文件路径      # 实现访问链接文件而访问真实文件
    ln -s /home/auto_install/iso /root/iventoy-1.0.19/

# 取消软链接
    unlink /root/iventoy-1.0.19/iso

centos6 使用 wget curl访问https, 因nss版本过低,需要--no-check-certificate 参数

    # 解决办法 请先升级nss
    yum -y update nss

freebsd光盘挂载freebsd磁盘,需要修复时如何处理

无法启动,挂载freebsd光驱,磁盘为/dev/da0s1a,挂不了说要修复
    fsck -fy /dev/da0s1a        # 修复后再挂载

freebsd 的pkg 软件源

http://pkg0.bme.freebsd.org/

shell脚本如何加密

# 简单加密方式(这种解密就是 gzexe -d xxx.sh)
    gzexe test.sh       # 执行完成后会生成两个文件 test.sh是加密的可执行文件  test.sh~ 是源文件的备份,

# shc加密shell脚本
    # Tips:缺点是可解密,且长脚本运行时 ps -ef 能看到内容
    # 安装加密软件   项目地址 https://neurobin.github.io/shc/    https://www.datsi.fi.upm.es/~frosal/
    yum install shc
    # 执行加密(会得到test.sh.x的可执行文件,这就是加密后的文件,注意-r的参数能让加密后的脚本在其他相同系统上运行)
    # 注意该方式混淆后的二进制仅支持 ./xxx.sh 这样执行。不支持 bash xxx.sh 这样执行
    shc -rf test.sh

    # 解密方式:github上的unshc脚本地址 https://github.com/yanncam/UnSHc/tree/master/latest
    # 也可以用我放在七牛上的备份  wget https://qiniu.wsfnk.com/bokefiles/unshc.sh   (注意 看介绍才知道:shc4.0.3版本的混淆的脚本 不能被unshc-v0.8解密)
    ./unshc.sh test.sh.x

# shc的另一个用法,让加密后的shell脚本在指定时间后 无法使用
    # 解决办法,把机器本地时间改掉就好了,哈哈
    shc -f test_old.sh -o test_new.sh -e "22/02/2024" -m "Hi 过期了,别想了,执行不了的"

# 附、另一个shell脚本加密方式
    # Tips:貌似未开放解密方法,但是局限是 加密脚本 通用性 很差 貌似C7 To C7没问题,其他就不行了
    https://github.com/louigi600/obash

mysql 如何删除表内信息,有两种方法

    1、delete 是 一条一条删除,会记录事务日志,可恢复
    2、truncate 不记录mysql日志,不能恢复数据,效率比 delete高

    mysql> delete from temp_data;
    mysql> truncate temp_data;

如何显示指定pci设备的信息(根据pci地址查看其详细信息)

[root@sv-gpu-node-001 ~]# lspci | grep VGA
0b:01.0 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200eW WPCM450 (rev 0a)
85:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Tesla M10] (rev a2)
86:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Tesla M10] (rev a2)
87:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Tesla M10] (rev a2)
88:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Tesla M10] (rev a2)

[root@sv-gpu-node-001 ~]# lspci -v -s 88:00.0
88:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Tesla M10] (rev a2) (prog-if 00 [VGA controller])
    Subsystem: NVIDIA Corporation Tesla M10
    Flags: fast devsel, IRQ 10, NUMA node 1, IOMMU group 79
    Memory at f7000000 (32-bit, non-prefetchable) [disabled] [size=16M]
    Memory at 39ff80000000 (64-bit, prefetchable) [disabled] [size=256M]
    Memory at 39ff90000000 (64-bit, prefetchable) [disabled] [size=32M]
    I/O ports at b000 [disabled] [size=128]
    Capabilities: [60] Power Management version 3
    Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [78] Express Endpoint, MSI 00
    Capabilities: [100] Virtual Channel
    Capabilities: [250] Latency Tolerance Reporting
    Capabilities: [258] L1 PM Substates
    Capabilities: [128] Power Budgeting <?>
    Capabilities: [420] Advanced Error Reporting
    Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
    Capabilities: [900] Secondary PCI Express
    Kernel modules: nouveau

column格式化展示

#原始数据
[root@C20220714367147 7.2.3]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=16322468k,nr_inodes=4080617,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)

#格式化后的数据
[root@C20220714367147 7.2.3]# mount | column -t
sysfs       on  /sys                             type  sysfs       (rw,nosuid,nodev,noexec,relatime)
proc        on  /proc                            type  proc        (rw,nosuid,nodev,noexec,relatime)
devtmpfs    on  /dev                             type  devtmpfs    (rw,nosuid,size=16322468k,nr_inodes=4080617,mode=755)
securityfs  on  /sys/kernel/security             type  securityfs  (rw,nosuid,nodev,noexec,relatime)
tmpfs       on  /dev/shm                         type  tmpfs       (rw,nosuid,nodev)
devpts      on  /dev/pts                         type  devpts      (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)

tr 字符转换命令

    -d b-d          :删除指定范围的字符(是删除所有b,c,d字符),删除b到d之间的所有字符
    -d 0-9          :删除所有数字。

    echo abcade | tr a-z A-Z        :表示将abcade中所有小写转换为大写,结果是ABCADE
    echo abcade | tr -d a-c         :删除所有a,b,c字符,结果是de
    echo abcaAe | tr "a-z" "\*"     # 将所有小写字符用*代替,结果是****A*

fuser 命令用法(找出umount块设备时占用块的进程id)

fuser 
    -n tcp 22       # 获取正在访问tcp 22端口的进程id。(结果必然包含sshd进程id,以及其他远程终端链接上来的进程id)

#实例一、获取访问指定端口的进程id
[root@C20230519381768 ~]# fuser -n tcp 22
22/tcp:                809  1226  1228
[root@C20230519381768 ~]# ss -tnlp | grep ssh
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=809,fd=3))                                                  
LISTEN    0         128                   [::]:22                  [::]:*        users:(("sshd",pid=809,fd=4)) 

#实例二、获取正在运行的指定程序的进程id
[root@C20230519381768 ~]# fuser -u /usr/bin/vi
/usr/bin/vi:          1371e(root)
[root@C20230519381768 ~]# ps -ef |grep 1371
root        1371    1352  0 04:36 pts/0    00:00:00 vi 333.txt
root        1383    1312  0 04:38 pts/1    00:00:00 grep --color=auto 1371

#实例三、umount块设备时,提示设备正忙busy。如何才能成功umount掉
    可以先使用fuser -u 参数找出正在访问该设备的进程id。然后kill掉。再进行umount
    -um /tmp
    -um /dev/vda1

[root@C20230519381768 ~]# umount /tmp/
umount: /tmp/: target is busy
[root@C20230519381768 ~]# fuser -um /tmp/
/tmp:                 1264c(root)  1331c(root)
[root@C20230519381768 ~]# ps -ef |grep 1331
root        1331    1264  0 04:29 pts/0    00:00:00 vi 23
root        1343    1312  0 04:31 pts/1    00:00:00 grep --color=auto 1331
[root@C20230519381768 ~]# kill -9 1331
[root@C20230519381768 ~]# fuser -um /tmp/
/tmp:                 1264c(root)
[root@C20230519381768 ~]# umount /tmp/
umount: /tmp/: target is busy.
[root@C20230519381768 ~]# kill -9 1264
[root@C20230519381768 ~]# umount /tmp/

查询linux下已删除但仍旧被占用的文件

# 方法一
[root@localhost ~]# find /proc/*/fd -ls 2>/dev/null | grep '(deleted)'
/proc/259490/fd/11 -> /tmp/ibM5iLNL\ (deleted)
   477283      0 lrwx------   1 root             root           64 Oct 31 21:13 /proc/615/fd/12 -> /memfd:dbus-broker-log\ (deleted)

# 方法二 lsof方式
[root@localhost ~]# lsof | grep -i deleted
mysqld    259490 260478 mysqld    systemd-coredump    5u      REG               0,43         0   69450248 /tmp/ibRviRSi (deleted)
mysqld    259490 260478 mysqld    systemd-coredump    6u      REG               0,43         0   69450249 /tmp/ibjLZaAa (deleted)
mysqld    259490 260478 mysqld    systemd-coredump    7u      REG               0,43         0   69450250 /tmp/ib5z2a1T (deleted)
mysqld    259490 260478 mysqld    systemd-coredump   11u      REG               0,43         0   69450251 /tmp/ibM5iLNL (deleted)

find 命令用法

#删除30天前带 ".log"的文件,如下是具体命令
        find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;

    说明:
        将/opt/soft/log/目录下所有30天前带".log"的文件删除。具体参数说明如下:

        find:linux的查找命令,用户查找指定条件的文件;
        /opt/soft/log/:想要进行清理的任意目录;
        -mtime:标准语句写法;
        +30:查找30天前的文件,这里用数字代表天数;
        "*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三;
        -exec:固定写法;
        rm -rf:强制删除文件,包括目录;
        {}  :固定写法,用来代替前面查询到的输出
        \;  :固定写法,因为exec格式的必须以分号;结尾,所以这里用\进行转义。

innode满了,如何查询那个目录下文件最多

先从/下开始找,后面可以再从具体的目录下找一次
    for i in /*; do echo $i; find $i |wc -l|sort -nr; done

然后将目录下文件多的删掉一些
    find /var/log/nginx -type f |xargs rm -rf

linux如何删除乱码文件(根据innode来删除)

root@cka-n1:~# ls
''$'\233\276''V'$'\333''܁}H'$'\341''_'$'\373\220'   crictl-v1.24.2-linux-amd64.tar.gz

root@cka-n1:~# ls -i
  27 ''$'\233\276''V'$'\333''܁}H'$'\341''_'$'\373\220'  1737  crictl-v1.24.2-linux-amd64.tar.gz

root@cka-n1:~# find -inum 27 -exec rm -rf {} \;
root@cka-n1:~# ls
crictl-v1.24.2-linux-amd64.tar.gz

linux如何查看网卡dhcp的server地址(检查是否有非法dhcp服务器)

[root@H522058 ~]# cat /var/log/messages |grep DHCPOFFER
Mar  6 21:23:05 localhost dhclient[5349]: DHCPOFFER from 10.254.103.1            #这里的DHCPOFFER 后面的ip就是dhcp server IP

linux如何查看ssl证书内容

# 查看网站ssl证书信息(适用于所有ssl场景,如kafka ssl配置是否正确等)
    openssl s_client -connect  boke.wsfnk.com:443

# 查看一域多签中DNS配置的多个可信域名(查询 证书主题背景的备用名称 有哪些)
    echo | openssl s_client -connect objects.githubusercontent.com:443 2>/dev/null | openssl x509 -noout -text | grep -A1 "Subject Alternative Name"

# 查看在线网站证书的主题
     openssl s_client -showcerts -servername qcc.com -connect qcc.com:443 < /dev/null 2>&1 | grep -i "server certificate" -A2 | perl -pe 's/\\x([0-9A-Fa-f]{2})/chr(hex($1))/eg'

# 查询在线网站ssl证书有效期
    [root@localhost ~]# openssl s_client -servername qcc.com -connect qcc.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jan 24 00:00:00 2024 GMT
notAfter=Feb 23 23:59:59 2025 GMT

# 查离线证书文件的信息(比如时间)
    openssl x509 -text -noout -in 123.crt

file

如何查看服务器内存使用率?
    可以通过 free,top(执行后可通过 shitf+m 对内存排序),vmstat,procinfo 命令,也可以通过/proc/meminfo 文件查看。
如何查看单个进程占用的内存大小?
    可以使用 top -p PID,pmap -x PID,ps aux|grep PID 命令,也可以通过/proc/$process_id(进程的
    PID)/status 文件查看,例如/proc/7159/status 文件。
如何查找僵尸进程?
    可以使用 top 命令查看僵尸进程(zombie)的总数,使用 ps -ef | grep defunct | grep -v grep 查找具体僵尸进程的信息。
为什么删除 linux 服务器上的文件,硬盘空间不释放?
    有时,登录 linux 服务器执行 rm 命令删除文件后,用 df 命令查看硬盘空间,发现删除文件后
    可用的硬盘空间没有增加。原因是通过 rm 命令删除文件的时候,如果正好有其它进程在访问
    该文件,通过 df 命令查看,删除的文件占用的空间是没有立即释放的。
    解决方法: 使用 root 权限执行 lsof |grep deleted ,查看正在使用被删除文件的进程的 PID,
    通过命令 kill -9 PID 杀掉对应的进程即可

linux实现命令行自动补全

    yum install -y bash-completion

创建镜像文件,并格式化挂载使用

dd if=/dev/zero of=/var/ftp/pub.img bs=1M count=100000       #这里表示指定大小为 100000*1M = 100G
mkfs.xfs /var/ftp/pub.img                                    #创建文件系统,格式化为一个块设备,便于挂载使用
mount /var/ftp/pub.img /var/ftp/pub

centos8stream的xfsprogs版本高,默认支持稀疏模式,速度非常快(不带任何参数,默认就是的),这里暂时指定参数如何用,centos7.9的xfsprogs版本低,不支持sparse稀疏模式
    mkfs.xfs -m finobt=1 -i sparse=1 -f test.img

插入新的热插拔硬盘后,如何不重启系统就能挂载使用

方式一:
    创建触发器让内核发现新设备
    sudo udevadm trigger /dev/sdb

    仅显示磁盘硬件设备
    sudo lshw -c disk

方式二:
    添加scsi驱动器
    #为使该命令正常运行,必须指定正确的参数值 w、x、y 和 z,如下所示:
        w 是主机适配器标识,第一个适配器为零(0)
        x 是主机适配器上的 SCSI 通道,第一个通道为零(0)
        y 是设备的 SCSI 标识
        z 是 LUN 号,第一个 LUN 为零(0)
    echo "scsi add-single-device w x y z" > /proc/scsi/scsi
    echo "scsi add-single-device 0 0 2 0" > /proc/scsi/scsi

    #移除scsi驱动器(移除前确保已经umount了,cat /proc/partitions能看到是否识别到了盘)
    echo "scsi remove-single-device w x y z" > /proc/scsi/scsi

    验证
    root@gateway-ddns-60:~# cat /proc/scsi/scsi
    Attached devices:
    Host: scsi0 Channel: 00 Id: 00 Lun: 00
    Vendor: ATA      Model: KingFast         Rev: 9001
    Type:   Direct-Access                    ANSI  SCSI revision: 05
    Host: scsi1 Channel: 00 Id: 00 Lun: 00
    Vendor: ATA      Model: MT-512           Rev: 873 
    Type:   Direct-Access                    ANSI  SCSI revision: 05

linux通过进程查线程

[root@node100 ~]# ps -T -p 3351
  PID  SPID TTY          TIME CMD
 3351  3351 ?        00:01:38 libvirtd
 3351  3370 ?        00:00:12 libvirtd
 3351  3371 ?        00:00:11 libvirtd
 3351  3372 ?        00:00:11 libvirtd
 3351  3373 ?        00:00:11 libvirtd
 3351  3374 ?        00:00:12 libvirtd
 3351 35471 ?        00:00:11 libvirtd
 3351 37693 ?        00:00:00 libvirtd

linux检查IP是否存在冲突

  方法一:
        arping 192.168.1.2    #若要检查的IP地址,看返回mac是否唯一

  方法二:
        yum install arp-scan -y
        arp-scan -I eth0 -l   #(直接检查所在网段)
#清空网卡接口上所有的ip地址
    ip add flush dev eth0

#linux查看arp表项
  arp -n
  ip neigh show 

#绑定静态arp表项
    arp -i eth0 -s 192.168.2.1 00:CC:0C:BB:11:C2

#删除某个arp表项,清空arp表项
  ip neigh del 192.168.255.29 dev zt3rf5mdn4
  ip neigh flush  dev eth0

#使用指定ip进行arpping
    arping 192.168.1.1 -s 192.168.1.120

#主动更新邻居arp缓存
    arping -U -c 192.168.0.1

#检查进程是否存在(用0信号)
    killall -0 sshd &> /tmp/nginx.log
#linux进行快ping
  ping -i 0.0001 192.168.1.1
  ping -f 192.168.1.1
centos当yum程序出现报错“Another app is currently holding the yum lock; waiting for it to exit...”的解决方法
    rm -rf /var/run/yum.pid 
#linux磁盘坏道检查
  #-s 显示进度,-v显示详细过程,并将结果重定向到sdb.txt文件中方便查阅
  badblocks -s -v /dev/sdb > sdb.txt
思科等网络设备,ssh无法正常交换密钥,提示如下故障代码
    故障代码:ssh_rsa_verify: RSA modulus too small: 512 < minimum 768 bits  key_verify failed for server_host_key

    可以尝试的解决办法:
        A、ssh -v 2 -c des root@10.0.0.1
        B、ssh -oKexAlgorithms=+diffie-hellman-group1-sha1  root@10.0.0.1
#创建非常大的loop文件(ext4或xfs)
  #其实我的磁盘没有那么大(因为truncate的时候没有实际去写那么大的文件,当然这个也是要文件系统支持的)
  truncate -s 10T loop.img
  dd if=/dev/zero of=loop.img bs=1G seek=10000 count=0      #这种不需要额外装软件

查看某个pid程序所占用的 资源状态(3804是pid)
    top -Hp 3804

如何查看文件的inode,以及如何根据 inode number 查找文件
[root@dn42-bd ~]# ls -il
total 7116
924451 -rw-r--r--  1 root root      27 Jul 28 16:45 123.sh
924442 -rw-r--r--  1 root root       0 Jul 28 16:45 16:45:03
924444 -rw-r--r--  1 root root       0 Jul 28 16:45 2020.txt
924441 -rw-r--r--  1 root root       0 Jul 28 16:45 28

[root@dn42-bd ~]# find / -inum 924444
/root/2020.txt
ubuntu如何修改dns
    1、检查机器127.0.0.53的53端口是否监听(ss -tnl),要是没启动那么,你按照普通的修改就可以  /etc/resolv.conf
    2、要是监听了,就说明 systemd-resolved.service 这个服务启动了,所有的dns请求会被转发给他,如下是修改办法
        A、cat /etc/systemd/resolved.conf
[Resolve]
DNS=9.9.9.9             #主dns
FallbackDNS=8.8.8.8     #备dns
        B、systemctl restart systemd-resolved.service
查看分区类型及其代码的列表(比如 linux的是83 , Linux LVM是8e,VMFS 是 fb 等等)
    sfdisk -T

centos如何保存yum 安装过的软件包
#第一:修改yum的配置文件未保存缓存
    vi /etc/yum.conf
keepcache=1

#第二:yum 安装软件后,查看缓存目录
    yum install tree -y
    #软件包存放目录/var/cache/yum/x86_64
    cd /var/cache/yum/x86_64/7/epel/packages    

#centos7单网卡同时配置ipv4与ipv6并设置ipv6的网关
    DEVICE=eth0
    BOOTPROTO=static
    ONBOOT=yes
    IPADDR=89.42.1.12
    NETMASK=255.255.255.0
    GATEWAY=89.42.1.1
    IPV6INIT=yes
    IPV6_AUTOCONF=no
    IPV6ADDR=2001:0ac8:0021:0008:0000:0000:0ccd:a1d9/64
    IPV6_MTU=1500
    IPV6_DEFAULTGW=2001:ac8:21:8::1

#linux查看磁盘分区类型
[root@VM_0_6_centos ~]# partprobe -s
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
/dev/vda: msdos partitions 1
/dev/vdb: msdos partitions 1
#centos系统修改网卡mac地址(在/etc/rc.local中将eth0的mac地址改成00:0c:29:85:31:01)
    ifconfig eth0 down
    ifconfig eth0 hw ether 00:0c:29:85:31:01
    ifconfig eth0 up 

查看用密码登陆成功的IP地址及

#dabian系列(默认该文件是二进制的,grep需要使用 -a)
    grep -a -i "accepted password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more

#redhat(看失败 ,关键字failed 和 failure,看成功,关键字 accepted )
    grep -i "failed password for root" /var/log/secure* | awk '{print $11}' | sort | uniq -c | sort -nr | more
   # 推荐这样(忽略大小写,匹配第11列是不是ip,是则打印,不是则打印第13列)
   grep -i "failed password for root" /var/log/secure* | awk '{if ($11 ~/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) print $11 ; else print $13 }' | sort | uniq -c | sort -nr | more
#使用sed调换两行的顺序
    sed '/lineONE/{h;d;};/LineTWO/G'
    可使用$?来获取返回参数,0:open,1:close.

从文件列表打包tar gz包
    #文件列表里保存一份需要打包的列表,然后将其打包成tar gz包。可以使用如下命令
    cat file_list | xargs tar -czvf 'test.tar.gz'

获取进程ID
    ps -ef | grep nginx | awk '{print $2}'
获取进程ID后批量kill
    ps -ef | grep nginx | awk '{print $2}' | xargs kill -9

#查看用密码登陆失败的IP地址及次数
    dabian系列
    grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more

#不校验文件系统进行只读挂载
    mount -o ro,norecovery /dev/dm-0 /data0

#同时移动多种类型的文件
    mv /tmp/*.{doc,pdf,txt} /root/123

#删除网卡上的某个IP地址
    ip addr del 192.168.1.104/24 dev enp0s3

#删除0字节文件
    find -type f -size 0 -exec rm -rf {} \;

#查看一个命令是否为shll的内置命令
    type -a command
    如:type -a scp

#查看http的并发请求数及其TCP连接状态:
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

#踢掉远程登录的用户(先用w命名,查看pts)
    pkill -kill -t pts/1

#博客程序升级,避免手动输入yes,进行文件覆盖
    yes | cp ./wordpress/* /web-boke/html/ -ifr

#查看系统的安装时间
    方式一:tune2fs -l /dev/sda1 | grep create
    方式二:rpm -q basesystem --qf '%{installtime:date}\n'

#以sudo运行上一条命令
    sudo !!

#查看系统在过去一段时间是否有过重启
[root@izwz98ohezcyvm2tjptvw6z ~]# last reboot
reboot   system boot  3.10.0-862.9.1.e Sun Aug  5 08:54 - 00:55  (-7:-58)   
reboot   system boot  3.10.0-862.9.1.e Sun Aug  5 08:48 - 00:54  (-7:-54)   
reboot   system boot  3.10.0-862.9.1.e Sun Aug  5 08:09 - 00:48  (-7:-21)   
reboot   system boot  3.10.0-862.9.1.e Sun Aug  5 07:49 - 00:09  (-7:-39)

#删除linux的日志及操作记录
    history -cw
    echo > /var/log/wtmp //清除用户登录记录
    echo > /var/log/btmp //清除尝试登录记录
    echo> /var/log/lastlog //清除最近登录信息
    echo > /var/log/secure //登录信息
    echo > .bash_history
    history -cw

#打印行号
    cat -n  #
    cat -b  #看内容有多少行,空白行不编号,不显示

#检查端口是否开放
    nc -vuz 1.1.1.1 53      #查看UDP的53端口是否开放(感觉不太准)
    nc -vtz wsfnk.com 443   #查看TCP的443端口是否开放
    nmap -sU 175.102.134.107  -p 1701 -Pn   #测试1701端口是否开放(感觉不太准)

#查看目录大小(注意这里查看的是占用磁盘的大小,是最小单元的倍数)(与ls -lh 看到的真实大小不一样)
    du -sh /tmp

#让linux的CPU满载
    for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
    或则
    cat /dev/urandom | md5sum

#查看文件的inode号,并使用innode进行删除(适用于无法用文件名进行删除时)
    wsfnk@ThinkPad-E540:~$ ls -i
    4470596 id_rsa00          4456462 模板            4456465 音乐
    wsfnk@ThinkPad-E540:~$ find -inum 4470596 -delete

#设置history 历史命令时间戳
    vim /etc/profile  #(添加如下一行信息)

    export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S  "

    #登出后再次进入,查看就会有时间戳(如下,但是之前的命令时间会维持不变)
   63  2017-08-30 13:50:19  ls
   64  2017-08-30 13:50:19  su -

#以HTTP方式共享当前文件夹的文件
    python -m SimpleHTTPServer
    python3 -m http.server
    python3 -m http.server --bind :: 8080        # 监听 ipv6 端口
    #python是默认打开的8000端口

#python以匿名ftp的方式共享当前文件夹(注意ftp端口是2121)
    wget https://bootstrap.pypa.io/get-pip.py
    python get-pip.py
    pip install pyftpdlib
    python -m pyftpdlib
    #python -m pyftpdlib -i 192.168.100.49 -w -d /tmp/ -u test -P 123456        #这是搭建认证的ftp

    wget -r ftp://1.1.1.1:2121/boot/dasdasd/*  #这里linux客户端使用wget匿名下载ftp数据的方式

#centos查询某条命令是在由哪个软件包提供的(先查询命令由什么包提供,再安装对应的包即可)
    方式一:
        yum  whatprovides  */lspci
    方式二:
        yum provides lspci
        dnf provides lspci

#普通用户使用vim编辑保持系统文件
    :w !sudo tee %
    #让vim执行一个外部命令{cmd},然后把当前缓冲区的内容从stdin传入

#快速备份一个文件
    cp filename{,.bak}

#替换上一条命令中的一个短语
    ^foo^bar^

#记录linux字符界面下的操作到文件中,便于同事查看
    #开始将shell里的操作以日志的方式记录到文件test.txt中,
    script test.txt
    #注意按Ctrl+D就可以停止日志的记录,其他人,如何查看
    cat test.txt

    高级用法
    script -t 2>demo.time -a demo.logshell  #屏幕录像
    scriptreplay demo.time demo.log     #录像回放

    记录某个用户的操作
        vi ~/.profile
    script -t -f -q 2>$USER.time -a $USER.log

#将你在命令行编辑的命令放在vim中编辑
    用法:命令或则编辑的内容,后面按ctrl+x,然后按ctrl+e
    ls <ctrl+x> <ctrl+e>

#重置终端
    在中端无反应是敲入reset

#用SSH创建端口转发通道
    ssh -N -L2001:remotehost:80 user@somemachine
    #这个命令在本机打开了2001端口,对本机2001端口的请求通过somemachine作为跳板,转到remotehost的80端口上

#更友好的显示当前挂载的文件系统
    mount | column -t

#用 Wget 的递归方式下载整个网站
    wget --random-wait -r -p -e robots=off -U Mozilla www.example.com
    参数解释:
        - -random-wait 等待 0.5 到 1.5 秒的时间来进行下一次请求
        -r 开启递归检索
        -e robots=off 忽略 robots.txt
        -U Mozilla 设置 User-Agent 头为 Mozilla
        其它一些有用的参数:
        - -limit-rate=20K 限制下载速度为 20K
        -o logfile.txt 记录下载日志
        -l 0 删除深度(默认为5)
        --wait=1h 每下载一个文件后等待1小时

#显示当前目录中所有子目录的大小
    du -h --max-depth=1

#显示消耗内存最多的 10 个运行中的进程,以内存使用量排序
    ps aux | sort -nk +4 | tail

#简易计时器
    time ls /
    #表示记录显示ls / 这条命令执行所需要的时间
        real指整个程序对真实世界而言运行所需时间,
        user指程序在用户空间运行的时间,
        sys指程序对系统调用锁占用时间

#远程关掉一台WINDOWS机器
    net rpc shutdown -I IP_ADDRESS -U username%password

#利用中间管道嵌套使用SSH
    ssh -t host_A ssh host_B
    #用于不可直达,网络环境复杂时

#列出你最常用的10条命令
    history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

#linux使用tcp追踪路径信息
    traceroute 43.230.145.95 -p 80 -T

#用TELNET看《星球大战》
    telnet towel.blinkenlights.nl

#将光盘文件制作成iso文件
    dd if=/dev/cdrom of=/home/wsfnk/centos7.iso

#查看cpu的缓存(比如有多个物理cpu,要看他的一级二级三级缓存是共享的还是独享的)
    lscpu -p

#查看系统性能
    mpstat 
    mpstat 1    #表示每一秒刷新一次

#查看各个网卡的收发包情况
    ip -s link

#查看网卡实时流量
    dstat
    或者
    sar -n DEV 1 5

#定时任务文件crontab -e的文件在哪儿(对应用户名)
    /var/spool/cron/root    里
*/20 * * * * /usr/sbin/ntpdate kvm-ntp-dns 2>&1

#远程命令执行(执行完成将结果返回,立马退出)
    ssh root@192.168.1.141 w

#怎么让linux的ssh终端不掉线
    方法一:在linux系统中使用ssh连接远程服务器时,可以使用-o的一个参数ServerAliveInterval来设置防止超时的时间。
        ssh -o serveraliveinterval=60 root@192.168.1.12
    方法二:修改服务器配置
        vim /etc/ssh/sshd_config
    #添加或者修改ClientAliveInterval为“ClientAliveInterval 60”
    #这个参数的是意思是每1分钟,服务器向客户端发一个消息,用于保持连接。保存后记得重启ssh服务。

#查看所有进程的文件打开数
    lsof |wc -l

#查看某个进程打开的文件数
    lsof -p pid |wc -l

#非交互式修改密码(两种方法)
    echo “ldap001:1234”|chpasswd
    echo "1234"|passwd --stdin ldap001

#linux设置复杂密码,使用md5生成密码
    echo "root:`echo '12346' |md5sum |cut  -c1-10`+2" |chpasswd

#linux如何批量杀进程
    第一:批量获取进程ID
    ps -ef|grep nginx|awk '{print $2}'
    第二:批量杀进程
    ps -ef|grep nginx|awk '{print $2}'|xargs kill -9
#ip别名,单网卡如何设置多个ip解决方法之一
    ip addr add 192.168.1.2/24 dev eth0 lable eth0:0
    #或则
    ifconfig eth0:0 192.168.1.2/24 gw 192.168.1.1
    #若采用文件的方式永久添加逻辑接口ip,其中配置文件加上如下这句(表示有依附关系的)
    ONPARENT=yes

#linux禁止ping,centos禁ping(0表示允许,1表示禁止)
    方法一:
    echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all     #即时生效
    方法二:
    vim /etc/sysctl.conf
        net.ipv4.icmp_echo_ignore_all = 1
    sysctl -p   #刷新生效

#linux开启IP转发(作为网关时必须开启)(修改/etc/sysconfig/network)
    FORWARD_IPV4=yes/no
    可以通过cat /proc/sys/net/ipv4/ip_forward 来确认,1表示开启,0表示未开启

#查看网卡是否支持SR-IOV功能(英特尔网卡支持),并查看网卡是否开启IOMMU功能
    lspci -vv | grep -A 10 "Single Root I/O Virtualization"
    dmesg | grep IOMMU | grep enabled

#linux查看系统有无内存错误(测试只在部分真实主机上有用)
    [root@localhost ~]# grep "[0-9]" /sys/devices/system/edac/mc/mc*/csrow*/ch*_ce_count
    /sys/devices/system/edac/mc/mc0/csrow0/ch0_ce_count:8
    /sys/devices/system/edac/mc/mc0/csrow1/ch0_ce_count:4

linux添加路由表之centos7,采用iproute2工具集

#帮助使用格式
    ip help
    ip link help

#注意:什么时候用跟网关地址,什么时候需要跟出接口(via是网关,src用于单接口多IP地址的情况)
    ip route add default via 192.168.0.1 dev eno1
    ip route add 192.168.1.3 dev eno1
    ip route add 192.168.1.3/24 dev eno1
    ip route add 192.168.1.3/24 src 172.16.0.2 via 172.16.0.1  metric 100

#清空路由
    ip route flush 
#删除路由
    ip route del 192.168.1.3
    ip route del 192.168.1.3/24

#永久添加路由
    方法一:将命令写到/etc/rc.local,并且赋予/etc/rc.d/rc.local执行权限
    方法二:创建网卡路由文件
    [root@CQ ~]# cat /etc/sysconfig/network-scripts/route-enp0s3 
    172.0.0.0/8 dev enp0s3
    [root@CQ ~]# ip r
    172.0.0.0/8 dev enp0s3 proto static scope link metric 100 
    192.168.2.0/24 dev enp0s3 proto kernel scope link src 192.168.2.1 metric 100

linux添加路由表之centos6,采用net-tools工具集

    route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0   #添加一条静态路由
    route add default gw 192.168.0.1        #添加默认路由
    route add -net 224.0.0.0 netmask 240.0.0.0 reject       #屏蔽一条路由
    route del -net 192.168.1.0/24 gw 192.168.0.1    #删除一条路由
    route -n        #查看路由表

#永久添加路由
    方法一:将命令写到/etc/rc.local,并且赋予/etc/rc.local执行权限
    方法二:创建静态路由文件/etc/sysconfig/static-routes
    [root@CQ ~]# cat /etc/sysconfig/static-routes
    any net 192.56.76.0 netmask 255.255.255.0 dev eth0 
    any host 192.56.7.4 dev eth0 
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/284.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2025/4/19作者: 辣条①号

目标:网络规划设计师、系统工程师、ceph存储工程师、云计算工程师。 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录

文章目录