序章

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

[email protected] ~>

プロンプトが変更されたことがわかります。 通常のユーザーへのプロンプトとしての「$」の代わりに、「>」文字が表示されます。

いくつかの表面的な機能に精通する

すぐに、シェルで通常のルーチンを実行するだけで、このシェルの利点のいくつかを理解し始めることができます。 これらは主に、後で調べる組み込み関数によって実現されます。

たとえば、ディレクトリの内容を一覧表示すると、ファイルの種類を示す文字が末尾に自動的に追加されることに気付くでしょう。

ls

bin/   etc/         lib/         media/  proc/  sbin/     sys/  var/
boot/  home/        lib64/       mnt/    root/  selinux/  tmp/  [email protected]
dev/   [email protected]  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ファイルに入れられ、標準エラーが標準出力が送信されている場所(上記のファイル)に設定されます。

ワイルドカードに関しては、fishbashのデフォルトのほとんどを再び使用します。 これらが含まれています:

  • * :「/」を含まない任意の文字列に一致します。
  • :これは「/」を含まない任意の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]