linux整理简单齐全运维手册.docx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 整理 简单 齐全 手册
- 资源描述:
-
释放内存: sync echo 3 > /proc/sys/vm/drop_caches Linux查看Dell服务器型号 命令: dmidecode | grep "Product Name" 查看系统负载: cat /proc/loadavg 0.0 0.00 0.00 1/283 10904 意思是:前三个是系统负载,1/283中,1代表此时运行队伍中的进程个数,而283是代表此时的进程总数 10904到此为止,最后创建的一个进程ID。 系统装好后,要做的事如下: 关闭防火墙Selinux: vim /etc/selinux/config 把SELINUX=enforcing改成SELINUX=disabled 更改主机名: vim /etc/sysconfig/network 修改主机名,不要用localhost 添加hosts主机记录 vim /etc/hosts中,在127.0.0.1后面,添加自己的主机名 创建0-9 a-z目录 for i in `seq 0 9` {a..z};do mkdir -p $i;done: 测试硬盘性能工具:iozone 监视服务器每少上下文切换数次工具:Nmon(很不错的性能监视工具) #占用内存大小前10的进程 ps -eo comm,size --sort -size | head -10 #占用cpu使用前10的进程 ps -eo comm,pcpu --sort -pcpu | head -10 一、Apache服务优化: 2 1.配置cronolog进行日志轮询 2 2.错误页面优雅显示 2 3.mod_deflate文件压缩功能 3 4.mod_expires缓存功能 4 5.更改apache的默认用户 5 6.worker模式,提升并发数(可以达到2000-5000) 5 7.屏蔽apache版本等敏感信息 6 8.apache目录文件权限设置(root,目录755,文件644) 6 9.开启httpd-mpm.conf 增加连接数 6 10. apache防盗链功能 8 11.禁止目录Index 8 12. 禁止用户覆盖(重载) 8 13.关闭CGI 9 14.避免使用.htaccess文件(分布式配置文件) 9 15. apache的安全模块 9 16.正确途径取得源代码,勤打apache补丁 10 17.apache日志授予root 700权限 10 18.系统内核参数优化 10 19.禁止PHP解析指定站点的目录 10 20.使用tmpfs文件系统替代频繁访问的目录 11 21尽可能减少 HTTP 请求数 11 22使用CDN做网站加速 12 查看你的服务器网络连接状态 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' ◆CLOSED:无连接是活动的或正在进行 ◆LISTEN:服务器在等待进入呼叫 ◆SYN_RECV:一个连接请求已经到达,等待确认 ◆SYN_SENT:应用已经开始,打开一个连接 ◆ESTABLISHED:正常数据传输状态 ◆FIN_WAIT1:应用说它已经完成 ◆FIN_WAIT2:另一边已同意释放 ◆ITMED_WAIT:等待所有分组死掉 ◆CLOSING:两边同时尝试关闭 ◆TIME_WAIT:另一边已初始化一个释放 ◆LAST_ACK:等待所有分组死掉 ESTABLISHED的值其实也是当前的并发数,这个可重点关注下;另外,可关注下TIME——WAIT这项的数值。Linux下高并发的Squid服务器,TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Squid服务器的TIME_WAIT套接字数量。 #查看系统本地可用端口极限值 cat /proc/sys/net/ipv4/ip_local_port_range 寻找恶意IP并用iptables禁止掉 netstat -an| grep :80 | grep -v 127.0.0.1 |awk '{ print $5 }' | sort|awk -F: '{print $1,$4}' | uniq -c | awk '$1 >50 {print $1,$2}' 4.5备份单个数据库 mysqldump -u 用户 –p’密码’ --default-character-set=latin1 数据库名 > 备份文件名(数据库默认编码是latin1) 普通备份: mysqldump -uroot -p'oldboy123' oldboy > /server/bak/oldboy.sql 压缩备份: mysqldump -uroot -p'oldboy123' oldboy |gzip > /server/bak/oldboy.sql.gz 设置字符集备份: mysqldump -uroot -p'oldboy123' oldboy --default-character-set=gbk |gzip > /server/bak/oldboy.sql.gz 执行结果: [root@oldboy ~]# mkdir /server/bak -p [root@oldboy ~]# mysqldump -uroot -p'oldboy123' oldboy > /server/ba backup/ bak/ [root@oldboy ~]# mysqldump -uroot -p'oldboy123' oldboy > /server/bak/oldboy.sql [root@oldboy ~]# mysqldump -uroot -p'oldboy123' oldboy |gzip > /server/bak/oldboy.sql.gz [root@oldboy ~]# ls -l /server/bak/ total 8 -rw-r--r-- 1 root root 1991 Apr 9 00:51 oldboy.sql -rw-r--r-- 1 root root 801 Apr 9 00:51 oldboy.sql.gz 4.6 mysqldump在做啥? mysqldump实际上就是把数据从mysql库里以逻辑的sql语句的形式导出。 备份的数据过滤掉注释: [root@oldboy ~]# egrep -v "\*|--|^$" /server/bak/oldboy.sql DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=gbk; LOCK TABLES `test` WRITE; INSERT INTO `test` VALUES (1,'zhaoyue'),(2,'jesse'),(4,'elain'),(5,'wodi'),(6,'yingsui'),(7,'zhangyang'),(8,'zaixiangpan'),(9,'??????'),(10,'鑰佺敺瀛?),(11,'鎴?); <==这里是乱码,是因为导出时的格式没加字符集,而系统当前字符集又是zh_cn.gb18030格式,一般恢复到数据库里会正常,只是系统外查看不正常而已。另外insert是批量插入的方式,这样在恢复时效率很高。 UNLOCK TABLES; 提示:看到了吧,就是我们曾经插入的表和数据。 [root@oldboy ~]# mysqldump -uroot -p'oldboy123' oldboy --default-character-set=gbk > /server/bak/oldboy-gbk.sql [root@oldboy ~]# egrep -v "\*|--|^$" /server/bak/oldboy-gbk.sql DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=gbk; LOCK TABLES `test` WRITE; INSERT INTO `test` VALUES (1,'zhaoyue'),(2,'jesse'),(4,'elain'),(5,'wodi'),(6,'yingsui'),(7,'zhangyang'),(8,'zaixiangpan'),(9,'??????'),(10,'老男孩'),(11,'我'); <==。其他乱码是当初插入时就有问题的。 UNLOCK TABLES; 4.7备份多个库 [root@oldboy ~]# mysqldump -uroot -p'oldboy123' -B oldboy mysql --default-character-set=gbk > /server/bak/oldboy-gbk-muli.sql 提示:-B参数是关键,表示接多个库。 ※※※※※(生产环境常用) -B, --databases To dump several databases. Note the difference in usage; In this case no tables are given. All name arguments are regarded as databasenames. 'USE db_name;' will be included in the output. 参数说明:该参数用于导出若干个数据库,在备份结果中会加入USE db_name和CREATE DATABASE `db_name`; -B后的参数都将被作为数据库名。该参数比较常用。当-B后的数据库列全时 同 -A参数。请看-A的说明。 4.8备份单个表 mysqldump -u 用户名 -p 数据库名 表名> 备份的文件名 mysqldump -u root -p oldboy test> oldboy_oldboy.sql 执行结果: [root@oldboy ~]# mysqldump -uroot -p'oldboy123' oldboy test --default-character-set=gbk > /server/bak/oldboy-gbk-single.sql 提示:无-B参数,库oldboy后面就是test表了。 4.9备份多个表 [root@oldboy ~]# mysqldump -uroot -p'oldboy123' oldboy test ett --default-character-set=gbk > /server/bak/oldboy-gbk-muti-tables.sql [root@oldboy ~]# egrep -v "\*|--|^$" /server/bak/oldboy-gbk-muti-tables.sql DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=gbk; LOCK TABLES `test` WRITE; INSERT INTO `test` VALUES (1,'zhaoyue'),(2,'jesse'),(4,'elain'),(5,'wodi'),(6,'yingsui'),(7,'zhangyang'),(8,'zaixiangpan'),(9,'??????'),(10,'老男孩'),(11,'我'); UNLOCK TABLES; DROP TABLE IF EXISTS `ett`; CREATE TABLE `ett` ( `id` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=gbk; LOCK TABLES `ett` WRITE; UNLOCK TABLES; 4.10备份数据库结构(不包含数据) mysqldump -uroot -d -p'oldboy' oldboy oldboy> oldboy_oldboy.sql -d 只备份表结构 [root@oldboy ~]# mysqldump -uroot -p'oldboy123' -d oldboy >/tmp/desc.sql [root@oldboy ~]# egrep -v "\*|--|^$" /tmp/desc.sql DROP TABLE IF EXISTS `ett`; CREATE TABLE `ett` ( `id` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=gbk; DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=gbk; 更多用法可以 执行 mysqldump –help 查询。有关mysql和mysqldump同学们要详细总结。 5恢复数据库 5.1 source命令恢复 进入mysql数据库控制台,mysql -u root -p mysql>use 数据库 然后使用source命令,后面参数为脚本文件(如这里用到的.sql) mysql>source oldboy_db.sql #这个文件是系统路径。 [root@oldboy bak]# mysql -uroot -p'oldboy123' Welcome to the MySQL monitor. Commands end with ; or \g. ...skip... Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use oldboy Database changed mysql> show tables; +------------------+ | Tables_in_oldboy | +------------------+ | ett | | test | +------------------+ 2 rows in set (0.00 sec) mysql> drop tables test; Query OK, 0 rows affected (0.01 sec) mysql> system ls . oldboy-gbk-muli.sql oldboy-gbk-single.sql oldboy.sql oldboy-gbk-muti-tables.sql oldboy-gbk.sql oldboy.sql.gz mysql> source ./oldboy.sql <==还是用第一版没加字符集的备份,就是备份后查看乱码的备份。 Query OK, 0 rows affected (0.00 sec) ...skip... Query OK, 0 rows affected (0.00 sec) Q...skip... Query OK, 0 rows affected (0.00 sec) mysql> select * from test; +----+-------------+ | id | name | +----+-------------+ | 1 | zhaoyue | | 2 | jesse | | 4 | elain | | 5 | wodi | | 6 | yingsui | | 7 | zhangyang | | 8 | zaixiangpan | | 9 | ?????? | | 10 | ??? |<==乱码 | 11 | ? | +----+-------------+ 10 rows in set (0.00 sec) mysql> set names gbk; Query OK, 0 rows affected (0.00 sec) mysql> select * from test; +----+-------------+ | id | name | +----+-------------+ | 1 | zhaoyue | | 2 | jesse | | 4 | elain | | 5 | wodi | | 6 | yingsui | | 7 | zhangyang | | 8 | zaixiangpan | | 9 | ?????? | | 10 | 老男孩 | <==仍然是正常的,就是说备份不加字符集导出,将来恢复不会影响恢复的数据,但是备份后查看文件会乱码。 | 11 | 我 | +----+-------------+ 10 rows in set (0.00 sec) 5.2 mysql命令恢复(标准) mysql -u oldboy -p'oldboy' oldboy < oldboy.sql mysql> system mysql -uroot -p'oldboy123' oldboy < oldboy-gbk.sql <==导入 的是备份时加字符集的版本。 mysql> select * from test; +----+-------------+ | id | name | +----+-------------+ | 1 | zhaoyue | | 2 | jesse | | 4 | elain | | 5 | wodi | | 6 | yingsui | | 7 | zhangyang | | 8 | zaixiangpan | | 9 | ?????? | | 10 | 老男孩 |<==因为上文source导入时已经set names gbk了, 所以此处不是乱码。 | 11 | 我 | +----+-------------+ 10 rows in set (0.00 sec) 2.1.1.1 MyISAM引擎备份 由于MyISAM引擎为表级锁,因此,在备份时需要防止在备份期间数据写入而导致不一致,所以,在备份时使用--lock-all-tables加上读锁 mysqldump -A -F -B --lock-all-tables |gzip >/data/backup/$(date +%F).tar.gz 特别提示:有关MyISAM和InnoDB引擎的差别和在工作中如何选择,在前面的文章已经详细讲解过了,这里就不在讲了。 2.1.1.2 InnoDB引擎备份 InnoDB引擎为行锁,因此,备份时可以不对数据库加锁的操作,可以加选项--single-transaction进行备份: mysqldump -A -F -B --single-transaction |gzip >/data/backup/$(date +%F).tar.gz 特别注意: 1)--single-transaction仅适用于InnoDB引擎。 生产环境mysqldump备份命令 mysqldump –u root –p –S /data/3306/mysql.sock –default-character-set=gbk –single-transaction –F –B oldboy|gzip > /server/backup/mysql_$(date +%F).sql.gz :注 -F:刷新bin-log参数,数据库备份完以后,会刷新bin-log 增量备份: 更新bin-log: mysqladmin –uroot –p –S /data/3306/mysql.sock flush-logs 如生成mysql-bin.000004文件 把生成的最新mysql-bin.000004文件,CP到/var/backup/ 把二进制的日志生成 sql语句: mysqlbinlog mysql-bin.000004>bin04.sql 如果有多个库,我们应该用-d来指定恢复单个库 mysqlbinlog mysql-bin.000004 –d oldboy >binlog.sql (当然对于库也要分库备,否则恢复还是麻烦) 还原数据:先还原全备,再还原增备 先还原全备:mysql –u root –p <mysqlfile.sql 还原增备:mysql –u root –p <binlog.sql(恢复增备的时候,需要把误操作的语句删掉后,再还原,否则,还原后,还是会和误操作后一样) 基于时间点的增量恢复 mysqlbinlog mysql-bin.000004 –start-datetime=’2011-03-19 02:58:54’—stop-datetime=’2011-03-19 03:22:44’ –r time.sql 上面语句将显示2011.03-19 02:58:54-----2011-03-19 03:22:44时间段的binlog,并输出到time.sql 拽定开始时间到文件结束 mysqlbinlog mysql-bin.000004 –start-datetime=’ 2011-03-19 02:58:54’ –d oldboy –r time.sql 这个语句只有开始时间,那么就是从2011-03-19 02:58:54时刻到日志结尾,lodboy数据库的binlog输出到time.sql 基于位置点的增量恢复 指定开始位置和结束位置 mysqlbinlog mysql-bin.000004 –start-position=510 –stop-position=1312 –r pos.sql 输出初始位置510,结束位置1312的所有binlog日志到pos.sql 注意:结尾的日志点细弱特殊不会被包含。即输出1312pos以前的binlog。 指定开始位置到文件结束 mysqlbinlog mysql-bin.000004 –start-position=510 –r pos510-end.sql 输出初始位置510,结束位置到文件结尾的所有binlog到pos510-end.sql。当然,你也可以指定库名输出binlog。如: mysqlbinlog mysql-bin.000004 --start-position=510 –r pos510-end-oldboy.sql –d oldboy 从文件开头到指定结束位置 mysqlbinlog mysql-bin.000004 --stop-position=954 -r start-954.sql 输出从文件开始位置,到954位置截止的所有binlog 掌握和查找打开的文件 lsof(列出打开的文件)实用程序会显示打开的文件名。其选项仅显示某些进程,只有一个进程的某些文件描述符,或只有某些网络连接(网络连接使用文件描述符,就像普通文件一样,lsof 也显示这些)。使用 ps – ef 确定了可疑进程后,输入以下命令: # lsof -s -p pid 服务器最大设置的连接数:151 mysql> show variables like'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 151 | +-----------------+-------+ 1 row in set (0.00 sec) 服务器响应的最大连接数:152 mysql> show global status like 'Max_used_connections'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | Max_used_connections | 152 | +----------------------+-------+ 1 row in set (0.00 sec) 查看服务器key_buffer_size数值:402653184 mysql> show variables like 'key_buffer_size'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | key_buffer_size | 402653184 | +-----------------+-----------+ 1 row in set (0.00 sec) 查看服务器现在使用的key_buffer_size使用情况: key_read_requests: 879600044 key-reads: 830525 mysql> show global status like 'key_read%'; +-------------------+-----------+ | Variable_name | Value | +-------------------+-----------+ | Key_read_requests | 879600044 | | Key_reads | 830525 | +-------------------+-----------+ 2 rows in set (0.00 sec) 计算索引未命中的概率: key_cache_miss_rate = key_reads / key_read_requests * 100% 达到0.1%以下(即每1000个请求有一个直接读硬盘)以下都很好,如果key_cache_miss_rae在0.01%以下的话,则说明key_buffer_size分配得过多,可以适当减少。 Key_blocks_unused表示未使用的缓存簇数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过度索引,把缓存占满了。比较理想的设置是: key_blocks_used / ( key_blocks_unused + key_blocks_used ) * 100 % = 80% mysql> show global status like 'key_blocks_u%'; +-------------------+--------+ | Variable_name | Value | +-------------------+--------+ | Key_blocks_unused | 317003 | | Key_blocks_used | 6439 | +-------------------+--------+ 2 rows in set (0.00 sec) 临时表: 当执行语句时,关于已经被创造了的隐含临时表的数量,我们可以用如下命令查询其具体情况: mysql> show global status like 'created_tmp%'; +-------------------------+--------+ | Variable_name | Value | +-------------------------+--------+ | Created_tmp_disk_tables | 343326 | | Created_tmp_files | 172 | | Created_tmp_tables | 675795 | +-------------------------+--------+ 3 rows in set (0.00 sec) 每次创建临时表时,created_tmp_tables都会增加,如果是在磁盘上创建临时表,created_tmp_disk_tables也会增加。created_tem_files表示MYSQL服务创建的临时文件数,比较理想的配置是: Created_Tmp_disk_tables / Created_tmp_tables * 100% <= 25% 比如上面服务器Created_Tmp_disk_tables / Created_tmp_tables * 100% = 50%,比较差了。 我们再看一下MYSQL服务器对临时表的配置: mysql> show variables where Variable_name in ('tmp_table_size','max_heap_table_size'); +---------------------+----------+ | Variable_name | Value | +---------------------+----------+ | max_heap_table_size | 16777216 | | tmp_table_size | 16777216 | +---------------------+----------+ 2 rows in set (0.00 sec) 只有16M以下的临时表才能全部放在内存中,超过的就会用到硬盘临时表。 打开表的情况 Open_tables表示打开表的数量,Opend_tables表示打开过的表数量,我们可以用如下命令查看其具体情况: mysql> show global status like 'open%tables%'; +---------------+--------+ | Variable_name | Value | +---------------+--------+ | Open_tables | 512 | | Opened_tables | 234200 | +---------------+--------+ 2 rows in set (0.00 sec) 如果Opened_tables数量过大,说明配置中tables_caceh(MYSQL 5.1.3 之后这个值叫做table_open_cache)的值可能太小。我们查询一下服务器table_cache值: mysql> show variables like 'table_open_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | table_open_cache | 614 | +------------------+-------+ 1 row in set (0.00 sec) 比较合适的值为: Open_tables / Opened_tables * 100% >= 85% Open_tables / table_open_cache * 100% <= 95% 进程使用情况 如果我们在MYSQL服务器的配置文件中设置了thread-cache_size,当客户端断开之时,服务器处理此客户请求的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。Threads_created表示创建过的线程数,我们可以用如下命令查看: mysql> show global status like 'Thread%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_cached | 7 | | Threads_connected | 2 | | Threads_created | 2124 | | Threads_running | 2 | +-------------------+-------+ 4 rows in set (0.00 sec) 如果发现Threads_created的值过大的话,表明MYSQL服务器一直在创建线程,这也是比较耗费资源的,可以适当增大配置文件中的thread_cache_size的值。查询服务器展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




linux整理简单齐全运维手册.docx



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/9460881.html