未経験からのフルスタックエンジニア

スキルをつけよう!未経験からフリーランスエンジニアへの成長記録

Linux学習履歴(4)~ファイルの圧縮解凍・フィルタコマンド~

以下の記事の続きです。

atora1992.hatenablog.com

Linuxコマンドライン入門』が日ごとに6日間分別れているので、今回は4日目の中間地点から最後までの内容についてです。

コマンドの備忘録的になってしまうと思いますので、悪しからず。

4日目

ファイルを圧縮・解凍してみる

圧縮ファイルでよくみるのは、"zip"形式かと思います。
これは、正確には「圧縮アーカイブ」と呼ばれるものだそうです。

圧縮ファイル:圧縮ソフトによってファイルを個別に圧縮したもの
アーカイブファイル:複数のファイルを一つにまとめたもの

なので、単純にアーカイブファイルといった場合には、圧縮されてはいません。"zip"ファイルは、アーカイブされた後に圧縮されています。

圧縮ファイル、アーカイブファイルの形式は色々ありますが、今回は以下のものを取り上げます。

  • .gz:gzip形式の圧縮ファイル
  • .bz2:bzip2形式の圧縮ファイル
  • .tar:tar形式のアーカイブファイル

gzip

$ gzip -v [ファイルのパス]  #ファイルの圧縮、"v"オプション指定で圧縮率を確認できる
※元のファイルは削除される

$ gunzip [圧縮ファイルのパス]  #解凍する
$ gzip -d [圧縮ファイルのパス]  #解凍する

#圧縮ファイルがテキストファイルの場合
$ gzcat [圧縮ファイル]  #解凍せずに中身を見れる
※Mac以外は上記とコマンドが違う場合がある

bzip2

gzipよりも圧縮率が高い方法です。

$ bzip2 -v [ファイルのパス]  #ファイルの圧縮、"v"オプション指定で圧縮率を確認できる
※元のファイルは削除される

$ bunzip2 [圧縮ファイルのパス]  #解凍する
$ bzip2 -d [圧縮ファイルのパス]  #解凍する

#圧縮ファイルがテキストファイルの場合
$ bzcat [圧縮ファイル]  #解凍せずに中身を見れる

tar

$ tar -cvf [アーカイブファイルのパス] [アーカイブするディレクトリ]  #"c"は新規アーカイブ作成、"v"はファイル情報の表示、"f"はアーカイブファイルのパスを指定するオプション
※拡張子が自動でつかないため、指定する必要がある
※元のディレクトリは残存する

(具体例)
$ tar -cvf atora.tar Atora/  #カレントディレクトリのAtoraディレクトリのアーカイブファイルをカレントディレクトリにatora.tarとして作成する

$ tar -tvf [アーカイブファイルのパス]  #アーカイブファイルの中身を確認
$ tar -xvf [アーカイブファイルのパス]  #アーカイブファイルの展開
※展開はカレントディレクトリにて行われるので、元のディレクトリの名前を変更する必要あり
※アーカイブファイルを展開した場合には、更新日時などの情報はアーカイブに格納された時と同じ
$ tar -xvf [アーカイブファイルのパス] -C [ディレクトリのパス]  #カレントディレクトリ以外のディレクトリにて展開

上記のアーカイブ化・圧縮を組み合わせることで、圧縮アーカイブを作成できます。もしくは以下のコマンドでも作成できます。

$ tar -cvzf [アーカイブファイルのパス] [アーカイブするディレクトリ]   #gzip形式で圧縮アーカイブを作成
$ tar -cvjf [アーカイブファイルのパス] [アーカイブするディレクトリ]   #bzip2形式で圧縮アーカイブを作成

(具体例)
$ tar -cvzf atora.tgz Atora  #カレントディレクトリのAtoraディレクトリの圧縮アーカイブをカレントディレクトリにatora.tgzとして作成する("tgz"は".tar.gz"の短縮形)
$ tar -cvjf atora.tbz2 Atora  #カレントディレクトリのAtoraディレクトリの圧縮アーカイブをカレントディレクトリにatora.tbz2として作成する("tbz2"は".tar.bz2"の短縮形)

展開・解凍も同じように可能です。

#gzip形式
$ tar -tvzf [アーカイブファイルのパス]  #中身を確認
$ tar -xvzf [アーカイブファイルのパス]  -C [ディレクトリのパス]  #展開

#bzip形式
$ tar -tvjf [アーカイブファイルのパス]  #中身を確認
$ tar -xvjf [アーカイブファイルのパス]  -C [ディレクトリのパス]  #展開

フィルタコマンド

標準入力と標準出力の両方を使うコマンド

sort

テキストファイルの中身を並び替えることができます。

$ sort [ファイルのパス] [ファイルのパス] ... #行の先頭から順に文字を比較し、アルファベット順にソート(昇順)(複数ファイル指定可能)
$ sort -r [ファイルのパス]  #行の先頭から順に文字を比較し、アルファベット順にソート(降順)
$ sort -k [最初のフィールド番号] , [最後のフィールド番号] -t [区切り文字]  #区切り文字で区切られたフィールド(情報)のうち、指定された範囲の値を元にソート
※最後のフィールド番号を指定しない場合、指定したフィールドから行末までが対象となる
$ sort -k [最初のフィールド番号] , [最後のフィールド番号] -n -t [区切り文字]  #"n"オプションで数値によるソートが可能
$ sort [ファイルのパス] [ファイルのパス] ... > [違うファイルのパス]  #ソート結果をファイルに書き出す
$ sort [ファイルのパス] [ファイルのパス] ... | tee [違うファイルのパス]  #ソート結果を書き出しつつ、ターミナルに結果を表示

uniq

テキストファイルの中身で、隣接する重複行を削除できます。

$ uniq [ファイルのパス]
※重複する行を1つにします

隣接しない重複行は削除されないので、sortコマンドと組み合わせることで全ての重複行を削除できます。

$ sort [ファイルのパス] | uniq
$ sort -u [ファイルのパス]  #"u"オプションを使用しても同じ結果となる

逆に、重複した行のみを表示、重複回数をカウントするには

$ sort [ファイルのパス] | uniq -d  #重複した行のみを表示
$ sort [ファイルのパス] | uniq -c  #重複回数をカウント
$ sort [ファイルのパス] | uniq -c | sort -nrb  #重複回数をカウントし、回数の多い順に並び替える("b"オプションは先頭のスペースを無視するオプション)

wc

ファイルの行数、単語数、文字数をカウントするコマンドです。

$ wc [ファイルのパス]  #結果は、行数、単語数、文字数(バイト)の順に表示"c"オプションで文字数のみ、"l"オプションで行数のみ、"w"オプションで単語数のみを表示

$ ls ~ | wc -l  #ホームディレクトリのファイル数をカウント
$ find [検索条件] | wc -l  #検索条件に一致するファイス数をカウント

tr

文字単位の置換や削除を行うコマンドです。
正規表現で文字を指定することもできます。
引数にファイルを指定できません。そのためリダイレクションで"< [ファイルのパス]"とするか、パイプの2コマンド目以降で使用する必要があります。

#置換
$ tr [置換前の文字] [置換後の文字] < [ファイルのパス]  #ファイル内の文字を置換する
※文字単位の置換を行う

$ tr [置換前の文字1][置換前の文字2][置換前の文字3].. [置換後の文字1][置換後の文字2][置換後の文字3].. < [ファイルのパス]  #複数文字の置換
(具体例)
$ tr abc ABC < [ファイルのパス]  #a→A、b→B、c→Cに置換します
※文字列として置換していない

#削除
$ tr -d [削除する文字]  #指定した文字を削除する
(具体例)
$ tr -d " " < [ファイルのパス]  #スペースを削除する(ダブルクォーテーションでくくる必要あり)
$ tr -d abc < [ファイルのパス]  #"a"、"b"、"c"、を削除する

#連続した文字をまとめる
$ tr -s [まとめたい文字] < [ファイルのパス]
$ tr -s [置換前の文字] [置換後の文字] < [ファイルのパス]  #置換後にまとめることも可能

次の記事へ

atora1992.hatenablog.com