我们需要学习的第一件事(除了如何打字)是如何在Linux系统上导航(navigate)文件系统。在本章中,我们将介绍以下命令:
pwd
——print working directory
打印当前工作目录的名称
cd
——change directory
改变工作目录
ls
——list
列出目录中的内容
像Windows一样,像Linux这样的类Unix操作系统以所谓的分层目录结构(hierarchical directory structure)组织其文件。这意味着它们以树状(tree-like)目录模式组织(目录,directory,在其他系统中有时称为folder,文件夹),其中可能包含文件和其他目录。文件系统中的第一个目录称为根目录(root directory)。根目录包含文件和子目录,其中包含更多文件和子文件夹等。
请注意,与Windows不同,Windows为每个存储设备都有一个单独的文件系统树,而Linux等类Unix系统总是有一个单一的文件系统树。存储设备根据系统管理员( system administrator ,负责系统维护的人员)的意愿连接(attached,或更准确地说, mounted )在树上的不同位置。
我们大多数人可能都熟悉图形文件管理器,它表示如图1所示的文件系统树。请注意,这棵树通常是倒置的,也就是说,根在顶部,各种树枝在下面。
图1:图形文件管理器显示的文件系统树
但是,命令行没有图片,因此要浏览文件系统树,我们需要以不同的方式来考虑它。
想象一下,文件系统是一个迷宫,形状像一棵倒置的树,我们可以站在它的中间。在任何给定的时间,我们都在一个目录中,我们可以看到该目录中包含的文件,以及通往我们上方目录(称为 parent directory ,父目录)和我们下方任何子目录的路径。我们所处的目录称为当前工作目录(current working directory)。要显示当前工作目录,我们使用 pwd
(打印工作目录)命令。
xxxxxxxxxx
[me@linuxbox ~]$ pwd
/home/me
当我们第一次登录系统(或启动终端模拟器会话)时,我们当前的工作目录设置为我们的主目录(home directory)。每个用户帐户都有自己的主目录,这是普通用户唯一允许写入文件的地方。
要列出当前工作目录中的文件和目录,我们使用 ls
命令:
xxxxxxxxxx
[me@linuxbox ~]$ ls
Desktop Documents Music Pictures Public Templates Videos
实际上,我们可以使用 ls
命令列出任何目录的内容,而不仅仅是当前工作目录,它还可以做许多其他有趣的事情。在下一章中,我们将花更多的时间来学习 ls
。
要更改我们的工作目录(我们站在树形迷宫中的位置),我们使用 cd
命令。为此,键入 cd
,后跟所需工作目录的路径名(pathname)。路径名是我们沿着树的分支到达所需目录的路线(route)。我们可以用两种不同的方式之一指定路径名;作为绝对路径名(absolute pathnames)或相对路径名(relative pathnames)。让我们先看看绝对路径名。
绝对路径名从根目录开始,一个接一个地跟随树枝(tree branch),直到完成所需目录或文件的路径。例如,我们的系统上有一个目录,其中安装了我们系统的大多数程序。目录的路径名是 /usr/bin 。这意味着从根目录(由路径名中的前导斜线表示)开始,有一个名为 usr 的目录,其中包含一个称为 bin 的目录。
xxxxxxxxxx
[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 :
xxxxxxxxxx
[me@linuxbox ~]$ cd /usr/bin
[me@linuxbox bin]$ pwd
/usr/bin
现在,假设我们想将工作目录更改为 /usr/bin 的父目录 /usr 。我们可以通过两种不同的方式来实现,要么使用绝对路径名:
xxxxxxxxxx
[me@linuxbox bin]$ cd /usr
[me@linuxbox usr]$ pwd
/usr
或者使用相对路径:
xxxxxxxxxx
[me@linuxbox bin]$ cd ..
[me@linuxbox usr]$ pwd
/usr
两种不同的方法,结果相同。我们应该使用哪一个?需要最少打字的那个!
同样,我们可以通过两种不同的方式将工作目录从 /usr 更改为 /usr/bin ,或者使用绝对路径名:
xxxxxxxxxx
[me@linuxbox usr]$ cd /usr/bin
[me@linuxbox bin]$ pwd
/usr/bin
或者使用相对路径名:
xxxxxxxxxx
[me@linuxbox usr]$ cd ./bin
[me@linuxbox bin]$ pwd
/usr/bin
现在,这里有一些重要的事情要指出。在几乎所有情况下,我们都可以省略 ./
。这是隐含的。以下方法可以做同样的事:
xxxxxxxxxx
[me@linuxbox usr]$ cd bin
一般来说,如果我们不指定某物的路径名,则将假定为工作目录。
在表2-1中,我们看到了一些可以快速更改当前工作目录的有用方法。
表2-1:cd
快捷方式
快捷方式 | 结果 |
---|---|
cd | 将工作目录更改为主目录。 |
cd - | 将工作目录切换到上一次的工作目录。 |
cd ~user_name | 将工作目录更改为 user_name 的主目录。 例如, cd ~bob 会将目录更改为用户“bob”的主目录。 |
xxxxxxxxxx
关于文件名的重要事实
在Linux系统上,文件的命名方式类似于Windows等其他系统,但有一些重要区别。
1.以句点字符开头的文件名将被隐藏。这只意味着,除非你说ls -a,否则ls不会列出它们。创建帐户时,几个隐藏文件被放置在你的主目录中,为你的帐户配置内容。在第11章中,我们将仔细研究其中的一些文件,以了解如何自定义环境。此外,一些应用程序将其配置和设置文件作为隐藏文件放置在主目录中。
2.Linux中的文件名和命令与Unix一样区分大小写。文件名“File1”和“File1”指的是不同的文件。
3.Linux不像其他操作系统那样有“文件扩展名”的概念。你可以随心所欲地命名文件。文件的内容和/或目的由其他方式决定。虽然类Unix操作系统不使用文件扩展名来确定文件的内容/目的,但许多应用程序都使用了。
4.虽然Linux支持可能包含嵌入式空格和标点符号的长文件名,但请将创建的文件名中的标点符号限制为句点(period)、破折号(dash)和下划线(underscore)。最重要的是,不要在文件名中嵌入空格。如果要表示文件名中单词之间的空格,请使用下划线字符。你以后会感谢自己的。
本章解释了shell如何处理系统的目录结构。我们学习了绝对和相对路径名,以及在该结构中移动的基本命令。在下一章中,我们将使用这些知识来参观现代Linux系统。