今天我们通过一道常见的高频面试题引出今天的主要内容。面试题如下:请你说说rm / -rf
的作用?
相信 90% 的同学是知道这个指令的。这里先预警一下,你千万不要轻易在服务器上尝试。
什么是 Shell
在我们学习 Linux 指令之前,先来说一下什么是 Shell?Shell 把我们输入的指令,传递给操作系统去执行,所以 Shell 是一个命令行的用户界面。
早期程序员没有图形界面用,就用 Shell。而且图形界面制作成本较高,不能实现所有功能,因此今天的程序员依然在用 Shell。
你平时还经常会看到一个词叫作bash(Bourne Again Shell),它是用 Shell 组成的程序。这里的 Bourne 是一个人名,Steve Bourne 是 bash 的发明者。
我们今天学习的所有指令,不是写死在操作系统中的,而是一个个程序。比如rm
指令,你可以用which
指令查看它所在的目录。如下图所示,你会发现rm
指令在/usr/bin/rm
目录中。
如上图所示,ramroll
是我的英文名字,ubuntu 是我这台机器的名字。我输入了which rm
,然后获得了/usr/bin/rm
的结果,最终执行这条指令的是操作系统,连接我和操作系统的程序就是 Shell。
Linux 对文件目录操作的指令就工作在 Shell 上,接下来我们讲讲文件目录操作指令。
Linux 对文件目录的抽象
Linux 对文件进行了一个树状的抽象。/
代表根目录,每一节目录也用/
分开,所以在上图所展示的/usr/bin/rm
中,第一级目录是/
根目录,第二级目录是usr
目录,第三级是bin
目录。最后的rm
是一个文件。
路径(path)
像/usr/bin/rm
称为可执行文件rm
的路径。路径就是一个文件在文件系统中的地址。如果文件系统是树形结构,那么通常一个文件只有一个地址(路径)。
目标文件的绝对路径(Absolute path),也叫作完全路径(full path),是从/开始,接下来每一层都是一级子目录,直到定位到目标文件为止。
如上图所示的例子中,/usr/bin/rm
就是一个绝对路径。
工作目录
为了方便你工作,Shell 还抽象出了工作目录。当用户打开 Shell 的时候,Shell 就会给用户安排一个工作目录。因此也就产生了相对路径。
相对路径(Relative path)是以工作目录为基点的路径。比如:
-
当用户在
/usr
目录下的时候,rm
文件的相对路径就是bin/rm
; -
如果用户在
/usr/bin
目录下的时候,rm
文件的路径就是./rm
或者rm
,这里用.
代表当前目录; -
如果用户在
/usr/bin/somedir
下,那么rm
的相对路径就是../rm
,这里用..
代表上一级目录。
我们使用cd
(change directory)指令切换工作目录,既可以用绝对路径,也可以用相对路径。这里我要强调几个注意事项:
-
输入cd,不带任何参数会切换到用户的家目录,Linux 中通常是
/home/{用户名}
。以我自己为例,我的家目录是/h