Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

UNIX(Linux)
入門編

  1. UNIX(Linux)とは
  2. ディストリビューションとは
  3. CentOSとMacOSとCUIについて
  4. 仮想化ソフトウェアを使ったCentOSのインストールとMacOSのCUI環境について
  5. ログインとrootユーザーとシャットダウン等について
  6. コマンドの構造と注意点について
  7. ファイルシステムとカレントディレクトリの移動と表示(cdとpwd)について
  8. 各主要ディレクトリの解説とディレクトリ等の内容表示(ls)について
  9. ちょっと高度なディレクトリの移動(cd)とパスについて
  10. 『ls』コマンドの応用(1)とドットファイルについて
  11. 『ls』コマンドの応用(2)
  12. タブキーを使った入力補完について
  13. ディレクトリの作成方法(mkdir)について
  14. ファイルの簡易作成(touch)とファイルについて
  15. 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて
  1. ファイルとディレクトリの削除(rm)について
  2. ファイルとディレクトリのコピー(cp)について
  3. ファイルとディレクトリの移動と名前変更(mv)について
  4. viエディタとは
  5. viの基本的な使い方(1)
  6. viの基本的な使い方(2)
  7. ターミナル(sshとTera Term)を使ったリモート操作について
  8. ソフトウェアのインストール方法(yumとパッケージ管理ツール)について
  9. ユーザーの概要と確認と追加と切り替え(adduserとsu)について
  10. ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について
  11. グループの概要と確認方法(groups)について
  12. グループの追加と削除と設定変更(groupaddとgroupdelとgroupmod)とユーザー追加方法について
  13. パーミッション(権限)について
  14. パーミッションの設定方法(chmodとchown)について
  1. トップページ
  2. UNIX(Linux)入門編 - ちょっと高度なディレクトリの移動(cd)とパスについて

ちょっと高度なディレクトリの移動(cd)とパスについて

みなさまどうもおはこんばんなんとかです。

今回の記事からしばらくの間はUNIX系OSにおけるファイル操作とディレクトリ操作あたりについてどどどっとやっていきましょう。

ここでこれまで紹介したコマンドを軽くおさらいしておきたいのですがディレクトリを移動できる『cd』コマンド、現在居るディレクトリ(カレントディレクトリ)を確認できる『pwd』コマンド、ディレクトリの中身を確認できる『ls』コマンドの3つがありました。

これらの使い方でまだ紹介しきれていない部分がありますのでそれをちょいちょーいと紹介しておきます。最初に紹介するのは『cd』コマンドについてです。

というわけでまず『CentOS』にログインしてしまって下さい。『MacOS』のターミナルを開いてしまってもOKです。

んでログインした瞬間やターミナルを開いた瞬間っていうのはホームディレクトリにぶちこまれてそこから操作する感じになるので一旦「cd /」というコマンドを打ち込んで『/』に移動してみましょう。

[root@localhost /]# cd /

そうすると現在はルートディレクトリに居る形になりますね。んで家から離れて遠出しているとやっぱり
「おうち(ホームディレクトリ)に帰りたい…(:_;)」
みたいなセンチメンタルな気分になっちゃうこともあるかと思います。そんなホームシックな時は『~』(チルダ)を使って「cd ~」と打ち込んでみましょう。こんな感じですね。

[root@localhost /]# cd ~

するとあらふしぎ。なんとホームディレクトリに帰ってこれちゃいます。

『CentOS』でrootさんなら『/root』、一般ユーザーさんだったら『/home/一般ユーザーさんのお名前』、『MacOS』のターミナルなら『/Users/あなたのお名前』なディレクトリですね。このように『~』はホームディレクトリを指す記号になりますのでバシッと覚えておいてください。

さらに「この『~』は『cd』コマンドだけでしか使えない」ってことも全くなく『ls』コマンドとかの他のコマンドでも使えるしプログラムの内部でファイルを操作する時とかにも使える記法なので
「『~』は『ホームディレクトリ』を指すんだな!(キリッ」
といった感じで頭の片隅に置いておくと良いかもです。

んでおうち(ホームディレクトリ)に帰ってきたあと
「やっぱどっかに行きたいなー...さっきのとこに戻ろっかなー(*'ω'*)♪」
ってなった時は『-』を使ってみましょう。こんな感じですね。

[root@localhost /]# cd -

『-』を打ち込むと「直前まで居たディレクトリ」に戻ることが出来ます。先程はルートディレクトリに居たので『/』な場所まで戻ってこれたと思いますがいかがでしょうか。

CUIなサーバーを沢山いじってる最中って階層の深いディレクトリを行き来することになりがちで『-』の存在を知ってると凄く楽ちんになるのでこのショートカットは覚えておくと良いかもです。

ただ『-』は「直前まで居たディレクトリ」ってことなので『cd』コマンドのみで使う感じになります。ちょっと記憶が曖昧なんですが他のコマンドで「直前まで居たディレクトリ」を『-』で表記するものはなかったはずなので『cd』コマンド専用と覚えてしまってOKな予感です。違ってたらすみません。

『-』は『~-』と書いてもOKだったりします。以下の2つは同じ結果になりますね。

[root@localhost var]# cd -
[root@localhost var]# cd ~-

ただ『-』ってタイピングしたほうが楽で『~-』と打つ意味が全く無かったりするので『~-』が使われることはほぼありません。

そして『cd』コマンドでもういっちょご紹介したい重要な記号があり、それは『..』と『.』です。

『..』を使うと現在居るディレクトリ(カレントディレクトリ)の上のディレクトリ、つまり親ディレクトリへの移動となります。

例えば現在『/root』に居るとしてそこで「cd ..」を打つと『/』に移動出来る、といった感じですね。

[root@localhost ~]# pwd
/root
[root@localhost ~]# cd ..
[root@localhost /]# pwd
/

そして『.』はカレントディレクトリを指す記号になります。なので『cd .』と打つと現在居るディレクトリから現在居るディレクトリに移動するってわけなのでつまり何も起こりません(キリッ

[root@localhost /]# pwd
/
[root@localhost /]# cd .
[root@localhost /]# pwd
/
[root@localhost /]#

「何も起こらないんだから『.』は要らなくね?(・ω・)」って思ってしまうかもですがそれは早計なのでございます。

『cd』コマンドで『.』だけを使うと要らない子に見えてしまうのも仕方ないですが、例えばファイル等のコピーが出来る『cp』コマンドで「『/var/www/index.html』を現在居るrootさんのホームディレクトリにコピーしたい」ってなった場合は

[root@localhost ~]# cp /var/www/index.html /root

でもOKなのですが以下のように

[root@localhost ~]# cp /var/www/index.html .

『.』だけでもイケちゃいます。文末に『/root』ではなく『.』が使われているのがポイントですね。『cp』コマンドは少し先の記事で解説しますので今はスルーでOKです。

それと『~』や『.』や『..』は『/』と組み合わせることも可能です。例えば「ホームディレクトリの中にあるtestディレクトリに移動したい」となると以下でOKです。

[root@localhost /]# cd ~/test
[root@localhost test]# pwd
/root/test

「2つ上のディレクトリの中のvarディレクトリに移動したい」となるとこうです。

[root@localhost test]# pwd
/root/test
[root@localhost test]# cd ../../var/
[root@localhost var]# pwd
/var

んで「現在居る『/root』から『..』を使って『/』に移動して更に『/root』に移動して更に『..』で『/』に戻ってそこで無駄に『.』を使って現在のディレクトリ(カレントディレクトリ)に移動して更に『/root』へ移動して更に『..』で『/』に移動してそこで更に『/root』に移動すると見せかけて『/var』に移動する」なんて荒業も可能です。

[root@localhost ~]# pwd
/root
[root@localhost ~]# cd ../root/.././root/../var
[root@localhost var]# pwd
/var

(´-`).。oO(説明するまでもありませんが上記のコマンドの半分以上は優しさ無駄な成分でできています...)

ここまでは大丈夫そうでしょうか。

ちなみに『-』の場合は『/』を同時に使うことはできません。エラーになっちゃうのでご注意ですね。以下は先ほど居た『/』の中の『var』ディレクトリに『-』を使って移動しようとして怒られた例になります。

[root@localhost ~]# cd /
[root@localhost /]# cd ~
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd -/var ←これはエラーです。
-bash: cd: -/: invalid option
cd: usage: cd [-L|-P] [dir]

そして『~』もちょいと注意点があり、例えばrootさんのホームディレクトリは『/root』なので「『/~』と入力すればイケるんじゃね?」って気がしますがこれはNGです。

[root@localhost ~]# cd /~
-bash: cd: /~: そのようなファイルやディレクトリはありません

『~』はホームディレクトリそのものを指す記号なので『~/test』とかはOKですが、『/~』はNGっていうようなイメージになりますね。

『cd』コマンドでホームディレクトリに移動したい、となった場合は『~』を使うのももちろんOKなのですが実は引数を何も渡さずに単純に『cd』コマンドを打ち込むだけでもホームディレクトリへ移動する事ができます。これかなり便利なので覚えておいて下さい。以下のような感じですね。

[root@localhost /]# pwd
/
[root@localhost /]# cd
[root@localhost ~]# pwd
/root

それと『~ユーザー名』とすることでそのユーザーさんのホームディレクトリに移動する事が出来ます。沢山のユーザーを管理するシステムを設計してる最中なんかはこれを知ってると超絶便利なので頭の片隅に置いておくと良いかもしれません。

[root@localhost /]# cd /
[root@localhost /]# pwd
/
[root@localhost /]# cd ~root
[root@localhost ~]# pwd
/root

『cd』コマンドを使ってディレクトリを移動する時の末尾の『/』は入れても入れなくてもOKです。例えば『/var』に移動したい時に「cd /var」でも「cd /var/」でもどちらでもOKといった感じですね。

[root@localhost ~]# cd /
[root@localhost /]# cd /var/
[root@localhost var]# pwd
/var
[root@localhost var]# cd /
[root@localhost /]# cd /var
[root@localhost var]# pwd
/var
[root@localhost var]#

この時に「『/』配下に『var』ってファイルと『var』ってディレクトリが両方存在したらどうなるの?そういう時はやっぱり『/var』と『/var/』を使い分ける感じかな?」と思った方もいらっしゃるかと思いますが、UNIX系OSでは基本的に「ディレクトリ名とファイル名は重複しないようになっている」ので上記のように使い分ける必要はありません。

ただごく稀にバグとかで同じ名前のファイルとディレクトリが存在してしまう場合があったりするのは内緒です。まあこれに関しては『WindowsOS』とか『MacOS』とかでも極稀に出るバグなのでOSの宿命といった感じですかね。その場合は再起動したりすれば大体直ります。それでも駄目ならちょいと上級者向けになりますがバイナリレベルで消してしまいましょう。

というわけで『cd』コマンドについては以上になりますが最後に『パス』について軽くやっていきましょう。

これまで『/』とか『..』とか『~』とか『/var』とか色々なディレクトリ階層を使ってきましたよね。実はこれには名前がつけられており『パス』なんて呼ばれたりします。

HTMLとかを触ったことある方なら分かると思うのですがa要素の移動先やimg要素の読み込み先に『/index.html』とか『/img/hoge.jpg』とかって記述してますよね。あれと全く同じです。

んでもって『パス』の中に更に『相対パス』と『絶対パス』というカテゴリ分けがされておりまして、ルートディレクトリを表す『/』から始まる『パス』ならば『絶対パス』、現在のカレントディレクトリや特定の場所からの相対的な『パス』ならば『相対パス』になります。

イメージとしてはルートディレクトリである『/』は絶対的で変わらない位置となりますので『/』から始まれば『絶対パス』、現在のディレクトリとか特定の場所っていうのは位置がコロコロ変わるのでその地点から移動する指定方法は相対的な指定になるので『相対パス』っていうような感じです。

例えば『/root』、『/var』、『/root/test』、『/etc/sysconfig/network-scripts』なんかは『絶対パス』、『../root』、『../var』、『./test』、『../../etc/sysconfig/network-scripts』なんかは『相対パス』になりますね。

この『パス』については現場や参考書などでよく使われるのでバッチリマスターしておいてください。まあUNIX系OSでたくさん遊んでればそのうち身につくので特別意識して覚えようとしなくてもOKです。

では少々長くなってきましたので一旦ここで記事を切りますね。次の記事では『ls』コマンドの応用とドットファイルとかについてやっていきましょう。ではではこの辺で。失礼いたします。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。