• Linux常见疑难问答


    Linux常见疑难问答

    1)按a~z顺序排列启动服务进程。

    #exportLC_ALL=C           #英文环境变量设置,主要用于解决乱码问题

    #chkconfig –list | grep [z-a] : | grepon $ sort

    2)显示运行级别为5的所有服务。

    #chkconfig –list | grep 5: on | sort

    3)如何停止某个(如cups)服务。

    #chkconfig cups off ; /etc/init.d/cups stop

    4)修改了/etc/profile文件配置,怎么立即生效。

    #source/etc/profile以及“/etc/profile”点后面是空格。

    5)如何使用find工具找到用户cgweb30天内的文件并备份归档。

    #find / -user cgweb –ctime -30 –exec tar azvf /home/backup/cgweb -new-files.tgz {} ;

    6)如何将分区表信息转成文件。

    #fdisk –l /dev/sda > /etc/config-data/sda-fdisk.txt     #注意:要先建立config-data目录

    如何将硬盘分区表和MBR备份到文件:

    #dd if=/dev/sda of=/etc/config-data/sda-boot.img bs=512 count=1

    7)如何提高TCP/IP堆栈安全。

    通常有个办法是通过“#echo1>/proc/sys/net/ipv4/tcp_syncookied”来阻止SYNFlood攻击,其实这并不安全,可靠的做法是发送到/etc/sysctl.conf文件中,需要将下列代码加到/etc/sysctl.conf中:

    net.ipv4.tcp_syncookies=1

    net.ipv4.ip_default_ttl=61

    net.ipv4.conf.all.accept_redirects=0

    net.ipv4.conf.all.send_redirects=0

    如果机器多的话可以将这个配置文件存储在FTP服务器(如sysctl-add,服务器IP:10.10.10.1),然后从FTP中提取出来,追加到现有的/etc/sysctl.conf文件尾:

    wge tftp://10.10.10.1/pub/sysctl-add

    catsystl-add >>/etc/sysctl.conf

    8)如何把/var目录下的所有RPM文件找出来并删除。

    #find /var –name "*.rpm" –exec rm {};

    9)如何使用SSH在远程主机(10.10.10.1)上建立目录(upload)并上传文件。

    #ssh root@10.10.10.1 mkdir/var/www/html/upload

    #scp *.cfg root@10.10.10.1 : /var/www/html/upload/

    10)如何用find命令查找某个文件夹下包含所有指定关键字的所有文件。

    例如需要查找/etc/tomcat5目录下,包含JAVA_OPTS关键字的所有文件:

    #find /etc/tomcat5 -name "*" | xargs grep "JAVA_OPTS"

    11)把旧系统上的/etc/passwd/etc/shadows复制到新系统里,可以继续使用吗。

    千万不要在新的机器上复制原来的/etc/apsswd,通常在新旧两个系统之间有很多服务都会产生冲突,如果是同一张盘安装出来的系统,那么可以验证一下系统的crypt/hash函数是否相同(即密码采用相同的算法加密的),切忌不要在新系统中的配置文件上复制整个/etc/的配置文件。

    12)如何实时查看日志文件的信息(排除网络故障时常用,例如DNSDHCP调试问题)。

    #tail –f /var/log/messages        #如不用-f选项,默认状态的tail只能列出文件的最后10

    13)如何找到/etc/目录下所有文件中,内容包括字符串“ip_forward”的文件,并打印到屏幕。

    #find /etc/ -exec grep "ip_forward" '{}' ;-print

    14)如何搜索当前系统里文件大小超过1GB的文件(排除磁盘空间方面的故障时常用)。

    #find / -size +1024000k –exec du –h '{}' ; -print

    15)远程服务器上没有磁带机,怎么对它进行异地备份。

    #tar cvf -/home/etc | ssh root@10.101.10.1 "cat > /mnt/backup/remoteserver 1_$
    (date+%Y-%m-%d).tar"

    SSH对于管理员来说是再熟悉不过了,那么如何利用它从Linux服务器通过网络传输标准输出(stdout)到备份服务器呢?以上命令即可,注意date后面有个空格。

    16)普通用户cgweb登录系统后如何在根用户才能访问的位置中新建目录呢。

    # su --c "mkdir /root/cgwebtmp"

    17)如何只显示top里的几个进程。

    如果只显示几个进程,可在top中输入要查看进程的PID

    #top –p 4300 –p4500

    18)如何查看一个命令在执行期间发生了什么系统调用。

    #strace /bin/ping 10.10.10.12 > /tmp/ping_out

    在这行命令中,通过在strace命令中运行ping命令并将标准错误定向到/tmp/ping_out文件,很多处理消息就会发送到ping_out文件中。如果要查看ping从哪里获得了它的信息,则将找到所有出现open的地方来查看它打开过哪些文件:

    #grep ^open /tmp/ping.out

    除此之外,还可以让它跟踪子进程,例如要跟踪open系统在上面例子中的调用:

    # strace –e trace= open/bin/ping 10.10.10.1

    除了打开库之外,ping命令还打开了配置文件resolv.conf来查找IP地址,进而找出它从何处将域名解析为IP地址。

    19)如何测定X server服务器的性能。

    当显卡驱动装好后可使用下列命令来检测Xserver服务器的性能:

    # X11perf –repeat 3 –reps 10 –subs 10 100 –circulate

    上述例子的X11perf命令从下至上运行一套窗口。circulate动作将重复3次,第一组有10个窗口,分别运行10次(共100次循环运行),第二组有100个窗口,依然分别循环运行10次(共1000次循环)。在每组的最后,将显示出重复的总次数和完成整套动作所花费的时间。

    还可以用下列命令来测试性能:

    #X11perf –repeat 2 –reps 1000 –ftext

    1000个包含80个字符的文本发送给显示器(-ftext):

    #X11perf –repeat2 –reps 500 –copywinwin 500

    从一个窗口把500×500平方像素大小的方块复制到另一个窗口(-copywinwin500):

    #X11perf –repeat2 –reps 800 –scroll 500

    垂直滚动500×500平方像素大小的框800次。

    20)如何查看安装的GPG密钥。

    #rpm –qa gpg-pubkey*

    gpg-pubkey-0dfb3188-41ed929b

    其中gpg-pubkey-0dfb3188-41ed929b代表RedHat公司用于签名软件包的共有密钥。如果想获得有关这种公有密钥的信息,可以继续使用RPM命令:

    #rpm –qi gpg -pubkey -0dfb3188-41ed929b|less

    在输出的Summary代码行中密钥表示为适用于OpenEnterpriseServer,最后输入q退出。

    21)如何检查包的签名信息。

    通过以下命令可以检查RPM遭破坏和修改的内容:

    # rpm –check sig– vv fedora-logos-1.2.-1.noarch.rpm

    22)在Xen下安装虚拟机。

    #virt-install-nvm-mysql-r512-f/vm/vm-mysql.img-s10--nographics-p-lftp://ip/pub/iso

    通过上面很简单的一句代码就可以在Xen下安装虚拟机了。

    23)查看当前的TCP连接数。

    除了使用常规的netstat-na|more等命令以外,还可利用以下命令实现精确统计连接数量:

    #netstat -n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'

    TIME_WAIT29

    FIN_WAIT1152

    FIN_WAIT22

    ESTABLISHED26

    SYN_RECV16

    24)访问远程共享的目录。

    将如下代码放到/etc/fstab中:

    //ip/share1/mnt/dsmbfsdefaults,auto,username=name,password=pass00

    其中,IP是远程机器的IP地址,是共享目录的共享名,“/mnt/d”是要将该分区mount到本地Linux的目录,namepass是可以访问该共享目录的用户名和密码。

    25)如何加大Tomcat连接数。

    Tomcat配置文件server.xml中,应同时加大maxProcessorsacceptCount这两个参数的值。

    26)如何修改Tomcat的端口数。

    编辑/etc/tomcat5/server.xml找到其中的connectorport="8080"maxHttpHeaderSize="8192",这一行更改8080这个值为其他1024以上未用端口即可。

    27)如何加大Tomcat的内存。

    Tomcat默认的内存为128,在一些大型应用上,显然不够用,所以我们需要手动加大内存:

    #vi /etc/tomcat5/tomcat5.conf

    找到“JAVA_OPTS=-Xmin0.1–Xmaxf0.3代码,Xmin0.1表示初始内存大小,更改成Xmin256mXmaxf0.3表示最大内存大小,修改为512m,退出重启即可生效。

    28)如何将大的tar包分卷压缩或合并。

    以每卷500MB为例,tar分卷压缩:

    #tar cvz pf -somedir | split -d -b 500m

    -d不是split的选项,是Shell的选项,表示将tar命令的输出作为split的输入。

    tar多卷合并:

    catx*>mytarfile.tar.gz

    29)如何去掉文本中多余的回车符(尤其是从Windows复制到Linux的情况)。

    sed's/^M//'test.sh>back.sh

    注意“^M”是敲“ctrl+V+M”得到的。

    或者:

    dos2unixtest.sh

    30)如何改变RedHat的系统语言/字符集。

    vi/etc/sysconfig/i18n文件修改成:LANG="en_US"X-window会显示英文界面,修改为:LANG="zh_CN.GB18030"X-window会显示中文界面。

    31)查找权限位为S的文件。

    #find . -typef(-perm-04000-o-perm-02000)-execls-lg{};

    32)查找或删除正在使用某文件的进程。

    fuserfilename

    fuser-kfilename

    33)如何让用户的密码必须具有一定的长度,并且符合复杂度。

    vi/etc/login.defs

    修改PASS_MIN_LEN

    34如何删除3天以前的所有内容包括目录名和目录中的文件)。

    1find.-ctime+3-execrm-rf{};

    2find./-mtime+3-print|xargsrm-f–r

    35)如何不改变inode而清空一个文件。

    >filename

    36Oracle的安装程序为什么显示乱码。

    现在Oracle的安装程序对中文的支持存在问题,建议使用英文界面来安装,在执行runinstaller之前,执行:

    export;exportLC_ALL=C

    37Linux下文件和目录的颜色代表什么含义。

    蓝色表示目录;绿色表示可执行文件;红色表示压缩文件;浅蓝色表示链接文件;灰色表示其他文件;红色闪烁表示链接的文件有问题了;黄色是设备文件,包括blockcharfifo。利用dircolors–p可查看默认的颜色设置,包括各种颜色和“粗体”、下划线、闪烁等定义。

    38)如何查看有多少活动httpd的脚本,每隔3s刷新一次。

    编辑如下脚本:

    #!/bin/sh

    while(true)

    do

    pstree|grep"*[httpd]$"|sed's/.*-([0-9][0-9]*)*[httpd]$/1/'

    sleep3

    done

    39)如何让cp命令在运行中显示进度。

    cp-r-vdir1dir2

    cp-a-d-vdir1dir2

    40)编辑/etc/inittab后不重启电脑,配置直接生效。

    initq

    41)让Linux连续执行几个命令,出错停止执行。

    command1&&command2&&command3

    42)屏幕变花时怎么办。

    当不小心cat了一个并不是文本的文件时,屏幕会变花,那么可以按两下“Enter”键,以及“Reset”键,屏幕就可恢复正常了。

    43)在命令行中列出本机IP地址,而不是得到网卡信息。

    #ifconfig | grep "inet"|cut-c0-36|sed-e's/[a-zA-Z:]//g'

    hostname–i

    44)如何不显示grep进程本身。

    #ps -aux | grep httpd | grep -v grep

    grep-vgrep可以取消显示所执行的grep本身这个进程,-v参数是不显示所列出的进程名。

    45)删除目录中含输入关键字的文件。

    #find /mnt/ebook/ -typef -exec grep"输入关键字"{};-print-execrm{};

    46)让cron中的任务不回馈信息,假设5分钟检查一次邮件。

    0-59/5****/usr/local/bin/fetchmail>/dev/null2>&1

    47)如何开启多个X-window

    startx默认以display0.0开启第一个X-window,通过传递参数给Xserver可以开启多个X-window

    #startx--:1.0

    #startx--:2.0

    ...

    然后利用Ctrl+Alt+F7/F8键进行切换。

    48)如何产生一个长度固定(例如文件长度为1MB)的空文件,即每个字节的值全为0x00

    #dd if=/dev/zero of=/tmp/zero_file bs=1024 count=1024

    49)查找当前目录下的文件并更改扩展名。

    例如将当前目录下的所有扩展名为.cf的文件更改为.conf

    #find ./ -name "*.cf"-execrename.conf'{}';

    50)如何删除RPM-e删除不了的包。

    如果在删除包之前删除了包的目录,执行以下代码:

    #rpm -e --noscripts

    如果系统里一个包被装两次(由于某些异常引起的),则执行以下代码:

    #rpm -emulti-installed-pkgs–allmatches

    51)如何防止某个关键文件被修改。

    Linux下,有些配置文件是不允许任何人(包括root)修改的。为了防止被误删或修改,可以设定该文件的“不可修改位(Immutable)”。命令如下:

    #chattr+i/etc/fstab

    如果需要修改文件则采用下面的命令:

    #chattr-i/etc/fstab

    52)怎样限制一个用户可以启动的进程数。

    先确定一下/etc/pam.d/login文件中如下一行代码是否存在:

    sessionrequired/lib/security/pam_limits.so

    然后编辑/etc/security/limits.conf,在其中可以设置限制用户的进程数、CPU占用率和内存使用率等,如hardnproc30就是指限制30个进程。

    53)如何限制Shell命令记录的大小。

    在默认情况下,bash会在文件$HOME/.bash_history中存放多达500条命令记录。有时根据具体的系统不同,默认记录条数也不同。系统中每个用户的主目录下都有一个这样的文件。为了系统的安全,在此强烈建议用户限制该文件的大小,如果是root用户,更应该减小这个条目数。用户可以编辑/etc/profile文件,修改其中的选项如下:HISTFILESIZE=5HISTSIZE=5,这样就将记录的命令条数减少到5条。

    54)使用RPM命令时没有任何响应,怎么办。

    #rm -rf /var/lib/rpm/__db.*

    55)如何防止用户修改某文件。

    对系统中的一些关键文件和个人重要资料,可以通过文件权限来保护,例如将文件属性设为600。另外,如果Linux使用的是ext2ext3文件系统,还可以使用chattr命令,给文件加上i属性,即使root用户也不能直接修改或删除这类文件,以有效防止意外修改情况的发生。具体命令如下:

    #chattr +i passwd

    可使用如下命令去除i属性:

    #chattr –i passwd

    56)解决WebLogicLinux下启动关闭很慢的问题。

    启动、关闭WebLogic时,时间非常长,其原因是JDK中存在一个Bug,解决办法是在WebLogic启动脚本里setDomainEnv.sh加入以下内容:

    JAVA_OPTIONS="${JAVA_OPTIONS}-Djava.security.egd=file:/dev/./urandom"

    exportJAVA_OPTIONS

    建议操作前先将setDomainEnv.sh进行备份。

    57)如何实时查看某一进程的资源消耗情况。

    首先查看这个进程的PID,假设PID500。利用“top-p500命令,就可以实时查看这个进程的资源消耗情况了。

    58)如何删除一类进程。

    #ps -efww|grepLOCAL=NO|grep-vgrep|cut-c9-15|xargskill-9

    59)如何手动修改IP

    编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件,然后执行如下命令:

    ifdowneth0;ifupeth0

    60)如何查看22端口现在运行什么程序。

    #lsof -i :22

    61)如何开启IP转发。

    编辑/etc/sysctl.conf,例如:

    net.ipv4.ip_forward=0

    将其修改为:

    net.ipv4.ip_forward=1

    重启后生效,利用“sysctl-a”查看可知已开启IP转发。

    62)如何允许/禁止root通过SSH登录系统。

    通过修改“sshd_config:PermitRootLoginno|yes”即可实现。

    63)如何让Linux自动同步时间。

    #vi /etc/crontab

    添加以下代码

    0001**rootrdate-stime.nist.gov

    64)如何让SSH登录系统永久不断开。

    修改自己HOME目录下的.bash_profile文件,加上exportTMOUT=1000000(以s为单位),然后运行source.bash_profile

    65)防止任何人使用su命令成为root

    vi/etc/pam.d/su中加入以下代码:

    authsufficient/lib/security/pam_rootok.sodebug

    authrequired/lib/security/pam_wheel.sogroup=wheel

    /etc/pam.d/su配置文件中定义wheel组。

    66)如何给一块网卡绑定多个IP

    Linux系统中的一块网卡,最多支持256IP,执行以下代码:

    #cd /etc/sysconfig/network-scripts

    #cp ifcfg-eth0 ifcfg-eth0:1

    #vi ifcfg-eth0:1

    修改IP和设备名即可。

    67Linux下清空ARP表的命令。

    #arp-d-a (适用于BSD)

    forHOSTinarp|sed'/Address/d'|awk'{print$1}';doarp-d$HOST;done

    68)如何使Linux支持NAT

    #echo1>/proc/sys/net/ipv4/ip_forward

    #iptables-tnat-IPOSTROUTING-jMASQUERADE

    69)临时修改网卡MAC地址的方法。

    l关闭网卡:/sbin/ifconfig eth0 down

    l修改地址:/sbin/ifconfig eth0 hwether 00:AA:BB:CCD:EE

    l启动网卡:/sbin/ifconfig eth0 up

    70)更改eth0为混杂模式。

    打开网卡eth0,改成混杂模式:

    #ifconfig eth0 promisc

    关闭混杂模式:

    #ifconfig eth0 –promisc

    71)如何让SSH只允许指定的用户登录。

    /etc/pam.d/sshd文件中加入:

    authrequiredpam_listfile.soitem=usersense=allowfile=/etc/sshusersonerr=fail

    然后在/etc下建立sshusers文件,编辑这个文件,加入允许使用SSH服务的用户名,重新启动SSHD服务即可。

    72)在Linux下如何绑定IP地址和硬件地址。

    可以编辑一个地址对应文件,里面记录了IP地址和硬件地址的对应关系,然后执行“arp–f地址对应文件”。如果没有指定地址对应文件,则通常情况下以默认文件/etc/ethers为准。地址对应文件的格式如下:

    192.168.12.100:0D:61:27:58:E3

    192.168.12.200:40:F4:2A:2E:DC

    192.168.12.300:0A:EB:5E:BA:AE

    73)已知网络中一个机器的硬件地址,如何知道它所对应的IP地址。

    Linux下,假定要查“00:0A:EB:27:17:B9这样一个硬件地址所对应的IP地址,可以使用以下命令:

    #cat /proc/net/arp|grep00:0A:EB:27:17:B9

    192.168.2.540x10x600:0A:EB:27:17:B9*eth2

    另外,还可以利用“arp-a”命令查询:

    #arp–a|grep00:0A:EB:27:17:B9

    192.168.2.54at00:0A:EB:27:17:B9[ether]oneth2

    74)基于ApacheHTTPDSendmail服务在启动时被挂起了,如何解决此问题。

    遇到此类问题,请确认/etc/hosts文件中是否包含如下一行:

    127.0.0.1localhost.localdomainlocalhost

    注意:127.0.0.1是网络的回路地址

    75)如何使Linux系统对ping不回应。

    要使Linuxping没反应,也就是使Linux系统忽略ICMP包,可用如下命令实现:

    #echo1>/proc/sys/net/ipv4/icmp-echo-ignore-all

    若想恢复,可用如下命令实现:

    #echo 0>/proc/sys/net/ipv4/icmp-echo-ignore-all

    76rsync同步压缩传输文件或目录。

    rsync-azessh--deletesample_dir/remote_host:remote_dir/sample_dir/

    77)无须输入密码使用SSH密钥登录。

    ssh-keygen-b1024-trsa

    sshserver"mkdir.ssh;chmod0700.ssh"

    scp~/.ssh/id_rsa.pubserver:~/.ssh/authorized_keys

    这样就不再提示输入密码,直接可以登录Server了,对文件复制、同步等操作都比较方便。

    78)命令行下发送带附件的邮件。

    #cat<mailcontent.txt>|mutt-s"title"-a<attachfile>mail@address

    这里:<mailcontent.txt>代表邮件正文内容。<attachfile>代表本地需要作为附件的文件名。

    79)如何增加httpd动态模块,而不重新编译Apache(以deflate模块为例)。

    进入httpd源代码目录:

    #cd /usr/local/src/httpd-2.2.6

    执行httpd安装后目录中的bin/apxs文件:

    /usr/local/apache2/bin/apxs-ciamodules/metadata/mod_deflate.c

    重新启动httpd

    #service httpd restart

    80)如何变更sendmail邮件的默认存储位置。

    如果sendmail使用Procmail作为MDA(邮件投递代理)的话,可以使用Procmail来指定接收邮件的默认存储位置。方法如下:

    建立/etc/procmailrc文件。

    编辑/etc/procmailrc文件,指定环境变量MAIL的路径,如设为“$HOME/mbox”等。

    81)新编译生成的GCC,使用的标准连接库都位于/usr/local/lib下,但使用的默认连接路径是/usr/lib,怎样添加。

    exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

    将其写到“~/.bash_profile”里面即可。

    82)为什么编写的Shell脚本无法运行。

    脚本权限要为可执行“#chmod+xtest.sh”。且脚本所在的目录在环境变量PATH中,或者直接执行“#./test.sh”。

    83MySQL的数据库存放在什么地方。

    如果使用RPM包安装,应该位于/var/lib/mysql目录下,以数据库名为目录名。

    如果源码安装在/usr/local/mysql中,应该位于/usr/local/mysql/var中,以数据库名为目录名。

    84)忘记了MySQLroot口令怎么办。

    #service mysql stop

    #mysqld_safe--skip-grant-tables&

    #mysqladmin -u user password'newpassword''

    #mysqladminflush -privileges

    85)让MySQL以大内存方式启动。

    /usr/share/mysql下的某个“mysql-*.cnf”(如1GB内存时为mysql-huge.cnf)复制为“/etc/mysql.cnf”文件,并重启MySQL

    86)通过SSH挂载远程主机上的文件夹。

    sshfsname@server:/path/to/folder/path/to/mount/point

    87)显示消耗内存最多的10个运行中的进程,以内存使用量排序。

    #ps aux |sort -nk +4 | tail

    88)利用Shell邮件通知。

    #echo "Testmail" | mail -s“主题测试root@sampl.com

    注意:主机的SMTP服务需要启用。

    89)如何在OracleRAC环境中找出由于系统程序崩溃而产生的core文件。

    由于系统程序发生崩溃时,内核会把当前内存映射到core文件中,我们以X86环境为例,使用下面命令找到core的位置,还能看出是由哪个文件引起的。

    #find /u01 -name core.* -exec ls -l thr {}; | awk'{print$9}' | xargs file

    /u01/oracle/product/crs/log/rac1/crsd/core.4107:ELF32-bitLSBcorefileIntel80386,version1(SYSV),SVR4-style,from'crsd.bin'

    由上面这条命令,可以看出core.4107的产生,是由“crsd.bin”文件引起的。

    90)如何快速扫描出某网段(例如:192.168.150.0/24)内开机的服务器。

    第一种简单方法:

    #nmap –sP 192.168.150.*

    第二种简单方法,使用一行Shell脚本:

    for((i=1;i<=254;i++)); do ping 192.168.150.$i;done

    91)如何禁止某个进程的网络连接。

    我们可以先根据进程找到端口号,然后把发出去的包直接丢掉,或者使用owner功能。

    #iptables –m owner –pid -owner <processid> -j REJECT

    92)如何快速关闭SELinux

    #/usr/sbin/setenforce0立刻关闭SELinux

    #/usr/sbin/setenforce1立刻启用SELinux

    也可以编辑配置文件达到同样的目的:

    #vi /etc/selinux/conf

    setSELINUX=disabled

    93)如何监听80端口发给client-A或从client-A发送过来的数据包

    #tcpdump –i eth0 host client-A and port80

    如果你的计算机有多个网卡,请在-i后面指定好网卡。

    (94)如何实现系统某用户登陆后不显示用户名称?
    我们将系统用户的shell环境变量中/sbin/bash改成/sbin/nologin即可,注意不能将root用户,改成/sbin/nologin,否则无法登陆。nologin的作用还可以限制某些用户通过ssh登陆到shell上

  • 相关阅读:
    sqlserver创建链接服务器连接sqlserver脚本
    两步快速获取小程序源码
    SQL判断是否存在该数据 有则更新,没有则插入
    利用c#+jquery+echarts生成统计报表(附源代码)
    每晚定时重启IIS和数据库服务可节省服务器资源
    SQL中的循环、for循环、游标
    sql的行转列(PIVOT)与列转行(UNPIVOT)
    SQLServer 简单数据拆分
    IIS安装与MVC程序部署
    (六)HTTP和HTTPS(转)
  • 原文地址:https://www.cnblogs.com/chenguang/p/3741212.html
Copyright © 2020-2023  润新知