欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 3.1 > Linux文件管理(基础版)

3.1 > Linux文件管理(基础版)

2024/10/24 11:29:52 来源:https://blog.csdn.net/qq_55902573/article/details/143134822  浏览:    关键词:3.1 > Linux文件管理(基础版)

目录

    • Linux 的命名规则
        • file & stat 命令查看文件详细信息
    • 文件管理基础 之 “增”
        • mkdir 创建文件夹
        • touch 命令创建普通文件
        • ln 命令创建链接
        • cp 命令复制文件
    • 文件管理基础 之 “删”
        • rmdir 命令删除空文件夹
        • rm 命令删除一切
        • trash 命令:第三方回收站
    • 文件管理基础 之 “改”
        • mv 命令修改路径 & 重命名
    • 文件管理基础 之 “查”
        • ls 命令及其常用选项,更多参数选项使用 --help 查看
        • cd 命令及其常用选项等
        • pwd 命令
        • find 命令查找一切
        • cat 命令查看文件内容
        • more 命令查看文件内容
        • less 命令查看文件内容
        • head 命令查看文件内容的开头
        • tail 命令查看文件内容的结尾
        • nl 命令查看文件内容
        • xxd 命令查看二进制文件数据

Linux 的命名规则

相对于其他操作系统(如 Windows )来说,Linux 的命名规则并没有那么多条条框框,还算是比较自由的。在 Linux 中,它的命名规则有如下几点要求:

  • 首先是大小写敏感:例如在 Linux 中,文件 demo 和文件 Demo 不是一个文件,然而这在 Windows 中却是相同的文件。
  • 其次是 Linux 除了不允许 / 字符出现在名称中,其他任何字符都可以,这一点很宽松。
  • 然后是文件名称长度不要超过 255 个字符。
  • 最后是在 Linux 中没有文件后缀的说法,Linux 中一切皆是文件,你想用啥后缀都行,但还是建议遵循共识规范来命名。

那么问题来了,我如何识别一个文件是什么类型的文件呢???


第一种方式:看前缀,这大致识别文件是什么类型,也是我们最常用的方式,虽然有时候不靠谱,但能用就行

  • 文件类型: - 普通文件; d 文件夹; l 链接文件; b 块设备文件; c 字符设备文件; p 管道文件; s 套接字文件
[test@demo ~]$ ls -l		# 使用 ls 选项加 -l 选项,通过每一行的第一个字符来判定文件类型
总用量 0
drwxrwxr-x. 2 test test 6 1021 23:01 dir1		# 文件夹
-rw-rw-r--. 1 test test 0 1021 23:02 file1		# 普通文件
lrwxrwxrwx. 1 test test 5 1021 23:04 file2 -> file1		# 链接文件
file & stat 命令查看文件详细信息
[test@demo ~]$ file file1		# 通过 file 命令查看,这也是最常见的辨别一个文件的类型的方式
file1: ASCII text				# 当前文件为一个普通的 ascii 码字符文件
[test@demo ~]$ file dir1		
dir1: directory[test@demo ~]$ stat file1		# 使用 stat 命令查看文件的 inode 块信息,也可以知道当前文件类型文件:file1大小:4               块:8          IO 块:4096   普通文件	# 当前文件类型时普通文件
设备:fd02h/64770d      Inode:136         硬链接:1
......

在 Linux 中,请不要通过文件后缀来辨别文件类型,除非你信任文件命名者采用了大家约定俗成的命名规范

文件管理基础 之 “增”

mkdir 创建文件夹
[test@demo ~]$ mkdir dir1		# 创建一个目录
[test@demo ~]$ mkdir dir2 dir3		# 创建多个目录,或使用大括号 mkdir {dir2,dir3}
[test@demo ~]$ mkdir -p dir4/a/b/c		# 使用 -p 参数递归创建多个目录
[test@demo ~]$ tree dir4
dir4
└── a└── b└── c
[test@demo ~]$ mkdir -m 700 dir5		# 使用 -m 参数在创建目录的同时设置权限,关于权限的问题后面再说
[test@demo dir5]$ cd dir5 && ll -a
总用量 0
drwx------. 2 test test   6 1021 23:28 .		# 当前文件夹的权限创建时给的权限为 700
touch 命令创建普通文件
[test@demo ~]$ touch file1				# 创建一个普通空文件
[test@demo ~]$ touch file2 file3		# 创建多个普通空文件,或使用大括号 touch {file2,file3}[test@demo ~]$ ll --time=atime file1
-rw-rw-r--. 1 test test 0 1021 23:37 file1
[test@demo ~]$ touch file1				# 当文件存在时,使用 touch 创建文件只会修改文件的访问时间
[test@demo ~]$ ll --time=atime file1
-rw-rw-r--. 1 test test 0 1021 23:40 file1[test@demo ~]$ touch -d "1999-12-12 04:23" file1		# touch 一般用于修改文件的时间,更多参数使用 --help 查看
[test@demo ~]$ ll --time=atime file1
-rw-rw-r--. 1 test test 0 1212 1999 file1
ln 命令创建链接

关于链接文件的 ”增“,链接文件分为 软链接 和 硬链接 两种类型,关于软硬链接的底层原理则需要了解 ext 文件系统的存储原理,则都是后话了。

  • 软链接:类似于 Windows 中的快捷方式,链接文件指向源文件,如果源文件发生改变则链接文件也会发生相同改变。
  • 硬链接:每个文件都有一个 inode 块来记录相关信息,当创建硬链接时就是为一个已存在的 inode 又在其中建立了一个新的目录项,也就是说多个文件名指向同一个 inode。不理解很正常,说人话就是 硬链接指向的源文件如果发生任何变化,链接文件都会发生相应变化,即使源文件被删了,也只是少了一个文件记录项而已,只要 inode 块还在,硬链接就还是可用的。
[test@demo ~]$ ln -s f1 ln1			# 使用 -s 参数创建一个软链接,指向源文件 f1
[test@demo ~]$ ll
-rw-rw-r--. 1 test test 0 1022 00:08 f1
lrwxrwxrwx. 1 test test 2 1022 00:08 ln1 -> f1		# 建立的软链接 ln1 指向了 f1,如果源文件被删除,则当前链接不可用[test@demo ~]$ ln f1 ln2			# 建立一个硬链接,指向源文件 f1
[test@demo ~]$ ll
-rw-rw-r--. 2 test test 0 1022 00:08 f1
-rw-rw-r--. 2 test test 0 1022 00:08 ln2			# 硬链接,当 f1 被删除,则 ln2 还是可用,因为 inode 块还在
[test@demo ~]$ stat f1				# 查看 f1 文件的 inode 块信息文件:f1大小:0               块:0          IO 块:4096   普通空文件
设备:fd02h/64770d      Inode:136         硬链接:2		# 当前硬链接数为 2,即包含 f1 和 ln2 两个
cp 命令复制文件
[test@demo ~]$ cp file1 copy1		# 将文件 file1 复制为文件 copy1
[test@demo ~]$ cp -d ln1 ln2		# 使用 -d 参数,复制符号链接文件本身,而不是它所指向的源文件
[test@demo ~]$ cp -p  file1 file2	# 使用 -p 参数,复制的文件将会保留源文件的所有属性,如权限、时间、属主等
[test@demo ~]$ cp --preserve=mode f1 ffff	# 使用完整选项可以指定具体保留哪些属性,如权限(mode)、时间戳(timestamps)等
[test@demo ~]$ cp -r dir dircopy	# 使用 -r 参数,将递归复制 dir 中所有文件和目录
[test@demo ~]$ cp -a file1 copy2	# 使用 -a 参数,等于同时使用 -d -p -r
[test@demo ~]$ cp -l file1 copy3	# 使用 -l 参数,以复制的形式创建 file1 的硬链接
[test@demo ~]$ cp -s file1 copy4	# 使用 -s 参数,以复制的形式创建指向 file1 的软链接
[test@demo ~]$ cp -n file1 file3	# 使用 -n 参数,在复制文件 file1 时,如果 file3 已存在,则取消本次复制
[test@demo ~]$ cp -i file1 file2	# 使用 -i 参数,交互式复制,若文件 file2 存在,则给出提示
cp:是否覆盖'file2'? y				# file2 存在,给出提示,输入 n 拒绝,输入 y 允许
[test@demo ~]$ cp -f file1 file2	# 使用 -f 参数,强制复制,若目标文件已存在,则将其覆盖
[test@demo ~]$ cp -u f1 f2			# 使用 -u 参数,若 f1 的最近改动时间被 f2 新,则将 f1 复制到 f2,否则忽略本次复制
[test@demo ~]$ cp -b f1 f3 && ls	# 使用 -b 参数,当 f3 存在且于 f1 内容不同时,则先备份 f3 ,再将 f1 复制为 f3
f1  f2  f3  f3~						# f3~ 创建的为备份文件

文件管理基础 之 “删”

rmdir 命令删除空文件夹
[test@demo ~]$ rmdir dir1			# 使用 rmdir 删除空目录,若目录非空,则删除失败
[test@demo ~]$ tree a
a									# 虽然每个目录都为空,但是目录树存在多个分支,所以不能删除
├── b
│   └── c
└── d
[test@demo ~]$ rmdir -p a/b/c		# 使用 -p 参数,递归从最底层开始依次删除所有空目录,前提是目录树只能是一条线
rmdir: 删除目录 'a' 失败: 目录非空

上面的命令虽然很鸡肋,但是在一些应用场景下它是安全的,可以防止手贱贸然删除一些文件

rm 命令删除一切
[test@demo ~]$ rm file1				# 使用 rm 命令,可以删除一切文件,没有回收站的那种删除
[test@demo ~]$ rm -r dir1			# 使用 -r 参数,可以删除一切目录
[test@demo ~]$ rm -i file1			# 使用 -i 参数,在删除之前进行询问,可以防止手贱意外删除
[test@demo ~]$ rm -f file1			# 使用 -f 参数,强制删除文件,和 -r 搭配成 -rf 可以强制删除目录
[test@demo ~]$ rm -rf dir1 file1	# 终极命令,可以删除任何文件目录

为什么你在使用 rm 不加 -i 时还是存在删除提示??? 因为系统使用了 alias rm=“rm -i” 命令给你做了别名,等于是防呆设计。在没有完全把握之前,请不要使用终极命令大力出奇迹,虽然系统尽力防止你手贱,但是防呆不防傻。

trash 命令:第三方回收站
# 当你没有安装 RHEL 系列的额外软件仓库 epel 时,请先安装此仓库;如果你没有条件,可以忽略这一步
[root@demo ~]$ sudo dnf install epel-release			# 安装 epel 软件仓库# 注意:此软件需要你的系统中已存在 python 环境
# 如果你没有安装 epel 仓库,则可以通过 https://pkgs.org 网站搜索和下载对应发行版的 trash-cli 软件包和依赖
[root@demo ~]$ sudo dnf install -y trash-cli			# 从 epel 仓库中安装 trash-cli 软件包# 对于离线安装此软件包的用户,执行如下命令来离线安装
[test@demo ~]$ ls					# 首先确定你已经拥有了如下两个软件包,其中第一个为依赖包,第二个为软件包
python3-unipath-1.1-16.el8.noarch.rpm  trash-cli-0.21.4.18-2.el8.noarch.rpm
[test@demo ~]$ sudo rpm -ivh *		# 执行命令安装软件包,其中 * 表示当前文件夹下所有文件
[sudo] test 的密码:
......[test@demo ~]$ trash file1				# 使用 trash 命令删除文件到回收站中
[test@demo ~]$ trash-list				# 使用 tsash-list 命令查看回收站
2024-10-22 18:21:15 /home/test/file1
[test@demo ~]$ trash-restore file1		# 使用 trash-restore 来恢复文件,(请切换到需要恢复的文件夹中执行)0 2024-10-22 18:21:15 /home/test/file1
What file to restore [0..0]: 0			# 查询当前文件夹下可以恢复的同名文件个数,通过对应编号来选取需要恢复的文件
[test@demo ~]$ trash-rm file1			# 使用 trash-rm 来删除回收站中对应文件,(会删除所有同名文件)
[test@demo ~]$ trash-empty 20			# 使用 trash-empty 来清空回收站,20 表示删除过去 20 天的文件,不加天数则删除所有

注意:trash 删除文件并不是真正的删除,而是将文件移入了 ~/.local/share/Trash 的文件夹中,在 ~/.local/share/Trash 文件夹中,files 文件夹中记录了你删除的所有文件,info 文件夹中记录了所删除文件的所有信息(如 何时删除,路径是哪里等)。


建议:如果你觉得命令太长用起来麻烦,那么可以使用前面章节提到得 alias 命令来为其设置别名。

文件管理基础 之 “改”

文本文件内容的改动请参照 “vi 和 vim 怎么玩” 和 “Linux 文本处理三剑客” 章节的内容。

mv 命令修改路径 & 重命名
[test@demo ~]$ ls
dir1  file1
[test@demo ~]$ mv file1 dir1/			# 使用 mv 命令移动文件,将文件 file1 移动到 dir1 目录下,
# 注意:若目标区域存在和当前需移动文件名相同的文件,采用如上方式将会覆盖目标区域的同名文件[test@demo ~]$ mv -i file1 dir1/		# 使用 -i 参数,如果出现意料之外的情况将会提示,和 -f 完全相反
mv:是否覆盖'dir1/file1'? n				# 使用 n 或 y 来选择是否覆盖
[test@demo ~]$ mv -f file1 dir1/		# 将会强制覆盖 dir1/ 下的同名文件,和 -i 完全相反
[test@demo ~]$ mv -n file1 dir1/		# 使用 -n 参数,若 dir1/ 下存在同名文件,将终止此次操作,不会覆盖
[test@demo ~]$ mv -u file1 dir1/		# 使用 -u 参数,和上面的 cp 命令 -u 参数功能一样
[test@demo ~]$ mv -b file1 dir1/		# 使用 -b 参数,和上面的 cp 命令 -b 参数功能一样# mv 命令除了用来移动文件位置,由于其不加任何参数时会覆盖相同位置的同名文件的特性,因此也经常用来重命名文件
[test@demo ~]$ ls
a
[test@demo ~]$ mv a b					# 将文件 a 重命名为 b
[test@demo ~]$ ls
b

文件管理基础 之 “查”

ls 命令及其常用选项,更多参数选项使用 --help 查看
[test@demo ~]$ ls					# 使用 ls 命令查看目录中所有文件,不包含隐藏( 以 . 开头 )文件
b
[test@demo ~]$ ls -a				# 使用 -a 参数,查看所有文件,包含隐藏的,(其中 . 表示本级目录,.. 表示上级目录)
.  ..  b  .bash_history  .bash_logout  .bash_profile  .bashrc  .local  .viminfo
# 注意: 如果你不想看到 . 和 .. 两个目录,则可以使用 -A 选项[test@demo ~]$ ls -l				# 使用 -l 参数,查看所有文件的长格式
-rw-rw-r--. 1 test test 0 1022 19:13 b
-rw-rw-r--. 1 test test 0 1022 19:13 c
[test@demo boot]$ ls -lh			# 使用 -h 参数,以人类能读懂的方式查看文件的长格式,如文件大小
总用量 166M
-rw-r--r--. 1 root root 192K 510 2022 config-4.18.0-372.9.1.el8.x86_64
drwxr-xr-x. 3 root root   17 1021 15:55 efi
drwx------. 4 root root   83 1021 15:59 grub2
-rw-------. 1 root root  85M 1021 15:58 initramfs-0-rescue-a6af9cee7de24b79a602774b242f2e89.img
[test@demo ~]$ ls -lt				# 使用 -t 参数,将所有文件按照时间排序,(联合 -r 选项可以反转顺序)
drwxrwxr-x. 2 test test  6 1022 19:18 d1
-rw-rw-r--. 1 test test  0 1022 19:13 b
-rw-rw-r--. 1 test test  0 1022 19:13 c
[test@demo boot]$ ls -lSh			# 使用 -S 参数,将所有文件按照大小排序,(联合 -r 选项可以反转顺序)
总用量 166M
-rw-------. 1 root root  85M 1021 15:58 initramfs-0-rescue-a6af9cee7de24b79a602774b242f2e89.img
-rw-------. 1 root root  31M 1021 16:00 initramfs-4.18.0-372.9.1.el8.x86_64.img
-rw-------. 1 root root  26M 1021 16:01 initramfs-4.18.0-372.9.1.el8.x86_64kdump.img
[test@demo boot]$ ls -ld			# 使用 -d 参数,只查看当前目录情况
dr-xr-xr-x. 5 root root 4096 1021 16:01 .
cd 命令及其常用选项等
[test@demo ~]$ cd dir1/				# cd 命令没有选项可选,直接跟路径即可,无论绝对路径还是相对路径# cd 可以跟着几个特殊路径符号
[test@demo dir1]$ cd .				# . 表示当前目录,表示进入到当前目录
[test@demo dir1]$ cd ..				# .. 表示上一级目录,表示进入到上一级目录
[test@demo dir1]$ cd ~				# ~ 表示当前用户家目录,表示进入到用户家目录
[test@demo dir1]$ cd ~tom			# 表示进入到用户 tom 的家目录
[test@demo dir1]$ cd -				# 表示回退到上次所在的目录
pwd 命令
[test@demo ~]$ pwd					# 查看当前所在的绝对路径位置
/home/test
# pwd 存在两个参数 -L 、-P不过没啥用,结果都一样
find 命令查找一切
[test@demo ~]$ sudo find /etc -name "sudoers"		# 使用 -name 参数,指定在路径下需要查找的文件名称
/etc/sudoers										# 命中到的结果
[test@demo ~]$ sudo find /etc -iname "sUdoErs"		# 使用 -iname 参数,不区分名称大小写
/etc/sudoers
[test@demo ~]$ find /dev -maxdepth 1 -type c		# 使用 -type 参数,查找指定类型的文件(普通文件为 f,其他和上面一样)
/dev/vcsa6
/dev/vcs6
......
# 使用 -maxdepth [数字] 可以指定最大查找深度,使用 -mindepth [数字] 可以指定从第几层开始查找
[test@demo ~]$ sudo find /boot -size +10M			# 使用 -size 参数,查找文件 >10M 的文件( -10M 就是 <10M 的文件)
[sudo] test 的密码:
/boot/initramfs-4.18.0-372.9.1.el8.x86_64.img
/boot/initramfs-0-rescue-a6af9cee7de24b79a602774b242f2e89.img
/boot/initramfs-4.18.0-372.9.1.el8.x86_64kdump.img
[test@demo ~]$ find ./ -mtime -1					# 使用 -mtime 参数,查找在 1 天以内修改过的文件( +1 表示在 1 天前修改过的文件;1 表示刚好 1 天前修改过的文件 )
[test@demo ~]$ find ./ -perm 664					# 使用 -perm 参数,查找权限为 664 的文件
./text
./f
[test@demo ~]$ find ./ -perm /u+rw					# 支持字符串,查找用户有读写权限的文件
./text
./f
[test@demo ~]$ find ./ -user test					# 使用 -user 参数,查找指定用户的文件
[test@demo ~]$ find ./ -group test					# 使用 -group 参数,查找指定组的文件
[test@demo dir1]$ find ./ -name file1 -exec cat {} \; # 使用 -exec 参数,对查找到的文件执行 cat 命令
# -exec 后面根需要执行的命令,{} 占位符表示 find 查到的文件, \; 是结束标记
[test@demo dir1]$ find ./ -name file -ok cat {} \;	# 使用 -ok 参数,功能和 -exec 一样,唯一的区别就是自行命令前会提示
< cat ... ./file > ? y								# 使用 y 、n 来确定和否定执行命令 cat
111# 使用多条件查找,条件优先级请看下面的警告部分
[test@demo dir1]$ find . -name "*.txt" -size +1M	# 使用 and 查找以 .txt 结尾且大小 <1M 的文件( -and 可以省略 )
[test@demo dir1]$ find . -name "*.txt" -o -name "*.log"	# 使用 or 查找名称以 .txt 或 .log 结尾的文件
[test@demo dir1]$ find . -not -name "*.txt"			# 使用 not 查找不以 .txt 结尾的文件

警告:使用多条件查找时的条件优先级顺序是:(依次递减) [()] 、[ !; -not ] 、[ -a ; -and ] 、[ -o ; -or ]
若未指定条件运算符号,则默认使用 -and 连接,这也是 -and 可以省略的原因

cat 命令查看文件内容
[test@demo ~]$ echo hello,world > text
[test@demo ~]$ cat text				# 查看文件内容
hello,world
[test@demo ~]$ cat -n text			# 使用 -n 参数,查看内容时显示行号1  hello,world
[test@demo ~]$ cat -A text			# 使用 -A 参数,显示所有内容,包含回车($)、、制表符(^|)等
hello,world$
# 没啥参数常用的,其他参数使用 --help 查看用法

cat 命令的缺点就是一次性打印所有内容,当文件过大时,翻页都难受,这时就需要下面的交互式查看命令了

more 命令查看文件内容
[test@demo etc]$ sudo more /etc/sudoers		# 选择一个长文件,通过 more 打开(因为查看的是受限的文件,所以使用了 sudo)
# 用的少,基本不用,需要其他参数使用 --help 查看用法

more 中常用的交互式命令:
q 或 Q : 退出交互模式
Enter :向下翻页一行内容
Space: 向下翻页一页内容
= : 显示当先所处位置的行号
/ : 搜索指定字符
v : 进入编辑模式,要退出按 :q 退出,按 :q! 强制退出 (不推荐使用,因为几乎没用过)
:f :在 v 模式里,按下 :f 显示当前光标位置和文件名称
h 或 ?: 查看帮助

注意:more 命令只能从前向后翻页,居然不能反过来,这就是个鸡肋命令,不如下面的 less 命令

less 命令查看文件内容
[test@demo etc]$ sudo less /etc/sudoers			# 查看文件
[test@demo etc]$ sudo less -N /etc/sudoers		# 使用 -N 参数,显示行号
[test@demo etc]$ sudo less -e /etc/sudoers		# 使用 -e 参数,在文件翻页完继续翻页后自动退出
[test@demo etc]$ sudo less -i /etc/sudoers		# 使用 -i 参数,打开的文件搜索字符串时将忽略大小写
[test@demo etc]$ sudo less -f /etc/sudoers		# 使用 -f 参数,强制打开某个文件,如设备文件等
[test@demo etc]$ sudo less -o /etc/sudoers		# 使用 -o 参数,将 less 输出的内容追加到指定文件中,(使用 -O 则是覆写)

less 常用的一些交互命令:
上下键:上下滚动一行内容
左右键:左右滚动一个页面的内容
Space:下滚动一个页面
Enter :下滚动一行
Home:滚动到顶部,其他键(End、PgUp等)功能对应键的含义
/ : 搜索指定字符串
N : 搜索字符串时切换到前一个匹配项
n : 搜索字符串时切换到下一个匹配项
q 或 Q :退出交互界面
h 或 H :显示帮助

注意:在滚动页面时还可以通过字母来滚动(如 j 向下滚动一行),但是由于很多字母都具有滚动效果,很繁琐记不住,所以一般就不推荐通过字符滚动

head 命令查看文件内容的开头
[test@demo ~]$ sudo head  /etc/sudoers			# 默认查看文件开头的 10 行内容
[test@demo ~]$ sudo head -3 /etc/sudoers		# 以行模式查看文件开头的 3 行内容,( 等于使用 -n3 )
[test@demo ~]$ sudo head -c3  /etc/sudoers		# 以字符模式查看文件开头 3 个字符
tail 命令查看文件内容的结尾
[test@demo ~]$ sudo tail /etc/sudoers			# 默认查看文件结尾的 10 行内容
[test@demo ~]$ sudo tail -3  /etc/sudoers		# 以行模式查看文件结尾的 3 行内容,( 等于使用 -n3 )
[test@demo ~]$ sudo tail -c3  /etc/sudoers		# 以字符模式查看文件结尾 3 个字符
[test@demo ~]$ sudo tail -f 5 /var/log/xx.log	# 使用 -f 参数,持续关注文件的结尾 5 行内容,按ctrl + c 可以退出关注
nl 命令查看文件内容
[test@demo ~]$ sudo nl /etc/sudoers				# 按行号查看文件内容,效果等同于 cat -n 命令
xxd 命令查看二进制文件数据
[test@demo ~]$ sudo xxd /etc/sudoers			# 输出文件的十六进制内容。适合查看一些二进制文件
00000000: 2323 2053 7564 6f65 7273 2061 6c6c 6f77  ## Sudoers allow
00000010: 7320 7061 7274 6963 756c 6172 2075 7365  s particular use
......

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com