LPIC-1 - 101試験 - 103:GNUとUnixのコマンド - 103.3 基本的なファイル管理を行う

Last Update : September 18 2014 21:34:22

     

a. ファイル操作コマンド

1.ファイルのコピー[ cp ]

ファイルをコピーするコマンドは、 cp です。以下は、file1 を file2という名前でコピーしています。

$ cp file1 file2

ディレクトリごとコピーする場合は、-r オプションを使用します。

$ cp -r directory1 directory2

● cp コマンド構文
 cp [オプション] [コピー元ファイル名・ディレクトリ名] [コピー先ファイル名・ディレクトリ名]

● cp コマンドオプション
 -a ディレクトリ構造以外の全ての属性、構成を保持してコピーします。シンボリックリンクを指定した場合はシンボリックリンク自体をコピーします。指定した属性を保持してコピーを行い、umaskの設定を無視します。
 -b[=作成方法] コピー時に上書きを行う場合、コピー先に存在するファイルのバックアップを作成します。バックアップファイルのファイル名の作成方法を指定します。指定する値を以下に示します。
t, numbered
元のファイル名の末尾に番号を振った拡張子を追加した名前をバックアップファイルのファイル名に使用します。
nil, existing
元のファイル名の末尾に番号を振った拡張子を付加した名前を持つバックアップファイルが存在する場合、番号をインクリメントして付加します。
 -d ファイル名でシンボリックリンク(ディレクトリ・ファイルに別の名を設定し、その名前でアクセスできる仕組み)を指定した場合、指定されたシンボリックリンク自体をコピーします。
 -f 強制的に上書きをします。
 -H ファイル名で指定されたシンボリックリンクを全て辿ります。
 -i コピー先に同名ファイルがある場合、上書きするか確認する
 -l コピーを行うかわりにハードリンクの作成を行います。
 -L ファイル名でシンボリックリンクを指定した場合、指定されたシンボリックリンク自体のコピーではなくシンボリックリンクが指し示しているファイル・ディレクトリのコピーを行います。
 -p 指定された属性を維持します。umaskを無視します。
 -P コピー元に指定したファイル名のパスにあわせてコピー先にディレクトリを作成し、作成されたディレクトリ内にコピーします。
 -r , -R ディレクトリごと再帰的コピーする(ディレクトリを中身ごとコピーします。)
 -s コピーを行うかわりにシンボリックリンクの作成を行います。
 -u コピー先に同一名称のファイルが存在した場合、既存のファイルがコピー元のファイルより古かった場合のみ上書きでコピーします。
 -v 経過を表示します。


2.ファイルの移動/リネーム [ mv ]

mv コマンドは、ファイルを移動させる役割と、ファイル名の変更をする役割と2つの役割を果たします。以下は、file1 を public_html というディレクトリに移動します。なお、mv コマンドはオプションをつけずとも、ディレクトリごと移動させる事ができます。

$ mv file1 public_html/

以下例は、file1 という名前のファイルを、file2という名前にリネームしています。

$ mv file1 file2

● mv コマンド構文
 mv [オプション] [移動元ファイル名・ディレクトリ名] [移動先ファイル名・ディレクトリ名]

● mv コマンドオプション
 -i コピー先に同名ファイルがある場合、上書きするか確認する
 -v 詳細表示


3.ディレクトリの作成 [ mkdir ]

ディレクトリを作成するには、 mkdir (make direcotry)コマンドを実行します。

$ mkdir direcotry1

親ディレクトリが存在しない場合に、親ディレクトリも同時に作成するには、-p オプションを用います。以下例では、aaa や bbb というディレクトリが存在しなくても、cccというディレクトリが作成されます。

$ mkdir -p /home/sakura/public_html/aaa/bbb/ccc

● mkdir コマンド構文
 mkdir [オプション] [ディレクトリ名]

● mkdir コマンドオプション
 -p 親ディレクトリも同時に作成する
 -v 詳細表示


4.空のディレクトリを削除する [ rmdir ]

ディレクトリ内にファイルが入っていない場合、 rmdir で空のディレクトリを削除します。ディレクトリ内にファイルが存在する場合は、ディレクトリを削除する事はできません。以下は、ディレクトリ内にファイルが存在する場合に、削除できなかった旨を示すメッセージです。

# rmdir directory1/
rmdir: `directory1/': ディレクトリは空ではありません

● rmdir コマンド構文
 rmdir [オプション] [ディレクトリ名]

● rmdir コマンドオプション
 -p 親ディレクトリごと削除する。親ディレクトリ内も空でなければ削除できません。


5.ファイル/ディレクトリの削除 [ rm ]

ファイルやディレクトリを削除する場合には、 rm コマンドを使用します。ファイルを削除する場合は、オプションをつけずに実行します。ディレクトリを削除する場合は、-r オプションを付加します。

# rm -r direcotry1

ディレクトリごと削除する際には、ディレクトリ内の中身も削除されるかどうかファイルごとに聞かれます。そのディレクトリ内に多くのファイルが存在する場合は、いちいち確認をとっていたのでは、面倒くさいので、ディレクトリを完全に削除してもよいという確信があるならば、-f オプションを付け加えます。

# rm -rf direcotry1

● rm コマンド構文
 rm [オプション] [ファイル名・ディレクトリ名]

● rm コマンドオプション
 -r [ -R ] ディレクトリ内のファイルを再帰的に削除する
 -i 削除の前に確認をとる
 -f 確認をとらずに削除する
 -v 詳細表示


6.ファイル/ディレクトリの詳細検索 [ find ]

find コマンドは、指定したディレクトリ以下のファイルやディレクトリを検索します。locate コマンドのようにデーターベースファイルは存在せず、コマンド実行時より検索しにいくため、ディスクアクセスが激しくなります。その代わり、locate よりも詳細に目的のものを検索できるという利点があります。

以下例は、/etc ディレクトリ以下の conf というファイル名のファイルを検索しています。locate コマンドと異なる点は、locate では、conf という文字列を含むファイルを全て列挙しましたが、find コマンドの場合は、conf というファイル名をもつ完全一致のファイルが検索されます。もし、locate コマンド風に検索するならば、find /etc -name *conf* となります。

$ find /etc -name conf
/etc/log.d/conf

次に、-atimeオプションをつけて最終アクセス日を基にして検索してみます。以下は、カレントディレクトリ内で最終アクセス日7日以内のファイルを検索します。+7 にすると、7日以上経過したファイルを検索するようになります。

$ find ~ -atime -7

以下の例は、アクセス権が755のファイルのみ検索します。

$ find /home -perm 755

● find コマンド構文
 find [パス・ディレクトリ] [オプション]

● find コマンドオプション
 -name <文字列> 文字列を含むファイルを検索
 -atime <日数> 最終アクセス日で検索
 -mtime <日数> 最終更新日で検索
 -perm <アクセス権> 8進数のアクセス権表記で検索
 -size <サイズ> ブロック単位のファイルサイズで検索
 -type ファイルタイプで検索
 -user <ユーザ名> ファイルの所有者で検索
 -empty <ファイル名> 空の(容量が0バイト)のファイルやディレクトリを検索する

なお、アクションとして、-exec <コマンド> {} \; を指定する事で、検索結果のファイルにコマンドを実行する事ができるようになります。以下例は、容量が0バイトのファイルやディレクトリを検索し、削除するという意味になります。

$ find . -empty -exec rm {} \;


7.ファイルの中身を閲覧する [ cat ] [ more ] [ less ]

ファイルの中身を確認するには、 cat コマンドを使用します。そのファイルの中身が一画面に収まりきれない場合、通常は、パイプ「 | 」を用いて more コマンドを実行します。パイプとは、標準出力を別のコマンドなどの標準入力として渡します。わかりやすく言えば、コマンドとコマンドを繋げるためのもので、ここでは、cat コマンドと more コマンドを繋げています。

$ cat file1 | more

パイプラインで繋げるのが面倒くさい場合は、直接、more コマンドを使用した方が便利です。なお、下にスクロールする際の挙動が異なるだけで、ほぼ同様の less コマンドも使用する事ができます。

$ more file1
$ less file1

-n オプションを付け加えると行番号つきでファイルの中身を表示します。

$ cat -n file1
1 aaa bbb ccc
2 ddd eee fff
3 ggg hhh iii

cat は複数のファイルを指定すると、それらのファイルを結合して出力されます。以下の例では、file1 とfile2 が結合されて出力されます。

$ cat file1 file2

● cat コマンド構文
 cat [オプション] [ファイル名]

● cat コマンドオプション
 -n 行番号つきで表示する
 -b 空行を除いて、行番号つきで表示する


8.ファイルの先頭部分を表示する [ head ]

ファイルの先頭部分を表示するには、 head コマンドを使用します。デフォルトでは、ファイルの先頭行から数えて10行目までが表示されます。

$ head /home/sakura/public_html/index.php
<html>
<head>
<title>ServerArchitecture</title>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<div align="center">
iaaa
</div>

ファイルの先頭行から30行目までを表示したい場合は、-30 のように数値で指定します。また、-n オプションを用いて、-n 30 と指定しても同様の意味になります。

$ head -30 /home/sakura/public_html/index.php

● head コマンド構文
 head [オプション] [ファイル名]

● head コマンドオプション
 -c 指定したバイト数だけファイルの先頭行から表示する
 -n 指定した行数だけファイルの先頭行から表示する


9.ファイルの末尾を表示する [ tail ]

syslog などのログファイルは、先頭から末尾に向かって記述されていくため、上から順に見ていくと下に辿りつくまでに疲れてしまいます。なので、ファイルの末尾から表示させるコマンドである、 tail を活用しましょう。デフォルトでは、末尾の10行が表示されます。ファイルの末尾20行を表示したい場合は、tail -20 file1 のように指定します。なお、tail -n +20 file1 とした場合は、ファイルの20行目から末尾までを表示します。

# tail /var/log/messages

● tail コマンド構文
 tail [オプション] [ファイル名]

● tail コマンドオプション
 -c 指定したバイト数だけファイルの末尾から表示する
 -n 指定した行数だけファイルの末尾から表示する


10.ディレクトリ内のファイル及びディレクトリの情報を表示する [ ls ]

ディレクトリ内にどのようなファイル及びディレクトリが存在するかを確認するには、 ls コマンドを使用します。引数にディレクトリを指定しない場合、カレントディレクトリの情報を表示します。

$ ls
file1 file1 file3

-l オプションを使用すると、ファイルの属性やファイルの所有者/グループなどの情報も得る事ができます。

# ls -l /var/log/messages
-rw------- 1 root root 97443 2月 2 13:29 /var/log/messages

-F オプションを使用すると、実行ファイルに「* 」、ディレクトリに「/」、シンボリックリンクに「@」をつけて一覧表示するため、意外と重宝します。

# ls -F /etc/rc.d/init.d

● ls コマンド構文
 ls [オプション]

● ls コマンドオプション
 -a 全てのファイルとディレクトリを表示する(. と .. を含む)
 -A 全てのファイルとディレクトリを表示する(. と .. を含まない)
 -C ファイルやディレクトリを複数列で一覧表示
 -d ディレクトリの中身ではなく項目自身を表示
 -F 実行ファイルに「* 」、ディレクトリに「/」、シンボリックリンクに「@」をつけて一覧表示する。
 -i ファイルに i-node 番号をつけて表示する
 -l ファイルのアクセス権やサイズを表示する
 -R サブディレクトリの内容も再帰的に一覧表示する


11.カレントディレクトリの位置を確認する [ pwd ]

ディレクトリ内を cd コマンドでいったり来たりしていると、たまに自分がどこにいるのか見失う事があります。そんな時は、 pwd コマンドで自分の現在いる場所を確認する事ができます。

# pwd
/usr/local/src/httpd-2.0.48/support

● pwd コマンド構文
 pwd


12.空のファイルの作成 [ touch ]

touch コマンドは、指定されたファイルが存在しなければ、空のファイルを作成します。
存在すれば指定されたファイルについて、アクセス時刻と更新時刻を現在の時刻に変更します。任意の時間に変更することもできます。

$ touch file1

● touch コマンド構文
 touch [オプション] [ファイル名]

● touch コマンドオプション
 -a 最終アクセス時刻のみ変更する
 -m 最終更新時刻のみ変更する
 -t タイムスタンプを変更する


13.ファイルへの出力 [ tee ] [ > ]

tee コマンドは、標準入力から読み込んだ内容を標準出力及び指定したファイルに出力します。以下の例では、ls -la の実行結果が標準出力され、また、file4 にも出力されます。

$ ls -la | tee file4

今度は、標準出力はせずに、file5 にのみ、ls -la の実行結果を出力します。

$ ls -la > file5

● tee コマンド構文
 tee [オプション] [ファイル名]

● tee コマンドオプション
 -a 指定した出力先のファイルが既に存在する場合に、上書きではなく追記する

>(リダイレクト)を使用して追記する場合には、>> と指定します。

$ ls -la >> file5


b. ファイルの圧縮・解凍コマンド

1. .gz ファイルを圧縮・解凍する[ gzip gunzip ]

gzip コマンドは、Lempel-Ziv(LZ77)アルゴリズムを使用してファイルを圧縮します。通常、compress よりも圧縮率が高いです。gzip で圧縮されたファイルは、拡張子に .gz が付け加えられます。ファイルの末尾が.gz、.Z、.tgz、.taz のファイルを扱えます。展開するには、-d オプションまたは gunzip を使用します。

※ gunzip・gzip・gzcat ともファイルの実体は同じですが (ハードリンクされています)、どの名前で起動されたかによって伸長・圧縮・表示と動作を変えます。どの名前で起動してもオプションを明示的に指定することで、全ての機能を実行できます。

● gzip コマンド構文
 gzip [オプション] [ファイル名]

● gunzip コマンド構文
 gunzip [オプション] [ファイル名]

● gzip gunzip コマンドオプション
 -a ASCIIテキスト・モードを用いる。行末を表すコードを変換する
 -c 圧縮ファイルの内容を標準出力に書き込む。元ファイルには変更を加えない
 -d 圧縮ファイルを展開する
 -f 対応するファイルが既に存在するような場合でも強制的に圧縮、展開する
 -l 圧縮ファイルのリストを表示する
 -n 元のファイル名とタイム・スタンプは保存しない
 -r 再帰的にディレクトリ内を圧縮する
 -t 圧縮ファイルの整合性のみをチェックする
 -v ファイルが圧縮されるたびにメッセージを表示する
 -L gzipのライセンスを表示する
 -N 圧縮時にファイル名とタイム・スタンプを復元する(デフォルト動作)
 -V バージョン番号とコンパイル・オプションを表示する

● .gz の圧縮ファイル作成
$ gzip file1.txt

●.gz ファイルの解凍
$ gzip -d file.gz

●.gz ファイルの解凍
$ gunzip file.gz


2. bzip2 コマンド

bzip2 コマンドは、LZ77/LZ78をベースとしたアルゴリズムを使用してファイルを圧縮します。bzip2方式はgzip方式より高い圧縮率が期待できる圧縮・展開方式です。bzip2 で圧縮されたファイルには拡張子に bz2 が付加されます。オプションを省略した場合は圧縮になります。展開は -d または bunzip2 を使用します。

● bzip2 コマンド構文
 bzip2 [オプション] [ファイル名]

● bunzip2 コマンド構文
 bunzip2 [オプション] [ファイル名]

● bzip2 コマンドオプション
 -c 圧縮ファイルの内容を標準出力に書き込む。元ファイルには変更を加えない
 -d 圧縮ファイルを展開する
 -k 圧縮及び展開する際、元ファイルを削除しない
 -n 元のファイル名とタイム・スタンプは保存しない
 -v ファイルの圧縮状況メッセージを表示する
 -z 圧縮する
 -1-9 圧縮の際のブロック数を100K~900Kバイトにする

● .bz2 の圧縮ファイル作成

bzip2 圧縮前ファイル名

$ bzip2 file1.txt

● .bz2 ファイルの解凍

bzip2 -d 解凍ファイル名

$ bzip2 -d file.gz2


3. lha コマンド

lha コマンドのコマンド・ラインには、aからxまでの「コマンド」と0からzまでの「オプション」を指定できる。lhaで圧縮したファイルには拡張子に、lzh または lha を付けます。


● lha コマンド構文
 lha [オプション] [圧縮後ファイル名] [圧縮前ファイル名]

● lha コマンドオプション
 a 圧縮ファイルに指定したファイルやディレクトリを追加・上書きする。圧縮ファイルが存在しない場合は新規に作成する
 c 圧縮ファイルを新たに作成し、ファイルを追加する
 e 圧縮ファイルを展開する。file の 指定がなければ archive_file 内の全てのファイルを抽出する。抽出すべきファイルがすでに存在している場合には、重ね書きしていいかの問い合わせを行ないます。
 d アーカイブから指定ファイルを削除
 l 圧縮ファイルの内容を表示する
 p 圧縮ファイルの中のファイルの内容を標準出力に出力する
 u 更新ファイルを更新
 v 圧縮ファイルの内容を表示する。lと同じ
 x 圧縮ファイルを展開する。file の 指定がなければ archive_file 内の全てのファイルを抽出する。抽出すべきファイルがすでに存在している場合には、重ね書きしていいかの問い合わせを行ないます。e と同じです。

● .lha の圧縮ファイル作成
$ lha c file2.lha file1.txt

● .lzh の圧縮ファイル作成
$ lha c file2.lzh file1.txt

● .lha ファイルの解凍
$ lha x file.lha

● .lzh ファイルの解凍
$ lha x file.lzh

4. zip unzip コマンド

zip コマンドImploding法を使用してファイルを圧縮します。zipは、米PKWARE社のPKZIPと互換性があります。zipで圧縮したファイルには一般的に拡張子に.zipが付いています。オプションを省略した場合は圧縮処理を行います。

● zip コマンド構文
 zip [オプション] [ファイル名]

● unzip コマンド構文
 unzip [オプション] [ファイル名]

● zip コマンドオプション
 -e パスワードを付けて圧縮
 -r ファイルとディレクトリを再帰的に処理
 -R カレント・ディレクトリにあるファイルとディレクトリを再帰的に処理
 -m 指定したファイルを圧縮ファイルに追加後に削除
 -A 自己解凍形式
 -d 指定ファイルを削除
 -t 指定日付以降のファイルを圧縮
 -u 新規・更新されたファイルのみ圧縮
 -z コメントの追加

● .zip の圧縮ファイル作成
$ zip file2.zip file1.txt

●.zip ファイルの解凍
$ unzip file.zip



c. ファイルアーカイブ操作コマンド

1.tar コマンド

tar コマンドは、複数のファイルを1つのファイルにまとめて管理するための、書庫管理コマンドです。複数のファイルを1つのファイルにまとめる書庫化や、その書庫の展開、既にある書庫へのファイルの追加や削除が行えます。書庫化したファイルには一般に、「.tar」という拡張子を付けます。ただし、tarでは圧縮は行われません。そこで、gzip や bzip2 といった書庫機能を搭載しない圧縮形式と併用することで、書庫化と圧縮を同時に行う場合が多いです。

バックアップ用のファイルを作成することもできます。tar コマンドは本来、磁気テープ装置を制御するコマンドでありましたが、現在では書庫化の機能がよく利用されます。


● tar コマンド構文
 tar [オプション] [ファイル名・・・]

● tar コマンドオプション
 -c, --create 新しいアーカイブの作成
 -f ファイル名 アーカイブファイル名の指定
 -r, --append アーカイブの末尾にファイルを追加
 -t, --list アーカイブ内の内容のリスト
 -v, --verbose 処理したファイルの一覧を詳細に表示する
 -z, --gzip gzip形式の圧縮ファイルを扱う

●ファイルをひとつにまとめる

$ tar -cvf file.tar data1 data2

●tar で固めたファイルの一覧表示

$ tar -tvf file.tar

●既存のtar にファイルを追加

$ tar -tvf file.tar data3

●ファイルを元に復元する[ 展開 ]

$ tar -xvf file.tar

●.tar.gz .tgz ファイルを展開する
$ tar -xzvf file.tar.gz

$ tar -xzvf file.tgz

●.tar.bz2 .tbz ファイルを展開する
$ tar -xjvf file.tar.gz2

$ tar -xjvf file.tbz

●.tar.gz 圧縮ファイルを作成する
$ tar -zcvf file2.tar.gz file1.txt

●.tar.gz2 圧縮ファイルを作成する
$ tar -jcvf file2.tar.gz2 file1.txt


2. cpio コマンド

cpio コマンドは、ファイルのバックアップを作成・展開することができます。 cpio形式でアーカイブ、展開するコマンドです。

cpioには3つのモードがあります。

  • コピーアウトモード(-o)・・・ファイルをアーカイブファイルにコピーする。
  • コピーインモード(-i)・・・ファイルをアーカイブファイルからコピーする。
  • コピーパスモード(-p)・・・ファイルを別ディレクトリにコピーする。

● cpio コマンド構文
 cpio [オプション]

● cpio コマンドオプション
 -o コピーアウトモード
 -i コピーインサートモード
 -d ディレクトリも作成する
 -p コピーパスモード
 -v ファイル名の一覧を出力する

●archive.cpioファイルの内容を出力する。
$ cpio -itv < archive.cpio

●archive.cpioファイルを展開する。
$ cpio -idv < archive.cpio

●現在のディレクトリのファイルをarchive.cpioにバックアップする
$ ls -1 | cpio -o > archive.cpio

●findの出力結果(カレントディレクトリ以下の"*.log")から、cpioファイルを作成する。
$ find . -name "*.log" -follow -cpio test1.cpio


3. dd コマンド

dd コマンドは、ファイルのバックアップを作成・展開することができます。ファイルを指定された入出力ブロックサイズで (デフォルトでは標準入力から標準出力へ) コピーしくす。入出力の間に変換を指定することもできます。

● dd コマンド構文
 dd [if=入力ファイル名] [of=出力ファイル] [オプション]

● dd コマンドオプション
 ibs=バイト数 一度に指定したバイトのブロックを読み出す
 obs=バイト数 一度に指定したバイトのブロックを書き込む
 bs=バイト数 一度に指定したバイトのブロックを読み書きする
 bs=bytes アーカイブ内の内容のリスト
 skip=ブロック数 入力ファイルの先頭から指定したブロックをスキップする
 seek=ブロック数 出力ファイル中の指定したブロックをスキップする
 count=ブロック数 入力ファイルから出力ファイルへ指定したブロックをコピーする
 conv=キーワード キーワードで変換する内容を指定する
noerror : 読み込みエラーが発生しても継続する
sync : isbで指定したブロック数に合わせる。不足分はNULLが使われる
notrunc : 出力ファイルを切り詰めない

●ディスクのコピー
$ dd /dev/hda /dev/hdb



d. ワイルドカード

メタキャラクタ


z. 出題範囲概要

●説明 ファイルおよびディレクトリを管理するための基本的なLinuxコマンドを使用する。
●主要な知識範囲
個々のファイルおよびディレクトリをコピー、移動、削除する
複数のファイルおよびディレクトリを再帰的にコピーする
ファイルおよびディレクトリを再帰的に削除する
基本的なものから高度なものまで、ワイルドカード規則をコマンドで使用する
findを使用して、種類、サイズ、または時刻を基にファイルを見つけて操作する
tar、cpioおよびddの使用方法
●重要なファイル、用語、ユーティリティ
cp, find, mkdir, mv, ls, rm, rmdir, touch, tar, cpio, dd, file, gzip, gunzip, bzip2, ファイルの展開


  [ 例題 ] 
  1. 101:103.3 問01  touchコマンド
  2. 101:103.3 問02  バックアップコマンド
  3. 101:103.3 問03  cpコマンド
  4. 101:103.3 問04  cpioコマンド
  5. 101:103.3 問05  tarコマンド
  6. 101:103.3 問06  解凍コマンド
  7. 101:103.3 問07  ファイルの移動コマンド
  8. 101:103.3 問08  findコマンド
  9. 101:103.3 問09  ファイルに出力


     

www.it-shikaku.jp