序章

LinuxおよびUnixライクなオペレーティングシステムは幸運にも、オペレーティング環境のほぼすべてのコンポーネントにかなりの数の選択肢があります。 サーバーユーザーが最も対話するコンポーネントの1つは、コマンドラインシェルです。

ほとんどのシステムは bash シェルは、オリジナルの作成者にちなんで「Bourneagainshell」の略です。 sh その前身であったシェルには、多くのユーザーがチェックアウトすることで恩恵を受ける他のオプションがあります。 あなたは人気のあることを聞いたことがあるかもしれません zsh、ここで学ぶことができます

このガイドの対象となるもう1つのフル機能のシェルは、 fish シェル。 The 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 ターミナルウェブブラウザ。 通常のブラウザと同じように任意のリンクをたどることができ、「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. で終わるすべてのファイルを見つけることができました .conf 私たちの中で /etc 次のように入力してディレクトリを作成します。

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-UPALT-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-LEFTALT-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

ファイルに慣れたら、個人的にカスタマイズしていないものはすべて削除する必要があります。

この構成ファイルに関数を直接追加しないことをお勧めします。 代わりに、というディレクトリを作成する必要があります functions あなたの中で fish 構成ディレクトリ:

mkdir ~/.config/fish/functions

このディレクトリ内に、作成する関数ごとにファイルを作成します。 各ファイルがで終わる限り .fish、シェルはそれらを見つけてその環境に組み込みます。 各関数は、他に何もない独自のファイルに含まれている必要があります。

たとえば、ファイルを作成して hello_sir ユーザーがすべてのセッションで使用できる関数は、これを入力できます(続行する前に、設定を解除することを忘れないでください) cat 以前に作成したエイリアス set -e cat まだ行っていない場合):

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 指図。

ジャスティン・エリングウッド