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
エラーが発生するたびに。しかし、次の2つのコマンドはうまく機能します。
$ 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
呼び出されますが、何らかの理由で-
。
libarchiveジョブに切り替えるbsdtar
:
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 -
とにかく、ダウンロードしたファイルをstdout(ここではstdoutとしてパイプ)として印刷するのではなく、ローカルファイルに保存することを忘れてしまったかもしれません。ダウンロードが-O -
デフォルトwget
でstdoutとして出力されるという事実にtar
混乱する可能性があります。 (quiet) の (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/
[...]