06-文件目录管理
6.1 Linux文件系统的架构
Linux系统主要目录及其内容
目录 | 内容 |
---|---|
/bin | 构建最小系统所需要的命令(最常用的命令) |
/boot | 内核与启动文件 |
/dev | 各种设备文件 |
/etc | 系统软件的启动和配置文件 |
/home | 用户的主目录 |
/lib | C编译器的库 |
/media | 可移动介质的安装点 |
/opt | 可选的应用软件包(很少使用) |
/proc | 进程的映像 |
/root | 超级用户root的主目录 |
/sbin | 和系统操作有关的命令 |
/tmp | 临时文件存放点 |
/usr | 非系统的程序和命令 |
/var | 系统专用的数据和配置文件 |
6.3 建立文件和目录
6.3.1 建立目录:mkdir
-p
选项,用于完整地创建一个子目录结构。
6.3.2 建立一个空文件:touch
- 用
touch
命令建立的文件是空文件(也就是不包含任何内容的文件) touch
命令的另一个用途是更新一个文件的建立日期和时间
6.4 移动、复制和删除
6.4.1 移动和重命名:mv
-i
选项用于提示同名文件替换-b
选项在移动文件前,首先在目标目录的同名文件的文件名后加一个“~”,从而避免这个文件被覆盖
6.4.2 复制文件和目录:cp
-i
和-b
选项同mv
-r
选项将子目录连同其中的文件一起复制到另一个子目录下
6.5 文件和目录的权限
6.5.2 需要设置哪些权限
可以赋予某类用户对文件和目录享有3种权限:读取(r)、写入(w)和执行(x)。
6.5.3 查看文件和目录的属性
例子:
$ ls -l /bin/login
-rwxr-xr-x 1 root root 38096 2008-11-13 14:54 /bin/login
- 第1个字段的第1个字符表示文件类型,在上例中是“-”,表示这是一个普通文件
- 接下来的9个字符应该被这样断句:rwx、r-x、r-x,分别表示属主、属组和其他人所拥有的权限。如果某个权限被禁用,那么就用一个短划线“-”代替
- 第3个和第4个字段分别表示文件的属主和属组
- 紧跟着3组权限位的数字表示该文件的链接数目
- 最后的4个字段分别表示文件大小(38096字节)、最后修改的日期和时间,以及这个文件的完整路径
6.5.4 改变文件所有权:chown
和chgrp
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown
命令提供了-R
选项,用于改变一个目录及其下所有文件(和子目录)的所有权设置。
6.5.5 改变文件权限:chmod
chmod
用于改变一个文件的权限,这个命令使用“用户组+/-权限”的表述方式来增加/删除相应的权限。具体来说,用户组包括了文件属主(u)、文件属组(g)、其他人(o)和所有人(a),而权限则包括了读取(r)、写入(w)和执行(x)。
- 下面这条命令增加了属主对文件days的执行权限
$ chmod u+x days
- 下面这条命令删除所有人(属主、属组和其他人)对days的执行权限
$ chmod a-x days
- 下面这条命令赋予属主和属组的读取/写入权限,而仅赋予其他用户读取权限
$ chmod ug=rw,o=r days
- 下面这条命令将其他人的权限设置为和属主的权限一样
$ chmod o=u days
6.5.6 文件权限的八进制表示
八进制、二进制、文件权限的对应关系
八进制 | 二进制 | 权 限 | 八进制 | 二进制 | 权 限 |
---|---|---|---|---|---|
0 | 000 | --- | 5 | 101 | r-x |
1 | 001 | --x | 6 | 110 | rw- |
2 | 010 | -w- | 7 | 111 | rwx |
3 | 011 | -wx | |||
4 | 100 | r-- |
在实际使用中,只要记住1代表x、2代表w、4代表r,然后简单地做加法就可以了。
6.6 文件类型
6.6.1 查看文件类型
Linux中的文件类型
文件类型 | 符 号 | 文件类型 | 符 号 |
---|---|---|---|
普通文件 | - | 本地域套接口 | s |
目录 | d | 有名管道 | p |
字符设备文件 | c | 符号链接 | l |
块设备文件 | b |
6.7 输入输出重定向和管道
6.7.1 输出重定向
如果ls_out
文件不存在,那么输出重定向符号“>”会试图建立这个文件。如果ls_out
文件已经存在了,那么“>”会删除文件中原有的内容,然后用新内容替代。如果要保留原来文件中的内容,应该使用输出重定向符号“>>”。
$ date > date_out
$ cat date_out
2008年12月10日 星期三 20:43:43 CST
$ uname -r >> date_out
$ cat date_out
2008年12月10日 星期三 20:43:43 CST
2.6.24-21-generic
6.7.2 输入重定向
用户可以选择任意一个单词作为立即文档的分隔符,像EOF、END、eof等都是不错的选择,只要可以确保它不是正文的一部分。
$ cat << END > hello
> Hello World!
> Bye
> END
这条命令首先让cat
命令以立即文档的方式获取输入,然后再把cat
的输出重定向到hello
文件。查看hello
文件,应该可以看到下面这些内容。
Hello World!
Bye
6.7.3 管道
通过一根竖线“|”,将一条命令的输出连接到另一条命令输入。下面这条命令显示了如何在文件列表中查找文件名中包含某个特定字符串的文件。
$ ls | grep ay
days
hard_days
mplayer
mplayer~
my_days