第 4 章. Shell 技巧

目录
通用 Shell 技巧
命令行历史记录
其他快捷键组合
虚拟终端和 screen

shell 技巧章节提供了一些实用技巧,当您使用 GNU/Linux shell(命令行界面)时,您可能会希望使用这些技巧。这些信息包括实用的快捷键组合、shell 的命令历史记录以及关于虚拟终端的信息。

如果您无法启动进入系统:如果您在启动进入系统时遇到问题,您可能希望使用 shell,以便您可以启动进入系统并尝试修复问题。

要做到这一点,您需要在启动之前将 “init=/bin/sh” 传递给您的系统。

如果您不知道如何做到这一点,请参阅第 14 章,该技术是相同的,只是这次您传递的是 “init=bin/sh” 而不是 “single”。

通用 Shell 技巧

自动 命令 补全

使用 TAB 键,bash 将尝试自动为您补全命令。 您可以使用它来补全命令(工具)名称。在处理文件系统、更改目录、复制文件等等时,您也可以使用它。

还有其他一些不太为人所知的自动命令补全的使用方法(例如,补全用户名):[1]

ESC-Y  (Y: 特殊 字符)

测试自动索引 将尝试为您补全命令名称。如果失败,它将列出可能的补全项(如果存在)。 如果没有任何补全项,它将只是发出蜂鸣声(和/或)闪烁屏幕。

CTRL-X-Y  (Y: 特殊 字符)

列出可能的补全项(它不会尝试为您补全),如果没有任何可能的补全项,则发出蜂鸣声。

特殊字符

将以下特殊字符ESC-Y CTRL-X-Y 结合使用,其中 Y 是某些特殊字符。例如 ESC-$ CTRL-X-$ 来补全环境变量名称。

  • ~ (波浪号) 补全用户名

  • @ (at 符号) 补全机器名

  • $ (美元符号) 补全环境变量名称

  • ! (感叹号) 用于补全命令名称或文件名的魔法字符。 ! 特殊字符的功能与 TAB 键相同。 它在某些其他情况下也有效;例如,当补全 man 手册页名称时。

alias

alias 命令将列出您当前的别名。 您可以使用 unalias 来移除别名(要禁用别名,只需在一个命令前添加一个 “\”(反斜杠))。。。

别名允许一个命令被替换为另一个命令。 这用于使一个命令执行其他操作,或自动添加某些选项。 这可以在一个会话期间使用 alias 命令完成(见下文),或者可以将信息添加到 .bashrc 文件(在用户主目录中找到)。

以下是一个别名部分(在您的 .bashrc 文件中)可能看起来像的示例

# my personal aliases
alias cp='cp -vi' #to prompt when copying if you want to overwrite and will tell you where information is going 
alias rm='rm -i' #Prompts you if you really want to remove it.
alias mv='mv -i' #Prompts you if you are going to overwrite something

在任何 Mandriva GNU/Linux 系统上,全局别名(对于所有用户)都位于 /etc/profile.d/alias.sh 中。 上面列出的命令已经有别名,以及其他几个常用的命令。

set -x

set 是 bash 的内置命令之一,请尝试在 bash 手册中查找其许多用法选项。

使用 set-x 选项将使 bash 在运行每个命令之前,先打印出它将要运行的每个命令。

这对于找出某些命令正在发生什么很有用,例如,包含通配符或可能导致问题的特殊符号,或者复杂的别名被引用。 使用 set +x 可以关闭此功能。

示例

使用 set -x 后,您可以运行命令

ls

在命令运行之前打印的输出(例如)

+ ls -F --color=auto 

这意味着该命令实际上是一个别名,用于运行带有 -F--color=auto 选项的 ls。 在命令前使用 “\”(反斜杠)可以运行它而无需别名。

\ (反斜杠)

反斜杠转义字符可以在 shell 命令之前使用,以覆盖任何别名。

例如,如果 rm 被设置为 rm -i 的别名,那么键入 “rm” 实际上会运行 rm -i

但是,键入 \rm 会让 shell 忽略别名,而只运行 rm(它完全按照您键入的内容运行),这样它就不会在您想要删除东西时进行确认。

使用 rm

请注意,删除命令的别名是有原因的。不正确地使用它可能会删除您不想删除的文件。

仅在您确切知道自己在做什么的情况下才使用 \rm(恢复文件不容易,rm 不会将东西发送到回收站)。

“\” 字符可以在特殊字符(例如空格或通配符)之前使用,以阻止 bash 尝试扩展它们。 您可以使用反斜杠在空格前创建一个目录名称中带有空格。 例如,您可以键入 cd My\ Directory\ With\ Spaces,这通常不起作用。

“\” 字符也可以用于阻止 bash 扩展某些符号(作为替代方法,您可以使用单引号,尽管您可能需要同时使用两者)。

TAB 键请注意,使用 TAB 键(自动命令补全)将自动为空格使用转义符(因此您不必手动键入它们)。

script

script” 命令创建一个 typescript,或 shell 会话的 “捕获日志” - 它将您的会话副本写入到一个文件,包括您键入的命令及其输出。

~ (波浪号 字符)

波浪号字符用作用户主目录的别名。

例如,如果您的用户名是 “fred”,那么您可以简单地键入 cd ~ ,而不是键入 cd /home/fred。或者要进入 fred 的 tmp 目录(在他的主目录下),您可以键入 cd ~/tmp。

主目录快捷方式:~ (波浪号) 也可以用作其他用户主目录的快捷方式,只需键入:~user_name,它就会将您带到用户的主目录。请注意,您需要拼写正确的用户名,不能使用通配符。

 

set bell-style none

这个特定的set 命令将关闭命令行中的系统铃声(对于 X windows,请使用 xset -b)。如果您希望铃声永久关闭(没有声音铃声),那么您可以将此命令添加到您的 “.bashrc” 或 “.bash_profile” 中(只需将其添加到您拥有别名的那个文件中...)。

reset

reset 命令重新初始化您当前的终端。 当终端的文本变得乱码时,这很有用,只需键入 “reset”,这将修复您的终端。

exit

关闭您当前的终端(使用 x-terminals)或注销。 也可以尝试 CTRL-D

logout

注销终端,也可以尝试 CTRL-D

echo

一个重复您键入的任何内容的简单命令。

示例

echo “hello world”

简单地显示 “ hello world”。

示例

echo rm -R *

这将输出将传递rm 命令的内容(以及因此将被删除的内容),在命令前放置 echo 会使其变得无害(它只是扩展通配符,以便您知道它将做什么)。

也可以尝试将 -e 选项与 echo 一起使用。 这将允许您使用转义字符序列来格式化行的输出。 例如,'\t' 用于制表符,'\n' 用于换行符等等。

使用 echo 预防意外:键入:echo command(s) 可以 避免您意外地做一些您不期望的事情。

使用 echo 允许您扩展通配符以了解在实际运行命令之前会发生什么。

注释

[1]

此信息改编自 Mandrakesoft 的命令行手册(经过编辑),有关更多信息,请参见参考书目中的 [7]。