ファイル・ディレクトリの操作と管理

目次

ファイルの所有者とパーミッション

アクセス権

読み取りr
書き込みw
実行権x
権限ファイルの適用ディレクトリに適用
読み内容を参照内容を参照
書き書き込みファイルの新規作成、削除、名前変更
実行ファイルを実行ディレクトリのファイルにアクセス、ディレクトリへの移動

アクセス権の表記法

所有者グループその他ユーザ
記号表記:r w xr – xr – –
4 2 14 – 14 – –
数値表記:754

chmod

「change mode」

chmod [ オプション ] アクセス権 ファイル名
オプション … -R --recursive 指定した以下にある全ファイルのアクセス権を変更
オプション内容
-R –r指定したディレクトリのファイル全てのアクセス権を変更する
対象内容
u所有者
gグループ
oその他
a全ユーザ
種別内容
r読み取り
w書込み
x実行
sSUID、SGID
tスティッキービット

SUID、SGID

「Set User ID」、「Set Group ID」

SUID、SGIDは特殊なアクセス権です。

そのファイルを誰が実行しても所有者の権限・グループの権限で実行されることを意味します

SUIDを設定するには、

  • chmod 4755 file(3桁のアクセス権に4000を加える)
  • chmod u+s file(所有者に「s」という権限を追加します)

SGIDを設定するには、

  • chmod 2755 file(3桁のアクセス権に2000を加える)
  • chmod g+s file(グループに「s」という権限を追加します)

スティッキービット

自分以外の他のユーザが所有しているファイルを削除出来ないようにするには、スティッキービットをディレクトリに設定します。

  • 通常のパーミッションの値に1000を加えた値を設定する
  • その他ユーザに「t」という権限を追加する

umask

ファイルやディレクトリ作成時のデフォルトのアクセス権は、umask値で決まります。

  • ファイル … 666 – umask値
  • ディレクトリ … 777 – umask値

http://www.rivhiro-weather.com/knowledge/?p=168

chown

chown [ オプション ] ユーザ ファイル名/ディレクトリ名
chown [ オプション ] :グループ名 ファイル名/ディレクトリ名
オプション … -R --recursive 指定した以下にある全ファイルの所有者を変更

chgrp

chgrp [ オプション ] グループ ファイル名/ディレクトリ名
オプション … -R --recursive 指定した以下にある全ファイルの所有者を変更

ハードリンクとシンボリックリンク

ファイルの実体に名前を結びつける「ハードリンク」と、 名前に名前を結びつける「シンボリックリンク」の2つがあります。

iノード番号

Linuxではファイルを保存するとユニークな値でiノード番号が割り当てられます。

iノードにはファイルに関する属性情報が格納されています。

ハードリンク

  • iノード番号が同じ
  • ハードリンクが0になると、実体がはじめて削除されます
  • ファイルシステムが異なると作成できない
    です
  • ディレクトリのハードリンクは作成できません

シンボリックリンク

  • 別ファイルシステムへのリンク作成が可能
  • lsコマンドで確認するとパーミッションの先頭に「l」が表示される

ln

リンクの作成にはlnコマンドを利用します。

ln [-s‥シンボリックリンク] リンク元 リンク先

  • ハードリンクは異なるファイルシステムに作成できません。
  • ディレクトリのハードリンクは作成できません。

基本的なファイル管理の実行

pwd

カレントディレクトリを表示する

「print working directory(作業ディレクトリを表示する)」

ls コマンド

「list」の略

カレントディレクトリのファイル一覧を表示します。

ls [オプション] [ファイル名、ディレクトリ名]

-a(all)all、ドット(隠し)ファイルも表示
-d(dir)ディレクトリの情報を表示
-Rサブディレクトリの内容も表示
-l(long)詳細情報を表示
-h(MB、KB)メガバイト、キロバイトの単位で情報を表示
-i(i-node)i-nodeの情報を表示

cd

カレントディレクトリをホームディレクトリに変更する

change directory

ホームディレクトリへのパス
cd
cd ~(チルダ展開)
ひとつ前に戻る
cd -

cp コマンド

fコピー先の既存のファイルやディレクトリが上書き出ない場合、削除してからコピーする
r、Rディレクトリを再起的にコピー
i同名のものがある場合、上書きするか問い合わせる
pファイルの属性を保持したままコピー

mv コマンド

ファイルやディレクトリを移動するときや名前を変えるときに使うコマンド

-f –force移動先に同名のファイルやディレクトリがある場合、上書きする
-i –interactive移動先に同名のファイルやディレクトリがある場合、上書きするか問い合わせる

mkdir コマンド

ディレクトリを作成するにはmkdirコマンドを利用します

-m –mode 指定したアクセス権でディレクトリを作成
-p –parents必要な場合親ディレクトリを作成する

rm コマンド

ファイルやディレクトリを削除できるコマンド。

-f –forceユーザへの確認なしで削除する
-i削除前にユーザに確認する
-r、-R –recursiveサブディレクトリを含めディレクトリ全体を再帰的に削除する

rmdir コマンド

空のディレクトリのみ削除できる

d ディレクトリ名に階層を指定した場合、削除するディレクトリの親ディレクトリを同時に削除するオプションです。

p 複数階層の空ディレクトリを削除する

※(区別)rm -r空ではないディレクトリも削除することができる

touch コマンド

  • ファイルのタイムスタンプを更新します
    • すでにあるファイルのタイムスタンプだけ更新する
    • touch -t MMDDHH mm filename
  • 空のファイルを生成します(本来はタイムスタンプを変更するコマンドでしたが、指定したファイルがない場合は新規作成する)
tアクセス時刻と修正時刻を指定した時刻に変更
aアクセス時刻を変更
m修正時刻を変更

gzip

gzip形式でファイルを圧縮するにはgzipコマンドを利用します。

元ファイルを残して標準出力に出力

-d –decompress圧縮ファイルを展開
-c –stdout標準出力へ出力
-k –keep圧縮、解凍後に元ファイルを削除しない
-r –recutsiveディレクトリ内の全ファイルを圧縮

gunzip

gunzipコマンドで展開できます。

bzip2

-d –decompress圧縮ファイルを展開
-c –stdout元ファイルを残して標準出力
-k –keep圧縮、解凍後に元ファイルを削除しない

bzip2 [オプション] [ファイル名]

xz

xz [オプション] [ファイル名]

-d –decompress圧縮ファイルの展開
-k –keep圧縮、展開後ファイルを削除しない
-l –list圧縮ファイルの情報を表示する

xz -dコマンドの代わりにunxzコマンドを使ってもかまいません。

tar

tape archive

複数のファイルをまとめて一つのアーカイブにしたり、アーカイブを展開するときに使うコマンド。

[作成するファイル名][圧縮するディレクトリ名]

c createアーカイブを作成
x extractアーカイブからファイルを展開
t listアーカイブの内容一覧を表示
f filenameアーカイブファイル名を指定
z gzipgzipを通して、圧縮/展開
j bzip2bzip2を通して、圧縮/展開
J xzxzを通して、圧縮/展開
v verbose処理の詳細を表示

dd

ブロックサイズとコピー回数を指定してファイルを作成できるコマンド。

if=入力ファイル入力ファイルを指定
of=出力ファイル出力ファイルを指定
bs= バイト数作成するファイルのブロックサイズを指定
count=回数回数分の入力ブロックをコピー

ファイルの配置と検索

FHS

Filesystem Hierarchy Standard

Linuxの標準的なディレクトリレイアウトを定めた標準かされている仕様

FHSさえ知っていればソフトウェア固有の知識のインプットをを最小限にすることができます。

/dev

デバイスファイルを入れるディレクトリ

/usr/bin

ユーザが一般的に使うコマンドがあります。システムの起動や、緊急時の保守には必須でないものです。

/etc

設定ファイルを入れるディレクトリ

/home

ホームディレクトリを入れるディレクトリ

ユーザが自由に操作できるユーザー名のディレクトリがあります。

man hier

HIER(7)			   Linux Programmer’s Manual		       HIER(7)
名前
       hier - ファイルシステム階層の説明
説明
       典 型的な Linux system には以下のようなディレクトリがある (他にもたくさ
       んのディレクトリがあるが):
       /      ルートディレクトリ。ここが階層の起点となる。
       /bin   このディレクトリには、シングルユーザーモードでシステムの起動や修
	      理を行う際に必要な実行形式ファイルが含まれる。
       /boot  ブートローダが用いる静的なファイルが含まれている。このディレクト
	      リにはブートプロセスの間に必要なファイルだけが置かれる。マップイ
	      ンストーラや設定ファイルは /sbin や /etc に置くべきである。
       /dev   物理デバイスを参照しているスペシャルファイルやデバイスファイルの
	      置き場所。 mknod(1) を参照のこと。
       /etc   マシン固有の設定ファイルが置かれる場所。X11 のような大規模なソフ
	      トウェアパッケージでは、 /etc 以下に更にパッケージ単位でサブディ
	      レクトリが作られることもある。サイト全体に有効な設定ファイルは、
	      ここではなく /usr/etc に置かれることもある。しかし、プログラムか
	      らのこれらのファイルの参照先は、常に /etc にす べ き で あ る 。
	      /usr/etc	以下のファイルに対しては、それらへのリンクを /etc に置
	      けばよい。
       /etc/opt
	      /opt にインストールされたアドオンアプリケーションが使う、ホス ト
	      固有の設定ファイルの置き場所。
       /etc/sgml
	      SGML や XML の設定ファイルの置き場所 (なくてもよい)。
       /etc/skel
	      新たにユーザーアカウントを作る際、通常このディレクトリにあるファ
	      イルがユーザーのホームディレクトリにコピーされる。
       /etc/X11
	      X11 window system の設定ファイルの置き場所 (なくてもよい)。
       /home  通常、ユーザーのホームディレクトリが、このディレクトリ直下ないし
	      サブディレクトリの下に作成される。このディレクトリの構成をどうす
	      るかは、ローカルマシンの管理者が決めることである。
       /lib   このディレクトリには、システムの起動時に必要な共有ライブラリや、
	      ルートファイルシステムでコマンドを実行するのに必要な共有ライブラ
	      リを置く。
       /media このディレクトリには、 CD/DVD ディスクや USB スティックなどの 取
	      り 外し可能メディア (removable media) 用のマウントポイントが置か
	      れる。
       /mnt   このディレクトリは、一時的にマウントするファイルシステム用のマウ
	      ントポイントである。ディストリビューションによっては、一時的にマ
	      ウントするファイルシステム用のマウントポイントとして、 /mnt 内に
	      サブディレクトリが用意されている場合がある。
       /opt   このディレクトリにはアドオンパッケージの静的なファイルが置かれる
	      。
       /proc  このディレクトリは proc ファイルシステムのマウントポイントである
	      。 proc ファイルシステムは、実行中プロセスやカーネルの情報を提供
	      する。この疑似ファイルシステムの詳細は、 proc(5) で説明されて い
	      る。
       /root   通常ここが root ユーザのホームディレクトリになる (なくてもよい)
	      。
       /sbin  /bin と同様に、このディレクトリにはシステムの起動に必要なコマ ン
	      ドが含まれる。ただしここには、一般ユーザーは通常実行しないコマン
	      ドが置かれる。
       /tmp   このディレクトリには、定期的なジョブによって、またはシステム起動
	      時に、無条件に削除して構わない一時的なファイルが置かれる。
       /usr   通常このディレクトリは、独立したパーティションがマウントされる。
	      ここには、共有可能で読み込み専用のものだけが含まれ、よっていろい
	      ろな Linux マシンからマウントできる。
       /usr/X11R6
	      X Window System, Version 11 release 6 (なくてもよい)。
       /usr/X11R6/bin
	      X	 Window	 System	  のバイナリの置き場所。古いディレクトリである
	      /usr/bin/X11 からここにシンボリックリンクが張られていることが 多
	      い。
       /usr/X11R6/lib
	      X Window System に関連するデータファイルの置き場所。
       /usr/X11R6/lib/X11
	      こ こ に は  X   の 動 作 に必要な種々のファイルが含まれている。
	      /usr/lib/X11 からここにシンボリックリンクが張られていることが 多
	      い。
       /usr/X11R6/include/X11
	      こ こには X11 Window System を使ったプログラムをコンパイルするた
	      めに必要なインクルードファイルが含まれている。  /usr/include/X11
	      からここにシンボリックリンクが張られていることが多い。
       /usr/bin
	      このディレクトリは、実行形式ファイルの主な置き場所である。システ
	      ムのブートやシステム復旧には必要とされない、一般ユーザーが利用す
	      るコマンドの多くは、ローカルにインストールされるのでない限り、こ
	      のディレクトリに置くべきである。
       /usr/bin/X11
	      X11 コマンドの伝統的な置き場所。Linux では、通常	/usr/X11R6/bin
	      にシンボリックリンクが張られている。
       /usr/dict
	      /usr/share/dict に置き換えられた。
       /usr/doc
	      /usr/share/doc に置き換えられた。
       /usr/etc
	      サイト内部の複数のマシンが共有するような設定ファイルが置かれる。
	      しかしながら、コマンドはそれらのファイルの参照先を、常に /etc に
	      すべきだろう。 /etc のファイルからリンクを張って、 /usr/etc の適
	      切なファイルを指すようにすべきである。
       /usr/games
	      ゲームプログラムや教育用プログラムのバイナリが含まれている (なく
	      てもよい)。
       /usr/include
	      C コンパイラ用のインクルードファイルが含まれている。
       /usr/include/X11
	      C	 コンパイラと X Window System 用のインクルードファイルが含まれ
	      ている。通常これは /usr/inlcude/X11 へのシンボリックリンクになっ
	      ている。
       /usr/include/asm
	      アセンブラ関数の宣言を行うインクルードファイルが含まれている。こ
	      のディレクトリは、以前は /usr/src/linux/include/asm へのシンボリ
	      ックリンクだった。
       /usr/include/linux
	      ここには、システムのリリースのたびごとに変更されうる情報が含まれ
	      る。ここは以前は /usr/src/linux/include/linux にシンボリックリン
	      クされており、オペレーティングシステム固有の情報が得られるように
	      なっていた。
	      (ここに置くインクルードファイルは、現在の libc およびユーザ空 間
	      で 正しく動作するものでなければならない。しかし Linux のカーネル
	      ソースはユーザプログラムといっしょに使うようには設計されていない
	      し 、 あなたが使っている libc も関知しない。 /usr/include/asm と
	      /usr/include/linux を適当なカーネルツリーへのリンクにしたりす る
	      と 、 破 綻 す る の は 目 に 見えている。 Debian ではこうせずに
	      、libc*-dev package が提供する、安定したカーネルバージョンのヘッ
	      ダファイルを置いている。)
       /usr/include/g++
	      GNU C++ コンパイラ用のインクルードファイルが含まれている。
       /usr/lib
	      オブジェクトライブラリ (ダイナミックライブラリも含む) と、直接に
	      は起動されないような実行形式ファイル少々とが置かれる。複雑なプロ
	      グラムでは、更にサブディレクトリがあるかもしれない。
       /usr/lib/X11
	      X	 のプログラムに関連するデータファイルと、 X Window System の設
	      定ファイルの置き場所。 Linux では通常 /usr/X11R6/lib/X11 にシ ン
	      ボリックリンクが張られている。
       /usr/lib/gcc-lib
	      GNU C コンパイラ gcc(1) 用の実行形式ファイルとインクルードファイ
	      ルが含まれている。
       /usr/lib/groff
	      GNU groff 文書整形システムのためのファイルが含まれている。
       /usr/lib/uucp
	      uucp(1) のためのファイルが含まれている。
       /usr/local
	      このディレクトリは、サイトローカルなプログラムがインストールされ
	      る典型的な場所である。
       /usr/local/bin
	      サイトローカルなプログラムが含まれている。
       /usr/local/doc
	      サイトローカルなドキュメントが含まれている。
       /usr/local/etc
	      サイトローカルにインストールされたプログラムの設定ファイルの置き
	      場所。
       /usr/local/games
	      サイトローカルにインストールされたゲームのバイナリの置き場所。
       /usr/local/lib
	      サイトローカルにインストールされたプログラムの関連ファイルの置き
	      場所。
       /usr/local/include
	      ローカルな C コンパイラのヘッダファイルの置き場所。
       /usr/local/info
	      サイトローカルにインストールされたプログラムの info ページの置き
	      場所。
       /usr/local/man
	      サイトローカルにインストールされたプログラムのマニュアルページの
	      置き場所。
       /usr/local/sbin
	      サイトローカルにインストールされたシステム管理コマンドの置き場所
	      。
       /usr/local/share
	      同じ OS ならアーキテクチャが異なっても共有できる、ローカルなアプ
	      リケーションデータの置き場所。
       /usr/local/src
	      サイトローカルにインストールされたソフトウェアのソースコードの置
	      き場所。
       /usr/man
	      /usr/share/man に置き換えられた。
       /usr/sbin
	      このディレクトリには、システム管理コマンドが含まれる。ここに置か
	      れるコマンドは、ブートプロセスや /usr のマウント、システムの修理
	      などに必要なものであってはならない。
       /usr/share
	      このディレクトリには、アプリケーションごとに固有なデータ ( 同 じ
	      OS  ならアーキテクチャが違っていても共有できるもの) がサブディレ
	      クトリ単位で置かれる。以前には /usr/doc, /usr/lib, /usr/man など
	      にあった内容が、多くここに置かれている。
       /usr/share/dict
	      スペルチェッカ用の単語リストが含まれる。
       /usr/share/doc
	      インストールされたプログラムのドキュメントの置き場所。
       /usr/share/games
	      /usr/games に置かれたゲーム用の静的なデータファイルの置き場所。
       /usr/share/info
	      info ページが置かれる。
       /usr/share/locale
	      ロケール (locale) 情報が置かれる。
       /usr/share/man
	      マニュアルページ。各ページはセクションに応じたサブディレクトリに
	      置かれる。
       /usr/share/man//man[1-9]
	      これらのディレクトリには、各ロケールのマニュアルページのソースが
	      置かれている。すべてのマニュアルページで同じ言語とコードセットを
	      使用するシステムでは、  は省略されることがある。
       /usr/share/misc
	      同じ OS ならアーキテクチャが違っていても共有できる、雑多なデータ
	      の置き場所。
       /usr/share/nls
	      母 国語サポート (native language support) 用のメッセージカタログ
	      の置き場所。
       /usr/share/sgml
	      SGML や XML のファイルの置き場所。
       /usr/share/terminfo
	      terminfo のデータベースが置かれる。
       /usr/share/tmac
	      groff と一緒には配布されていない troff マクロの置き場所。
       /usr/share/zoneinfo
	      タイムゾーン情報のファイルが置かれる。
       /usr/src
	      システム上の色々なコンポーネントのソースファイル (参照用のパッケ
	      ージも含む) の置き場所。この場所で自分のプロジェクトの作業をして
	      はいけない。 /usr 以下のファイルはソフトウェアのインストールの時
	      以外は読み込み専用になっているべきだからである。
       /usr/src/linux
	      かつてはカーネルソースの伝統的な置き場所だった。ディストリビュー
	      ションによっては、出荷時のデフォルトのカーネルのソースをここに置
	      いている。自分でカーネルをビルドするときは別の場所を使うほうがい
	      いだろう。
       /usr/tmp
	      今では用いられなくなった。このディレクトリは /var/tmp へのリンク
	      にすべきである。このリンクは互換性のためだけにあり、もはや使うべ
	      きでない。
       /var   このディレクトリには、スプールファイルやログファイルのような、サ
	      イズが変化するファイルが置かれる。
       /var/adm
	      このディレクトリは /var/log に置き換えられた。ここは /var/log へ
	      のシンボリックリンクにすべきである。
       /var/backups
	      歴史的な理由からまだ残っている。
       /var/cache
	      プログラムのためにキャッシュされたデータの置き場所。
       /var/catman/cat[1-9] or /var/cache/man/cat[1-9]
	      これらのディレクトリには、整形済みのマニュアルページが、ページの
	      セクションに従って置かれている。 (整形済みマニュアルページの利用
	      は推奨されていない。)
       /var/cron
	      歴史的な理由からまだ残っている。
       /var/lib
	      プログラムの状態に関する情報のうち、可変なものの置き場所。
       /var/local
	      /usr/local 用の可変データの置き場所。
       /var/lock
	      ロックファイルの置き場所。デバイスのロックファイルの命名は、慣習
	      と して LCK.. とされている。ここで  はファイルシ
	      ステム上でのデバイス名である。利用されているフォーマット は  HDU
	      UUCP  のロックファイルのものである。すなわち各ロックファイルには
	      アスキー 10 進数値文字で表記した PID 10 バイトと、それに続いて改
	      行文字とが含まれている。
       /var/log
	      種々のログファイルの置き場所。
       /var/opt
	      /opt 用の可変データの置き場所。
       /var/mail
	      ユ ーザのメールボックスの置き場所。 /var/spool/mail を置き換えた
	      。
       /var/msgs
	      歴史的な理由からまだ残っている。
       /var/preserve
	      歴史的な理由からまだ残っている。
       /var/run
	      実行時の可変ファイルが置かれる。例えばプロセス識別子 (PID) を 保
	      持するファイルや、ユーザのログイン情報ファイル (utmp) などである
	      。ここのファイルは、通常システム起動時に削除される。
       /var/spool
	      色々なプログラムのスプールファイル (あるいはキューファイル) の置
	      き場所。
       /var/spool/at
	      at(1) のジョブスプール。
       /var/spool/cron
	      cron(8) のジョブスプール。
       /var/spool/lpd
	      印刷用のスプールファイルが置かれる。
       /var/spool/mail
	      /var/mail に置き換えられた。
       /var/spool/mqueue
	      キューイングされた送信メールの置き場所。
       /var/spool/news
	      ニュースのスプールディレクトリ。
       /var/spool/rwho
	      rwhod(8) のスプールファイルの置き場所。
       /var/spool/smail
	      メール配送プログラム smail(1) のスプールファイルの置き場所。
       /var/spool/uucp
	      uucp(1) のスプールファイルの置き場所。
       /var/tmp
	      /tmp  と似ているが、このディレクトリに置かれる一時的なファイルは
	      保存期間の制限がない。
       /var/yp
	      NIS のデータベースファイルの置き場所。
準拠
       The  Filesystem	Hierarchy  Standard,  Version  2.2   .
バグ
       こ のリストは網羅的なものではない。個々のシステムでは異なる部分があるか
       もしれない。
関連項目
       find(1), ln(1), proc(5), mount(8)
       The Filesystem Hierarchy Standard
Linux				  2001-09-07			       HIER(7)

locateコマンド

検索用データベースで高速にファイル名ディレクトリ名の検索を行います。

updatedbコマンド

locateコマンドが利用する検索用のデータベースを更新します。

findコマンドし

指定ディレクトリからファイル、ディレクトリを検索します。

find [検索起点ディレクトリ] [検索式] [アクション]

whichコマンド

環境変数PATHに基づき検索します。

whereisコマンド

指定コマンドのバイナリーファイル、ソースコード、マニュアルファイルの場所を検索します。

typeコマンド

目次