アカウント名:
パスワード:
とても不思議だったことが2つ
その1つが、なんでプログラムごとに別フォルダ(Linuxだとディレクトリ)に入れないの?ってこと。だって、プログラムってどこかで1つの団体が管理しているわけじゃないのに、どうやって同じファイル名のプログラムが2つ以上ないってことを保障してるのさ?ディストリビューターによってはパッケージ管理システムでそういう不具合が起こらないようにしているのもあるだろうけど、野良ビルドして入れた場合、最悪別のプログラムに上書きされてしまう危険もあるだろうに。
ちなみに、もう1つの疑問は、実行中のプログラムであっても終了させずに上書き更新できるってこと。
> 実行中のプログラムであっても終了させずに上書き更新できるってこと。
ファイルをopenしたまま、そのファイルをrmして、そのファイルシステムのdfをとってみましょう。
rmでなく上書きするとcore dumpするシステムもあったなぁ。どれだったか、よく憶えてないけど。コードをMAP_PRIVATEしてるシステムは問題なかったけど。
昔話ですが、SunOS4では、ローカルファイルシステムは実行中のファイルを上書きしても大丈夫だけど、NFS経由なリモートのファイルシステム上から実行中のファイルを上書きすると落ちてました。
#/usr/local/bin をNFSで共有していて、Emacsを更新したらあちこちから悲鳴が聞こえてきたことがあります…
プログラムごとに別のディレクトリにしても、結局ディレクトリ名の衝突という問題が避けられないのでは?(衝突頻度が減るとは思いますが)
実行中のプログラムを更新できるのは、unlink(あるいはrename)したあとコピーすれば i-node は別になるからで、実行中のプログラムが終了すればリファレンスカウントが1つ減り、リファレンスカウントが0になればブロックは解放されます。
その1つが、なんでプログラムごとに別フォルダ(Linuxだとディレクトリ)に入れないの?ってこと。
そのために/optってのがあったけど、あんまり使われてないですね。それぞれのディレクトリにパスを通すのが面倒だからでしょうけど。
野良ビルドして入れた場合、最悪別のプログラムに上書きされてしまう危険もあるだろうに。
あと野良ビルドは、パッケージシステムとは別のところに入れるんじゃない?自分はそうしてました。
私は逆にWindowsの仕様がとても不満でした。アプリ終了したはずなのにファイル・フォルダが消せないことがたまにあったり…
>その1つが、なんでプログラムごとに別フォルダ(Linuxだとディレクトリ)に入れないの?ってこと。
今度はディレクトリ名が被るでしょ。
Windows の Program Files みたいに団体ごとにディレクトリ分けろって?それらにいちいち PATH 通すの?
ディレクトリ名にはバージョン番号まで含めることで重複を回避し、PATH のために /bin 等にリンクも置くタイプのディストロはあるみたいです。http://www.gobolinux.org/ [gobolinux.org]http://www.gobolinux.org/index.php?page=at_a_glance [gobolinux.org]
全部がそうなってるのは珍しそうですが、Firefoxは多くのディストロでそんな感じになってる気がします。
$ file `which firefox`/usr/bin/firefox: symbolic link to `../lib/firefox-7.0.1/firefox.sh'
PATH通してもコマンド名が被ってたら意味ないし。
「ファイル名を大域のコマンド名に扱う」PATHっつう概念が、40年経ってとっくに破綻しているんだろうがな。
>PATH通してもコマンド名が被ってたら意味ないし。
これ、意図的に利用してる場合もあるんですよね。/usr/local/binを/usr/binよりも前に登録してシステム標準のコマンドではなく自分が入れたコマンドを優先させたりとかね。使い分けたいときはプルパス書けばできるし。
> Windows の Program Files みたいに団体ごとにディレクトリ分けろって?それらにいちいち PATH 通すの?
PATH ってゆー概念は Unix 以前からあったものだときいたことがあります。
本来の目的は一つのシステムに同じコマンドの複数のバージョン同時にインストールして使用するバージョンを選択可能にすることだったらしいです。
あるコマンドの更新版ができた場合は、旧版のコマンドを削除せずに新版用ののディレクトリに置く。
そして PATH を修正して運用に入ると。
これにより更新による弊害があらわれた場合に PATH の修正のみによって旧版が使用可能になります。
この考え方からすると「団体のディレクトリ毎に PATH を通す」というのはむしろ自然です。
# しかし、俺もこの辺の話は伝え聞いたもので# 出典がはっきりしないんだよね。
逆に、Openしてると消せないとか Windows 手抜きすぎだろ って思った。
脆弱性があるプロセスを上げっぱなしのまま更新した気になるよりマシだと思いますけど。
ファイルを書き換えた気になっていたが、別プロセスにより mv されて別のファイルを置かれていた、なんてのも微妙ですね。
GRACEFULな更新を志向してるなら当然なのでは?むしろリブートを強要するWindwosの文化に違和感を覚えます。
#そもそもGRACEFULなんて概念はM$(と金魚の糞)にはなかったっり
gracefulなのは一部アプリだけじゃね。Linuxでも入力待ちのシェルが勝手に落ちて再起動したりはせんよ。
どのプロセスがパッチ済みか管理できないのは、どちらのOSも変わらんのだよなあ。
#てか誤字多いぞ。落ち着け。
そこまで気にするなら、再起動すれば良い。Windows ではそれが普通なんでしょ?
使った事も無いのに他のものを叩こうというその姿勢が、"Linuxが広く一般に受け入れられない"原因の一端だと理解できないのですか…
つーか、最近はMacも更新するとやたら再起動要求してきませんか?
手抜きかどうかは分からないけど、Windowsってアプリが終了してもロックがかかったままになって消せないファイルがときどきできて困るんですよね。
消せないのも困るんだけど、どのプロセスがつかんでるのか簡単に調べられないのも。
そゆ時は unlocker 使ってます。
http://www.emptyloop.com/unlocker/ [emptyloop.com]
非標準の物は /opt を使うべきかと。といっても、従ってないところが多いかもね。自分でコンパイルした場合は、/usr/local とかを使うんじゃないかな。
実行中のプログラムでも終了させずに上書き更新ができるのは、ファイルシステムがそれを可能にしているから。System V 時代のファイルシステムだと、上書き更新して実行中のプログラムが落ちるとか言ったことがあったけどね。
パッケージシステムは /usr/local をいじらない (と思ってる) ので、 安心して使えますし。
そして、BSDと宗教戦争になると。
私は、自分でビルドしたものはホームディレクトリ以下に置くことにしました。どうせ利用者は私自身だけなのですから。
#Mac OS Xでも、Homebrewが(デフォルトでは)/usr/localを使ってくれやがる。この点だけは/optのMacPortsのほうが好み。
パッケージシステムは/usr/localいじらないでしょ。普通/usr/pkg
自分でビルドするときは /opt/foo-1.2.3 とかにインストールすればいいよ。いろいろ便利だし。
これは真っ当な疑問だと思う。うちの会社は自前のディレクトリ構成を持っていて、基本的にはWindowsのProgram Files下みたいな構成になってるよ。だってその方が明らかに優れているんだもん。パッケージバージョン別にディレクトリも持てるしね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
WindowsからLinuxに移って (スコア:1)
とても不思議だったことが2つ
その1つが、なんでプログラムごとに別フォルダ(Linuxだとディレクトリ)に入れないの?ってこと。
だって、プログラムってどこかで1つの団体が管理しているわけじゃないのに、
どうやって同じファイル名のプログラムが2つ以上ないってことを保障してるのさ?
ディストリビューターによってはパッケージ管理システムでそういう不具合が起こらないようにしているのもあるだろうけど、
野良ビルドして入れた場合、最悪別のプログラムに上書きされてしまう危険もあるだろうに。
ちなみに、もう1つの疑問は、
実行中のプログラムであっても終了させずに上書き更新できるってこと。
Re:WindowsからLinuxに移って (スコア:2)
> 実行中のプログラムであっても終了させずに上書き更新できるってこと。
ファイルをopenしたまま、そのファイルをrmして、そのファイルシステムのdfをとってみましょう。
Re: (スコア:0)
rmでなく上書きするとcore dumpするシステムもあったなぁ。どれだったか、よく憶えてないけど。
コードをMAP_PRIVATEしてるシステムは問題なかったけど。
Re:WindowsからLinuxに移って (スコア:1)
昔話ですが、SunOS4では、
ローカルファイルシステムは実行中のファイルを上書きしても大丈夫だけど、
NFS経由なリモートのファイルシステム上から実行中のファイルを上書きすると落ちてました。
#/usr/local/bin をNFSで共有していて、Emacsを更新したらあちこちから悲鳴が聞こえてきたことがあります…
Re:WindowsからLinuxに移って (スコア:2)
プログラムごとに別のディレクトリにしても、結局ディレクトリ名の衝突という問題が避けられないのでは?(衝突頻度が減るとは思いますが)
実行中のプログラムを更新できるのは、unlink(あるいはrename)したあとコピーすれば i-node は別になるからで、実行中のプログラムが終了すればリファレンスカウントが1つ減り、リファレンスカウントが0になればブロックは解放されます。
Re:WindowsからLinuxに移って (スコア:1)
そのために/optってのがあったけど、あんまり使われてないですね。
それぞれのディレクトリにパスを通すのが面倒だからでしょうけど。
あと野良ビルドは、パッケージシステムとは別のところに入れるんじゃない?
自分はそうしてました。
私は逆にWindowsの仕様がとても不満でした。
アプリ終了したはずなのにファイル・フォルダが消せないことがたまにあったり…
Re: (スコア:0)
今度はディレクトリ名が被るでしょ。
Windows の Program Files みたいに団体ごとにディレクトリ分けろって?それらにいちいち PATH 通すの?
> 実行中のプログラムであっても終了させずに上書き更新できるってこと。
inode というやつがあってだな・・・
Re:WindowsからLinuxに移って (スコア:1)
>その1つが、なんでプログラムごとに別フォルダ(Linuxだとディレクトリ)に入れないの?ってこと。
今度はディレクトリ名が被るでしょ。
Windows の Program Files みたいに団体ごとにディレクトリ分けろって?それらにいちいち PATH 通すの?
ディレクトリ名にはバージョン番号まで含めることで重複を回避し、
PATH のために /bin 等にリンクも置くタイプのディストロはあるみたいです。
http://www.gobolinux.org/ [gobolinux.org]
http://www.gobolinux.org/index.php?page=at_a_glance [gobolinux.org]
Re:WindowsからLinuxに移って (スコア:1)
全部がそうなってるのは珍しそうですが、Firefoxは多くのディストロでそんな感じになってる気がします。
$ file `which firefox`
/usr/bin/firefox: symbolic link to `../lib/firefox-7.0.1/firefox.sh'
1を聞いて0を知れ!
Re: (スコア:0)
インストーラーが/usr/binにシンボリックリンクを作りますか?
と聞いてくれるのが一番ありがたいなあ
windowsでもスタートメニューやデスクトップにショートカットを作りますか?
ときいてくれるしあれと同じ感じで
Re:WindowsからLinuxに移って (スコア:1)
Windows の Program Files みたいに団体ごとにディレクトリ分けろって?それらにいちいち PATH 通すの?
PATH通してもコマンド名が被ってたら意味ないし。
「ファイル名を大域のコマンド名に扱う」PATHっつう概念が、40年経ってとっくに破綻しているんだろうがな。
Re: (スコア:0)
>PATH通してもコマンド名が被ってたら意味ないし。
これ、意図的に利用してる場合もあるんですよね。
/usr/local/binを/usr/binよりも前に登録して
システム標準のコマンドではなく
自分が入れたコマンドを優先させたりとかね。
使い分けたいときはプルパス書けばできるし。
Re: (スコア:0)
> Windows の Program Files みたいに団体ごとにディレクトリ分けろって?それらにいちいち PATH 通すの?
PATH ってゆー概念は Unix 以前からあったものだときいたことがあります。
本来の目的は一つのシステムに同じコマンドの複数のバージョン同時にインストールして
使用するバージョンを選択可能にすることだったらしいです。
あるコマンドの更新版ができた場合は、旧版のコマンドを削除せずに新版用ののディレクトリに置く。
そして PATH を修正して運用に入ると。
これにより更新による弊害があらわれた場合に PATH の修正のみによって
旧版が使用可能になります。
この考え方からすると「団体のディレクトリ毎に PATH を通す」というのはむしろ自然です。
# しかし、俺もこの辺の話は伝え聞いたもので
# 出典がはっきりしないんだよね。
Re: (スコア:0)
逆に、Openしてると消せないとか Windows 手抜きすぎだろ って思った。
Re:WindowsからLinuxに移って (スコア:1)
脆弱性があるプロセスを上げっぱなしのまま更新した気になるよりマシだと思いますけど。
ファイルを書き換えた気になっていたが、別プロセスにより mv されて別のファイルを置かれていた、なんてのも微妙ですね。
Re:WindowsからLinuxに移って (スコア:3)
GRACEFULな更新を志向してるなら当然なのでは?
むしろリブートを強要するWindwosの文化に違和感を覚えます。
#そもそもGRACEFULなんて概念はM$(と金魚の糞)にはなかったっり
Re:WindowsからLinuxに移って (スコア:1)
gracefulなのは一部アプリだけじゃね。
Linuxでも入力待ちのシェルが勝手に落ちて再起動したりはせんよ。
どのプロセスがパッチ済みか管理できないのは、どちらのOSも変わらんのだよなあ。
#てか誤字多いぞ。落ち着け。
Re: (スコア:0)
脆弱性があるプロセスを上げっぱなしのまま更新した気になるよりマシだと思いますけど。
そこまで気にするなら、再起動すれば良い。Windows ではそれが普通なんでしょ?
Re: (スコア:0)
使った事も無いのに他のものを叩こうというその姿勢が、"Linuxが広く一般に受け入れられない"原因の一端だと理解できないのですか…
Re: (スコア:0)
つーか、最近はMacも更新するとやたら再起動要求してきませんか?
Re: (スコア:0)
手抜きかどうかは分からないけど、
Windowsってアプリが終了してもロックがかかったままになって
消せないファイルがときどきできて困るんですよね。
Re: (スコア:0)
消せないのも困るんだけど、どのプロセスがつかんでるのか簡単に調べられないのも。
Re: (スコア:0)
そゆ時は unlocker 使ってます。
http://www.emptyloop.com/unlocker/ [emptyloop.com]
Re: (スコア:0)
非標準の物は /opt を使うべきかと。といっても、従ってないところが多いかもね。
自分でコンパイルした場合は、/usr/local とかを使うんじゃないかな。
実行中のプログラムでも終了させずに上書き更新ができるのは、ファイルシステムがそれを可能にしているから。System V 時代のファイルシステムだと、上書き更新して実行中のプログラムが落ちるとか言ったことがあったけどね。
Re:WindowsからLinuxに移って (スコア:2)
実際、多くのソフトでコンパイルする場合、 ./configure で、
デフォルトの prefix が /usr/local になってると思います。
# 特に指定しないなら、make install で /usr/local 以下にコピーされる。
パッケージシステムは /usr/local をいじらない (と思ってる) ので、
安心して使えますし。
Re: (スコア:0)
パッケージシステムは /usr/local をいじらない (と思ってる) ので、 安心して使えますし。
そして、BSDと宗教戦争になると。
Re:WindowsからLinuxに移って (スコア:2)
ports って、/usr/local 以下に置くんですね。
BSD 系だと、自分でコンパイルしたらどこに置くのが普通なのか
までは分からなかったけど。。
ってか、local の意味って何?
# そのハードウェアもしくは使用者グループ独自 (local) のとかかな
# と思ってました。
Re:WindowsからLinuxに移って (スコア:1)
私は、自分でビルドしたものはホームディレクトリ以下に置くことにしました。どうせ利用者は私自身だけなのですから。
#Mac OS Xでも、Homebrewが(デフォルトでは)/usr/localを使ってくれやがる。この点だけは/optのMacPortsのほうが好み。
Re: (スコア:0)
デフォルトのインストール先が/usr/localですが、
NetBSDやDragonflyBSDが採用しているpkgsrc(元々はportsから派生)では
デフォルトのインストール先は/usr/pkgとなっています。
したがって後者では、/usr/localの方はサイトの管理者が自由に使えます。
Re: (スコア:0)
パッケージシステムは/usr/localいじらないでしょ。
普通/usr/pkg
Re: (スコア:0)
自分でビルドするときは /opt/foo-1.2.3 とかにインストールすればいいよ。いろいろ便利だし。
Re: (スコア:0)
これは真っ当な疑問だと思う。
うちの会社は自前のディレクトリ構成を持っていて、基本的にはWindowsのProgram Files下みたいな構成になってるよ。
だってその方が明らかに優れているんだもん。パッケージバージョン別にディレクトリも持てるしね。