Linux系统编程:(二)基础指令详解(1)
目录
前言
一、文件与目录基础操作
1.1 ls指令:目录内容的全能展示
1.2 pwd指令:定位当前工作空间
1.3 cd指令:目录导航
二、文件与目录创建管理
2.1 touch指令:时间戳与空文件创建
2.2 mkdir指令:多级目录构建
2.3 rmdir与rm指令:安全删除与强制清理
总结
前言
在 Linux 操作系统的学习和使用过程中,命令行界面(CLI)是开发者、运维人员与系统交互的核心方式。相比于图形用户界面(GUI),命令行不仅占用系统资源更少,还能通过组合指令实现更高效、更灵活的操作,尤其在服务器管理、自动化脚本编写等场景中更是不可或缺。
本文将聚焦 Linux 系统中最基础、最常用的 6 个核心指令 ——ls、pwd、cd、touch、mkdir、rmdir && rm,从指令功能、语法格式、常用选项到实际案例演示,进行全方位讲解。下面就让我们正式开始吧!
一、文件与目录基础操作
1.1 ls指令:目录内容的全能展示
ls
是文件系统探索的起点,其参数组合可实现精准信息提取,其基本语法为:
ls [选项] [⽬录或⽂件]
对于目录,该命令将列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
ls
指令有如下的常用选项:
- -a 列出 目录下的所有文件,其中包括以 . 开头的隐含文件。
- -d 能够将目录像文件一样显示,而不是仅仅只显示目录下的文件。比如:ls -d 指定目录。
- -i 能输出文件的i节点的索引信息。比如ls -ai 指定文件。
- -k 能以 k 字节的形式表示文件的大小。比如 ls ‒alk 指定文件 。
- -l 能够列出文件的详细信息。
- -n 能够用数字的 UID,GID 代替名称。
在 Linux 这种多用户、多任务操作系统中,为了实现对用户权限的精准管控和资源访问的有序管理,系统引入了 UID(User Identifier,用户标识号)和 GID(Group Identifier,组标识号)这两个核心概念,它们本质上是系统内部用于区分不同用户、不同用户组的数字编号,是 Linux 权限机制得以正常运行的 “底层身份证”,系统在处理用户操作、文件访问等请求时,并非依赖易于记忆的用户名或组名,而是通过这两个数字标识来确认身份并匹配对应的权限。
UID 是 Linux 系统为每个创建的用户分配的唯一非负整数,其核心作用是让系统能够准确识别不同用户身份 —— 即便存在用户名重复的情况(实际 Linux 系统不允许创建用户名相同的用户),只要 UID 不同,系统就会将其视为两个完全独立的用户,赋予不同的权限和资源访问范围。在 UID 的分配规则中,不同数值范围对应不同类型的用户,有着明确的功能划分:其中 UID 为 0 的用户是超级用户(即 root 用户),拥有系统的最高权限,能够执行任何操作,包括修改系统核心配置、删除任意文件、管理其他用户等,是系统管理员进行维护操作的关键账户;UID 范围在 1~999 之间的是系统用户(也称为伪用户),这类用户并非为实际登录使用而创建,而是系统自身运行某些服务或程序时所需的 “虚拟账户”,比如运行 Web 服务的 apache 用户、运行数据库服务的 mysql 用户,它们的存在是为了确保服务进程在特定权限范围内运行,避免因使用 root 权限而带来的安全风险;UID 范围在 1000 及以上的则是普通用户,这类用户是为实际使用系统的人员创建的,其权限受到严格限制,只能在自己的家目录(如 /home/ 用户名)下执行大部分操作,若要访问其他用户的文件或系统级目录,需要获得相应的权限授权。
GID 则是 Linux 系统为每个用户组分配的唯一非负整数,其核心作用是实现 “用户组级别的权限管理”—— 通过将多个用户归为同一个用户组,系统可以一次性为该组内所有用户分配相同的权限,无需对每个用户单独设置,极大简化了多用户场景下的权限管理操作。与 UID 类似,GID 也有明确的数值范围划分:GID 为 0 的用户组是 root 组,该组内的用户通常拥有较高的系统权限,与 root 用户的权限体系紧密关联;GID 范围在 1~999 之间的是系统组,这类组主要用于与系统用户(伪用户)配套,确保系统服务或程序在运行时能够通过组权限访问所需资源,比如 apache 用户对应的 apache 组、mysql 用户对应的 mysql 组,其作用是进一步限制服务进程的访问范围,提升系统安全性;GID 范围在 1000 及以上的是普通用户组,这类组通常是为了管理普通用户而创建,比如可以创建一个 “开发组”(dev),将所有开发人员加入该组,然后为该组分配项目目录的访问权限,使得组内所有成员都能协同操作项目文件,同时避免非组内用户访问这些资源。
在 Linux 系统中,每个用户都有一个 “主组”(初始组)和可以有多个 “附加组”(补充组):主组是用户创建时默认分配的组,通常与用户名同名,用户的所有新创建文件(如通过 touch 指令创建的文件)默认会归属到主组;附加组则是用户后续被加入的其他组,用户可以通过附加组获得该组所拥有的额外权限。例如,用户 user1 的主组是 user1(GID 1001),同时被加入到 dev 组(GID 1005),那么 user1 不仅拥有主组 user1 的权限,还拥有 dev 组的权限,能够访问 dev 组有权限的文件或目录。
通过 UID 和 GID,Linux 系统构建了一套清晰、高效的权限管理体系:当用户执行某个操作(如读取文件、修改目录)时,系统首先通过 UID 确认用户身份,再通过 GID 确认用户所属的用户组,然后根据文件或目录自身的权限设置(如 r 读、w 写、x 执行权限,分别对应所有者、所属组、其他用户三个层级),判断该用户是否有权执行该操作,最终实现对资源访问的严格控制,保障系统的安全性和稳定性。
- -F 在每个文件名后附上⼀个字符以说明该文件的类型, “*” 表示可执行的普通文件; “/” 表示⽬录;“@” 表示符号链接;“|” 表示FIFOs;“=”表示套接字(sockets)。
- -r 能够对⽬录反向排序。
- -t 能够以时间排序。
- -s 能够在l⽂件名后输出该文件的大小。
- -R 能够列出所有子目录下的文件。(递归)
- -1 表示一行只输出⼀个文件。
下面是指令的使用示例:
[whb@bite-alicloud test]$ ls
dir file.txt
[whb@bite-alicloud test]$ ls -a
. .. dir file.txt
[whb@bite-alicloud test]$ ls -a -l
total 12
drwxrwxr-x 3 whb whb 4096 Jan 11 15:01 .
drwx------ 22 whb whb 4096 Jan 11 14:21 ..
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
[whb@bite-alicloud test]$ ls -a -l -F
total 12
drwxrwxr-x 3 whb whb 4096 Jan 11 15:01 ./
drwx------ 22 whb whb 4096 Jan 11 14:21 ../
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir/
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
[whb@bite-alicloud test]$ ls -alFn
total 12
drwxrwxr-x 3 1003 1003 4096 Jan 11 15:01 ./
drwx------ 22 1003 1003 4096 Jan 11 14:21 ../
drwxrwxr-x 2 1003 1003 4096 Jan 11 14:22 dir/
-rw-rw-r-- 1 1003 1003 0 Jan 11 14:22 file.txt
1.2 pwd指令:定位当前工作空间
pwd指令的作用是显示用户当前所在的目录。
# 显示物理路径(解决符号链接干扰)
pwd -P
# 输出示例:
# /home/user/projects/real_path# 与/bin/pwd对比
/bin/pwd -L
# 输出示例:
# /projects/link_path # 可能显示符号链接路径
典型应用:
- 脚本中获取绝对路径时避免相对路径错误;
- 调试时确认实际工作目录。
1.3 cd指令:目录导航
在学习cd指令之前,我们先来认识一下在Linux中“路径”的相关知识:
在 Linux 系统中,磁盘上的文件和目录被组织成一棵目录树,这棵树中的每个节点要么是目录,要么是文件。其中,普通文件一定是这棵目录树的叶子节点,而目录则有所不同,它既可能是叶子节点(也就是空目录),也可能是树中的路径节点。我们需要理解路径存在的意义,这种树状的组织方式,本质上都是为了保证能够快速定位并查找到指定的文件,而要准确定位文件,就必须有一种具备唯一性的方案。在这棵目录树中,任何一个节点都只有一个父节点,所以从根目录开始去定位指定文件时,所形成的路径就具有了唯一性,这也是路径能够精准定位文件的核心原因。
在 Linux 的路径体系中,主要分为绝对路径和相对路径两种。绝对路径通常从根目录 “/” 开始,它不依赖于用户当前所处的目录,能够直接定位到目标文件;而相对路径则是相对于当前用户所在的目录来定位文件的路径方式。从使用场景和特性来看,绝对路径的优势在于其唯一性不会随着用户当前目录的变化而改变,因此在特定服务的配置文件中经常会使用绝对路径,以确保配置指向的文件始终准确无误;相对路径则因为使用起来更加便捷,不需要输入完整的路径信息,所以在命令行操作中被广泛使用,能有效提升用户在命令行下的操作效率。
Linux下的目录结构如下图所示:
了解了路径的相关知识之后,我们就可以正式开始学习cd指令了。
cd指令的语法形式如下:
cd ⽬录名
它的作用是改变工作目录,将当前工作目录改变到指定的目录下。
指令使用的示例如下所示:
# 返回上级⽬录
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd ..
[whb@bite-alicloud home]$ pwd
/home# 绝对路径定位⽬录或者⽂件
[whb@bite-alicloud home]$ pwd
/home
[whb@bite-alicloud home]$ cd /home/whb/test
[whb@bite-alicloud test]$ pwd
/home/whb/test# 相对路径定位⽬录或者⽂件
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ../temp/
[whb@bite-alicloud temp]$ pwd
/home/whb/temp# 每⼀次新建⼀个⽤⼾都会在/home⽬录下为新⽤⼾创建新的⼯作⽬录,⽬录以新⽤⼾名称命名
# root⽤⼾在安装操作系统的时候,就已经内置了⼯作⽬录: /root
[whb@bite-alicloud temp]$ ls /home# 返回上级⽬录
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd ..
[whb@bite-alicloud home]$ pwd
/home# 绝对路径定位⽬录或者⽂件
[whb@bite-alicloud home]$ pwd
/home
[whb@bite-alicloud home]$ cd /home/whb/test
[whb@bite-alicloud test]$ pwd
/home/whb/test# 相对路径定位⽬录或者⽂件
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ../temp/
[whb@bite-alicloud temp]$ pwd
/home/whb/temp# 每⼀次新建⼀个⽤⼾都会在/home⽬录下为新⽤⼾创建新的⼯作⽬录,⽬录以新⽤⼾名称命名
# root⽤⼾在安装操作系统的时候,就已经内置了⼯作⽬录: /root
[whb@bite-alicloud temp]$ ls /home
bss gaobo luojie whb wudu# 快速进⼊⾃⼰的家⽬录
[whb@bite-alicloud test]$ whoami
whb
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ~
[whb@bite-alicloud ~]$ pwd
/home/whb# 返回到最近访问⽬录
[whb@bite-alicloud ~]$ pwd # 当前在/home/whb⽬录下
/home/whb
[whb@bite-alicloud ~]$ cd / # 进⼊/⽬录
[whb@bite-alicloud /]$ pwd
/ [
whb@bite-alicloud /]$ cd - # 直接可以回退到最近⼀次所处的⽬录:/home/whb
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd - # 直接可以回退到最近⼀次所处的⽬录:/
/ [
whb@bite-alicloud /]$ pwd
/ [
whb@bite-alicloud /]$ cd - # 同上
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb
二、文件与目录创建管理
2.1 touch指令:时间戳与空文件创建
首先我们先来学习一下再Linux系统下的文件类型:
- Linux 系统的文件类型并非仅通过文件名后缀区分,而是有内在标识机制,可通过
ls -l
命令查看文件类型信息。- 普通文件:最常见的文件类型,用于存储文本、图像、程序等各类数据,在终端中以 “-” 符号开头标识。
- 目录文件:用于存放其他文件和子目录(类似文件夹),标识符号为 “d”。
- 字符设备文件:与硬件设备相关,以字符为单位进行数据传输(如键盘、鼠标等),标识为 “c”。
- 块设备文件:与硬件设备相关,以块为单位处理数据(如硬盘、U 盘等),标识为 “b”。
- 管道文件:主要用于进程间通信,分为匿名管道和命名管道,标识符号为 “p”。
- 套接字文件:用于网络通信中不同进程间的数据交换,标识为 “s”。
- 符号链接文件:也称软链接,类似 Windows 的快捷方式,用于指向另一个文件或目录,标识为 “l”。
- 每种文件类型都有特定用途和操作方式,了解这些类型对理解 Linux 文件组织结构和系统管理非常重要。
touch指令的语法形式如下:
touch [选项]... ⽂件...
touch命令的参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建⼀个不存在的文件。
常用的选项有:
- -a : change only the access time
- -c : change only the modification time
指令使用示例如下:
# 创建普通⽂件
[whb@bite-alicloud test]$ ls
dir file.txt
[whb@bite-alicloud test]$ touch newFile.txt
[whb@bite-alicloud test]$ ls
dir file.txt newFile.txt# 查看⽂件时间
[whb@bite-alicloud test]$ stat newFile.txtFile: ‘newFile.txt’Size: 0 Blocks: 0 IO Block: 4096 regular empty
file
Device: fd01h/64769d Inode: 1844719 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1003/ whb) Gid: ( 1003/ whb)
Access: 2023-01-11 15:06:45.832787572 +0800
Modify: 2023-01-11 15:06:45.832787572 +0800
Change: 2023-01-11 15:06:45.832787572 +0800Birth: -# 修改⽂件access时间
[whb@bite-alicloud test]$ touch -a newFile.txt
[whb@bite-alicloud test]$ stat newFile.txtFile: ‘newFile.txt’Size: 0 Blocks: 0 IO Block: 4096 regular empty
file
Device: fd01h/64769d Inode: 1844719 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1003/ whb) Gid: ( 1003/ whb)
Access: 2023-01-11 15:07:00.062846804 +0800
Modify: 2023-01-11 15:06:45.832787572 +0800
Change: 2023-01-11 15:07:00.062846804 +0800 # 该时间为何会变化?Birth: -# 修改⽂件Modify时间
[whb@bite-alicloud test]$ touch -m newFile.txt
[whb@bite-alicloud test]$ stat newFile.txtFile: ‘newFile.txt’Size: 0 Blocks: 0 IO Block: 4096 regular empty
file
Device: fd01h/64769d Inode: 1844719 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1003/ whb) Gid: ( 1003/ whb)
Access: 2023-01-11 15:07:00.062846804 +0800
Modify: 2023-01-11 15:09:19.428426903 +0800
Change: 2023-01-11 15:09:19.428426903 +0800Birth: -
2.2 mkdir指令:多级目录构建
mkdir指令用于在当前目录下创建一个名为“dirname”的目录。
其语法形式如下:
mkdir [选项] dirname...
mkdir同样也有常用的选项:
- -p/--parents: 可以是⼀个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即⼀次可以建立多个目录。
指令使用示例如下:
# 创建普通空⽬录
[whb@bite-alicloud test]$ ls -l
total 4
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
[whb@bite-alicloud test]$ mkdir mydir
[whb@bite-alicloud test]$ ls -l
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt# 递归建⽴多个⽬录,创建指定路径
[whb@bite-alicloud test]$ mkdir -p path1/path2/path3/path4
[whb@bite-alicloud test]$ ls -l
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1
[whb@bite-alicloud test]$ tree path1
path1
└── path2└── path3└── path4# tree命令是⼀个递归以树状结构显⽰指定⽬录的命令,如果没有安装
# 如果当前⽤⼾是root: yum install -y tree (因为现在开始⽤的都是root,所以推荐这个⽤
法)
# 如果当前⽤⼾是普通⽤⼾: sudo yum install -y tree (后⾯讲讲完vim,⼤家才能将⾃⼰添
加到系统信任列表中,暂时普通⽤⼾⽆法使⽤sudo)
2.3 rmdir与rm指令:安全删除与强制清理
rmdir是⼀个与mkdir相对应的命令,mkdir是建⽴⽬录,而rmdir是删除命令。
其语法形式如下:
rmdir [-p] [dirName]
rmdir的作用是删除空目录,适用于具有当前目录操作权限的所有使用者。
它也有一个常用的选项 —— -p:当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。下面依旧为大家提供一段指令使用的示例:
# 删除空⽬录
[whb@bite-alicloud test]$ ll
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1
[whb@bite-alicloud test]$ tree mydir/
mydir/0 directories, 0 files
[whb@bite-alicloud test]$ rmdir mydir
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1# 删除路径
[whb@bite-alicloud test]$ tree path1
path1
└── path2└── path3└── path43 directories, 0 files
[whb@bite-alicloud test]$ rmdir -p path1/path2/path3/path4
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt# 指定路径中有不为空的路径,便⽆法删除
[whb@bite-alicloud test]$ rmdir -p path1/path2/path3
rmdir: failed to remove ‘path1/path2/path3’: Directory not empty[whb@bite-alicloud test]$ touch path1/myfile.txt
[whb@bite-alicloud test]$ touch path1/path2/myfile.txt
[whb@bite-alicloud test]$ tree path1/
path1/
├── myfile.txt
└── path2├── myfile.txt└── path3└── path43 directories, 2 files
[whb@bite-alicloud test]$ rmdir -p path1/path2/path3/path4
rmdir: failed to remove directory ‘path1/path2’: Directory not empty
与rmdir不同的是,rm 命令可以同时删除文件或目录,并可适用于所有使用者。
rm命令的语法形式如下:
rm [-f-i-r-v] [dirName/dir]
rm命令有三个常用的选项:
- -f :即使文件属性为只读(即写保护),也可以直接删除;
- -i :删除前逐⼀询问确认;
- -r :删除目录及其下的所有文件。
rm命令的使用示例如下:
# 删除普通⽂件
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm file.txt
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1# 删除⽬录⽂件
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm dir
rm: cannot remove ‘dir’: Is a directory
[whb@bite-alicloud test]$ rm -r dir
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1# 删除普通⽂件前询问
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm -i newFile.txt
rm: remove regular empty file ‘newFile.txt’? y
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1# 删除⽬录前询问
[whb@bite-alicloud test]$ mkdir -p d/d/d/d
[whb@bite-alicloud test]$ tree d
d
└── d└── d└── d3 directories, 0 files
[whb@bite-alicloud test]$ rm -ri d
rm: descend into directory ‘d’? y
rm: descend into directory ‘d/d’? y
rm: descend into directory ‘d/d/d’? y
rm: remove directory ‘d/d/d/d’? y
rm: remove directory ‘d/d/d’? y
rm: remove directory ‘d/d’? y
rm: remove directory ‘d’? y
[whb@bite-alicloud test]$ ll
total 0# 递归强制删除⾮空⽬录
[whb@bite-alicloud test]$ tree path1/
path1/
├── myfile.txt
└── path2└── myfile.txt1 directory, 2 files
[whb@bite-alicloud test]$ rm -f path1
rm: cannot remove ‘path1’: Is a directory
[whb@bite-alicloud test]$ rm -rf path1
[whb@bite-alicloud test]$ ll
total 0
总结
通过系统掌握这些基础指令及其组合应用,大家可以显著提升Linux环境下的工作效率。建议大家在实际操作中逐步构建自己的指令库,形成个性化的工作流。以上就是本期博客的全部内容啦,谢谢大家支持!