よろしくお願いします。
初歩すぎて恥ずかしいのですが /etc/environmentの書き方を教えて頂けないでしょうか。
やりたいことは起動時にPATHを追加したい。この1点です。
(/etc/environment) PATH="/path/to/dir1" PATH="/path/to/dir2"
上記のように記述後、設定を読み込ませて
source /etc/environment
OS再起動
reboot
起動後確認すると良い。・・・この認識なのですが合っていますでしょうか?
(/etc/environment)の記述の方法で現在のPATHに追記する、という風に書いて再起動しました
PATH="$PATH:/path/to/dir1"
OSは起動しますが次のエラーでsudoなどコマンドを受け付けてくれなくなります。
-bash: ls: command not found /usr/libexec/grepconf.sh: line 5: grep: command not found -bash: uname: command not found -bash: ps: command not found
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/12 08:15
回答4件
0
/etc/environment
は、/etc/profile
や~/.bashrc
などのようにシェルで実行されるファイルでは無いです。
$PATH
で環境変数PATH
の値を参照できるのは、シェルの機能なので、/etc/environment
には通用しません。
あくまで、環境変数を変数名=値
で記述できるだけです。シェルでなくPAMという認証機能が読み込みます。
投稿2021/10/12 10:08
総合スコア85989
0
ベストアンサー
/etc/environment
は下記のようにシステムパスを含めて書きますが、できるだけこのファイルを変更するのはやめたほうがいいです。OSの動作を知るために検証としてなら問題ありませんが、セキュリティーホールを作ることになりかねないです。
パスの書き方
異なるパスはスペースなしの :
でつなぎます。(Windowsは ;
です)
sh
1PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/path/to/dir1:/path/to/dir2"
ユーザー環境設定
Windowsをご使用でしたら、システム環境設定のウィンドウで上部がユーザー環境設定です。Linuxでは ~/.bash_profile
や ~/profile
にあたります。ユーザー固有の環境設定を書きます。
なお、ユーザー環境でシステムパスを拡張するには下記のように書きます。
sh
1export PATH="$PATH:/path/to/dir1:/path/to/dir2"
システム環境設定
そして、システム環境設定のウィンドウで下部がシステムパスです。Linuxではこれが /etc/environment
にあたります。システム全体で使用する環境設定を書きます。
アプリケーション環境設定
通常、Linuxではメインプロセスから起動した環境変数はサブプロセスと共存可能です。
sh
1export SOME_ENV=... 2echo $SOME_ENV
sudoでエラーになる理由
まず、システムパスがとおっていないことになるので、ls
をコマンドとして認識できなくなります。この状態でも /bin/ls
とすれば認識はします。
また、sudo は初期設定では独自パスに切り替わります。 /etc/sudoers
に Defaults secure_path="sudo専用システムパス"
が書かれています。
余談ですが、以前にRubyのバージョン管理を使用した起動アプリケーションについてご質問されていたと思います。 Python や Ruby のバージョン管理は少々特殊です。なぜなら、普通のグローバル変数とシステム環境変数も区別がないため、意図せずにプログラム起動中に環境が切り替わってしまうことを防ぐ設計になっています。
通常、本番環境ではバージョン管理を使わないでパッケージインストールすると思いますので、上記のようなことはあまり気にする必要はありません。(ものによってはコンパイルしますが、コンパイルするとメンテナンスが大変です)
投稿2021/10/12 08:27
編集2021/10/12 08:37総合スコア1652
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/12 09:09 編集
2021/10/12 09:30 編集
2021/10/12 09:42 編集
2021/10/12 09:59
退会済みユーザー
2021/10/20 20:43
2021/10/20 22:30
退会済みユーザー
2021/10/20 23:13
0
正当なやり方ではないと思いますが・・・。
itagagaki さんが おっしゃっているように、
bash
1echo $PATH
してその内容を書き留めます。
わたしの環境の場合
plain
1/home/hogehoge/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
でした。
最初のは、ユーザのホームの定義なのではしょって「/etc/environment」に
bash
1PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/path/to/dir1:/path/to/dir2
と記述します。
reboot 後、sudo も効きますし
bash
1$ echo $PATH 2/home/hogehoge/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/path/to/dir1:/path/to/dir2
となりました。
投稿2021/10/12 08:24
総合スコア1638
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/12 08:27
2021/10/12 08:31
2021/10/12 08:56
0
シェルのスタートアップ時の環境変数PATHの設定は質問に書いてある方法で間違っていないのですが
(あくまでもシェルのためだけの設定としては、ですが)
そのようにした結果が
/opt/ruby3/rubies/ruby-3.0.2/bin/gem
なら、どこかでPATHの設定に間違いがあるのでしょうね。
これだと、/opt/ruby3/rubies/ruby-3.0.2/bin/gem
にあるコマンドしか実行できません(コマンド名では)。
まず、現在の状態で各基本コマンドを実行するには、
/usr/bin/ls
あるいは
/bin/ls
などのようにフルパスで指定すれば実行はできます。
で、シェルのスタートアップ時の実行ファイル(シェルがbashなら~/.bashrc
など)をよく見なおしてください。
上記のとおり基本は間違っていないので、実際にスタートアップファイルに書かれたコマンド行に何かしらの間違いがあるのだと思います。
投稿2021/10/12 08:22
編集2021/10/12 08:23総合スコア8402
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。