版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章Shell命令内容提要Shell命令概述目录和文件操作用户和用户组管理权限管理进程管理输入/输出重定向和管道元字符与正则表达式网络基础2.1Shell命令概述shell命令概述Linux系统可简单视作由内核、系统工具和应用程序等构成的集合,它们通常被安装在磁盘某分区建立的文件系统上,尽管源自不同的Linux发行版,但Linux系统所包含的内容和组织结构遵从相同的规则。根文件系统的目录结构/binetcdevbootusrmnthomerootzhangsliswwcdromfloppybinsbinincludeliblocalsrcgrubkernelsdasda1ttyxxcdromlscppwdmount根文件系统的目录结构(续)目录名内容描述/bin普通用户使用的系统工具/sbin管理员使用的系统工具/bootLinux内核映像文件和与引导加载有关的文件/dev设备文件,包括字符设备和块设备/etc系统配置文件/lib共享库文件,供/bin和/sbin下的文件使用/mnt挂载点,常用于挂载文件系统/usr/usr/bin普通用户使用的应用程序/usr/includeC头文件/usr/lib函数库/usr/src/源代码目录/usr/sbin超级用户使用的管理程序/proc基于内存的文件系统,用于显示内核信息/sys基于设备驱动模型的虚拟文件系统/tmp临时文件目录/var日志信息主目录和工作目录Linux系统中的每个用户拥有各自的目录,用于存放专属的文档,并通过工作目录表达其在系统中当前所处的位置。1.主目录主目录为用户登录系统时所处的目录,,它在创建用户时设定。2.工作目录工作目录为用户当前所处的目录,它可随时发生改变。文件路径1.绝对路径绝对路径以根目录为起点,到达目标文件所经历的一系列目录构成的字符串,目录名之间用/分割。2.相对路径相对路径以当前工作目录为起点,到达目标文件所经历的目录序列。假设用户当前工作目录为/home/zhangs,该目录下的文件demo.c的路径可以表示为:/home/zhangs/demo.c//绝对路径./demo.c//相对路径shell命令的语法结构cmd代表命令的名称,通常为程序名称。option表示可选项,选项通常可组合使用;list表示命令操作的对象序列,对象可为文件、目录和用户等,对象名以空格分割,其数量取决于具体的命令。选项有短格式和长格式两种。短选项格式可表示为-x[xxx],字母x表示某功能,xxx代表可能携带的参数,长选项格式可表示为--word[xxx],word表示某功能的全称,xxx同样代表可能携带的参数。命令语法的一般形式cmd[option][list]实例分析$
ls
-l
/home命令提示符命令字命令选项命令组成部分之间用空格进行分隔命令参数Shell命令的分类1.内部命令内部命令由Shell实现,具有功能简洁和使用频率高的特点。2.外部命令外部命令是指存储于文件系统中的可执文件。实例分析$typels #显示为外部命令$typecd #显示为内部命令联机帮助语法man[章节]term功能获得对象term的联机帮助信息,命令的常用选项如下表2-2所示。章节编号含义1Shell命令2核心函数/系统调用3库函数4设备文件,位于/dev目录5文件的格式与内容,例如,/etc/passwd6游戏7杂项(包括宏、包和约定等)8系统管理命令9内核函数实例分析$man1read $man2read 2.2目录和文件操作目录操作概述命令功能ls显示目录中的文件pwd显示当前工作目录cd改变当前工作目录mkdir创建目录rmdir删除目录
目录是一种特殊文件,它由若干目录项组成,每个目录项包含文件名机器关联的i节点。每个目录均包含两个特殊成员”.”和”..”,”.”指向当前目录,”..”指向父目录。实例分析$ls-l~/ #浏览用户主目录$ls-a./ #浏览当前目录$ls-iR/usr#浏览/usr及其子目录$pwd #显示当前工作目录$cdtest #将当前工作目录切换至test$mkdir
mydir #创建目录mydir$rmdir
mydir #删除目录mydir文件操作命令
文件是由若干字节构成的字节流,在Linux系统中,文件具有广泛的含义,可将外部设备、定时器和事件等抽象为文件。命令功能file显示指定文件的类型touch改变文件的时间戳cp复制文件或目录rm删除文件或目录mv移动文件或目录,可用于文件重命名stat显示文件属性实例分析$cpfile1file2#复制文件$cp-rfdir1dir2#复制目录$rmfile1file2#删除文件$rm-rdir1 #删除目录$mvdemotest#将demo文件重命名为test命令功能cat显示文本文件内容more分页显示文本文件内容less分页显示文本文件内容,可上下翻页head显示文件首部内容tail显示文件尾部内容文本文件概述
文本文件是指仅存储文字编码的文件,其内容没有格式。
Linux系统中的配置文件、shell脚本和各种高级语言的源代码文件均为文本文件。实例分析$catdemo.c
#显示文本文件内容$moredemo.c
#分页显示文本文件内容链接文件1.硬链接硬链接是指与链接的文件共享i节点,为同一文件定义多个名称,硬链接不能跨越文件系统。2.符号链接符号链接又称为软链接,其内容存储的是链接文件的路径,它可跨越不同的文件系统.实例分析$lnsfile
dfile #创建硬连接$ln-ssfile
dfile#创建符号链接2.3用户和用户组管理用户管理概述
为有效管理软硬件资源的使用,Linux继承了Unix的用户和用户组特性。用户组是由具有某些共同特征的用户构成的集合。一个用户可同时属于多个用户组,其中,一个为初始组,通常称为用户组,其余则称为附加组。系统为每个用户和用户组设置唯一标识ID,供内核使用。用户的分类1.超级用户(root)
超级用户也称为特权用户,用于系统管理,可不加限制地使用系统资源,其UID为0,通常在系统安装是自动创建。2.系统用户系统用户为受限用户,为满足系统进程对文件资源的访问控制而建立,例如bin和lp等,用户UID一般为1~999。3.普通用户建立普通户的目的是为了让用户登录系统,使用系统资源,普通用户也为受限用户,用户的UID的值为1000~60000之间。用户和用户组的相关操作命令含义groupadd建一个新的用groupdel删除用户组useradd创建一个新的用户Userdel删除用户Usermod修改用户Passwd设置用户登录密码chown修改文件的归属对用户和用户组的操作需要有管理员权限。相关文件文件名描述/etc/passwd保存用户信息/etc/shadow存储加密后的密码/etc/group保存用户组的相关信息新建用户组合用户的信息,存储在位于/etc目录的相关文件中。/etc/passwd文件 structpasswd{ char*pw_name;/.用户名
char*pw_passwd;//用户密码
uid_tpw_uid;//用户ID gid_tpw_gid;//用户组ID char*pw_gecos;//用户信息
char*pw_dir;//主目录
char*pw_shell;//shell程序
};/etc/shadow文件 structspwd{ char*sp_namp;//登录用户名
char*sp_pwdp;//经加密的密码
longsp_lstchg;//最后一次修改时间
longsp_min;//最小间隔修改时间
longsp_max;//最大间隔修改时间
longsp_warn;//密码过期前的天数以警告用户
longsp_inact;//密码过期后直至被禁用的天数
longsp_expire;//密码的有效期
};/etc/group文件 structgroup{ char*gr_name;//用户组名
char*gr_passwd;//用户组密码
gid_tgr_gid;//用户组ID char**gr_mem;//包含的用户名
};实例分析$groupaddstudent$groupaddmusic$groupaddFootball$useradd
zhangs-gstudent-Gmusic-md/home/zhangs$useradd
lis-gstudent-GFootball-md/home/lis$passwdzhangs
$passwdlis
2.4文件权限管理观察ls–l命令的执行结果zhangsrootrootzhangsstudentrootrootstudent6617877876Oct122:43Oct122:41Oct122:41Oct122:44demo.cexam12-11.cp1.ctest.c->demo.crwxr--r-xrwxr--r-xrwxr--r-xrwxrwxrwx1221---l最近修改日期和时间文件名文件大小权限分配引用次数文件类型文件归属(用户和用户组)在文件系统中,每个文件由目录项和i节点组成,目录项记录文件名和i节点的地址,i节点记录文件属性的元数据,其中包括文件类型、权限分配、引用次数和文件的归属等。用户可通过ls–l命令显示文件的详细信息。
每个文件一行,其中,每行的第1个字符标识文件的类型,第2个至第10个字符表示文件的权限分配。文件类型ls–l命令结果中每行的第一个字符表示文件的类型前缀类型前缀类型—普通文件l符号链接文件d目录p命名管道c字符设备s本地套接字b块设备文件的引用次数
指向同一i节点的文件数量,为该i节点关联文件的引用次数。若为某个文件创建硬链接,则文件的引用数量加1,符号链接不会增加文件的引用次数。
由于每个目录中均包含当前目录和父目录,因此,新创空目录的引用次数为2.权限普通文件目录r(读)查看文件内容浏览目录内容w(写)修改文件内容在目录中创建/删除文件/目录x(执行)将文件投入运行在目录中搜索文件rwxrw-r--八进制表示
764用户(u)用户组(g)其他用户(o)内部表示2.文件权限的分配1.文件权限的定义权限的定义和分配
系统将访问文件的用户分为三类,用户、用户组和其他用户。均为他们分配三种权限,依次为度、写和执行。Zhangsstudent
为了满足某些特殊需求,Linux引入了三位扩展权限,它们分别为SUID、SGID和sticky。
i节点中的权限共计12位,分为四组,它们依次为扩展权限、用户权限、用户组权限和其他用户权限。扩展权限100111110100扩展位用户用户组其他用户扩展位的定义SUID标志
SUID(Set-User-ID)标志处于扩展权限中的第1位,八进制值为04000,当执行设置了SUID位的程序时,进程的有效用户切换至程序的所属用户,使进程拥有程序所属用户的的权限。2.SGID标志
SGID(Set-Group-ID)标志处于扩展权限的第2位,八进制值为02000,与SUID类似,当用户执行设置了SGID位的程序时,进程的有效用户组切换至该程序的所属用户组,若某目录上设置SGID位,目录下建立文件或子目录的所属用户组取自该目录的所属用户组。3.Sticky标志
Sticky标志处于扩展权限中的第3位,八进制值为01000,当在某个目录设置sticky位时,该目录下的文件只有其所属用户才有权删除。扩展位的字符表示ls命令未为扩展位预留显示位置,而是分别共享用户、用户组和其他用户的可执行位。SUID/SGIDu.x/g.x显示00-01X10S(大写)11S(小写)suido.x显示00-01X10T(大写)11t(小写)Suid/sgid分别共享用户/用户组的可执行位,显示规则如下表所示Stickyu共享其他用户的可执行位,字符显示规则如下表所示。实例分析100111101101-rwsr-xr-x1rootroot57972May172017/usr/bin/passwddrwxrwxrwt8rootroot4096Jan2704:25tmp001111111111-rw-r-----1rootshadow1521Jan2500:50/etc/shadow1.passwd命令使普通用户也可修改自身密码2./tmp目录仅允许用户删除自己的文件000110109000权限掩码
为了提高权限管理的灵活性,系统引入权限掩码,它用三位八进制表示,分别对应用户、用户组和其他用户,若某位为1,则响对应的权限被屏蔽。系统为每个登录用户分配一个权限掩码,在shell上执行的进程将继承该掩码值。用户可通过umask命令获取或重新设置权限掩码。新建文件权限的计算新建文件/目录的进程最终会执行核心函数open/mkdir,它们会传递参数mode,用以指定权限,最终新建文件/目录的权限还要取决于进程的权限掩码,计算公式如下。新建文件/目录的权限=mode&~(umask&0777)在默认情况下,新建普通文件的默认mode值为0666,创建目录的默认mode为0777。假设新建文件时,mode参数设置为0666,用户权限掩码设置为022新建文件的权限=0666&~(022&0777)=0644文件权限的相关操作命令功能umask查询/设置用户的权限掩码chmod修改文件的权限分配实例分析$chmoda-xdemo $chmodgo-wdemo $chmod
u+sdemo $chmod764demo $chmod5764demo $chown
zhangstest$chown:studenttest进程的身份
进程的身份源自登录系统的用户,另外还包括用户所属的用户组和附加组。进程访问文件时,有时,发挥作用的未必是登录用户,为此,系统引入了实际用户/实际用户组和有效用户/有效用户组,通常实际用户/实际用户组与有效用户/有效用户组相同,但当执行设置了SUID/SGID的可执行文件时,进程的有效用户/有效用户组会发生改变。
因此,进程的身份包括有效用户、有效用户组和附加组进程访问文件的权限检查进程访问文件时,内核除检查文件的权限外,还需检查路径上每个目录是否拥有可执行权,对于目标文件,内核按下列检查次序执行,一旦匹配成功,内核将停止后续操作。(1)若进程的有效用户ID为0,表明进程为特权级进程,此时,进程获得文件的所有权限。(2)若进程的有效用户ID非0,且与文件所属用户ID相同,此时,进程获得文件所属用户的权限。(3)若进程的有效用户组ID或某附加组ID与文件所属用户组ID相同,则进程获得文件所属用户组的权限。(4)若上述三种情况均不符合,则进程获得文件赋予其他用户的权限。综合实例分析$
groupadd
B220301$
groupadd
B220302$groupaddproject$useradd
zhangs–gB220301–Gproject–md/project/zhangs$useradd
lis–gB220302–Gproject–md/project/lis$mkdir/project/share$mkdir/project/temp$chown:project/project/share$chmod2770/project/share$chown:project/project/temp$chmod3770/project/temp$passwdzhangs$passwdlis某软件项目,项目成员拥有各自的用户组和专属目录,同时,他们拥有一个共享目录和一个临时目录,假设项目仅有两个成员,下面在Linux系统中为他们创建相应的用户。2.5进程管理进程
进程是正在执行的程序,是程序的一次运行。程序是静态的,而进程是动态的。进程在其生命周期内,会处于多种状态,在进程调度算法的作用下,实现状态间迁移。
init/systemd通常作为系统中第一个用户态程序,其进程号为1,系统中的所有其他用户进程均为init的子孙,它们之间以层次关系呈现。。pstree命令systemd-+-cron|-dbus-daemon|-dhclient|-exim4|-login---bash---pstree|-rsyslogd-+-{in:imklog}||-{in:imuxsock}|`-{rs:mainQ:Reg}|-systemd---(sd-pam)|-systemd-journal|-systemd-logind|-systemd-timesyn---{sd-resolve}`-systemd-udevd语法pstree功能显示系统中进程之间的继承关系。作业控制
作业控制源自BSD系统的CShell,允许用户在一个Shell终端上同时运行多个作业,一个作业为以回车换行结尾的命令行。作业可运行于前台或后台,后台可运行多个作业,前台最多只能一个,作业可在前后台之间切换,仅前台作业可获得终端的控制权,在无前台作业的情况下,控制终端归shell所有。一个作业可能由若干命令组成,命令的运行次序取决于作业的组织方式。作业的状态迁移前台运行终止后台运行后台停止fg命令&SIGSTOPSIGTTINSIGTTOTbg(SIGCONT)Comtrol-z(SIGTSTP)fg(SIGCONT)Control-c(SIGINT)Control-\(SIGQUIT)killkill命令实例分析$sleep100&[1]3655$sleep200&[2]3663$sleep300^Z[3]+Stoppedsleep300$jobs[1]Runningsleep100&[2]-Runningsleep200&[3]+Stoppedsleep300$fg%1sleep100控制终端
会话被创建时未关联任何终端设备,Shell无法完成标准输入输出;为此,作为首会话进程的登录进程login通过打开终端设备,实现与终端设备的关联,从而为其上创建的进程提供标准输入输出服务,故而终端也称为控制终端,Shell也称为终端的控制进程。进程的相关标识进程ID(PID)
用于标识系统中的每一个进程,初始化进程init/systemd的进程ID为1父进程ID(PPID)
用于标识进程的创建者进程组ID(PGID)
用于标识进程间的协作关系,进程组ID取自领头进程的进程ID会话ID(SID)
用于标识用户的一次登录过程会话、进程组和控制终端的关系作业控制进程后台作业1/后台进程组1后台作业2/后台进程组2会话前台作业/前台进程组控制终端proc6(领头进程)(738,641,738,353)proc7(739,641,738,353)proc3(领头进程)(735,641,735,353)proc4(736,735,735,353)proc5(737,735,735,353)proc1(领头进程)(733,641,733,353)proc2(734,641,733,353)登录shell(641,353,641,353)进程的表示:进程名(进程ID,父进程ID,进程组ID,会话ID)命令ps–efj列名含义C进程占用CPU的百分比STIME进程启动的开始时间TTY进程关联的终端TIME进程运行时间CMD命令的名称和参数命令ps-aux列名含义USER用户名%CPU进程占用CPU的百分比%MEM进程占用内存的百分比VSZ进程使用虚拟内存数量(KB)RSS进程占用物理内存页面的数量(KB)TTY进程的关联终端STAT进程的状态进程的状态迁移就绪状态运行状态停止状态可中断状态不可中断状态僵尸状态调度时间片耗尽/占先信号(SIGCONT)事件到达/信号等待事件结束进程信号(SIGSTOP,SIGTTIN,SIGTTOU)创建进程等待事件事件到达进程状态进程状态含义D不可中断的睡眠状态R运行或就绪状态S可中断的睡眠状态T停止状态t停止状态(由于调试追踪)W页交换X结束状态(从未出现)Z僵尸状态,进程已结束,等待父进程进一步处理9内核函数进程和作业的相关操作命令功能pstree显示系统中用户进程的继承关系ps显示进程属性kill结束进程jobs显示后台作业的状态fg将后台作业置于前台bg恢复后台作业的运行实例分析$kill-1 #列出所有倍号$kill-sSIGSTOP323#暂停进程运行$kill-9524#结束进程$jobs#列出当前会话的所有后合作业$bg%2#使2号作业在后台恢复运行$fg%3#将3号后台作业切换至前台2.6输入输出重定向和管道概述
进程通常将键盘/显示器作为标准输入/输出设备,进程从键盘上接受数据,将输出结果输出至显示器。为了在不修改程序的情况下,改变数据的来源和目的地,系统引入了输入输出重定向技术,通过改变程序的运行环境,改变数据的输入输出方向。实例分析$ls–l>test
每个由shell创建的进程都会继承三个已打开的文件描述符,它们依次为标准输入、标准输出和标准错误输出。文件文件描述符默认设备输入文件:标准输入0键盘输出文件:标准输出1屏幕错误输出文件:标准错误输出2屏幕标准驶入输出设备输入/输出重定向1.输入重定向语法cmd[n]<file功能命令cmd从文件描述符n的读入转向文件file。2.输出重定向语法cmd[n]>filecmd[n]>>file功能命令cmd向文件描述符n的输出写入文件file。类别操作符说明标准输入重定向<从指定文焕上输入标准输出重定向>将标准输出写入指定文件>>将标准输出追加至指定文件标准错误输出重定向2>将标准错误输出写入至指定文件2>>将标准错误输出追加至指定文件标准输出和标准错误输出重定向&>将标准输出和标准错误输出写入至指定文件标准输入/输出重定向操作符实例分析$ls-l1>out2>err复制文件描述符(1)复制输入文件描述符语法
[n]<&m功能 将文件描述符m复制至文件描述符n,用于输入重定向。(2)复制输出文件描述符语法
[n]>&m功能将文件描述符m复制至文件描述符n,用于输出重定向。移动文件描述符(1)移动输入文件描述符语法[n]<&m-功能将文件描述符m移动至文件描述符n,用于输入重定向。(2)移动输出文件描述符yufa[n]>&m-功能将文件描述符m移动至文件描述符n,用于输出重定向实例分析将标准输出和标准错误输出重定向至文件out$ls>out2>&1将标准输出重定向至文件out$ls2>&1>out因复制发生在重定向前,故仅将标准输出重定向至文件out管道
管道用于连接两个进程的输入和输出,将一个进程的输出作为另一个进程的输入。管道存在两个端点,一个端点用于数据输入,另一个端点用于数据输出,采用单向模式,根据管道的实现方式,管道可分为无名管道和命名管道。无名管道语法cmd1|cmd2功能将命令cmd1的标准输出作为命令cmd2的标准输入。实例分析$ls-l|grep^d|more命名管道
命名管道为一种特殊的文件,存在于文件系统中,用户可通过命令mkfifo创建。实例分析$mkfifomypipe$ls-lmypipeprw-r--r--1rootroot0Oct2417:28mypipe2.7元字符与正则表达式元字符对于某些软件,例如Shell、vi和grep等,为了描述某些特征字符串构成的集合,普通字符并非总能满足要求,为此,引入了元字符。元字符是一类具有特定含义而非自身的特殊字符,通常用于匹配字符串等操作。元字符的定义取决于具体命令。Shell中的元字符Shell中的元字符也称为通配符,经常出现在Shell命令中,用于通配文件和目录。元字符含义?匹配任意一个字符*匹配任意数量的字符[abc]匹配a、b和c中任意一个字符[a-z]匹配a-z范围内的任意字符[!a-z]匹配除a-z外的字符常用Shell通配符的定义实例分析$ls[a-z]*#查找以字母a到z开头的所有文件$ls[!a-z]*#查找不以字母a到z开头的所有文件$ls*.c#查找后缀名为c的所有文件屏蔽元字符的特殊含义
有时,需在命令中使用元字符本身,用户可通过在元字符前使用反斜杠\实现。实例分析$lsa\*#列出当前目录下文件名为a*的文件正则表达式
正则表达式是一个字符串模板,由普通字符和元字符组成,用于文本匹配,在文本中搜索所需的字符串。正则表达式通常出现在文本处理软件中,例如,shell、vi和grep等。元字符匹配字符^行首$行尾\char转义后面的字符[^]不匹配方括号中的任意字符\<单词的开始\>单词的结尾()括号内为一组|分组{m}前缀字符重复m次{m,}前缀字符至少重复m次{m,n}前缀字符重复m至n次.所有的单个字符?0个或1个前缀字符+至少一个前缀字符*0个或多个字符文本过滤器GREP是一款功能强大的文本过滤软件,可从文本文件中过滤出包含某些字符串的行,字符串通常具有某种特征,可使用正则表达式进行描述,文本过滤器拥有多种版本。这里仅介绍egrep,下面给出egrep所支持的元字符。实例分析$egrep'^abc|^def'textfile#过滤出以单词abc和def为首的行$egrep'\.00$'textfile#过滤出以.00结尾的行$egrep'5\..'textfile#过滤出包含5.后随任意一个字符的行$egrep'^[a-c]'textfile#过滤出不以字符a、b或c开头的行$egrep'a(bc){2}'textfile#过滤出包含abcbc的行$egrep'[2-5][0-9]'textfile#过滤出包含20至59的行$egrep‘a(bc)+’textfile#过滤出包含abc、、abcbc…的行2.8网络基础TCP/IP概述TCP/IP协议已成为事实上的互联网标准。正确配置网络是保证Linux系统接入互联网的基础。在配置网络前,需正确安装网卡驱动和TCP/IP协议,由于Linux发行版存在一定差异,在配置网络时也有所不同。网络配置文件配置文件发行版描述/etc/sysconfig/network-scripts/ifcfg-ethNCentOS配置IP、网关和DNS地址/etc/network/interfacesDebian配置IP、网关和DNS地址/etc/hosts-配置主机名/etc/services-配置网络服务/etc/resolv.conf-配置DNS服务器配置DHCP1.基于CentOS发行版$cat/etc/sysconfig/network-scripts/ifcfg-ethN#配置文件路径DEVICE=eth0#设备名称BOOTPROTO=dhcp#使用DHCP协议ONBOOT=yes#启动时自动激活网卡2.基于Debian发行版$cat/etc/network/interfaces#显示配置文件内容autoeth0#启动时自动激活网卡ifaceeth0inetdhcp#设置DHCP协议配置静态地址(1)基于CentOS发行版$cat/etc/sysconfig/network-scripts/ifcfg-ethN#配置文件路径DEVICE=eth0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论