Linux新手学习资料一篇(2)

使用 Linux 命令

 

 

介绍 \" ls \"

 

现在,我们将快速地看一看 ls 命令。很可能,您已经很熟悉 ls,并且知道只输入 ls 本身将列出当前工作目录的内容: $">[b]通过指定 -a 选项,您可以看到目录中的所有文件,包括隐藏文件 — 那些以 . 开头的文件。您可以在下面的示例中看到,ls -a 将显示 . 和 .. 专门的目录链接:$">[b]递归和索引节点清单。

 

您可以使用 -d 来查看目录本身,而您还可以用 -R 来完成相反的工作 — 不仅只查看一个目录内部,而且要递归地查看该目录内所有的目录内部!我们将不会有对应该选项的任何示例输出(因为它一般占很大的篇幅),但是为了感觉一下它是怎样工作的,您可以试几个 ls -R 和 ls -Rl 命令。最后,ls 的 -i 选项可以用来在清单中显示文件系统对象的索引节点号:

 

 

$ ls -i /usr

1409 X11R6 314258 i686-linux

43090 libexec 13394 sbin

1417 bin 1513 i686-pc-linux-gnu

5120 local 13408 share

8316 distfiles 1517 include

776 man 23779 src

43 doc 1386 info 93892 portage

36737 ssl

70744 gentoo-x86 1585 lib 5132

portage.old 784 tmp

 

 

理解索引节点,第 1 部分

 

文件系统的每个对象都分配到一个独一无二的索引,叫做索引节点号。这可能看起来微不足道,但是理解索引节点对于理解许多文件系统操作来说很重要。例如,请考虑出现在每个目录中的 . 和 .. 链接。为了完全理解 .. 目录实际上是什么,我们将先来看一看 /usr/local 的索引节点号:

 

 

$ ls -id /usr/local

5120 /usr/local

/usr/local

 

 

目录有一个 5120 索引节点号。现在,我们来看一 看 /usr/local/bin/.. 的索引节点号:

 

 

$ ls -id /usr/local/bin/..

5120 /usr/local/bin/..

 

 

您可以看到,/usr/local/bin/..具有和/usr/local相同的索引节点号!这就是我们抓住的问题的实质。过去,我们认为 /usr/local 是这个目录本身。

 

现在,我们发现索引节点 5120实际上是这个目录,并且我们发现了指向该索引节点的两个目录条目(叫做“链接”)。/usr/local 和 /usr/local/bin/..都链接到索引节点 5120。虽然索引节点 5120 只在磁盘中的一地方存在,但是多个目录条目都链接到它上面。事实上,通过使用 ls -dl 命令,我们可以看到索引节点 5120 被引用的总次数

 

 

$ ls -dl /usr/local

drwxr-xr-x 8 root root 240 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/..

 

 

使用 Linux 命令

 

mkdir

 

我们来快速地看一看 mkdir 命令,它可以用来创建新目录。下面的示例创建了三个新目录:tic、tac 和 toe,都在 /tmp 下:

 

 

$ cd /tmp

$ mkdir tic tac toe

 

 

缺省情况下,mkdir 不会为您创建父目录;邻接的上一元素的完整路径必须存在。因此,如果您想要创建目录 won/der/ful,您将需要发出三个单独的 mkdir 命令:

 

 

$ mkdir won/der/ful

mkdir: cannot create directory

`won/der/ful': No such file or directory

$ mkdir won

$ mkdir won/der

$ mkdir won/der/ful

 

 

mkdir -p

 

然而,mkdir有一个很方便的-p选项,该选项告诉mkdir创建所有缺少的父目录,如下所示:

 

 

$ 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 输出中的第六栏)。如果文件不存在,那么将创建一个新的空文件。现在您应该有一个大小为零的 /tmp/copyme 文件。

 

echo 和重定向

 

既然文件存在,我们来把一些数据添加到文件中。我们可以使用echo命令来完成,它带有自己参数,并且把这些参数打印到标准输出。首先,单独的 echo 命令是这样的:

 

 

$ echo \"firstfile\"

firstfile

 

 

带有输出重定向的同样的 echo 命令为:

 

 

$ echo \"firstfile\" > copyme

 

 

大于符号告诉 shell 将 echo 的输出写到名为 copyme 的文件中。如果该文件不存在,将创建这个文件;如果该文件存在,将覆盖这个文件。通过输入 ls -l,我们可以看到 copyme 文件为 10 个字节长,因为它包括 firstfile 这个词和换行符:

 

 

$ ls -l copyme

-rw-r--r-- 1 root root 10 Dec 28 14:13 copyme

 

 

cat 和 cp

 

为了在终端显示文件的内容,要使用 cat 命令:

 

 

$ cat copyme

firstfile

 

 

现在,我们可以使用 cp 命令的基本调用来由原始的 copyme 文件创建 copiedme 文件:

 

 

$ cp copyme copiedme

 

 

通过观察,我们发现它们确实是相互独立的文件;它们的索引节点号不同:

 

 

$ ls -i copyme copiedme

648284 copiedme 650704 copyme

 

 

mv

 

现在,我们来用“mv”命令将“copiedme”重命名为“movedme”。其索引节点号将仍然是同一个;但是,指向该索引节点的文件名将改变。

 

 

$ mv copiedme movedme

$ ls -i movedme

648284 movedme

 

 

只要目标文件和源文件驻留在同一文件系统上,被移动的文件的索引节点号就将仍然不变。在本教程系列的第 3 部分,我们将进一步看一下文件系统。

 

创建链接和删除文件

 

硬链接

 

当谈及目录条目和索引节点之间关系时,我们提到了链接这个术语。Linux 实际有两种链接。到此为止我们所讨论的这种链接叫硬链接。一个给定的索引节点可以有任意数目的硬链接,该索引节点一直存在于文件系统,直到所有的硬链接消失。可以使用 ln 命令来创建新的硬链接

 

 

$ cd /tmp

$ touch firstlink

$ ln firstlink secondlink

$ ls -i firstlink secondlink

15782 firstlink 15782 secondlink

 

 

您可以看到,硬链接工作于索引节点级别,指向特殊的文件。在 Linux 系统上,硬链接有几个局限性。第一,您只能给文件建立硬链接,而不能给目录建立硬链接。的确如此;即便 . 和 .. 是系统给目录创建的硬链接,也不允许您(“root”用户也不行)创建任何您自己的硬链接。

 

硬链接的第二个局限性是它们不能跨文件系统。这意味着,如果您的 / 和 /usr 存在于不同的文件系统,您不能创建从 /usr/bin/bash 到 /bin/bash 的链接。

posted @ 2012-02-29 23:09  福。oO  阅读(151)  评论(0编辑  收藏  举报