💬

よく使うLinuxコマンドまとめ

2023/05/23に公開

コマンド一覧

pwd

現在のカレントディレクトリを表示

% pwd
/Users/mino/zenn

cd

カレントディレクトリを変更

% pwd
/Users/mino/zenn

# macbook ディレクトリへ移動
% cd macbook 

% pwd
/Users/mino/zenn/macbook
  • チルダ展開:ホームディレクトリへ移動
# ~(チルダ)によるホームディレクトリの指定
% cd ~

% pwd
/Users/mino

ls

ファイルやディレクトリを一覧表示する

% ls
index.php	iphone		macbook		readme.md
zenn
├── macbook
├── iphone
├── index.php
└── readme.md

* と ?

ファイル名の一部をパターンで指定することにより、複数のファイルを指定するパス名展開という機能があり、*(アスタリスク) と ?(クエスチョンマーク) の記号を利用する

  1. *:任意の文字列
# re で始まるファイル一覧を表示
% ls re*         
readme.md

# 拡張子が `.php` のファイル一覧を表示
% ls *.php
index.php
  1. ?:任意の1文字

任意の1文字だけに対応する点が「*」と異なる

# ファイル名が read で始まり、全体の長さは9文字のファイルを表示
% ls read?????
readme.md

ls コマンドのオプション

  • -l:ファイル名だけでなくファイル属性など詳細情報を同時に表示
% ls -l
total 0
-rw-r--r--  1 mino  staff   0  5  9 23:14 index.php
drwxr-xr-x  2 mino  staff  64  5  9 22:57 iphone
drwxr-xr-x  2 mino  staff  64  5  9 22:56 macbook
-rw-r--r--  1 mino  staff   0  5  9 23:10 readme.md
  • -a:隠しファイルも含めた全てのファイルを表示
% ls -a  
.		.DS_Store	iphone		readme.md
..		index.php	macbook
  • -F:ファイル名の後ろにファイルの種類を表す記号を追加して表示
% ls -F
index.php	iphone/		macbook/	readme.md

-F オプションで表示されるファイル種類

種類 記号
通常ファイル なし
ディレクトリ /
実行可能ファイル *
シンボリックリンク @

mkdir

新しいディレクトリを作成

# ディレクトリを作成する
mkdir [option] <作成するディレクトリ名>

zenn ディレクトリの下に、練習用の work ディレクトリを作る

% mkdir work
% ls -F
index.php	iphone/		macbook/	readme.md	work/
zenn
├── macbook
├── iphone
├── index.php
├── readme.md
└── work <--------- 追加

mkdir コマンドのオプション

  • -p:存在しない親ディレクトリも含めて、何階層もある深いディレクトリを作成する
% mkdir -p report/2023/05
% ls -l report/2023/05
total 0
zenn
├── index.php
├── iphone
├── macbook
├── readme.md
├── report     <--------- 追加
│   └── 2023   <--------- 追加
│       └── 05 <--------- 追加
└── work

touch

中身が何も書かれていない空っぽのファイルを作成する。

複数のファイルをまとめて作成したい場合は、スペースで区切って並べる。

touchコマンドでのファイル作成は、間違って既存のファイル名を指定しても、内容が上書きされたり削除されたりしない。

touch <新しいファイル名1> <新しいファイル名2> ...
% touch newfile
% ls -F
index.php	macbook/	readme.md	work/
iphone/		newfile		report/
zenn
├── index.php
├── iphone
├── macbook
├── newfile   <--------- 追加
├── readme.md
├── report  
│   └── 2023
│       └── 05
└── work

rm

ファイルを削除する

rm [option] <削除するファイル名1> <削除するファイル名2> ...
# ファイルを4つ作成
% touch file1 file2 file3.html file4.html

% ls
file1		file3.html	index.php	macbook		readme.md
file2		file4.html	iphone		newfile		work		report

# まとめて削除
% rm file1 file2

% ls            
file3.html	index.php	macbook		readme.md
file4.html	iphone		newfile		work		report

# パス名展開(*)を利用し、複数ファイルを指定して削除
% rm *.html

% ls
index.php	macbook		readme.md	work
iphone		newfile		report

rm コマンドのオプション

  • -r:再帰的にディレクトリツリーを削除する

注意:この際、削除対象ディレクトリの中のファイルやディレクトリもまとめて削除される

% rm -r report
% ls
index.php	iphone		macbook		newfile		readme.md	work
  • -i:本当に削除して良いか確認を求める
# YESを意味する y または Y を入力した後に Enter を押すと、ファイルが削除される
% rm -i readme.md 
remove readme.md?

rmdir

空のディレクトリを削除する

rmdir <ディレクトリ名>
% ls -F 
index.php	iphone/		macbook/	newfile		readme.md	work/

# 空のディレクトリを削除
% rmdir macbook 

% ls
index.php	iphone		newfile		readme.md	work

中にファイルがあるディレクトリを削除しようとするとエラーとなる

# 任意のディレクトリにファイルを追加
% touch iphone/11.go
% ls iphone 
11.go

# エラー
% rmdir iphone 
rmdir: iphone: Directory not empty

cat

ファイルの内容を表示する

cat [option] <ファイル名>
# /etc/hosts ファイルの内容を表示
% cat /etc/hosts 
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost

cat コマンドのオプション

  • -n:行番号を表示する
% cat -n /etc/hosts
     1	##
     2	# Host Database
     3	#
     4	# localhost is used to configure the loopback interface
     5	# when the system is booting.  Do not change this entry.
     6	##
     7	127.0.0.1	localhost

less

長いファイルの内容を見たい時には、lessコマンドを使ってスクロール表示する

less [option] <ファイル名>
# index.php の内容をスクロール表示する
% less index.php

less コマンドのスクロール操作

コマンド 内容
スペースキー、f、Ctrl + v 1画面下にスクロールする
b 1画面上にスクロールする
j、Ctrl + n、Enterキー 1行下にスクロールする
k、Ctrl + p 1行上にスクロールする
q less コマンドを終了する

「/」: ファイル内の検索

less コマンドでは、現在開いているファイルから文字列を検索することができる。

ファイルを表示中に「/」を入力すると、画面の1番下の行が、検索文字列の入力欄に変わる。

この「/」の後ろに、検索したい文字列を入力して Enterキーを押すことで、文字列をファイルの中から検索することができる。

⬇️ Helloという文字列を検索する例

less コマンドの検索操作

コマンド 内容
/<文字列> 下方向に向かって検索する
?<文字列> 上方向に向かって検索する
n 次の検索結果に移動する
N 前の検索結果に移動する

cp

ファイル・ディレクトリをコピーする

cp [option] <コピー元> ... <コピー先>
# ファイルを別名でコピーする
% cp readme.md writeme.md
% ls    
index.php	newfile		work
iphone		readme.md	writeme.md
zenn
├── index.php
├── iphone
│   └── 11.go
├── newfile
├── readme.md
├── work
└── writeme.md <--------- 追加

コピー先にディレクトリを指定した場合には、コピー元のファイルをそのディレクトリ内に、同一ファイル名でコピーする。

# ファイル(index.php)をディレクトリ(iphone)へコピーする
% cp index.php iphone
zenn
├── index.php
├── iphone
│   ├── 11.go
│   └── index.php <--------- 追加
├── newfile
├── readme.md
├── work
└── writeme.md

cp コマンドのオプション

  • -i:コピー先にファイルが存在する場合に本当に上書きしても良いか確認する

cp コマンドは、コピー先のファイルが既に存在していたとしても、確認などせずにそのまま上書きしてしまうので、-iオプションを付けて確認する必要があります。

% cp -i readme.md writeme.md
overwrite writeme.md? (y/n [n])
  • -r:ディレクトリをコピーする

ディレクトリをコピーする時は、再帰的にコピーを実行する -rオプションを指定する必要がある。

この場合、ディレクトリ macbookが存在していなければ、iphonemacbookという名前でコピーします。

% ls -F
index.php	newfile		work/
iphone/		readme.md	writeme.md
% ls iphone 
11.go		index.php
% cp -r iphone macbook
% ls macbook 
11.go		index.php

一方、macbookというディレクトリが既に存在している場合には、コピー先にディレクトリを指定したとみなされ、iphonemacbookの中に名前を変えずにコピーする。

% cp -r iphone macbook
% ls -F macbook
11.go		index.php	iphone/

mv

ファイル・ディレクトリを移動する

mv [option] <移動元> ... <移動先>

<移動元>、<移動先>の両方にファイル名を指定した場合、ファイル名の変更をしているのと同じことになる。

# テスト用のディレクトリとファイルを作成
% mkdir ipad
% cd ipad 
% touch pro12.9

# pro12.9 ファイルを、pro11 という名前にして移動する
# 元の pro12.9 ファイルは存在しなくなる
% mv pro12.9 pro11
% ls              
pro11

<移動元>にファイル名、<移動先>にディレクトリ名を指定した場合、<移動先>の中に<移動元>を移動させる。

# pro11 ファイルを、ディレクトリ iphoneの中に移動
% mv pro11 ../iphone
% ls -l
total 0
zenn
├── ipad
├── iphone
│   ├── 11.go
│   ├── index.php
│   └── pro11 <--------- 移動
...(省略)...

<移動元>にディレクトリ名、<移動先>にディレクトリ名を指定するだけで、そのディレクトリの下にあるファイルもまとめて移動することができる。

# iphone を apple の下に、ディレクトリごとに移動
% mkdir apple
% ls iphone 
11.go		index.php	pro11
% mv iphone apple 
% ls apple/iphone 
11.go		index.php	pro11

ln

リンクを張る

ln [option] <リンク元ファイル名> <リンク名>

リンクとは

Linuxファイルシステムで、ファイルに別名を付ける機能

ハードリンク

ハードリンクとは

1つのファイルの実体に複数の名前を付ける機能

# ハードリンク read を作成
% cd dir1
% cp ../readme.md readme.md
% ls
readme.md
% cat readme.md 
readmeの元ファイルです
% ln readme.md read
% ls
read		readme.md

これにより、別のコマンドからファイル名としてreadを指定すると、元のreadme.mdにアクセスできる。

# ハードリンクを指定してコマンドを実行
% cat read
readmeの元ファイルです
  • ハードリンクの削除

rmコマンドでハードリンクを削除したファイルを削除すると、指定したファイル名だけ取り除かれ、ファイルの実体は残ったままとなる

% rm readme.md 
% ls
read
% cat read 
readmeの元ファイルです

ハードリンクを持つファイルの実体は、全てのハードリンクがなくなった時に削除される

% rm read
% ls -l
total 0

シンボリックリンク

シンボリックリンクとは

リンク先のパス名が書かれた小さな特殊ファイルで、ハードリンクとは違い、リンク先がファイルの実体であり本物のファイル

シンボリックリンクはディレクトリに対して作成できなかったり、異なるディスク間をまたがることができないなどの制限を受けないため、現在はこちらの方がよく使われる。

lnコマンドに-sオプションを付けることで、シンボリックリンクを作成できる。

# readme.md ファイルに対して、rd という名前でシンボリックリンクを作成
% ln -s readme.md rd

# シンボリックリンクを確認
% ls -l
total 16
lrwxr-xr-x  1 mino  staff    9  5 13 22:09 rd -> readme.md
-rw-r--r--  2 mino  staff   31  5 13 21:17 readme.md

# シンボリックリンクを指定してコマンドを実行
% cat rd
readmeの元ファイルです
  • シンボリックリンクの削除

rmコマンドを利用して削除する。この際、リンク先のファイルには何も影響を与えない。

% rm rd
% ls -l
total 16
-rw-r--r--  2 mino  staff   31  5 13 21:17 readme.md

シンボリックリンクを残したまま、リンク先の実体ファイルを削除することもできる。

この場合は、シンボリックリンクはリンク先がなくなり、「リンクが壊れた」状態となる。

% ln -s readme.md rd
% ls -l
total 16
lrwxr-xr-x  1 mino  staff    9  5 13 22:22 rd -> readme.md
-rw-r--r--  2 mino  staff   31  5 13 21:17 readme.md

# リンク先のファイルを削除
% rm readme.md 
% ls -l
total 8
lrwxr-xr-x  1 mino  staff    9  5 13 22:22 rd -> readme.md

# エラー
% cat rd
cat: rd: No such file or directory

find

ディレクトリツリーからファイルを探す

find <検索開始ディレクトリ> <検索条件> <アクション>

findコマンドを実行すると、<検索開始ディレクトリ>を起点として、<検索条件>を満たすファイルを探し、<アクション>を実行する。

<検索条件>に何も指定しなかった場合には、全てのファイルとディレクトリが対象となる。

# findコマンドの例
# 検索開始ディレクトリ:. (カレントディレクトリ)
# 検索条件      :-name 11.go(ファイル名を「11.go」に絞り込む)
# アクション     :-print(パス名を表示する)
% find . -name 11.go -print
./apple/iphone/11.go
./macbook/11.go
./macbook/iphone/11.go

このように、findコマンドでは、指定したディレクトリの直下のファイルだけでなく、ディレクトリツリーを順に下りながら検索条件に一致するファイル全てを表示する。

ファイル名を探す(-name、-iname)

  • -name:ファイル名の大文字小文字を区別する
  • -iname:ファイル名の大文字小文字を区別しない

ファイル名指定には、ワイルドカードとして 「*」(任意の文字列)と「?」(任意の1文字)が利用できる。

なお -nameで「」や「?」を利用する際には、「」などの記号がbashのパス名展開と解釈されないようにするため、’’(シングルクォーテーション)を必ず付ける。

% find . -name '*.php' -print
./apple/iphone/index.php
./index.php
./macbook/index.php
./macbook/iphone/index.php

ファイルの種類で探す(-type)

ファイルの種類により検索条件を絞り込むこともできる。指定できるファイルタイプは多くあるが、まずは次の3種類だけ紹介する。

指定 ファイル種別
-type f 通常ファイル
-type d ディレクトリ
-type l シンボリックリンク
# カレントディレクトリ以下にあるディレクトリのみ表示
% find . -type d -print
.
./apple
./apple/iphone
./macbook
./macbook/iphone
./work
./ipad
./dir1

複数の検索条件の指定(-a)

findコマンドでファイルを検索するとき、検索条件を-a(AND)で区切って並べることで、複数の検索条件を同時に指定するAND検索ができる。

# 条件1:通常ファイルであり
# 条件2:ファイル名が .md で終わるファイル
% find . -type f -a -name '*.md' -print
./writeme.md
./dir1/readme.md

なお、-aは省略可能。単に検索条件を並べて書いてもAND検索になる。

% find . -type f -name '*.md' -print 
./writeme.md
./dir1/readme.md

locate

パス名の一部を指定してファイルを探すためのコマンド。

この際、ファイル名を専用のデータベースから検索するため、ディスクをスキャンしてファイルを探すfindコマンドに比べて非常に高速に検索することができる。

locate [option] <検索パターン>

一方、locateコマンドはインストール時に、ファイルパスのデータベースを1日1回作成するように設定されるので、たった今作成したばかりのファイルは、データベースに入っていないためlocateコマンドで見つけることはできない。

このため、locateコマンドは、システムにあらかじめインストールされているファイルや、何日か前に作ったままのファイルなど、作成してからしばらく経ったファイルを見つけるのに向いている

locate コマンドのオプション

  • -i 、—ignore-case:検索パターンで大文字小文字を区別しない
  • -b、—basename:ファイル名だけを検索対象にする
  • -A、—all:複数の検索パターンを指定して、それら全てのパターンに一致する(AND)検索をする

which

コマンドのフルパスを表示する

which [option] <コマンド名>

whichコマンドは指定されたコマンド名をサーチパスから探して、見つかった実行ファイルのフルパスを表示する。

# touch コマンドのフルパスをサーチパスから検索
% which touch    
/usr/bin/touch

chmod

ファイルやディレクトリのパーミションを設定する

シンボルモード

書式でchmodコマンドを実行する。

chmod [ugoa][+-=][rwx] <ファイル名>
  • ユーザ設定
    • u:オーナー
    • g:グループ
    • o:その他のユーザ
    • a:ugo 全て(ユーザ設定を省略すると、aを設定したものとみなされる)
  • 演算子
    • +:権限を追加する
    • -:権限を禁止する
    • =:指定した権限と等しくする
% ls -l
total 8
...(省略)...
-rw-r--r--  1 mino  staff    0  5 13 20:12 writeme.md

# writeme.mdに対してグループの実行権限を追加
% chmod g+x writeme.md

% ls -l               
total 8
...(省略)...
-rw-r-xr--  1 mino  staff    0  5 13 20:12 writeme.md

# writeme.mdに対してグループの実行権限を削除
% chmod g-x writeme.md

% ls -l               
total 8
...(省略)...
-rw-r--r--  1 mino  staff    0  5 13 20:12 writeme.md

# グループ及びその他ユーザに対するパーミションを「書き込み」「実行」だけにする
% chmod go=wx writeme.md 

% ls -l                 
total 8
...(省略)...
-rw--wx-wx  1 mino  staff    0  5 13 20:12 writeme.md

数値モード

数値モードは元のパーミションに関わらず新しいパーミションの値へと変換する、絶対指定の方法。

chmod <8進数の数値> <ファイル名>
  • パーミションの数値
    • 読み取り(r):4
    • 書き込み(w):2
    • 実行(x):1

rwxの数字を足した値を、「オーナー」「グループ」「その他のユーザ」の順に3つ並べて指定する。

例えば、「rwxrw-r-x」というパーミションは、数値に変換すると「765」となる。

% ls -l                 
total 8
...(省略)...
-rw--wx-wx  1 mino  staff    0  5 13 20:12 writeme.md

# 「755(rwxr-xr-x)」とパーミション指定
% chmod 755 writeme.md 

% ls -l               
total 8
...(省略)...
-rwxr-xr-x  1 mino  staff    0  5 13 20:12 writeme.md

su

一時的に別のユーザになるためのコマンド。実行すると、ログアウトせずに他のユーザに切り替わることができる。

suコマンドは主にスーパーユーザに変わるために使う。

なお、オプションを付けないでユーザーを切り替えると、環境変数やカレントディレクトリなど現在の環境を維持したままユーザだけが切り替わるので、アプリケーションによってはうまく動作しないことがある。そのため通常は下の例のように、-(ハイフン)を付けてコマンドを実行する。

# スーバーユーザの環境に初期化して切り替える
su -

sudo

別のユーザとしてコマンドを実行するために利用する。ユーザを特に指定しない場合は、スーパユーザとしてコマンドを実行する。

sudoコマンドは主に、一般ユーザでログインしている時に、スーパーユーザでないと実行できないコマンドを実行するために使用する。

sudo <実行したいコマンド>

sudosuと似ていますが、1つのコマンドだけをスーバーユーザ権限で実行するところが異なります。

また、suコマンドにはスーバーユーザのパスワードが必要ですが、sudoを使用する際には今ログインしたユーザのパスワードが必要な点が、sudosuの大きな違いです。


history

コマンドライン履歴を表示

% history 
  216  cd ..
  217  ls -l
  218  chmod g+x writeme.md
  219  ls -l
  220  chmod g-x writeme.md
...(省略)...

フィルタの先頭から指定した行数だけを標準出力に出力する(行数を指定しない場合は、最大10行を表示)

# コマンド履歴を10行だけ表示する
% history | head   
  218  chmod g+x writeme.md
  219  ls -l
  220  chmod g-x writeme.md
  221  ls -l
  222  chmod go=wx writeme.md
  223  ls -l
  224  chmod 755 writeme.md
  225  ls -l
  226  cd zenn
  227  ps

wc

入力ファイルの行数・単語数・バイト数を順に表示する

% wc index.php 
      37     101     662 index.php
		# 行   単語   バイト ファイル名

wc コマンドのオプション

  • -l:行数だけ表示
% wc -l index.php
      37 index.php
  • -w:単語数だけ表示
% wc -w index.php
     101 index.php
  • -c:バイト数だけ表示
% wc -c index.php
     662 index.php

sort

行単位でテキストをソートする(デフォルト:アルファベット順)

% cat sort.txt 
Japan
USA
Korea
Australia
Spain
Germany
England
France

# sort.txt をアルファベット順にソート
% sort sort.txt 
Australia
England
France
Germany
Japan
Korea
Spain
USA

sort コマンドのオプション

  • -n:数値順にソート
% cat num.txt
7
8
23
11
76
52
1
4
9
99
87

# オプションなしでソート
% sort num.txt 
1
11
23
4
52
7
76
8
87
9
99

# オプション付きでソート
% sort -n num.txt
1
4
7
8
9
11
23
52
76
87
99
  • -r:逆順にソート
# 降順にソート
% sort -r sort.txt 
USA
Spain
Korea
Japan
Germany
France
England
Australia

# 数値データが記録されたファイルなどを値の大きい順に並べ替える
% sort -nr num.txt
99
87
76
52
23
11
9
8
7
4
1
  • -u:重複行を取り除く
% sort -u uniq.txt 
England
France
Germany
Japan

uniq

重複行を取り除く。ただ、同じ内容の行が連続している場合にのみ重複を取り除く

% cat uniq.txt 
Japan
Japan
Germany
France
France
France
England
Germany

% uniq uniq.txt 
Japan
Germany
France
England
Germany # 重複が残っている

uniq コマンドのオプション

  • -c:重複行を数える
% uniq -c uniq.txt 
   2 Japan
   1 Germany
   3 France
   1 England
   1 Germany

tr

文字を変換する

tr <置換前の文字> <置換後の文字>
% cat tr.txt 
root/my/folder
cba

# 文字「/」を、文字「:」に置換する
% cat tr.txt| tr / :
root:my:folder
cba

# 複数の文字を置換する
# a を A、b を B、c を Cに
% cat tr.txt| tr abc ABC
root/my/folder
CBA

文字を削除する

tr -d <削除文字>
# 改行コード(\n)を取り除いて1行にする
% cat tr.txt| tr -d "\n"
root/my/foldercba%

tail

ファイルの末尾を表示する。オプションを指定しない場合は、末尾10行だけ表示する

% history | tail
  258  sort -u uniq.txt
  259  uniq -c uniq.txt
  260  vi tr.txt
  261  cat tr.txt
  262  cat tr.txt| tr / :
  263  vi tr.txt
  264  cat tr.txt| tr / :
  265  cat tr.txt| tr abc ABC
  266  cat tr.txt| tr -d "\n"
  267  tree

tail コマンドのオプション

  • -n:表示する行数を指定
# 末尾1行のみを表示
% history | tail -n 1
  268  history| tail
  • -f:ファイルの内容が書き換えられると、その都度リアルタイムに表示され、ファイルへの追記を監視する

diff

2つのファイルの差分を表示する

diff [option] <比較元ファイル> <比較先ファイル>

diffコマンドは設定コードやプログラムのソースコードなどに対して、編集前と編集後の変更内容を確認するために使われる

# 編集前
% cat before.php 
<?php
$first = 10;

# 編集後
% cat before_up.php 
<?php
$first = 10;
$add = 'add diff';

% diff before.php before_up.php 
# 変更コマンド
# <変更範囲1><変更種別><変更範囲2>
# 「before.php」の3行目が「before_up.php 」の3行目に変更される
3c3
< 
---
> $add = 'add diff';

変更コマンド

元ファイルからどの行をどのように変更するかを示している

  • 変更種別
    • <範囲1>a<範囲2>:1つ目のファイルの範囲1の後に、2つ目のファイルの範囲2の内容が追加された
    • <範囲1>c<範囲2>:1つ目のファイルの範囲1の箇所が、2つ目のファイルの範囲2の内容に変更された
    • <範囲1>d<範囲2>:1つ目のファイルの範囲1の箇所が削除された

grep

<ファイル名>から<検索パターン>に一致する行を出力する

この際、検索パターンが一致することを「マッチする」と言う

grep [option] <検索パターン> <ファイル名>
# 文字列「echo」を含む行を出力
% grep echo index.php
echo "tail";

grep コマンドのオプション

  • -n:マッチした行の行番号を表示
% grep -n echo index.php
1:echo "tail";
  • -i:大文字小文字を区別せずにマッチさせる
% grep -i echo index.php
echo "tail";
Echo "plus";
  • -v:マッチしなかった行を表示
# 文字列「echo」を含まない行を出力
% grep -v echo index.php
Echo "plus";

tar

複数のファイルやディレクトリを1つのアーカイブファイルにまとめたり、逆にアーカイブファイルから元のファイルを取り出すために利用するコマンド

1. 練習用ファイルの準備

% touch test-{1..3}.txt
% ls
test-1.txt	test-2.txt	test-3.txt

2. アーカイブファイルの作成

# c (create):新しくアーカイブファイルを作成する
# f (file):ファイル
tar cf <アーカイブファイル> <アーカイブ元ファイルパス>
# ipad ディレクトリをアーカイブする
% tar cf ipad.tar ipad

3. アーカイブファイルの内容確認

# t (list):アーカイブファイルの中に含まれるファイル一覧が出力される
tar tf <アーカイブファイル>
% tar tf ipad.tar     
ipad/
ipad/test-1.txt
ipad/test-3.txt
ipad/test-2.txt

4. アーカイブの展開

# x (extract):元のファイルやディレクトリを取り出す
tar xf <アーカイブファイル>
# 元のディレクトリを削除する
% rm -rf ipad

# アーカイブファイルを展開 
% tar xf ipad.tar

# 確認
% ls ipad
test-1.txt	test-2.txt	test-3.txt

gzip

ファイルの圧縮・展開を行うためのコマンド

gzip <圧縮元ファイル>
# テスト用のファイルを作成:10キロバイト
% ls -l
total 24
-rw-r--r--  1 mino  staff  10100  5 23 21:36 text-1.txt

# 圧縮
% gzip text-1.txt  

# 圧縮ファイル:7.5キロバイト
% ls -l           
total 16
-rw-r--r--  1 mino  staff  7577  5 23 21:36 text-1.txt.gz

圧縮ファイルの展開

gzip -d <圧縮ファイル>

または

gunzip <圧縮ファイル>
% gzip -d text-1.txt.gz 
% ls -l
total 24
-rw-r--r--  1 mino  staff  10100  5 23 21:36 text-1.txt

tar と gzip を組み合わせる

複数のファイルをまとめて1つのファイルに圧縮するには、tarコマンドでまず1つのファイルにアーカイブして、そのアーカイブファイルをgzipで圧縮する必要がある。

gzipコマンドを使わなくても、tar コマンドだけで tar+gz ファイルを作ることができる。 tarコマンドに zオプジョンを指定することで tar+gz ファイルを作成・展開することができる。

# テスト用ディレクトリとファイルを作成する
% mkdir dir
% touch dir/text-{1..10}.txt
% ls dir
text-1.txt	text-2.txt	text-4.txt	text-6.txt	text-8.txt
text-10.txt	text-3.txt	text-5.txt	text-7.txt	text-9.txt

# tar コマンドで tar+gz 形式のファイルの作成
% tar czf dir.tar.gz dir
 
% ls -l
total 72
drwxr-xr-x  12 mino  staff   384  5 23 21:58 dir
-rw-r--r--   1 mino  staff   225  5 23 22:00 dir.tar.gz
...(省略)...

# 元ファイルを削除
% rm -rf dir

# tar コマンドで tar+gz 形式のファイルを展開 
% tar xzf dir.tar.gz

% ls -l
total 72
drwxr-xr-x  12 mino  staff   384  5 23 21:58 dir
-rw-r--r--   1 mino  staff   225  5 23 22:00 dir.tar.gz
...(省略)...

Discussion