Linux文件相关操作

浏览文件系统

Linux文件系统

Linux文件系统结构是从Unix文件结构演进过来的。在Linux文件系统中,通用的目录名用于

表示一些常见的功能。下表列出了一些较常见的Linux顶层虚拟目录名及其内容。

目录 用途
/ 虚拟目录的根目录。通常不会在这里存储文件
/bin 二进制目录,存放许多用户级的GNU工具
/boot 启动目录,存放启动文件
/dev 设备目录,Linux在这里创建设备节点
/etc 系统配置文件目录
/home 主目录,Linux在这里创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/mnt 挂载目录,另一个可移动媒体设备的常用挂载点
/opt 可选目录,常用于存放第三方软件包和数据文件
/proc 进程目录,存放现有硬件及当前进程的相关信息
/root root用户的主目录
/sbin 系统二进制目录,存放许多GNU管理员级工具
/run 运行目录,存放系统运作时的运行时数据
/srv 服务目录,存放本地服务的相关文件
/sys 系统目录,存放系统硬件信息的相关文件
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里
/var 可变目录,用以存放经常变化的文件,比如日志文件

遍历目录

在Linux文件系统上,可以使用切换目录命令cd将shell会话切换到另一个目录。cd命令的格式非常简单:

cd destination

cd命令可接受单个参数destination,用以指定想切换到的目录名。如果没有为cd命令指定目标路径,它将切换到用户主目录。

destination参数可以用两种方式表示:一种是使用绝对文件路径,另一种是使用相对文件路径。

  1. 绝对文件路径

    用户可在虚拟目录中采用绝对文件路径引用目录名。绝对文件路径定义了在虚拟目录结构中该目录的确切位置,以虚拟目录的根目录开始,相当于目录的全名。

    绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。因此,如果要指向usr目录所包含的bin目录下的用户二进制文件,可以使用如下绝对文件路径:

    /usr/bin

    如果没有配置好提示符来显示当前shell会话的绝对文件路径,也可以使用shell命令来显示所处的位置。pwd命令可以显示出shell会话的当前目录,这个目录被称为当前工作目录。pwd命令

    的用法如下:

    christine@server01:/usr/bin$ pwd
    
    /usr/bin
    
    christine@server01:/usr/bin$
    

    可以使用绝对文件路径切换到Linux虚拟目录结构中的任何一级:

    christine@server01:/usr/bin$ cd /var/log 
    christine@server01:/var/log$ 
    christine@server01:/var/log$ pwd 
    /var/log 
    christine@server01:/var/log$
    

    还可以从Linux虚拟目录中的任何一级跳回主目录:

    christine@server01:/var/log$ cd 
    christine@server01:~$ 
    christine@server01:~$ pwd 
    /home/christine 
    christine@server01:~$
    
  2. 相对文件路径

相对文件路径允许用户指定一个基于当前位置的目标文件路径。相对文件路径不以代表根目录的正斜线(/)开头,而是以目录名(如果用户准备切换到当前工作目录下的一个目录)或是一个特殊字符开始。假如你位于home目录中,并希望切换到Documents子目录,那你可以使用cd命令加上一个相对文件路径:

christine@server01:~$ pwd 
/home/christine 
christine@server01:~$ 
christine@server01:~$ cd Documents 
christine@server01:~/Documents$ pwd 
/home/christine/Documents 
christine@server01:~/Documents$

可以在任何包含子目录的目录中使用带有相对文件路径的cd命令。也可以使用一个特殊字符来表示相对目录位置。

有两个特殊字符可用于相对文件路径中:

  • 单点符(.),表示当前目录;

  • 双点符(..),表示当前目录的父目录。

文件和目录列表

基本列表功能

ls命令最基本的形式会显示当前目录下的文件和目录:

$ ls 
Desktop Downloads Music Pictures Templates Videos 
Documents examples.desktop my_script Public test_file 
$

-F参数在目录名后加了正斜线(/),以方便用户在输出中分辨它们。类似地,它会在可执行文件的后面加个星号,以便用户找出可在系统上运行的文件。

$ ls -F 
Desktop/ Downloads/ Music/ Pictures/ Templates/ Videos/ 
Documents/ examples.desktop my_script* Public/ test_file 
$

要把隐藏文件和普通文件及目录一起显示出来,就得用到-a参数。下面是一个带有-a参数

的ls命令的例子:

$ ls -a 
. .compiz examples.desktop Music test_file 
.. .config .gconf my_script Videos 
.bash_history Desktop .gstreamer-0.10 Pictures .Xauthority 
.bash_logout .dmrc .ICEauthority .profile .xsession-errors 
.bashrc Documents .local Public .xsession-errors.old 
.cache Downloads .mozilla Templates 
$

-R参数是ls命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中

的文件。如果目录很多,这个输出就会很长。以下是-R参数输出的简单例子:

$ ls -F -R 
.: 
Desktop/ Downloads/ Music/ Pictures/ Templates/ Videos/ 
Documents/ examples.desktop my_script* Public/ test_file 
./Desktop: 
./Documents: 
./Downloads: 
./Music: 
ILoveLinux.mp3* 
./Pictures: 
./Public: 
./Templates: 
./Videos:

显示长列表

在基本的输出列表中,ls命令并未输出太多每个文件的相关信息。要显示附加信息,另一个

常用的参数是-l-l参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。

$ ls -l 
total 48 
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Desktop 
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Documents 
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Downloads 
-rw-r--r-- 1 christine christine 8980 Apr 22 13:36 examples.desktop 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fall 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full 
drwxr-xr-x 2 christine christine 4096 May 21 11:39 Music 
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_file 
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt 
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script 
-rw-rw-r-- 1 christine christine 0 May 21 13:42 new_file 
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Pictures 
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Public 
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Templates 
-rw-rw-r-- 1 christine christine 0 May 21 11:28 test_file 
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Videos 
$

这种长列表格式的输出在每一行中列出了单个文件或目录。除了文件名,输出中还有其他有用信息。输出的第一行显示了在目录中包含的总块数。在此之后,每一行都包含了关于文件(或目录)的下述信息:

  • 文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b)

  • 文件的权限

  • 文件的硬链接总数

  • 文件属主的用户名

  • 文件属组的组名

  • 文件的大小(以字节为单位)

  • 文件的上次修改时间

  • 文件名或目录名

过滤输出列表

由前面的例子可知,默认情况下,ls命令会输出目录下的所有非隐藏文件。有时这个输出会显得过多,当你只需要查看单个少数文件信息时更是如此。

幸而ls命令还支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件或目录。

这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器:

$ ls -l my_script 
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script 
$

当用户指定特定文件的名称作为过滤器时,ls命令只会显示该文件的信息。有时你可能不知道要找的那个文件的确切名称。ls命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:

  • 问号(?)代表一个字符;

  • 星号(*)代表零个或多个字符

问号可用于过滤器字符串中替代任意位置的单个字符。例如:

$ ls -l my_scr?pt 
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt 
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script 
$

其中,过滤器my_scr?pt与目录中的两个文件匹配。类似地,星号可匹配零个或多个字符。

$ ls -l my* 
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_file 
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt 
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script 
$

在过滤器中使用星号和问号被称为文件扩展匹配(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫作元字符通配符(metacharacter wildcards)。除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配。可以使用中括号。

$ ls -l my_scr[ai]pt 
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt 
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script 
$

在这个例子中,我们使用了中括号以及在特定位置上可能出现的两种字符:a或i。中括号表示一个字符位置并给出多个可能的选择。可以像上面的例子那样将待选的字符列出来,也可以指定字符范围,例如字母范围[a – i]。

$ ls -l f[a-i]ll 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fall 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill 
$

另外,可以使用感叹号(!)将不需要的内容排除在外。

$ ls -l f[!a]ll 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill 
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full 
$

处理文件

创建文件

你总会时不时地遇到要创建空文件的情况。例如,有时应用程序希望在它们写入数据之前,某个日志文件已经存在。这时,可用touch命令轻松创建空文件。

$ touch test_one 
$ ls -l test_one 
-rw-rw-r-- 1 christine christine 0 May 21 14:17 test_one 
$

touch命令创建了你指定的新文件,并将你的用户名作为文件的属主。注意,文件的大小是零,因为touch命令只创建了一个空文件。

touch命令还可用来改变文件的修改时间。这个操作并不需要改变文件的内容。

$ ls -l test_one 
-rw-rw-r-- 1 christine christine 0 May 21 14:17 test_one 
$ touch test_one 
$ ls -l test_one 
-rw-rw-r-- 1 christine christine 0 May 21 14:35 test_one 
$

test_one文件的修改时间现在已经从最初的时间14:17更新到了14:35。如果只想改变访问时间,可用-a参数。

$ ls -l test_one 
-rw-rw-r-- 1 christine christine 0 May 21 14:35 test_one 
$ touch -a test_one 
$ ls -l test_one 
-rw-rw-r-- 1 christine christine 0 May 21 14:35 test_one 
$ ls -l --time=atime test_one 
-rw-rw-r-- 1 christine christine 0 May 21 14:55 test_one 
$

在上面的例子中,要注意的是,如果只使用ls –l命令,并不会显示访问时间。这是因为默认显示的是修改时间。要想查看文件的访问时间,需要加入另外一个参数:--time=atime。有了这个参数,就能够显示出已经更改过的文件访问时间。

复制文件

在最基本的用法里,cp命令需要两个参数——源对象和目标对象:

cp source destination

cp命令的-R参数威力强大。可以用它在一条命令中递归地复制整个目录的内容。

$ ls -Fd *Scripts 
Scripts/ 
$ ls -l Scripts/ 
total 25 
-rwxrw-r-- 1 christine christine 929 Apr 2 08:23 file_mod.sh 
-rwxrw-r-- 1 christine christine 254 Jan 2 14:18 SGID_search.sh 
-rwxrw-r-- 1 christine christine 243 Jan 2 13:42 SUID_search.sh 
$ 
$ cp -R Scripts/ Mod_Scripts 
$ ls -Fd *Scripts 
Mod_Scripts/ Scripts/ 
$ ls -l Mod_Scripts 
total 25 
-rwxrw-r-- 1 christine christine 929 May 21 16:16 file_mod.sh 
-rwxrw-r-- 1 christine christine 254 May 21 16:16 SGID_search.sh 
-rwxrw-r-- 1 christine christine 243 May 21 16:16 SUID_search.sh 
$

链接文件

链接文件是Linux文件系统的一个优势。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方

法。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。在Linux中有两种不同类型的文件链接:

  • 符号链接

  • 硬链接

符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。

可以使用ln命令以及-s选项来创建符号链接。

$ ls -l data_file
-rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file 
$ 
$ ln -s data_file sl_data_file
$ 
$ ls -l *data_file
-rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file 
lrwxrwxrwx 1 christine christine 9 May 21 17:29 sl_data_file -> data_file 
$

在上面的例子中,注意符号链接的名字sl_data_file位于ln命令中的第二个参数位置上。显示在长列表中符号文件名后的->符号表明该文件是链接到文件data_file上的一个符号链接。

另外还要注意的是,符号链接的文件大小与数据文件的文件大小。符号链接sl_data_file只有9个字节,而data_file有1092个字节。这是因为sl_data_file仅仅只是指向data_file而已。它们的内容并不相同,是两个完全不同的文件。

另一种证明链接文件是独立文件的方法是查看inode编号。文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。要查看文件或目录的inode编号,可以给ls命令加入-i参数。

$ ls -i *data_file 
296890 data_file 296891 sl_data_file 
$

硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用ln命令时不再需要加入额外的参数了。

$ ls -l code_file 
-rw-rw-r-- 1 christine christine 189 May 21 17:56 code_file 
$ 
$ ln code_file hl_code_file 
$ 
$ ls -li *code_file 
296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56 
code_file 
296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56 
hl_code_file 
$

在上面的例子中,我们使用ls -li命令显示了*code_files的inode编号以及长列表。注意,带有硬链接的文件共享inode编号。这是因为它们终归是同一个文件。还要注意的是,链接计数(列表中第三项)显示这两个文件都有两个链接。另外,它们的文件大小也一模一样。

重命名文件

在Linux中,重命名文件称为移动(moving)。mv命令可以将文件和目录移动到另一个位置或重新命名。

$ ls -li f?ll 
296730 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fall 
296717 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fell 
294561 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fill 
296742 -rw-rw-r-- 1 christine christine 0 May 21 13:44 full 
$ 
$ mv fall fzll 
$ 
$ ls -li f?ll 
296717 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fell 
294561 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fill 
296742 -rw-rw-r-- 1 christine christine 0 May 21 13:44 full 
296730 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fzll 
$

注意,移动文件会将文件名从fall更改为fzll,但inode编号和时间戳保持不变。这是因为mv只影响文件名。

也可以使用mv来移动文件的位置。

$ ls -li /home/christine/fzll 
296730 -rw-rw-r-- 1 christine christine 0 May 21 13:44 
/home/christine/fzll 
$ 
$ ls -li /home/christine/Pictures/ 
total 0 
$ mv fzll Pictures/ 
$ 
$ ls -li /home/christine/Pictures/ 
total 0 
296730 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fzll 
$ 
$ ls -li /home/christine/fzll 
ls: cannot access /home/christine/fzll: No such file or directory 
$

删除文件

bash shell中删除文件的命令是rm。

$ rm -i fall 
rm: remove regular empty file 'fall'? y 
$ 
$ ls -l fall 
ls: cannot access fall: No such file or directory 
$

注意,-i命令参数提示你是不是要真的删除该文件。bash shell中没有回收站或垃圾箱,文件一旦删除,就无法再找回。因此,在使用rm命令时,要养成总是加入-i参数的好习惯。

也可以使用通配符删除成组的文件。

$ rm -i f?ll 
rm: remove regular empty file 'fell'? y 
rm: remove regular empty file 'fill'? y 
rm: remove regular empty file 'full'? y 
$ 
$ ls -l f?ll 
ls: cannot access f?ll: No such file or directory 
$

rm命令的另外一个特性是,如果要删除很多文件且不受提示符的打扰,可以用-f参数强制删除。

处理目录

创建目录

在Linux中创建目录很简单,用mkdir命令即可:

$ mkdir New_Dir 
$ ls -ld New_Dir 
drwxrwxr-x 2 christine christine 4096 May 22 09:48 New_Dir 
$

要想同时创建多个目录和子目录,需要加入-p参数:

$ mkdir -p New_Dir/Sub_Dir/Under_Dir 
$ 
$ ls -R New_Dir 
New_Dir: 
Sub_Dir 
New_Dir/Sub_Dir: 
Under_Dir 
New_Dir/Sub_Dir/Under_Dir: 
$

删除目录

删除目录的基本命令是rmdir

$ touch New_Dir/my_file 
$ ls -li New_Dir/
total 0 
294561 -rw-rw-r-- 1 christine christine 0 May 22 09:52 my_file 
$ 
$ rmdir New_Dir 
rmdir: failed to remove 'New_Dir': Directory not empty 
$

默认情况下,rmdir命令只删除空目录。因为我们在New_Dir目录下创建了一个文件my_file,所以rmdir命令拒绝删除目录。

要解决这一问题,得先把目录中的文件删掉,然后才能在空目录上使用rmdir命令。

也可以在整个非空目录上使用rm命令。使用-r选项使得命令可以向下进入目录,删除其中的文件,然后再删除目录本身。

$ ls -l My_Dir 
total 0 
-rw-rw-r-- 1 christine christine 0 May 22 10:02 another_file 
$ 
$ rm -ri My_Dir 
rm: descend into directory 'My_Dir'? y 
rm: remove regular empty file 'My_Dir/another_file'? y 
rm: remove directory 'My_Dir'? y 
$ 
$ ls -l My_Dir 
ls: cannot access My_Dir: No such file or directory 
$ 

一口气删除目录及其所有内容的终极大法就是使用带有-r参数和-f参数的rm命令。

$ tree Small_Dir 
Small_Dir 
├─ a_file 
├─ b_file 
├─ c_file 
├─ Teeny_Dir 
│ └─ e_file 
└─ Tiny_Dir 
 └─ d_file 
2 directories, 5 files 
$ 
$ rm -rf Small_Dir 
$ 
$ tree Small_Dir 
Small_Dir [error opening dir] 
0 directories, 0 files 
$

查看文件内容

查看文件类型

在显示文件内容之前,应该先了解一下文件的类型。如果打开了一个二进制文件,你会在屏幕上看到各种乱码,甚至会把你的终端仿真器挂起。

file命令是一个随手可得的便捷工具。它能够探测文件的内部,并决定文件是什么类型的:

$ file my_file 
my_file: ASCII text 
$

上面例子中的文件是一个text(文本)文件。file命令不仅能确定文件中包含的文本信息,还能确定该文本文件的字符编码,ASCII。

下面例子中的文件就是一个目录。因此,以后可以使用file命令作为另一种区分目录的方法:

$ file New_Dir 
New_Dir: directory 
$

第三个file命令的例子中展示了一个类型为符号链接的文件。注意,file命令甚至能够告诉你它链接到了哪个文件上:

$ file sl_data_file 
sl_data_file: symbolic link to 'data_file' 
$

下面的例子展示了file命令对脚本文件的返回结果。尽管这个文件是ASCII text,但因为它是一个脚本文件,所以可以在系统上执行(运行):

$ file my_script 
my_script: Bourne-Again shell script, ASCII text executable 
$

最后一个例子是二进制可执行程序。file命令能够确定该程序编译时所面向的平台以及需要何种类型的库。如果你有从未知源处获得的二进制文件,这会是个非常有用的特性:

$ file /bin/ls 
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.24, 
[...] 
$

查看整个文件

1.cat命令

cat命令是显示文本文件中所有数据的得力工具。

$ cat test1 
hello 
This is a test file. 
That we'll use to test the cat command. 
$

-n参数会给所有的行加上行号。

$ cat -n test1 
 1 hello 
 2 
 3 This is a test file. 
 4 
 5 
 6 That we'll use to test the cat command. 
$

这个功能在检查脚本时很有用。如果只想给有文本的行加上行号,可以用-b参数。

$ cat -b test1 
 1 hello 
 2 This is a test file. 
 3 That we'll use to test the cat command. 
$

最后,如果不想让制表符出现,可以用-T参数。

$ cat -T test1 
hello 
This is a test file. 
That we'll use to^Itest the cat command. 
$

-T参数会用^I字符组合去替换文中的所有制表符。

2. more命令

cat命令的主要缺陷是:一旦运行,你就无法控制后面的操作。为了解决这个问题,开发人员编写了more命令。more命令会显示文本文件的内容,但会在显示每页数据之后停下来。

more命令是分页工具。在本章前面的内容里,当使用man命令时,分页工具会显示所选的bash手册页面。和在手册页中前后移动一样,你可以通过按空格键或回车键以逐行向前的方式浏览文本文件。浏览完之后,按q键退出。

3. less命令

从名字上看,它并不像more命令那样高级。但是,less命令的命名实际上是个文字游戏(从俗语“less is more”得来),它实为more命令的升级版。它提供了一些极为实用的特性,能够实现在文本文件中前后翻动,而且还有一些高级搜索功能。

less命令的操作和more命令基本一样,一次显示一屏的文件文本。除了支持和more命令相同的命令集,它还包括更多的选项。

其中一组特性就是less命令能够识别上下键以及上下翻页键(假设你的终端配置正确)。在查看文件内容时,这给了你全面的控制权。

查看部分文件

1. tail命令

tail命令会显示文件最后几行的内容(文件的“尾部”)。默认情况下,它会显示文件的末尾10行。

可以向tail命令中加入-n参数来修改所显示的行数。在下面的例子中,通过加入-n 2使tail命令只显示文件的最后两行:

$ tail -n 2 log_file 
line19 
Last line - line20 
$

-f参数是tail命令的一个突出特性。它允许你在其他进程使用该文件时查看文件的内容。tail命令会保持活动状态,并不断显示添加到文件中的内容。这是实时监测系统日志的绝妙方式。

head命令

head命令,顾名思义,会显示文件开头那些行的内容。默认情况下,它会显示文件前10行的文本。

类似于tail命令,它也支持-n参数,这样就可以指定想要显示的内容了。这两个命令都允许你在破折号后面输入想要显示的行数。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:Linux文件相关操作

字数:5.9k

本文作者:Scha1e

发布时间:2023-09-13, 18:49:36

最后更新:2023-09-13, 18:49:50

原始链接:http://example.com/2023/09/13/Linux%E6%96%87%E4%BB%B6%E7%9B%B8%E5%85%B3%E6%93%8D%E4%BD%9C/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。