linuxのフォルダと配置について

そんなもの好きに配置すれば良いというのは分かっているとして。。。

windowsの場合、
ユーザー毎のモノはDocuments and Settingsに
プログラムはProgrm Filesに
その他は適当に適切な場所へ
という使い方が一般的な形ですが、

linuxの場合、どうなのでしょうか?
ユーザー毎のモノはhomeに
それから、、、
プログラムはusrに入れるのが良いのか?それともvarか?
この辺りがわかり辛いです。

同じデータベースソフトのデフォルトでも
mysqlは
/var/lib/mysql/
postgresは
/usr/local/pgsql/
と、割れています。

くどいようですが、
そんなものただのデフォルトなので好きに配置すれば良いというのは分かっています。

varとusr、またその他の決まりモノのように存在するフォルダのあるべき考え方、使い方を教えてください。

個人的な印象では
varはログやデータなどの置き場、
usrはアプリのインストール場所
という感じがします。

mysqlはデータをvarに置きつつも、コマンドは/usr/binにあります。
postgresはアプリのインストール場所についでにデータの置き場つくったって感じでしょうか。

あと、自作でプログラムやシェルを作った場合、
var、usr、home、その他
どこに置くのが妥当でしょうか?

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

A 回答 (7件)

フォルダの配置についてはきちんと定義されています。


RedHatで言えば、以下を参考にされると良いでしょう。
http://www.jp.redhat.com/support/manuals/RHL62/r …
    • good
    • 0
この回答へのお礼

ありがとうございます。
的確なリンク大変参考になりました。

お礼日時:2010/08/19 13:29

歴史的なものです。

よかったら参考 URL を。

自作プログラムとかは私だったら /home/bin か /usr/local/bin かな。趣味の問題ですね。

参考URL:http://d.hatena.ne.jp/ytakano/20100715/1279219401
    • good
    • 0

アプリケーションの場合、インストーラによるので微妙ですが


ソースからコンパイルする場合はprefixを指定してやるのが常套なので
たとえばmysql5.1なら
./configure --prefix=/usr/local/mysql51 ・・・
などバージョンも含めたフォルダを指定しますね

その場合/usr/local/mysql51以下にvarやetcやbinなどが作成され、
他のバージョンとフォルダを取りあって競合したりすることがなくなります
まさアプリの削除もmysql51を削除してしまえばざっくりきれいになります。
※/etc/my.cnfなど残ったり完全なアンインストールは難しいですが

こまかいバージョンをテストしながらインストールするにはやはり
/usr/localを基準にアプリのわかりやすい名前をつけたフォルダを作るのをお勧めします

なお、自作のシェルは他の方も書かれているように
/usr/local/binなどにしておくと、パスの設定が他人からも使いやすいので
便利ですが、逆に競合のことをかんがえると~(カレント)につくっておくのが
他人に迷惑をかけないやり方になります
    • good
    • 0

RedHat的な使い方は、



/var は可変容量のファイル置き場。つまり増えたり減ったり(普通は増えるだけだけど)するファイルを置く領域。おもにログファイルとか、データベースのデータとか、Webコンテンツとか。決してシステムログだけが使うという領域ではない。posgresもrpmで入れればデータは/var/lib/pgsql/以下ではなかったかと?
普通ここにプログラムは置かない。領域は充分目いっぱい確保しておく。

/usr は認識の通り。コンパイルして入れるアプリはここにデータ領域を置いたりするけど、私は絶対にやらない。シンボリックリンクを張ってでも/var以下に置く。なので通常ここはせいぜい5GBもあれば足りる。

自作スクリプトの場合、システム管理的はものは/usr/local/sbin/ とか、一般コマンド的なものは/usr/local/bin/で良いと思う。私はシステム管理的なものは、/root/bin/にまとめるようにしている。(移設やなんかが一発でできるので)
個人的なスクリプトならもちろん自分のホームディレクトリ以下だ。

結局はそれぞれの癖があるしそれがパテーション配分にも表れるんだけど、それゆえ他人がインストールしたシステムはしっくりこない場合は多い。
    • good
    • 0
この回答へのお礼

有り難うございます。

>自作スクリプトの場合、システム管理的はものは/usr/local/sbin/ とか、一般コマンド的なものは/usr/local/bin/で良いと思う。

業務的なものはどうでしょうか?
業務1、業務2があったとすれば
/usr/local/bin/gyoum1
/usr/local/bin/gyoum2
とかでしょうか。

あと、
・少し大きめのファイルをちょっと退避しておきたい
   プログラムの一時バックアップ
   データベースのダンプファイル
   ワーク的に使用するエリア
   など

・自作のプログラムから出力するログや一時ファイル


絶対にこうでないとイケないなんて事は無いのは承知です。
個人的な好みでも結構です。
参考までにどこに置くか意見をお聞かせ下さい。

お礼日時:2010/08/19 13:42

FHS




# 技術者ならば、これでわかるでしょう。
    • good
    • 2

Sun-OS,Solarisからunixを触ってるからか、ソフトは/usr/local/以下にインストールしますね。


/usr/local/bin
/usr/local/sbin
ですね。

/var以下はvariableの略か何かだったと思うので、システム関係以外では使わないですね。

ユーザーが作ったファイルは/home以下に、プログラムなら/home以下に置いて、/usr/local/binかsbinにシンボリックリンクを置きます。

最初に自分なりにルールを決めるだけで、何処に置くのが妥当というのは無いですね。
ただ、/varある程度空きがないとログが吐き出せないなどエラーが発生したような気がします。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2010/08/19 13:43

unix系にも方言みたいなものがあり、携わったOSによって利用者にも癖が出来ると思います。


一般的にユーザを作成すると/homeの下にそのユーザのディレクトリが出来ますから、そこを使うことになります。
root権限でインストールするソフトウエアなどは/usr/local下になるでしょう。
設定ファイルなどは /etcかまたは/usr/etcの下ですね。
var下は一時ファイルやログなどの保存場所的な感じかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2010/08/19 13:43

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

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

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

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

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

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

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

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

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

Aベストアンサー

(1)service --status-all

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

(2)chkconfig --list

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

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

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

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(を含む...続きを読む

QLinuxで自作バッチファイルの置く場所?

Linuxでshの構文のバッチ処理を記述したものをどこでも呼び出せるように実行パスの効いたところに置きたいのですが、Linuxの流儀を知らずに困っています。
どこにおけばスマートでしょうか?

使い方
>./biginner

例) ファイル名 biginner
chmod 705 biginner

中身)
#!/bin/sh

echo "I am beginner."

Aベストアンサー

いろいろな方法がありますが

自分のホームディレクトリ配下に「bin」というディレクトリを作成して

.bashrcや.bash_profileで

PATH=$PATH:$HOME/bin
export PATH

みたいにパスを通す方法をよくとります。
自作のシェルなどは、$HOME/bin配下に配置します。

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。

Qアプリケーションをインストールする場所

Linuxでアプリケーションをインストールする時、
どこにインストールしたらいいものか分からず困っています。
rpmの物は何も考えずrpmコマンドでインストールしているのですが、
tar.gz等の物は、どこに展開するのが一番いいのかな?
と思ってます。
インストールするアプリケーションの種類によってもまた違うんでしょうか??

みなさんはどうされているのか教えていただけないでしょうか。お願い致します。

また、root権限でインストールして、
それをどの一般ユーザーからも使えるようにするにはどうしたらよいでしょうか?
ブラウザをインストールする際に疑問に思いました。
こちらもご教授いただけたら幸いです。

Aベストアンサー

私の場合は、自分でパッケージrpm化したものであれば、/usrまたは/usr/local にインストールし、それ以外のものは/opt/(package name)にFHSに従ってインストールするようにしています。

ソースコードからインストールした場合で一番問題なのがちゃんとしたアンインストーラがないことだと思います。

従って、/opt配下にパッケージ毎に分割してインストールすることにより、削除時はそのディレクトリごとバッサリ消してしまうことで削除できます。

Apacheの場合には/opt配下にインストールするためにレイアウトというものが用意されているのでそれが一番簡単です。

$ ./configure --with-layout=opt

その他のアプリケーション、例えばproftpdだと、

$ ./configure --prefix=/opt/proftpd --sysconfdir=/etc/opt/proftpd --localstatedir=/var/opt/proftpd

ただ、実際のところは人好き好きだと思いますよ。

> また、root権限でインストールして、
> それをどの一般ユーザーからも使えるようにするにはどうしたらよいでしょうか?
> ブラウザをインストールする際に疑問に思いました。

どこにインストールしようと、.bashrcあたりでパスやLD_LIBRARY_PATH等を設定するとちゃんと起動できるはずです。

私の場合は、自分でパッケージrpm化したものであれば、/usrまたは/usr/local にインストールし、それ以外のものは/opt/(package name)にFHSに従ってインストールするようにしています。

ソースコードからインストールした場合で一番問題なのがちゃんとしたアンインストーラがないことだと思います。

従って、/opt配下にパッケージ毎に分割してインストールすることにより、削除時はそのディレクトリごとバッサリ消してしまうことで削除できます。

Apacheの場合には/opt配下にインストールするためにレイ...続きを読む

Qapt-get install ****** でinstallしたものをuninstallするには?

御世話になります。
vncserverだけをinstallするつもりが
誤って
apt-get install vncとうってしまいました。
これをuninstallしたいのですが
どのようにすればよろしいでしょうか?

教えて下さい。

Aベストアンサー

# apt-get remove パッケージ名
では、設定ファイルは削除されずに残ります。

完全に削除するときは、
# apt-get --purge remove パッケージ名
です。

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Qシェルスクリプト実行で”そのようなファイルやディレクトリはありません”と出ます。

以下の単純なシェルスクリプトを実行しようとしています。
-------------------
#!/bin/sh
echo ok
-------------------
そのとき、
bad interpreter: そのようなファイルやディレクトリはありません
と出てしまいます。

・which sh で確認すると /bin/sh です。
・Windowsで作ったファイルをFTPのアスキーモードで転送しています。

(ものすごく単純なミスをしてるのかもしれませんが、)
よろしくお願いします。

Aベストアンサー

1行目の「/bin/sh」のうしろにCRが入っていると、このような現象が発生します。
FTPの転送モードが間違いなくアスキーモードになっているか、
転送後のファイルにCRがついていないかなど、再度確認してみてください。

CR以外のコントロールコードや全角スペースなどがついていても似た現象が起こります。
その場合はエラーメッセージが多少異なるはずですが、併せて確認しておくと良いかと思います。

Qレッドハットのバージョン確認方法

自分のサーバで使用しているREDHATのバージョン確認はどうすればいいのでしょうか?

more /etc/issue
とやっても英文しか出てきませんでした。

uname -all
でもカーネルのバージョンは出るのですが、REDHATのバージョンは出ませんでした。

Aベストアンサー

> more /etc/issue
> とやっても英文しか出てきませんでした。

その英文にはRedHatのバージョンは書いてなかったのですか?
書いていなかったとしたら、管理者により編集されている可能性
がありますね。

cat /etc/redhat-release

ではいかがでしょう?
やっぱり英文ですけど。

rpm -q redhat-release

でもいいかも

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む


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

人気Q&Aランキング

おすすめ情報