绝对路径和相对路径
文件和目录名可以是绝对的,这表示名称以 /
开头。
也可以相对于当前工作目录,这表示不是以 /
开头。
文件或目录的绝对路径的组成为:
在 0 个或多个目录名后附加一个 /,其中每个目录名的后面都有一个 /,然后是一个最终文件名。
列出详细内容
在一台存储设备中,文件或目录被包含到一个块(block)组合中。有关文件的信息被包含在一个索引节点(inode)中,其中记录如下信息:所有者、最后一次访问文件的时间、文件大小、是否为目录以及谁可以读取或写入数据。inode 编号也被称为文件序列号(file serial number),并且在一个特定文件系统中是唯一的。我们可以使用-l
(或--format=long
)选项来显示存储在 inode 中的某些信息。
默认情况下,ls 命令不会列出特殊文件,这些文件的文件名以点号 (.) 开头。除根目录外的所有目录都至少包含两个特殊条目:目录本身 (.) 和父目录 (..)。根目录没有父目录。
[ian@echidna lpi103-2]$ ls -al
total 52
drwxrwxr-x. 2 ian ian 4096 2009-08-11 21:21 .
drwx------. 35 ian ian 4096 2009-08-12 10:55 ..
-rw-rw-r--. 1 ian ian 8 2009-08-11 21:17 sedtab
-rw-rw-r--. 1 ian ian 24 2009-08-11 14:02 text1
-rw-rw-r--. 1 ian ian 25 2009-08-11 14:27 text2
-rw-rw-r--. 1 ian ian 63 2009-08-11 15:41 text3
-rw-rw-r--. 1 ian ian 26 2009-08-11 15:42 text4
-rw-rw-r--. 1 ian ian 24 2009-08-11 18:47 text5
-rw-rw-r--. 1 ian ian 98 2009-08-11 21:21 text6
-rw-rw-r--. 1 ian ian 15 2009-08-11 14:41 xaa
-rw-rw-r--. 1 ian ian 9 2009-08-11 14:41 xab
-rw-rw-r--. 1 ian ian 17 2009-08-11 14:41 yaa
-rw-rw-r--. 1 ian ian 8 2009-08-11 14:41 yab
第一个字段(本例中为 drwxrwxr-x 或 -rw-rw-r--)告诉我们,文件是一个目录 (d) 还是一个普通文件 (-)。类型之后是针对所有者、所有者所在组的成员、每一个成员的三组特权。这三个值分别表示用户、组、组成员是否拥有读 (r)、写 (w) 或 (x) 执行权限。
下一个字段是一个数字,告诉我们文件的硬链接的数量。inode 包含有关文件的信息。文件的目录条目包含到文件的 inode 的硬链接(或指针),因此列出的每个条目都应该至少拥有一个硬链接。目录条目对 . 条目和每个子目录条目使用另外的硬链接。使用 .. 表示的主目录有大量子目录,因此包含 35 个硬链接。
接下来两个字段分别为文件的所有者和所有者的主组。
下一个字段包含文件的长度,以字节为单位。可以通过增加
h
选项使得输出的文件大小带有单位。倒数第二个字段包含最后一次修改的时间戳。
最后一个字段包含文件或目录的名称。
ls -i
命令可以显示 inode 号。
ls -t
将按照修改时间排序(从最新到最旧)
ls -lS
将生成一个按大小排序的长列表(从最大到最小)。添加-r
将反向排序。
复制、移动和删除文件
- cp 用于复制一个或多个文件或目录。您必须提供一个(或多个)源名和一个目标名。源名或目标名可能包含一个路径。
说明:
- 如果目标是一个现有目录,那么所有源将被复制到目标中。
- 如果目录是一个不存在的目录,那么(单一)源也必须为一个目录,并且源目录的副本及其内容使用目标名作为新名称。
- 如果目标是一个文件,那么(单一)源必须也为文件,而源文件的副本使用目标名作为新名,替换任何现有的具有相同名称的文件。
mv
用于移动或重命名一个或多个文件或目录。通常使用的名称遵循使用cp 执行复制的相同规则;可以重命名一个文件或将一组文件移动到一个新目录中。因为名称只是一个链接到 inode 的目录条目,对 inode 数量没有改变不应感到奇怪,除非该文件移动到另一个文件系统中,在这种情况下,移动它的行为更像在复制之后删除原始文件。rm 用于删除一个或多个文件。
下面是关于文件inode的一个实例:
ian@Z61t-u14:~/lpi103-2$ cp text1 text1.bkp
ian@Z61t-u14:~/lpi103-2$ mkdir backup
ian@Z61t-u14:~/lpi103-2$ cp text1 backup/text1.bkp.2
ian@Z61t-u14:~/lpi103-2$ ls -i text1 text1.bkp backup
787425 text1 787445 text1.bkp
backup:
787447 text1.bkp.2
ian@Z61t-u14:~/lpi103-2$
mv text1.bkp backup
ian@Z61t-u14:~/lpi103-2$
mv backup/text1.bkp backup/text1.bkp.1
ian@Z61t-u14:~/lpi103-2$
ls -i text1 text1.bkp backup
ls: cannot access text1.bkp: No such file or directory
787425 text1
backup:
787445 text1.bkp.1 787447 text1.bkp.2
通常,cp 命令会复制一个文件来覆盖现有副本,只要现有文件是可写的。另一方面,如果目标存在,mv 就不会移动或重命名文件。
有一些与 cp 和mv 的这一行为相关的有用选项。
**-f 或--force **
导致cp 尝试删除现有目标文件,即使该文件是不可写的。
**-i 或--interactive **
要求在尝试替换现有文件之前进行确认。
**-b 或--backup **
对任何要替换的文件进行备份。
ian@Z61t-u14:~/lpi103-2$ cp text2 backup
ian@Z61t-u14:~/lpi103-2$ cp --backup=t text2 backup
ian@Z61t-u14:~/lpi103-2$ ls backup
text1.bkp.1 text1.bkp.2 text2 text2.~1~
ian@Z61t-u14:~/lpi103-2$
rm backup/text2 backup/text2.~1~
ian@Z61t-u14:~/lpi103-2$ ls backup
text1.bkp.1 text1.bkp.2
cp 命令默认情况下为新文件创建了一个新时间戳。所有者和组也被设置为执行复制的用户的所有者和组。可以使用-p 选项保留选定的属性。请注意,根用户可能是唯一可以保留所有权的用户。
创建和删除目录
- Mkdir 创建目录
如果您想创建嵌套的子目录,比如 d1/d2/d3,可能会失败,因为 d1 和 d2 目录不存在, 这个时候可以使用-p
选项来创建。