ファイルシステム

 コンピュータ上で扱われるデータには様々な種類が有るが、これらのデータをすべて「ファイル」という概念で扱う。通常、これらのファイルは内容や種類に応じて分類・整理し、それぞれの入れ物にまとめておくが、こうしたファイルの入れ物の事をディレクトリ(Windowsではフォルダ)と呼びます。
 ディレクトリの中にはファイルだけではなく、さらにディレクトリを入れることもでき、ツリー状に階層化されて管理している。この階層のトップ、つまり一番元になる位置を「/」(ルートディレクトリ)と呼ぶ。
 「/」にある「etc」ディレクトリ内の「inittab」ファイルを示すときは「/etc/inittab」と表され、ある場所からある場所への経路を「パス」(path)という。
 「/etc/inittab」のように「/」を基点として表すパスを「絶対パス」または「フルパス」、現在の自分の位置(カレントディレクトリ)から目的のディレクトリへの経路を「相対パス」という。カレントディレクトリが「/etc」であった場合の相対パス表記は「./inittab」となる。
 また、「/」の様に基点と考えるディレクトリとして、「ホームディレクトリ」(「~/」と表す)がある。コレは、ユーザがログインしたときにいるカレントディレクトリで、ユーザ毎に場所が確保されている。しかし、ホームディレクトリからの経路は絶対パスとは呼ばない。


基本的なファイル管理コマンド

ls 「オプション」 「ファイル名・ディレクトリ名」 エルエス
ファイルやディレクトリの一覧表示
 -l:詳細な情報の表示
 -i:iノード番号の表示
 -a:「.」で始まるファイルも表示
 -A:-aと同じだが「.」(カレントディレクトリ)や「..」(親ディレクト)は表示しない
 -d:指定したディレクトリ自身の情報を表示する
 -F:種類を表示。ディレクトリは「/」、実行ファイルは「*」、シンボリックリンクは「@」
 -C:複数の列で表示
touch 「オプション」 ファイル名 タッチ
ファイルの更新時刻などを変更する(空のファイルの作成も可能)
 -a:最終アクセス時刻を変更
 -m:最終更新時刻を変更
mkdir 「オプション」 ディレクトリ名 メイクディレクトリ
ディレクトリの作成
 -p:親ディレクトリも同時に作成
 -m:アクセス権を指定してディレクトリを作成
rm 「オプション」 ファイル名 リムーブ
ファイルの削除
 -f:確認せず、強制的に削除
 -i:削除するときに確認
 -r もしくは -R:ディレクトリを丸ごと削除
cp 「オプション」 複写元 複写先 コピー
ファイルの複写
 -f:複写先に同名ファイルがあれば上書き
 -i:複写先に同名ファイルがあれば確認
 -p:複写元のファイル属性(アクセス権や所有者など)を保持したままコピー
 -r もしくは -R:ディレクトリをコピー
mv 「オプション」 移動元 移動先 ムーブ
ファイルの移動
 -f:移動先に同名ファイルがあれば上書き
 -i:移動先に同名ファイルがあれば確認
ワイルドカード  
ある条件にマッチする複数の文字列を表すもの
 *:0文字以上の任意の文字または文字列
 ?:任意の1文字
 []:[]内の任意の1文字
 \:直後の文字をワイルドカードとして扱わない

$ ls ←全て省略するとカレントディレクトリの一覧を表示
 defconf hpbackup.sh lpic.txt

$ ls -l
 合計 12
 drwxr-xr-x 2 root root 4096 1月 23 21:02 defconf
 -rw-r--r-- 1 root root 144 4月 15 15:04 hpbackup.sh
 -rw-rw-r-- 1 user user 119 6月 27 20:37 lpic.txt ←1行に1つづつ詳細が表示

$ ls -i
 4718609 defconf 4718662 hpbackup.sh 4718670 lpic.txt
  ↑それぞれのファイル(ディレクトリ)の前にiノード番号が表示

$ ls -a
 . .bash_history .bash_profile .canna defconf lpic.txt
 .. .bash_logout .bashrc .ssh hpbackup.sh
 ↑「.」から始まるファイル(ディレクトリ)も全て表示

$ ls -A
 .bash_history .bash_profile .canna defconf lpic.txt
 .bash_logout .bashrc .ssh hpbackup.sh
 ↑-aと違い「.」「..」は表示されない

$ ls -F
 defconf/ hpbackup.sh lpic.txt
     ↑ファイル(ディレクトリ)の後ろに表示

$ ls -lC
 defconf hpbackup.sh lpic.txt ←本来1行1ファイルで詳細が表示されるが「C」オプションで元に戻っている

$ ls -liad ←オプションは複数指定可能
 4718594 drwx------ 4 user user 4096 6月 27 20:37 .


$ ls
 hpbackup.sh defconf lpic.txt
$ touch kara.txt ←0バイト(空)のファイル作成
$ ls -l kara.txt
 -rw-rw-r-- 1 user user 0 6月 30 14:30 kara.txt
               ↑サイズは0バイト
$ touch -a kara.txt ←アクセス時刻の変更(14:35に実行
$ ls -l kara.txt
 -rw-rw-r-- 1 user user 0 6月 30 14:30 kara.txt
                     ↑変わらない
$ touch -m kara.txt ←更新時刻の変更(14:40に実行
$ ls -l kara.txt
 -rw-rw-r-- 1 user user 0 6月 30 14:40 kara.txt
                     ↑変更された


$ mkdir lpic ←サブディレクトリ作成
$ ls
 defconf hpbackup.sh kara.txt lpic lpic.txt
                ↑作成された
$ mkdir -p ~/lpic/lpic1/101
   ↑サブディレクトリ内に「101」ディレクトリと、その親ディレクトリの作成
$ ls lpic ←サブディレクトリ内の表示
 lpic1 ←親ディレクトリが作成されている
$ ls lpic/lpic1 ←さらにその中の表示
 101 ←目的の「101」ディレクトリが作成されている


$ rm kara.txt
$ rm -i lpic.txt
 rm: remove 通常ファイル `lpic.txt'? y ←確認される(「y」es/「n」oを答える
$ ls
 defconf hpbackup.sh lpic ←どちらも削除されている
$ rm -r ~/lpic/lpic1/101 ←2階層下の「101」ディレクトリの削除
$ ls ~/lpic/lpic1
←削除されている
$ rm -R lpic ←中身(子ディレクトリ「lpic1」)も含めてディレクトリ削除
$ ls
 defconf hpbackup.sh ←削除されている為、表示されない

$ ls
 defconf hpbackup.sh lpic
$ ls ~/lpic
 lpic1.txt
$ rm -ri lpic ←ディレクトリごと、確認しながら削除
 rm: descend into directory `lpic'? y ←削除作業を行うかの確認
 rm: remove 通常の空ファイル `lpic/lpic1.txt'? y
   ↑ディレクトリ内のファイルを削除するか確認
 rm: remove ディレクトリ `lpic'? y ←ディレクトリを削除するか確認


$ ls -l
 合計 12
 -rw-rw-r-- 1 user user 0 6月 30 15:26 201.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:26 202.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:27 321.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:27 322.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:27 323.txt
 drwxr-xr-x 2 root root 4096 1月 23 21:02 defconf
 -rw-r--r-- 1 root root 144 4月 15 15:04 hpbackup.sh
 drwxrwxr-x 2 user user 4096 6月 30 15:25 lpic
$ ls -l lpic
 合計 0
 -rw-rw-r-- 1 user user 15 6月 30 15:29 101.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:22 102.txt

$ cp 201.txt ~/lpic ←「201.txt」を「lpic」内にコピー
$ ls -l lpic
 合計 4
 -rw-rw-r-- 1 user user 15 6月 30 15:29 101.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:22 102.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:28 201.txt ←コピーされている
$ cp lpic/101.txt lpic/201.txt ←名前を変えてコピー
$ ls -l lpic
 合計 8
 -rw-rw-r-- 1 user user 15 6月 30 15:29 101.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:22 102.txt
 -rw-rw-r-- 1 user user 15 6月 30 15:30 201.txt ←上書きでコピーされる
$ cp -i lpic/101.txt lpic/102.txt ←上書き時に確認をする
 cp: `lpic/102.txt' を上書きしてもよろしいですか(yes/no)? y
   ↑「yes」もしくは「y」で上書き
$ ls -l lpic
合計 12
 -rw-rw-r-- 1 user user 15 6月 30 15:29 101.txt
 -rw-rw-r-- 1 user user 15 6月 30 15:30 102.txt ←上書きされている
 -rw-rw-r-- 1 user user 15 6月 30 15:30 201.txt
$ cp 20?.txt lpic ←ワイルドカードを使用して「20」+1文字のテキストファイルをコピー
$ ls -l lpic
合計 8
 -rw-rw-r-- 1 user user 15 6月 30 15:29 101.txt
 -rw-rw-r-- 1 user user 15 6月 30 15:30 102.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:31 201.txt ←コピーされている
 -rw-rw-r-- 1 user user 0 6月 30 15:31 202.txt ←コピーされている
$ cp -r lpic lpic1 ←ディレクトリの中身を含め、コピー
$ ls
 201.txt 321.txt 323.txt hpbackup.sh
 202.txt 322.txt defconf lpic lpic1
                 ↑コピーされている
$ ls lpic1
 101.txt 102.txt 201.txt 202.txt ←中身もコピーされている


$ mv *.txt lpic ←ワイルドカードを使用してテキストファイルを全て移動
$ ls
 defconf hpbackup.sh lpic lpic1 ←元ファイルは無くなる
$ ls lpic
 101.txt 102.txt 201.txt 202.txt 321.txt 322.txt 323.txt ←移動されている



ファイルの検索

which 「オプション」 コマンド名 ウィッチ
コマンドの実行ファイルのフルパスを表示
※コマンドサーチパス(環境変数「PATH」)にないコマンドは検索できない
whereis 「オプション」 コマンド名 ウェアイズ
特定のコマンドの実行ファイル、ソースファイル、マニュアルファイルのフルパスを表示
-b:バイナリファイル(実行ファイル)を表示
-m:マニュアルファイルを表示
-s:ソースファイルを表示
find 「検索対象ディレクトリ」 「検索式」 ファインド
条件を指定して検索
※「検索対象ディレクトリ」を省略すると、カレントディレクトリを対象とする

-name 文字列:名前で検索
-mtime 日時:最終更新日時で検索
-perm アクセス権:アクセス権で検索
-user ユーザ名:ファイルの所有者で検索
locate 「検索文字列」 ロケート
あらかじめ作成されたファイル名データベースを使って高速に検索
※ファイル名データベースは定期的にアップデートされているが、「updatedb」コマンドでもアップデートできる


$ which mkdir
 /bin/mkdir ←コマンドのフルパスが表示

$ whereis cp
 cp: /bin/cp /usr/share/man/man1/cp.1.gz /usr/share/man/man1p/cp.1p.gz
   ↑バイナリ、マニュアル、ソースの内あるもの全てが表示
$ whereis -b cp
 cp: /bin/cp ←バイナリファイルのみ表示
$ whereis -m cp
 cp: /usr/share/man/man1/cp.1.gz /usr/share/man/man1p/cp.1p.gz
   ↑マニュアルファイルのみ表示
$ whereis -s cp
 cp: ←ソースファイルのみ表示
   ↑ファイルが無いので表示されない


$ find lpic -name 101.txt
 lpic/101.txt ←指定ディレクトリ以下に指定ファイルがあれば表示
$ find -perm 775 ←カレントディレクトリ以下の検索
 ./lpic1 ←指定されたアクセス権を持つファイルやディレクトリが表示
 ./lpic
$ find -user user ←カレントディレクトリ以下の所有権ユーザ名「user」を表示
 .
 ./lpic1
 ./lpic1/102.txt
 ./lpic1/101.txt
 ./lpic1/201.txt
 ./lpic1/202.txt
  . ←全て表示される
  .(省略)
  .

$ locate 'lpic' ←ファイル名データベースより、「lpic」をパス名に含むものを検索
 /home/user/lpic1
 /home/user/lpic1/102.txt
 /home/user/lpic1/101.txt
 /home/user/lpic1/201.txt
 /home/user/lpic1/202.txt
 /home/user/lpic1
 /home/user/lpic
  . ←全て表示される
  .(省略)
  .