Linux基本命令

Linux的简介

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

Linux的厂商

Linux系统基础命令(Linux系统常用基本命令总结)(1)

Linux的目录结构

Linux系统基础命令(Linux系统常用基本命令总结)(2)

基于虚拟机的环境搭建

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0 #网卡设备名称

ONBOOT=yes #启动时是否激活 yes|no

BOOTPROTO=static #协议类型 dhcp bootp none

IPADDR=192.168.134.136 #网络IP地址

NETMASK=255.255.255.0 #网络子网地址

GATEWAY= #网关地址

BROADCAST=192.168.134.255 #广播地址

TYPE=Ethernet #网卡类型为以太网

关闭防火墙

service iptables stop

chkconfig iptables off

常用命令与示例

说明:

一、文件基本操作命令

1. ls命令

(1)ls示例一——不带参数

[root@yxy ~]# ls

anaconda-ks.cfg install.log install.log.syslog

功能:显示指定目录中的文件清单,如果没有指定任何目录,则默认为当前目录。

(2)ls示例二——显示隐含文件

[root@yxy ~]# ls -a

. anaconda-ks.cfg .bash_logout .bashrc install.log .tcshrc

.. .bash_history .bash_profile .cshrc install.log.syslog

参数-a的功能:显示隐含文件。

说明:若文件名以“.”开头,则认为是隐含的,进而普通的ls命令不显示以“.”开头的文件;所以要完全显示某目录下的文件清单,必须加上-a参数才行。

(3)ls示例三——长格式输出

[root@yxy ~]# ls -l

总用量 24

-rw-------. 1 root root 1116 11月 13 18:15 anaconda-ks.cfg

-rw-r--r--. 1 root root 12526 11月 13 18:15 install.log

-rw-r--r--. 1 root root 3482 11月 13 18:14 install.log.syslog

参数-l 的功能是:以长格式列表输出指定目录中的文件清单

以上述输出中文件install.log为例

解释长格式输出的内容如下:

文件权限 连接数 属主 属组 大小 日期 时间 文件名

-rw-r--r--. 1 root root 12526 11月13 18:15 install.log

Linux文件有三种典型的权限,即r读权限、w写权限和x执行权限。在长格式输出中在文件类型的后面有9列权限位,实际上这是针对不同用户而设定的,如下所示。

属主的权限 属组的权限 其他用户的权限

rwx rwx r-x

(4)ls示例四——递归显示

[root@yxy ~]# ls -R

.:

anaconda-ks.cfg install.log install.log.syslog

参数-R 的功能是:递归显示指定目录下的文件清单,

即会显示指定目录分支内各子目录中的文件清单。

2. pwd命令

示例:pwd

[root@yxy ~]# pwd

/root

功能:显示当前目录。

3. mkdir命令

(1)mkdir示例一

[root@yxy ~]# mkdir abc

功能:在当前目录下创建目录abc

(2)mkdir示例二——创建多级目录

[root@yxy ~]# mkdir -p a/b/c

[root@yxy ~]# ls -R a

a:

b

a/b:

c

a/b/c:功能:参数-p功能是如果要创建的目录的父目录不存在,则先创建其父目录,再创建该目录; 如果指定的目录存在,则不影响原目录,也不会报错。在本示例中会连续创建a目录、a/b目录、a/b/c目录。

4. cd命令

(1)cd示例一——切换工作目录

[root@yxy ~]# cd /var

[root@yxy var]# pwd

/var

功能:将当前的工作目录切换为/var

(2)cd示例二——切换到当前用户的主目录

[root@yxy var]# cd

[root@yxy ~]# pwd

/root

功能:不带参数的cd命令直接将当前的工作目录切换为该用户的主目录。主目录又称为家目录,在RHEL中是在创建用户时,自动在/home下为用户创建一个用其用户名同名的目录,并将该目录的所有权划归给该用户所有。

注意:字符“~”代表(当前)用户的主目录。

5. touch命令

(1)touch示例一——创建空文件

[root@yxy ~]# touch myfile

[root@yxy ~]# ls -l myfile

-rw-r--r--. 1 root root 0 11月 13 23:48 myfile

功能:如果myfile不存在,则创建一个大小为0字节名为myfile的空文件。

(2)touch示例二——改变文件的最后修改时间

再执行一次touch myfile

[root@yxy ~]# touch myfile

[root@yxy ~]# ls -l myfile

-rw-r--r--. 1 root root 0 11月 13 23:49 myfile

功能:如果myfile已存在,则将改变myfile的最后修改时间。

6. cp命令

(1)cp示例一——复制文件

[root@yxy ~]# cp /etc/* abc

功能:将/etc/目录下的文件复制到目录abc中。“*”是通配符,可以匹配多个字符;“?”只能匹配一个字符。

(2)cp示例二——复制目录

[root@yxy ~]# cp -R /etc abc

功能:增加了参数-R,就能将目录/etc下面的所有子目录和文件都复制到目录abc中。

7. mv命令

(1)mv示例一——将文件移动到目录中

[root@yxy ~]# mv myfile mydir1

功能:如果mydir1存在且是个目录,则将文件myfile移动到目录mydir1中。

(2)mv示例二——文件改名

[root@yxy ~]# mv myfile myfile2

功能:将文件(或目录)myfile改名为myfile2。

8. rmdir命令

[root@yxy ~]# rmdir mydir1

功能:删除指定的空目录

9. rm命令

(1)rm示例一——删除文件

[root@yxy ~]# rm php.ini

功能:删除指定的文件 php.ini。

(2)rm示例二——删除目录

[root@yxy ~]# rm -rf abc

功能:参数-r是递归的意思,即可以删除非空目录;参数-f是强制的意思。

10. cat命令

(1)cat示例一——显示文件内容

[root@yxy ~]# cat myfile

hello,world

功能:显示指定文件myfile的内容。

(2)cat示例二——创建文件

[root@yxy ~]# cat > myfile2

Welcome to Linux World!

按ctrl d结束输入

功能:利用输出重定向符“>”来创建简短的文本文件myfile2。

11 more和 less命令

# more /etc/httpd/conf/httpd.conf

功能:分屏显示指定文件httpd.conf的内容,非常适合显示超过一屏的文本文件。每按一下空格键,向后翻一屏;每按一次回车键,向后翻一行。

说明:less与more功能很相似,只不过less功能更强大,支持PageUp键向前翻屏,及PageDown向后翻屏。

12. head命令

(1)head示例一——显示文件头10行内容

# head /etc/httpd/conf/httpd.conf

功能:默认显示指定文件的头10行的内容。

(2)head示例二——显示文件头n行内容

# head -n 19 /etc/httpd/conf/httpd.conf

功能:参数-n设置显示指定行数,本例会显示文件的头19行的内容。

13. tail命令

(1)tail示例一——显示文件最后10行内容

# tail /etc/httpd/conf/httpd.conf

功能:默认显示指定文件的末尾10行的内容。

(2)tail示例二——显示文件最后n行内容

# tail -n 12 /etc/httpd/conf/httpd.conf

功能:参数-n设置显示指定行数;

本例会显示文件的末尾12行的内容。


二、用户、组管理命令

1. groupadd命令

(1)groupadd示例一——创建组账号

[root@yxy ~]# groupadd mygroup1

功能:创建一个新组mygroup1,其GID号为已存在GID号的下一个顺序编号。

说明:创建一个组的同时会在/etc/group文件中为该组增加相应的一行,用来记录该组的名称、GID号及成员等信息。

(2)groupadd示例二——创建组账号并设置其GID号

# groupadd -g 5000 mygroup2

功能:创建一个新组mygroup2,并指定其GID号为5000,其中-g用来设置用户的主要组,每个用户都有一个主要组。

2. useradd命令

(1)useradd示例一——创建用户账号

[root@yxy ~]# useradd user1

功能:创建一个用户user1,同时在/etc/passwd文件和/etc/shadow文件增加一行,并自动为用户创建相应的主目录:/home/user1。

说明:/etc/passwd文件记录了系统中每个用户的用户名、UID号、GID号、主目录、shell等信息。

注意:用户的口令原来也存放在此文件中,现在为了保证安全采用了影子口令文件/etc/shadow来保存每个用户的口令。

(2)useradd示例二——创建用户账号并设置相应属性值

# useradd -u 600 -g mygroup1 -G mygroup2 -d /home/student1 s1

功能:创建用户s1,其中参数

-u指定UID号为600;

-g指定用户的主要组为mygroup1;

-G指定用户的附加组为mygroup2,每个用户可以有多个附加组;

-d 指定用户的主目录为/home/student1。

3. userdel命令

(1)userdel示例一——删除用户

[root@yxy ~]# userdel user1

功能:删除指定的用户user1。

(2)userdel示例二——删除用户的同时删除其主目录

[root@yxy ~]# userdel -r user2

功能:删除指定的用户user2,同时删除其主目录

4. groupdel命令

[root@yxy ~]# groupdel mygroup2

功能:删除指定的组

注意:当某个组是某现有用户的主要组时,则不能被删除。

5. passwd命令

(1)passwd示例一——改变口令

[root@yxy ~]# passwd

Changing password for user user1.

Changing password for user1

(current) Unix password:

New Unix password:

BAD PASSWORD: it is too simplistic/systematic

New Unix password:

BAD PASSWORD: is too similar to the old one

New Unix password:

Retype new Unix password:

passwd: all authentication tokens updated successfully.

功能:普通用户只可以修改自己的口令

(2)passwd示例二——禁止用户登录

[root@yxy ~]# passwd -l user1

Locking password for user user1.

passwd: Success

功能:参数-l 可以给指定的用户user1加锁,即禁止该用户登录。

(3)passwd示例三——恢复用户登录

[root@yxy ~]# passwd –u user1

Unlocking password for user user1.

passwd: Success.

功能:参数-u 可以给指定的用户user1解锁,即恢复该用户登录。

(4)passwd示例四——删除用户口令

[root@yxy ~]# passwd -d user1

Removing password for user user1.

passwd: Success

功能:参数-d 可以删除指定的用户user1口令,即以user1登录时无需口令。

6. usermod命令

# usermod -u 601 -g 501 s1

功能:将(已存在的)用户s1的UID号修改为601、主要组修改为501。

7. id命令

[root@yxy ~]# id user1

uid=501(user1) gid=501(user1) groups=501(user1)

功能:显示用户的UID、GID及所属的组信息。


三、 文件属性操作命令

1. chown命令

(1)chown示例一——改变文件的属主

[root@yxy ~]# chown user1 hello.txt

功能:将指定文件hello.txt的属主(所有者)改为user1。

(2)chown示例二——递归改变文件的属主

# chown -R user1 mydir

功能:参数-R,表示递归,即可以深入到指定目录中的每一层,将所有子目录和文件的属主(所有者)改为指定的用户;本例中会将mydir目录中所有子目录和文件的属主设定为user1。

2. chgrp命令

(1)chgrp示例一——改变文件的属组

# chgrp mygroup1 hello.txt

功能:将指定文件hello.txt的属组改为mygroup1。

(2)chgrp示例二——递归改变文件的属组

# chgrp -R mygroup1 mydir

功能:参数-R,表示递归,即可以深入到指定目录中的每一层,将所有子目录和文件的属组改为指定的组;本例中会将mydir目录中所有子目录和文件的属组设定为mygroup1。

3. chmod命令

(1)chmod示例一——字母方式

图中字母u针对属主、g针对属组、o针对其他用户、a针对所有用户;

=表示赋予(设置)指定权限,要注意它会覆盖原权限, 表示在原有权限的基础上增加指定权限,-表示在原有权限的基础上去掉指定权限;

r、w、x三种权限,既可以单独使用也可以组合使用

# chmod u x host.conf

功能:为文件host.conf的属主增加执行权限。

# chmod g-w,o=x host.conf

功能:将文件host.conf的属组去掉写权限,同时将其他用户设置为只有执行权限,而文件属主的权限不变。

(2)chmod示例二——数字方式

chmod的数字使用方式,使用起来也是很方便的,关键是一个数制转换的问题。

这种方式是先将每个权限位化成二进制数,其中如果某权限位是“-”则用0来表示,否则用1来表示;接着,将这9列权限分为三组(每三位一组),再将每组化成一个八进制数。

例如,某文件有如下权限rwxrw-r--,则转换为二进制数为111110100,再化为八进制数则为764;反之,当看到八进制数764时也应该很快转化为相应权限。

# chmod 764 host.conf

功能:将文件host.conf的权限设置为:

属主拥有全部权限;

属组拥有读写权限;

其他用户拥有只读权限。


四、i节点及其相关命令

(1)ln命令示例一——建立硬连接

[root@yxy ~]# ln myfile myfile.hlink

功能:为文件myfile创建名为myfile.hlink的硬连接。

[root@yxy ~]# ls -il

180590 -rw-rw-r-- 2 user1 user1 12 Aug 17 12:14 myfile

180590 -rw-rw-r-- 2 user1 user1 12 Aug 17 12:14 myfile.hlink

说明:通过ls –il 命令可以看出myfile与myfile.hlink的i节点号(最左面的数)是一样的,即硬连接与原文件共用同一个i节点,请注意两个文件的连接数(位于长格式列表中权限位与属主之间的数)都增加了1变成2了。

(2)ln命令示例二——建立符号连接

[root@yxy ~]# ln -s myfile myfile.slink

功能:为文件myfile创建名为myfile.slink的符号连接。

[root@yxy ~]# ls -li

180590 -rw-rw-r-- 2 user1 user1 12 Aug 17 12:14 myfile

180590 -rw-rw-r-- 2 user1 user1 12 Aug 17 12:14 myfile.hlink

180606 lrwxrwxrwx 1 user1 user1 6 Aug 21 06:21 myfile.slink -> myfile

说明:硬链接若一个inode号对应多个文件名时,则称之为硬链接。硬链接具有以下几个特性:文件拥有相同的inode号和数据块;只能对已存在的文件创建硬链接;不能跨越文件系统创建硬链接;不能对目录创建硬链接;删除一个硬链接文件不影响其他相同inode号的文件。软链接在Linux中,若文件的数据块中存放的内容是另一文件的路径名,则称之为软连接。软链接类似于Windows系统下的快捷方式。软连接有自己的inode号和用户数据块。为此,软链接避免了硬链接的诸多限制,软链接主要具有以下特点:软链接有自己的文件属性及权限等;可以对不存在的文件或目录创建软链接;软链接可以跨越文件系统创建;删除软链接时不会影响被指向的文件;若原文件被删除时,相关软链接文件被称为死链接(当该路路劲的文件重新创建时,死链接可以恢复正常)。


五、 查找命令

1. which命令

[root@yxy ~]# which cp

/bin/cp

[root@yxy ~]# which updatedb

/usr/bin/updatedb

功能:显示命令的绝对路径。

注意:该命令只能在命令搜索路径指定的目录中去查找命令或程序。

2. whereis命令

[root@yxy ~]# whereis ln

ln: /bin/ln /usr/share/man/man1/ln.1.gz /usr/share/man/man1p/ln.1p.gz

功能:查询指定命令所在目录以及帮助文档所在目录。

3. find命令

(1)find示例一——按文件名查找

# find / -name "dhcpd*"

功能:参数-name指明按文件名进行查找,即从/目录开始查找以dhcpd开头的所有文件。

(2)find示例二——按文件大小查找

[root@yxy ~]# find /etc -size 8

功能:从/etc下开始查找大小为8块的文件,此处默认512字节为1块。若认为块大小为1k,则应写为8k。

其它可以使用的单位有c(字节)、w(双字节)、M(兆字节)和G(吉字节)。

(3)find示例三——按文件类型查找

# find /var -type d -print

功能:从/var目录下开始查找类型为目录的文件,其中参数-print是显示到屏幕上的意思,经常省略。

(4)find示例四——按文件的修改时间查找

[root@yxy ~]# find . -cmin -5

功能:从当前目录下查找5分钟之内修改过的文件。

如果把“-5”改为 “ 5”,则表示查找5分钟以前修改过的文件。不带“ ”或“-”,则认为整5分钟。

如果把时间单位改为天,则使用参数“-ctime”,请看示例:

[root@yxy ~]# find . -ctime -5

(5)find示例五——按文件的权限查找

[root@yxy ~]#find mytmp -perm 755

功能:查找mytmp目录下的权限恰为755的文件。

[root@yxy ~]#find mytmp -perm 755

功能:查找mytmp目录下的满足755中任何一种权限的文件,即符合任何一个指定的权限位即可。

[root@yxy ~]#find mytmp -perm -755

功能:查找mytmp目录下的权限至少满足755的文件,即指定的所有权限位必须符合才算满足查询条件


六、 文件内容操作命令

1. grep命令

(1)grep示例一——在指定的文件中查找包含特定的字符串的行

[root@yxy ~]# grep "bind" host.conf

功能:在文件host.conf中查找包含字符串“bind”行。

[root@yxy ~]# grep "network" /etc/*.conf

功能:利用通配符可在多个文件中查找包含特定的字符串的行。本例会在/etc下扩展名为.conf文件中查找包含字符串“network”的行。

(2)grep示例二——查找不包含指定字符串的行

# grep -v "network" /etc/nsswitch.conf

功能:查找/etc/nsswitch.conf文件中不包含字符串“network”的行。

2. wc命令

(1)wc示例一——统计指定文件的行数、单词数和字符数

[user1@server2 ~]# wc /etc/nsswitch.conf

63 272 1718 /etc/nsswitch.conf

功能:统计出文件/etc/nsswitch.conf共有63行、272个单词、1718个字符。

(2)wc示例二——参数使用

# wc -l /etc/nsswitch.conf

63 /etc/nsswitch.conf

功能:参数-l的功能可统计出指定文件的行数。另外,利用参数-w统计单词,利用-c统计字符数。

3. sort命令

(1)sort示例一——按正序输出

[root@yxy ~]# sort mytest

功能:将指定文件以行为单位按正序输出。

(2)sort示例二——按逆序输出

[root@yxy ~]# sort -r mytest

功能:将指定文件以行为单位按逆序输出。

4. diff 命令

[root@yxy ~]# diff test mytest

功能:比较文件test与mytest是否相同,将不同之处输出到屏幕上。

5. cut 命令

cut命令是一个文本提取工具,它以行为单位,将每行看作一条记录,而字段之间的分隔符可以灵活地定义。

(1)cut示例一——按特定的分隔符提取指定的字段

[user1@server2 ~]# cut -d: -f1 /etc/passwd

功能:参数-d用来定义字段之间的分隔符,参数-f指定提取第几个字段;本例为提取/etc/passwd文件中以“:”为分隔符的第1个字段。


七、 压缩与打包命令

1. tar命令

tar命令是经典的备份/还原命令,几乎所有最新的软件包都是通过tar包发布的。

(1)tar命令示例一——打包(备份)

[user1@server2 ~]# tar -cvf myetc.tar /etc

功能: 参数-c的功能是打包(创建),

参数-v是显示处理过程,

参数-f是用来指定文档名;

本例的功能是:将目录/etc打包为一个名为myetc.tar的文档。

(2)tar命令示例二——打包(备份)并压缩

# tar -zcvf myetc.tar.gz /etc

功能:将目录/etc打包并压缩为一个名为myetc.tar.gz的文档。

说明:其中参数-z是调用gzip命令来压缩,扩展名为gz,

参数-Z是调用compress命令来压缩,扩展名为Z,

参数-j是调用bzip2命令来压缩,扩展名为bz2。


八、网卡配置命令

(1)ifconfig命令示例一——显示接口(网卡)配置参数

[root@server2 ~]# ifconfig

功能:显示网卡参数的配置情况,包括IP地址、子网掩码、广播地址等。

(2)ifconfig命令示例二——设置接口(网卡)配置参数

# ifconfig eth0 10.22.1.103 netmask 255.255.255.0

功能:设置网卡eth0的IP地址为10.22.1.103、掩码为255.255.255.0

说明:eth0是系统中第1块以太网卡的名称,eth1是系统中第2块以太网卡的名称,以此类推。lo是环回测试网卡的名称。

(3)ifconfig命令示例三——禁用某块网卡

[root@server2 ~]# ifconfig eth0 down

功能:禁用网卡eth0。

说明:此时再用不带参数的ifconfig命令是不能显示eth0的信息的,需要加上参数“-a”才可显示被禁用的网卡信息。

(4)ifconfig命令示例四——激活某块网卡

[root@server2 ~]# ifconfig eth0 up

功能:激活网卡eth0。


九、rpm命令

(1)rpm命令示例一——查询系统中安装的软件包

[root@yxy ~]# rpm -qa

功能:查询系统中安装的软件包列表,其中参数-q的功能是“查询”,参数-a的功能是“所有的”。

(2)rpm命令示例二——查询软件包中文件清单

[root@yxy ~]#rpm -ql php

功能:查询已安装的软件包php中的文件列表,其中参数-l的功能是“列出指定软件包中的文件”。

(3)rpm命令示例三——卸载指定的软件包

[root@yxy ~]# rpm -e php

功能:卸载已安装的软件包php,参数-e的功能是“卸载”

说明:请注意执行上述命令时,采用的身份是不同的,普通用户只能执行查询操作。

(4)rpm命令示例四——安装软件包

# rpm -ivh php-4.3.9-3.1-i386.rpm

功能:安装软件包php,

参数-i的功能是“安装”,

参数-v的功能是“显示处理过程”,

参数-h的功能是显示“#”来表示进度。

(5)rpm命令示例五——强制安装软件包

# rpm -ivh --force php-4.3.9-3.1-i386.rpm

功能:强制安装软件包php,参数--force表示强制的意思。

说明:如果要安装的软件的版本比较低或该软件包在系统中已存在,系统会给出提示并拒绝安装,此时可以加上参数—force来进行强制安装。

(6)rpm命令示例五——忽略依赖关系安装软件包

# rpm -ivh --nodeps php-4.3.9-3.1-i386.rpm

功能:安装软件包php时忽略与其它软件包的依赖关系,参数--nodeps表示忽略依赖关系

说明:在安装或卸载软件时经常会遇到提示“该软件包与某某软件包存在依赖关系”,只有加上参数--nodeps忽略掉依赖关系才能进行安装或卸载。

(7)卸载

首先通过 rpm -q <关键字> 可以查询到rpm包的名字

然后 调用 rpm -e <包的名字> 删除特定rpm包

如果遇到依赖,无法删除,使用 rpm -e --nodeps <包的名字> 不检查依赖,直接删除rpm包


十、 其他安装方式

yum install 软件名字

yum install yum-fastestmirror

yum remove

./configure

make

make install

make clean与make distclean


十一、 查看进程命令

1. ps命令

(1)ps命令示例一——不带参数

[user1@server2 ~]# ps

功能:查询在当前控制台上运行的进程。

(2)ps命令示例二——查看所有进程

[user1@server2 ~]# ps -aux

功能:查询系统中所有运行的进程,包括后台进程,其中参数a是所有进程,参数x包括不占用控制台的进程,参数u显示用户。

(3)ps命令示例三——查看所有进程

[user1@server2 ~]# ps -ef

功能:查询系统中所有运行的进程,包括后台进程,而且可以显示出每个进程的父进程号

2. pstree命令

(1)pstree命令示例一——树状格式显示进程列表

[user1@server2 ~]# pstree

功能:以树状格式显示系统的进程列表。

(2)pstree命令示例二——带进程号的树状格式显示进程列表

[user1@server2 ~]# pstree -p

功能:以树状格式显示系统的进程列表,并标识出每个进程的进程号。

3. top命令

[user1@server2 ~]# top

功能:动态地显示系统中的进程。

4. kill命令

(1)kill命令示例一——杀掉指定进程

[user1@server2 ~]# kill 3029

功能:kill命令可以杀掉一个进程,当然普通用户只能杀掉自己的进程。

说明:上述命令中3029是进程号;一般在执行kill命令之前,先用ps或pstree来查询一下将要被杀掉的进程的进程号。

(2)kill命令示例二——强制杀掉指定进程

[user1@server2 ~]# kill -9 3029

功能:强制终止3029号进程的运行,其中参数-9代表强制的意思。

说明:实际上kill命令是向该进程发送信号,该进程接到信号后决定是否停止运行,有些守护进程必须要收到参数9才终止运行。

重要的事情说三遍:转发,转发,转发,记得要点赞 收藏 转发哟~

,