UbuntuVPSにFishShellをインストールして使用する方法
序章
LinuxおよびUnixライクなオペレーティングシステムは幸運にも、オペレーティング環境のほぼすべてのコンポーネントにかなりの数の選択肢があります。 サーバーユーザーが最も対話するコンポーネントの1つは、コマンドラインシェルです。
ほとんどのシステムにはbash
シェルが付属しています。これは、前身である元のsh
シェルの作成者にちなんで「Bourneagainshell」を表しますが、多くのユーザーが恩恵を受ける他のオプションがあります。チェックアウト。 人気のzsh
について聞いたことがあるかもしれませんが、ここでを学ぶことができます。
このガイドの対象となるもう1つのフル機能のシェルは、fish
シェルです。 fish
シェルは、通常のbash
シェルの機能を拡張できる、モダンで魅力的で強力なコマンドシェルです。 このガイドでは、この代替シェルをインストール、構成、および使用する方法を学習します。
これらはUbuntu12.04VPSインスタンスで使用しますが、これを選択したディストリビューションに簡単に適応させることができます。
FishShellのインストール方法
幸いなことに、デフォルトのUbuntu12.04リポジトリにはfish
バイナリパッケージが含まれています。
ローカルパッケージインデックスを更新し、パッケージをシステムにプルすることで、従来の方法でインストールできます。
sudo apt-get update sudo apt-get install fish
新しいシェルをシステムに導入するために必要なのはこれだけです。
遊び始めるために、現在のセッション内から新しいfish
シェルを開始します。 fish
が適していると判断した場合に、デフォルトのシェルを変更する方法については、後で説明します。
fish
demouser@host ~>
プロンプトが変更されたことがわかります。 通常のユーザーへのプロンプトとしての「$」の代わりに、「>」文字が表示されます。
いくつかの表面的な機能に精通する
すぐに、シェルで通常のルーチンを実行するだけで、このシェルの利点のいくつかを理解し始めることができます。 これらは主に、後で調べる組み込み関数によって実現されます。
たとえば、ディレクトリの内容を一覧表示すると、ファイルの種類を示す文字が末尾に自動的に追加されることに気付くでしょう。
ls
bin/ etc/ lib/ media/ proc/ sbin/ sys/ var/ boot/ home/ lib64/ mnt/ root/ selinux/ tmp/ vmlinuz@ dev/ initrd.img@ lost+found/ opt/ run/ srv/ usr/
これは、コンテンツをタイプ別に分類するls -F
と同じ出力です。
相対パスか絶対パスかに関係なく、ファイルパスを入力すると、fish
シェルがディレクトリパスに下線を付けて、一目でわかりやすくすることがわかります。
cd / home / demo
お使いの端末に色付きの出力を表示する機能がある場合は、プロンプトも自動的に色付きになっていることに気付くでしょう。 さらに、動的に色付けされます。 有効なコマンドではないものを入力すると、赤で表示されます。
これは赤になります:
ech
ただし、最後の「o」を追加してコマンドに変換すると、すぐに緑色に変わります。 これにより、タイプミスを早期に発見するのに役立つ有用なフィードバックが提供されます。
TAB補完をより簡単に利用する
また、TAB補完が優れていることに気付くかもしれません。
cd / ## Hit the TAB key at this point
/bin/ (Directory) /media/ (Directory) /srv/ (Directory) /boot/ (Directory) /mnt/ (Directory) /sys/ (Directory) /dev/ (Directory) /opt/ (Directory) /tmp/ (Directory) /etc/ (Directory) /proc/ (Directory) /usr/ (Directory) /home/ (Directory) /run/ (Directory) /var/ (Directory) /lib/ (Directory) /sbin/ (Directory) /lib64/ (Directory) /selinux/ (Directory)
ご覧のとおり、fish
は、cd
コマンドのディレクトリをのみでインテリジェントに一覧表示します。これは、これらが意味のある唯一の値であるためです。
より一般的なコマンドを使用すると、代わりにすべてのリスト(およびそのタイプ)が表示されます。
touch / ## Hit the TAB key at this point
/bin/ (Directory) /proc/ (Directory) /boot/ (Directory) /root/ (Directory) /dev/ (Directory) /run/ (Directory) /etc/ (Directory) /sbin/ (Directory) /home/ (Directory) /selinux/ (Directory) /initrd.img (Symbolic link, 15MB) /srv/ (Directory) /lib/ (Directory) /sys/ (Directory) /lib64/ (Directory) /tmp/ (Directory) /lost+found/ (Directory) /usr/ (Directory) /media/ (Directory) /var/ (Directory) /mnt/ (Directory) /vmlinuz (Symbolic link, 5.2MB) /opt/ (Directory)
役立つ同様の機能は、man
コマンドのフォーマットです。 fish
のすべてのマニュアルページを表示したい場合は、タブ補完を使用できます。
man fish ## Hit the TAB key at this point
fish (1: the friendly interactive shell) fish_indent (1: indenter and prettifier) fish_pager (1: internal command used by fish) fishd (1: universal variable daemon)
同様に、組み込みのヘルプシステムを使用しているターミナルWebブラウザーを使用して、フル機能のヘルプを取得できます。
help
fish home | Main documentation page | Design document | Commands | FAQ | License Fish user documentation 1 Table of contents • Fish user documentation □ Table of contents □ Introduction □ Syntax overview □ Help □ Tab completion
私のマシンでは、これによりw3m
ターミナルWebブラウザでヘルプシステムが開きました。 通常のブラウザと同じように任意のリンクをたどることができ、「q」と入力して終了できます。 fishが知っている特定のコマンドのヘルプを表示したい場合は、後で引数として使用してください。
help cd
cd - change directory Synopsis cd [DIRECTORY] Description Changes the current directory. If DIRECTORY is supplied it will become the new directory. If DIRECTORY is a relative path, the paths found in the CDPATH environment variable array will be tried as prefixes for the specified path. If CDPATH is not set, it is assumed to be '.'. If DIRECTORY is not specified, $HOME will be the new directory. Back to index.
ここでも、TAB補完を使用して、どのヘルプコマンドを使用できるかを確認できます。
help ## Type a space to let fish know you are finished with the command, and then hit the TAB key at this point
alias (Help for the specified command) and (Help for the specified command) begin (Help for the specified command) bg (Help for the specified command) bind (Help for the specified command) block (Help for the specified command) break (Help for the specified command) breakpoint (Help for the specified command) . . .
いくつかの一般的なタスクを実行する別の方法
bash
、さらにはsh
を何年も使用している多くの人々は、これらのシェルが物事を行う方法に慣れているでしょう。 fish
はこれらのシェルのレガシーの多くを引き継いでいますが、動作を変更して改善を提供できます。
リダイレクト、パイピング、およびワイルドカード
この簡単な例の1つは、リダイレクトです。 通常のリダイレクトとパイプは、bash
と同じように機能します。
- | :左側のコマンドの出力を右側のコマンドの入力にパイプします
- < :キーボードの代わりに右側のファイルから標準入力を取得します
- > :画面ではなく右側のファイルに標準出力を書き込みます
ただし、1つの違いは、標準エラーをリダイレクトする方法です。 あなたはカラットのキャラクターでこれを行います:
- ^ :標準エラーを右側の場所にリダイレクトします。
これにより、あるファイル記述子を別のファイル記述子にリダイレクトする簡単な方法が提供されます。 各ファイル記述子は通常、番号に関連付けられていることを思い出してください。
- 0 :標準入力。 コマンドの入力は、デフォルトではキーボードです。
- 1 :標準出力。 コマンドの出力は、デフォルトでは画面です。
- 2 :標準エラー。 コマンドのエラーは、デフォルトで画面に出力されます。
「&」文字とそれに続く記述子番号を使用して、あるファイル記述子を別のファイル記述子にリダイレクトできます。
たとえば、コマンドの標準出力をファイルにリダイレクトしてから、次のように入力することで、その標準エラーを標準出力ファイルにポイントすることもできます。
ls /etc >ls_results.txt ^&1
すべての標準出力がls_results.txt
ファイルに入れられ、標準エラーが標準出力が送信されている場所(上記のファイル)に設定されます。
ワイルドカードに関しては、fish
はbash
のデフォルトのほとんどを再び使用します。 これらが含まれています:
- * :「/」を含まない任意の文字列に一致します。
- ?:これは「/」を含まない任意の1文字に一致します。
非常に役立つ追加のワイルドカードの1つは、再帰的なワイルドカードです。
- ** :「/」を含む任意の文字列に一致します。
これを使用して、コマンドに再帰機能を簡単に追加できます。 ls
には再帰オプションがありますが、これはfish
で実行できます。 次のように入力すると、/etc
ディレクトリの.conf
で終わるすべてのファイルを見つけることができます。
ls /etc/**.conf
/etc/adduser.conf /etc/apparmor/subdomain.conf . . .
私のマシンでは、出力の最初の2行は、これが実際に動作していることを示しています。 1つのファイルは検索していたトップディレクトリにあり、次のファイルはサブディレクトリにあります。
関数とエイリアスの作成
fish
には、使いやすい構文で関数とエイリアスを作成できます。
基本的な形式は次のようなものです。
function function_name function_content end
関数内の引数を解析したい場合は、$argv
変数内にすべてバンドルされた引数を使用できます。 それらは配列として格納されます。
たとえば、すべての引数を出力する次のような関数を作成できます。
function say_hello echo hello $argv end
これを1つ以上の引数で呼び出すことができ、それらすべてをecho
コマンドに渡します。
say_hello John Doe
hello John Doe
特定の変数にアクセスする場合は、参照番号で引数配列から引き出します(fish
では、配列は0ではなく1から始まります)。 前のスクリプトを変更して、2番目の引数のみを使用することができます。
function hello_sir echo hello Mr. $argv[2] end
次に、この関数を呼び出すと、別の結果が得られます。
hello_sir John Doe
hello Mr. Doe
次のように入力すると、定義されているすべての関数を確認できます。
functions -a
次のように入力して、関数の1つを削除できます。
関数-efunction_name
エイリアスの場合、bash
シェルには特定のコマンドがあります。 fish
では、同じ関数構文を使用します。
注意すべき唯一のことは、コマンドが参照しているコマンドを置き換えるか置き換える場合は、command
ビルトインを追加して、関数を再帰的に呼び出さないようにシェルに指示し、exteriorコマンドを使用する必要があることです。
たとえば、cat
コマンドにデフォルトで番号付けを含める場合は、コマンドを再定義してそのフラグを含めることができます。 ファイル名を正しく解析できるように、引数変数を渡すことを忘れないでください。
function cat command cat -n $argv end
これで、cat
を呼び出すと、出力に自動的に番号が付けられます。
cat /etc/hosts
1 127.0.0.1 localhost fish fish 2 3 # The following lines are desirable for IPv6 capable hosts 4 ::1 ip6-localhost ip6-loopback 5 fe00::0 ip6-localnet 6 ff00::0 ip6-mcastprefix 7 ff02::1 ip6-allnodes 8 ff02::2 ip6-allrouters
コマンドのデフォルトをオーバーライドする関数を使用している場合は、バイパスに組み込まれているcommand
を使用して、行った変更をすべて使用して、元のコマンドを取得することもできます。
command cat /etc/hosts
127.0.0.1 localhost fish fish # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
簡略化された履歴
bash
は非常に複雑ですが便利な履歴関数のセットを提供しますが、fish
はこれらを削減し、使用上の問題に対処するための基本の改善に取り組んでいます。
UP
キーを使用すると、履歴を時系列で上に移動できます。 DOWN
キーを使用すると、逆方向に移動できます。 これはかなり標準的です。
プロンプトに戻りたい場合は、エスケープキーを押すだけです。
前のコマンドの一部を入力し、次にを押して、UP
キーを押して、その特定のコマンドの最新のインスタンスを検索することもできます。
さらに、ALT-UP
およびALT-DOWN
コマンドを使用して、コマンドライン引数のみを呼び出すことができます。
たとえば、ディレクトリの内容を一覧表示したとします。
ls /etc
acpi/ groff/ ltrace.conf rmt* adduser.conf group magic rpc alternatives/ group- magic.mime rsyslog.conf apm/ grub.d/ mailcap rsyslog.d/ apparmor/ gshadow mailcap.order screenrc . . .
これが私たちが探しているディレクトリであることがわかり、今すぐ切り替えたいと思います。 新しいコマンドを入力することから始めることができます:
cd # Don't press return yet
これで、ALT-UP
キーを押すことにより、最後のコマンドの引数を挿入できます。
cd # Hit Alt-UP and get... cd /etc
これは非常に単純な例ですが、特に前のコマンド引数をスクロールできるため、これが非常に役立つ可能性があることがわかります。
fish
が提供する別の種類の履歴は、ディレクトリ履歴です。 これは、基本的にcd
の履歴をさかのぼって、前のディレクトリに移動できる優れた機能です。
次のように入力すると、ディレクトリ履歴を確認できます。
dirh
空のコマンドプロンプトでALT-LEFT
とALT-RIGHT
を押すと、ディレクトリ履歴を前後に移動できます。 これにより、ディレクトリ間を簡単に切り替えることができます。
構成ファイルの作成とデフォルトシェルの変更
fish
シェルを楽しんでいることがわかった場合は、環境を形作るためにいくつかのカスタマイズを含めることをお勧めします。
~/.bashrc
または~/.bash_profile
ファイルにカスタマイズを加えることに慣れているかもしれませんが、これらはこのシェルでは使用されません。
プリファレンスを設定するには、~/.config/fish/config.fish
にファイルを作成する必要があります。 すべてのfish
構成ファイルは、.fish
で終わる必要があります。 通常、~/.config/fish/
パスは、シェルを初めて使用するときに作成されます。
サンプルファイルから始めたい場合は、fish
パッケージディレクトリからコピーできます。
cp /usr/share/fish/config.fish ~/.config/fish
その後、他のファイルと同じように編集できます。
nano ~/.config/fish/config.fish
ファイルに慣れたら、個人的にカスタマイズしていないものはすべて削除する必要があります。
この構成ファイルに関数を直接追加しないことをお勧めします。 代わりに、fish
構成ディレクトリ内にfunctions
というディレクトリを作成する必要があります。
mkdir ~/.config/fish/functions
このディレクトリ内に、作成する関数ごとにファイルを作成します。 各ファイルが.fish
で終わっている限り、シェルはそれらを見つけて環境に組み込みます。 各関数は、他に何もない独自のファイルに含まれている必要があります。
たとえば、hello_sir
関数をユーザーがすべてのセッションで使用できるようにするファイルを作成し、これを入力できます(続行する前に、cat
エイリアスの設定を解除することを忘れないでください。 X207X] まだ行っていない場合):
cat > ~/.config/fish/functions/hello_sir.fish function hello_sir echo hello Mr. $argv[2] end
end
と入力したら、CTRL-D
を押して入力を終了します。 これは、シェルがロードされるたびに利用できるようになります。 say_hello
関数も追加したい場合は、別のファイルが必要になります。
インスピレーションが必要な場合は、デフォルトのfish
関数を確認できます。
cd /usr/share/fish/functions ls
シェルを好みに合わせて構成したら、デフォルトのシェルとしてfish
を使用することをお勧めします。 これを行うには、chsh
コマンドを使用できます。
まず、fish
シェルへのパスを知る必要があります。
which fish
/usr/bin/fish
次に、次のように入力してシェルを変更できます。
chsh -s /usr/bin/fish
確認のためにパスワードの入力を求められます。 これが完了すると、ログインするたびにfish
プロンプトが表示されます。
他のシェルに戻したい場合は、同じ方法でパスで指定できます。
chsh -s /bin/bash
結論
これで、fish
シェルの使用の基本に比較的慣れているはずです。 それは理にかなっている慣習に固執するので、多くの人々にとって良い中間点ですが、以前のシェルが改善の余地を残した機能を追加します。
学ぶべきことは間違いなくもっとありますが、さらに探求するための良い基盤が必要です。 help
コマンドで利用できる優れたヘルプシステムを利用することを忘れないでください。