気の向くままに辿るIT/ICT/IoT
UNIX/Linux

UNIX/Linux ディレクトリとディレクトリの操作

ホーム前へ次へ
UNIX/Linux ディレクトリの操作方法は?

UNIX/Linux ディレクトリの操作

UNIX/Linux ディレクトリとディレクトリの操作

 UNIX/Linux及びシェルでは、作業中のディレクトリの確認にはpwdコマンド、ディレクトリを移動して他のディレクトリをカレントディレクトリにするにはcdコマンド、新規作成にはmkdirコマンド、削除にはrmdirコマンドまたはファイルでも使うrmコマンド、コピーと転記はファイル同様cpコマンド、mvコマンドを使います。

ルートディレクトリ

 ファイルシステムの最上位、または、chrootコマンドによるルート変更後の最上位含め、ファイルシステム内で利用可能な領域における最上位にあるディレクトリがルートディレクトリで、[/](スラッシュ)で表し、以後、/binのようにサブディレクトリが続き、この場合、ルートのすぐ下にbinというディレクトリ(またはファイル)があるという意味です。

ホームディレクトリ

 ホームディレクトリとは、[/home/ユーザー名]となっているユーザーごとのディレクトリのことであり、UNIX/Linuxでは、ログイン後のカレントディレクトリとして各ユーザーごとに割り当てられているのが一般的です。

カレントディレクトリ・作業ディレクトリの確認

$ pwd 

print working directoryの略

 カレントディレクトリ(現在のディレクトリ)がどこであるかを調べる為にはpwdというコマンドを利用します。

ディレクトリ移動

$ cd 

※change directoryの略

ディレクトリを移動するにはcdというコマンドを利用し、絶対パスまたは相対パスをコマンドライン引数として指定します(指定しない場合、多くはホームディレクトリに移動)。

 前述の通り、ルートディレクトリは[ / ](スラッシュ1つ)で表されるわけですが、例えば、/usr/local/binのようにルートからパスを表現する記述を絶対パスと言います。

 また、一方でUNIX/Linuxではディレクトリの区切りも[ / ]で表し、1つ上のディレクトリは[ .. ](ピリオド・ドット2つ)で表され、カレントディレクトリは[ . ](ピリオド・ドット1つ)で表されます。

1つ上のディレクトリに移動

$ cd .. 

2つ上のディレクトリに移動

$ cd ../.. 

カレントディレクトリの中身を列挙

$ ls ./ 

 ...etc.

 この仕様から上の階層にあるディレクトリに移動する場合やカレントディレクトリを表すには、このようにしますが、こうしたパスの参照を相対パスと言います。

 上の階層のディレクトリに移動する場合、途中のディレクトリ区切りとしての[ / ](スラッシュ)は必須ですが、末尾にはディレクトリ区切り[ / ](スラッシュ)を付ける必要はありません。(あっても差し支えはありませんが。)

 よってカレントディレクトリの中身を列挙する例においては、末尾の[ / ](スラッシュ)なしで[ . ](ドット/ピリオド1つ)のみとしても同じ結果を得ることができます。

 ちなみに各種shellには、カレントシェルにファイル内容を読み込む為のsourceコマンドがありますが、Bourne Shellにおいては、Bourne Shell(sh)組み込みコマンドの[ . ](ドット)コマンドがこれにあたり、bashなどBourne Shell系は互換性の為、sourceコマンドの他に[ . ]コマンドも利用できたりします。

 これらは、同じ[ . ](ドット/ピリオド1つ)ですが、sourceコマンドとしての[ . ]は、引数をとる一方、カレントディレクトリとしての[ . ]は引数として渡されることはあっても引数をとることはないので使用上困ることはありません。

 ちなみにWindowsではcdにあたるよく使われるコマンドはC標準ライブラリにも関数として存在するchdirであり、ディレクトリの区切りは通常[ ¥ ]ですが、コマンドプロンプトで[ chdir ]や[ cd ]する場合でも[ ¥ ]と[ / ]いずれも利用可能です(bashでは¥をパス区切りとしては使えませんし、chdirというコマンドも存在しませんがbash組み込みコマンドのaliasコマンドを利用すればcdをchdirに変更できますが、むしろcdに慣れた方がよいと思うのであまり意味があるとは思えません)。

$ cd ~ 

 ログインユーザーのホームディレクトリ(作業ディレクトリ)の絶対パスには略記が用意されており、[ cd ]コマンドに半角スペースに続けて[ ~ ]を指定するとログインユーザ(自分)のホームディレクトリに移動します。

$ echo $HOME 

 ちなみにログインユーザのホームディレクトリは環境変数[ HOME ]に登録されています。

 特定の環境変数の値を確認するには、標準出力に表示指示を出す[ echo ]というコマンドを利用して環境変数に[ $ ]を付けてHOMEと指定するとログインユーザのホームディレクトリを(設定されている環境変数の一覧は[env][printenv][declare]、シェル変数の一覧は[set]等で)確認することができます。

ディレクトリの新規作成と削除

 ディレクトリ作成、削除は下記の通りで、いずれもディレクトリ名の末尾に/(スラッシュ)を付ける必要はありません。

ディレクトリ新規作成

$ mkdir ディレクトリ名 

 ディレクトリを新たに作成するには[ mkdir (make directory)]コマンドを使います。

ディレクトリ削除

$ rmdir ディレクトリ名 

 ディレクトリを削除するには[ rmdir (remove directory)]コマンドを使います。

$ rm -r ディレクトリ名 

 ただし、ディレクトリ内にファイルやサブディレクトリが存在する場合、rmdirでは削除することができませんが、ファイル削除で使うrmにrオプションを付加するとディレクトリやファイルが存在しても再帰的に削除され(強制削除のfオプションもあり)ます。

ディレクトリのコピーと移動

 ディレクトリのコピー、移動にはファイルと同様それぞれcp、mvを使い、rmdir、rmも含め、安全のため、iオプションを付加すると実行時にシェルが確認を促してくれます。

 尚、ディレクトリのコピーには、コピー元に他のファイルやサブディレクトリが存在し、コピー先には存在しないなどファイルの場合と状況が異なるケースがあります。

 UNIX/Linuxでは「再帰的」というフレーズを頻繁に使いますが、英語ではrecursiveで、UNIX/Linuxコマンドのオプションにも、多くの場合、これに該当するハイフン2つを付加した--recursiveやハイフン1つに一文字表記した-rや-Rがあり、先のケースのディレクトリのコピーにおいてもこれらオプションを使います。

 ちなみに例として「ディレクトリ名」という文言を記述していますが、UNIX/Linuxにおける説明におけるディレクトリ名やファイル名、時にユーザー名等々、例示には、しばしば、hogehoge,hoge,foo,barなどが使われます。

LINK

ホーム前へ次へ