互联网上有很多命令行技巧和指标。 他们中的大多数都将琐碎的事情描述为“学习热键”或“ sudo !!
将使用sudo运行先前的命令”。 取而代之的是,当您已经学会了热键并了解sudo !!
时,我会告诉您该怎么做sudo !!
。
终端应立即启动
您花费多少时间启动终端机? 还有一个? 很长时间以来,我一直使用Ctrl + Alt + T快捷方式启动终端,我认为它很快。 从Openbox迁移到i3后,我开始通过Win + Enter启动终端,该绑定开箱即用。 你知道吗 现在,我认为Ctrl + Alt + T不够快。
当然,这不是毫秒级的提速,而是您在反射级别打开终端,完全没有意识到。
因此,如果您经常使用终端,但是抓住鼠标来启动它,请尝试配置方便的热键。 我敢肯定,您会喜欢的。
Zsh代替bash
我知道这是一个神圣的话题。 您应该为至少三个功能安装Zsh:高级自动完成,错字校正和多个路径名完成:当单个Tab将/u/s/d
转换为/usr/share/doc
。 Arch Linux已经在其安装CD中迁移到Zsh。 我希望Zsh能够成为Ubuntu中的默认Shell。 那将是一个历史性的时刻。
开始使用Zsh一点也不困难。 只需通过包管理器安装它,然后找到一个漂亮的配置即可。 我建议采用Arch Linux中使用的配置:
$ wget -O ~/.zshrc https://git.grml.org/f/grml-etc-core/etc/zsh/zshrc
剩下的唯一一件事就是更改您的默认Shell并重新登录。
$ chsh -s $(which zsh)
仅此而已,就像什么都没有发生一样,继续工作。
shell提示应该是什么样子
Shell提示符是命令行开头在终端中显示的一小段文本。 应该为您的工作进行配置。 您可以将其视为车辆的仪表板。 请在此放置一些有用的信息,以帮助您导航! 方便使用,尤其是每天都看到的时候!
外壳提示应为彩色。 不同意吗? 尝试计算在此终端中执行了多少命令:

现在带有颜色:

Shell提示符应显示Shell的当前工作目录。 如果未显示当前工作目录,则必须牢记该目录,并使用pwd
命令定期对其进行检查。 请不要那样做。 请记住一些非常重要的事情,不要浪费时间执行pwd
命令。
如果有时切换到root帐户,则需要“当前用户”指示。 特定的用户名通常并不重要,但是它的状态(常规或root)才是重要的。 解决方案是使用颜色:红色shell提示输入root,绿色提示普通用户。 而且您将永远不会像常规那样接管root shell。
如果使用ssh连接到服务器,则需要区分本地外壳程序和远程外壳程序。 为此,您的shell提示应包含一个主机名,甚至更好-指示ssh连接。
Shell提示符可以显示最后一条命令的退出代码。 请记住,退出代码为零表示命令成功退出,非零表示命令成功退出。 您可以通过echo $?
获得上一条命令的退出代码echo $?
,但输入所有内容都是一件漫长的事情。 让外壳显示不成功的退出。
如果您使用Git仓库,那么在shell提示符下查看存储库状态会很有用:当前分支和工作目录的状态。 您将在git status
和git branch
命令上节省一些时间,并且不会提交到错误的分支。 是的,在脂肪储存库中,状态的计算可能会花费大量时间,但对我而言,不利因素超过了缺点。
有人在shell提示中添加了时钟,甚至在虚拟终端(tty)的名称中添加了时钟,或者在一些任意的波形上添加了时钟。 都是多余的。 最好为命令留出更多空间。
那就是我的shell提示符在不同条件下的样子:

您可以在屏幕截图中看到终端标题栏执行了类似的工作。 它也是仪表板的一部分,还应该进行配置。
那么,所有这些东西应该如何在.zshrc
实现? PROMPT
变量设置左提示,而RPROMPT
设置右提示。 EUID
变量定义用户(常规或root)的状态,并且SSH_CLIENT
或SSH2_CLIENT
存在表示ssh连接。 所以我们可以有一个模板:
if [[ -n "$SSH_CLIENT" || -n "$SSH2_CLIENT" ]]; then if [[ $EUID == 0 ]]; then PROMPT=... else PROMPT=... fi else
我不显示可复制粘贴的代码,因为确切的实现只取决于口味。 如果您不想打扰,并且上面的屏幕截图适合您,则可以从Github中获取我的cofig。
总结:
- 彩色外壳提示是必须具备的。
- 最低要求是当前工作目录。
- 根壳应该清晰可见。
- 如果您仅使用一个帐户,则用户名不在乎有效负载。
- 如果通过ssh连接到服务器,则主机名很有用,如果不是,则不是必需的。
- 查看最后一个命令的失败退出代码很有用。
- Git回购状态节省了
git status
和git branch
命令的时间,并提供了万无一失的方法。
大量使用命令历史记录
您一生中大部分命令都会多次输入,因此将其从历史记录中拉出而不是再次键入很酷。 所有现代外壳程序都保存命令历史记录,并提供了几种搜索历史记录的方式。
也许您已经可以使用Ctrl + R键绑定来挖掘历史记录。 不幸的是,它有两个缺点:
- 命令行应该为空以开始搜索,例如,如果“一个人开始键入命令-记住了搜索”,则必须先清除输入内容,然后按Ctrl + R并重复输入。 太久了
- 由于Ctrl + S停止了终端,因此默认搜索无法进行正向搜索。
最快速,最方便的搜索类型通过以下方式工作:
- 您开始输入命令,
- 您还记得有关搜索的信息,
- 按下热键,shell将以相同的方式从历史记录中提供命令。
例如,您想使用Rsync将本地目录与远程目录同步,而您已经在两个小时前完成了。 键入rsync
,按热键一两次,即可启动所需的命令。 您无需先打开搜索模式,shell提示符不会更改为(reverse-i-search)':
:,并且任何地方都不会跳动。 您只需按箭头↑↓滚动历史记录,即可滚动浏览先前输入的命令,但具有其他过滤功能。 真是太酷了,节省了很多时间。
默认情况下,这种搜索在Bash和Zsh中不起作用,因此您必须手动启用它。 我选择PgUp进行向前搜索,选择PgDown进行向后搜索。 距离他们很远,但是我已经养成了习惯。 也许以后我会切换到更接近的位置,例如Ctrl + P和Ctrl +N。
对于Bash,您需要在~/.inputrc
/etc/inputrc
中添加几个字符串:
"\e[5~": history-search-backward "\e[6~": history-search-forward
如果您使用了外国完整的.zshrc
,则很有可能PgUp和PgDown已经完成了该工作。 如果没有,则添加到~/.zshrc
:
bindkey "^[[5~" history-beginning-search-backward
Fish和Ipython壳已经具有与箭头↑↓绑定的搜索。 我认为许多用户只是出于箭头行为而迁移到了Fish。 当然,如果需要,可以在Bash和Zsh中以这种方式绑定箭头。 在~/.inputrc
/etc/inputrc
中~/.inputrc
:
"\e[A":history-search-backward "\e[B":history-search-forward
这在~/.zshrc
:
autoload -U up-line-or-beginning-search autoload -U down-line-or-beginning-search zle -N up-line-or-beginning-search zle -N down-line-or-beginning-search bindkey "^[[A" up-line-or-beginning-search bindkey "^[[B" down-line-or-beginning-search
奇怪的是,随着时间的流逝,我开始编写命令时会牢记,稍后我会将它们从历史中拉出来。 让我向您展示一些技巧。
加入始终相互遵循的命令 :
# ip link set eth1 up && dhclient eth1 # mkdir /tmp/t && mount /dev/sdb1 /tmp/t
绝对路径而不是相对路径使您可以从任何目录运行命令:
systemd-nspawn /home/chroot/stretch
vim ~/.ssh/config
代替systemd-nspawn /home/chroot/stretch
vim .ssh/config
,用systemd-nspawn /home/chroot/stretch
代替systemd-nspawn stretch
等。
通配符的使用使您的命令更加通用。 我通常将它与chmod
和chown
结合使用。
# chown root:root /var/www/*.sq && chmod 644 /var/www/*.sq
键盘快捷键
这是最低要求。
Alt +。 -替换上一个命令的最后一个参数。 也可以使用!$
进行访问。
Ctrl + A,Ctrl + E-分别跳至该行的开头和结尾。
Ctrl + U,Ctrl + Y-剪切和粘贴。 当您键入复杂的命令并注意到需要首先执行另一个命令时,这非常方便。 嗯,在哪里保存当前输入? 就在这里
Ctrl + W-杀死光标前的一个单词。 按住不放会清除该行。 默认情况下,输入保存到剪贴板(用于Ctrl + Y)。
Ctrl + K-剪切光标后的部分行,将其添加到剪贴板。 Ctrl + A Ctrl + K快速清除该行。
PgUp,PgDown,Ctrl + R-历史记录搜索。
Ctrl + L清除终端。
键盘响应度
我想向您展示一个小的设置,使您可以更快地滚动,导航和擦除。 当我们要擦除大的东西时我们该怎么办? 我们按住Backspace并观察它向后擦字符。 到底是怎么回事? 按下Backspace键后,一个字符消失,然后经过一小段延迟,然后触发自动重复:Backspace一次又一次擦除字符,就像您反复按下它一样。
我建议您根据手指的速度调整延迟和自动重复频率。 如果您只想擦除一个字符,则需要延迟-它使您有时间释放键。 太大的延迟会使您等待自动重复。 这不足以让您感到烦恼,但足以减慢您的思想从头脑向计算机的转移。 自动重复频率越大,删除文本的速度就越快,停止此过程就越困难。 目的是找到最佳值。
因此,魔术命令是:
$ xset r rate 190 20
190-延迟持续时间(以毫秒为单位),
20-每秒重复的频率。
我建议从这些值开始,并逐渐增加延迟,直到出现误报,然后再返回一点。 如果延迟太小,您将无法使用键盘。 要解决此问题,应重新启动X服务器或完整的计算机。 所以,请小心。
为了保存参数,您需要在X自动启动的某处添加此命令。
流程退出指示
我经常不得不开始一些长期运行的过程:繁琐的备份,大数据传输,归档打包/提取,打包构建等等。 通常,我会启动这样一个过程,切换到另一个任务,如果我的长时间运行过程已经退出,则偶尔会凝视。 有时我会投入太多工作而忘了它。 解决方案是添加流程退出通知,这将使我摆脱困境。
有许多用于此目的的工具:通知发送,dzen2,蜂鸣,播放,隔离。 所有这些都以某种方式很好,但是不适用于ssh连接。 这就是为什么我使用终端提示音:
$ long-running-command; echo $'\a'
ASCII编码具有0x7字符,名为bell 。 它用于蜂鸣PC扬声器。 PC扬声器不是现代事物,不是每台计算机都具备,并且耳机中听不到。 这就是为什么某些终端使用所谓的可视铃。 我使用urxvt,它通过提高紧急标志来执行可视铃声。 怎么了 当窗口想告诉您紧急情况时,可以使用此功能。
您现在可以检查终端对铃声的反应:
$ sleep 3; echo $'\a'
您可能需要三秒钟才能切换到另一个窗口。
不幸的是,并非每个终端都可以通过提高紧急标志来显示可视铃声。 我检查了最受欢迎的。
输入echo $'\a'
太长echo $'\a'
,所以我做了一个wake
别名。
别名
默认情况下, cp
, scp
和rm
命令是非递归工作的,这很糟糕! 这是该死的糟糕遗产! 好吧,可以使用别名对其进行修复。 但是首先让我们看看非递归行为何时有用。
$ mkdir foodir $ cp * foodir
仅文件将被复制到foodir
,而不是目录。 rm
同样的情况:
$ rm *
将仅删除文件和符号链接,但保留目录。 但是,您多久需要一次此功能? 我喜欢认为cp
和rm
总是递归工作。
好的,但是安全性如何? 也许非递归行为可以保护您的文件? 在一种情况下,您有一个指向目录的符号链接,并且想要删除该符号链接,但保留目录。 如果在目录名后附加(有意或无意)斜杠,并且通过-r
启用了递归模式,则目录将为空! 空!
$ ln -s foodir dir_link $ rm -r dir_link/
如果没有-r
arg,它将滥用并且不会删除任何内容。 因此,递归rm
增加了丢失数据的风险。
我为cp
, scp
和rm
启用了递归模式,还为mkdir
添加了-p
来轻松创建嵌套目录。
alias cp='cp -r' alias scp='scp -r' alias rm='rm -r' alias mkdir='mkdir -p'
两年来,我从未为这些别名感到后悔,也从未丢失数据。 还有一个缺点:复制/删除的数据可能少于需要的数量,并且在没有别名的系统上工作时看不到它。 因此,请小心。 我知道我做什么,并总是谨慎地运行rm
。
最受欢迎的是ls
别名,您可能已经在使用它们:
alias ls='ls -F --color=auto' alias la='ls -A' alias ll='ls -lh' alias lla='ll -A'
同样,彩色grep比无色grep更漂亮:
alias grep='grep --colour=auto'
别名在脚本中不起作用,请不要忘记这一事实! 您必须明确指定所有参数。
触摸打字
这很明显,但我提醒您:触摸打字有助于快速打字。 一开始会很困难,但是随着时间的推移,您将克服这些限制。
学习触摸打字的最佳时间是休假,没有人打扰您。 学习时请不要着急! 您的目标是记住每个角色的位置,而不是记住您的大脑,而是记住您的手指。 最好输入慢速,但不要输入错误,而不要输入有错误的快速输入。 请记住,大师们的成绩不是靠快速手指就能实现的,而不会犯错误。
不要忘记休息一下。 您的大脑和手指需要休息。 当错误开始出现时,这意味着您需要休息一下。
今天就这些
希望这些提示对您有所帮助。 祝你好运!