我们需要学习的第一件事(除了打字之外)是如何在 Linux 文件系统中跳转。 在这一章节中,我们将介绍以下命令:
> * pwd — 打印出当前工作目录名
> * cd — 更改目录
> * ls — 列出目录内容
## 理解文件系统树
类似于 Windows,一个“类 Unix” 的操作系统,比如说 Linux,以分层目录结构来组织所有文件。 这就意味着所有文件组成了一棵树型目录(有时候在其它系统中叫做文件夹), 这个目录树可能包含文件和其它的目录。文件系统中的第一级目录称为根目录。 根目录包含文件和子目录,子目录包含更多的文件和子目录,依此类推。
注意(类 Unix 系统)不像 Windows ,每个存储设备都有一个独自的文件系统。类 Unix 操作系统, 比如 Linux,总是只有一个单一的文件系统树,不管有多少个磁盘或者存储设备连接到计算机上。 根据负责维护系统安全的系统管理员的兴致,存储设备连接到(或着更精确些,是挂载到)目录树的各个节点上。
## 当前工作目录
![2015-06-23/558915847029a](https://box.kancloud.cn/2015-06-23_558915847029a.png)
图1: 由图形化文件管理器显示的文件系统树
大多数人都可能熟悉如图1所示描述文件系统树的图形文件管理器。注意, 通常这是一棵 倒置的树,也就是说,树根在最上面,而各个枝干在下面展开。
然而,命令行没有图片,所以我们需要考虑用不同的方法,在文件系统树中跳转。
把文件系统想象成一个迷宫形状,就像一棵倒立的大树,我们站在迷宫的中间位置。 在任意时刻,我们处于一个目录里面,我们能看到这个目录包含的所有文件, 以及通往上面目录(父目录)的路径,和下面的各个子目录。我们所在的目录则称为 当前工作目录。我们使用 pwd(print working directory(的缩写))命令,来显示当前工作目录。
~~~
[me@linuxbox ~]$ pwd
/home/me
~~~
当我们首次登录系统(或者启动终端仿真器会话)后,当前工作目录是我们的家目录。 每个用户都有他自己的家目录,当用户以普通用户的身份操控系统时,家目录是唯一 允许用户对文件进行写入的地方。
## 列出目录内容
列出一个目录包含的文件及子目录,使用 ls 命令。
~~~
[me@linuxbox ~]$ ls
Desktop Documents Music Pictures Public Templates Videos
~~~
实际上,用 ls 命令可以列出任一个目录的内容,而不只是当前工作目录的内容。 ls 命令还能完成许多有趣的事情。在下一章节,我们将介绍更多关于 ls 的知识。
## 更改当前工作目录
要更改工作目录(此刻,我们站在树形迷宫里面),我们用 cd 命令。输入 cd, 然后输入你想要去的工作目录的路径名。路径名就是沿着目录树的分支 到达想要的目录期间所经过的路线。路径名可通过两种方式来指定,一种是绝对路径, 另一种是相对路径。我们先来介绍绝对路径。
## 绝对路径
绝对路径开始于根目录,紧跟着目录树的一个个分支,一直到达所期望的目录或文件。 例如,你的系统中有一个目录,大多数系统程序都安装在这个目录下。这个目录的 路径名是 /usr/bin。它意味着从根目录(用开头的“/”表示)开始,有一个叫 “usr” 的 目录包含了目录 “bin”。
~~~
[me@linuxbox ~]$ cd /usr/bin
[me@linuxbox bin]$ pwd
/usr/bin
[me@linuxbox bin]$ ls
...Listing of many, many files ...
~~~
我们把工作目录转到 /usr/bin 目录下,里面装满了文件。注意 shell 提示符是怎样改变的吗? 为了方便,通常终端提示符自动显示工作目录名。
## 相对路径
绝对路径从根目录开始,直到它的目的地,而相对路径开始于工作目录。 为了做到这个(用相对路径表示), 我们在文件系统树中用一对特殊符号来表示相对位置。 这对特殊符号是 “.” (点) 和 “..” (点点)。
符号 “.” 指的是工作目录,”..” 指的是工作目录的父目录。下面的例子说明怎样使用它。 让我们再次把工作目录切换到 /usr/bin:
~~~
[me@linuxbox ~]$ cd /usr/bin
[me@linuxbox bin]$ pwd
/usr/bin
~~~
好了,比方说我们想更改工作目录到 /usr/bin 的父目录 /usr。可以通过两种方法来实现。可以使用绝对路径名:
~~~
[me@linuxbox bin]$ cd /usr
[me@linuxbox usr]$ pwd
/usr
~~~
或者, 也可以使用相对路径:
~~~
[me@linuxbox bin]$ cd ..
[me@linuxbox usr]$ pwd
/usr
~~~
两种不同的方法,一样的结果。我们应该选哪一个呢? 选输入量最少的那个!
同样地,从目录 /usr/ 到 /usr/bin 也有两种途径。可以使用绝对路径:
~~~
[me@linuxbox usr]$ cd /usr/bin
[me@linuxbox bin]$ pwd
/usr/bin
~~~
或者,也可以用相对路径:
~~~
[me@linuxbox usr]$ cd ./bin
[me@linuxbox bin]$ pwd
/usr/bin
~~~
有一件很重要的事,我必须指出来。在几乎所有的情况下,你可以省略”./”。它是隐含地。输入:
~~~
[me@linuxbox usr]$ cd bin
~~~
实现相同的效果,如果不指定一个文件的目录,那它的工作目录会被假定为当前工作目录。
## 有用的快捷键
在表3-1中,列举出了一些快速改变当前工作目录的有效方法。
表3-1: cd 快捷键
| 快捷键 | 运行结果 |
| --- | --- |
| cd | 更改工作目录到你的家目录。 |
| cd - | 更改工作目录到先前的工作目录。 |
| cd ~user_name | 更改工作目录到用户家目录。例如, cd ~bob 会更改工作目录到用户“bob”的家目录。 |
**关于文件名的重要规则**
>
> 1. 以 “.” 字符开头的文件名是隐藏文件。这仅表示,ls 命令不能列出它们, 用 ls -a 命令就可以了。当你创建帐号后,几个配置帐号的隐藏文件被放置在 你的家目录下。稍后,我们会仔细研究一些隐藏文件,来定制你的系统环境。 另外,一些应用程序也会把它们的配置文件以隐藏文件的形式放在你的家目录下面。
>
>
> 2. 文件名和命令名是大小写敏感的。文件名 “File1” 和 “file1” 是指两个不同的文件名。
>
>
> 3. Linux 没有“文件扩展名”的概念,不像其它一些系统。可以用你喜欢的任何名字 来给文件起名。文件内容或用途由其它方法来决定。虽然类 Unix 的操作系统, 不用文件扩展名来决定文件的内容或用途,但是有些应用程序会。
>
>
> 4. 虽然 Linux 支持长文件名,文件名可能包含空格,标点符号,但标点符号仅限 使用 “.”,“-”,下划线。最重要的是,不要在文件名中使用空格。如果你想表示词与 词间的空格,用下划线字符来代替。过些时候,你会感激自己这样做。
- 第一章:引言
- 第二章:什么是shell
- 第三章:文件系统中跳转
- 第四章:研究操作系统
- 第五章:操作文件和目录
- 第六章:使用命令
- 第七章:重定向
- 第八章:从shell眼中看世界
- 第九章:键盘高级操作技巧
- 第十章:权限
- 第十一章:进程
- 第十二章:shell环境
- 第十三章:VI简介
- 第十四章:自定制shell提示符
- 第十五章:软件包管理
- 第十六章:存储媒介
- 第十七章:网络系统
- 第十八章:查找文件
- 第十九章:归档和备份
- 第二十章:正则表达式
- 第二十一章:文本处理
- 第二十二章:格式化输出
- 第二十三章:打印
- 第二十四章:编译程序
- 第二十五章:编写第一个shell脚本
- 第二十六章:启动一个项目
- 第二十七章:自顶向下设计
- 第二十八章:流程控制 if分支结构
- 第二十九章:读取键盘输入
- 第三十章:流程控制 while/until 循环
- 第三十一章:疑难排解
- 第三十二章:流程控制 case分支
- 第三十三章:位置参数
- 第三十四章:流程控制 for循环
- 第三十五章:字符串和数字
- 第三十六章:数组
- 第三十七章:奇珍异宝