「設定 - Bash」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

Wiki がページ「Bashのコマンド履歴の活用」を「設定 - Bash」に、リダイレクトを残さずに移動しました
編集の要約なし
1行目: 1行目:
== 概要 ==
Bash (Bourne Again Shell) は、GNU Projectが開発したUnix系シェルであり、多くのLinuxディストリビューション (RHEL, Debian, SUSE等) でデフォルトのシェルとして採用されている。<br>
sh (Bourne Shell) の上位互換として設計されており、コマンドライン操作とシェルスクリプト実行の両方に使われる。<br>
<br>
Bashの設定ファイルには以下に示す種類がある。<br>
ファイルの読み込み順序はシェルの種類によって異なる。<br>
<br>
* /etc/profile
*: システム全体のログインシェル向け設定ファイル
*: 全ユーザに適用される。
* /etc/bash.bashrc
*: システム全体の対話シェル向け設定ファイル
*: 全ユーザに適用される。
* ~/.bash_profile
*: ユーザ固有のログインシェル向け設定ファイル
*: ログイン時に1回だけ読み込まれる。
* ~/.bashrc
*: ユーザ固有の対話シェル向け設定ファイル
*: 新しい端末を開くたびに読み込まれる。
* ~/.bash_logout
*: ログインシェル終了時に実行される設定ファイル
<br>
ログインシェルは /etc/profile と ~/.bash_profile を読み込む。<br>
対話シェル (非ログイン) は /etc/bash.bashrc と ~/.bashrc を読み込む。<br>
日常的なカスタマイズは ~/.bashrc に記述するのが一般的である。<br>
<br>
設定を反映するには <code>source ~/.bashrc</code> または <code>exec bash</code> を実行、または、再ログインする。<br>
<code>export</code> を付けた変数は子プロセスへ継承され、付けない変数は現在のシェルのみで有効となる。<br>
<br>
設定ファイルを編集する前にバックアップを取ることを推奨する。<br>
構文エラーが発生するとログイン不能になる場合があるため、編集後は必ず動作確認を行うこと。<br>
<br><br>
== 重複する履歴を保存しない ==
== 重複する履歴を保存しない ==
重複するコマンドは最新の1件のみに限定する。<br>
重複するコマンドは最新の1件のみに限定する。<br>
ホームディレクトリの.bashrcを開き、以下の設定を追加する。<br>
<syntaxhighlight lang="sh">
  # 重複履歴を無視
  # 重複履歴を無視
  export HISTCONTROL=ignoredups  
  export HISTCONTROL=ignoredups
</syntaxhighlight>
<br><br>
<br><br>


== 空白から始めたコマンドを保存しない ==
== 空白から始めたコマンドを保存しない ==
履歴に保存したくないコマンドは空白から記述する。<br>
履歴に保存したくないコマンドは空白から記述する。<br>
ホームディレクトリの.bashrcを開き、以下の設定を追加する。<br>
<syntaxhighlight lang="sh">
  # 空白から始めたコマンドを無視
  # 空白から始めたコマンドを無視
  export HISTCONTROL=ignorespace
  export HISTCONTROL=ignorespace
</syntaxhighlight>
<br><br>
<br><br>


== 頻繁に使うコマンドは保存しない ==
== 頻繁に使うコマンドは保存しない ==
頻繁に使うコマンドは履歴保存対象から外す。<br>
頻繁に使うコマンドは履歴保存対象から外す。<br>
ホームディレクトリの.bashrcを開き、以下の設定を追加する。<br>
<syntaxhighlight lang="sh">
  export HISTIGNORE="fg*:bg*:history*:cd*:ls*:grep*"
  export HISTIGNORE="fg*:bg*:history*:cd*:ls*:grep*"
</syntaxhighlight>
<br><br>
<br><br>


== 履歴の保存件数を増加する ==
== 履歴の保存件数を増加する ==
<syntaxhighlight lang="sh">
  export HISTSIZE=10000
  export HISTSIZE=10000
</syntaxhighlight>
<br><br>
<br><br>


== ヒストリに時刻を導入する ==
== ヒストリに時刻を導入する ==
コマンド履歴にコマンドを使った時刻を導入することが出来る。<br>
コマンド履歴にコマンドを使った時刻を導入することが出来る。<br>
ホームディレクトリの.bashrcを開き、以下の設定を追加する。<br>
<syntaxhighlight lang="sh">
  HISTTIMEFORMAT='%Y%m%d %T';
  HISTTIMEFORMAT='%Y%m%d %T';
  export HISTTIMEFORMAT
  export HISTTIMEFORMAT
</syntaxhighlight>
<br><br>
== 履歴ファイルの最大行数を設定する ==
HISTSIZEはメモリ内の履歴行数、HISTFILESIZEは履歴ファイル (~/.bash_history) の最大行数である。<br>
通常はHISTSIZEの2倍程度に設定する。<br>
<br>
<syntaxhighlight lang="sh">
export HISTSIZE=10000
export HISTFILESIZE=20000
</syntaxhighlight>
<br><br>
== シェル終了時に履歴を追記する ==
デフォルトではシェル終了時に履歴ファイルが上書きされ、複数ターミナル使用時に履歴が失われる場合がある。<br>
histappendオプションを有効化することで、上書きでなく追記となる。<br>
<br>
<syntaxhighlight lang="sh">
shopt -s histappend
</syntaxhighlight>
<br><br>
== 複数端末で履歴をリアルタイム共有する ==
PROMPT_COMMANDを利用して、コマンド実行のたびに履歴をファイルへ追記し、他端末からの履歴も読み込む。<br>
これにより複数のターミナル間で履歴がリアルタイム共有される。<br>
<br>
<syntaxhighlight lang="sh">
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
</syntaxhighlight>
<br><br>
== 重複と空白始まりを同時に無視する ==
HISTCONTROLにignorebothを指定することで、ignoredupsとignorespaceの両方を同時に有効化できる。<br>
<br>
<syntaxhighlight lang="sh">
export HISTCONTROL=ignoreboth
</syntaxhighlight>
<br><br>
== ディレクトリ名のみで移動する (autocd) ==
shoptのautocdを有効にすると、ディレクトリ名を入力するだけでcdコマンドを省略して移動できる。<br>
<br>
<syntaxhighlight lang="sh">
shopt -s autocd
</syntaxhighlight>
<br><br>
== cdコマンドのタイプミスを補正する ==
cdspellを有効にすると、cd実行時のディレクトリ名のスペルミスを自動補正する。<br>
dirspellは補完時のスペル補正である。<br>
<br>
<syntaxhighlight lang="sh">
shopt -s cdspell
shopt -s dirspell
</syntaxhighlight>
<br><br>
== ターミナルサイズの自動更新 ==
checkwinsizeを有効にすると、ターミナルをリサイズした際にLINESとCOLUMNS環境変数が自動更新される。<br>
プロンプト表示崩れを防ぐ。<br>
<br>
<syntaxhighlight lang="sh">
shopt -s checkwinsize
</syntaxhighlight>
<br><br>
== 再帰的なグロブパターンを有効化する ==
globstarを有効にすると、<code>**</code> パターンで任意の深さのディレクトリを再帰的にマッチできる。<br>
例えば <code>ls **/*.txt</code> と入力することで、全階層の .txt ファイルを列挙できる。<br>
<br>
<syntaxhighlight lang="sh">
shopt -s globstar
</syntaxhighlight>
<br><br>
== グロブパターンの大文字小文字を無視する ==
nocaseglobを有効にすると、ファイル名展開で大文字小文字を区別しなくなる。<br>
<br>
<syntaxhighlight lang="sh">
shopt -s nocaseglob
</syntaxhighlight>
<br><br>
== 拡張グロブパターンを有効化する ==
extglobを有効にすると、<code>?(pattern)</code>、<code>*(pattern)</code>、<code>+(pattern)</code> 等の拡張パターンが利用できる。<br>
<br>
<syntaxhighlight lang="sh">
shopt -s extglob
</syntaxhighlight>
<br><br>
== プロンプトをカスタマイズする ==
PS1環境変数でプロンプト表示を変更できる。<br>
エスケープシーケンス (\u: ユーザ名、\h: ホスト名、\w: カレントディレクトリ、\$: 一般ユーザは$、rootは#) を利用する。<br>
<br>
<syntaxhighlight lang="sh">
export PS1="\u@\h:\w\$ "
</syntaxhighlight>
<br>
カラー化する場合は <code>\[\033[コード m\]</code> と <code>\[\033[0m\]</code> で囲む。<br>
<code>\[</code> と <code>\]</code> で囲むのは、Bashがプロンプト幅を正しく計算するためである。<br>
<br>
<syntaxhighlight lang="sh">
export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
</syntaxhighlight>
<br><br>
== 継続行プロンプトを設定する ==
複数行コマンド入力時の2行目以降のプロンプトはPS2で指定する。<br>
<br>
<syntaxhighlight lang="sh">
export PS2="> "
</syntaxhighlight>
<br><br>
== エイリアスを設定する ==
頻繁に使うコマンドの組み合わせはaliasで短縮できる。<br>
<br>
代表的な例を以下に示す。<br>
<br>
<syntaxhighlight lang="sh">
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias grep='grep --color=auto'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
</syntaxhighlight>
<br><br>
== PATHにディレクトリを追加する ==
自作スクリプトやローカルツールのディレクトリをPATHに追加する。<br>
<br>
$HOME/binをPATHの先頭に追加する例を以下に示す。<br>
<br>
<syntaxhighlight lang="sh">
export PATH="$HOME/bin:$PATH"
</syntaxhighlight>
<br><br>
== デフォルトエディタを指定する ==
EDITORとVISUAL環境変数で、git、visudo、crontab等が起動するデフォルトエディタを指定する。<br>
export EDITOR=vim
export VISUAL=vim
<br><br>
== ページャのカラー表示を有効化する ==
PAGERで使われるlessコマンドに、ANSIカラーコード表示を有効化する -R オプションを指定する。<br>
export LESS='-R'
<br><br>
== ロケールを設定する ==
LANGとLC_ALLでロケール (言語、文字コード) を指定する。<br>
日本語UTF-8環境の例を以下に示す。<br>
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
<br><br>
== bash-completionを有効化する ==
bash-completionパッケージをインストール後、.bashrcに以下を記述することでgit、docker、kubectl等のコマンド補完が利用できる。<br>
if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi
<br><br>
== readlineをカスタマイズする (.inputrc) ==
ホームディレクトリに.inputrcを作成すると、Bashの行編集 (readline) の動作をカスタマイズできる。<br>
補完の大文字小文字無視や履歴のインクリメンタル検索等を設定できる。<br>
<br>
以下は <u>~/.inputrc</u> の設定例である。<br>
<br>
<syntaxhighlight lang="sh">
$include /etc/inputrc
set completion-ignore-case on
set show-all-if-ambiguous on
set colored-stats on
"\C-p": history-search-backward
"\C-n": history-search-forward
</syntaxhighlight>
<br><br>
== lsコマンドのカラー表示を有効化する ==
<code>dircolors</code> コマンドで環境変数 <code>LS_COLORS</code> を生成し、<code>ls --color=auto</code> でファイル種別に応じた色表示を行う。<br>
<br>
<syntaxhighlight lang="sh">
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
fi
</syntaxhighlight>
<br><br>
== デフォルトファイル権限を設定する (umask) ==
umaskで新規作成ファイル・ディレクトリのデフォルト権限を設定する。<br>
<br>
022を指定するとファイルは644、ディレクトリは755となる。<br>
グループ共有環境では002 (ファイル664、ディレクトリ775) を使う。<br>
<br>
umask 022
<br><br>
== アイドル時に自動ログアウトする (TMOUT) ==
TMOUTで無操作状態が続いた場合の自動ログアウトまでの秒数を指定する。<br>
セキュリティ目的で利用する。<br>
<code>readonly</code> 指定でユーザによる変更を禁止できる。<br>
<br>
<syntaxhighlight lang="sh">
export TMOUT=300
readonly TMOUT
</syntaxhighlight>
<br><br>
== リソース制限を設定する (ulimit) ==
ulimitでプロセスのリソース使用上限を設定する。<br>
<code>ulimit -a</code> で現在の制限を確認できる。コアダンプ無効化やオープンファイル数の上限変更等に利用する。<br>
<br>
<syntaxhighlight lang="sh">
ulimit -c 0
ulimit -n 4096
</syntaxhighlight>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]

2026年4月29日 (水) 02:38時点における版

概要

Bash (Bourne Again Shell) は、GNU Projectが開発したUnix系シェルであり、多くのLinuxディストリビューション (RHEL, Debian, SUSE等) でデフォルトのシェルとして採用されている。
sh (Bourne Shell) の上位互換として設計されており、コマンドライン操作とシェルスクリプト実行の両方に使われる。

Bashの設定ファイルには以下に示す種類がある。
ファイルの読み込み順序はシェルの種類によって異なる。

  • /etc/profile
    システム全体のログインシェル向け設定ファイル
    全ユーザに適用される。
  • /etc/bash.bashrc
    システム全体の対話シェル向け設定ファイル
    全ユーザに適用される。
  • ~/.bash_profile
    ユーザ固有のログインシェル向け設定ファイル
    ログイン時に1回だけ読み込まれる。
  • ~/.bashrc
    ユーザ固有の対話シェル向け設定ファイル
    新しい端末を開くたびに読み込まれる。
  • ~/.bash_logout
    ログインシェル終了時に実行される設定ファイル


ログインシェルは /etc/profile と ~/.bash_profile を読み込む。
対話シェル (非ログイン) は /etc/bash.bashrc と ~/.bashrc を読み込む。
日常的なカスタマイズは ~/.bashrc に記述するのが一般的である。

設定を反映するには source ~/.bashrc または exec bash を実行、または、再ログインする。
export を付けた変数は子プロセスへ継承され、付けない変数は現在のシェルのみで有効となる。

設定ファイルを編集する前にバックアップを取ることを推奨する。
構文エラーが発生するとログイン不能になる場合があるため、編集後は必ず動作確認を行うこと。


重複する履歴を保存しない

重複するコマンドは最新の1件のみに限定する。

 # 重複履歴を無視
 export HISTCONTROL=ignoredups



空白から始めたコマンドを保存しない

履歴に保存したくないコマンドは空白から記述する。

 # 空白から始めたコマンドを無視
 export HISTCONTROL=ignorespace



頻繁に使うコマンドは保存しない

頻繁に使うコマンドは履歴保存対象から外す。

 export HISTIGNORE="fg*:bg*:history*:cd*:ls*:grep*"



履歴の保存件数を増加する

 export HISTSIZE=10000



ヒストリに時刻を導入する

コマンド履歴にコマンドを使った時刻を導入することが出来る。

 HISTTIMEFORMAT='%Y%m%d %T';
 export HISTTIMEFORMAT



履歴ファイルの最大行数を設定する

HISTSIZEはメモリ内の履歴行数、HISTFILESIZEは履歴ファイル (~/.bash_history) の最大行数である。
通常はHISTSIZEの2倍程度に設定する。

 export HISTSIZE=10000
 export HISTFILESIZE=20000



シェル終了時に履歴を追記する

デフォルトではシェル終了時に履歴ファイルが上書きされ、複数ターミナル使用時に履歴が失われる場合がある。
histappendオプションを有効化することで、上書きでなく追記となる。

 shopt -s histappend



複数端末で履歴をリアルタイム共有する

PROMPT_COMMANDを利用して、コマンド実行のたびに履歴をファイルへ追記し、他端末からの履歴も読み込む。
これにより複数のターミナル間で履歴がリアルタイム共有される。

 shopt -s histappend
 PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"



重複と空白始まりを同時に無視する

HISTCONTROLにignorebothを指定することで、ignoredupsとignorespaceの両方を同時に有効化できる。

 export HISTCONTROL=ignoreboth



ディレクトリ名のみで移動する (autocd)

shoptのautocdを有効にすると、ディレクトリ名を入力するだけでcdコマンドを省略して移動できる。

 shopt -s autocd



cdコマンドのタイプミスを補正する

cdspellを有効にすると、cd実行時のディレクトリ名のスペルミスを自動補正する。
dirspellは補完時のスペル補正である。

 shopt -s cdspell
 shopt -s dirspell



ターミナルサイズの自動更新

checkwinsizeを有効にすると、ターミナルをリサイズした際にLINESとCOLUMNS環境変数が自動更新される。
プロンプト表示崩れを防ぐ。

 shopt -s checkwinsize



再帰的なグロブパターンを有効化する

globstarを有効にすると、** パターンで任意の深さのディレクトリを再帰的にマッチできる。
例えば ls **/*.txt と入力することで、全階層の .txt ファイルを列挙できる。

 shopt -s globstar



グロブパターンの大文字小文字を無視する

nocaseglobを有効にすると、ファイル名展開で大文字小文字を区別しなくなる。

 shopt -s nocaseglob



拡張グロブパターンを有効化する

extglobを有効にすると、?(pattern)*(pattern)+(pattern) 等の拡張パターンが利用できる。

 shopt -s extglob



プロンプトをカスタマイズする

PS1環境変数でプロンプト表示を変更できる。
エスケープシーケンス (\u: ユーザ名、\h: ホスト名、\w: カレントディレクトリ、\$: 一般ユーザは$、rootは#) を利用する。

 export PS1="\u@\h:\w\$ "


カラー化する場合は \[\033[コード m\]\[\033[0m\] で囲む。
\[\] で囲むのは、Bashがプロンプト幅を正しく計算するためである。

 export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "



継続行プロンプトを設定する

複数行コマンド入力時の2行目以降のプロンプトはPS2で指定する。

 export PS2="> "



エイリアスを設定する

頻繁に使うコマンドの組み合わせはaliasで短縮できる。

代表的な例を以下に示す。

 alias ll='ls -alF'
 alias la='ls -A'
 alias l='ls -CF'
 alias grep='grep --color=auto'
 alias rm='rm -i'
 alias cp='cp -i'
 alias mv='mv -i'



PATHにディレクトリを追加する

自作スクリプトやローカルツールのディレクトリをPATHに追加する。

$HOME/binをPATHの先頭に追加する例を以下に示す。

 export PATH="$HOME/bin:$PATH"



デフォルトエディタを指定する

EDITORとVISUAL環境変数で、git、visudo、crontab等が起動するデフォルトエディタを指定する。

export EDITOR=vim
export VISUAL=vim



ページャのカラー表示を有効化する

PAGERで使われるlessコマンドに、ANSIカラーコード表示を有効化する -R オプションを指定する。

export LESS='-R'



ロケールを設定する

LANGとLC_ALLでロケール (言語、文字コード) を指定する。
日本語UTF-8環境の例を以下に示す。

export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8



bash-completionを有効化する

bash-completionパッケージをインストール後、.bashrcに以下を記述することでgit、docker、kubectl等のコマンド補完が利用できる。

if [ -f /usr/share/bash-completion/bash_completion ]; then
   . /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
   . /etc/bash_completion
fi



readlineをカスタマイズする (.inputrc)

ホームディレクトリに.inputrcを作成すると、Bashの行編集 (readline) の動作をカスタマイズできる。
補完の大文字小文字無視や履歴のインクリメンタル検索等を設定できる。

以下は ~/.inputrc の設定例である。

 $include /etc/inputrc
 set completion-ignore-case on
 set show-all-if-ambiguous on
 set colored-stats on
 "\C-p": history-search-backward
 "\C-n": history-search-forward



lsコマンドのカラー表示を有効化する

dircolors コマンドで環境変数 LS_COLORS を生成し、ls --color=auto でファイル種別に応じた色表示を行う。

 if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
 fi



デフォルトファイル権限を設定する (umask)

umaskで新規作成ファイル・ディレクトリのデフォルト権限を設定する。

022を指定するとファイルは644、ディレクトリは755となる。
グループ共有環境では002 (ファイル664、ディレクトリ775) を使う。

umask 022



アイドル時に自動ログアウトする (TMOUT)

TMOUTで無操作状態が続いた場合の自動ログアウトまでの秒数を指定する。
セキュリティ目的で利用する。
readonly 指定でユーザによる変更を禁止できる。

 export TMOUT=300
 readonly TMOUT



リソース制限を設定する (ulimit)

ulimitでプロセスのリソース使用上限を設定する。
ulimit -a で現在の制限を確認できる。コアダンプ無効化やオープンファイル数の上限変更等に利用する。

 ulimit -c 0
 ulimit -n 4096