我想下载 Linux 内核并一步解压它。有很多手册关于它。所以我尝试:
$ wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz | tar -xav -C /home/a/myKernel/
--2023-05-06 03:04:38-- https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz
Resolving cdn.kernel.org (cdn.kernel.org)... 146.75.49.176, 2a04:4e42:7c::432
Connecting to cdn.kernel.org (cdn.kernel.org)|146.75.49.176|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 136934448 (131M) [application/x-xz]
Saving to: ‘linux-6.3.1.tar.xz’
linux-6.3.1.tar.xz 100%[========================================================================================================================================>] 130.59M 9.08MB/s in 14s
2023-05-06 03:04:52 (9.32 MB/s) - ‘linux-6.3.1.tar.xz’ saved [136934448/136934448]
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
我也尝试过:
$ aria2c https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz | tar -xz -C /home/a/myKernel/
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
每次我都会遇到错误。但这两个命令工作正常:
$ wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz
$ tar xavf linux-6.3.1.tar.xz
如何使用单个命令下载并解压 Linux 内核?
答案1
使用 GNU tar
,tar xf file.tar.xz
调用xz -d
解压缩文件上的文件,但由于某种原因,这不适用于-
.
切换到 libarchivebsdtar
会起作用:
wget -qO- https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
bsdtar xvf -
但你也可以xz -d
自己调用:
wget -qO - https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
xz -d |
tar xvf -
这适用于任何tar
实施。
GNUtar
手册有:
读取存档时必须指定解压缩选项的唯一情况是从不支持随机访问的管道或磁带驱动器读取。然而,在这种情况下,GNU“tar”将指示您应该使用哪个选项。例如:
$ cat archive.tar.gz | tar tf - tar: Archive is compressed. Use -z option
这里:
$ cat file.tar.xz | tar tf -
tar: Archive is compressed. Use -J option
tar: Error is not recoverable: exiting now
因此,如果使用 GNU tar
,您可以显式使用-J
或--xz
for 来tar
调用xz -d
以动态解压缩输入流。
wget -qO- https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
gnu-tar Jxvf -
无论如何,您忘记了-O -
withoutwget
会将下载的文件存储到本地文件中,而不是将其打印到 stdout (这里是管道 to ),也许您对默认情况下将下载输出到 stdouttar
感到困惑。 (quiet) 与's (silent) 类似,会抑制默认情况下获得的进度信息。wget
curl
-q
curl
-s
答案2
像这样:
wget -q -O - https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
tar xJvf -
-O
在这里定义输出文件STDOUT
:-
-q
处于安静模式
然后:
cd linux-6.3.1/
ls -1
arch/
block/
certs/
[...]