shell实例手册.docx_第1页
shell实例手册.docx_第2页
shell实例手册.docx_第3页
shell实例手册.docx_第4页
shell实例手册.docx_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

shell实例手册0说明手册制作: 雪松更新日期: 2014-05-23欢迎系统运维加入Q群: 198173206 # 加群请回答问题请使用notepad+打开此文档,alt+0将函数折叠后方便查阅请勿删除信息,转载请说明出处,抵制不道德行为。错误在所难免,还望指正!# shell实例手册最新下载地址:/quanzhou722/item/f4a4f3c9eb37f02d46d5c0d9# python实例手册下载地址:/quanzhou722/item/cf4471f8e23d3149932af2a7# LazyManage系统批量管理软件下载shell:/quanzhou722/item/4ccf7e88a877eaccef083d1a# LazyManage运维批量管理软件下载python:/quanzhou722/item/4213db3626a949fe96f88d3c1文件touch file # 创建空白文件rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制)dos2unix # windows文本转linux文本 unix2dos # linux文本转windows文本enca filename # 查看编码 安装 yum install -y enca md5sum # 查看md5值ln 源文件 目标文件 # 硬链接ln -s 源文件 目标文件 # 符号连接readlink -f /data # 查看连接真实目录cat file | nl |less # 查看上下翻页且显示行号 q退出head # 查看文件开头内容head -c 10m # 截取文件中10M内容split -C 10M # 将文件切割大小为10Mtail -f file # 查看结尾 监视日志文件file # 检查文件类型umask # 更改默认权限uniq # 删除重复的行uniq -c # 重复的行出现次数uniq -u # 只显示不重复行paste a b # 将两个文件合并用tab键分隔开paste -d+ a b # 将两个文件合并指定+符号隔开paste -s a # 将多行数据合并到一行用tab键隔开chattr +i /etc/passwd # 设置不可改变位more # 向下分面器locate 字符串 # 搜索wc -l file # 查看行数cp filename,.bak # 快速备份一个文件cp a b # 拷贝不提示 既不使用别名 cp -irev # 将行中的字符逆序排列comm -12 2 3 # 行和行比较匹配iconv -f gbk -t utf8 原.txt 新.txt # 转换编码rename 原模式 目标模式 文件 # 重命名 可正则watch -d -n 1 df; ls -FlAt /path # 实时某个目录下查看最新改动过的文件cp -v /dev/dvd /rhel4.6.iso9660 # 制作镜像diff suzu.c suzu2.c sz.patch # 制作补丁patch suzu.c sz.patch # 安装补丁sort排序-t # 指定排序时所用的栏位分隔字符-n # 依照数值的大小排序-r # 以相反的顺序来排序-f # 排序时,将小写字母视为大写字母-d # 排序时,处理英文字母、数字及空格字符外,忽略其他的字符-c # 检查文件是否已经按照顺序排序-b # 忽略每行前面开始处的空格字符-M # 前面3个字母依照月份的缩写进行排序-k # 指定域-m # 将几个排序好的文件进行合并+- # 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。-o # 将排序后的结果存入指定的文sort -n # 按数字排序sort -nr # 按数字倒叙sort -u # 过滤重复行sort -m a.txt c.txt # 将两个文件内容整合到一起sort -n -t -k 2 -k 3 a.txt # 第二域相同,将从第三域进行升降处理sort -n -t: -k 3r a.txt # 以:为分割域的第三域进行倒叙排列sort -k 1.3 a.txt # 从第三个字母起进行排序sort -t -k 2n -u a.txt # 以第二域进行排序,如果遇到重复的,就删除find查找# linux文件无创建时间# Access 使用时间 # Modify 内容修改时间 # Change 状态改变时间(权限、属主)# 时间默认以24小时为单位,当前时间到向前24小时为0天,向前48-72小时为2天# -and 且 匹配两个条件 参数可以确定时间范围 -mtime +2 -and -mtime -4# -or 或 匹配任意一个条件find /etc -name http # 按文件名查找find . -type f # 查找某一类型文件find / -perm # 按照文件权限查找find / -user # 按照文件属主查找find / -group # 按照文件所属的组来查找文件find / -atime -n # 文件使用时间在N天以内find / -atime +n # 文件使用时间在N天以前find / -mtime -n # 文件内容改变时间在N天以内find / -mtime +n # 文件内容改变时间在N天以前find / -ctime +n # 文件状态改变时间在N天前find / -ctime -n # 文件状态改变时间在N天内find / -size +1000000c -print # 查找文件长度大于1M字节的文件find /etc -name passwd* -exec grep xuesong ; # 按名字查找文件传递给-exec后命令find . -name t* -exec basename ; # 查找文件名,不取路径find . -type f -name err* -exec rename err ERR ; # 批量改名(查找err 替换为 ERR 文件find 路径 -name *name1* -or -name *name2* # 查找任意一个关键字vim编辑器gconf-editor # 配置编辑器/etc/vimrc # 配置文件路径vim +24 file # 打开文件定位到指定行vim file1 file2 # 打开多个文件vim -O2 file1 file2 # 垂直分屏vim -on file1 file2 # 水平分屏sp filename # 上下分割打开新文件vsp filename # 左右分割打开新文件Ctrl+W 操作 # 多个文件间操作 大写W # 操作: 关闭当前窗口c 屏幕高度一样= 增加高度+ 移动光标所在屏 右l 左h 上k 下j 中h 下一个w :n # 编辑下一个文件:2n # 编辑下二个文件:N # 编辑前一个文件:rew # 回到首文件:set nu # 打开行号:set nonu # 取消行号200G # 跳转到200:nohl # 取消高亮:set autoindent # 设置自动缩进:set ff # 查看文本格式:set binary # 改为unix格式ctrl+ U # 向前翻页ctrl+ D # 向后翻页%s/字符1/字符2/g # 全部替换X # 文档加密归档解压缩tar zxvpf gz.tar.gz -C 放到指定目录 包中的目录 # 解包tar.gz 不指定目录则全解压tar zcvpf /$path/gz.tar.gz * # 打包gz 注意*最好用相对路径tar zcf /$path/gz.tar.gz * # 打包正确不提示tar ztvpf gz.tar.gz # 查看gztar xvf 1.tar -C 目录 # 解包tartar -cvf 1.tar * # 打包tartar tvf 1.tar # 查看tartar -rvf 1.tar 文件名 # 给tar追加文件tar -exclude=/home/dmtsai -zcvf myfile.tar.gz /home/* /etc # 打包/home, /etc ,但排除 /home/dmtsaitar -N 2005/06/01 -zcvf home.tar.gz /home # 在 /home 当中,比 2005/06/01 新的文件才备份tar -zcvfh home.tar.gz /home # 打包目录中包括连接目录zgrep 字符 1.gz # 查看压缩包中文件字符行bzip2 -dv 1.tar.bz2 # 解压bzip2bzip2 -v 1.tar # bzip2压缩bzcat # 查看bzip2gzip A # 直接压缩文件 # 压缩后源文件消失gunzip A.gz # 直接解压文件 # 解压后源文件消失gzip -dv 1.tar.gz # 解压gzip到targzip -v 1.tar # 压缩tar到gzunzip zip.zip # 解压zipzip zip.zip * # 压缩zip# rar3.6下载: /rar/rarlinux-3.6.0.tar.gzrar a rar.rar *.jpg # 压缩文件为rar包unrar x rar.rar # 解压rar包7z a 7z.7z * # 7z压缩7z e 7z.7z # 7z解压文件ACL权限控制getfacl 1.test # 查看文件ACL权限setfacl -R -m u:xuesong:rw- 1.test # 对文件增加用户的读写权限 -R 递归svn更新代码-force # 强制覆盖/usr/bin/svn -username user -password passwd co $Code $SvnPathsrc/ # 检出整个项目/usr/bin/svn -username user -password passwd export $Code$File $SvnPathsrc/$File # 导出个别文件/usr/bin/svn -username user -password passwd export -r 版本号 svn路径 本地路径 -force # 导出指定版本恢复rm删除的文件# debugfs针对 ext2 # ext3grep针对 ext3 # extundelete针对 ext4df -T # 首先查看磁盘分区格式umount /data/ # 卸载挂载,数据丢失请首先卸载挂载,或重新挂载只读ext3grep /dev/sdb1 -ls -inode 2 # 记录信息继续查找目录下文件inode信息ext3grep /dev/sdb1 -ls -inode 131081 # 此处是inodeext3grep /dev/sdb1 -restore-inode 49153 # 记录下inode信息开始恢复目录opensslopenssl rand 15 -base64 # 口令生成openssl sha1 filename # 哈希算法校验文件openssl md5 filename # MD5校验文件openssl base64 filename.txt # base64编码/解码文件(发送邮件附件之类功能会可以使用)openssl base64 -d filename.bin # base64编码/解码二进制文件openssl enc -aes-128-cbc filename.aes-128-cbc # 加密文档 # 推荐使用的加密算法是bf(Blowfish)和-aes-128-cbc(运行在CBC模式的128位密匙AES加密算法),加密强度有保障openssl enc -d -aes-128-cbc -in filename.aes-128-cbc filename # 解密文档2软件rpmrpm -ivh lynx # rpm安装rpm -e lynx # 卸载包rpm -e lynx -nodeps # 强制卸载rpm -qa # 查看所有安装的rpm包rpm -qa | grep lynx # 查找包是否安装rpm -ql # 软件包路径rpm -Uvh # 升级包rpm -test lynx # 测试rpm -qc # 软件包配置文档rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # 导入rpm的签名信息yumyum list # 查找所有列表yum install 包名 # 安装包和依赖包yum -y update # 升级所有包版本,依赖关系,系统版本内核都升级yum -y update 软件包名 # 升级指定的软件包yum -y upgrade # 不改变软件设置更新软件,系统版本升级,内核不改变yum search mail # yum搜索相关包yum grouplist # 软件包组yum -y groupinstall Virtualization # 安装软件包组yum扩展源# 包下载地址:/pub/epel # 选择版本wget /pub/epel/5/i386/epel-release-5-4.noarch.rpmrpm -Uvh epel-release-5-4.noarch.rpm自定义yum源find /etc/yum.repos.d -name *.repo -exec mv .bak ;vim /etc/yum.repos.d/yum.repoyum#httpbaseurl=/centos5.5#挂载iso#mount -o loop CentOS-5.8-x86_64-bin-DVD-1of2.iso /data/iso/#本地#baseurl=file:/data/iso/enable=1#导入keyrpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5编译源码安装./configure -help # 查看所有编译参数./configure -prefix=/usr/local/ # 配置参数make # 编译make install # 安装包make clean # 清除编译结果perl程序编译perl Makefile.PLmakemake testmake installpython程序编译python file.py# 源码包编译安装python setup.py buildpython setup.py install编译c程序gcc -g hello.c -o hello3系统wall # 给其它用户发消息whereis ls # 查找命令的目录which # 查看当前要执行的命令所在的路径clear # 清空整个屏幕reset # 重新初始化屏幕cal # 显示月历echo -n 123456 | md5sum # md5加密mkpasswd # 随机生成密码 -l位数 -C大小 -c小写 -d数字 -s特殊字符netstat -anlp | grep port # 是否打开了某个端口ntpdate .hk # 同步时间tzselect # 选择时区 #+8=(5 9 1 1) # (TZ=Asia/Shanghai; export TZ)括号内写入 /etc/profile/sbin/hwclock -w # 保存到硬件/etc/shadow # 账户影子文件LANG=en # 修改语言vim /etc/sysconfig/i18n # 修改编码 LANG=en_US.UTF-8export LC_ALL=C # 强制字符集vi /etc/hosts # 查询静态主机名alias # 别名watch uptime # 监测命令动态刷新ipcs -a # 查看Linux系统当前单个共享内存段的最大值lsof |grep /lib # 查看加载库文件ldconfig # 动态链接库管理命令dist-upgrade # 会改变配置文件,改变旧的依赖关系,改变系统版本 /boot/grub/grub.conf # grub启动项配置ps -mp # 查看某进程的线程数 受 max user processes 限制sysctl -a # 查看当前所有系统内核参数sysctl -p # 修改内核参数/etc/sysctl.conf,让/etc/rc.d/rc.sysinit读取生效grep Hugepagesize /proc/meminfo # 内存分页大小mkpasswd -l 8 -C 2 -c 2 -d 4 -s 0 # 随机生成指定类型密码echo 1 /proc/sys/net/ipv4/tcp_syncookies # 使TCP SYN Cookie 保护生效 # SYN Attack是一种拒绝服务的攻击方式grep Swap /proc/25151/smaps |awk a+=$2ENDprint a # 查询某pid使用的swap大小开机启动脚本顺序/etc/profile/etc/profile.d/*.sh/bash_profile/.bashrc/etc/bashrc进程管理ps -eaf # 查看所有进程kill -9 PID # 强制终止某个PID进程kill -15 PID # 安全退出 需程序内部处理信号cmd & # 命令后台运行nohup cmd & # 后台运行不受shell退出影响ctrl+z # 将前台放入后台(暂停)jobs # 查看后台运行程序bg 2 # 启动后台暂停进程fg 2 # 调回后台进程pstree # 进程树vmstat 1 9 # 每隔一秒报告系统性能信息9次sar # 查看cpu等状态lsof file # 显示打开指定文件的所有进程lsof -i:32768 # 查看端口的进程renice +1 180 # 把180号进程的优先级加1psps aux |grep -v USER | sort -nk +4 | tail # 显示消耗内存最多的10个运行中的进程,以内存使用量排序.cpu +3# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND%CPU # 进程的cpu占用率%MEM # 进程的内存占用率VSZ # 进程虚拟大小,单位K(即总占用内存大小,包括真实内存和虚拟内存)RSS # 进程使用的驻留集大小即实际物理内存大小START # 进程启动时间和日期占用的虚拟内存大小 = VSZ - RSStop前五行是系统整体的统计信息。第一行: 任务队列信息,同 uptime 命令的执行结果。内容如下:01:06:48 当前时间up 1:22 系统运行时间,格式为时:分1 user 当前登录用户数load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。第二、三行:为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:Tasks: 29 total 进程总数1 running 正在运行的进程数28 sleeping 睡眠的进程数0 stopped 停止的进程数0 zombie 僵尸进程数Cpu(s): 0.3% us 用户空间占用CPU百分比1.0% sy 内核空间占用CPU百分比0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比98.7% id 空闲CPU百分比0.0% wa 等待输入输出的CPU时间百分比0.0% hi0.0% si第四、五行:为内存信息。内容如下:Mem: 191272k total 物理内存总量173656k used 使用的物理内存总量17616k free 空闲内存总量22052k buffers 用作内核缓存的内存量Swap: 192772k total 交换区总量0k used 使用的交换区总量192772k free 空闲交换区总量123988k cached 缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。进程信息区,各列的含义如下: # 显示各个进程的详细信息序号 列名 含义a PID 进程idb PPID 父进程idc RUSER Real user named UID 进程所有者的用户ide USER 进程所有者的用户名f GROUP 进程所有者的组名g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?h PR 优先级i NI nice值。负值表示高优先级,正值表示低优先级j P 最后使用的CPU,仅在多CPU环境下有意义k %CPU 上次更新到现在的CPU时间占用百分比l TIME 进程使用的CPU时间总计,单位秒m TIME+ 进程使用的CPU时间总计,单位1/100秒n %MEM 进程使用的物理内存百分比o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESp SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATAr CODE 可执行代码占用的物理内存大小,单位kbs DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kbt SHR 共享内存大小,单位kbu nFLT 页面错误次数v nDRT 最后一次写入到现在,被修改过的页面数。w S 进程状态。D=不可中断的睡眠状态R=运行S=睡眠T=跟踪/停止Z=僵尸进程x COMMAND 命令名/命令行y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名z Flags 任务标志,参考 sched.h列出正在占用swap的进程#!/bin/bashecho -e PIDttSwapttProc_Name# 拿出/proc目录下所有以数字为名的目录(进程名是数字才是进程,其他如sys,net等存放的是其他信息)for pid in ls -l /proc | grep d | awk print $9 | grep -v 0-9do# 让进程释放swap的方法只有一个:就是重启该进程。或者等其自动释放。放# 如果进程会自动释放,那么我们就不会写脚本来找他了,找他都是因为他没有自动释放。# 所以我们要列出占用swap并需要重启的进程,但是init这个进程是系统里所有进程的祖先进程# 重启init进程意味着重启系统,这是万万不可以的,所以就不必检测他了,以免对系统造成影响。if $pid -eq 1 ;then continue;figrep -q Swap /proc/$pid/smaps 2/dev/nullif $? -eq 0 ;then swap=$(grep Swap /proc/$pid/smaps | gawk sum+=$2; END print sum )proc_name=$(ps aux | grep -w $pid | grep -v grep | awk for(i=11;i=NF;i+) printf(%s ,$i); )if $swap -gt 0 ;then echo -e $pidt$swapt$proc_namefi fi done | sort -k2 -n | awk -Ft pidNR=$1;sizeNR=$2;nameNR=$3;ENDfor(id=1;id=length(pid);id+)if(sizeid1024)printf(%-10st%15sKBt%sn,pidid,sizeid,nameid);else if(sizeid1048576)printf(%-10st%15.2fMBt%sn,pidid,sizeid/1024,nameid);elseprintf(%-10st%15.2fGBt%sn,pidid,sizeid/1048576,nameid);linux操作系统提供的信号kill -l # 查看linux提供的信号trap echo aaa 2 3 15 # shell使用 trap 捕捉退出信号# 发送信号一般有两种原因:# 1(被动式) 内核检测到一个系统事件.例如子进程退出会像父进程发送SIGCHLD信号.键盘按下control+c会发送SIGINT信号# 2(主动式) 通过系统调用kill来向指定进程发送信号 # 进程结束信号 SIGTERM 和 SIGKILL 的区别: SIGTERM 比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。# 如果一个进程收到一个SIGUSR1信号,然后执行信号绑定函数,第二个SIGUSR2信号又来了,第一个信号没有被处理完毕的话,第二个信号就会丢弃。SIGHUP 1 A # 终端挂起或者控制进程终止SIGINT 2 A # 键盘终端进程(如control+c)SIGQUIT 3 C # 键盘的退出键被按下SIGILL 4 C # 非法指令SIGABRT 6 C # 由abort(3)发出的退出指令SIGFPE 8 C # 浮点异常SIGKILL 9 AEF # Kill信号 立刻停止SIGSEGV 11 C # 无效的内存引用SIGPIPE 13 A # 管道破裂: 写一个没有读端口的管道SIGALRM 14 A # 闹钟信号 由alarm(2)发出的信号 SIGTERM 15 A # 终止信号,可让程序安全退出 kill -15SIGUSR1 30,10,16 A # 用户自定义信号1SIGUSR2 31,12,17 A # 用户自定义信号2SIGCHLD 20,17,18 B # 子进程结束自动向父进程发送SIGCHLD信号SIGCONT 19,18,25 # 进程继续(曾被停止的进程)SIGSTOP 17,19,23 DEF # 终止进程SIGTSTP 18,20,24 D # 控制终端(tty)上按下停止键SIGTTIN 21,21,26 D # 后台进程企图从控制终端读SIGTTOU 22,22,27 D # 后台进程企图从控制终端写缺省处理动作一项中的字母含义如下:A 缺省的动作是终止进程B 缺省的动作是忽略此信号,将该信号丢弃,不做处理C 缺省的动作是终止进程并进行内核映像转储(dump core),内核映像转储是指将进程数据在内存的映像和进程在内核结构中的部分内容以一定格式转储到文件系统,并且进程退出执行,这样做的好处是为程序员提供了方便,使得他们可以得到进程当时执行时的数据值,允许他们确定转储的原因,并且可以调试他们的程序。D 缺省的动作是停止进程,进入停止状况以后还能重新进行下去,一般是在调试的过程中(例如ptrace系统调用)E 信号不能被捕获F 信号不能被忽略系统性能状态vmstat 1 9r # 等待执行的任务数。当这个值超过了cpu线程数,就会出现cpu瓶颈。b # 等待IO的进程数量,表示阻塞的进程。swpd # 虚拟内存已使用的大小,如大于0,表示机器物理内存不足,如不是程序内存泄露,那么该升级内存。free # 空闲的物理内存的大小buff # 已用的buff大小,对块设备的读写进行缓冲cache # cache直接用来记忆我们打开的文件,给文件做缓冲,(把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)inact # 非活跃内存大小,即被标明可回收的内存,区别于free和active -a选项时显示active # 活跃的内存大小 -a选项时显示si # 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露,要查找耗内存进程解决掉。so # 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。bi # 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024bytebo # 块设备每秒发送的块数量,例如读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。in # 每秒CPU的中断次数,包括时间中断。in和cs这两个值越大,会看到由内核消耗的cpu时间会越多cs # 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用。us # 用户进程执行消耗cpu时间(user time) us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论