ミスチルの大名曲の数々が配信決定!! 31日間無料!!【PR】

こんばんは。
UNIXの勉強をしている初心者です。
シンボリックリンクとネットワークファイルシステムの違いが分かりません。

他のPCのディレクトリを自分のパソコンから操作するためにそこをマウントしている。これがNFSだと覚えました。
ディレクトリを開くと、全く別の他のディレクトリにリンクされている。これがシンボリックリンクと習いました。

リンクとマウントという言葉は違うものの、やっていることは一緒では無いでしょうか?

表現がお粗末で申し訳ありませんが、どうちがうのでしょうか?

教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

誤解を恐れずに言うとシンボリックリンクはWindowsのショートカットで、NFSはネットワークドライブです。



unixでどのようにこれらを利用するかと言うと、先ずはシンボリックリンクからご説明します。
バージョンの異なる同一のアプリケーションをインストール必要があったとします。例えば暗号化に必要なopensslです。
またこれらを必要とする別のアプリケーションが複数あったとします。例えばApacheやOpenSSHなどです。
このようなときにApacheやOpenSSHが利用するopensslの参照先はバイナリファイルに記述されていますので、これらをわざわざopensslを利用しているアプリケーションを再インストールするのは非常に手間です。
ですので、下記のようなことを実施します。
/opt/openssl-now ←今利用しているopenssl
/opt/openssl-new ←新しくしたopenssl
/opt/openssl ←/opt/openssl-nowへのシンボリックリンク
↓シンボリックリンクの変更
/opt/openssl ←/opt/openssl-newへのシンボリックリンク

こうすることで、利用しているアプリケーションを全て再コンパイルする必要なく手軽にメンテナンスが可能になります。

NFSによるマウントは別のサーバのディスクをあたかも自分の物のようにみせることですので、例えば信頼性の高い容量の大きく速度も速いディスクを一つのサーバでもち、これらを別サーバに貸し出すといった利用ができます。このように信頼性を集約することでコストを大幅に削減できたりもします。
私の主観ではNFSであまりいい思い出がないので、積極的な導入は考えたくないです。
    • good
    • 0

確かに NFS は壊れた実装も多いけど, Solaris の NFS は (大元ということもあって) 一番まともじゃないですかね>#3.


他の選択肢は CIFS? でも, samba は「元のソースから壊れてた」こともあるしなぁ. しかも「設計段階で破綻してる」レベルの, 余りにもひどい壊れっぷりに驚愕したくらい.
日本のユーザグループで「samba は機能を追加することよりも前に C の勉強をしてくれよ」っていわれたこともある.
    • good
    • 0

まあ広い意味での「パスの変換機構」と思えば一緒かもしれん.


マウントは「別のファイルシステムを自分のファイルシステムに接ぎ木する機構」であるのに対し, シンボリックリンクは「『別のところを参照してくれ』と書いてあるファイル」です. そして, シンボリックリンクは 1回作れば (消さない限り) シャットダウンしても有効であるのに対し, マウント機構ではシャットダウンしてしまうと (再びマウントしなければ) 無効となります.
なお, シンボリックリンクは「ディレクトリとは限らない」 (ファイルなどに対してもシンボリックリンクがはれる) し「リンク先が存在するとも限らない」ことは知っていていいんじゃないかな.
    • good
    • 0
この回答へのお礼

何となく分かりました。ショートカットみたいですね。
ありがとうございます。

お礼日時:2009/06/30 18:41

質問する時は時に注意しないといけないのは・・・言葉使いですよ!



「シンボリックリンクとネットワークファイルシステム」の「ネットワークファイルシステム」とNFSは同じですか? 別ですか???

質問を読むと同じ機能を言っているように思えますが・・・


「NFS」はNFSサーバがあって動作する機能ですが、マウントはNFSを含めてHDDなどのデバイスをOSに接続(マウント)する機能です。
 リンク(シンボリック&ハード・リンク)は、ファイル・システム中でファイルを参照する方法です。


> シンボリックリンクとネットワークファイルシステムの違いが分かりません。
概念上の違いがあるので、何が分からないを具体的に書かないと解答できないと思います。
    • good
    • 0
この回答へのお礼

言葉が悪くすいません。
最近、シンボリックリンクという言葉を知りました。そのとき、「以前覚えた、NFSとどう違うのだろうか?」疑問を持ちました。
(質問に書いたように理解してしまっているので、自分の中では同じなのです。)

そもそもが分かっていない初心者で情けないのですが、概念を教えてください。(そうしたら、概念の違いが分かると思いますので。)

お礼日時:2009/06/29 23:27

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QNFS接続+シンボリックリンクを使ったディレクトリの参照先について

2台のLinuxサーバ(いずれもRedHat AS3.0) にて、
NFS接続+シンボリックリンクを使ったディレクトリにファイルをコピーしようとしています。

2台のLinuxサーバはそれぞれ
 ・サーバA(NFSサーバ)
 ・サーバB(NFSクライアント)
と記載しています。


初めに、サーバBの「/home/SAVEDATA」をマウントポイントとして、
サーバAの「/home/SAVEDATA」にNFS接続するよう設定した後、
サーバBにtenletでログインし、NFS接続したサーバAのディレクトリをたどっていくと、
途中で「そのようなディレクトリは無い」と言われてしまいます。
------------------------------------------------------------------------------------
[サーバB] $ vdir /home/SAVEDATA/
lrwxrwxrwx 1 user user 34 10月 3 12:21 /home/SAVEDATA/2005 -> /DSK10/SAVEDATA/2005

[サーバB] $ vdir /home/SAVEDATA/2005/
vdir: /home/SAVEDATA/2005/: そのようなファイルやディレクトリはありません
------------------------------------------------------------------------------------

おそらく、最後のコマンドでは
「サーバB」の「/DSK10/SAVEDATA/2005」を探してしまっているのではないかと思うのですが、
実際見て欲しいのは「サーバA」の「/DSK10/SAVEDATA/2005」です。
(サーバBには「/DSK10」は存在しません。)
この環境で、正しくサーバAの「/DSK10/SAVEDATA/2005」を参照するようにすることは可能でしょうか。

お分かりになる方がいらっしゃいましたら、アドバイスをお願い致します。

2台のLinuxサーバ(いずれもRedHat AS3.0) にて、
NFS接続+シンボリックリンクを使ったディレクトリにファイルをコピーしようとしています。

2台のLinuxサーバはそれぞれ
 ・サーバA(NFSサーバ)
 ・サーバB(NFSクライアント)
と記載しています。


初めに、サーバBの「/home/SAVEDATA」をマウントポイントとして、
サーバAの「/home/SAVEDATA」にNFS接続するよう設定した後、
サーバBにtenletでログインし、NFS接続したサーバAのディレクトリをたどっていくと、
途中で「そのような...続きを読む

Aベストアンサー

現状「サーバB」で「サーバA」の「/DSK10/SAVEDATA/2005(/DSK10、/DSK10/SAVEDATAでもいいけど)」配下はNFSで参照出来るのでしょうか?

参照出来ないのでしたら、NFSで参照出来ない領域にアクセスする事は不可能ですからご希望の事は無理です。

例えば、「サーバA」の「/DSK10/SAVEDATA/2005」を「サーバB」で「/DSK10/SAVEDATA/2005」としてNFSマウントすればいいだけだと思うのだけど。

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Q「Linuxでネットワークドライブ」したい

Windowsのネットワークドライブのような仕組みはLinuxにはありませんか?

【実現したいこと】
AとBマシンがあり、Aマシンで動かしているシステムのログファイルをBマシンに置きたいと思います。Aマシンにはログファイルを残したくありません。

【Windowsであれば・・・】
AマシンにBマシンの共有フォルダをネットワークドライブとして設定し、そのドライブ以下にログファイルを吐き出すように設定すれば、Aマシンにはファイルの実態は残らずにBマシンにログファイルをおくことが出来ます。

このようなことをLinuxマシンで行いたいのですが、可能でしょうか?ネットワークドライブのような方法でなくても、実現できる方法であれば構いません。
例えばログファイルを1分おきにCronでAマシンからBマシンに送るとか、そういうのはダメです(一時的であれ、Aマシンにファイルが残るので)
一応書いておきますと、AマシンのOSはRedhat9、BマシンのOSはRedhat7.1です。

どうぞよろしくお願いします。

Aベストアンサー

NFSを使うのが定石です。

<Aマシン設定>
/etc/exportsに以下を追記(rootユーザで実行)
/aaa/bbb xxx.xxx.xxx.xxx(rw)
次回OS起動時に/aaa/bbbディレクトリをIPアドレスxxx.xxx.xxx.xxxに対してexportされます。
確認方法はOS起動後にexportfs -vで確認。
OS再起動無しにexportさせるにはexportfs -a実施

<Bマシン設定>
rootユーザで実施
マウントさせたいディレクトリを作成(通常は/mnt配下)
mkdir /mnt/test
次にこの作成したディレクトリへAマシンのexportしているディレクトリをマウント
mount xxx.xxx.xxx.xxx:/aaa/bbb /mnt/test
マウント完了
df -kやdf -hなどでマウント状態を確認し、マシンBの/mnt/test配下へファイルの読み書きが出来るか確認
出来ればOK
毎回mountコマンドを打つのは面倒なので/etc/fstabに以下の行などを追加。(rsizeなどはシステムによって調整してください。ここは御自分で調べて)
xxx.xxx.xxx.xxx:/aaa/bbb /mnt/test nfs rsize=8192,wsize=8192,timeo=14,intr

※上記IPアドレスxxx.xxx.xxx.xxxは/etc/hostsで書かれているhost名で書くのがベター

NFSを使うのが定石です。

<Aマシン設定>
/etc/exportsに以下を追記(rootユーザで実行)
/aaa/bbb xxx.xxx.xxx.xxx(rw)
次回OS起動時に/aaa/bbbディレクトリをIPアドレスxxx.xxx.xxx.xxxに対してexportされます。
確認方法はOS起動後にexportfs -vで確認。
OS再起動無しにexportさせるにはexportfs -a実施

<Bマシン設定>
rootユーザで実施
マウントさせたいディレクトリを作成(通常は/mnt配下)
mkdir /mnt/test
次にこの作成したディレクトリへAマシンのexportしているディレクトリをマウント...続きを読む

QLinuxのgccのインクルードパス?

Linuxのgccで、インクルードファイルやライブラリのパスを設定する方法が知りたいのですが、gccについて詳しい書籍やサイトがありましたら、教えてください。

gccとccの違いも知りたいです。

例)
#include "example.h"

このままだと、example.hが無いと表示されます。

Aベストアンサー

標準ライブラリのパスは、gccのインストール時に指定して、Cプリプロセッサの中に組み込まれます。

#include "example.h"
は、まずカレントディレクトリを探し、次に gccコマンドラインの -I オプションで指定したディレクトリを探し、最後に標準ライブラリが探されます。

#include <example.h>
は、カレントディレクトリを探さない点が異なります。

ccも基本的には同じですが、Unixの種類によって機能が異なる可能性があります。Linuxの場合はcc=gccです。

QLD_LIBRARY_PATHって?

環境変数で「LD_LIBRARY_PATH」というのがあるかと思うのですが、この変数はOSが使用する変数なのでしょうか?それとも単一、あるいは複数のアプリケーションソフト(ORACLEなどのような)が使用する変数なのでしょうか?
基本的な質問で申し訳ありませんが、教えてください。

Aベストアンサー

OSが使用する変数です。リンク時または実行時にリンクする共有ライブラリを探すために使用されます。

LD_LIBRARY_PATHが設定されていない場合、ダイナミックローダーは/libや/usr/lib等に存在するライブラリを検索しますが、それ以外の場所に存在するライブラリを見つける事ができません。

実行プログラムが32ビットの場合はLD_LIBRARY_PATHが、64ビットの場合でLD_LIBRARY_PATH_64が設定されている場合はこちらが使用されます。

なお、リンク時パスや実行時パスはコンパイル時に設定することもできます。

Qシェルでsyntax errorがでてしまう

温度管理をするため、CentOS4.4上で下記のようなスクリプトを動かしています。

---スクリプト始まり---
#!/bin/bash
date=$(date '+%Y/%m/%d(%a)/%R')
rh=$(/var/usbrh/usbrh -1 2>&1)
limit=35
rh_judge=$(echo $rh | cut -c14-15)
if (( ${rh_judge} >= ${limit} )) ;then
alert=alert
else
unset alert
fi
echo ${date} ${rh} ${alert} >> /var/usbrh/usbrh_tes2.log
---スクリプト終わり---
このスクリプトで、ログを出力し、limit以上の数値になった場合、alertがログに書き込まれるようにできました。
そこでコレを少し改良してalert時にメールを飛ばせる様にしたいと思い下記のようにif文を差し替えました。

---if文始まり---
if (( ${rh_judge} >= ${limit} )) ;then
alert=alert
address="xxx@hogehoge.com"
subject="TemperatureAlert"

mail -s $subject $address << END
`$rh`
END
else
unset alert
fi
---if文終わり---

ところが、
echo ${date} ${rh} ${alert} >> /var/usbrh/usbrh_tes2.log
のあとの行(line23)で
line 23: syntax error: unexpected end of fileというのが出て
スクリプトが動かなくなってしまいました。

ログの書き込み部分は問題ないと思うのですが、原因がわかる方いらっしゃいますでしょうか。
ご指摘頂ければ幸いです。
宜しくお願いいたします。

温度管理をするため、CentOS4.4上で下記のようなスクリプトを動かしています。

---スクリプト始まり---
#!/bin/bash
date=$(date '+%Y/%m/%d(%a)/%R')
rh=$(/var/usbrh/usbrh -1 2>&1)
limit=35
rh_judge=$(echo $rh | cut -c14-15)
if (( ${rh_judge} >= ${limit} )) ;then
alert=alert
else
unset alert
fi
echo ${date} ${rh} ${alert} >> /var/usbrh/usbrh_tes2.log
---スクリプト終わり---
このスクリプトで、ログを出力し、limit以上の数値になった場合、alertがログに書き込まれるように...続きを読む

Aベストアンサー

気になるのは `$rh` かなぁ?
$rh に入っている文字列を, コマンドとして実行したいの? もしそうだとしても,
$rh | mail ...
の方が素直じゃないかなぁ.
あと, ヒアドキュメントを終わらせる END の前後に空白がないことも確認してください.

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

QJavaScriptにおいてPOSTで送信されたデータを取得出来ますか

<form action="自分" method="POST">
<input type="hidden" name="abc" value="1">
<input type="submit" name="OK" value="OK">
</form>

上記のように、POST渡しで送信したとき、Javascriptにて、hiddenのデータを取得することができるのでしょうか?

出来るのであればその方法を教えてくださいませんか。
よろしくお願いします。

Aベストアンサー

POSTで渡された変数をJavaScriptで取得することができません。
でも、action先は自分自身なんですよね?
だったら、submitボタンを押下されたときに、hiddenの値を参照すればいいのでは?
わざわざPOSTデータを参照する必要があるのでしょうか?

Qflush()とclose()について

Javaを独習Javaで独習しています。現在、入出力の所まできたのですが、Writerクラスのclose()とflush()の違いがわかりません。それぞれのメソッドの意味はわかるのですがそれらを使う目的がわかりません。flush()は「バッファ付けデータをそのストリームで表されている物理デバイスに書き込む」とあるのですが、サンプルには(バッファ付け文字ストリームの単元にも)flush()は一度も出てこずclose()のみで書き込みが行われています。探したのですが独習Javaのサンプルの中には結局flush()は一度も出てきませんでした。この二つの違いはなんなのでしょうか?初心者のためわかりにくい質問かとは思いますがよろしくお願いします。

Aベストアンサー

フラッシュすれば、ファイルやその他物理デバイスに強制的にバッファの内容が出力されるということは、理解されていると考えてよいですね?

で、なかなかストリームをクローズできない(またはしない)場合には、いつまで経ってもバッファの内容が物理デバイスに出力されないかも知れませんよね?でも、適当なタイミングで定期的にフラッシュすれば、その時点でバッファに溜まっている内容が物理デバイスに出力されます。

そのサンプルの場合は、書き出してすぐ?クローズしちゃうため、明示的なフラッシュは必要なかったんだと思いますが、

・フラッシュは、(ストリームを閉じずに)バッファの内容を強制的に物理デバイスに出力する。
・クローズは、(フラッシュされていなければフラッシュしてから)そのストリームを閉じる。

とまぁ、目的も内容も全然違うわけです。

Q~以外を削除する場合(rmコマンド)

linuxのコマンドで
~以外のファイル、ディレクトリを全て削除したい時は
どのような記述をすれば良いのでしょうか?
シェルスクリプトではなくrmコマンド1つで削除したのいですが…

例: tar以外のファイル・ディレクトリを
   すべて削除したい場合など

どなたかご存知の方がいらっしゃったら
教えてください。よろしくお願い致します。

Aベストアンサー

rm コマンドのみという訳にはいきませんが基本的なコマンドを組み合わせると実現可能と思います。

「名前が tar で終わるもの以外のファイル・ディレクトリを削除する」場合だと

ls | grep -v -E 'tar$' | xargs rm -r

となります。

ファイルの一覧を取得し ( ls )
'tar'で終わるもの以外を抽出し ( grep )
その結果を rm -r の引数に指定して実行 ( xargs )

という流れです。

ファイルを削除するような操作については失敗するとダメージが大きいので、事前にテストして動作を確認すると良いとおもいます。また rm -r -i としてそれぞれのファイルについて、削除の問い合わせをするのも有効です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング