🔥小叶-duck个人主页

❄️个人专栏《Data-Structure-Learning》《C++入门到进阶&自我学习过程记录》
《Linux操作系统从入门到实践》
《算法题讲解指南》--优选算法
《算法题讲解指南》--递归、搜索与回溯算法
《算法题讲解指南》--动态规划算法

未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游


目录

一、Linux前言

  1、什么是Linux?

    1.1 Linux的起源:

    1.2 思考:为什么Linux操作系统普遍不带图形化界面?

    1.3 为什么学习Linux?

1.4 利用XShell远程登陆Linux

    1.4.1 云服务器购买

    1.4.2 修改密码

    1.4.3 安装Xshell

二、Linux基本指令

1. ls命令

  1.1 原理:Linux怎么 "识别" 文件

  1.2 实操:3个高频用法

2、pwd命令

    2.1 目录的本质

    2.2 tree(补充命令)

      2.2.1 下载

      2.2.2 命令展示

3、cd命令

  3.1 原理:Linux怎么 "找路" ?

  3.2 实操:5 个高频场景

4、touch命令

  4.1 原理:Linux 文件的 “时间密码”

    4.1.1 stat命令

5、mkdir命令

  5.1 原理:Linux 怎么 “生成” 文件夹?

  5.2 实操:3 个用法,从 “单文件夹” 到 “多层目录”

文件类型区分特点:

常见文件类型标识:

6、rm命令&&rmdir命令

  6.1 rm命令

    6.1.1 原理:Linux 怎么 “删除” 文件?

    6.1.2 实操:2 个安全用法

  6.2 rmdir命令

    6.2.1 实操

结束语


一、Linux前言

  1、什么是Linux?

    1.1 Linux的起源:

      1991 年,芬兰赫尔辛基大学的学生林纳斯・托瓦兹(Linus Torvalds) 因不满 Minix 的限制,在个人计算机(Intel 386)上着手开发一个新的操作系统内核:

  • 最初动机:他只是想为自己的 PC 打造一个 “能自由使用、可修改” 的操作系统,用于学习和运行程序;
  • 核心理念:借鉴 UNIX 的设计思想(如多任务、分层架构),但完全从零编写代码,确保自由开源;
  • 首次公开:1991 年 8 月 25 日,林纳斯在 Minix 新闻组发帖,宣布完成首个版本的内核,并邀请开发者参与改进:“我正在开发一个(自由的)操作系统,仅供 386/486 AT 兼容机使用…… 欢迎所有感兴趣的人提出意见,帮助改进。”

Linux源代码:Linux源代码

      与我们常见的Windows,Android,IOS这些面向普通大众带图形化界面不同的是,Linux操作系统一般为大黑屏,由命令行操作(就和Windows上的cmd类似):

    1.2 思考:为什么Linux操作系统普遍不带图形化界面?

      因为Linux不面向普通用户,而是开发者,特别是对于服务器开发,这是最重要的现实原因

  • 历史传承:Linux的设计深受Unix操作系统的影响。Unix在上世纪70年代诞生时,计算机非常昂贵,通常由多个用户通过终端(键盘和显示器)连接到一台大型主机上工作。在这种环境下,命令行界面最高效、最稳定的交互方式。所有的操作都只通过键盘输入命令完成,不需要为图形界面消耗宝贵的主机资源。Linux继承了这种高效、稳定的基因。
  • 资源效率: 对于一台服务器来说,它的任务就是7x24小时高效处理网络请求。CPU、内存等资源是宝贵的。运行一个图形界面会消耗大量的内存和CPU周期,而这些资源本可以用来处理业务。无图形界面的Linux可以将所有硬件资源都投入到核心服务中。

  • 稳定性与安全性: 图形界面系统代码量巨大,远比稳定的内核更容易出问题(程序崩溃、卡顿)或存在安全漏洞。对于需要长时间运行的服务器,任何图形界面相关的问题都可能导致服务不可用。移除图形界面,就减少了系统的攻击面和潜在的故障点。

    1.3 为什么学习Linux?

      我们桌面端几乎只用Windows和macOS,这两个桌面端操作系统几乎占据了百分之99的份额,那么为什么还要学习Linux?
      因为Windows和macOS面向普通用户,大众是不需要做开发的,但是对于我们程序员,在某些领域这些操作系统是达不到很好的效果的,例如服务器领域。

Linux的发展现状:

  • Linux在服务器领域的发展
    Linux在服务器领域的发展随着开源软件在世界范围内影响力日益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、金融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成长性以及国家相关政策的扶持力度,Linux服务器产品一定能够冲击更大的服务器市场。
    据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额,同时,Linux在服务器场
    的迅速崛起,已经引起全球IT产业的高度关注,并以强劲的势头成为服务器操作系统领域中的中坚力量。
  • Linux在桌面领域的发展
    近年来,特别在国内市场,Linux桌面操作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得到了广泛应用。另外SUSE、Ubuntu也相继推出了基于Linux的桌面系统,特别是UbuntuLinux,已经积累了大量社区用户。但是,从系统的整体功能、性能来看,Linux桌面系统与Windows系列相比还有一定的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。
  • Linux在移动嵌入式领域的发展
    Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面也得到广泛应用,目前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上的。目前,Android已经成为全球最流行的智能手机操作系统,据2015年权威部门最新统计,Android操作系统的全球市场份额已达84.6%。
    此外,思科在网络防火墙和路由器也使用了定制的Linux,阿里云也开发了一套基于Linux的作
    系统“YunOS”,可用于智能手机、平板电脑和网络电视;常见的数字视频录像机、舞台灯光控
    制系统等都在逐渐采用定制版本的Linux来实现,而这一切均归功与Linux与开源的力量。
  • Linux在云计算/大数据领域的发展
    互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展,云计算、大数据作为一个基于开源软件的平台,Linux占据了核心优势;据Linux基金会的研究,86%的企业已经使用
    Linux操作系统进行云计算、大数据平台的构建,目前,Linux已开始取代Unix成为最受青睐的云计算、大数据平台操作系统。

1.4 利用XShell远程登陆Linux

    1.4.1 云服务器购买

      我们一般使用Linux系统,不是在本地安装,而是使用云服务器,也是进入企业后的真实环境。
      很多互联网大厂的服务器机房资源过剩,为了充分利用,可以远程给我们用户使用,当然代价是得交钱。但一般学生优惠一年也就100不到,常见的云服务器厂商有:腾讯云,阿里云,华为云等等。
      我们可以前往各个云服务厂商查看轻量级服务器,货比三家,哪个便宜买哪个。

      对于手头比较紧的朋友网上也有各云服务器厂商的免费使用一段时间的途径,大家可以在网上进行查找,先利用免费的使用期限进行最初的学习,后面再消费购买云服务器也可以。

    1.4.2 修改密码

      购买流程我就不演示了,大家可以自己下去试试。,购买完后我们就可以在【控制台】可以查看已经购买的云服务器:

      这个【杭州】是购买云服务器的时候可以自己选的位置,选离自己所在地近的就行。

      我们初步关注的有两点:密码和操作系统。密码不必多说,当你登陆Linux系统时(最开始是root)需要输入密码,这个密码就是你在腾讯云这里设置的密码。所以我们在购买之后要一定要记得重置一下密码
      至于操作系统,我们用的已经是Linux了,为什么还要安装一个操作系统?
      Linux上的操作系统,就像安卓之上的MIUI,ColorOs,OriginOS等等,熟悉手机的朋友都知道,这些都是基于安卓深度定制的,Linux上的也是如此,常见的有:Centos,Ubuntu等。

      企业开发一般使用Centos,但Centos已经停更了。前期我们的学习也会使用Centos操作系统,到后面我们会重装成Ubuntu再进行后续的学习。

    1.4.3 安装Xshell

下载网址:XShell

      双击桌面图标,会弹出两个对话框:

      我们把如图所示的这个小的对话框叉掉,并且点击上面的新建:

      填完后先不要急着进行连接,我们可以先点击左边的“用户身份验证”

      看到welcome字眼就说明已经成功将云服务器与xshell进行连接了。

二、Linux基本指令

1. ls命令

语法:ls[选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信
息。

常用选项:

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

  1.1 原理:Linux怎么 "识别" 文件

      每个文件/文件夹在Linux下都有自己的 "属性标签"。文件是由文件的内容和文件的属性两个部分组成的(所有空文件/文件夹也是占磁盘空间的),我们学习和识别文件,本质上其实就是对内容或者属性进行操作修改。
      ls的本质是 “读取当前目录的文件列表”,再根据你加的参数 “筛选并展示标签信息”:比如不加参数时,只显示 “文件名 / 文件夹名”;加-l参数时,会显示完整的 “属性标签”;加-a参数时,会显示隐藏文件(Linux 里以.开头的文件是隐藏文件,如 .hello)。

文件  =  文件的内容  +  文件的属性

  1.2 实操:3个高频用法

指令 作用 示例输出(以 /root 为例,提前添加过一些目录了)
ls 显示非隐藏的文件 / 文件夹名 dir
ls -l 显示详细属性(长格式 drwxr-xr-x 2 root root 4096 Sep 27 12:07 dir
ls -a 显示所有文件(含隐藏文件 .  ..  .hello

     --这里的 . 是标识当前路径.. 标识上级路径,后面还会讲的。

注意

  • 选项可以带多个:例如 ls -l -a,也可以 ls -l,也可以 ls -a
  • 选项乱序不影响最终结果:例如 ls -l -a 和 ls -a -l 的性质是一样的
  • 选项前要带空格,不可粘连在一起:例如不可 ls-l-a

      当然我们一般不会去用 ls -l,毕竟要多打一个 -l,我们一般用 llll 就相当于就是 ls -l,后面我们讲解 alias 命令的时候还会对 ll 进行讲解。

2、pwd命令

语法:pwd
功能:显示用户当前所在的目录

    2.1 目录的本质

      Linux的文件系统就像是一颗树一样,根目录 / 是树根,其它文件都是它分出去的。而绝对路径就是从树根开始到你当前位置的完整路线。一般来说,这棵树的叶子节点就是普通文件或者是空目录,其它的结点都可以称为路上结点。

      pwd的使用逻辑很简单:它会读取系统记录的 “当前工作目录标识符”,再把这个标识符对应的 “完整路径字符串” 输出到终端,相当于给你实时标注 “坐标”。
      根目录之下有很多个子目录,而这些子目录之下又有多个目录,以此往复,而目录的终点便是普通文件或者空目录。

      这样空洞的讲解可能大家还是会有点不清楚,而linux有一个命令可以让我们非常清晰的将该目录下的所有文件展示出来 —— tree

    2.2 tree(补充命令)

语法:tree [目录]
功能:将该目录下的所有文件以树状的形式打印

      2.2.1 下载

      可是当我们直接输入 tree 命令的时候却是这种结果,这是为什么呢?
      因为我们没有对 tree 进行下载,下面是下载代码,大家可以先记一下,后续我们还会对这个下载命令进行讲解:

Centos 7下载指令

Ubuntu下载指令

      因为我配置的云服务器是Centos的,所以Ubuntu的下载指令我就直接呈现在代码里面了:

apt install -y tree

Centos下载演示

      2.2.2 命令展示

      tree .(当前路径,以树形结构呈现)

tree /(从根目录开始呈现)

tree 4.21(查看 4.21 下的路径,并且以树形结构呈现)

3、cd命令

语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下

  3.1 原理:Linux怎么 "找路" ?

cd可以识别两种路径:

  • 绝对路径:从根目录/开始的完整路径(比如/root/dir),相当于 “从市中心出发,报完整门牌号找地方”;
  • 相对路径:从当前目录出发的 “短途路线”,相当于 “从你现在站的地方,往左转 / 往前走”—— 比如当前在/root,想进dir,直接用cd ./dir(相对路径),比写绝对路径更省事(这里可能还不是很看的出来,学到后面大家体会会比较深)。
内容分类 具体说明
Linux 文件系统结构 磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件
普通文件与目录的节点特性 普通文件一定是目录树的叶子节点;目录可能是叶子(空目录),也可能是路上节点
路径存在的意义 树状组织方式是为保证快速定位查找到指定文件,且任何一个节点只有一个父节点,从根目录开始定位指定文件,路径具有唯一性
绝对路径 一般从 / 开始,不依赖其他目录的定位文件的方式;不会随着用户的路径变化而丧失唯一性,在特定服务的配置文件中经常被使用
相对路径 相对于当前用户所处目录,定位文件的路径方式;因为便捷性,在命令行中使用较多

另外,Linux 里有两个非常重要的 “特殊符号” 帮你简化路径:

  • .:代表 “当前目录”(比如cd . .就是 “留在原地”,几乎不用,但理解很重要);
  • ..:代表 “上一级目录”(比如当前在 /root,cd .. 就会回到 / )。

  3.2 实操:5 个高频场景

场景 指令 说明
跳转到绝对路径目录 cd /home/user/Documents 不管当前在哪,直接跳转到目标绝对路径
跳转到当前目录的子目录 cd ./Music 当前在/home/user,直接进Music子目录
回到上一级目录 cd .. 从 “子目录” 退回 “父目录”
回到自己的 “家目录” cd ~(波浪号) 不管当前在哪,一键回到 /home/你的用户名
回到上一次所在的目录 cd -(减号) 比如从 A 目录跳到 B 目录,cd -能跳回 A 目录

      上述表格借鉴了一下资料,后面的演示是使用的root账户,可能有点不同,但是使用方式上来说是一样的。

      补充:Linux上的家目录就像是我们windows上的账户,每个账户都会有自己的桌面。在这里再提一句,我们的电脑上虽然有c盘d盘,但是其实就是只有一个磁盘的,所谓的这些都是我们进行分盘操作得到的,本质上跟文件夹一样。

4、touch命令

语法:touch[选项] 文件名(或者目录/文件名)
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件

      提到 touch,很多人只知道 “新建空文件”,但它的真实作用比这更实用 —— 它的核心是修改文件的 “时间戳”,如果目标文件不存在,才会自动新建一个空文件。

  4.1 原理:Linux 文件的 “时间密码”

      每个文件在 Linux 里有 3 个关键 “时间戳”,这是 touch 的核心操作对象:

    4.1.1 stat命令

      我们使用指令 stat 可以查看到这些信息 :

      现在我们不关心其他的属性,只关心这三个东西:Access,Modify和Change

Access(访问时间)

  • 缩写: atime

  • 定义: 文件中的数据最后被读取的时间。

  • 触发操作: 当你使用命令查看文件内容(如 cat、less、head)或者使用编辑器打开文件(但尚未保存)时,这个时间就会更新。

  • 简单记忆: 记录“读”的动作。

Modify和Change翻译过来都是修改,那么有什么区别?

 Modify (修改时间)

  • 缩写: mtime

  • 定义: 文件的内容最后被修改的时间。

  • 触发操作: 当你编辑文件并保存(改变了文件里的数据),或者通过重定向向文件写入新内容时,这个时间就会更新。

  • 简单记忆: 记录“写内容”的动作。

Change (状态改变时间)

  • 缩写: ctime

  • 定义: 文件的属性(也称为元数据或状态)最后被改变的时间。

  • 触发操作:

    • 当你修改文件内容时(虽然内容是数据,但文件大小这个属性变了,所以 ctime 也会变)。

    • 当你修改文件的权限(chmod)、修改文件的属主(chown)、或者重命名/移动文件(mv)时,即使文件内容没变,ctime 也会更新

  • 简单记忆: 记录“改属性”或“改状态”的动作。

      简单来说是修改了文件的内容 Modify 和 Change 就会更新,而修改了文件的属性只有 Change 更新

5、mkdir命令

语法:mkdir [选项] dirname...
功能:在当前目录下创建一个名为“dirname”的目录(文件夹)

常用选项

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

  5.1 原理:Linux 怎么 “生成” 文件夹?

      在 Linux 里,“文件夹” 本质是一种 “特殊的文件”—— 它不存具体内容,只存 “里面包含的文件 / 文件夹的索引”。
      mkdir 的工作逻辑是:根据你指定的路径,在对应的位置 “创建一个新的索引文件”,并给这个文件标记 “目录属性”(让系统知道这是文件夹,不是普通文件)。如果路径里的 “上层目录不存在”,默认会报错 —— 这时候就需要用 -p 参数 “强制创建多层目录”。

  5.2 实操:3 个用法,从 “单文件夹” 到 “多层目录”

场景 指令 效果
在当前目录新建 1 个文件夹 mkdir Test 当前目录下多了一个叫 Test 的文件夹
在当前目录连续新建多个文件夹 mkdir Test1 Test2 Test3 当前目录下多了 Test1 Test2 Test3 三个文件夹
新建多层嵌套文件夹 mkdir -p A/B/C 一次性创建A文件夹,以及A里的B、B里的C(如果不加-p,会报错)

补充:

文件类型区分特点:

      Linux 区分文件类型不依赖文件后缀(并非完全不能用后缀,只是系统本身不以此为核心判断依据),而是通过文件属性来识别。这里注意一下我们之后在操作系统 之下用gcc编写代码还是看文件后缀的。

常见文件类型标识:
  • 目录:以 d 开头,例如示例中的 dir,用于存放其他文件或子目录。
  • 普通文件:以 - 开头,涵盖可执行程序、文本文件、代码文件以及动静态库等多种类型。

6、rm命令&&rmdir命令

  6.1 rm命令

rm命令可以同时删除文件或目录
语法:rm [-f/-i/-r/-v] [dirName/dir]
适用对象:所有使用者
功能:删除文件或目录

常用选项:
      -f:即使文件属性为只读(即写保护),亦直接删除
      -i:删除前逐一询问确认
      -r:删除目录及其下所有文件

      rm是 Linux 里 “最危险也最常用” 的指令 —— 它的全称是 “Remove”(删除),核心作用是删除文件或文件夹,但要注意:Linux 没有 “回收站”,用rm删的文件几乎无法恢复,一定要谨慎!

    6.1.1 原理:Linux 怎么 “删除” 文件?

      和 Windows  不同,Linux 删除文件时,不是 “直接清空内容”,而是 “删除文件的索引”—— 相当于把 “文件在目录树里的名字标签” 撕掉,让系统找不到这个文件。如果是删除文件夹(需要 -r参数),则是 “先删除文件夹里所有文件的索引,再删除文件夹本身的索引”。

      另外,rm -f 选项的 “强制删除” 逻辑:如果文件有 “只读权限”(默认删除会提示 “是否删除只读文件”,用这个就能跳过提示,直接删除 —— 这个参数方便,但也更危险,一定要确认文件可以删再用。

    6.1.2 实操:2 个安全用法
场景 指令 注意事项
删除 1 个文件 rm note.txt 删前用ls确认文件存在,且是你要删的
删除文件夹(含内容) rm -r Test 必须加 -r(递归删除),否则删不了文件夹;如果想强制删(跳过提示),用 rm -rf,但千万不要用rm-rf /(删根目录,系统直接崩溃)

  6.2 rmdir命令

rmdir是一个与mkdir相对应的命令,mkdir是建立目录,而rmdir是删除命令

语法:rmdir [-p][dirName]

适用对象:具有当前目录操作权限的所有使用者

功能:删除空目录(非空删不掉)。

常用选项:
      -p:当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。

    6.2.1 实操

结束语

      到此,linux的历史背景介绍以及linux其中6个常见命令就讲解完了,后续我们还会对linux的更多命令进行讲解。其实 Linux 基础指令的核心不是 “死记硬背”,而是 “理解原理 + 多练”—— 刚开始可能会输错,但敲个 10 次、20 次,你就会发现:这些指令就像 “电脑的快捷键”,熟了之后比图形界面还快!希望对大家学习Linux能有所收获!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐