欢迎光临
我们一直在努力

如何在Ubuntu VPS上安装和使用Fish Shell

介绍

Linux和类Unix操作系统很幸运,几乎可以替代它们的操作环境的每一个组件。服务器用户最常与之交互的组件之一是命令行shell。虽然与大多数系统船舶bash shell,它的全称是“伯恩再次壳”原始的创造者后sh外壳,这是它的前身,也有很多用户会从检查出有利于其他选项。 你可能听说过流行的zsh ,你可以了解这里 。另一种全功能的外壳,这将是本指南的主题,是fish外壳。 该fish的外壳是一个现代化的,有吸引力和强大的命令行shell,可以延长平时的能力bash外壳。在本指南中,我们将学习如何安装,配置和使用此shell。我们将在Ubuntu 12.04 VPS实例上使用这些,但你应该有一个容易的时间适应您的选择的分布。

如何安Fish Shell

幸运的是,Ubuntu默认12.04存储库包含fish二进制软件包。我们可以通过更新我们的本地包索引并将包拉到我们的系统中以常规方式安装:

sudo apt-get updatesudo apt-get install fish

这就是我们需要做的,以获得新的shell到我们的系统。要开始打转转,我们将开始一个新的fish从我们当前会话中的shell。 我们将如何,如果你决定改变默认的shell后面讨论fish是为你:

fish

[email protected] ~>

您可以看到您的提示已更改。代替“$”作为普通用户的提示,您将看到一个“>”字符。

熟悉一些表面特征

马上,我们可以开始看到这个shell的一些优点,只是在shell中执行我们的正常例程。这些主要是通过包含的函数完成的,我们将在后面讨论。例如,如果列出目录的内容,您会注意到它们会自动在末尾附加一个字符,表示文件类型:

ls

bin/   etc/         lib/         media/  proc/  sbin/     sys/  var/boot/  home/        lib64/       mnt/    root/  selinux/  tmp/  [email protected]/   initrd.[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 |LicenseFish user documentation                                    1Table of contents   Fish user documentation       Table of contents       Introduction       Syntax overview       Help       Tab completion

在我的机器,这打开帮助系统中w3m终端的Web浏览器。你可以按照任何链接,就像你在一个普通的浏览器,并可以通过输入“q”退出。如果你想看到Fish Shell知道的特定命令的帮助,只是使用它作为参数:

help cd

cd - change directorySynopsiscd [DIRECTORY]Description Changes the currentdirectory. If DIRECTORY is supplied it will become the new directory. IfDIRECTORY is a relative path, the paths found in the CDPATH environmentvariable array will be tried as prefixes for the specified path. IfCDPATH is not set, it is assumed to be '.'. If DIRECTORY is notspecified, $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没有太多上这些贝壳的遗产携带,它会修改行为在那里可以提供改进。

重定向,管道和通配符

一个简单的例子是重定向。普通重定向和管道的工作方式相同与bash

  • |:命令的管道输出的左到命令的右边的输入
  • <:从文件上,而不是在键盘的右注意到标准输入
  • >:写入标准输出到文件上,而不是在屏幕的右

但是,一个区别是您重定向标准错误的方式。你这样做的克拉角色:

  • ^:重定向标准错误到正确的位置。

这提供了一种将一个文件描述符重定向到另一个文件描述符的简单方法。记住每个文件描述符通常与一个数字相关联:

  • 0:标准输入。默认情况下,您的命令的输入是键盘。
  • 1:标准输出。默认情况下,您的命令的输出是屏幕。
  • 2:标准错误。默认情况下,您的命令的错误会打印到屏幕上。

我们可以通过使用“&”字符后跟描述符号将一个文件描述符重定向到另一个。例如,我们可以将命令的标准输出重定向到一个文件中,然后将其标准错误指向我们的标准输出文件,并输入如下内容:

ls /etc >ls_results.txt ^&1

所有的标准输出的放入ls_results.txt文件,然后将标准误差被设置为标准的输出被定向的位置(上面的文件)。至于通配符, fish再次使用大部分的默认值从bash 。包括:

  • *:匹配任何字符串,不包含“/”。
  • ?:此匹配任何单个字符,不包括“/”。

一个额外的通配符是非常有用的是递归通配符:

  • **:匹配包括“/”的字符串。

这可以用于轻松地向命令添加递归功能。尽管ls有一个递归选项,我们可以做到这一点fish 。 我们可以发现,在结尾的所有文件.conf在我们/etc通过键入目录:

ls /etc/**.conf

/etc/adduser.conf/etc/apparmor/subdomain.conf. . .

在我的机器上,前两行输出显示这在行动。一个文件位于我们正在搜索的顶级目录中,下一个位于子目录中。

创建函数和别名

我们可以创建函数和别名fish与一个易于使用的语法。基本格式如下:

function function_name    function_contentend

如果你想你的函数中的参数解析,你有他们的所有可用内捆绑在一起$argv变量。它们存储为数组。例如,我们可以创建一个这样的函数,打印出所有的参数:

function say_hello    echo hello $argvend

我们可以用一个或多个参数来调用这个,它会他们都传递给echo命令:

say_hello John Doe

hello John Doe

如果我们想访问一个特定的变量,将其拉出引用数字参数数组(以fish ,数组从1开始,而不是0)。我们可以修改我们以前的脚本只使用第二个参数:

function hello_sir    echo hello Mr. $argv[2]end

然后我们可以调用这个函数,我们会得到不同的结果:

hello_sir John Doe

hello Mr. Doe

我们可以通过键入以下内容查看所有定义的函数:

functions -a

您可以通过键入以下内容删除您的某个功能:

functions -e function_name

对于别名,在bash外壳有一个特殊的命令。 在fish ,它使用相同的函数语法。要注意的唯一的事情是,如果命令取代或替换它引用的命令,必须添加command内置了告诉shell不要递归调用的功能,但使用外部命令。举例来说,如果我们希望cat命令默认包括编号,我们可能要重新定义的命令,包括标志。记住要传递参数变量,以便它可以正确解析文件名:

function cat    command cat -n $argvend

现在,当我们调用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-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters

简化历史

虽然bash提供了一个非常复杂的,但有用的一套历史记录功能, fish削去这些下来,工作在改进的基础,以解决使用问题。您可以使用您的历史时间顺序上移UP键。 您可以在相反方向上使用移动DOWN键。这是相当标准。如果我们希望返回到我们的提示符,我们只需点击转义键。我们还可以输入一个以前的命令的一部分, 然后UP键来搜索特定命令的最新实例。此外,我们可以使用ALT-UPALT-DOWN命令只记得命令行参数。例如,我们列出了目录的内容:

ls /etc

acpi/                   groff/               ltrace.conf              rmt*adduser.conf            group                magic                    rpcalternatives/           group-               magic.mime               rsyslog.confapm/                    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在一个空的命令提示符时。这将允许您轻松地在目录之间循环。

创建配置文件并更改默认Shell

如果你发现你喜欢的fish贝,你可能要包括一些自定义来塑造您的环境。虽然你可能被用来将在自定义你~/.bashrc~/.bash_profile的文件,这些不用于这个shell。要配置你的喜好,你应该建立在文件~/.config/fish/config.fish 。 所有fish的配置文件必须以结束.fish 。 通常情况下,在~/.config/fish/当你使用shell首次路径将被创建。如果你想开始一个例子文件,你可以从它复制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.fishfunction hello_sir    echo hello Mr. $argv[2]end

输入后end ,打CTRL-D以结束输入。 这将在每次加载shell时可用。 如果我们想也增加我们的say_hello功能,我们需要一个单独的文件。如果你需要一些灵感,你可以看看默认的fish功能:

cd /usr/share/fish/functionsls

你已经得到了你的后壳配置根据自己的喜好,你不妨用fish作为默认的shell。 要做到这一点,您可以使用chsh命令。首先,我们需要知道的路径, fish贝:

which fish

/usr/bin/fish

接下来,我们可以通过键入:

chsh -s /usr/bin/fish

系统将要求您输入密码以确认。一旦完成,每次你登录时,你将得到一个fish提示。如果要更改回到其他shell,您可以通过路径以相同的方式指定:

chsh -s /bin/bash

结论

现在,你应该是比较熟悉使用的基本fish外壳。它是许多人的良好的中间地带,因为它坚持约会,这是有道理的,但增加了功能,以前的shell留下了改进的空间。有更多的东西要学习,但你应该有一个良好的基础进一步探索。请记住,利用优秀的帮助系统,可通过help命令。

作者:Justin Ellingwood

赞(0) 打赏
未经允许不得转载:老赵部落 » 如何在Ubuntu VPS上安装和使用Fish Shell

评论 抢沙发