当前位置: 首页>>技术教程>>正文


了解ZSH Shell的基础知识

, ,

目的

使用Oh My ZSH安装ZSH并学习基本功能。

发行版

在几乎每个发行版的存储库中都可以找到ZSH。

要求

具有root特权的有效Linux安装。

困难

简单

约定

  • -要求给出linux命令可以直接以root用户身份或通过使用root特权以root特权执行sudo命令
  • $-要求给出linux命令以普通非特权用户身份执行

介绍

重击还不错。它可以很好地完成工作,但是您是否考虑过Bash拥有一些额外的功能使其工作起来更方便的情况?那就是ZBC是more-or-less。

它包含了Bash所期望的所有功能,但是还添加了一些非常不错的功能,使您的生活更加轻松。实际上,您会惊讶于它们在命令行中使工作变得如此容易。

安装ZSH

首先,您将需要安装ZSH。它非常受欢迎,因此您可以在发行版本的存储库中找到它。

Ubuntu /Debian的

$ sudo apt install zsh

软呢帽

# dnf -y install zsh

CentOS的

# yum -y install zsh

OpenSUSE

# zypper in zsh

Arch Linux

# pacman -S zsh

Gentoo

# emerge --ask zsh

您可能会明白。只需在Bash中将ZSH作为命令输入即可使用ZSH。该特定终端将暂时切换到ZSH。不过,最好是永久切换。它不会花费您任何费用,并且您可以执行通常以相同的方式进行的所有操作。另外,如果您确实需要,您可以以完全相同的方式切换回去。

$ chsh -s /bin/zsh

您可能想要re-login或关闭所有终端才能使更改生效。




安装Oh-My-ZSH

现在,您已经安装了ZSH并将其用作默认 shell ,这是一个非常非常好的主意,为ZSH选择add-on,称为Oh-My-ZSH。它是一组主题和插件,可增强ZSH的现有功能。不会降低它的速度或妨碍它,所以抓住它并安装它。

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

如果您想在安装之前阅读更多有关它的信息,请查看项目的https://github.com/robbyrussell/oh-my-zsh

配置文件

就像Bash拥有的一样.bashrc,ZSH有.zshrc。它是包含 shell 程序配置选项的单个文件,您可以使用它来设置别名和自定义运行时行为。到目前为止,由于Oh-My-ZSH,您实际上已经有了一套不错的默认设置,该默认设置在文件安装期间进行了设置。

主题

ZSH支持主题提示。它带有一些内置主题,但与Oh-My-ZSH附带的主题相去甚远。您可以看一看它们的外观https://github.com/robbyrussell/oh-my-zsh/wiki/themesOh-My-ZSH Wiki。要更改主题,请打开.zshrc并找到下面的行。将主题名称更改为您要尝试的主题名称。

ZSH_THEME="robbyrussell"

外挂程式

Oh-My-ZSH还带来了许多插件。在这里将它们全部覆盖会花费很长时间,因此请查看https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins整个列表的Oh-My-ZSH Wiki。无论您选择哪个其他选项,都可以启用extractz是个好主意。再一次,您的插件在行中设置.zshrc

plugins=(git extract z)

制表符完成

Bash确实具有制表符补全功能,但充其量是弱的。 ZSH将制表符完成度提高到一个新水平。尝试输入ls然后是目录名。名称后,快速连续按两次Tab键。 ZSH将自动显示您命名目录中的文件和文件夹。您可以使用箭头键浏览这些目录。在要查看的那一个上按Enter,然后运行命令。

同样的事情也适用于其他命令。试试看cd

ZSH可以使用tab不仅仅是目录。它也适用于命令。尝试输入mk然后按两次Tab键。您将获得相同类型的菜单,并以以下不同的命令开头mk

目录速记

您讨厌输入长目录路径吗? ZSH也有解决方案。它支持自己的速记版本,使您仅可以键入路径中每个目录的前几个字母。它将使它们尽可能地与完整路径匹配。如果找到多个结果,它将显示它们供您选择。

尝试输入$ ls /u/sh/ico进入终端并按Tab。 ZSH会将其扩展到共享图标目录的完整路径。

别名

这是Oh-My-ZSH的功能,而不是 shell 本身,但仍然非常方便。 Oh-My-ZSH带有许多优秀的别名,可用于将目录导航到Git和Systemd之类的通用程序。同样,这里还有很多时间,但是这里有一些亮点。


cd ../.. = ...
cd ../../.. = ....
mkdir -p = md
rmdir = rd
git add = ga
git add --all = gaa
git branch = gb
git commit -m = gcmsg
git checkout = gco
git pull origin currentbranch = ggpull
git push origin currentbranch = ggpush
systemctl start = sc-start
systemctl stop = sc-stop
systemctl status = sc-status
systemctl enable = sc-enable

如果您想查看整个列表,请再次https://github.com/robbyrussell/oh-my-zsh/wiki/CheatsheetWiki是您最好的选择。



ž

Z实际上不是ZSH或Oh-My-ZSH的一部分,后者只是作为插件启用。即便如此,它也很容易与ZSH允许的使用样式配合使用。Z是一个脚本,用于跟踪经常使用的目录和最新目录,因此您可以使用单个作品或字符组合来访问它们。

例如,如果您有一个文件夹位于/home/user/Pictures/photography/Canon/2017/pics,并且您一直在使用它,您可以使用Z大大缩短时间。用Z您将使用以下内容linux命令进入该目录。

$ z pics

是的,这很简单。

杀死进程搜索

杀死无响应的过程可能很痛苦。首先,您需要使用ps查找有问题的过程。然后,您需要使用kill以及所选的进程号。 ZSH简化了该过程。输入kill后跟要杀死的进程或程序的名称或名称的一部分。然后,使用选项卡告诉ZSH发现进程ID。

但是,请谨慎使用此功能。假设您想杀死反应迟钝的Firefox,但是Firejail与其他程序一起运行。打字kill fire可能无法找到您想要的东西,输入kill firefox可能会。根深蒂固地使用它也不是一个好主意。你真的不想输入类似kill sys并调低PID 1。

命令特定的历史

有时回顾您的命令历史是一个巨大的痛苦。您需要一个在20行之前编写的命令,因为您不能完全确定所使用的开关,并且尽管有所有原因,也似乎找不到它。好吧,ZSH支持command-specific历史记录。因此,如果您知道您使用的命令是du, 输入du然后开始按向上箭头。您只会看到您最近对du命令。

切换搜寻

尽管手册页很棒,但是当您只是想快速真正地编写one-off命令时,它们并没有那么方便。另外,那里总是有很多可用开关的基本参考。 ZSH具有出色的功能,可让您在编写命令时搜索开关。开始命令,写与开关关联的破折号,然后按Tab。 ZSH将为您显示可用选项。大多数时候,它会询问您是否要显示所有项目,然后按y确认。

全球通

您是否曾经使用通配符从终端中搜索内容?

$ ls -l *.png

那是一种通行形式。 globbing本质上是 shell 的正则表达式。虽然Bash确实支持它,但是ZSH的globbing功能远远超出了Bash。

尝试在您的计算机中键入此命令/homeZSH目录。

$ ls **/*

是的,您的终端中有很多垃圾。该命令实际上列出了当前目录中的所有内容以及所有子目录。您也可以使用它来查找特定的文件类型。

$ ls **/*.txt

这就是全部.txt您的文件/home目录。

您也可以指定完整的文件名。尝试使用它找到所有README您的文件/home目录。

$ ls **/README.*

您也可以在文件名中搜索单词或短语。


## Starts with READ
$ ls **/(READ)*.*
## Ends With READ
$ ls **/*(READ).*
## Contains READ Anywhere
$ ls **/*(READ)*.*

这是列出文件的一种非常尴尬的方式。有两种非常简单的方法来指定文件和文件夹。


# Files Only
$ ls **/*(.)
# Folders Only
$ ls **/*(/)

您还可以指定多个字符之一。


# All files that start with A
$ ls **/[A]*(.)
# All files that start with A or a
$ ls **/[Aa]*(.)
# All Files that contain the number
$ ls **/*[1]*(.)
# Any files that end in a vowel
$ ls **/*[aeiouy](.)


如果要排除一个或多个字符,也可以这样做。


# Files that don't start with A or a
$ ls **/[^Aa](.)

您也可以搜索字母范围。


# Files that end in a number
$ ls **/*(.)

全球资格赛

您还可以使用其他选项来排序和过滤搜索结果。这些称为全局限定符,它们使搜索文件变得非常简单。

首先,您可以使用L


$ ls -lahS **/*(.Lm+250)

上面的示例仅按大小顺序显示大于250MB的文件。所以,L受大小限制。与之配对kmg指定尺寸单位。然后,可以使用正数或负数设置截止点,并确定结果是高于还是低于该点。

查看更多。


# List all files under 1GB by size
$ ls -lahS **/*(.Lg-1)
# List all files over 10MB by size
$ ls -lahS **/*(.Lm+10)
# List all files that start with a under 100MB by size
$ ls -lahS **/[a]*(.Lm-100)

还有限定符,可以通过修改和访问进行过滤。他们是ma分别。他们可以配对smhdwM。这些代表几秒钟,几分钟,几小时,几天,几周和几个月。要列出他上周内修改的所有文件,请尝试此操作。

$ ls -lah **/*(.mw-1)

语句中的数字表示要回顾的单位数。这将查找最近3天修改过的所有文件。

$ ls -lah **/*(.md-3)

还有其他不太常见的限定词可以探索,您可以将它们完全串在一起以进一步缩小搜索范围。

自动更正

最后一个功能非常好。每个人都输错了某些内容,不得不从头开始重新输入所有内容。真是烦人。 ZSH尝试提供帮助。如果ZSH检测到一个单词看起来像是实际命令的错误键入版本,它将询问您是否要更正并运行该命令,从而省去了重新键入所有内容的麻烦。

通过错误的方式创建目录来尝试一下。

$ mdkir some-folder

ZSH来抢救!

总结思想

ZSH的所有荣耀就在那里。这不是您可以在这里阅读并立即知道的东西。您可以立即使用该工具,其使用方式与Bash完全相同。然后,您可以开始尝试不同的功能,然后慢慢将它们融入您的惯用习惯。

一旦您开始习惯ZSH,您就会意识到自己喜欢并依赖它。它并没有真正的革命性,但是它提供了您可能希望几年前想到的各种便利。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9846.html,未经允许,请勿转载。