目次 >> Shell
ここでは、Linuxのシェル関連の情報をまとめる。
/etc/profileで設定する。
ログイン時には、~/.bash_profileがあれば読み込み、無ければ、~/.bash_loginがあれば読み込み、無ければ~/.profileが読み込まれる。
また、bashが起動するたびに、.bashrcが読み込まれる。
なお、ログアウト時には、~/.bash_logoutが読み込まれる。
2通りある。
一つ目は、
export 環境変数=値
二つ目は
シェル変数=値 export シェル変数
setコマンドでシェル変数を、printenvで環境変数を表示できる。
HISTSIZEはヒストリに保存するコマンド数を指定する。
HISTFILESIZEはヒストリファイルに保存するコマンド数を指定する。
HISTCONTROLはignoredupsで重複するものを記録しない。ignorespaceで空白などで始まるコマンドは記録しない。ignorebothでその両方とも指定。
.bashrcなどには下記のように書く
HISTSIZE=10000 HISTFILESIZE=10000 HISTCONTROL=ignoreboth export HISTSIZE HISTFILESIZE HISTCONTROL
コマンド履歴に残したくないコマンドは
HISTIGNORE=ls:pwd:history export HISTIGNORE
のように:で区切って書いておくと、記録されなくなる。
パスを追加するには、例えば/home/hogehogeというパスを追加するには、
PATH="$PATH":/home/hogehoge
使用しているターミナルによっては、英数字以外の文字で文字化けする場合がある。
下記の設定をすると、英語のみになる。
export LANG=C
もしくは
unset LANG
で解除してもよい。
foo.shファイルを実行するには、もしパーミッションで実行可能な場合は./foo.shで実行できる。実効権限がない場合はsh foo.shで実行できる。
foo.shで設定される環境変数を反映させたい場合は、source foo.shとする。
シェルスクリプトの変数に改行を含めることはできる。
$ hoge="aaa
> bbb
> ccc"
これをechoなどで表示させる際に、変数をクォーテーションで囲むかどうかで結果が変わってくる。
クォーテーションで囲まない場合、下記のように改行は無視される。
$ echo ${hoge}
aaa bbb ccc
一方クォーテーションで囲むと、改行も含めて表示される。
$ echo "${hoge}"
aaa
bbb
ccc
もっとも簡単なのは
$ echo $RANDOM
29373
である。もしより精度の高い、/dev/randomや/dev/urandomを使いたい場合は、
$ od -An -N2 -i /dev/random
43874
あるいは
$ od -vAn -N4 -tu4 < /dev/urandom
3557431341
を使うとよい。なお、/dev/randomは/dev/urandomよりより良い乱数を生成するが、多数生成する場合、待たされることがある。一般的には、/dev/urandomがおすすめである。
sudoを使ってコマンドを実行した場合、デフォルトでは実行元のユーザの環境変数は引き継がれないので、たとえばrootで実行したいプログラムのパスなどを設定してあっても、それがsudo時には反映されないので不便である。
環境変数を引き継ぐためには
/etc/sudoers
というファイルを編集する。このファイルの中に、
Defaults env_reset
という箇所がある。これは環境変数をリセットするという意味である。
すべてのユーザーで環境変数を引き継ぐのは、セキュリティ上よくないので、この箇所は変更しない。
代わりに、引き継ぎたいユーザ(この場合、ユーザー名はhoge)を下記のように指定する。
Defaults:hoge !env_rese
最終更新日