Unix 指南/解释/Shell 提示符
shell 提示符(或命令行)是用户输入命令的地方。 当通过基于文本的终端访问系统时,shell 是访问程序和在系统上执行操作的主要方式。实际上,它是围绕所有正在运行的程序的外壳。当通过图形环境(如 X11)访问系统时,仍然可以打开一个终端模拟器,并使用 shell 完成有用的工作。
本章描述如何找到 shell 提示符并开始使用它。
人们通过不同的方式获得 shell 提示符,例如
- 他们使用图形环境(如 Aqua、GNOME 或 KDE)和终端模拟器。
- 他们不使用 GUI,而是简单地使用 TTY 设备;有时也使用 GUI,并使用 Ctrl+Alt+F[数字](大多数 GNU/Linux 系统允许 1–6 用于 [数字])进入 TTY 设备。要返回到 X Window 系统,请使用 Ctrl+Alt+F[高于 TTY 设备数量的数字 1]。
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 帐户的安全方法。服务器必须运行 sshd 服务器软件才能接受连接。请参阅有关 连接到远程 Unix 的章节。
shell 提示符通常以 $ 符号结尾。为简单起见,本书中的示例使用如下 shell 提示符
$
一些较旧的 shell 提示符以 % 结尾
%
C shell 有时使用 > 结尾
>
许多 shell 具有提供更多信息的提示符,例如
localhost:puffy {1}
您也可以自定义 shell 提示符。对于 bash,请在 $PS[1–4] 变量中使用 这些 特殊字符。$PS1 是您通常看到的提示符,$PS2 是在使用反斜杠 ('\') 执行多行命令时看到的提示符。有关更多信息,请参阅 手册。
永远不要复制/输入本书中使用的 shell 提示符。shell 始终会在准备接受命令时为您提供提示符。
如果您 成为 root 或以 root 身份登录,大多数系统会将 shell 提示符更改为以 # 结尾。root 帐户被允许执行任何操作(删除或更改任何文件),因此 # 是提醒用户提示符强大功能的标志。除非必要,请避免使用 # 提示符;请参阅有关 成为 Root 的章节。在本书中,root shell 提示符如下所示
#
输入命令时,shell 会按以下顺序执行一些操作(如果成功,它将执行找到的命令)
- shell 检查命令是否为绝对路径(如 /bin/ls),以及该路径是否为可执行文件。
- 如果命令不是绝对路径,则 shell
例如,我们将使用命令 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 -l与ls -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
这将在一个名为分页器的程序中打开手册页。最常见的分页器是 less 和 more。这些允许用户键入 <SPACE BAR> 向下滚动一屏,'b' 向上滚动一屏,<RETURN> 向下滚动一行,'q' 退出分页器。
但是,对于那些对命令几乎一无所知的人来说,手册页通常没有用。关于 命令 的章节将有所帮助。部分 Guide to UNIX/Commands/Getting Help 包含如何有效使用 man 和其他帮助工具的策略。