1.Linux是什么?
Linux是一款继Unix之后开发的一款开源操作系统。
操作系统是基础性系统软件,是人机交互的一个媒介,我们日常使用的Windows、iOS、Android都是操作系统,用户都是和操作系统打交道的。像Windows、iOS是闭源的,我们要付费才能使用。但是像Android就是开源的,开源我们可以简单理解为源代码对外开放,我们可以随时修改它,也可以借助它来写一个新的系统。国产手机的系统大多都是在Android的基础上再搭建起来的。
Linux的源码对外开放,用户能够随意改造它,在Linux之上做出自己的系统,Linux的开源也为它迎来了很多用户。Linux开源几十年的发展中不断壮大,如今Linux已经嵌入到我们生活的方方面面,无论是日常使用的软件还是服务器都能遇见它。
2.Linux交互方式
下面就是我们经常打交道的Linux
这和我们之前的Windows等图形化界面完全不同,这是命令行交互Shell,我们需要通过指令来和操作系统交流。图形界面和命令行是并行的交互方式,图形界面并不是建立在命令行之上的,它是独立运行的。Windows操作系统就同时拥有两种交互方式,可以在图形界面下打开终端使用命令行。
图形化界面是另一层应用程序,我们可以选择安装,但Linux大多还是采用命令行的方式交互。
无论是图形化(GUI)还是命令行交互(Shell),它们都是建立在系统内核之上的,它们都会和系统内核沟通,内核再负责调取相对应的硬件资源。
我们简化理解为操作系统 = 内核+外壳程序(GUI或Shell)。我们日常管理文件就是在外壳程序进行的,它确保了用户能够看见文件并管理文件,但文件的实际存储和操作是内核负责的。简单来说我们能看见并能和它交互的都叫外壳程序,其余的都是系统内核。
这样做的原因在于用户不擅长访问内核,内核是要直接和硬件打交道的,因此外壳程序相当于一个翻译者,我们输入我们的需求,内核处理后再和硬件沟通,最后将结果返回到外壳程序,让我们看见。由此可见,外壳程序非常关键,只有拥有这个翻译官,我们才能随心操作计算机。所以外壳程序的安全性很重要,因此我们的每一次指令或操作,外壳程序都会创建子进程,子进程帮我们进行解释,保证外壳自身安全。就像公司的几乎每次任务都是派员工解决,就算有一两个任务没完成,也不会影响整个公司。如果每次都是CEO出行解决,任务失败一两次可能就会导致公司信誉降低,影响其安全性。
3.Linux文件的结构
在Linux上,一切都是建立在文件上的,包括系统的内核的内容都是以文件的形式存储的,文件以多叉树的形式存储,这颗多叉树有一个根目录,写作"/",一切数据都是在根目录下存储的,维持系统运作的相关文件也都在里面,这也是为什么我们一安装Linux里面就会有很多目录和文件
Linux根目录之上再无任何其它数据,就像一棵树的根一样,往更深的地方挖不出东西来。Linux的一且系统文件和个人数据都存放在根目录下,如果我们将根目录删除,就意味着整个Linux系统,包括所有的个人数据都会删除。
文件既然是以多叉树的形式存储,那么如何定位它们呢?这就要用到多叉树的性质了。我们学二叉树时就知道树有一个规则,即不能成环,也就是说我们可以用父子关系来讲述树中上下结点的关系。多叉树中,一个父节点可以有多个子节点,但一个子节点有且只能有一个父节点。在Linux中,根目录/是一切文件的父亲,子文件不断向它当前唯一的父节点走,最终能找到根节点。那么我们记录找寻根节点过程,再逆过程就能定位文件了。
4.Linux定位的写法
(1)工作目录
我们使用Linux系统时,一切都是在根目录下,用户本身也是身处是在某一个目录下进行操作的。当我们使用pwd查看我们的工作目录时,就会看到我们所处的目录
可以看到我现在是在root目录里面,cd就是将自己的工作目录切换到指定的目录里面。我们发现上面的路径都是以/开头,这叫绝对路径。
(2)绝对路径和相对路径
绝对路径都是以斜杠/开头,相对路径一定不以斜杠开头。第一根斜杠/叫做根目录,后续的斜杠都叫路径分隔符。我们可以发现,根目录的写法起到了绝对路径标志、根目录下、路径分隔符三层含义,很值得我们品味。绝对路径在任何工作目录下都可以精准定位同一个文件或目录,只要是在该系统下就不会产生任何歧义。
目录是可以嵌套的,所有的目录都是嵌在根目录以下的。那么目录也有层级之分,如果我想要回到上级目录应该怎么做呢。Linux中,每当我们新建目录后都会默认带有两个隐藏目录,.和..
.目录就是当前目录的意思,当我们cd .之后工作目录不会变,它存在的意义一是为了系统逻辑,二是可以看到当前目录的属性
..目录是回退到上级目录,在根目录下,上级目录也是根目录,我们同样可以看到上级目录的属性。
借助上级目录和当前目录的操作,我们就可以使用相对路径来定位了,如../test就是指当前工作目录的上级目录下的test文件或目录。相对路径要把握好文件的结构,了解清楚当前的工作目录和要定位的文件目录在哪。
(3)路径结尾带/和不带的区别/
/root/和/root有区别吗?几乎没有区别,/root和/root/都意味着选中该目录,在不同指令下起到不同作用,cd就是切换工作目录到已选中的目录,mv /root /dst和mv /root/ /dst中都是移动选中的目录到指定目录,如果没有该目录就创建(可利用它来改名字),cp -r /root /dst和cp -r /root/ /dst也是复制选中的目录到指定目录。
唯一的区别在于/root这种写法标志root可以是一个目录,但也不排除是一个文件,而/root/一定是一个目录,如果是文件的话末尾加/是识别不了这个定位的。
pwd显示的/root标志着当前工作目录为/root这个所选目录。
使用不同指令配上同一个目录路径可以有很多解释,pwd和cd就是在该目录里面,mv和cp就是选中该目录。我们可以统一理解为选中目录。pwd就解释为工作在选择的目录,cd就是切换到选择的目录。