カテゴリ: Linuxコマンド集 更新日: 2026/07/18

xzコマンドで圧縮データを標準出力!-cオプションの使い方を徹底解説

xz -cオプション|圧縮データを標準出力に出力する
xz -cオプション|圧縮データを標準出力に出力する

先生と生徒の会話形式で理解しよう

生徒

「Linuxでファイルを圧縮したいのですが、元のファイルを残したまま中身だけを画面に表示したり、別の名前に保存したりすることってできますか?」

先生

「それならxzコマンドの-cオプションがぴったりです。通常、圧縮すると元のファイルが消えてしまいますが、これを使えば元の状態を保てますよ。」

生徒

「標準出力という言葉を聞いたのですが、初心者には難しそうです。画面に文字が出るだけじゃないんですか?」

先生

「標準出力は、データの出口のようなものです。画面に出すだけでなく、別のコマンドに渡したり、ファイルに書き込んだりと自由自在なんですよ。詳しく解説しますね。」

1. xzコマンドと-cオプションの基本

1. xzコマンドと-cオプションの基本
1. xzコマンドと-cオプションの基本

Linuxの世界では、大きなデータを小さくして保存する圧縮という作業がよく行われます。その中でもxzコマンドは、非常に高い圧縮率を誇る強力なツールです。しかし、普通に使うと「元のファイルを消して、新しい圧縮ファイルに置き換える」という動きをします。

そこで登場するのが-cオプションです。このオプションはハイフン・シーと読み、英語のstdout(標準出力)へ結果を書き出す役割を持っています。これを使うことで、元のファイルを変更せずに、圧縮されたデータだけを外へ送り出すことができるようになります。プログラミング未経験の方でも、データの通り道を変えるスイッチだと考えれば分かりやすいでしょう。

ターミナル(黒い画面)にコマンドを打ち込むだけで、瞬時に大量のデータを処理できるのがLinuxの魅力です。まずは基本の形から見ていきましょう。

2. 標準出力(stdout)とは何か?

2. 標準出力(stdout)とは何か?
2. 標準出力(stdout)とは何か?

初心者の方が一番つまずきやすいのが標準出力という言葉です。これは、コンピュータが処理した結果を出すための「標準的な出口」を指します。通常、私たちがコマンドを入力すると、その結果はディスプレイ(画面)に表示されますよね。これが標準出力の最も一般的な形です。

しかし、Linuxの凄いところは、この出口を別の場所に繋ぎ変えられることです。例えば、「画面に出す代わりにファイルに保存する」といったことが可能です。これをリダイレクトと呼びます。xz -cを使うと、圧縮されたデータがこの出口に流れてきます。画面にそのまま流すと文字化けしてしまいますが、これをファイルに誘導することで、元のファイルを消さずに新しい圧縮ファイルを作成できるのです。

3. xz -cオプションでファイルを圧縮する具体例

3. xz -cオプションでファイルを圧縮する具体例
3. xz -cオプションでファイルを圧縮する具体例

それでは、実際にコマンドを使ってみましょう。ここでは「sample.txt」という名前のテキストファイルを、元のファイルを残したまま「sample.txt.xz」という名前で圧縮して保存する方法を紹介します。ここでは、リダイレクト記号である>を使います。

一般ユーザーで実行する場合の例を確認してください。


xz -c sample.txt > sample.txt.xz
ls
sample.txt  sample.txt.xz

この例では、xz -c sample.txtで圧縮データを作り、それを>を使ってsample.txt.xzというファイルに書き込んでいます。実行後にlsコマンドでファイル一覧を確認すると、元のファイルと新しい圧縮ファイルの両方が存在していることが分かります。これで「元のファイルが消えて困る」という問題が解決しましたね。

4. 複数のファイルを一つにまとめて圧縮データへ

4. 複数のファイルを一つにまとめて圧縮データへ
4. 複数のファイルを一つにまとめて圧縮データへ

xz -cは複数のファイルに対しても使用できます。ただし、複数のファイルを一つのアーカイブ(まとまり)として扱いたい場合は、一般的にtarコマンドと組み合わせて使います。ここでは、xz単体で複数のファイルを順番に処理し、その結果を一つの出力として受け取るイメージを説明します。

例えば、複数のログファイルを一つの圧縮ストリームとして出力したい場合などに便利です。以下の例では、二つのファイルを対象にしています。


xz -c file1.txt file2.txt > combined.xz
ls -l
-rw-r--r-- 1 user user 1024 Apr  5 10:00 combined.xz

このように、複数のファイル名を並べることで、それらを連続して圧縮したデータが標準出力へ流れます。これをファイルに保存すれば、複数の内容を含んだ圧縮ファイルが出来上がります。大量のデータを扱うサーバー管理などの現場では、こうしたテクニックが頻繁に使われます。

5. パイプを使って別のコマンドへデータを渡す

5. パイプを使って別のコマンドへデータを渡す
5. パイプを使って別のコマンドへデータを渡す

標準出力の真骨頂は、パイプラインと呼ばれる機能です。これは、あるコマンドの出口を別のコマンドの入口に直結させる仕組みで、記号の|(縦棒)を使います。xz -cで出力した圧縮データを、そのまま別のプログラムに読み込ませることができます。

例えば、ネットワークを通じて別のコンピュータにファイルを送る際、圧縮しながら送ることで通信時間を短縮できます。以下の例では、圧縮したデータをそのままcatコマンドで表示しようとする(実際はバイナリなので表示は乱れますが)動作をイメージしてください。


xz -c data.log | wc -c
150

この例のwc -cは、受け取ったデータのバイト数(サイズ)を数えるコマンドです。つまり、ファイル自体を保存することなく、「もしこのファイルを圧縮したら何バイトになるか?」という結果だけを知ることができます。無駄なファイルを作らずに計算だけしたい時に非常に効率的です。

6. 他の圧縮コマンド(gzip, bzip2)との違い

6. 他の圧縮コマンド(gzip, bzip2)との違い
6. 他の圧縮コマンド(gzip, bzip2)との違い

Linuxにはxz以外にも、gzipbzip2といった圧縮コマンドが存在します。それぞれに特徴がありますが、xzは最も後発で、圧縮率が非常に高いのが最大の特徴です。同じデータであれば、gzipよりもxzの方がファイルサイズを小さくできることが多いです。

それぞれのコマンドにも同様に-cオプションが存在します。使い方はほとんど同じですが、処理速度とファイルサイズのバランスが異なります。
gzip -c:処理が非常に速いが、サイズはそこまで小さくならない。
bzip2 -c:xzとgzipの中間くらいの性能。
xz -c:処理に時間はかかるが、劇的にサイズを小さくできる。

最新のシステムや、ディスク容量を節約したい場面では、このxzが推奨されることが多いです。目的に合わせて使い分けられるようになると、Linuxマスターへの道が近づきます。

7. 解凍時にも使える-cオプション

7. 解凍時にも使える-cオプション
7. 解凍時にも使える-cオプション

実は、-cオプションは圧縮する時だけでなく、解凍(展開)する時にも役立ちます。通常、圧縮ファイルを解凍すると、圧縮ファイルが消えて元のファイルが現れます。しかし、解凍コマンドのunxzxz -d-cを付けると、中身をファイルに書き出すのではなく、標準出力(画面)に流してくれます。

中身を少しだけ確認したい時や、解凍したデータをそのまま別の処理に使いたい時に重宝します。ルート権限でシステムログなどを確認する場合の例を見てみましょう。


xz -dc backup_log.xz | head -n 5
2026-04-01 System boot...
2026-04-01 Network started...
2026-04-01 Checking disks...
2026-04-01 Services active...
2026-04-01 Login successful.

この例では-d(解凍)と-c(標準出力)を組み合わせています。head -n 5というコマンドに繋ぐことで、巨大なログファイルの中身を解凍しながら、最初の5行だけを画面に表示しています。大きなファイルをわざわざ全て解凍してディスクを圧迫する必要がないため、非常にスマートな操作方法と言えます。

8. エラーを避けるための注意点

8. エラーを避けるための注意点
8. エラーを避けるための注意点

xz -cを使う際に気をつけてほしいのが、画面に直接出力してしまうことです。先ほども触れましたが、圧縮されたデータは人間が読める文字ではなく、コンピュータ専用のバイナリ形式になっています。これをそのままターミナルに表示させようとすると、画面が文字化けしたり、警告音が鳴ったりすることがあります。

必ずリダイレクト>やパイプ|を使って、データの行き先を指定してあげましょう。もし間違えて画面に出してしまい、ターミナルがおかしくなったときは、resetコマンドを入力すると画面を正常に戻すことができます。こうした失敗も経験の一つですので、恐れずに色々な組み合わせを試してみてください。

また、圧縮率が高い分、CPU(コンピュータの頭脳)に負荷がかかり、低スペックなパソコンでは処理に時間がかかることも覚えておくと良いでしょう。

9. 実践的なワークフローでの活用

9. 実践的なワークフローでの活用
9. 実践的なワークフローでの活用

最後に応用編として、日常的なバックアップ作業での活用例を考えてみましょう。Linux管理者はよく、大切な設定ファイルが詰まったディレクトリを丸ごとバックアップします。その際、ディレクトリをまとめるtarコマンドの出力をそのままxz -cに流し込むことで、一時ファイルを作らずに直接圧縮ファイルを作成します。


tar cf - /home/user/documents | xz -c > my_backup.tar.xz
ls -lh my_backup.tar.xz
-rw-r--r-- 1 user user 5.2M Apr  5 11:00 my_backup.tar.xz

ここでは、tarコマンドで「-(ハイフン)」を指定して標準出力へデータを出し、それをパイプでxz -cへ渡しています。このように複数のコマンドを組み合わせることで、Linuxの真のパワーが発揮されます。一見難しそうに見えますが、一つ一つのコマンドの役割を理解すれば、パズルのように組み合わせていくだけです。この柔軟性こそが、プログラミングやインフラエンジニアがLinuxを愛用する理由なのです。

まとめ

まとめ
まとめ

今回の記事では、Linux環境におけるデータ圧縮の強力な味方であるxzコマンド、そしてその利便性を飛躍的に高める-cオプションについて詳しく解説してきました。 Linuxシステムを利用する上で、ストレージの節約やネットワーク転送の効率化は避けて通れない課題です。 そこで、高い圧縮率を誇るxzコマンドの特性を理解し、標準出力(stdout)を自在に操るスキルを身につけることは、初心者からステップアップするための重要な一歩となります。

xzコマンドと-cオプションの重要ポイント

改めて、この記事で学んだ主要なポイントを整理しましょう。 xzコマンドは、従来のgzipやbzip2と比較して、非常に優れたデータ圧縮能力を持っています。 しかし、デフォルトの挙動では元のファイルを削除して圧縮ファイルに置き換えてしまうため、バックアップ作業などでは注意が必要です。 ここで、-cオプション(ハイフン・シー)が活躍します。

  • 元のファイルを保持: 圧縮処理の結果を標準出力に送るため、ソースファイルが上書き・消去されません。
  • 柔軟なファイル命名: リダイレクト(>)を併用することで、出力先のファイル名を自由に指定できます。
  • パイプラインとの親和性: 他のコマンドと組み合わせて、圧縮しながら転送したり、サイズを確認したりすることが可能です。
  • 解凍時の利便性: -dcを組み合わせれば、ディスクに展開することなく内容を画面に表示できます。

実務で役立つサンプルプログラムと活用例

エンジニアの現場では、単にファイルを圧縮するだけでなく、ログのローテーションやサーバーのバックアップ等、様々な自動化スクリプト内でxzコマンドが多用されます。 以下のサンプルでは、一般ユーザーが複数のテキストログを一つの圧縮ファイルにまとめ、そのサイズを確認する一連の流れをシミュレートしています。


xz -c access.log error.log > web_logs_backup.xz
du -h web_logs_backup.xz
1.2M    web_logs_backup.xz

このように、複数のファイルを引数に渡しても、-cオプションがあれば一つのストリームとして出力され、一つのファイルにリダイレクトできます。 もし、ルート権限が必要なシステム領域のファイルを扱う場合は、以下のようにsudoやrootユーザーでの操作になります。


xz -c /var/log/syslog > /root/syslog_backup.xz
ls -l /root/syslog_backup.xz
-rw-r--r-- 1 root root 854202 Apr  5 12:00 /root/syslog_backup.xz

管理者がシステム保守を行う際、元のログファイルを改変せずに、調査用のコピーを最小サイズで作成する手法として非常に有効です。 また、tarコマンドとの組み合わせによるディレクトリ全体のバックアップも、Linux運用における「黄金の組み合わせ」と言えるでしょう。

さらなる学びのために

Linuxコマンドの世界は、一つ一つのコマンドがシンプルでありながら、それらを組み合わせることで無限の可能性を生み出します。 xz -cを通じて学んだ「標準出力」や「パイプライン」の概念は、他の数百ものコマンドに共通する基盤です。 圧縮率が高いということは、それだけ計算資源(CPU)を使用するというトレードオフも存在します。 緊急を要する作業ではgzipを使い、長期保存や配布用のデータにはxzを使うといった、状況に応じた使い分けができるようになれば、あなたはもう初心者ではありません。 まずは自分のPC環境で、不要になった古いテキストファイルを圧縮してみることから始めてみてください。 失敗を恐れず、ターミナルに入力したコマンドが意図通りに動く快感を積み重ねていきましょう。

先生と生徒の振り返り会話

生徒

「先生、ありがとうございました!xz -cを使うことで、元のファイルを残したまま賢く圧縮する方法がよく分かりました。特に、リダイレクトを使って名前を決める仕組みが面白いですね。」

先生

「その通りです。リダイレクトの>はデータの流れをせき止めてファイルに流し込む土建工事のようなものだとイメージすると、他のコマンドでも応用が効きますよ。」

生徒

「なるほど!土建工事ですか(笑)。でも、さっき間違えて-cの結果をそのまま画面に出しちゃって、変な記号がいっぱい出て焦りました。あれが文字化けの正体なんですね。」

先生

「いい経験をしましたね。バイナリデータを無理やり文字として読もうとするとそうなります。もし画面が固まったらresetコマンド。これは暗記しておくと、いざという時に役立つ魔法の言葉です。」

生徒

resetですね、覚えておきます!あと、解凍する時にxz -dcで中身だけチラ見するのも、ファイルが増えなくて便利だと思いました。ログ調査の時に使ってみます。」

先生

「素晴らしいですね。大きな圧縮ファイルをわざわざ解凍してディスクをいっぱいにするのは、プロのやり方とは言えません。必要な時に、必要な分だけ取り出す。そのための標準出力とパイプなんです。これからもその調子で頑張りましょう!」

生徒

「はい!次はtarコマンドとの組み合わせにも挑戦して、完璧なバックアップ職人を目指します!」

関連記事:
カテゴリの一覧へ
新着記事
New1
Linuxコマンドの基本
Linuxのパイプ(|)とは?複数コマンドをつなげて効率化する方法を完全解説
New2
テキスト・データ処理
tailコマンドとは?Linuxでファイルの末尾を表示する基本をやさしく解説!
New3
ファイル・ディレクトリ操作
find -groupオプションの使い方を解説!初心者でもできる所有グループによるファイル検索
New4
圧縮・アーカイブ
rar xオプションの使い方を完全ガイド!Linuxでディレクトリ構造を保持して展開する方法を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.2
Java&Spring記事人気No2
テキスト・データ処理
catコマンドとは?Linuxでファイル内容を表示・連結する基本
No.3
Java&Spring記事人気No3
ファイル・ディレクトリ操作
cd ~ の使い方を完全解説!ホームディレクトリへの移動方法と初心者向けLinuxコマンド入門
No.4
Java&Spring記事人気No4
圧縮・アーカイブ
gzipコマンドの使い方を完全ガイド!初心者でもわかるLinuxでファイル圧縮の基本