技術ノート Linux Linux ターミナルからファイルを圧縮または解凍する方法

Linux ターミナルからファイルを圧縮または解凍する方法

重要なポイント

  • ZIP ファイルは Windows、macOS、Linux システムで広く使用されており、圧縮アーカイブの最も一般的な形式です。
  • Linux でファイル (またはフォルダー) を圧縮するには、次のコマンドを実行します。 zip zipname files_to_be_zipped
  • ZIP からファイルを抽出するには、 unzip zipname を 実行します。

ZIP ファイルは、Windows、macOS、さらには Linux システムでも一般的に使用されるユニバーサル アーカイブです。一般的な Linux ターミナル コマンドを使用して、zip アーカイブを作成したり、アーカイブからファイルを解凍したりできます。

ZIP 圧縮アーカイブ ファイル形式

Windows 領域では ZIP 形式が優勢であるため、ZIP ファイルはおそらく世界で最も一般的な圧縮アーカイブの形式です。

Linux では ファイルが一般的ですが、Windows ユーザーはおそらく ZIP 形式でアーカイブを送信するでしょう。また、いくつかのファイルをアーカイブして Windows ユーザーに送信したい場合は、誰にとっても ZIP 形式が最も簡単で互換性のあるソリューションになります。

Linux ターミナルからファイルを圧縮または解凍する方法

zip、unzip、およびその他のユーティリティ

Linux や macOS などの Unix 系 オペレーティング システムには、ZIP ファイルの作成とそこからのファイルの抽出を可能にする zip および unzip と呼ばれるツールがあることはすでにご存知かもしれません。ただし、 zipcloak zipdetails zipsplit zipinfo などの関連ユーティリティのファミリー全体が存在します。

いくつかの Linux ディストリビューションをチェックして、これらのユーティリティが標準インストールに含まれているかどうかを確認しました。すべてのユーティリティは、Ubuntu 23.04、19.04、18.10、および 18.04 に存在していました。彼らはマンジャロ 18.04 にも存在していました。 Fedora 29 には zip unzip 含まれていましたが、他のユーティリティは含まれておらず、CentOS にも同様でした。

不足している要素を Fedora 29 にインストールするには、次のコマンドを使用します。

 sudo dnf インストール perl-IO-Compress

不足している要素を CentOS 7 にインストールするには、次のコマンドを使用します。

 sudo yum install perl-IO-Compress

上記で説明されていない zip ユーティリティが Linux ディストリビューションにない場合は、その Linux ディストリビューションのパッケージ管理ツールを使用して必要なパッケージをインストールします。

Linux ターミナルからファイルを圧縮または解凍する方法

zip コマンドを使用して ZIP ファイルを作成する方法

ZIP ファイルを作成するには、 zip アーカイブ ファイルの名前とその中に含めるファイルを指定する必要があります。アーカイブ名に「.zip」拡張子を追加する必要はありませんが、追加しても問題はありません。

すべての C ソース コード ファイルとヘッダー ファイルを含む source_code.zip というファイルを現在のディレクトリに作成するには、次のコマンドを使用します。

 zip ソースコード *.c *.h

各ファイルは追加されるたびにリストされます。ファイルの名前と、そのファイルで達成された圧縮量が表示されます。

新しい ZIP アーカイブを見ると、「.zip」ファイル拡張子が zip によって自動的に追加されたことがわかります。

 ls -l ソースコード.zip

ZIP ファイルの作成時に zip からの出力を表示したくない場合は、 -q (静か) オプションを使用します。

 zip -q ソースコード *.c *.h 

Linux ターミナルからファイルを圧縮または解凍する方法

ZIP ファイルにディレクトリを含める

ZIP ファイルにサブディレクトリを含めるには、 -r (再帰) オプションを使用し、コマンド ラインにサブディレクトリの名前を含めます。以前と同様に ZIP ファイルを作成し、アーカイブのサブディレクトリも含めるには、次のコマンドを使用します。

 zip -r -q ソースコード アーカイブ/ *.c *.h

作成している ZIP ファイルからファイルを抽出する人に配慮するため、多くの場合、ZIP ファイルを作成し、その中のファイルをディレクトリに含めるのが礼儀です。 ZIP ファイルを受け取った人がそれを解凍すると、すべてのファイルがコンピュータ上のディレクトリ内にきちんと配置されます。

次のコマンドでは、 work ディレクトリとすべてのサブディレクトリをアーカイブします。なお、このコマンドは work フォルダの親ディレクトリから発行されます。

 zip -r -q ソースコード work/ 

Linux ターミナルからファイルを圧縮または解凍する方法

圧縮レベルの設定

ファイルを ZIP アーカイブに追加するときに、ファイルに適用される圧縮の程度を設定できます。範囲は 0 ~ 9 で、0 は圧縮をまったく行いません。圧縮率が高いほど、ZIP ファイルの作成にかかる時間が長くなります。適度なサイズの ZIP ファイルの場合、時間の違いは重大な不利益にはなりません。ただし、適度なサイズの ZIP ファイルの場合は、おそらくデフォルトの圧縮 (レベル 6) で十分でしょう。

zip 特定の圧縮レベルを使用させるには、次のように「-」を付けてコマンド ラインのオプションとして数値を渡します。

 zip -0 -r -q ソースコード work/

デフォルトの圧縮レベルは 6 です。 -6 オプションを指定する必要はありませんが、指定しても問題はありません。

 zip -r -q ソースコード work/

最大圧縮レベルはレベル 9 です。

 zip -9 -r -q ソースコード work/

ここでアーカイブされるファイルとディレクトリの選択により、圧縮なし (レベル 0) とデフォルトの圧縮 (レベル 6) の差は 400K になります。デフォルトの圧縮と最高レベルの圧縮 (レベル 9) の差はわずか 4K です。

大したことではないように思えるかもしれませんが、数百、あるいは数千のファイルを含むアーカイブの場合、ファイルごとに少量の追加圧縮を加えると、価値のあるスペースの節約になります。

Linux ターミナルからファイルを圧縮または解凍する方法

ZIP ファイルにパスワードを追加する

ZIP ファイルにパスワードを追加するのは簡単です。 -e (暗号化) オプションを使用すると、パスワードを入力し、確認のために再入力するように求められます。

 zip -e -r -q ソースコード work/ 

Linux ターミナルからファイルを圧縮または解凍する方法

unzip コマンドを使用して ZIP ファイルを解凍する方法

ZIP ファイルからファイルを抽出するには、unzip コマンドを使用し、ZIP ファイルの名前を指定します。 「.zip」拡張子を指定する必要があることに注意してください。

ソースコード.zipを解凍します

ファイルが抽出されると、ターミナル ウィンドウに一覧表示されます。

ZIP ファイルには、ファイルの所有権の詳細は含まれません。抽出されるすべてのファイルの所有者は、抽出するユーザーに設定されます。

zip と同様に、 unzip には -q (静か) オプションがあるため、ファイルの抽出時にファイルのリストを確認する必要はありません。

 unzip -q ソースコード.zip

ターゲットディレクトリへのファイルの抽出

ファイルを特定のディレクトリに抽出するには、 -d (ディレクトリ) オプションを使用し、アーカイブを抽出するディレクトリへのパスを指定します。

 unzip -q ソースコード.zip -d ./development

パスワードで保護されたZIPファイルを解凍する

パスワード付きの ZIP ファイルが作成されている場合、 unzip にパスワードの入力を求められます。正しいパスワードを入力しないと、 unzip ファイルは抽出されません。

 unzip -q ソースコード.zip

パスワードが他人に見られることや、コマンド履歴に保存されることを気にしない場合は、コマンド ラインで -P (パスワード) オプションを使用してパスワードを指定できます。 (大文字の「P」を使用する必要があります。)

 unzip -P fifty.treacle.cutlass -q ソースコード.zip

ファイルの除外

特定のファイルまたはファイルのグループを抽出したくない場合は、 -x (除外) オプションを使用します。この例では、拡張子「.h」で終わるファイルを除くすべてのファイルを抽出します。

 unzip -q ソースコード.zip -x *.h

ファイルの上書き

アーカイブを抽出したが、抽出されたファイルのいくつかを誤って削除したとします。

この問題を簡単に解決するには、ファイルをもう一度抽出します。ただし、以前と同じディレクトリに ZIP ファイルを解凍しようとすると、 unzip ファイルの上書きに関する決定を求めるプロンプトが表示されます。次のいずれかの応答が期待されます。

r (名前変更) 応答を除き、これらの応答では大文字と小文字が区別されます。

  • y: はい、このファイルを上書きします
  • n: いいえ、このファイルを上書きしないでください
  • A: すべて、すべてのファイルを上書きします
  • N: なし、どのファイルも上書きしません
  • r: 名前を変更し、このファイルを抽出しますが、新しい名前を付けます。新しい名前の入力を求められます。

強制的に unzip 既存のファイルを上書きするには、 -o (上書き) オプションを使用します。

 unzip -o -q ソースコード.zip

不足しているファイルを置き換える最も効率的な方法は、ターゲット ディレクトリにないアーカイブ内のファイルのみを unzip 抽出することです。これを行うには、 -n (上書きしない) オプションを使用します。

 unzip -n ソースコード.zip

ZIP ファイルの中身を見る

多くの場合、ZIP ファイルを解凍する前に、ZIP ファイル内のファイルのリストを確認すると便利で有益です。これは、 -l (リスト アーカイブ) オプションを使用して実行できます。出力を管理しやすくするために、 less を介して パイプ処理 されます。

 unzip -l ソースコード.zip |少ない

出力には、ZIP ファイル内のディレクトリとファイル、それらの長さ、アーカイブに追加された日時が表示されます。 「q」を押して、 less を終了します。

これから説明するように、ZIP ファイルの内部を覗く方法は他にもあり、さまざまな種類の情報が得られます。

zipcloakコマンドでパスワードを追加する

ZIP ファイルを作成したものの、パスワードを追加するのを忘れた場合はどうすればよいでしょうか? zipcloak コマンドを使用すると、ZIP ファイルにパスワードをすばやく追加できます。コマンドラインで ZIP ファイルの名前を渡します。パスワードの入力を求められます。パスワードをもう一度入力して確認する必要があります。

 zipcloak ソースコード.zip

zipdetails コマンドを使用してファイルの詳細を表示する

zipdetails コマンドを使用すると、ZIP ファイルに関する多くの情報が表示されます。このコマンドで得られる出力量を処理する唯一の賢明な方法は、 less を介してパイプ処理することです。

 zip詳細source_code.zip |少ない

ZIP ファイルがパスワードで保護されている場合でも、情報にはファイル名が含まれることに注意してください。このタイプの情報は ZIP ファイル内にメタデータとして保存され、暗号化データの一部ではありません。

zipgrepコマンドでファイル内を検索する

zipgrep コマンドを使用すると、ZIP ファイル内のファイル内を検索できます。次の例では、ZIP ファイル内のどのファイルに「keyval.h」というテキストが含まれているかを知りたいと考えています。

 zipgrep keyval.h ソースコード.zip

ファイル slang.c getval.c に文字列「keyval.h」が含まれていることがわかります。また、ZIP ファイル内の異なるディレクトリにこれらの各ファイルのコピーが 2 つあることもわかります。

zipinfo コマンドを使用して情報を表示する

zipinfo コマンドを使用すると、ZIP ファイルの内部を確認するさらに別の方法が得られます。前と同様に、出力を less 経由でパイプ処理します。

 zipinfo ソースコード.zip |少ない

出力は左から右に次のように表示されます。

  • ファイルのアクセス許可
  • ZIP ファイルの作成に使用されたツールのバージョン
  • 元のファイルサイズ
  • ファイル記述子 (後述)
  • 圧縮方法(この場合はデフレーション)
  • データとタイムスタンプ
  • ファイルおよび任意のディレクトリの名前

ファイル記述子は 2 つの文字で構成されます。最初の文字は「t」または「b」で、テキスト ファイルまたはバイナリ ファイルを示します。大文字の場合、ファイルは暗号化されます。 2 番目の文字は 4 文字のいずれかになります。この文字は、このファイルに含まれるメタデータのタイプ (なし、拡張ローカル ヘッダー、「追加フィールド」、またはその両方) を表します。

  • -: どちらも存在しない場合、文字はハイフンになります。
  • l: 拡張ローカルヘッダーはあるが追加フィールドがない場合
  • x: 拡張ローカルヘッダーはないが、追加フィールドがある場合
  • X: 拡張ローカルヘッダーがあり、追加のフィールドがある場合

zipsplitコマンドでファイルを分割する

ZIP ファイルを他の人に送信する必要があるが、サイズ制限があるか、ファイルの送信に問題がある場合は、 zipsplit コマンドを使用して、元の ZIP ファイルをより小さな ZIP ファイルのセットに分割できます。

-n (サイズ) オプションを使用すると、新しい ZIP ファイルごとに最大サイズを設定できます。この例では、 source_code.zip ファイルを分割しています。新しい ZIP ファイルが 100 KB (102400 バイト) を超えることは望ましくありません。

 zipsplit -n 102400 ソースコード.zip

選択するサイズは、ZIP ファイル内のファイルのサイズより小さくすることはできません。

これらのコマンドを使用すると、Linux ターミナルを離れることなく、独自の ZIP ファイルを作成したり、受け取った ZIP ファイルを解凍したり、それらのファイルに対してその他のさまざまな操作を実行したりできます。

Linuxコマンド

ファイル

tar pv cat tac chmod grep diff sed ar man pushd popd fsck testdisk seq fd pandoc cd $PATH awk join jq fold uniq journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr

プロセス

エイリアス · スクリーン · トップ · ナイス · renice · 進行状況 · strace · systemd · tmux · chsh · 履歴 · at · バッチ · フリー · what · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · タイムアウト · ウォール · はい · キル · スリープ · sudo · su · タイム · groupadd · usermod · グループ · lshw · シャットダウン · 再起動 · 停止 · パワーオフ · パスワード · lscpu · crontab · 日付 · bg · fg · pidof · nohup · pmap

ネットワーキング

netstat ping ip ss whois fail2ban bmon dig finger nmap ftp curl wget who whoami w iptables ssh-keygen ufw arping firewalld

「 Linux ターミナルからファイルを圧縮または解凍する方法」に関するベスト動画選定!

圧縮ファイルの解凍方法を勉強するよ!(Beginner006)
【ワンポイントレクチャー】 tarとzipコマンドで行う圧縮と解凍【Linux初心者:第1回】