为了很好地使用linux系统,你必须适应linux的文件及目录。在命令行界面,文件和目录没有被直观的显示,因此,你必须记住你目前在哪个目录里,以及这个目录与其他目录之间的层次关系。当然,你可以使用shell命令,比如cd与pwd,在各个目录之间移动,以及定位你的位置。
linux文件系统呈树状层级分布:一个目录可能包括其他的目录,即子目录。子目录本身也可能包含其他文件及子目录,等等,直至无穷。位于最高层的目录被称为根目录,并以 “/” 表示。
linux使用 “名字和斜线” 的方式描述文件和目录的位置,也就是路径(path)。例如: /one/two/three/four ,上述路径表示根目录 / 下面one子目录下的 two 子目录下的 three 子目录下的 four 文件。如果一个路径以根目录为起点,则称为绝对路径,否则,就是一个相对路径。
shell有一个当前工作目录,在shell中运行命令时,它就作用在这个目录。更具体地说,如果在shell中使用相对文件路径,它也是相对于当前工作目录而言的。例如,如果shell的当前工作目录是:/one/two/three,提供给命令的文件路径是myfile,那么这个命令真正操作的文件是:/one/two/three/myfile。同理,相对路径:/a/b/c意味着真实的路径是:/one/two/three/a/b/c。
linux的shell中还使用了两个特殊目录:.(一个点)和 ..(两个点)。前者表示当前目录,后者表示上一级目录。因此,如果你的当前目录是:/one/two/three时,则 . 代表此目录,.. 代表目录:/one/two。
再来说一说cd命令,我们可以使用cd命令从一个目录移动到另一个目录,如例:
$ cd /one/two/three
更专业地说,这个命令将shell的当前目录更改为:/one/two/three。对于这个例子来说,cd使用的是绝对路径(因为目录以"/"开始)。当然,cd也可以使用相对路径,比如:
$ cd d //进入子目录d $ cd ../mydir //回到上级目录,然后进入其子目录mydir
文件和目录名可以包含大多数字符:大小写字母,数字,句点,破折号,下画线,以及大部分符号(除了“/”,因为它留作分割目录用)。但是,在实际使用中,要避免使用空格,星号,括号,以及其他在shell中有特殊意义的字符。否则,要给这些符号进行转义。
主目录
linux里每个用户都有一个存放个人文件的目录,称为主目录。普通用户的个人目录通常位于:/home目录下,典型的目录名称是:/home/your-username,如:/home/smith,/home/jones,等等。对于超级用户来说,主目录是:/root 。有几种方法可以找到或者引用你的主目录。
cd 如果不带参数,cd命令会带你移动到你的主目录,例:$ cd 。
HOME环境变量 环境变量HOME包含你的主目录名称。例:$ cd $HOME ,也可移动到你的主目录。
cd ~ 当使用字符“~”代替目录名时,shell会自动将其扩展成主目录名。例:$ cd ~,也可移动到你的主目录。
cd ~username 当“~”后跟着用户名时(如:$ cd ~jones),也可移动到主目录。
系统目录
典型的linux系统有上万个系统目录。系统目录包含操作系统文件,应用程序,文档等,囊括除用户个人文件(/home目录下)外的所有文件。除非你是一名系统管理员,否则大多数系统目录你都几乎不用访问,但是只要有点基础知识,你就可以理解或猜测出这些目录的作用。这些目录的名字通常包含三部分,我们称之为:范畴(scope),分类(category),以及应用(application)。例如,目录:/usr/local/share/emacs包含了文本编辑器emacs的数据。它的scope是:/usr/local(安装系统文件的地方),category是 share(特定应用的数据与文档),application是emacs(文本编辑器)。
目录路径的category
category告诉你目录下文件的类型。
程序类 | |
bin | 程序(通常二进制文件) |
sbin | 专给超级用户使用的程序(通常二进制文件) |
lib | 程序使用的库文件 |
libexec | 供其它程序调用的程序,可当作“可执行程序的库” |
文档类 | |
doc | 文档 |
info | emacs内置帮助系统的文档 |
man | 可用man程序查看在线手册;这些文件通常是压缩过的,或者含有man命令才能解释的排版指令 |
share | 特定程序的文件,如示例,安装说明等 |
配置类 | |
etc | 系统配置文件 |
init.d | 与linux启动有关的配置文件 |
rc.d | 与linux启动有关的配置文件;也可能是rc1.d,rc2.d ..... |
编程类 | |
include | 程序头文件 |
src | 程序的源码 |
网站类 | |
cgi-bin | 网站运行的脚本和程序 |
html | 网页 |
public_html | 网页,通常位于用户主目录 |
WWW | 网页 |
显示类 | |
fonts | 字体 |
X11 | X Window系统文件 |
硬件类 | |
dev | 设备文件,内核提供给应用访问磁盘及其他硬件的接口 |
media | 挂载点,用于访问磁盘的目录 |
mnt | 挂载点,用于访问磁盘的目录 |
misc | 挂载点,用于访问磁盘的目录 |
运行状态类 | |
var | 存放随当前计算机的运行而改变的文件 |
lock | 锁定文件,程序创建它用来表明自己正在执行。它的存在是用来阻止其他程序进行某些操作,或是避免同一个系统上同时运行多个一样的程序 |
log | 日志文件,记录系统的重要事件,包含错误,警告,以及一些仅仅是信息性的消息等 |
接收邮件的邮箱 | |
run | PID文件,包含正在执行的进程的ID; 这些文件常用来对特定的进程进行追踪或者终止其运行 |
spool | 过滤文件,比如等待寄出的email,打印任务,计划任务等 |
tmp | 供程序或者用户临时使用的空间 |
proc |
操作系统状态 |
目录路径的scope
目录路径的scope是从更高的层次上描述整个目录的体系结构。比较常见的scope是:
/ | linux提供的系统文件(称为 “root” ) |
/usr | 更多linux提供的系统文件(称为 ""user ) |
/usr/games | 游戏 |
/usr/local | 个别组织或计算机专用的系统文件,比如:个人另外安装的软件包 |
/usr/X11R6 | X Window系统的文件 |
目录路径的application
目录路径的application部分通常是程序的名字。在scope和category(比如说 /usr/local/doc)之后,程序可以有自己的子目录(比如 /usr/local/doc/myprogram)来包含自己所需的文件。
操作系统目录
这些目录包含了支持linux内核(即linux操作系统的最底层部分)的文件。
/boot | 与系统启动相关的文件 |
/lost+found | 供磁盘修复工具存放恢复好的受损文件 |
/proc | 描述进程的运行状态 |
文件保护
一个linux系统中,可能有许多用户拥有登录账号。为保护隐私和安全,多数用户只能访问一些文件,而不是所有文件。访问控制主要体现在下面两个方面:
谁有权限 | 每份文件和目录都有一个拥有者(owner),他有权限对这些文件,目录进行任何操作。通常,用户创建一个文件后,即成为该文件的拥有者,但是也有例外。 此外,预定义的用户组(group)也有访问文件的权限。用户组由系统管理员定义 最后,文件或目录也可以向系统中所有用户开放。这些既不是拥有者也非用户组成员的其他任何用户,都称为“其它人”(other)。 |
授于何种权限 | 文件拥有者,用户组,以及所有其他人都可能有读,写,执行某些文件的权限。目录同样有这三种权限。 |
查看特定文件的访问模式,如例,可执行:
$ ls -l aaa -rw-r--r-- 1 fuhaidong fuhaidong 8 3月 28 18:27 aaa
查看特定目录的访问模式,如例,可执行:
$ ls -ld One drwxrwxr-x 3 fuhaidong fuhaidong 4096 5月 31 2013 One/
输出的信息中,最左边的10个字符是文件的访问权限,r(读),w(写),x(执行),与其他字母及 “-” 符号的组合,例如:drwxrwxr-x 。上述字母符号的意义如下:
位置 | 意义 |
1 | 文件类型;-表示文件,d表示目录,l表示符号链接,p表示命令管道,c表示字符设备,d表示块设备 |
2 ~ 4 | 文件拥有者的读,写,执行权限 |
5 ~ 7 | 用户组的读,写,执行权限 |
8 ~ 10 | 其他人的读,写,执行权限 |
因此,示例:-rwxr-x--- 就表示文件可被拥有者读,写,执行;被用户组读,执行;禁止其他人访问。