大数据梦工厂(0005 – Hadoop-Shell命令指南大全)
1 – Hadoop Shell 命令简介
# 适用于任何文件系统
$ hadoop fs <args>
# 只能用于 HDFS 分布式文件系统
$ hadoop dfs <args>
# (推荐)和上面的命令作用相同,当使用 hadoop dfs 时内部会被转为 hdfs dfs 命令
$ hdfs dfs <args>
注意:如果以下 Shell 命令或参数不存在,可能是由于 Hadoop 版本过低。
2 – appendToFile
将本地单个文件或多个文件追加合并到目标文件系统。如果源路径设置为 “-”
,则从标准输入中读取输入内容追加到目标文件系统。
Usage: hdfs dfs [-appendToFile <localsrc> <dst>]
示例:
hdfs dfs -appendToFile localfile /user/hadoop/file
hdfs dfs -appendToFile localfile1 localfile2 /user/hadoop/file
hdfs dfs -appendToFile localfile hdfs://nn.example.com/user/hadoop/file
# 从标准输入中读取输入内容
hdfs dfs -appendToFile - hdfs://nn.example.com/user/hadoop/file
3 – cat
将指定文件的内容输出到 stdout
。
Usage: hdfs dfs [-cat [-ignoreCrc] <src>]
示例:
hdfs dfs -cat /user/hadoop/file
hdfs dfs -cat hdfs://nn.example.com/user/hadoop/file1 hdfs://nn.example.com/user/hadoop/file2
4 – checksum
返回文件的校验和信息。
Usage: hdfs dfs [-checksum [-v] <src>]
-v 显示文件的块大小。
示例:
hdfs dfs -checksum /user/hadoop/file
hdfs dfs -checksum hdfs://nn.example.com/user/hadoop/file
5 – chgrp
修改文件或目录的所属组。用户必须是文件/目录的所有者或者超级用户。
Usage: hdfs dfs [-chgrp [-R] GROUP PATH]
-R 通过目录结构递归的进行更改。
示例:
hdfs dfs -chgrp -R supergroup /user/hadoop/file
6 – chmod
修改文件或目录的权限。用户必须是文件/目录的所有者或者超级用户。
Usage: hdfs dfs [-chmod [-R] <MODE[,MODE] | OCTALMODE> PATH]
-R 通过目录结构递归的进行更改。
示例:
hdfs dfs -chmod -R 755 /user/hadoop/file
7 – chown
修改文件或目录的拥有者。用户必须是文件/目录的所有者或者超级用户。
Usage: hdfs dfs [-chown [-R] [OWNER]:[:[GROUP]] PATH]
-R 通过目录结构递归的进行更改。
示例:
hdfs dfs -chown -R cloudera:cloudera /user/hadoop/file
8 – concat
将源文件连接到目标文件中。目标文件和源文件应在同一目录中。
Usage: hdfs dfs [-concat <target path> <src path> <src path>]
示例:
hdfs dfs -concat /user/hadoop/target-file /user/hadoop/file0 /user/hadoop/file1
9 – copyFromLocal
只能从本地复制到目标文件系统,和 -put 命令相似
。
Usage: hdfs dfs [-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> <dst>]
-f 如果目标文件已存在,则覆盖。
-p 保留访问和修改时间、所有权和权限。
-l 允许 DataNode 将文件延迟保存到磁盘,强制副本系数为 1。此参数将导致持久性降低。
-d 跳过创建后缀为 `<dst>._COPYING_` 的临时文件。
-t <thread count> 使用的线程数,默认为 1。上传包含 1 个以上文件的目录时很有用。
示例:
hdfs dfs -copyFromLocal -f localfile /user/hadoop/file
10 – copyToLocal
仅能从目标文件系统复制到本地,和 get 命令相似。
Usage: hdfs dfs [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> <localdst>]
-f 如果目标文件已存在,则覆盖。
-p 保留访问和修改时间、所有权和权限。
-ignorercrc 对下载的文件跳过 CRC 检查。
-crc 为下载的文件写入 CRC 校验和。
示例:
hdfs dfs -copyToLocal /user/hadoop/file localfile
11 – count
递归统计指定文件下的目录、文件和字节数、配额和使用情况。带有 -count 的输出列是:DIR_COUNT、FILE_COUNT、CONTENT_SIZE、PATHNAME。
Usage: hdfs dfs [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] [-s] <path>]
-u/-q 控制输出包含哪些列。-q 表示显示配额,-u 输出限制为仅显示配额和使用情况。
- -count -q 的输出列是:QUOTA、REMAINING_QUOTA、SPACE_QUOTA、REMAINING_SPACE_QUOTA、DIR_COUNT、FILE_COUNT、CONTENT_SIZE、PATHNAME。
- -count -u 的输出列是:QUOTA、REMAINING_QUOTA、SPACE_QUOTA、REMAINING_SPACE_QUOTA、PATHNAME。
-t 显示每种存储类型的配额和使用情况。如果未给出 -u 或 -q 选项,则忽略 -t 选项。可以在 -t 选项中使用的可能参数列表(除了参数“”之外不区分大小写):“”、“all”、“ram_disk”、“ssd”、“disk” 或 “archive”。
-h 格式化显示大小(例如:128.0MB 而不是 134217728)。
-v 显示标题行。
-x 从结果计算中排除快照。如果没有 -x 选项(默认),结果总是从所有 INode 计算,包括给定路径下的所有快照。如果给出 -u 或 -q 选项,则忽略 -x 选项。
-e 显示每个文件的纠删码策略。
- -count -e 的输出列是:DIR_COUNT、FILE_COUNT、CONTENT_SIZE、ERASURECODING_POLICY、PATHNAME。
- ERASURECODING_POLICY 是文件的策略名称。如果对该文件设置了纠删码策略,它将返回该策略的名称。如果没有设置纠删码策略,它会返回 “Replicated”,这表示它使用复制存储策略。
-s 显示每个目录的快照数。
示例:
hdfs dfs -count /user/hadoop/file1 /user/hadoop/file2
hdfs dfs -count -q /user/hadoop/file
hdfs dfs -count -q -h /user/hadoop/file
hdfs dfs -count -q -h -v /user/hadoop/file
hdfs dfs -count -u /user/hadoop/file
hdfs dfs -count -u -h /user/hadoop/file
hdfs dfs -count -u -h -v /user/hadoop/file
hdfs dfs -count -e /user/hadoop/file
12 – cp
将源文件移动到目标路径。此命令可以有多个源路径,这种情况下目标路径必须是一个目录。
Usage: hdfs dfs [-cp [-f] [-p | -p[topax]] [-d] <src> <dst>]
-f 如果目标文件已存在,则覆盖。
-p 将保留文件属性 [topx](时间戳、所有权、权限、ACL、XAttr)。
- 如果 -p 没有指定 arg,则保留时间戳、所有权、权限。
- 如果指定了 -pa,则保留权限也是因为 ACL 是权限的超集。
-d 跳过复制后缀为 `<dst>._COPYING_` 的临时文件。
示例:
hdfs dfs -cp /user/hadoop/file1 /user/hadoop/file2
hdfs dfs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
13 – createSnapshot
创建目录的快照。此操作需要快照目录的所有者权限。
Usage: hdfs dfs [-createSnapshot <snapshotDir> [<snapshotName>]]
snapshotDir 快照目录的路径。
snapshotName (可选)快照的名称。当省略时,使用格式为 `“'s'yyyyMMdd-HHmmss.SSS”` 的时间戳生成默认名称,例如:`“s20130412-151029.033”`。
示例:
hdfs dfs -createSnapshot /user/hadoop/dir s1
Created snapshot /user/hadoop/dir/.snapshot/s1
14 – renameSnapshot
重命名一个快照。此操作需要快照目录具有所有者权限。
Usage: hdfs dfs [-renameSnapshot <snapshotDir> <oldName> <newName>]
示例:
hdfs dfs -renameSnapshot /user/hadoop/dir s1 s2
15 – deleteSnapshot
删除快照。此操作需要快照目录具有所有者权限。
Usage: hdfs dfs [-deleteSnapshot <snapshotDir> <snapshotName>]
示例:
hdfs dfs -deleteSnapshot /user/hadoop/dir s2
16 – df
显示可用空间。
Usage: hdfs dfs [-df [-h] [<path>]]
-h 格式化显示大小(例如:128.0MB 而不是 134217728)。
示例:
hdfs dfs -df /user/hadoop/dir
17 – du
显示给定目录中包含文件和目录的大小或文件的长度(如果它只是一个文件)。
Usage: hdfs dfs [-du [-s] [-h] [-v] [-x] <path>]
-s 显示文件长度的汇总摘要,而不是单个文件。如果没有 -s 选项,计算是通过从给定路径深入 1 级来完成的。
-h 格式化显示大小(例如:128.0MB 而不是 134217728)。
-v 将列名显示为标题行。
-x 将从结果计算中排除快照。如果没有 -x 选项(默认),结果总是从所有 INode 计算,包括给定路径下的所有快照。
du 返回以下格式:
size disk_space_consumed_with_all_replicas full_path_name
文件大小 所有副本占用的磁盘空间 完整路径名
示例:
hdfs dfs -du /user/hadoop/dir /user/hadoop/file
18 – expunge
从回收站中永久删除早于检查点中保留阈值的文件,并创建新的检查点。
创建检查点后,回收站中最近删除的文件将移动到检查点下。检查点中早于 fs.trash.interval
的文件将在下次调用 -expunge 命令时永久删除。
如果文件系统支持该功能,用户可以通过存储为 fs.trash.checkpoint.interval
(在 core-site.xml 中)的参数配置定期创建和删除检查点。这个值应该小于或等于 fs.trash.interval
。
Usage: [-expunge [-immediate] [-fs <path>]]
-immediate 立即删除当前用户回收站中的所有文件,忽略 `fs.trash.interval` 设置。
-fs 提供的文件系统将被清除,而不是默认文件系统并创建检查点。
示例:
hdfs fs -expunge --immediate -fs s3a://landsat-pds/
19 – find
查找与指定表达式匹配的所有文件。如果未指定路径,则默认为当前工作目录。如果未指定表达式,则默认为 -print
。
Usage: hdfs dfs [-find <path> <expression>]
-name 将要查找文件的文件名。
-iname 将要查找文件的文件名,不区分大小写。
-print 标准输出文件名。
-print0 标准输出文件名,且输出在一行。
运算符包括:-a 和 -and。
示例:
hdfs dfs -find / -name test
hdfs dfs -find / -name test -print
20 – get
将文件复制到本地文件系统。
Usage: hdfs dfs [-get [-f] [-p] [-ignoreCrc] [-crc] <src> <localdst>]
-p 保留访问和修改时间、所有权和权限。
-f 如果目标文件已经存在,则覆盖目标文件。
-ignorercrc 对下载的文件跳过 CRC 检查。
-crc 为下载的文件写入 CRC 校验和。
示例:
hdfs dfs -get /user/hadoop/file localfile
hdfs dfs -get hdfs://nn.example.com/user/hadoop/file localfile
21 – getfacl
显示文件和目录的访问控制列表 (ACL)。如果目录具有默认 ACL dfs.namenode.acls.enabled
(在 hdfs-site.xml 中),则 getfacl 会显示默认 ACL。
Usage: hdfs dfs [-getfacl [-R] <path>]
-R 递归列出所有文件和目录的 ACL 权限。
path 要列出的文件或目录。
示例:
hdfs dfs -getfacl /user/hadoop/file
hdfs dfs -getfacl -R /user/hadoop/dir
22 – getfattr
显示文件或目录的扩展属性名称和值(如果存在)。
Usage: hdfs dfs [-getfattr [-R] {-n name | -d} [-e en] <path>]
-R 递归列出所有文件和目录的属性。
-n name 转储命名的扩展属性值。
-d 转储与路径名关联的所有扩展属性值。
-e encoding 在检索值后对其进行编码。有效的编码是 `“text”、“hex” 和 “base64”`。
- 编码为文本字符串的值用双引号 `(")` 括起来;
- 编码为十六进制的值以 `0x` 为前缀;
- 编码为 base64 的值以 `0` 为前缀。
path 要列出的文件或目录。
示例:
hdfs dfs -getfattr -d /user/hadoop/file
hdfs dfs -getfattr -R -n user.myAttr /user/hadoop/dir
23 – getmerge
将源目录和目标文件作为输入,并将 src 中的文件连接到目标本地文件中。
Usage: hdfs dfs [-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
-nl 在每个文件末尾添加一个换行符 (LF)。
-skip-empty-file 在空文件的情况下,不需要添加换行符。
示例:
hdfs dfs -getmerge -nl /src /opt/output.txt
hdfs dfs -getmerge -nl /src/file1.txt /src/file2.txt /output.txt
24 – head
显示文件的开头 1KB 字节内容输出到 stdout
。
Usage: hdfs dfs [-head <file>]
示例:
hdfs dfs -head /user/hadoop/file
25 – help
显示给定命令或所有命令的帮助。
Usage: hdfs dfs [-help [cmd]]
示例:
hdfs dfs -help
hdfs dfs -help ls
26 – ls
如果是文件,则按照以下格式返回文件的统计信息:
permissions number_of_replicas userid groupid filesize modification_date modification_time filename
权限 副本系数 用户ID 组ID 文件大小 修改日期 修改时间 文件名
如果是目录,则它像在 Unix 中一样返回其直接子级的列表。一个目录被列为:
permissions userid groupid modification_date modification_time dirname
权限 用户ID 组ID 修改日期 修改时间 文件名
默认情况下,目录中的文件按文件名排序。
Usage: hdfs dfs [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path>]]
-C 只显示文件和目录的路径。
-d 目录被列为普通文件。
-h 格式化显示大小(例如:128.0MB 而不是 134217728)。
-q 打印 ?而不是不可打印的字符。
-R 递归列出遇到的子目录。
-t 按修改时间排序输出(最近的在前)。
-S 按文件大小排序输出。
-r 颠倒排序顺序。
-u 使用访问时间而不是修改时间进行显示和排序。
-e 显示文件和目录的纠删码策略。
示例:
hdfs dfs -ls /user/hadoop/file
hdfs dfs -ls -h /user/hadoop/dir
27 – mkdir
在指定位置创建目录。
Usage: hdfs dfs [-mkdir [-p] <path>]
-p 创建多级目录,如果目录已经存在则不会返回失败。
示例:
hdfs dfs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
hdfs dfs -mkdir -p /user/hadoop/dir/a/b/c
28 – moveFromLocal
源文件复制后会被删除,与 put 命令类似
。
Usage: hdfs dfs [-moveFromLocal [-f] [-p] [-l] [-d] <localsrc> <dst>]
-f 如果目标文件已存在,则覆盖。
-p 保留访问和修改时间、所有权和权限。
-l 允许 DataNode 将文件延迟保存到磁盘,强制副本系数为 1。此参数将导致持久性降低。
-d 跳过复制后缀为 `<dst>._COPYING_` 的临时文件。
示例:
hdfs dfs -copyFromLocal /user/hadoop/file1 /user/hadoop/file2
29 – moveToLocal
显示尚未实现
消息。
Usage: hdfs dfs [-moveToLocal <src> <localdst>]
30 – mv
将源文件移动到目标路径。此命令可以有多个源路径,这种情况下目标路径必须是一个目录。不允许跨文件系统移动文件。
Usage: hdfs dfs [-mv <src> <dst>]
示例:
hdfs dfs -mv /user/hadoop/file1 /user/hadoop/file2
hdfs dfs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/dir1
31 – put
将单个或多个源路径从本地文件系统复制到目标文件系统。如果源路径设置为 “-”
,则从标准输入中读取输入内容追加到目标文件系统。
Usage: hdfs dfs [-put [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> <dst>]
-f 如果目标文件已存在,则覆盖。
-p 保留访问和修改时间、所有权和权限。
-t <thread count> 使用的线程数,默认为 1。上传包含 1 个以上文件的目录时很有用。
-l 允许 DataNode 将文件延迟保存到磁盘,强制副本系数为 1。此参数将导致持久性降低。
-d 跳过创建后缀为 `<dst>._COPYING_` 的临时文件。
示例:
hdfs dfs -put localfile /user/hadoop/file
hdfs dfs -put -f localfile1 localfile2 /user/hadoop/dir
# 从标准输入中读取输入内容
hdfs dfs -put - /user/hadoop/file
32 – rm
删除指定的文件。
如果启用了回收站,文件系统会将删除的文件移动到回收站目录。
目前,回收站功能默认是禁用的。可以通过为参数 fs.trash.interval
(在 core-site.xml 中)设置一个大于0的值来启用回收站。
Usage: hdfs dfs [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src>]
-f 如果文件不存在,则不会显示诊断消息或修改退出状态以反映错误。
-r 等同于 `-R`。
-R 以递归方式删除目录及其下的任何内容。
-skipTrash 跳过回收站(如果启用),并立即删除指定的文件。
-safely 在删除文件总数大于 `hadoop.shell.delete.limit.num.files` 的目录之前需要安全确认(在 core-site.xml 中,默认值:100)。
- 它可以与 -skipTrash 一起使用以防止意外删除大目录。在确认之前递归遍历大目录以计算要删除的文件数时预计会出现延迟。
示例:
hdfs dfs -rm hdfs://nn.example.com/file /user/hadoop/dir
33 – rmdir
删除空目录。
Usage: hdfs dfs [-rmdir [--ignore-fail-on-non-empty] <dir>]
--ignore-fail-on-non-empty 忽略因目录非空删除失败的信息。
示例:
hdfs dfs -rmdir /user/hadoop/emptydir
34 – setfacl
设置文件和目录的访问控制列表(ACL)。
Usage: hdfs dfs [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
-R 递归列出所有文件和目录的 ACL 权限。
-b 删除除基本 ACL 条目之外的所有条目。用户、组和其它的条目被保留为与权限位的兼容性。
-k 删除默认的 ACL。
-m 修改 ACL。将新条目添加到 ACL,并保留现有的条目。
-x 删除指定的 ACL 条目。保留其它 ACL 条目。
--set 完全替换 ACL,丢弃所有现有的条目。所述 acl_spec 必须包括用户、组和其它有权限位的兼容性。
如果 ACL 规范仅包含访问条目,则保留现有的默认条目。
如果 ACL 规范仅包含默认条目,则保留现有访问条目。
如果 ACL 规范同时包含访问和默认条目,则两者都将被替换。
acl_spec 逗号分隔的 ACL 条目列表。
path 要修改的文件或目录。
示例:
hdfs dfs -setfacl -m user:hadoop:rw- /user/hadoop/file
hdfs dfs -setfacl -x user:hadoop /user/hadoop/file
hdfs dfs -setfacl -b /user/hadoop/file
hdfs dfs -setfacl -k /user/hadoop/dir
hdfs dfs -setfacl --set user::rw-,user:hadoop:rw-,group::r--,other::r-- /user/hadoop/file
hdfs dfs -setfacl -R -m user:hadoop:r-x /user/hadoop/dir
hdfs dfs -setfacl -m default:user:hadoop:r-x /user/hadoop/dir
35 – setfattr
设置文件或目录的扩展属性名称和值。
Usage: hdfs dfs [-setfattr {-n name [-v value] | -x name} <path>]
-n name 扩展属性名称。
-v value 扩展属性值。该值有三种不同的编码方法。
- 如果参数用双引号 `(")` 括起来,则值是引号内的字符串;
- 如果参数以 `0x` 或 `0X` 为前缀,则将其视为十六进制数。
- 如果参数以 `0s` 或 `0S` 开头,则将其视为 base64 编码。
-x name 删除扩展属性。
path 文件或目录。
示例:
hdfs dfs -setfattr -n user.myAttr -v myValue /user/hadoop/file
hdfs dfs -setfattr -n user.noValue /user/hadoop/file
hdfs dfs -setfattr -x user.myAttr /user/hadoop/file
36 – setrep
修改一个文件的副本系数,如果是目录,则该命令递归的更改以该目录为根目录树下所有文件的副本系数。执行此命令时,将忽略 EC 文件。
Usage: hdfs dfs [-setrep [-R] [-w] <rep> <path>]
-R 用于递归改变目录下所有文件的副本系数。
-w 请求命令是否等待复制完成。这可能会花费很长时间。
示例:
hdfs dfs -setrep -w 3 /user/hadoop/dir
37 – stat
返回指定格式文件/目录
的统计信息。格式接受八进制 (%a) 和符号 (%A) 的权限、以字节为单位的文件大小 (%b)、类型 (%F)、所有者的组名 (%g)、名称 (%n)、块大小 (%o) )、复制 (%r)、所有者的用户名 (%u)、访问日期 (%x, %X) 和修改日期 (%y, %Y)。%x 和 %y 将 UTC 日期显示为 “yyyy-MM-dd HH:mm:ss”,%X 和 %Y 显示自 UTC 1970 年 1 月 1 日以来的毫秒数。如果未指定格式,则默认使用 %y。
Usage: hdfs dfs [-stat [format] <path>]
示例:
hdfs dfs -stat /user/hadoop/file
2021-08-25 09:25:23
hdfs dfs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /user/hadoop/file
type:regular file perm:a hdfs:supergroup size:17 mtime:2021-08-25 09:25:23 atime:x name:file
38 – tail
显示文件的最后 1KB 字节内容输出到 stdout
。
Usage: hdfs dfs [-tail [-f] [-s <sleep interval>] <file>]
-f 随着文件的增长输出附加数据。
-s 与 `-f` 参数一起定义迭代之间的睡眠间隔(以毫秒为单位)。
示例:
hdfs dfs -tail /user/hadoop/file
39 – test
判断文件/目录信息。
Usage: hdfs dfs [-test -[defswrz] <path>]
-d 如果路径是目录,则返回0。
-e 如果路径存在,则返回0。
-f 如果路径是文件,则返回0。
-s 如果路径不为空,则返回0。
-w 如果路径存在并且被授予写权限,则返回0。
-r 如果路径存在并且被授予读取权限,则返回0。
-z 如果文件是0字节,则返回0。
示例:
hdfs dfs -test -e filename
40 – text
以文本格式输出源文件并。允许的格式为 zip
和 TextRecordInputStream
。
Usage: hdfs dfs [-text [-ignoreCrc] <src>]
示例:
hdfs dfs -text /user/hadoop/file
41 – touch
将指定的文件的访问和修改时间更新为当前时间。如果该文件不存在,则创建一个空文件,并将当前时间作为该文件的时间戳。
Usage: hdfs dfs [-touch [-a] [-m] [-t TIMESTAMP (yyyyMMdd:HHmmss) ] [-c] <path>]
-a 仅更改访问时间。
-m 仅更改修改时间。
-t 指定时间戳(格式为 yyyyMMdd:HHmmss)而不是当前时间。
-c 如果文件不存在,则不创建文件。
示例:
hdfs dfs -touch /user/hadoop/file
hdfs dfs -touch -m -t 20210825:230000 /user/hadoop/fileame
hdfs dfs -touch -t 20210825:230000 /user/hadoop/file
hdfs dfs -touch -a /user/hadoop/file
42 – touchz
创建一个空文件。如果文件以非 0KB 字节存在,则返回错误。
Usage: hdfs dfs [-touchz <path>]
示例:
hdfs dfs -touchz /user/hadoop/file
43 – truncate
与指定文件模式匹配的所有文件截断为指定长度。
Usage: hdfs dfs [-truncate [-w] <length> <path>]
-w 请求命令等待块恢复完成。
- 如果没有 -w 参数,文件可能会在恢复过程中保持不关闭一段时间。在此期间,无法重新打开文件进行追加。
示例:
hdfs dfs -truncate 55 /user/hadoop/file1 /user/hadoop/file2
hdfs dfs -truncate -w 127 hdfs://nn1.example.com/user/hadoop/file1
44 – usage
返回单个命令的帮助信息。
Usage: hdfs dfs [-usage [cmd]]
示例:
hdfs dfs -usage ls
::: hljs-center
扫一扫,我们的故事就开始了。
:::
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/145154.html