以下の記事の続きです。
『Linuxコマンドライン入門』が日ごとに6日間分別れているので、今回は4日目の中間地点から最後までの内容についてです。
コマンドの備忘録的になってしまうと思いますので、悪しからず。
4日目
ファイルを圧縮・解凍してみる
圧縮ファイルでよくみるのは、"zip"形式かと思います。
これは、正確には「圧縮アーカイブ」と呼ばれるものだそうです。
圧縮ファイル:圧縮ソフトによってファイルを個別に圧縮したもの
アーカイブファイル:複数のファイルを一つにまとめたもの
なので、単純にアーカイブファイルといった場合には、圧縮されてはいません。"zip"ファイルは、アーカイブされた後に圧縮されています。
圧縮ファイル、アーカイブファイルの形式は色々ありますが、今回は以下のものを取り上げます。
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 [置換前の文字] [置換後の文字] < [ファイルのパス] #置換後にまとめることも可能
次の記事へ