[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 下一页 ]


Debian 用户参考手册 (过时文档)
第 6 章 - 基本命令和工具


作者 = Oliver Elphick olly@lfix.co.uk

主题 = head, tail, grep, 等。

本章最新更新:1997 年 12 月 14 日


6.1 本章涵盖内容

本章将告诉您如何运行使用 Debian Linux 所需的基本命令。

我们假设您已经登录并处于可以输入命令的 shell 中。有关如何登录的说明,请回顾 Debian GNU/Linux 系统概述,第 2 章。如果您没有运行 X-Windows,通常在您登录后会立即进入交互式 shell。如果您正在运行 X-Windows,您应该参考 X Windows,第 17 章,了解如何启动带有 shell 的窗口的说明。

可用 shell 在 Shell,第 5 章 中描述。此处给出的所有示例都假设您正在使用 Bourne-Again Shell,/bin/bash,尽管在大多数情况下,任何 shell 的命令语法都不会有任何差异。Bash 是首次安装 Debian Linux 时的默认 shell。


6.2 运行命令


6.2.1 如何输入命令

要运行命令,请在提示符下键入命令,后跟任何必要的选项,然后按 Enter 键。shell 将解释该命令,首先处理任何特殊的 shell 语法,然后将启动该命令作为一个新进程。

大多数命令默认静默运行,除非它们被明确要求说明它们正在做什么。如果没有错误消息,则该命令应该已成功执行。


6.2.2 Linux 如何查找命令

当您键入命令名称时,Linux 必须找到包含您要运行的程序的文件。这是它的工作方式

您键入的第一个词是命令本身[3]。如果它包含斜杠字符 (/),则整个命令被视为路径,可以是绝对路径(如果以 / 开头)或相对于当前目录的相对路径。使用该路径指示的文件,前提是它存在、可执行并且(对于脚本)可读。

如果命令不包含斜杠,shell 将在您当前的搜索路径中查找它。这是一个目录列表,目录之间用冒号分隔。命令搜索路径保存在环境变量 PATH 中:键入 echo $PATH 以查看它是什么。例如,

     
     $ echo $PATH
     /usr/bin:/bin:/usr/bin/X11:/usr/local/bin:/usr/games:/home/olly/bin

每个目录都按顺序搜索,从列表的开头开始。如果找到名称的匹配项,shell 还会考虑找到的文件是否可执行(如果是脚本,则可读)。一旦找到这样的匹配项,搜索就会停止[4]。这就是为什么新的程序员经常在运行他们的第一个程序时遇到麻烦的原因。他们经常将其命名为 test 并在没有路径的情况下运行它;shell 首先找到系统程序 test 并运行它。

如果您需要更改路径,您应该将新目录添加到列表的末尾;当前目录 (.)(如果包含在内)应放在最后[5]。要使用的命令是 export PATH=$PATH:new_directory[6] 。


6.2.3 命令选项

大多数命令的操作可以通过在命令名称后立即放置命令选项来更改。使用了几种选项样式,您必须查看每个命令的文档以了解它可以接受哪些选项以及它们的作用。

最常见的选项形式是以连字符开头的字母,例如

     ls -l

使用这种选项样式,可以将几个单字符选项组合成一个,例如

     ls -ali

这等效于

     ls -a -l -i

有时,像这样的单字母选项需要额外的参数

     awk -F: -f /tmp/bar /tmp/foo

这里 :/tmp/bar 分别是选项 -F-f 的参数。

少数命令的选项不需要以连字符开头。您最有可能使用的一个是 tar

     tar cvmf /dev/st0 /usr

与以下命令相同

     tar -cvmf /dev/st0 /usr

第三种选项样式,通常由 GNU 程序使用,是以 -- 开头的整个单词或短语。许多命令可以使用单字母和全词选项

     tar --create --verbose --modification-time --file /dev/st0 /usr

最后,命令可以为自己定义完全不同的选项模式,例如以 + 开头的选项,与 - 相反。


6.2.4 必需命令

这些命令是您真正需要知道才能完成任何事情的命令。

我们仅给出命令的简要描述,描述其基本用法。有关完整详细信息,您应始终参考手册页和 info 文件的详细文档。

此处给出的简短示例绝不是做事的唯一方法;使用 Unix 的关键是学习构建块及其功能,并能够以自己的方式使用它们。无论任务是什么,几乎总是有不止一种方法来执行它。有时会有五六种不同的方法!

在本章中,可选内容显示为 这样看起来像这样的单词 将被替换为您尝试执行的操作的适当内容。


6.2.4.1 阅读文档的命令

为了避免因基本问题而打扰其他用户,请务必阅读手册!

以下是让您执行此操作的命令

man [章节号] 主题

man 显示命令的手册页(如果它没有在文本末尾终止,请使用 q 或 ctrl-C 退出)。更多详细信息在 文档,第 3 章 中给出。

此命令对于帮助您学习如何使用它和其他 Linux 命令至关重要。

info [主题]

许多 Debian Linux 文档以 info 格式提供。这类似于超文本格式,因为您可以通过遵循嵌入在文本中的链接跳转到文档的其他部分。

有关如何使用 info 的完整描述,请参阅 文档,第 3 章

help [主题]

使用 help 获取有关 bash 内置命令的在线帮助。

单独的 help 会打印您可以请求帮助的主题列表。


6.2.4.2 基本文件处理命令

有关文件系统和文件处理的更完整描述,请参阅 文件和文件系统,第 4 章

这些是您真正必须知道的命令

pwd

显示当前目录。

cd [目录]

将当前目录更改为指定的 目录。如果您不指定 目录,您将被返回到您的主目录。

mkdir 新目录

mkdir 用于创建新目录。新目录 可以指定为路径,也可以指定为简单名称(在这种情况下,它在当前目录中创建)。

mv 源文件 目标文件

mv源文件 移动到 目标文件 并删除 源文件源文件 可以是文件列表,但在这种情况下,目标文件 必须是目录。

这也是重命名文件或目录的方式。

cp 源文件 目标文件

cp源文件 复制到 目标文件。同样,目标文件 可以是目录,源文件 可以是文件列表。

ln 源文件 目标文件

ln 根据选项,将 源文件 链接到 目标文件,使用硬链接或符号链接。

rm 文件列表

rm 删除文件。使用 -r 选项,它可以删除目录及其内容。

rm 要非常小心;一旦文件被删除,您就无法将其恢复。没有 undelete 命令。

rmdir 目录列表

rm 删除空目录。

chmod 模式 文件列表

chmod 更改文件和目录的权限。模式 可以是八进制数,例如 644,也可以是其符号表示,例如 u=rw,go=r

chown 所有者[.] 文件列表

chown 更改文件的所有权。使用 -R 选项对整个目录树执行此操作。

如果除了 所有者 之外还指定了 .,则文件的组所有权也会被更改。

chgrp 文件列表

chgrp 更改文件的组所有权。使用 -R 选项对整个目录树执行此操作。

ls 目录

ls 列出 目录 的内容;默认情况下,输出是排序的。

ls 的选项比任何其他命令都多。最常用的选项是 -l,用于显示文件权限和上次更改日期;-a,用于显示隐藏的 dot-files。


6.2.4.3 这些命令用于管理文件系统

文件组织到文件系统中(请参阅 文件和文件系统,第 4 章)。

每个 Debian Linux 系统(以及每个 Unix 系统)都有一个根文件系统,简称为 /。系统中的所有文件和设备,以及可能其他系统上的文件,都可以在 / 下访问。文件放置在目录中,目录本身可以放置在目录中,依此类推。这个通用树的段将位于不同的物理设备上,或单个物理设备的不同部分(“分区”)。新的文件系统,每个都有自己的目录树,可以嫁接到通用目录树中的任意“挂载点”。(这些只是被指定为新树头的目录。)

将段嫁接到主树的过程称为“挂载”;文件系统挂载在挂载点上,挂载点是一个目录。

df

df 列出已挂载的分区,并显示存在的空间量、已用空间和可用空间。(分区可能包括 /proc,这是一个特殊的“不存在”的分区,其中包含有关 Linux 内核当前状态的信息。)

mount [分区 目录]

单独的 mount 列出已挂载的分区。

它也是用于将分区的 文件系统添加到通用目录树中的命令。例如

     mount /dev/hda2 /usr

您必须是超级用户(以 root 身份登录或运行 su)才能挂载或卸载文件系统。

umount 目录

umount 从通用目录树中删除分区的 文件系统。例如

     umount /usr

您必须是超级用户(以 root 身份登录或运行 su)才能挂载或卸载文件系统。


6.2.4.4 查看文件

文件包括物理设备、可执行程序和目录,以及文本文件。最好不要在屏幕上查看已编译的可执行文件。充其量它们会是垃圾;最坏的情况是它们会使屏幕上的所有内容都无法读取(有关从这种情况中恢复的方法,请参阅 管理您的屏幕,第 6.2.4.5 节。)

cat 文本文件[s]

cat文本文件[s] 转储到屏幕而不分页(类似于 DOS 的 type 命令)。如果您命名多个文件,每个文件将按顺序发送,没有中断或标题。

more 文本文件[s]

more 以分页方式将 文本文件[s] 列出到屏幕,以便您可以阅读它。按 空格键 向下移动一页,按 Enter 向下移动一行,按 b 向上移动一页。使用 qctrl-c 退出。

more 到达最后一个文件末尾时,它将自动退出。

less 文本文件[s]

less 类似于 more,但具有更多功能和稍微不同的行为。您必须键入 Q 才能终止它。

head 文本文件[s]

head 用于查看文件的前几行(默认情况下,它显示 10 行)。

tail 文本文件[s]

tail 用于查看文件的最后几行(默认情况下,它显示 10 行)。

od -cx 文件[s]

od 用于查看二进制文件的内容。在没有选项的情况下,它将文件内容显示为一系列八进制数。由于很少有人精通这种形式,因此 -c-x 选项一起使用可能更有用。它们尽可能将文件内容显示为实际字符,如果字符不可显示,则显示为八进制数,并在下方显示十六进制表示形式。例如

     $ od -cx /bin/ls | more
     0000000 177   E   L   F 001 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
             457f 464c 0101 0001 0000 0000 0000 0000
     0000020 002  \0 003  \0 001  \0  \0  \0 240 217 004  \b   4  \0  \0  \0
             0002 0003 0001 0000 8fa0 0804 0034 0000
     0000040 204   o  \0  \0  \0  \0  \0  \0   4  \0      \0 005  \0   (  \0
             6f84 0000 0000 0000 0034 0020 0005 0028
     0000060 026  \0 025  \0 006  \0  \0  \0   4  \0  \0  \0   4 200 004  \b
             0016 0015 0006 0000 0034 0000 8034 0804
     0000100   4 200 004  \b 240  \0  \0  \0 240  \0  \0  \0 005  \0  \0  \0
             8034 0804 00a0 0000 00a0 0000 0005 0000

[7]

左侧列中的数字始终是八进制的;它们指示该行中第一个字符从文件开头的字节偏移量。

dd if=输入文件 of=输出文件

dd 用于在文件和设备之间进行任意复制(文件1文件2 或两者都可以是设备而不是文件。)您可以使用 dd 复制文件,同时丢弃其前几个字节,将文件分解为块,将磁盘映像复制到软盘(例如,获取 Debian 启动软盘),检查磁带的内容,或任何其他您可以发挥创造力的事情。

find 目录 -name 文件名

find 告诉您 文件名 在以 目录 开头的树中的位置。此命令还有许多其他有用的选项。

xargs 命令

xargs 通常与 find 一起使用。它将给命令的长文件列表分解为 shell 可以处理的足够短的块。这样,您可以遍历整个文件系统并在所有选定的文件上执行某些命令。例如,此命令查找您主目录中最近两天内更改的所有文件,并设置它们的所有组写入访问权限

     find $HOME -mtime -2 | xargs chmod g+w
grep 模式 文件列表

grep 扫描 文件列表 中的每个文件,查找与 模式 匹配的行(请参阅 正则表达式,第 6.3 节)。

file 文件

file 报告 文件 是什么类型的东西。

type 文件

type 说明在哪里可以找到搜索路径中的 文件

whereis 文件

whereis 类似于 type,但提供更多信息。


6.2.4.5 管理您的屏幕

管理您的屏幕可能是一件非常令人沮丧的经历。

当您无助地坐了一会儿,试图弄清楚为什么您的整个显示器都包含完全的垃圾,或者为什么按箭头键会显示不相关的字符时,您可能会觉得是时候将整个计算机系统倾倒到垃圾箱中并回到算盘了。本节为您提供了一条生命线。

首先,这里有一些命令来处理您可以在屏幕上看到的内容。屏幕可以是整个文本显示,也可以是 X 中的单个文本窗口。

tput clear

所有连接在串行电缆上的 VDU,以及所有模拟 VDU 的内存映射显示器,包括您的文本控制台和 xterm 窗口,都会响应特殊的字符序列,当这些序列发送到屏幕时,它们将更改整个屏幕或部分屏幕的外观。通常,这些序列以 ESCAPE 字符开头,但它们不必如此。由于许多不同的制造商生产了大量的不同 VDU,它们大多具有不同的控制序列,Linux 有一个数据库,其中包含适用于不同类型 VDU 的序列。该数据库以两种形式出现——较旧的称为 termcap,较新的称为 terminfo。

tput 是一个命令,它读取 terminfo 数据库以查找指定的序列,将该序列转换为屏幕控制字符,并将这些字符发送到屏幕。clear 序列清空屏幕并将光标放在左上角。

tput rmacs

如果您有意或无意地在屏幕上显示二进制文件,您可能会偶然将使屏幕显示其备用字符集的序列发送到屏幕;这通常包含许多图形线条绘制字符、扑克牌花色、奇怪的数学符号等等。计算机尝试在这种字符集中显示普通文本会产生包含完全垃圾的屏幕。rmacs 序列将显示器切换出备用字符集。使用此命令停止显示器显示垃圾图形字符,并使其显示正确的文本。(效果通常是将发送的新字符更改为正确的文本,但将已显示的文本保持原样。)

stty

stty 控制 VDU 和计算机之间的通信。它控制诸如波特率、奇偶校验、停止位和握手之类的特性,所有这些都应该由您的系统管理员为您设置好(如果系统管理员是您,请阅读系统管理手册)。对于您的控制台或 xterm 窗口(它们直接从内存映射),线路特性是不相关的,但是 stty 设置的某些特性与每种类型的显示器都相关。

如果看起来有必要,您可以使用这些特性。(如果必要,您可能会发现似乎没有任何效果;这可能是因为回车键不再起作用,并且 Linux 已恢复为使用基本默认值,即换行符 (Ctrl-J)。如果似乎没有任何效果,请在输入任何命令之前按 Ctrl-J,并在完成命令时使用 Ctrl-J 而不是回车键。)

sane

如果一切都停止工作,stty sane 是一种可以尝试的选项。记住在命令之前和之后都使用 Ctrl-J,并且不要使用回车键。

echo

如果键入的内容没有出现在屏幕上,请使用 stty echo

intr '^C'

使用 stty intr '^C' 使 Ctrl-C 用作您的中断键(这将告诉正在运行的程序停止)。

-a

使用 stty -a 向您显示您现有的 stty 设置是什么。


6.2.4.6 压缩文件

为了节省磁盘空间,许多文件被压缩。它们由诸如 gzipcompress 之类的程序扫描并缩小尺寸,通常缩小到原始尺寸的三分之一左右。

压缩文件必须先解压缩才能读取。

gunzip 文件.后缀

gunzip 解压缩 文件.后缀(其中 后缀.gz 或可能是 .Z),删除它并写入一个名为 文件 的未压缩文件。

尽管名称如此,gunzip 无法处理由 PKZIP 创建的 zip 格式文件。有一个 pkunzip 程序可以处理此类文件。

zcat 压缩文件

zcat 执行与 cat 相同的工作,但首先解压缩 压缩文件,而不会更改磁盘上的文件。

zmore 压缩文件

zmore 执行与 more 相同的工作,但首先解压缩 压缩文件,而不会更改磁盘上的文件。

zless 压缩文件

zless 执行与 less 相同的工作,但首先解压缩 压缩文件,而不会更改磁盘上的文件。

zgrep 压缩文件

zgrep 执行与 grep 相同的工作,但首先解压缩 压缩文件,而不会更改磁盘上的文件。


6.2.4.7 备份命令

您需要定期进行备份,以便能够在发生灾难时恢复您的系统和数据。为了获得对所有需要备份的文件的完全访问权限,系统备份必须由超级用户完成。本节仅指对您自己的主目录以及您有权访问的其他文件的备份。

这些程序用于各种类型的备份

tar

tar 旨在存档目录及其所有内容。它有很多选项,但这是一个使用它将您的主目录备份到 SCSI 磁带的简单示例

     tar cvf /dev/st0 $HOME

以下是如何读取已使用 tar 写入的磁带的内容

     tar tf /dev/st0

以及以下是如何从这样的磁带备份中恢复特定目录(及其内容)

     tar xvf /dev/st0 $HOME/private/letters

您还可以恢复单个文件

     tar xvf /dev/st0 $HOME/private/letters/bank.21Aug
cpio

cpio 用于将单个文件写入备份。以某种方式准备文件列表,然后将其管道输入到 cpio 的标准输入。以下是如何使用它将您的主目录存档到 SCSI 磁带

     find $HOME -print | cpio -ovBH newc >/dev/st0

以下是如何读取已使用 cpio 写入的磁带的内容

     cpio -itBH newc </dev/st0

以及以下是如何从这样的磁带备份中恢复一个目录中的一组文件名都以“bank”开头的文件

     cpio -itBH newc "$HOME/private/letters/bank*" </dev/st0
afio

afio 像 cpio 一样用于将单个文件写入备份。它还具有在将文件写入备份之前压缩文件的附加功能。如果您有很多信息要存储在容量有限的介质上,这将非常有用。以下是如何使用它将您的主目录存档到 SCSI 磁带,使用压缩

     find $HOME -print | afio -ovZ >/dev/st0

6.2.4.8 打印文件

有一个基本的打印命令(尽管有很多用于专门用途的命令)

lpr 文件

lpr文件 打印到默认打印机。lpr 是用户命令,用于将作业添加到后台处理队列。即使您注销,作业也会继续打印。

如果您有多台打印机,您可以使用选项 -P打印机 将作业定向到特定打印机。

lpq

lpq 显示打印机后台处理队列中当前的作业列表。

lprm 作业ID

lprm 从后台处理队列中删除由 作业ID 标识的作业。如果作业已经在打印,这可能不会停止它;作业可能已经存储在打印机的内存中


6.2.4.9 更改文件

有关编辑文件的信息,请参阅 文本编辑,第 8 章


6.2.4.10 会话管理

会话是从登录到注销计算机之间的一系列事件。

当您第一次登录时,您将看到一个提示符,其中可能包含您当前机器的主机名,也可能包含当前目录。提示符以美元符号结尾:$,表示您是普通用户。如果您成为超级用户,美元符号应更改为井号(或 sharp)符号:#。您需要知道您是超级用户,因为那样您可能会因错误键入普通命令而对系统造成很大的损害。

这些命令与处理您的会话有关

exitlogout

使用 exitlogout 终止您的会话并注销。您启动的所有作业都将终止,除非它们是以 nohup 启动的,并且您的屏幕应返回到登录提示符。您通常可以使用 Ctrl-D 执行相同的操作,但该功能可能会被禁用。

su

使用 su 成为超级用户。系统将要求您输入密码;这是 root 登录的密码。

成为超级用户几乎与以 root 身份登录相同。您获得了相同的破坏能力。要非常小心!

使用 exitlogout 或 ctrl-D 停止成为超级用户。

bgfg

如果您正在运行一个作业,并且想在同一个屏幕上运行其他内容而不停止第一个作业,您可以通过键入 Ctrl-Z 将第一个作业置于后台。然后您可以运行其他命令。您可以使用 bg 在后台再次启动第一个作业。它将在后台继续运行,直到它想向屏幕发送任何内容;然后它将停止并等待。您可以使用命令 fg 将其调回前台并让它继续运行。

script 文件

使用 script 将屏幕上出现的所有内容(直到下一次退出)记录在 文件 中。如果您需要记录正在发生的事情以便将其包含在您请求帮助的消息中,这将非常有用。使用 exit、logout 或 ctrl-D 停止录制会话。

ps

使用 ps 列出您的进程。

     $ ps
       PID  TT STAT   TIME COMMAND
      6122  p1 S      0:00 bash 
      6123  p2 S      0:00 bash 
      6408  p1 S      0:00 ftp 
      6916  p4 R      0:00 ps 
     13115  p7 SW     0:00 bash 
     19102  p3 SW     0:00 bash 
     19497  p4 S      0:00 -bash 
     19554  p3 S     11:25 uvsh 
     19623  p4 S      5:37 xemacs 
     21272  p6 SW     0:00 bash

您还可以使用 ps 查看系统上的所有进程

     $ ps -ax
       PID  TT STAT   TIME COMMAND
         1  ?  SW     0:18 init 
         2  ?  SW     0:04 kflushd 
         3  ?  SW<    0:00 kswapd 
        10  ?  S      0:18 update 
        31  ?  SW     0:00 nfsiod 
        32  ?  SW     0:00 nfsiod 
        33  ?  SW     0:00 nfsiod 
        34  ?  SW     0:00 nfsiod 
       143  ?  S      0:08 /sbin/syslogd 
       145  ?  S      0:00 klogd 
       154  ?  S      0:00 /sbin/kerneld 
       164  ?  S      0:00 inetd 
       167  ?  S      0:05 named 
       179  ?  SW     0:00 run_job 
       183  ?  SW     0:00 bootpd 
       205  ?  SW     0:00 gpm 
       209  ?  S      0:52 /usr/sbin/tcplogd 
       212  ?  SW     0:00 icmplogd 
       ... and so on ...

标题为 PID 的列中的数字是进程的标识号。在 TT 列下是运行该进程的 tty(屏幕或窗口标识符)。此处的问号表示它未连接到任何屏幕或窗口,而是在后台运行。

tty

tty 向您显示您所在的终端(屏幕或窗口)。

     $ tty
     /dev/ttyp4

6.2.4.11 身份

这些命令与您作为用户的身份和机器自身的身份有关。

passwd

使用 passwd 更改您登录时使用的密码。按照屏幕上的说明选择密码类型。当您键入密码时,它不会显示在屏幕上,因此您必须输入两次,以确保您没有输入错误。

id

id 告诉您您是哪个用户以及您属于哪个组。

     $ id
     uid=1000(olly) gid=1000(olly) groups=1000(olly),6(disk),20(dialout),25(floppy),26(tape),29(audio),34(backup),37(operator),101(priory)

uid 表示您的用户号,gid 您的组号(将分配给您创建的文件),groups 列出您所属的其他组。

who -u

who -u 报告每个登录用户。

uname -a

uname -a 报告您机器的名称、类型和操作系统。

date

date 报告当前时间和日期。

超级用户可以使用此命令设置日期和时间。


6.2.4.12 关闭计算机

打开和关闭计算机实际上是一个系统管理主题,但我在此处将其包括在内,因为它是一位用户兼管理员的每个人都需要知道的事情。如果其他人负责管理机器,您既不需要也不能关闭它。

shutdown -t 0 -h now

此命令安全地关闭计算机。如果您的系统为此设置了,您也可以使用 ctrl-alt-del。(如果您在 X 中,ctrl-alt-del 将被 X 拦截。首先使用 ctrl-alt-backspace 退出 X。)切勿在未执行安全关机的情况下关闭 Unix 机器:如果您这样做,您将损坏您的文件系统。


6.2.5 命令中的特殊字符

当您键入命令时,某些字符对 shell 具有特殊含义,并在命令开始运行之前被解释。完整详细信息在关于 shell 的章节中给出,但您需要了解正在发生的事情,否则您将得到您不期望的结果。

Shell 特殊字符在 shell 收到命令后立即被解释。例如,如果您键入 ls *.bak,shell 会将 *.bak 转换为当前目录中所有名称以 .bak 结尾的文件的列表。ls 命令永远不会看到星号。 因此,如果您想搜索名称中实际包含星号的文件,您必须转义星号以阻止 shell 解释它。

     linda:/tmp/junk$ ls **
     fred     george*  joe      mary     peter*
     linda:/tmp/junk$ ls *\*
     george*  peter*
     linda:/tmp/junk$

在示例中,第一个命令匹配了所有文件;第二个命令仅匹配那些名称末尾带有文字星号的文件。

其他特殊字符也是如此。这是完整列表

\

\ 转义自身和其他特殊字符

[ ]

[ ] 括起用于匹配单个字符的模式

*

* 代表任何内容(包括空)

?

? 代表任何单个字符

( )

( ) 在子 shell 中运行括号的内容

;

; 终止命令管道 - 使用它分隔单行上的命令

&

& 在后台运行前面的管道。

这与对已运行的程序键入 Ctrl-Z,然后键入 bg 相同。

$word 和 ${word}

$word 和 ${word} 被解释为 shell 变量(如果存在歧义的危险,请使用 ${word})。还有其他字符可以跟随 $ 并给出其他含义。(请参阅 Shell,第 5 章。)

``

反引号的内容作为命令运行,其输出用作此命令的一部分

""

引号的内容被视为一个参数;引号内的任何特殊字符,除了 $ 和 `` 之外,都保持未解释状态。

''

单引号的内容被传递给命令,没有任何解释。

|

竖线符号用于指示管道。管道左侧的命令将其输出发送到管道右侧命令的输入。

< 和 >

这些符号用于重定向;请参见下文。

&&

双与号用于两个命令之间(在同一行上)。它告诉 shell 仅在第一个命令成功时才运行第二个命令[8] 。

||

双竖线符号用于两个命令之间(在同一行上)。它告诉 shell 仅在第一个命令不成功时才运行第二个命令。

例如,ls -d /[uv]* 将列出根目录中所有以 u 或 v 开头的条目的名称。与 DOS 不同,您可以使用像 g*.gz 这样的模式(通配符位在中间)。

这些字符仅当它们是命令中的第一个非空格字符时才具有特殊含义

!

如果 ! 紧跟一个非 = 字符,它会开始历史记录替换;如果它后面跟一个空格,它会否定以下命令管道的返回代码。(有关更多详细信息,请参阅 Shell,第 5 章。)

^

快速历史记录替换,将一个字符串更改为另一个字符串

     $ ls *.cc
     SQLBuilder.cc      dbwindow.cc        listitem.cc
     $ ^cc^h^
     ls *.h
     SQLBuilder.h      dbwindow.h        listitem.h
#

# 将该行转换为注释;该行不会以任何方式处理。

不要将 shell 特殊字符与正则表达式中的特殊字符混淆(请参阅 正则表达式,第 6.3 节)。正则表达式必须用单引号括起来以防止 shell 解释它们。


6.2.6 过滤器

许多命令都是过滤器,因此您可以将一个命令的输出传递到另一个命令的输入

     awk -F: '{print $1 " " $6}' /etc/passwd | sort

这是所有 Unix 和类 Unix 系统的基本概念。许多命令都设计为过滤器。因此,它们可以用作构建块,以根据当时需要的方式创建更复杂的命令。


6.2.7 标准输入、标准输出和标准错误

当 shell 为你启动一个命令时,它会打开文件用于标准输入、标准输出和标准错误。默认情况下,标准输入是你的键盘,标准输出是你的屏幕,标准错误也是你的屏幕。

尽管默认值是键盘和屏幕,但这可以很容易地更改。实际上,当 shell 启动一个命令时,它会复制自己的标准输入、输出和错误,因此命令会继承 shell 所拥有的。命令可以通过打开不同的文件来更改自己的设置,并且你可以告诉 shell 使用文件而不是默认的键盘或屏幕。

标准输入、标准输出和标准错误的文件描述符编号分别为 0、1 和 2。


6.2.8 重定向

你可以通过在命令后添加以下序列来重定向标准输入、输出和错误

<

< file 表示从 file 获取输入。

>

> file 表示将输出发送到 file (覆盖并销毁文件中已有的内容)。

你可以使用此功能通过输入以下内容来清空文件

     >file_with_unwanted_contents

单独在一行。

>>

>> file 表示将输出追加到 file

2>

2> file 表示将错误消息发送到 file (覆盖)。 (这意味着错误可以与正常输出分开定向。)

重定向还有更复杂的方面,可以在 shell 手册页中学习。

以下是一些非常常见的重定向用法

cat [filelist] >output_file

我们已经看到 cat 可以用来查看文件。结合标准输出的重定向,它也可以用来写入文件。

如果你省略 filelist,cat 将从键盘获取输入,直到你输入 ctrl-D。

echo text

echotext 发送到标准输出。它通常在脚本程序中用于在屏幕上显示文本。

它也可以与输出重定向一起使用来写入文件。例如,

     echo "An example file containing
     two lines of text" >/tmp/example

     echo "A third line added to the first two" >>/tmp/example

6.2.9 Shell 脚本程序

重定向是 shell 编程的一个简单部分,有关详细信息,请参阅 bash、zsh、tcsh 或你选择的任何 shell 的手册页。Shell 脚本程序是一组存储在文件或键入的命令。

     for f in `grep -l widgets`
     	do
     		sed -e 's/widgets/gadgets/g' <$f ${f}gadget
     		echo $f
     	done

一旦你将 shell 脚本程序存储在程序文件中,你必须通过运行 chmod 使其可执行

             chmod a+x my_program_file

6.2.10 错误

Unix 命令通常静默执行,除非被要求 verbose 或出现错误。错误意味着某些对 Linux 来说没有意义的事情;它并不意味着你不希望发生的事情!

例如,我曾经有一个客户,他的根目录中有一些不需要的文件,这些文件被命名为 &TEMP& 等等。作为根目录中的超级用户,他输入了 rm -rf /&*,而他本应该输入 rm -rf \&*。他实际上要求的是删除他的整个文件系统,作为一个后台作业。它也确实这样做了。


6.3 正则表达式

正则表达式是一种指定要匹配的文本的方式,而无需完全拼写出来。正则表达式用于编辑器和 grep 命令中。它们与命令行完成的有限文件模式匹配不同。

正则表达式可以非常简单或非常复杂。复杂的表达式是通过将简单的表达式连接在一起构建的。在本节中,我们只讨论在 grepzgrep 命令中正则表达式的简单用法。最简单的表达式称为原子,因为它们不能进一步分解。

以下是正则表达式原子

字符

任何单个字符都匹配自身。

.

句点 (.) 匹配任何单个字符。

[ ]

方括号中的字符列表匹配任何单个字符,前提是该字符出现在方括号内。字符范围可以在方括号内表示,方法是指定范围的两端,并用减号分隔。例如,正则表达式原子 [ACafjl-rx] 匹配字母 `A'、`C'、`a'、`f'、`j'、`l'、`m'、`n'、`o'、`p'、`q'、`r' 或 `x' 中的任何一个。

可以通过将 `^' 作为方括号内的第一个字符来反转此原子的效果。这意味着匹配任何字符,除了方括号中的字符。

^

脱字符号 (^) 方括号 表示一行的开头。(因此,它只能在正则表达式的开头具有此含义。)

$

美元符号 ($) 方括号 表示一行的结尾。(因此,它只能在正则表达式的结尾具有此含义。)

\

反斜杠转义其后的字符;也就是说,它改变了该字符的含义。例如,使用 \* 表示真实的星号,或使用 \\ 表示真实的反斜杠。

某些字母在反斜杠后跟有时具有特殊含义:\t 匹配制表符,\f 匹配换页符,等等。

正则表达式原子可以受到这些修饰符的影响 (+ 和 ? 在与 grep 一起使用时必须以反斜杠开头)

re*

后跟星号的正则表达式与该正则表达式的 0 个或多个出现项匹配。例如,b* 匹配 `', `b', `bb', `bbbbbb' 等等。

re+

后跟加号的正则表达式与该正则表达式的 1 个或多个出现项匹配。例如,b+ 匹配 `b', `bb', `bbbbbb' 等等。

re?

后跟问号的正则表达式与该正则表达式的 0 个或一个出现项匹配。例如,b? 匹配 `' 或 `b'。

这是一个在 grep 中使用正则表达式的示例

     grep '^[A-Z][a-z]\+' basic_cmds.sgml

此命令将列出 basic_cmds.sgml 中所有以大写字母开头,后跟一个或多个小写字母的行。加号用反斜杠转义,使其具有特殊含义。整个正则表达式用单引号括起来,以防止被 shell 评估。


[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 下一页 ]


Debian 用户参考手册 (过时文档)

version 0.1, 29 Dezember 2009

Ardo van Rangelrooij ardo@debian.org
Jason D. Waterman jwaterma@bbn.com
Thalia L. Hooker th@visi.com
Havoc Pennington rhpennin@midway.uchicago.edu
Oliver Elphick - Maintainer Oliver.Elphick@lfix.co.uk
Bruce Evry bruce@fantek.org
Karl-Heinz Zimmer khz@snafu.de
Andreas Franzen anfra@debian.org