本章将浅谈一下 "操作系统是什么" 的问题,随后通过讲解一些?Linux 下的基本指令,显示目录内容、跳转操作和文件的创建与删除。在讲解的同时我会穿插一些知识点,比如 Linux 隐藏文件、路径等基础知识。
在任何一本教材上,都可以看到操作系统的定义。
这些定义虽然没什么问题,但是对于初学者来说理解起来还是会一脸懵的。
我们将通过一些简单的例子,带着大家去理解 "什么是操作系统" 。
我们不妨先思考几个问题:
? 思考:先有鸡还是先有蛋?是先有计算机(硬件)还是先有操作系统呢?
💡 答案是先有计算机,换言之操作系统是在有了计算机后诞生的产物。
? 思考:为什么要有 OS ?( * 注:操作系统我们一般称为OS,本博客OS一般指的是操作系统)
💡 因为单纯的硬件计算机操作起来效率特别低,难度特别高。是为了降低计算机的使用难度的。
? 思考:显示器是硬件吗?
💡 是的,printf、cout (软件)向显示器打印,本质就是向硬件写入数据(硬件)。
?
也就是说,软件实际上是可以操作硬件的,那这个操作具体是怎么完成的呢?
?在我们计算机的整个结构中,最底层我们称之为 "硬件" 。所谓的硬件就是键盘、显示器、网卡、显卡等各种设备……在底层它们都叫硬件。这些硬件之间的组织方式,我们放到下一章讲解 "冯诺依曼" 再讲解。
所以我们得到一个既定的事实:软件在操作硬件!
?在硬件层上还存在着一个软件层,我们称之为 "驱动软件层" 。我们可以通过驱动软件层帮上层实现对硬件的基本访问。每一种硬件都有一种与之匹配的驱动程序。
驱动软件层:帮上层实现对硬件的基本访问。
再往上,还有一层软件层,我们一般把它称之为?(操作系统内核)
狭义上来讲,这个就是我们的操作系统。
操作系统的内部它一般会有四大构成:① 进程管理? ② 文件管理? ③ 内存管理? ④ 驱动管理。
操作系统的核心工作是帮助我们进行这上面这些内容的管理工作。
再再往上就是 "用户层" 了,比如我们的图形化界面、各种库,用户的一些应用程序等。
我们可以分成 "对上" 和 "对下" 来说明:
?我们提了这么多,这些都可以归结成一个词 —— 管理
管理的目的:① 对上:提供一个良好稳定的运行环境? ? ② 对下:管理好软硬件资源。
从而整体达到提高操作效率的目的,这就叫操作系统。
总结:OS 是一款软件,用来进行对软硬件资源进行管理的软件。
? 好,操作系统我知道是什么了,那什么是?操作系统呢?
这就如同现实中我们有中国银行、中国建设银行、中国农业银行……
我们的操作系统也有不同的种类,?、?、?……
? 实际上, 操作系统也就是操作系统的一种罢了,
不管它有多么特别,它最终都是围绕我们刚才所说的 "向上和向下" 展开的。
?
ls [选项] [目录或文件]
ls :显示当前目录下所有文件
? ? ? ① 对于目录,该命令列出目录下的所有子目录与文件。
? ? ? ② 对于文件,将列出文件名以及其他信息。
?常用选项:
我们来输入个 ls 看看:
如果当前目录什么文件都没有,如果我们想看 ls 的效果,我们用 touch 先创建一个文件。?
$ touch mytest.c
?
我们可以用 mkdir 创建出一个目录出来:?
我们在输入指令的时候一定要把空格带好,不要出现这种情况:
显示当前目录下,我们当前目录是谁呢?如何知道?输入 pwd 显示当前路径:?
$ pwd
?
下面我们要来认识一下 "命令的选项"
指令是可以带很多选项的,比如默认情况下输入 ls 是只显示文件的,
但是输入 ls 带上 -l ,就可以显示出更多的文件属性。
?ls -l :显示文件更多的属性
$ ls -l # 显示文件更多的属性
?
? 思考:如果我们在 Windows 下创建了一个空文件(0kb)在磁盘中占据空间吗?
💡 要占用,文件有属性数据,属性数据是数据吗?当然是!
我们曾经或者将来的所有文件操作,无非两类:
① 对文件的内容操作? ? ?② 对文件的属性操作
结论:文件 = 文件内容 + 文件属性
所以 ls -l 显示文件的更多属性,这里面的这些属性都代表了文件的某一种属性。
ls -a : 显示 Linux 系统中的隐藏文件
列出目录下的所有文件,包括以 . 开头的隐藏文件。以点开头的文件我们称之为隐藏文件。
$ ls -a # 显示Linux系统中的隐藏文件
隐藏文件??下其实也有隐藏文件,感兴趣可以自己搜搜看。
我们还可以复合使用,比如 ls -a -l 。
ls -a -l :显示 Linux 系统中的隐藏文件的更多属性?
$ ls -a -l
$ ls -al
?
其实,任意目录下都会存在两个隐藏文件:?
. (当前路径)
.. (上级路径)
?它们都是以 . 开头的。如果我们想回到上级路径,该如何操作?
很简单,只需要输入 "退!退!退!" 就行 ——? ?(bushi)?
退个锤子,这里我们要使用一个叫 cd 的指令!?
cd ..? :回到上级路径?
$ cd .. # 回到上级路径
?
诶,我们再 cd ..? pwd 一直重复,最后会回到哪里呢??
退到头了
?/home/ayf? 是什么呢??
这是 Linux 路径,和 Windows 下的路径一样:?
D:\360MoveData\Users\Chaos\Desktop\OllyDBG\plugin
而这个 \ 就是传说中的路径分隔符!
Windows 的路径分隔符是 \? ,而 Linux 的路径分隔符是 /?
思考:我们到 / 里了,该如何回去呢?(即回到 /home/ayf )
当我们回到 / 时,就不能再进行回退了,这和 Window 下一样,一直返回返回到头,图标变灰:
不能回退时剩下的这个 / 我们不称之为路径分隔符,我们称之为 根目录 。
💡 而回到路径的方式,我们可以直接 cd + 路径:
$ cd /home/ayf
我们再讲 ls -a 选项,由 -a 选项扯到了隐藏文件,然后又由 . 开头的隐藏文件引申到 .. ,
讲到当前目录和上级目录,又引申到了 cd.. 回退,由回退再引申到了路径分隔符和根目录……
? 思考:那当前路径?.? ,这一个点,有什么用?
📜 我们在上一章试着写 Hello Linux 时,当时就用到了 ./a.out :
ls 的其他常用选项,这里就不再逐个演示了。
我们对于 ls 用的最多的选项就是 ls -a -l ,其他的选项目前为止只需要有个印象即可。
🔺 对于指令的态度:必须记住,但不是现在。忘掉很正常,不需要专门下来背指令。我们也不用可以得去记,不懂就查就行,查多了自然就熟了。
我们刚才已经用过 cd 命令了,现在我们来正式的谈一谈这个命令。
? 思考:Linux 入口目录时 / 根目录,请问根目录可以再放一个目录吗?
Linux 的目录结构本质是一个多叉树。所以我们把 / 称为根目录,是路径的起始。
在数据结构的角度去理解:
① 既然是一颗多叉树,每一个子节点既可以是一个目录(再放目录或普通文件,递归式的定义),也可以是一个普通文件。
② 这颗多叉树的叶子节点一定是一个普通文件或者是空目录。
我们一般 "定位" ,是通过路径定位的方式找到文件的。
? 思考:为什么我们都是通过路径方式定位文件的呢?
如果我们想找到我们曾经写的 test.c 文件,我们可以从 / 到 home 到 foxny 再到 test.c。
任何一结点,可以有多个子节点。但是任何一个子节点,都只有一个父节点。
所以 test.c 只有一个父节点,即 ayf…… ayf 也只有一个父节点,即 home……
所以当我们定位路径时,反向回推时,这条路径时具有惟一性的。
💡 因为常规的路径定位是具有惟一性的。
?/home/ayf/test.c : Linux 下的 "绝对路径" (惟一性且永远有效)。
?
相对路径:相对于我当前所处的路径。
相对路径往往相对于当前位置,容易失效。而绝对路径是永远有效的!
如果是日常使用,我们推荐相对路径 —— 因为简单。
如果是进行添加配置文件之类的,推荐绝对路径 —— 因为不会出错。
结论:cd 命令后面可以跟上任何以绝对路径或相对路径构建的路径。
这个指令我们刚才已经用过了,没有比这个指令还要简单的指令了。
🔨?pwd:显示用户当前所在的目录
$ pwd # 显示用户当前所在的目录
我们再讲几个 cd 指令的快捷方式:
$ cd ~ # 跳转到当前用户的家目录 ~: 表示home
?这里的 ~ 就是一个快捷进入我们工作目录的方式。
默认一个用户在登录时,都是处于该用户的家目录中的。
一个普通用户的家目录一般都是在 home 路径下有一个以你名字命名的文件夹。
如果是?root 用户,它会在根目录下的 root 目录下。
$ cd / # 跳到根目录
$ cd - # 跳转至上一次我所处的路径
touch [选项]... 文件...
🔨 touch:创建文件
touch?命令参数可更改文档或目录的日期时间,
包括存取时间和更改时间,或者新建一个不存在的文件。
📜?touch 常用选项:
本章我们只讲?touch 普通用法,我们不去讲它的常用选项。
本章只需掌握 touch 的最普通的用法,即用 touch 来创建普通文件。
💬 动手操作:
① touch 创建一个 mytest.c? ? ?② 使用 nano 写一个 Hello,Linux!? ? ? ③ gcc 编译
具体操作步骤如下:(nano —— Linux 中的文本编辑器)
?如果你没有 nano,切换至 root 账户,输入以下指令进行安装:
# yum install -y nano
?如果你没有 gcc,切换至 root 账户,输入以下指令进行安装:
# yum install -y gcc-c++
mkdir [选项] [目录名] # 创建目录
🔨 mkdir:创建目录
📜 mkdir 常用选项:
??? -p, --parents? 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。
💭 对于 mkdir 的命令,本章只需要掌握这两个就够了:
mkdir -p ../../.. //创建一串路径
?rmdir?:删除空目录
rmdir [目录名]
?注意!rmdir 只能删除空目录!
?rm?:删除普通文件?
rm [文件名] # 删除普通文件
?
名字一定要输入正确
如果像删除一个目录我们可以通过 " -r 递归式删除 "?
$ rm -r [目录名] # 递归删除目录文件
?
rm -rf :强制删除
rm 还有一个选项, -r 表示递归,还可以带一个 f (force,即强迫) :
$ rm -rf [目标] # 强制删除
有时候我想删一个文件,系统会提示你 "你确认吗?"
?我们带一个 -f,? 意思就是说 —— "我非常确认!你不要给我提示了!"
注意事项:不要在 root 下输入:?
# rm -rf /
你的系统有可能会挂掉,即便没有挂,它它会从根目录开始递归把能删的都删了。
(如果你想试,且你现在也没啥文件,可以试试,就算挂掉了,去云服务器后台重启就行)