1、对于 Linux 新手,或者那些想要重新审视或改进自己对基本 Linux 概念(比如:复制和移动文件、创建符号和硬链接、设置文件系统对象所有权和权限以及同管道和重定向一起使用 Linux 的标准文本处理命令)的理解的人来说,本系列连载文章之一是理想的教材。沿着这个方向,我们将一起分享很多心得、技巧和窍门,使该教程甚至对于那些具有丰富经验的 Linux 老手来说都是“有血有肉”,并且是实用的。对于初学者而言,本系列文章的许多内容都很新颖,而更有经验的 Linux 用户可能会发现本教程是使他们基本的 Linux 技能“炉火纯青”的有效途径。介绍 bashshell如果您使用过 Linux 系统,那
2、么您知道当登录时,将会看到像这样的提示符:$您所看到的特殊的提示符可能看起来很不一样。它可能包含系统的主机名、当前的工作目录名,或者两者都有。但是不管这个特殊的提示符看起来像什么,有一件事是肯定的。打印出这个提示符的程序叫“shell” ,极有可能您的特殊的 shell 是一个叫 bash 的程序。 您在运行 bash 吗? 您可以通过输入下面的命令来检查您是否正在运行 bash: $ echo $SHELL/bin/bash如果上面的命令行报错或者不会类似地响应我们的示例,那么您可能正在运行一个不同于 bash 的 shell。 关于 bash Bash 是“Bourne-again she
3、ll”的首字母缩写,它是大多数 Linux 系统缺省的 shell。shell 的任务是执行您的命令,使您能够与 Linux 系统进行交互。当您输完命令,您可以通知 shell 执行 exit 或 logout 命令,在此您将返回到登录提示符。顺便提一下,您还可以通过在 bash 提示符下按 control-D 来注销。 使用“cd” 您可能已经发现,目不转睛地盯着 bash 提示符可不是世界上最让人感到有劲的事。那么,让我们来开始用 bash 来浏览我们的文件系统。在提示符下,输入下面的命令(不包括 $): $ cd / 我们只告诉 bash 您想在 /(也称为根目录)中工作;系统上的所有目
4、录形成一棵树,/ 被认为是这棵树的顶部,或者是根。 cd 设置当前您正在工作的目录,也称为“当前工作目录”。 路径 要看 bash 的当前工作目录,您可以输入: $ pwd /在上面的示例中,cd 的 / 参数叫做路径。它告诉 cd 我们要转到什么地方。特别是,/ 参数是一个绝对路径,意味着它指定了相对于文件系统树的根的位置。绝对路径这里有几个其它的绝对路径: /dev /usr /usr/bin /usr/local/bin您可以看到,所有绝对路径有一个共同点就是,它们都以/开头。通过路径/usr/local/bin,我们告诉 cd 进入 / 目录,接着进入这个目录之下的 usr 目录,然后
5、再进入 local 和 bin。绝对路径总是通过是否以 / 开头来判断。相对路径 另一种路径叫相对路径。在 Bash 中,cd 以及其它命令总是解释那些相对于当前目录的路径。相对路径绝不会以 / 开头。这样,如果我们在 /usr 中: $ cd /usr那么,我们可以使用相对路径来转到 /usr/local/bin 目录: $ cd local/bin $ pwd /usr/local/bin使用“.”相对路径还可以包含一个或多个 . 目录。. 目录是指向父目录的专门目录。那么,继续前面的示例: $ pwd /usr/local/bin $ cd . $ pwd /usr/local您可以看到
6、,现在我们的当前目录是 /usr/local。我们能够“后退”到相对于我们所在的当前目录的一个目录。此外,我们还可以将 “.“ 添加到一个现有的相对路径中,使我们可以进入与我们已在目录并排的目录,例如: $ pwd /usr/local $ cd ./share $ pwd /usr/share相对路径示例 相对路径可以变得相当复杂。这里有几个示例,所有的都没有显示出结果的目标路径。请试着推断一下,输入这些命令后,您最终将会转到什么地方: $ cd /bin $ cd ./usr/share/zoneinfo$ cd /usr/X11R6/bin $ cd ./lib/X11$ cd /usr
7、/bin $ cd ./bin/./bin现在,试验一次,看看您的推断是否正确。 理解“.” 在我们结束 cd 的介绍之前,我们还需要讨论一些更多的内容。首先,还有另一个叫 . 的专门的目录。它表示“当前目录”。然而该目录不为 cd 命令使用,它通常用来执行一些当前目录中的程序,如下所示: $ ./myprog在上面的示例中,驻留在当前工作目录中的 myprog 可执行文件将被执行。 cd 和主目录如果我们想要转到主目录,我们可以输入:$ cd没有参数,cd 将转到主目录,对于超级用户来说是 /root,对于一般用户来说通常是/home/username。但是,如果我们想要指定一个主目录中的文
8、件,将会怎样呢?可能我们想要将一个文件参数传给 myprog 命令。如果该文件在主目录中,我们可以输入:$ ./myprog /home/drobbins/myfile.txt但是,使用像这样的绝对路径并不总是很方便。幸好,我们可以使用 (代字符)字符来完成同样的事: $ ./myprog /myfile.txt其他用户的主目录 Bash 将把单独的 扩展为指向主目录,然而您还可以用它来指向其他用户的主目录。例如,如果我们想要引用 fred 的主目录中的名为 fredsfile.txt 的文件,可以输入: $ ./myprog fred/fredsfile.txt使用 Linux 命令 介绍
9、ls现在,我们将快速地看一看 ls 命令。很可能,您已经很熟悉 ls,并且知道只输入 ls 本身将列出当前工作目录的内容: $“b通过指定 -a 选项,您可以看到目录中的所有文件,包括隐藏文件 那些以 . 开头的文件。您可以在下面的示例中看到,ls -a 将显示 . 和 . 专门的目录链接:$“b递归和索引节点清单。 您可以使用 -d 来查看目录本身,而您还可以用 -R 来完成相反的工作 不仅只查看一个目录内部,而且要递归地查看该目录内所有的目录内部!我们将不会有对应该选项的任何示例输出(因为它一般占很大的篇幅),但是为了感觉一下它是怎样工作的,您可以试几个 ls -R 和 ls -Rl 命令
10、。最后,ls 的 -i 选项可以用来在清单中显示文件系统对象的索引节点号: $ ls -i /usr1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share8316 distfiles 1517 include 776 man 23779 src43 doc 1386 info 93892 portage 36737 ssl70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp理解索引节点,第
11、 1 部分 文件系统的每个对象都分配到一个独一无二的索引,叫做索引节点号。这可能看起来微不足道,但是理解索引节点对于理解许多文件系统操作来说很重要。例如,请考虑出现在每个目录中的 . 和 . 链接。为了完全理解 . 目录实际上是什么,我们将先来看一看 /usr/local 的索引节点号: $ ls -id /usr/local5120 /usr/local/usr/local目录有一个 5120 索引节点号。现在,我们来看一 看 /usr/local/bin/. 的索引节点号:$ ls -id /usr/local/bin/.5120 /usr/local/bin/.您可以看到,/usr/lo
12、cal/bin/.具有和/usr/local 相同的索引节点号!这就是我们抓住的问题的实质。过去,我们认为 /usr/local 是这个目录本身。 现在,我们发现索引节点 5120 实际上是这个目录,并且我们发现了指向该索引节点的两个目录条目(叫做“链接”)。/usr/local 和 /usr/local/bin/.都链接到索引节点 5120。虽然索引节点 5120 只在磁盘中的一地方存在,但是多个目录条目都链接到它上面。事实上,通过使用 ls -dl 命令,我们可以看到索引节点 5120 被引用的总次数 $ ls -dl /usr/localdrwxr-xr-x 8 root root 24
13、0 Dec 22 20:57 /usr/local如果我们看一看从左起的第二栏,我们可以看到目录 /usr/local(索引节点 5120)被引用了 8 次。在我的系统中,引用该索引节点的不同路径有这些: /usr/local/usr/local/./usr/local/bin/./usr/local/games/./usr/local/lib/./usr/local/sbin/./usr/local/share/./usr/local/src/.mkdir我们来快速地看一看 mkdir 命令,它可以用来创建新目录。下面的示例创建了三个新目录:tic、tac 和 toe,都在 /tmp 下:$
14、 cd /tmp$ mkdir tic tac toe缺省情况下,mkdir 不会为您创建父目录;邻接的上一元素的完整路径必须存在。因此,如果您想要创建目录 won/der/ful,您将需要发出三个单独的 mkdir 命令: $ mkdir won/der/fulmkdir: cannot create directorywon/der/ful: No such file or directory$ mkdir won$ mkdir won/der$ mkdir won/der/fulmkdir -p 然而,mkdir 有一个很方便的-p 选项,该选项告诉 mkdir 创建所有缺少的父目录,如
15、下所示: $ mkdir -p easy/as/pie总之,非常简单。要学习更多关于 mkdir 命令的知识,请输入 man mkdir 来阅读手册页。除 cd(它内置在 bash 中)之外,这几乎适用于这里所涉及的所有命令(比如 man ls)。 touch 现在,我们将要快速地看一看 cp 和 mv 命令,这些命令用来复制、重命名以及移动文件和目录。为了开始该概述,我们将首先用 touch 命令在 /tmp 中创建一个文件: $ cd /tmp$ touch copyme如果文件存在,touch 命令将更新文件的“mtime”(请回想 ls -l 输出中的第六栏)。如果文件不存在,那么将创
16、建一个新的空文件。现在您应该有一个大小为零的 /tmp/copyme 文件。 echo 和重定向 既然文件存在,我们来把一些数据添加到文件中。我们可以使用 echo 命令来完成,它带有自己参数,并且把这些参数打印到标准输出。首先,单独的 echo 命令是这样的: $ echo “firstfile“firstfile带有输出重定向的同样的 echo 命令为: $ echo “firstfile“ copyme大于符号告诉 shell 将 echo 的输出写到名为 copyme 的文件中。如果该文件不存在,将创建这个文件;如果该文件存在,将覆盖这个文件。通过输入 ls -l,我们可以看到 cop
17、yme 文件为 10 个字节长,因为它包括 firstfile 这个词和换行符: $ ls -l copyme-rw-r-r- 1 root root 10 Dec 28 14:13 copymecat 和 cp为了在终端显示文件的内容,要使用 cat 命令:$ cat copymefirstfile现在,我们可以使用 cp 命令的基本调用来由原始的 copyme 文件创建 copiedme 文件: $ cp copyme copiedme通过观察,我们发现它们确实是相互独立的文件;它们的索引节点号不同: $ ls -i copyme copiedme648284 copiedme 65070
18、4 copymemv 现在,我们来用“mv”命令将“copiedme” 重命名为“movedme”。其索引节点号将仍然是同一个;但是,指向该索引节点的文件名将改变。 $ mv copiedme movedme$ ls -i movedme648284 movedme只要目标文件和源文件驻留在同一文件系统上,被移动的文件的索引节点号就将仍然不变。在本教程系列的第 3 部分,我们将进一步看一下文件系统。 创建链接和删除文件 硬链接 当谈及目录条目和索引节点之间关系时,我们提到了链接这个术语。Linux 实际有两种链接。到此为止我们所讨论的这种链接叫硬链接。一个给定的索引节点可以有任意数目的硬链接,该索引节点一直存在于文件系统,直到所有的硬链接消失。可以使用 ln 命令来创建新的硬链接 $ cd /tmp
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。