linux常用命令笔记大全

===================目录操作========================
mkdir: 创建目录
  -p : 递归的创建目录 也就是可以创建多层目录
  一次创建多个目录: mkdir {a,b,c,d,e,f}
  一次创建 a b c d e f多个目录。
rmdir:删除一个空文件夹
cp:复制文件或者文件夹

  -a =-pdr
  -p 同时复制文件属性,比如修改日期
  -d 复制时保留文件链接
  -r: 复制文件夹时,递归复制子文件夹
  -l 不复制,而是创建指向源文件的链接文件,链接文件名由目标文件给出。   
  note:可以在拷贝的同时重命名
mv:移动文件或者文件夹,可以在移动的时候重命名

rm :删除文件或者文件夹
  -r:递归删除
  -f:强制删除 即没有提醒

======================文件处理命令==============================
ls :查看文件
  -l 以列表形式查看
  -h 以一种人性化的方式查看,也是文件的大小以合适的单位显示
  -a 查看所有文件,包括隐藏文件
  -i 显示出文件的i节点号
touch 文件名:创建文件 可以一次创建多个文件,以空格隔开

cat :查看文件内容 
  -n:带行号
tac:反向显示文件内容

more:分页查看文件内容
  进入浏览模式后:
  f或者空格:下一页
  enter:一行一行往下翻
  q:退出

less:查看文件内容 
  空格翻页
  回车换行
  pageup:上一页
  pagedown:下一页
  上箭头:向上翻
  下箭头:向下翻
  /搜索词 n向下找

head -n 文件名 :查看文件前n行。缺省-n显示前10行
tail -n 文件名 :查看文件的末尾几行
  -f :动态显示文件末尾内容

ln:链接命令
  -s创建软连接
  硬链接和cp -p的区别是硬链接会同步更新
  源文件如果丢失,硬链接依然存在。
  硬链接和源文件的i节点相同。
  硬链接不能夸分区,软连接可以跨分区。
  硬链接不可以链接目录,链接可以
  软连接文件具有的权限是ugo都是rwx

====================权限管理命令==============
chmod:修改文件或目录的权限,只有root和所有者可以更改
  [{ugoa}{+-=}{rwx}] [文件或目录] 
  [mode=421] [文件或目录]
  -R 递归修改
  权限的数字表示:
  r->4
  w->2
  x->1

  例:chmod u+x a.txt
    chmod g+w,o-r a.txt //同时做多个权限的修改
    chmod g=rwx a.txt
    chmod 640 a.txt
    chmod -R 777 testdir //把目录和下面所有文件的权限

            针对文件        针对目录
    r   读权限    可以查看文件内容    可以列出目录中的内容
    w    写权限    可以修改文件内容    可以在目录中创建、删除文件
    x     执行权限      可以执行文件      可以进入目录

chown:更改文件所有者,只有root可以更改
  chown root a.txt//把a.txt更改为root所有

chgrp:更改所属组
  chgrp lambrother fengjie //把fengjie的所属组更改为lambrother

umask -S:查看创建文件的缺省权限,即默认权限
umask 023:修改文件的缺省权限为777-023=754。即rwxr-xr--

 

=====================文件搜索命令========================================
find:搜索制定范围内的文件
  find [搜索范围] [匹配条件]
  -name 按文件名搜索
  -iname 根据文件名查找,不区分大小写
  -size +n大于 -n小于 n等于 这个n是数据块,在Linux中一个数据块是512字节大小
  -user 根据所有者查找
  -group 根据所属组查找
  根据文件属性查找:
    -amin 访问时间 access
    -cmin 根据文件属性被修改的时间 change
    -mmin 根据文件内容被修改的时间 modify
  例: find /etc -cmin -5 :查找/etc目录下五分钟内被修改过属性的文件和目录

  -a 两个条件同时满足
    find /etc -size +10 -a -size -50
  -o 两个条件满足一个即可

  -type 
    f 文件 d 目录 l软连接文件
  -inum 根据i节点查找

  对找到的结果进行操作
    -exec或者-ok 命令 {} \;
    例如:
      find /etc -name init* -exec ls -l {} \; 对找到的文件名按列表查看

  find /etc -name init :搜索目录/etc下面所有的init文件,精确匹配,包括子目录中的init文件
  find / -size +204800 搜索大于100M的文件

locate:(查找速度非常快,因为它维护了一个文件库。缺点就是新建立的文件没有很快收录到文件库)
  locate 文件名
  updatedb 更新locate的文件资料库 文件资料库不收录/tmp下的文件
  -i 不区分大小写

which :查找命令的目录以及别名
  which 命令

whereis :搜索命令所在目录及帮助文档路径。

grep:在文件中搜寻字符串匹配的行并输出,多个文件以空格隔开。
  -i不区分大小写
  -v排除指定字符串
  -E 以正则表达式的方式搜索
  -F 以普通文本的方式搜索
  -n 显示搜索到的内容在文件中的行号。

==================帮助命令======================
man:查看命令或者配置文件的帮助信息
  man 命令/配置文件
  在手册里面,可以输入/要查找的str
  man ls
  man services
  man fstab //直接输入配置文件的名字,而不需要使用绝对路径 重点查看name选项和配置文件的格式。
  如果一个命令即使命令又是配置文件,那么可以使用一个序号进行区分,比如:
  man 1 passwd 查看命令passwd的帮助
  man 5 passwd 查看配置文件passwd的帮助

whatis 命令:得到命令的简要信息

apropos 配置文件名:查看配置文件的简短信息

命令 --help:查看命令的选项。

help 命令:查看shell内置命令的帮助信息。 shell内置命令是没有命令路径。不能使用man查看帮助。

===================用户管理命令==========================================
useradd: 添加用户
  useradd 用户名

passwd: 修改用户密码
  passwd 用户名 不加用户名直接更改自己的密码

who:查看当前的账户 显示的格式为: 登录用户名 登录终端(tty:本地登录 pts:远程终端) 登录时间 ip地址

  w:查看更详细的用户登录信息。


=====================================压缩解压缩命令============================
.gz格式
  压缩:gzip 文件名 只能压缩文件不能压缩目录,压缩完源文件也不见了
  解压缩:gunzip/gzip -d 压缩包名称

tar:
  -zcvf 压缩后文件名 打包的目录 :生成.tar.gz文件 注:这个命令先用tar归档,然后把归档的包压缩成.gz
  -zxvf 要解压的文件名 :解压缩.tar.bz2的文件

  -jcvf 压缩后的文件名 打包的目录:生成.tar.bz2 注:这个命令先用tar归档,然后把归档的包压缩成.bz2
  -jxvf 要解压的文件名 :解压.tar.bz2的文件

zip:
  zip -r 压缩生成的文件名 要压缩的目录
  zip 压缩生成的文件名 要压缩的文件。

unzip:
  unzip 要解压缩的文件

bzip2:
  bzip2 -k 要压缩的文件名 -k选项:保留源文件
  bunzip2 -k 要解压的文件名 -k选项:保留压缩包

 

===============网络命令==========================
write:给在线用户发送信息,用户不在线不行。以Ctrl+D保存
  write 用户名

wall:给所有用户名发送信息
  wall 要发送的信息

ping:测试网络连通性

  ping ip地址 
  -c 要ping的次数

ifconfig:
  直接回车查看当前网卡信息
  ifconfig 网卡名 ip地址 临时修改网络ip
    ifconfig th0:0 192.168.1.100 netmask 255.255.255.0
      给th0这个网卡新添加一个ip
    ifconfig eth0:0 down
    ifconfig eth0:0 up
ifdown th0
  禁用th0这块网卡

ifup th0
  开启th0这块网卡

mail:邮件命令
  mail 要发送的用户名
  mail 直接回车:查看命令
    help :查看支持的命令格式
    输入序列号:查看邮件详细内容
    h: 回到邮件列表
    d 序列号:删除序列号对应的邮件

last:统计计算机所有用户登录的时间信息,以及重启信息
lastlog:所有用户最后一次登录的时间
  -u 用户的uid 查看指定用户的登录信息。

traceroute:显示数据包到主机间的路径
  traceroute 要探测的地址.
  -n 使用ip而不使用域名

nslookup www.baidu.com
  查看百度的ip地址

netstat:显示网络相关信息
  -t :tcp协议
  -u :udp协议
  -l:监听
  -r:路由
  -n:显示ip地址和端口号

  netstat -tlun:查看本机监听的端口
  netstat -an:查看所有的监听信息
  netstat -rn :查看路由表,即网管

wget 文件地址
  下载文件

service network restart:重启网络服务。

telnet 域名或ip
  远程管理与端口探测
  如: telnet 192.168.2.3:80
    探测192.168.2.3是否开启了80端口

mount:挂在命令
  mount -t iso9660 /dev/sr0 /mnt/cdrom :把sr0挂在到cdrom

==============关机重启命令====================

shutdown:这个关机命令更安全一些,不推荐使用其他关机命令。
  -h:关机
shutdown -h now shutdown -h 20:30
  -r:重启 
shutdown -r now 
  -c:取消上次的关机命令

重启:
  init 6
  reboot

关机:
  init 0
  poweroff

  系统运行级别:
    0 关机
    1 单用户 类似windows安全模式
    2 不完全多用户,不含nfs服务
    3 完全多用户
    4 未分配
    5 图形界面
    6 重启
  可以通过查看/etc/inittab来查看系统启动的运行级别
  runlevel:查看当前的运行级别
  init n:设置系统运行级别

logout:退出当前用户,返回到登录界面

 

==============其他小技巧==========
\命令名字 :使用原始的命令
  比如:
    ls 实际上是ls --color auto
    \ls 就是原始的ls


=============================================
一、软件包分类
  源码包
    脚本安装包
  特点:
    1. 开源
    2. 可以自由选择所需的功能
    3. 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
    4. 卸载方便,即可以直接删除文件夹。
  缺点:
    1. 安装过程步骤较多,尤其安装较大的软件集合时,容易出现错误
    2. 编译时间较长,安装毕二进制安装时间长
    3. 因为是编译安装,安装过程中一旦报错新手很难解决


  二进制包(RPM包、系统默认包)
    优点:
      1. 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
      2. 安装速度比源码包安装快的多
    缺点:
      1. 经过编译,不再可以看到源代码
      2. 功能选择不如源码包灵活
      3. 依赖性

=============rpm命令管理-包命名与依赖性=======================================
1. RPM包命名原则
  httpd-2.2.15-15.el6.centos.l.i686.rpm
    httpd 软件包名
    2.2.15 软件版本
    15 软件发布的次数
    el6.centos 适合的Linux平台
    i686 适合的硬件平台
    rpm rpm包扩展名
    如果名字里有noarch,则表示所有平台都可以。

2、 rpm包依赖性
    树形依赖: a->b->c 从后往前安装所依赖的包。
    环形依赖: a->b->c->a 解决办法:一次性安装三个包
    模块依赖:模块依赖查询网站 :www.rpmfind.net 一般以.so.数字结尾的依赖包,是库依赖包,只需要安装包括这个库的软件就可以自动安装好这个所需的库依赖包

包全名:操作的包是没有安装的软件包时,使用包全名,而且要注意路径。安装、升级时用
包名 :操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm中的数据库。一般查询,卸载时用

3. rpm安装:
  rpm-ivh 包全名
    -i(install) 安装
    -v(verbose) 显示详细信息
    -h(hash) 显示进度
    --nodeps 不检测依赖性 一般都必须要检测

4. rpm包升级:
  rpm -Uvh 包全名
    -U(upgrade) 升级
    -h

5. rpm -e 包名
  -e(erase) 卸载
  --nodeps 不检查依赖性

6. 查询是否安装
  rpm - q 包名 :查询包是否安装
    -q(query) 查询
    -a(all) 所有
    -i(information) 查询软件信息
    -p(package) 查询未安装包信息
  rpm -ql 包名:查询包中文件安装位置(list) 注:包的安装路径在包生成的时候就确定了
  rpm -qlp 包全名:查询未安装包安装时会安装在哪里。
  rpm -qf 系统文件名 :查询系统文件属于哪个rpm包 注:系统文件名必须是通过安装哪个包生成的文件
    -f:查询系统文件属于哪个包
  rpm -qR 包名 查询已安装软件包的依赖性
    -r: 查询软件包的依赖性(requires)
  rpm -qRp:查询未安装包的依赖性
    -p: 查询未安装包的依赖性

    例如:
      rpm -qa | grep httpd 查询所有Apache的包

7. rpm包校验
  rpm -V 已安装的包名 :如果没有提示则表示没有被修改过
    -V 校验指定rpm包中的文件(verify)
    校验值的含义:
      S:文件大小是否改变
      M:文件的类型或文件的权限(rwx)是否被改变
      5:文件MD5校验和是否改变(可以看成文件内容是否改变)
      D:设备的中,从代码是否改变
      L:文件路径是否改变
      U:文件的属主(所有者)是否改变
      G:文件的属组是否改变
      T:文件的修改时间是否改变

8. rpm包中文件提取:
  rpm2cpio 包全名 | \
  cpio -div .文件绝对路径

  rpm2cpio:讲rpm包转换为cpio格式的命令 
  \表示命令没有输完,在下一行继续输入
  cpio:是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
  cpio 选项 <[文件|设备]
    -i copy-in模式,还原
    -d:还原时自动新建目录
    -v:显示还原过程

  例如:
    rpm -qf /bin/ls #查看ls命令属于哪个包
    mv /bin/ls /tmp #将ls命令移走
    rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls #提取rpm保重ls命令到当前目录的/bin/ls下
    cp /root/bin/ls /bin/ #把ls命令复制到/bin/目录,修复文件丢失

 

yum在线管理:
一、 ip地址配置
第1步:setup:使用图形界面配置ip地址
第2步:vi/etc/sysconfig/network-scripts/ifcfg-eth0 把ONBOOT="no"改为ONBOOT="yes" #启动网卡
第3步:service network restart :重新启动网络服务。

二、网络yum源
1. yum源位置:/etc/yum.repos.d/CentOS-Base.repo,这个是默认的网络yum源
  [base]    容器名称,一定要放在[]中
  name  容器说明,可以自己随便写
  mirrorlist    镜像站点,这个可以注释掉
  baseurl   我们的yum源服务器的地址,默认是CentOS官方的yum源服务器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址
  enabled   此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
  gpgcheck  如果是1是指rpm的数字证书生效,如果是0则不生效
  gpgkey    数字证书的公钥文件保存位置。不用修改。

2. yum命令
  yum list :获取服务器上所有可用的软件的列表
  yum search 关键字:搜索服务器上所有和关键字相关的包
  yum -y install 包名:安装软件包
    install:安装
    -y:自动回答yes
  yum -y update 包名:升级软件包
    update:升级
    -y:自动回答yes
    如果没有包名,就会升级所有的软件包,包括Linux内核。慎用
  yum -y remove 包名
    remove:卸载
    -y:自动回答yes
    注:yum会自动卸载依赖包,而很有可能这个依赖包也被别的包依赖,所以很危险,慎用。

  yum grouplist:列出所有可用的软件组列表
  yum groupinstall 软件组名:安装指定软件组,组名可以由grouplist查询出来 注:如果查询出来的软件组名中间有空格,要使用""引起来。
  yum groupremove 软件组名:卸载指定软件组

3. 光盘yum源
  1) 挂在光盘 mount /dev/sr0 /mnt/cdrom 
  2) 让网络yum源文件失效
    cd /etc/yum.repos.d/
    mv CentOS-Base.repo CentOS-Base.repo.bak
    mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
    mv Centos-Vault.repo Centos-Vault.repo.bak
  3) 修改光盘yum源文件
    vim CentOS-Media.repo
    [c6-media]
    name=CentOS-$releaserver -Media
    baseurl=file:///mnt/cdrom 
    #地址为你自己的光盘挂载地址
    #   file:///media/cdrom/
    #   file:///media/cdrecorder/
    #注释这两个不存在的地址
    gpgcheck=1
    enabled=1 #把enabled=0改为enabled=1,让这个yum配置文件生效
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    注意:注释配置行的时候,#符号一定要写在开头,不要随便在配置文件某一行后面加注释,也不要随便加空格。

源码包管理
  1. 区别
    安装之前的区别:概念上的区别
    安装之后的区别:安装位置不同

  2. rpm包安装位置(大多数)
    /etc/   配置文件安装目录
    /usr/bin/   可执行的命令安装目录
    /usr/lib/   程序所使用的函数库保存位置
    /usr/share/doc  软件的基本使用书册保存位置
    /usr/share/man/ 帮助文件保存位置    
  3. 源码包安装位置
    安装在指定位置当中,一般是
    /usr/local/软件名/ 
  4. 安装位置不同带来的影响
    rpm包安装的服务可以使用系统服务管理命令(service)来管理
    例如rpm包安装的Apache的启动方法是:
    /etc/rc.d/init.d/httpd start 注:服务的安装路径一般在:/etc/rc.d/init.d下
    service httpd start 注:service命令是红帽的专用命令,只能管理rpm包安装的服务
源码包安装过程
  1. 安装准备
    安装C语言编译器 gcc
    下载源码包
    http://mirror.bit.edu.cn/apach/httpd/   
  2. 安装注意事项
    源代码保存位置:/usr/local/src/
    软件安装位置: /usr/local/
    如何确定安装过程报错:
      安装过程停止并出现error、warning或no的提示  
  3. 源码包安装过程
    1)下载源码包
    2)解压缩下载的源码包
    3)进入解压缩目录 注:里面有个INSTALL是系统安装的步骤说明
    4)./configure 软件配置与检查
      定义需要的功能选项
      检测系统环境是否符合安装要求
      把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。
    ./configure --prefix=/usr/local/apache2 :定义安装位置 
    5)make :编译
      如果前面有错误,则使用make clean命令清楚编译产生的临时文件
    6)make install:编译安装
  4. 源码包的卸载
    不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件

脚本安装
  1. 脚本安装包
    脚本安装包并不是独立的软件包类型,常见安装的是源码包
    是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装
    非常类似于windows下软件的安装方式
  2. Webmin的作用
    Webmin是一个基于web的Linux系统管理界面,你就可以通过图形化的方式
    设置用户账号、Apache,DNS、文件共享等服务。
  3、 webmin安装过程
    1) 下载软件
      http;//sourceforge.net/projects/webadmin/files/webmin/
    2) 解压缩,并进入解压缩目录
    3) 执行安装脚本 ./setup.sh

 

其他命令

du -sh 文件名

ps 静态查看系统进程,系统默认安装
  ps -aux 使用BSD语法查看所有进程
  ps -ef 标准语法查看所有进程
    UID 程序被该 UID 所拥有
    PID 就是这个程序的 ID 
    PPID 则是其上级父程序的ID
    C CPU 使用的资源百分比
    STIME 系统启动时间
    TTY 登入者的终端机位置
    TIME 使用掉的 CPU 时间。
    CMD 所下达的指令为何
  ps -aux --sort -pcpu,-pmem
    根据CPU占用情况和内存占用情况来显示进程
  watch -n 1 'ps -aux --sort -pcpu,-pmem'
    每隔1秒监控一次进程情况

top 动态查看系统的状态

lsof -Pti :8000
  通过端口号获得进程pid

kill -9 pid
  杀死指定pid的进程,强行杀死。

history
  查看历史命令

执行历史命令
  !! 执行上一条命令
  !n 执行历史命令的中第n条
  !-n 执行导数第n条
  !string 执行以string开头的历史命令行
  !?string? 执行包含string的历史命令行


alias 
  给命令起别名

  alias 命令='别名'
  alias -p 查看已存在的别名

unlias 
  取消别名
  unlias name

cal 
  查看某一年的日历,可以是1-9999中的任意一年
  cal 88

zcat
  查看压缩包中的内容

sed -i 's#old#new#g' 文件名
  使用new替换文件中的old

ssh root@192.168.8.15 "ifconfig"
  远程执行命令

bash -x 脚本名
  调试脚本

centos6上的三个网络配置文件
  /etc/sysconfig/network-scripts/ifcfg-etho
  /etc/sysconfig/network
  /etc/resolv.conf # dns
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容