最近、ファイルの拡張子(tar.gz)に騙され、苦戦したので下記3種類のファイルの見分け方をまとめておこうと思います!
・text1.tar.gz(tar.gzの姿を装った空のテキストファイル)
・text2.tar.gz(tar.gzの姿を装ったtarファイル)
・text3.tar.gz(本物のtar.gzファイル)
姿かたちを偽っていたテキストファイルの正体を見破った経験と喜びのせいで先入観のようなものを抱いてしまい、text2.tar.gz
がtarファイルであったと判別するまでかなりの時間を要してしまいました( ノД`)シクシク…
今回、正体を暴くまでに使用したのはLinuxの
①tarコマンド
②fileコマンド
③勘
手っ取り早いのはなんといっても勘!
中身がわけのわからない文字の羅列はtar.gzファイルであるはず。
数列がtarファイル。
空のテキストファイルでも圧縮すると何かしらの文字が生成されるので、中身が空の時点でテキストファイルで決定です。
//空のテキストファイルはファイルサイズが0
~$ du -h text1.tar.gz
0 text1.tar.gz
【本題】
最強は②のfileコマンドです。
ですが、そこにたどり着くまでの道のりを紹介します。
tar.gzファイルの解凍は「tar -zxvf ファイル名」でできますが、オプションの意味を理解していませんでした。調べるとオプション'z'は圧縮形式がgzip形式のものを指し、違う圧縮形式のファイルを解凍しようとすると下記のようなエラーになります。
~$ ls
text1.tar.gz text2.tar.gz text3.tar.gz
~$tar -zxvf text2.tar.gz
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
オプション「z」を外し、実行してみると解凍できます。
これによりtext2.tar.gz
はtar.gzファイルではなかったことがわかります。
(text1.tar.gz
を同じように実行すると「これはtarアーカイブではないようです」と出力されます)
~$ tar -xvf text2.tar.gz
text2.txt
ここでtext2.tar.gz
をtarファイルと断定してしまっていいのかわからなかったため、fileコマンドを活用しました。ここで一気に各ファイルがどの形式なのかを確認します。
~$ file text1.tar.gz
text1.tar.gz: empty //ただの空ファイルであることがわかります
~$ file text2.tar.gz
text2.tar.gz: POSIX tar archive (GNU) //拡張tarフォーマット(tarファイル?)のことを指す
~$ file text3.tar.gz
//gzip形式で圧縮されていることを指す
text3.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 167772200
//オプション'z'を含むコマンドで解凍できることを確認
~$ tar -zxvf text3.tar.gz
text3.txt
tarコマンド×オプション'z'で解凍できたため、text3.tar.gz
が拡張子通りのファイルであったことがわかりました。