【看表情包学Linux】了解操作系统 | 目录内容的显示 | 目录跳转 | 基本创建与删除操作(一)

简介: 本章将浅谈一下 "操作系统是什么" 的问题,随后通过讲解一些 Linux 下的基本指令,显示目录内容、跳转操作和文件的创建与删除。在讲解的同时我会穿插一些知识点,比如 Linux 隐藏文件、路径等基础知识。

本章将浅谈一下 "操作系统是什么" 的问题,随后通过讲解一些 Linux 下的基本指令,显示目录内容、跳转操作和文件的创建与删除。在讲解的同时我会穿插一些知识点,比如 Linux 隐藏文件、路径等基础知识。

Ⅰ. 瞭解操作系统


0x00 什么是操作系统?

在任何一本教材上,都可以看到操作系统的定义。


这些定义虽然没什么问题,但是对于初学者来说理解起来还是会一脸懵的。


我们将通过一些简单的例子,带着大家去理解 "什么是操作系统" 。


我们不妨先思考几个问题:


❓ 思考:先有鸡还是先有蛋?是先有计算机(硬件)还是先有操作系统呢?


💡 答案是先有计算机,换言之操作系统是在有了计算机后诞生的产物。


❓ 思考:为什么要有 OS ?( * 注:操作系统我们一般称为OS,本博客OS一般指的是操作系统)


💡 因为单纯的硬件计算机操作起来效率特别低,难度特别高。是为了降低计算机的使用难度的。


❓ 思考:显示器是硬件吗?


💡 是的,printf、cout (软件)向显示器打印,本质就是向硬件写入数据(硬件)。


0x01 操作系统的基本概念?

也就是说,软件实际上是可以操作硬件的,那这个操作具体是怎么完成的呢?


在我们计算机的整个结构中,最底层我们称之为 "硬件" 。


所谓的硬件就是键盘、显示器、网卡、显卡等各种设备……在底层它们都叫硬件。


这些硬件之间的组织方式,我们放到下一章讲解 "冯诺依曼" 再讲解。


所以我们得到一个既定的事实:软件在操作硬件!


在硬件层上还存在着一个软件层,我们称之为 "驱动软件层" 。


我们可以通过驱动软件层帮上层实现对硬件的基本访问。


每一种硬件都有一种与之匹配的驱动程序。


举个例子,不知道大家有没有这样的操作经历 —— 我们在 Windows 中使用鼠标,鼠标没有插入计算机中时我们滚动鼠标时没有反应的,但当我们把鼠标插入到USB接口中的一瞬间,此时滚动可能还是没有反应的(当然,现在鼠标的响应已经时间短的让人难以察觉了),即使鼠标在物理上已经插入到计算机USB接口中了。大概过了几秒电脑驱动提示音响了一声,此时鼠标就和电脑相连接了。


当我们往我们的计算机新增一个设备时,刚开始插入的时候短暂期间其实都是没有反应的,过了一会它就有反应了,这个 "过了一会" 操作系统在做什么呢?


操作系统在根据你的硬件帮你选择对应的驱动程序。也就是说,它的核心工作是能够给上层提供访问硬件的接口,就好比你自己写C++代码,你封装一个类,类里面封装了各种成员方法,我们这么做不就是想让我们定义出来的对象可以使用类中定义的成员方法来进行操作吗?所以我们写类写方法就是为了让类给我们提供接口。


一般而言,一种硬件都会有厂商给我提供对应的驱动软件,获取驱动的方式,一般而言是由 OS 帮我们继续宁获取与安装的。这些对用户来说是透明的。


驱动软件层:帮上层实现对硬件的基本访问。


再往上,还有一层软件层,我们一般把它称之为 (操作系统内核)。


狭义上讲,这个就是我们的操作系统。


操作系统的内部它一般会有四大构成:① 进程管理  ② 文件管理  ③ 内存管理  ④ 驱动管理。


操作系统的核心工作是帮助我们进行这上面这些内容的管理工作。


再再往上就是 "用户层" 了,比如我们的图形化界面、各种库,用户的一些应用程序等。

b45e72f0f063417ed2f4ebb1310cb79b_1b3ceb105d664c999dd2342067f4a546.png

0x02 什么是操作系统?

我们现在再去看刚才的问题,为什么要有操作系统?


① 对下要管理好底层的软硬件资源。


② 对上给用户提供一个良好的、稳定的、高效的运行环境。


打个比方,你 CSGO 打的好好的,打个五分钟电脑都卡死重启,打着打着就关机。


而且动不动还蓝屏一下,这还玩个锤子,毫无游戏体验啊!

我们提了这么多,这些都可以归结成一个词 —— 管理

6b0e17bc9f2f22458e8fc76eee647aab_9844d474b38b48b8b9a13f659041b0c8.png

📚 管理的目的:① 对上:提供一个良好稳定的运行环境    ② 对下:管理好软件资源。


从而整体达到提高操作效率的目的,这就叫操作系统。


 欸,软件管理软件,这合理吗?


人管人,软件管理软件有啥奇怪的,这有啥不合理的,这很合理。


🔺 总结:OS 是一款软件,用来进行对软硬件资源进行管理的软件。


❓ 好,操作系统我知道是什么了,那什么是   操作系统呢?


这就如同现实中我们有中国银行、中国建设银行、中国农业银行……


我们的操作系统也有不同的种类, 、 、 ……


实际上,   操作系统也就是操作系统的一种罢了,


不管它有多么特别,它最终都是围绕我们刚才所说的 "向上和向下" 展开的。

ca00d63a3e7df6f076da00e8b013996f_ff050de3be3a46628705f3c1aa34c624.png



0x03 为什么要进行指令操作?

不废话,我们先说结论 ——


指令操作对于非专业人员,没有必要。对于专业人员,可以必要,也可以不必要。


但是,对于我们学习 OS 原理、编程、指令操作,必须需要掌握。


❓ 用图形化界面不香吗?是先有指令,还是现有图形化界面?

7ee25ff6b90c63c7ce1e026184297dc9_4ef3ffe0ca2145d28400caa0118a0c8a.png

早期的操作系统,是键盘给OS、计算机数据的。


如何输入数据给计算机?打字机 → 计算机键盘(从打字机演化过来的)。


你有没有想过,为什么我们键盘上是按 QWER 的顺序,还不是 ABCD 去排列的?


其实是历史原因导致的,这是根据使用频率去设计的。


💡 先有指令操作。所有的操作系统,刚开始的时候全部都是支持指令操作的。


如果你对计算机图形化的内容感兴趣,可以百度了解了解。


我们的  也是有指令操作的,也就是 cmd 命令提示符:

4506417dac6b5e22f6691608b31b9643_8074a19be12d4bf28e6595578da60c13.png

显著的缺点就是操作成本高,所以当时操作系统公司为了 "取悦" 用户,都去开发了图形化界面。


❓ 我们再回到问题本身:那我们为什么要学习指令呢?


💡 因为指令操作距离 OS 更近,便于我们更好地掌握 OS。所以我们学习指令除了学习指令本质外,我们更是为了接近操作系统的特性。


Ⅱ. 目录内容的显示


0x00 ls 指令

ls [选项] [目录或文件]

🔨 ls :显示当前目录下所有文件


     ① 对于目录,该命令列出目录下的所有子目录与文件。


     ② 对于文件,将列出文件名以及其他信息。


📜 常用选项:


-a  列出目录下的所有文件,包括以 . 开头的隐含文件。

-d  将目录像文件一样显示,而不是显示其下的文件。如:ls -d 指定目录

- i  输出文件的  结点的索引信息。如: ls -ai 指定文件。

-k  以  字节的形式表示文件的大小。ls -alk 指定文件。

- l  列出文件的详细信息。

-n  用数字的  代替名称。

-F  在每个文件名后附上一个字符以说明该文件的类型。" * " 表示可执行的普通文件, " / "表示目录, " @ " 表示符号链接; " | " 表示 FIFOs; " = " 表示套接字(sockets)。(目录类型识别)。

-r   对目录反向排序。

-t   以时间排序。

-s  在 l 文件名后输入该文件的大小(大小排序,如何找到目录下最大的文件)。

-R  列出所有子目录下的文件(递归)。

-1   一行只输出一个文件

💭 我们来输入个 ls 看看:

4064f14706cbf8a48cc8fc3f4ca46b2d_0b787fadd9884d04b8aebf47ec76460c.png

因为当前目录确实什么文件都没有,如果我们想看 ls 的效果,我们用 touch 先创建一个文件。


( touch 命令我们后面再说,这里先用一下方便演示 ls 的效果)


$ touch mytest.c

之后我们再输入 ls,就可以显示当前目录下的文件,我们刚才创建的 mytest.c 文件了:

b7591b0156932b65f7ec7f99c9f3774b_74ce2d2b6fa44007b099a15920b871aa.png

当然,我们也可以用 ls 直接查看到一些目录文件。


💭 我们现在还没有目录,我们先用 mkdir 创建出一个目录出来:


(这个目录就相当于 Windows 下的一个文件夹,我们先可以这么理解。下面再说这里先测 ls )

$ mkdir code

eb159b6c3ed0feb6593301da827d0c04_c3565476f46a4417b42238786e6af7bf.png


📌 注意事项:我们在输入指令的时候一定要把空格带好,不要出现这种情况:

336b82c3ce58913639a12ecca1487383_9c95174867614b62946b6b5369432b2d.png

❓ 显示当前目录下,我们当前目录是谁呢?如何知道?输入 pwd 显示当前路径:


$ pwd

aed8ae7a80984a271cc01e62b83dfba0_c1f53ca86cd2491f9b540380bc84a2ed.png

(我们讲一个 ls 补充了这么多指令,就是为了做一个 ls 的演示,相当于是一个 "起手式" 。只是为了能快速操作起来,我们下面还要对我们刚才提前用到的指令详细介绍一下。)


0x01 常用选项:ls -l

下面我们要来认识一下 "命令的选项"


指令是可以带很多选项的,比如默认情况下输入 ls 是只显示文件的,


但是输入 ls 带上 -l ,就可以显示出更多的文件属性。


🔨 ls -l :显示文件更多的属性


$ ls -l        # 显示文件更多的属性

51fdb63c16eab9c93e3b7f22d32b5542_cf4cbaa2c87340b6ab23c002c8d8777b.png


0x02 Linux 隐藏文件

❓ 思考:如果我们在 Windows 下创建了一个空文件(0kb)在磁盘中占据空间吗?


💡 要占用,文件有属性数据,属性数据是数据吗?当然是!

825d0391457be952685992c100ea7f27_569dd5ffd09f45999c08c479475aa915.png

(文件是有属性的)


我们曾经或者将来的所有文件操作,无非两类:


① 对文件的内容操作


② 对文件的属性操作


🔺 结论:文件 = 文件内容 + 文件属性


所以 ls -l 显示文件的更多属性,这里面的这些属性都代表了文件的某一种属性。

44dd29a6d8265dc56833d1476e4a4b2c_3a39c0aef6ee4de683a6c60991de055f.png

0x03 ls -a 选项

🔨 ls -a : 显示 Linux 系统中的隐藏文件


列出目录下的所有文件,包括以 . 开头的隐藏文件。以点开头的文件我们称之为隐藏文件。


$ ls -a        # 显示Linux系统中的隐藏文件

9d578c2bb84383fb51596aa0e5ad7fd8_22549e9a4534405685322b60807d5236.png


隐藏文件? 下其实也有隐藏文件,感兴趣可以自己搜搜看。


既然有隐藏文件,那我们是不是也可以创建出隐藏文件呢?当然可以:

db6b857c78f94bb33f48a3206e2c7cf4_f3f8fca043354981ac13783a2f120784.png

当然,我们还可以复合使用,比如 ls -a -l 。


🔨 ls -a -l :显示 Linux 系统中的隐藏文件的更多属性


$ ls -a -l
$ ls -al

3c8894671bffb3f90e6f87f0fb0fbef1_c827882c95264009b03692f3d44b164a.png

0x04 当前路径与上级路径( . 和 .. )

其实,任意目录下都会存在两个隐藏文件:


.   (当前路径)
..  (上级路径)

它们都是以 . 开头的。如果我们想回到上级路径,该如何操作?

f893ff7b9fefc4fd7cdf212897485099_1211678fcdf84f78a2df605362b5f07c.png


很简单,只需要输入 "退!退!退!" 就行 ——   (bushi)

0f340b02dd9fbff607a549fc1565d981_0d97a8d50d9948c0b037dd3c513cdd87.png

退个锤子,这里我们要使用一个叫 cd 的指令!(change dir,即更改路径)


🔨 cd ..  :回到上级路径


$ cd ..           # 回到上级路径

d89757fbef7eb58601d21dc10538b09a_262374db8d9b4925bbdb0931dfdbe75f.png

(记得输入pwd看看在哪)


诶,我们再 cd ..  pwd 一直重复,最后会回到哪里呢?


7ebc6d48b7ba2777c85bf58677b78fc5_ad26855d53024b9893ddc240c34d1d60.png


❓ 思考: /home/foxny  是什么呢?


💡 这是 Linux 路径,和 Windows 下的路径一样:


D:\360MoveData\Users\Chaos\Desktop\OllyDBG\plugin

而这个 \ 就是传说中的路径分隔符!


Windows 的路径分隔符是 \  ,而 Linux 的路径分隔符是 /


❓ 思考:我们到 / 里了,该如何回去呢?(即回到 /home/foxny )


当我们回到 / 时,就不能再进行回退了,这和 Window 下一样,一直返回返回到头,图标变灰:

60603d7199656cc18a6a32a9725ac382_2bb58bd8140646d1b8f94d295f4c776a.png

不能回退时剩下的这个 / 我们不称之为路径分隔符,我们称之为 根目录 。


💡 而回到路径的方式,我们可以直接 cd + 路径:

$ cd  /home/foxny

e917ec4f888b6dae6377891233bcc65d_c84ea4563cea45da80f3e7f4ea1b879c.png

(至于根目录的更多内容,我们一会讲 cd 命令的时候再细说)


哈哈哈哈,值得吐槽的是 —— 我们是如何扯这么远的呢?


我们再讲 ls -a 选项,由 -a 选项扯到了隐藏文件,然后又由 . 开头的隐藏文件引申到 .. ,


讲到当前目录和上级目录,又引申到了 cd.. 回退,由回退再引申到了路径分隔符和根目录……


咳咳,我们再继续讲解当前路径。


❓ 思考:那当前路径 .  ,这一个点,有什么用?


📜 我们在上一章试着写 Hello Linux 时,当时就用到了 ./a.out :

ebf6b0196b827956781f93bd18ef5030_574cdff784ae4ec48f882b084881de42.png


 ls 的其他常用选项,这里就不再逐个演示了。


我们对于 ls 用的最多的选项就是 ls -a -l ,其他的选项目前为止只需要有个印象即可。


🔺 对于指令的态度:必须记住,但不是现在。忘掉很正常,不需要专门下来背指令。我们也不用可以得去记,不懂就查就行,查多了自然就熟了。

相关文章
|
14天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
38 1
|
15天前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
16天前
|
搜索推荐 Linux
深入理解Linux操作系统的启动过程
本文旨在揭示Linux操作系统从开机到完全启动的神秘面纱,通过逐步解析BIOS、引导加载程序、内核初始化等关键步骤,帮助读者建立对Linux启动流程的清晰认识。我们将探讨如何自定义和优化这一过程,以实现更高效、更稳定的系统运行。
|
14天前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
15天前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
17天前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
19天前
|
消息中间件 安全 Linux
深入探索Linux操作系统的内核机制
本文旨在为读者提供一个关于Linux操作系统内核机制的全面解析。通过探讨Linux内核的设计哲学、核心组件、以及其如何高效地管理硬件资源和系统操作,本文揭示了Linux之所以成为众多开发者和组织首选操作系统的原因。不同于常规摘要,此处我们不涉及具体代码或技术细节,而是从宏观的角度审视Linux内核的架构和功能,为对Linux感兴趣的读者提供一个高层次的理解框架。
|
21天前
|
人工智能 安全 Linux
Linux操作系统的演变与未来趋势###
本文深入探讨了Linux操作系统从诞生至今的发展历程,分析了其开源模式对技术创新和IT行业的影响,并展望了Linux在未来技术生态中的角色。通过历史回顾、现状分析和未来预测,本文旨在为读者提供一个关于Linux操作系统全面而深入的视角。 ###
|
21天前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
29 2
|
21天前
|
缓存 网络协议 Linux
深入探索Linux操作系统的内核优化策略####
本文旨在探讨Linux操作系统内核的优化方法,通过分析当前主流的几种内核优化技术,结合具体案例,阐述如何有效提升系统性能与稳定性。文章首先概述了Linux内核的基本结构,随后详细解析了内核优化的必要性及常用手段,包括编译优化、内核参数调整、内存管理优化等,最后通过实例展示了这些优化技巧在实际场景中的应用效果,为读者提供了一套实用的Linux内核优化指南。 ####
44 1