跳转到内容

Unix 指南/解释/Shell 提示符

来自维基教科书,开放书籍,开放世界

shell 提示符(或命令行)是用户输入命令的地方。 当通过基于文本的终端访问系统时,shell 是访问程序和在系统上执行操作的主要方式。实际上,它是围绕所有正在运行的程序的外壳。当通过图形环境(如 X11)访问系统时,仍然可以打开一个终端模拟器,并使用 shell 完成有用的工作。

本章描述如何找到 shell 提示符并开始使用它。


Clipboard

待办事项


找到 shell 提示符

[编辑 | 编辑源代码]

人们通过不同的方式获得 shell 提示符,例如

  • 他们使用图形环境(如 Aqua、GNOME 或 KDE)和终端模拟器。
  • 他们不使用 GUI,而是简单地使用 TTY 设备;有时也使用 GUI,并使用 Ctrl+Alt+F[数字](大多数 GNU/Linux 系统允许 1–6 用于 [数字])进入 TTY 设备。要返回到 X Window 系统,请使用 Ctrl+Alt+F[高于 TTY 设备数量的数字 1]。

使用 TTY 设备

[编辑 | 编辑源代码]

Unix 系统可以使用 TTY 设备来运行 shell。第一行看起来像

login:

在此提示符下输入用户名,然后输入密码。这将提供一个 shell。

打开终端模拟器

[编辑 | 编辑源代码]

终端模拟器(或控制台模拟器)是一个模拟早期用户传统上用来登录 Unix 的终端硬件的程序。它在图形环境中显示为一个窗口,并允许访问 shell 提示符。

有几种方法可以打开终端模拟器

  • 使用 X Window 系统,请尝试 xterm。大多数设置在您登录时要么为您启动一个或两个 xterm,要么提供一个菜单供您启动 xterm。
    • KDE 提供一个 终端程序 (Konsole)。您可以在 K 菜单 > 系统菜单中找到它。如果您右键单击图标面板的空白部分,可以添加一个用于终端的应用程序按钮。
    • GNOME 在 程序 菜单中的某个地方提供终端模拟器。
    • LXDE 提供终端模拟器 LXTerminal(至少在 Lubuntu 发行版中)。它可以在启动菜单的 Accesories 子菜单中找到,通常位于桌面的左下角。
    • 使用 Enlightenment 17,右键单击桌面,然后转到 Enlightenment > Eterm。
  • 在 Mac OS X 上,请使用/Applications/Utilities/Terminal. 也就是说,转到硬盘上的 Applications 文件夹,然后转到其中的 Utilities 文件夹,双击 Terminal 程序的图标。您可能希望将 Terminal 图标保留在 Dock 上。

大多数终端模拟器(与其他图形程序一样)提供一个菜单栏来配置终端。例如,它们允许您更改字体和颜色;有些人更喜欢黑色背景上的白色文本。xterm 更难配置;其菜单可以通过按住 Control 键并使用三个鼠标按钮中的每一个进行点击来找到。

使用 SSH 访问远程 shell

[编辑 | 编辑源代码]

ssh 程序是连接到远程服务器上的 shell 帐户的安全方法。服务器必须运行 sshd 服务器软件才能接受连接。请参阅有关 连接到远程 Unix 的章节。

提示符的外观

[编辑 | 编辑源代码]

shell 提示符通常以 $ 符号结尾。为简单起见,本书中的示例使用如下 shell 提示符

$

一些较旧的 shell 提示符以 % 结尾

%

C shell 有时使用 > 结尾

>

许多 shell 具有提供更多信息的提示符,例如

localhost:puffy {1}

您也可以自定义 shell 提示符。对于 bash,请在 $PS[1–4] 变量中使用 这些 特殊字符。$PS1 是您通常看到的提示符,$PS2 是在使用反斜杠 ('\') 执行多行命令时看到的提示符。有关更多信息,请参阅 手册

永远不要复制/输入本书中使用的 shell 提示符。shell 始终会在准备接受命令时为您提供提示符。

Root shell 提示符

[编辑 | 编辑源代码]

如果您 成为 root 或以 root 身份登录,大多数系统会将 shell 提示符更改为以 # 结尾。root 帐户被允许执行任何操作(删除或更改任何文件),因此 # 是提醒用户提示符强大功能的标志。除非必要,请避免使用 # 提示符;请参阅有关 成为 Root 的章节。在本书中,root shell 提示符如下所示

#

使用 shell 的基本知识

[编辑 | 编辑源代码]

参数和选项

[编辑 | 编辑源代码]

输入命令时,shell 会按以下顺序执行一些操作(如果成功,它将执行找到的命令)

  1. shell 检查命令是否为绝对路径(如 /bin/ls),以及该路径是否为可执行文件。
  2. 如果命令不是绝对路径,则 shell
    1. 在它的内置命令中搜索输入的命令。
    2. 环境变量 PATH 中的目录中搜索输入的命令。它从 PATH 中列出的第一个目录开始搜索,然后是第二个,依此类推。

例如,我们将使用命令 ls,它列出文件和目录。此命令列出/var(这在您的计算机上可能有所不同)的内容

$ ls /var
account backups db      lib     msgs    run     tmp
audit   crash   empty   log     named   rwho    www
authpf  cron    games   mail    quotas  spool   yp

第一个词“ls”是内置于 shell 中用于运行的程序或命令的名称。在本例中,程序 /bin/ls 将被运行。在这种情况下,“/var”是一个参数;它告诉 ls 要列出什么。参数由空格分隔,通常是一个空格。

有一些称为选项的特殊参数。每个命令都会决定什么是选项,但对于许多命令,以单个连字符开头的选项通常是更具描述性的选项的缩写,更具描述性的选项以两个连字符开头,并且有些以两个连字符开头的选项没有缩写。以下是一个示例(将其读作“el es dash el slash var”)

$ ls -l /var
drwxr-xr-x   2 root    wheel      512 Mar 20  2005 account
drwxrws---   2 root    wheel      512 Mar 20  2005 audit
drwxrwx---   2 root    authpf     512 Mar 20  2005 authpf
...
drwxr-xr-x   2 root    wheel      512 Jun 11 02:09 yp

请注意,这些命令要求选项位于其他参数之前。例如,以下方法不起作用(除非您有一个名为-l):

$ ls /var -l
ls: -l: No such file or directory
/var:
account backups db      lib     msgs    run     tmp
audit   crash   empty   log     named   rwho    www
authpf  cron    games   mail    quotas  spool   yp

的文件或目录)ls /var -lls -l /var相同。这对忘记输入某些选项的用户来说很好。

如果真的存在名为“-l”的文件怎么办?然后必须指定“-l”不是一个选项。为此,可以使用“--”参数,它表示“选项结束”。这就是为什么文件名以连字符开头不方便的原因。

$ ls -- -l
-l

编辑命令

[编辑 | 编辑源代码]

如果 shell 支持命令行编辑,则箭头、End 和 Home 键很有用。左右箭头允许用户移动文本光标以编辑命令,而 Home 和 End 键允许用户将光标移动到行首或行尾。例如,我们想列出一些特定的文件,如下所示

$ ls -l /etc/passwd /etc/profile

但我们输入了

$ ls l- /etc/passwd /etc/profile

我们可以按下 Home 键将光标移动到行首,然后使用右箭头将光标向右移动以删除 "-l"。之后,我们按下回车键以正常运行命令。(这在许多没有命令行编辑功能的非 shell 程序中不起作用!)

具有历史功能的 shell 允许使用向上箭头将以前的命令调回到 shell 提示符。除非用户按下回车键,否则这些先前行不会再次运行。向下箭头将返回列表中的下一行。

如果箭头键坏了,或者您确实找到了一些没有箭头的键盘,那么大多数 shell 中也支持 Control Emacs 导航键(Ctrl+B、Ctrl+F、Ctrl+P、Ctrl+N、Ctrl+E 和 Ctrl+A)。

当前工作目录

[编辑 | 编辑源代码]

使用 cd 更改您所在的目录。语法是 cd 后面跟着路径名。cd bin 将带您到 bin 目录(位于您当前所在的目录中),cd .. 将带您向上一个级别。cd ~ 将带您到您的主目录,cd ~ 后面跟着用户名将带您到该用户的家目录。

虽然许多 shell 提示符在提示符中包含当前目录的名称或当前目录名称的末尾(例如 '[user@localhost ~]$'),但您可以使用 pwd 命令来打印工作目录。

$ cd /etc
$ pwd
/etc
$ ls passwd profile
passwd profile
$ cd ~john
$ pwd
/home/john

查找命令的帮助信息

[编辑 | 编辑源代码]

命令的第一个词是命令的名称。例如,在以下命令中,“ls”是命令名称,“-l”、“/etc/passwd”和“/etc/profile”是参数。

$ ls -l /etc/passwd /etc/profile

但是我们怎么知道“ls”命令的作用呢?大多数类 Unix 系统为每个命令提供在线手册页。例如,

$ man ls

这将在一个名为分页器的程序中打开手册页。最常见的分页器是 lessmore。这些允许用户键入 <SPACE BAR> 向下滚动一屏,'b' 向上滚动一屏,<RETURN> 向下滚动一行,'q' 退出分页器。

但是,对于那些对命令几乎一无所知的人来说,手册页通常没有用。关于 命令 的章节将有所帮助。部分 Guide to UNIX/Commands/Getting Help 包含如何有效使用 man 和其他帮助工具的策略。

  1. Shell 提示符
  2. 引用和文件名扩展
  3. 管道和作业控制
华夏公益教科书