GNU/Linux
シェル
サーチ…
前書き
シェルはプロンプトに応答してプログラムを実行します。コマンドを実行すると、シェルはプログラムを検索して実行します。たとえば、コマンドlsを実行すると、シェルはlsというユーティリティー/プログラムを検索し、シェルでそれを実行します。ユーティリティーで提供する引数とオプションは、取得した結果に影響を与える可能性があります。シェルはCLIまたはコマンドラインインターフェイスとも呼ばれます。
デフォルトシェルの変更
最新のディストリビューションには、BASH( B ourne A gain SH ell)がプリインストールされ、デフォルトシェルとして設定されています。
Linuxのシェルを変更するコマンド(実際には実行可能なバイナリ、ELF)はchsh
( ch ange sh ell)です。
まず、 chsh -l
コマンドを使用して、どのシェルがすでにマシンにインストールされ、構成されているかを調べることができます。これにより、次のような結果が出力されます。
[user@localhost ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish
いくつかのLinuxディストリビューションでは、 chsh -l
は無効です。この場合、使用可能なすべてのシェルのリストは/ etc / shellsファイルにあります。 cat
ファイルの内容を表示することができます:
[user@localhost ~]$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish
これで新しいデフォルトシェル( fish
など)を選択し、 chsh -s
を使って設定することができます。
[user@localhost ~]$ chsh -s /usr/bin/fish
Changing shell for user.
Password:
Shell changed.
今や残っていることは、ログオフ・ログオン・サイクルを実行し、新しいデフォルト・シェルを楽しむことです。
別のユーザーのデフォルトシェルを変更したい場合、マシンに対して管理権限を持っている場合は、 root
としてchsh
を使用してこれを実行できます。したがって、 user_2
のデフォルトのシェルをfishに変更したいと仮定すると、前と同じコマンドを使用しますが、他のユーザーのユーザー名であるchsh -s /usr/bin/fish user_2
ます。
現在のデフォルトシェルが何であるかを調べるために、デフォルトシェルへのパスを指し示す$SHELL
環境変数を見ることができるので、変更後、これと同様の結果が得られることが期待されます。
~ echo $SHELL
/usr/bin/fish
chsh
オプション:
-s shell
シェルをログインシェルとして設定します。
-l
、-- --list-shells
/ etc / shellsにリストされているシェルのリストを表示して終了します。
-h
、-- --help
使用法のメッセージを印刷して終了します。
-v
、-- --version
バージョン情報を出力して終了します。
基本シェルユーティリティ
シェルプロンプトのカスタマイズ
デフォルトのコマンドプロンプトは、異なって見えるように変更することができます。現在のディレクトリが長い場合、デフォルトのコマンドプロンプトが大きくなりすぎます。これらの場合、 PS1
を使用すると便利になります。きれいでエレガントな短いカスタマイズされたコマンド。下記の表では、さまざまな形式のシェルプロンプトを表示するためにいくつかの引数とともにPS1
が使用されています。デフォルトのコマンドプロンプトは次のようになります: user@host ~ $
bruce@gotham ~ $
私の場合、これは次のようになります: bruce@gotham ~ $
。それは以下の表に従って変更することができます:
コマンド | ユーティリティ |
---|---|
PS1 = '\ w $' | ディレクトリ名として~ $ shellプロンプト。この場合、ルートディレクトリはルートです。 |
PS1 = '\ h $' | ホスト名としてgotham $ シェルプロンプト |
PS1 = '\ u $' | ユーザー名としてbruce $ shellプロンプト |
PS1 = '\ t $' | 22:37:31 $ シェル形式の24時間形式のプロンプト |
PS1 = '@ $' | 10:37 PM シェルプロンプト(12時間形式) |
PS1 = '! $ ' | 732 は、シェルプロンプトの代わりにコマンドの履歴番号を表示します |
PS1 = 'おやすみ$' | dude $ あなたが好きなように促しシェルが表示されます |
いくつかの基本的なシェルコマンド
コマンド | ユーティリティ |
---|---|
Ctrl-k | カット/キル |
Ctrl-y | ヤンク/ペースト |
Ctrl-a | 行の先頭にカーソルを移動します |
Ctrl-e | 行末にカーソルが移動します |
Ctrl-d | カーソルの後ろ/にある文字を削除します |
Ctrl-l | 画面/端末をクリアする |
Ctrl-u | プロンプトとカーソルの間のすべてをクリアします |
Ctrl-_ | コマンドラインで最後に入力したものを取り消します |
Ctrl-c | フォアグラウンドで実行中のジョブ/プロセスを中断/停止する |
Ctrl-r | 歴史の逆の検索 |
~/.bash_history | シェルで使用された最後の500個のコマンド/イベントを格納します。 |
history | コマンド履歴を表示します |
history | grep <key-word> | キーワード<key-word>を持つ履歴内のすべてのコマンドを表示します(過去に使用されたコマンドの一部を覚えている場合に便利です) |
独自のコマンドエイリアスを作成する
bashで長いコマンドを使用することに飽きた場合は、独自のコマンドエイリアスを作成することができます。
これを行う最善の方法は、ホームフォルダに.bash_aliasesというファイルを変更する(存在しない場合は作成する)ことです。一般的な構文は次のとおりです。
alias command_alias='actual_command'
ここでactual_command
は名前を変更するコマンドで、 command_alias
は与えられた新しい名前です。例えば
alias install='sudo apt-get -y install'
新しいコマンドエイリアスのinstall
を実際のコマンドsudo apt-get -y install
マップします。つまり、ターミナルでinstallを使用すると、これはbashによってsudo apt-get -y installと解釈されます。
あなたのシステム上でファイルを探す
bashを使うと、 locate
コマンドでファイルを簡単に見つけることができます。たとえば、ファイルmykey.pemを探しているとします。
locate mykey.pem
ファイルに奇妙な名前が付いていることがあります。たとえば、 random7897_mykey_0fidw.pem
ようなファイルがあるかもしれません。このファイルを探していて、mykeyとpemの部分だけを覚えているとします。次のようなパイプを使ってlocate
コマンドをgrep
と組み合わせることができlocate
:
locate pem | grep mykey
これらの両方を含むすべての結果をもたらすだろう。
すべてのシステムにlocate
ユーティリティがインストールされているわけではなく、多くのユーティリティではlocate
ユーティリティが有効になっていないことに注意してください。 locate
はシステムを定期的にスキャンし、その上にあるすべてのファイルの名前と場所をキャッシュするため、高速かつ効率的ですが、そのデータ収集が有効になっていないと何も教えてくれません。ファイルシステム上のファイルに関するキャッシュされた情報を更新するために、手動でファイルシステムのスキャンを開始するためにupdatedb
を使用することができます。
作業用のlocate
がない場合は、 find
ユーティリティに戻ってください。
find / -name mykey.pem -print
locate mykey.pem
とほぼ同じですが、キャッシュされたデータを使用するのではなく、問題のファイルに対してファイルシステムを実行するたびにファイルシステムをスキャンするlocate mykey.pem
があります。これは明らかに遅く、効率は低くなりますが、よりリアルタイムです。 find
ユーティリティはファイルの検索よりもはるかに機能しますが、その機能の詳細な説明はこの例の範囲外です。