[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ A ] [ B ] [ C ] [ D ] [ 下一页 ]
我们已经讨论过命令行,即在 shell 提示符后输入的命令。本节描述更复杂命令行的结构。
一个最简单的命令行仅包含一个命令名称,例如 whoami。但也可能包含其他内容。例如,您可以输入
man whoami
此命令请求 whoami 程序的在线手册(您可能需要按空格键滚动浏览文档,或按 q 退出)。一个更复杂的例子
man -k Postscript
此命令行包含三个部分。它以命令名称 man 开头。然后它有一个选项或开关,-k,后跟一个参数,Postscript。有些人将命令名称以外的所有内容都称为命令的参数。因此,选项和参数都是参数。
选项更改命令的行为,开启特定的功能或特性。它们通常在前面有一个 -。GNU 工具也具有选项的“长格式”;-k 的长格式是 --apropos。输入 man -h 或 man --help 以获取 man 命令的完整选项列表。每个命令都有自己的一组选项,尽管大多数命令都有 --help 和 --version 选项。有些命令很奇怪;例如,tar 出于历史原因,其选项前不需要 -。
任何不是选项且不是命令名称的内容都是参数。在本例中是 Postscript。参数可以用于多种目的;最常见的是,它们是命令应操作的文件名。在本例中,Postscript 是您希望 man
搜索的关键字。在 man whoami 的例子中,参数是您想要了解信息的命令。
分解 man -k Postscript 命令行
man,命令名称,告诉计算机查看手册页。这些手册页提供命令的文档。例如,man whoami 将为您提供关于 whoami 命令的文档。
-k,选项,更改 man 的行为。通常,man 期望将命令名称作为参数,例如 whoami,并查找该命令的文档。但是使用 -k 或 --apropos 选项,它期望参数是一个关键字。然后,它会列出所有在其描述中包含该关键字的手册页。
Postscript 是参数;由于我们使用了 -k 选项,因此它是要搜索的关键字。
-k 和 Postscript 都是参数。
继续并输入 man -k Postscript,您将看到系统上所有与 Postscript 有关的手册页的列表。如果您没有安装太多软件,您可能会看到 Postscript: nothing appropriate (Postscript:没有合适的)。
注意:如果您想继续,可以跳过本节。
有一种传统的简洁方法来描述命令语法 [4],您应该了解。例如,如果您输入 man man 以获取关于 man 的手册页,您将看到几个以命令名称 man 开头的语法描述。其中一个将如下所示
man -k [-M path] keyword ...
括号 ([]) 中的任何内容都是可选单元。因此,您不必使用 -M 选项,但如果使用,则必须使用 path 参数。您必须使用 -k 选项和 keyword 参数。... 表示您可以拥有更多之前的内容,因此您可以查找多个关键字。
让我们看一下 man 手册页中更复杂的描述之一
man [-c|-w|-tZT device] [-adhu7V] [-m system[,...]] [-L locale] [-p string] [-M path] [-P pager] [-r prompt] [-S list] [-e extension] [[section] page ...] ...
没有必要浏览所有这些内容(也不必担心所有这些内容的含义),但请注意描述的组织结构。
首先,选项集群通常意味着您可以以不同的组合使用其中一个或多个,因此 -adhu7V 表示您也可以使用 -h。但是,您并非总是可以使用所有组合;此描述并未明确说明这一点。例如,-h 与其他选项不兼容,但您可以执行 man -du。不幸的是,描述的格式并未明确说明这一点。
其次,| 符号表示“或”。因此,您可以使用 -c、-w 或 -tZT 选项,后跟一个 device 参数。
第三,请注意您可以嵌套括号,因为它们指示一个可选单元。因此,如果您有一个 section,则还必须有一个 page,因为 page 在 [[section] page] 单元中不是可选的。
没有必要记住任何这些内容,只需在阅读文档时参考本节即可。
文件是一种用于存储和组织信息的工具,类似于纸质文档。它们被组织成目录,在某些其他系统中称为文件夹。让我们看一下 Debian 系统上文件的组织结构
简单的 / 代表根目录。所有其他文件和目录都包含在根目录中。如果您来自 DOS/Windows 世界,/ 非常类似于 DOS 中的 C:,即文件系统的根目录。但是,DOS 和 Linux 之间的一个显着区别是,DOS 保留了多个文件系统:C:(第一个硬盘)、A:(第一个软盘)、D:(CD-ROM 或第二个硬盘),而 Linux 将其所有文件组织在同一个 / 根目录下。有关更多详细信息,请参阅 mount 和 /etc/fstab,第 13.2 节。
这是用户 “janeq” 的主目录。从左到右阅读,要进入此目录,您从根目录开始,进入目录 home,然后进入目录 janeq。
这是 X Window 系统的配置文件。它位于 /etc 目录的 X11 子目录中。/etc 反过来又是根目录 / 的子目录。
注意事项
文件名区分大小写。也就是说,MYFILE 和 MyFile 是不同的文件。
根目录通常简称为 /。不要将此“根”与 root 用户混淆,root 用户是系统上具有“超级权限”的用户。
每个目录都有一个名称,该名称可以包含任何字母或符号,除了 /。根目录是一个例外;它的名称是 /(发音为 “slash” 或 “the root directory”),并且不能重命名。[5]
每个文件或目录都由一个完全限定的文件名、绝对文件名或路径指定,给出到达它的必须经过的目录序列。这三个术语是同义的。所有绝对文件名都以 / 目录开头,并且文件名中每个目录或文件之间都有一个 /。第一个 / 是目录的名称,但其他 / 只是分隔符,用于区分文件名的各个部分。
这里使用的词语可能会令人困惑。以下面的例子为例
/usr/share/keytables/us.map.gz
这是一个完全限定的文件名;有些人称之为路径。但是,人们也会将单独的 us.map.gz 称为文件名。[6]
目录以树形结构排列。所有绝对文件名都以根目录开头。根目录有许多分支,例如 /etc 和 /usr。这些子目录又分支成更多子目录,例如 /etc/init.d 和 /usr/local。整个结构称为“目录树”。
您可以将绝对文件名视为从树的根部 (/) 到某个分支末端(文件)的路线。您还会听到人们谈论目录树,就好像它是一个家谱:因此子目录有“父目录”,而路径显示了文件的完整“祖先”。
还有相对路径,它们从根目录以外的某个位置开始。稍后将详细介绍。
没有与物理设备(例如硬盘)对应的目录。这与 DOS 和 Windows 不同,在 DOS 和 Windows 中,所有路径都以设备名称(例如 C:\)开头。目录树旨在抽象物理硬件,因此您可以在不知道硬件是什么的情况下使用系统。您的所有文件可能都在一个磁盘上,或者您可能有 20 个磁盘,其中一些磁盘连接到网络上其他位置的不同计算机。您无法仅通过查看目录树来判断,并且几乎所有命令的工作方式都相同,无论您的文件实际位于哪个(些)物理设备上。
如果这一切尚不完全清楚,请不要担心。后面还有很多例子。
要使用您的系统,您必须知道如何创建、移动、重命名和删除文件和目录。本节介绍如何使用标准的 Debian 命令执行此操作。
最好的学习方法是尝试。只要您不是 root 用户(并且尚未创建任何重要的个人文件),您就不会搞砸太严重的事情。跳进去吧 --- 在提示符下键入以下每个命令并按 Enter 键
pwd
一个目录始终被视为您正在使用的 shell 的当前工作目录。您可以使用 pwd 命令查看此目录,该命令代表 Print Working Directory(打印工作目录)。pwd 打印您正在工作的目录的名称 --- 可能是 /home/yourname。
ls
ls 代表 “list”(列表),如 “list files”(列出文件)。当您键入 ls 时,系统会显示当前工作目录中所有文件的列表。如果您刚刚安装了 Debian,您的主目录很可能为空。如果您的工作目录为空,ls 不会产生任何输出,因为没有要列出的文件。
cd /
cd 意味着 Change Directory(更改目录)。在本例中,您已请求更改为根目录。
pwd
验证您正在根目录中工作。
ls
查看 / 中的内容。
cd
键入不带参数的 cd 会选择您的主目录作为当前工作目录 --- /home/yourname。尝试 pwd 以验证这一点。
在继续之前,您应该知道实际上有两种不同的文件名。其中一些以 /(根目录)开头,例如 /etc/profile。这些被称为绝对文件名,因为无论您的当前目录是什么,它们都指向同一个文件。另一种文件名是相对文件名。
只有两种目录名称仅在相对文件名中使用:. 和 ..。目录 . 指的是当前目录,.. 是父目录。这些是 “shortcut” (快捷方式)目录。它们存在于每个目录中。即使根目录也有父目录 --- 它自己的父目录!
因此,包含 . 或 .. 的文件名是相对文件名,因为它们的含义取决于当前目录。如果我在 /usr/bin 中并键入 ../etc,那么我指的是 /usr/etc。如果我在 /var 中并键入 ../etc,那么我指的是 /etc。请注意,前面没有根目录的文件名隐式地在前面带有 ./。因此,您可以键入 local/bin 或 ./local/bin,它们的含义相同。
最后一个方便的提示:波浪号 ~ 等同于您的主目录。因此,键入 cd ~ 与键入不带参数的 cd 相同。此外,您可以键入诸如 cd ~/practice/mysubdirectory 之类的命令来更改为目录 /home/yourname/practice/mysubdirectory。类似地,~vincent 等同于用户 “vincent” 的主目录,它可能类似于 /home/vincent;因此 ~vincent/docs/debian.ps 等同于 /home/vincent/doc/debian.ps。
现在您已经了解了相对文件名,这里有一些更多的文件命令可以尝试。cd 到您的主目录再开始。
mkdir practice
在您的主目录中,创建一个名为 practice 的目录。您将使用此目录来尝试其他一些命令。您可以键入 ls 以验证您的新目录是否存在。
cd practice
将目录更改为 practice。
mkdir mysubdirectory
创建 practice 的子目录。
cp /etc/profile .
cp 是 “copy”(复制)的缩写。/etc/profile 只是您系统上的一个随机文件,暂时不用担心它的用途。我们已将其复制到 . --- 回想一下,. 只是表示 “我现在所在的目录”,即当前工作目录。因此,我们创建了 /etc/profile 的副本,并将其放在我们的 practice 目录中。尝试键入 ls 以验证在您的工作目录中,除了新的 mysubdirectory 之外,确实有一个名为 profile 的文件。
more profile
查看文件 profile 的内容。more 用于查看文本文件的内容。它被称为 more 是因为它一次显示文件的屏幕内容,并且您按空格键以查看更多内容。more 将在您到达文件末尾或键入 q(退出)时退出。
more /etc/profile 验证原始文件看起来与您制作的副本完全相同。
mv profile mysubdirectory
mv 代表 “move”(移动)。我们已将文件 profile 从当前目录移动到我们之前创建的子目录中。
ls
验证 profile 不再位于当前目录中。
ls mysubdirectory
验证 profile 已移动到 mysubdirectory。
cd mysubdirectory
更改到子目录。
mv profile myprofile
请注意,与某些操作系统不同,移动文件和重命名文件之间没有区别。因此,没有单独的 rename 命令。请注意,mv 的第二个参数可以是移动文件或目录的目标目录,也可以是新文件名。cp 的工作方式相同。
与往常一样,您可以键入 ls 以查看 mv 的结果。
mv myprofile ..
正如 . 表示 “我现在所在的目录” 一样,.. 表示 “当前目录的父目录”,在本例中是我们之前创建的 practice 目录。使用 ls 验证 myprofile 现在是否在那里。
cd ..
将目录更改为父目录 --- 在本例中是 practice,您刚刚将 myprofile 放在那里。
rm myprofile
rm 表示 “remove”(删除)--- 这将删除 myprofile。小心!在 GNU/Linux 系统上删除文件是永久性的 --- 没有撤消删除。如果您 rm 它,它就消失了,永远消失了。小心!在 GNU/Linux 系统上删除文件是永久性的 --- 没有撤消删除。如果您 rm 它,它就消失了,永远消失了。
rmdir mysubdirectory
rmdir 与 rm 类似,只是它用于目录。请注意,rmdir 仅适用于空目录 --- 如果目录包含文件,则必须先删除这些文件,或者也可以使用 rm -r 代替 rmdir。
cd ..
移出当前目录,进入其父目录。现在您可以键入
rmdir practice
这将删除您练习会话的最后残余。
现在您知道如何创建、复制、移动、重命名和删除文件和目录了。您还学习了一些快捷方式,例如只需键入 cd 即可跳转到您的主目录,以及 . 和 .. 分别指代当前目录及其父目录。您还应该记住根目录的概念,即 /,以及您的主目录的别名 ~。
我们之前提到过,GNU/Linux 是一个多任务系统。它可以同时执行多项任务。这些任务中的每一项都称为进程。了解这一点的最佳方法是在 shell 提示符下键入 top。您将获得一个进程列表,按它们使用的计算机处理时间排序。顺序将不断在您眼前变化。在显示屏的顶部,有一些关于系统的信息:有多少用户已登录、有多少个总进程、您有多少内存以及您使用了多少内存。
在最左边的列中,您将看到拥有每个进程的用户。最右边的列显示哪个命令调用了该进程。您可能会注意到所有以 d 结尾的命令 --- 例如 kflushd 和 inetd --- d 代表 daemon[7](守护进程)。守护进程是一个非交互式进程,也就是说,它由系统运行,用户永远不必担心它。守护进程提供互联网连接、打印或电子邮件等服务。
现在按 u 并在 top 询问时提供您的用户名。u 命令要求仅查看属于您的进程;它允许您忽略所有守护进程和其他人正在做的事情。您可能会注意到 bash,您的 shell 的名称。您几乎总是会运行 bash。
请注意,top 显示的第二列显示了 PID,或进程标识号。每个进程都被分配一个唯一的 PID。您可以使用 PID 来控制单个进程 --- 稍后会详细介绍。另一个有用的技巧:键入 “?” 以获取 top 命令的列表。
您可能想知道 “进程” 和 “程序” 之间的区别 --- 在实践中,人们互换使用这两个术语。从技术上讲,程序是由程序员编写并保存在磁盘上的一组指令。进程是 Linux 保存在内存中的程序的正在运行的实例。但是,不必严格区分这两个术语。
您与计算机的大部分交互都涉及控制进程。您将需要启动它们、停止它们并查看它们正在做什么。您的主要工具是 shell。
shell 最简单的功能是启动其他程序。您键入要运行的程序的名称,后跟您想要的参数,shell 会请求系统为您运行该程序。
当然,图形窗口系统也满足了这种需求。从技术上讲,Windows 95 提供了图形 shell,X Window 系统是另一种图形 shell --- 但 “shell” 通常用于表示 “命令行 shell”。
不用说,研究 shell 的黑客们不满足于仅仅启动命令。如果您想利用 shell,您的 shell 具有令人眼花缭乱的便利功能。
有无数种不同的 shell 可用;大多数 shell 都基于 Bourne shell 或 C shell,这是两种最古老的 shell。原始 Bourne shell 的程序名称是 sh
,而 csh
是 C shell。Bourne shell 变体包括来自 GNU 项目的 Bourne Again Shell (bash,Debian 默认 shell)、Korn shell (ksh
) 和 Z shell (zsh
)。还有 ash
,Bourne shell 的传统实现。最常见的 C shell 变体是 tcsh
(t 向 TENEX 和 TOPS-20 操作系统致敬,它们启发了 tcsh 对 csh 的一些改进)。
Bash 可能是新用户的最佳选择。它是默认 shell,并且具有您可能需要的所有功能。但是所有 shell 都有忠实的追随者;如果您想进行实验,请安装一些不同的 shell 软件包,并使用 chsh
命令更改您的 shell。只需键入 chsh,在询问时提供密码,然后选择一个 shell。当您下次登录时,您将使用新的 shell。
之前您使用 top
来查看系统上的不同进程。您的 shell 提供了一些方便的方法来仅跟踪您从命令行启动的那些进程。每个命令行启动一个 job(也称为进程组),由 shell 执行。一个 job 可以包含一个进程或一组管道中的进程 --- 稍后会详细介绍管道。
输入命令行将启动一个 job。尝试键入 man cp,cp 手册页将出现在屏幕上。shell 将进入后台,并在您完成阅读手册页时返回(或键入 q 以退出而不是滚动浏览整个手册页)。
但是,假设您正在阅读手册页,并且想暂时做其他事情。没问题。在阅读时键入 C-z 以挂起当前在前台运行的 job,并将 shell 置于前台。当您挂起 job 时,Bash 将首先为您提供有关它的一些信息,然后是 shell 提示符。您将在屏幕上看到类似以下内容
注意最后两行。倒数第二行是 job 信息,然后是 shell 提示符。
NAME cp - copy files SYNOPSIS cp [options] source dest cp [options] source... directory Options: [-abdfilprsuvxPR] [-S backup-suffix] [-V {numbered,exist� ing,simple}] [--backup] [--no-dereference] [--force] [--interactive] [--one-file-system] [--preserve] [--recur� sive] [--update] [--verbose] [--suffix=backup-suffix] [--version-control={numbered,existing,simple}] [--archive] [--parents] [--link] [--symbolic-link] [--help] [--ver� sion] DESCRIPTION --More-- [1]+ Stopped man cp $
Bash 为您从 shell 运行的每个命令行分配一个作业号。这使您可以轻松地引用该进程。在本例中,man cp 是作业号 1,显示为 [1]。+ 表示这是您在前台中运行的最后一个作业。Bash 还告诉您作业的当前状态 --- Stopped(已停止) --- 以及作业的命令行。
您可以使用 job 执行许多操作。在 man cp 仍处于挂起状态时,尝试以下操作
man ls
启动新作业。
C-z
通过按 Control 和小写 z 挂起 man ls 作业;您应该看到其作业信息。
man mv
启动又一个作业。
挂起它。
通过按 Control 和小写 z 挂起 man ls 作业;您应该看到其作业信息。
jobs
请求 Bash 显示当前作业
请注意 - 和 +,分别表示倒数第二个和最后一个前台作业。
$ jobs [1] Stopped man cp [2]- Stopped man ls [3]+ Stopped man mv $
fg
将最后一个前台作业(man mv,带有 + 的那个)再次置于前台。如果您按空格键,手册页将继续滚动。
重新挂起 man mv。
通过按 Control 和小写 z 挂起 man ls 作业;您应该看到其作业信息。
fg %1
您可以通过在其编号前放置 % 来引用任何作业。如果您在不指定作业的情况下使用 fg,则假定为最后一个活动作业。
重新挂起 man cp。
通过按 Control 和小写 z 挂起 man ls 作业;您应该看到其作业信息。
kill %1
结束作业 1。Bash 将报告作业信息
Bash 只是在请求作业退出,有时作业可能不想这样做。如果作业没有终止,您可以添加 -9 选项到 kill 命令中,以停止请求并开始强制执行。例如
$ kill %1 [1]- Terminated man cp $
kill -9 %1
$ kill -9 %1 [1]- Killed man mv $
-9 选项强制且无条件地结束作业。[8]
top
重新调出 top 显示。在 top 中给出 u 命令以仅查看您的进程。在右侧列中查找 man ls 和 man mv 命令。man cp 将不会在那里,因为您已将其结束。top 正在向您显示与您的作业对应的系统进程;请注意屏幕左侧的 PID 与作业号不对应。
您可能找不到您的进程,因为它们已超出屏幕底部;如果您正在使用 X,您可以调整 xterm 的大小来解决此问题。
即使这些简单的作业实际上也由多个进程组成,包括 man 进程和分页器 more,后者处理一次滚动一页。您可能会注意到 more 进程在 top 中也可见。
您可能可以弄清楚如何清理其余两个作业。您可以结束它们(使用 kill 命令)或将每个作业置于前台(使用 fg)并退出。请记住,jobs 命令将告诉您现有作业及其状态的列表。
最后一点说明:Bash 的文档非常出色,但它位于 Info 帮助系统中,而不是手册页中。要阅读它,请键入 info bash。有关使用 info 程序的说明,请参阅 使用 info,第 5.2 节。Bash 还包含一个非常好的命令摘要,可以通过 help 命令访问。help 显示可用主题的列表;有关每个主题的更多信息可以通过命令 help 主题名称 访问;尝试键入
help cd
help cd
类 Unix 系统是多用户系统,因此,作为系统用户,你拥有自己的电子身份。输入 finger 你的用户名 可以查看一些关于你的公开信息。要更改那里显示的名字和 shell,你可以使用 chfn 和 chsh 命令。只有超级用户才能更改你的登录名(用户名)和目录。你会注意到显示 “No plan” —— “plan” 只是你可以向他人公开的一些信息。要创建 plan,请将你想让别人看到的信息放入名为 .plan 的文件——为此,你需要使用文本编辑器(请参阅创建和编辑文本文件,第 8 章)。然后使用 finger 命令查看你的 plan。其他人也可以使用 finger 命令查看你的 plan,并检查你是否收到了新邮件或已读邮件。
请注意,默认情况下,这些 finger 信息对整个互联网都是公开的。如果你不希望这样,请阅读关于配置 inetd 和 /etc/services 文件的信息——最终安装手册会介绍这些配置。目前,你可以尝试 man 手册页,或者在 finger 信息中随便填写一些内容。
[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ A ] [ B ] [ C ] [ D ] [ 下一页 ]
Debian 教程 (过时文档)
2009 年 12 月 29 日hp@debian.org