(2)Linux 操作系统||基本创建与操作

news2024/11/30 0:45:51

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

了解操作系统

什么是操作系统?

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

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

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

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

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

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

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

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

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

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

 操作系统的基本概念?

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

 在我们计算机的整个结构中,最底层我们称之为 "硬件" 。所谓的硬件就是键盘、显示器、网卡、显卡等各种设备……在底层它们都叫硬件。这些硬件之间的组织方式,我们放到下一章讲解 "冯诺依曼" 再讲解。

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

 在硬件层上还存在着一个软件层,我们称之为 "驱动软件层" 。我们可以通过驱动软件层帮上层实现对硬件的基本访问。每一种硬件都有一种与之匹配的驱动程序。

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

再往上,还有一层软件层,我们一般把它称之为 \textrm{ OS\, kernel }(操作系统内核)

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

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

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

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

什么是操作系统?

我们可以分成 "对上" 和 "对下" 来说明:

  • 对上:给用户提供一个良好的、稳定的、高效的运行环境。
  • 对下:要管理好底层的软硬件资源。

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

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

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

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

❓ 好,操作系统我知道是什么了,那什么是 \textrm{Linux}操作系统呢?

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

我们的操作系统也有不同的种类,\textrm{Windows} 、 \textrm{Linux}\textrm{MacOS} ……

  实际上, \textrm{Linux}操作系统也就是操作系统的一种罢了,

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

目录内容的显示

ls 指令

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

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

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

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

 常用选项:

  •     -a  列出目录下的所有文件,包括以 . 开头的隐含文件。
  •     -d  将目录像文件一样显示,而不是显示其下的文件。如:ls -d 指定目录
  •     - i  输出文件的 i 结点的索引信息。如: ls -ai 指定文件。
  •     -k  以 k 字节的形式表示文件的大小。ls -alk 指定文件。
  •     - l  列出文件的详细信息。
  •     -n  用数字的\textrm{UID,GID} 代替名称。
  •  -F  在每个文件名后附上一个字符以说明该文件的类型。" * " 表示可执行的普通文件, " / "表示目录, " @ " 表示符号链接; " | " 表示 FIFOs; " = " 表示套接字(sockets)。(目录类型识别)。
  • -r   对目录反向排序。
  • -t   以时间排序。
  • -s  在 l 文件名后输入该文件的大小(大小排序,如何找到目录下最大的文件)。
  • -R  列出所有子目录下的文件(递归)。
  • -1   一行只输出一个文件
     

我们来输入个 ls 看看:

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

$ touch mytest.c

 

我们可以用 mkdir 创建出一个目录出来: 

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

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

$ pwd

 

 常用选项:ls -l

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

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

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

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

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

 

Linux 隐藏文件  

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

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

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

① 对文件的内容操作     ② 对文件的属性操作

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

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

 ls -a 选项

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

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

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

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

我们还可以复合使用,比如 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 ,其他的选项目前为止只需要有个印象即可。

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

 目录的跳转操作

引入:Linux 目录结构的本质 

我们刚才已经用过 cd 命令了,现在我们来正式的谈一谈这个命令。

❓ 思考:Linux 入口目录时 / 根目录,请问根目录可以再放一个目录吗?

Linux 的目录结构本质是一个多叉树。所以我们把 / 称为根目录,是路径的起始。

在数据结构的角度去理解:

① 既然是一颗多叉树,每一个子节点既可以是一个目录(再放目录或普通文件,递归式的定义),也可以是一个普通文件。

② 这颗多叉树的叶子节点一定是一个普通文件或者是空目录。

我们一般 "定位" ,是通过路径定位的方式找到文件的。

❓ 思考:为什么我们都是通过路径方式定位文件的呢?

如果我们想找到我们曾经写的 test.c 文件,我们可以从 / 到 home 到 foxny 再到 test.c。

任何一结点,可以有多个子节点。但是任何一个子节点,都只有一个父节点。

所以 test.c 只有一个父节点,即 ayf…… ayf 也只有一个父节点,即 home……

所以当我们定位路径时,反向回推时,这条路径时具有惟一性的。

💡 因为常规的路径定位是具有惟一性的。

绝对路径与相对路径 

 /home/ayf/test.c : Linux 下的 "绝对路径" (惟一性且永远有效)。

 

相对路径:相对于我当前所处的路径。

相对路径往往相对于当前位置,容易失效。而绝对路径是永远有效的!

如果是日常使用,我们推荐相对路径 —— 因为简单。

如果是进行添加配置文件之类的,推荐绝对路径 —— 因为不会出错。

结论:cd 命令后面可以跟上任何以绝对路径或相对路径构建的路径。

 pwd 指令

这个指令我们刚才已经用过了,没有比这个指令还要简单的指令了。

🔨 pwd:显示用户当前所在的目录

$ pwd       # 显示用户当前所在的目录

 cd 指令

我们再讲几个 cd 指令的快捷方式:

$ cd ~        # 跳转到当前用户的家目录   ~: 表示home

 这里的 ~ 就是一个快捷进入我们工作目录的方式。

默认一个用户在登录时,都是处于该用户的家目录中的。

一个普通用户的家目录一般都是在 home 路径下有一个以你名字命名的文件夹。

如果是 root 用户,它会在根目录下的 root 目录下。

$ cd /          # 跳到根目录
$ cd -          # 跳转至上一次我所处的路径

 基本创建操作

touch 指令 

touch [选项]... 文件...

🔨 touch:创建文件

touch 命令参数可更改文档或目录的日期时间,

包括存取时间和更改时间,或者新建一个不存在的文件。

📜 touch 常用选项:

  • -a   或 --time=atime 或 --time=access 或 --time=use :只更改存取时间。
  • -c   或 --no-create :不建立任何文档。
  • -d   使用指定的日期时间,而非现在的时间。
  • -f    此参数将忽略不予处理,仅负责解决 BSD 版本 touch 指令的兼容性问题。
  • -m  或 --time=mtime 或 --time=modify :只更改变动时间。
  • -r    把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
  • -t    使用指定的日期时间,而非现在的时间。
     

本章我们只讲 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:创建目录

📜 mkdir 常用选项:

    -p, --parents  可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。

💭 对于 mkdir 的命令,本章只需要掌握这两个就够了:

mkdir -p ../../..     //创建一串路径

基本删除操作

rmdir 指令:删除空目录 

 rmdir :删除空目录

rmdir [目录名]

 注意!rmdir 只能删除空目录!

rm 指令 

 rm :删除普通文件 

rm [文件名]     # 删除普通文件

 

名字一定要输入正确

如果像删除一个目录我们可以通过 " -r 递归式删除 " 

$ rm -r [目录名]    # 递归删除目录文件

 

 rm -rf 强制删除

rm -rf :强制删除

rm 还有一个选项, -r 表示递归,还可以带一个 f (force,即强迫) :

$ rm -rf [目标]      # 强制删除

有时候我想删一个文件,系统会提示你 "你确认吗?"

 我们带一个 -f,  意思就是说 —— "我非常确认!你不要给我提示了!"

注意事项:不要在 root 下输入: 

# rm -rf /

你的系统有可能会挂掉,即便没有挂,它它会从根目录开始递归把能删的都删了。

(如果你想试,且你现在也没啥文件,可以试试,就算挂掉了,去云服务器后台重启就行)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1318098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子学会C/C++编程等级考试2021年09月(六级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:双端队列 定义一个双端队列,进队操作与普通队列一样,从队尾进入。出队操作既可以从队头,也可以从队尾。编程实现这个数据结构。 时间限制:1000 内存限制:65535输入 第一行输入一个整数t,代表测试数据的组数。 每组数据的…

桌面概率长按键盘无法连续输入问题

问题描述:概率性长按键盘无法连续输入文本 问题定位: 系统按键流程分析 图一 系统按键流程 按键是由X Server接收的,这一点只要明白了X Window的工作机制就不难理解了。X Server在接收到按键后,会转发到相应程序的窗口中。在窗…

海洋可视化大屏,Photoshop源文件

数据大屏通过实时的数据展示,可及时发现数据的变化和异常,以便及时采取措施。现分享海洋动力大数据监控、海洋数据监控系统、科技感海洋监控系统大屏模版的UI源文件,供UI设计师们快速获取PSD源文件完成工作 若需更多 大屏组件,请…

基于linux系统的Tomcat+Mysql+Jdk环境搭建(一)vmare centos7 设置静态ip和连接MobaXterm

特别注意,Windows10以上版本操作系统需要下载安装VMware Workstation Pro16及以上版本,安装方式此处略。 (可忽略 my*** 记录设置的vamare centos7 账号root/aaa 密码:Aa123456 ) 1、命令行和图形界面切换 如果使用的是VMware虚拟机&…

用Java实现根据数据库中的数量,生成年月份+序号递增

在日常开发中,经常会遇到根据年月日和第几号文件生成对应的编号,今天给大家提供一个简单的工具类 public static final Long CODE1L;/*** param select 数据库中数据总数* return*/public static String SubjectNo(Long select){// 在总数的基础上1&…

C#有望成为2023年的编程语言之王

前言 TIOBE 2023年12月编程语言指数头条新闻:C#有望成为2023年的编程语言之王。 TIOBE是什么? 访问地址:https://www.tiobe.com/tiobe-index/ TIOBE是一个编程社区指数,用于衡量不同编程语言的受欢迎程度。TIOBE指数基于全球范围…

t-SNE高维数据可视化实例

t-SNE:高维数据分布可视化 实例1:自动生成一个S形状的三维曲线 实例1结果: 实例1完整代码: import matplotlib.pyplot as plt from sklearn import manifold, datasets """对S型曲线数据的降维和可视化"&q…

根据星历文件实现卫星的动态运行模拟matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 .................................................................................... % …

算法竞赛备赛进阶之树形DP训练

目录 1.树的最长路径 2.树的中心 3.数字转换 4.二叉苹果树 5.战略游戏 6.皇宫守卫 树形DP是一种动态规划方法,主要用于解决树形结构的问题。在树形DP中,通常会使用动态规划的思想来求解最优化问题。其核心在于通过不断地分解问题和优化子问题来解决…

CSS篇之圆角梯形

附上一篇文章&#xff1a;梯形tab按钮-基于clip-path path函数实现 - JSRUN.NET 他这个区别在于&#xff0c;收尾两侧都是直角的&#xff0c;如图 下面这个是圆角&#xff1a; 思路&#xff1a; 代码如下&#xff1a; <template><div class"wrap"><…

Kali Linux安装Xrdp远程桌面工具结合内网穿透实现远程访问Kali桌面

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于&#xff0c;它允许用户从远程位置访问Kali系统&#xff0c;而无需直接物理访…

Lit官方入门示例

陈拓 2023/12/17-2023/12/17 1. 简介 在《用Vite构建Lit项目》 https://blog.csdn.net/chentuo2000/article/details/134831884?spm1001.2014.3001.5501 一文中我们介绍了怎样用Vite构建Lit项目。 本文我们介绍不依赖Vite的Lit入门示例。 我的开发环境还是和上文相同。 …

Vue3+hooks快速接入Lodop打印插件

文章目录 前言一、下载并修改LodopFuncs.js1.1 调整LodopFuncs.js代码&#xff0c; 暴露 getLodop 二、自定义useLodop hooks抽取共用的lodop逻辑CheckLodopIsOkgetPrinterArrprintLabelprintA4Paper 总结 前言 上面文章《Vue快速接入菜鸟打印组件》讲了vue3如何快速集成菜鸟打…

蓝桥杯专题-真题版含答案-【骑士走棋盘】【阿姆斯壮数】【Shell 排序法 - 改良的插入排序】【合并排序法】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

字符迷宫(期末考模拟题)

很有趣的一道题 难点主要在于对于 * 的处理 题目描述的是可以多次匹配相同的字母&#xff0c;这就涉及到两个方面&#xff1a; 一是这个匹配的相同的字母如何储存 二是当你’ * ‘位置递归结束的时候&#xff0c;你该什么时候变回‘ * ’号 这里给出我的思路&#xff0c;如…

索尼(ILCE-7M3)MP4文件只能播放前两分钟修复案例

索尼的ILCE-7M3是一款经典设备&#xff0c;其HEVC编码效果是比较不错的&#xff0c;因此受到很多专业人士的青睐。之前我们说过很多索尼摄像机断电生成RSV文件修复的案例&#xff0c;今天来讲一个特殊的&#xff0c;文件已经正常封装但仅能播放前两分钟多一点的画面。 故障文件…

用23种设计模式打造一个cocos creator的游戏框架----(十六)亨元模式

1、模式标准 模式名称&#xff1a;亨元模式 模式分类&#xff1a;结构型 模式意图&#xff1a;运用共享技术有效地支持大量细粒度的对象 结构图&#xff1a; 适用于&#xff1a; 1、一个应用程序使用了大量的对象. 2、完全由于使用大量的对象&#xff0c;造成很大的存储开…

信号与线性系统预备训练3——MATLAB软件在信号与系统中的应用初步

信号与线性系统预备训练3——MATLAB软件在信号与系统中的应用初步 The Preparatory training3 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、目的 1.熟悉和回顾MATLAB…

MYSQL练题笔记-高级字符串函数 / 正则表达式 / 子句-简单3题

这个系列先写了三题&#xff0c;比较简单写在一起。 1.修复表中的名字相关的表和题目如下 看题目就知道是有关字符串函数的&#xff0c;于是在书里查询相关的函数&#xff0c;如下图&#xff0c;但是没有完全对口的函数&#xff0c;所以我还是去百度了。 然后发现结合上面的4个…

C#教程(三):字符串的各种用法

在C#中&#xff0c;字符串&#xff08;string 类型&#xff09;是一种常用的数据类型&#xff0c;用于存储和操作文本数据。以下是一些C#中字符串的常见用法 1、输出任意的字符串长度 代码 #region 输出任意的字符串长度 Console.WriteLine("请输入你心中想到的名字&…