Linux从入门到入土①(Linux概述、文件系统、VIM编辑器)

2022-12-10 17:17:24 浏览数 (1)

@TOC

Linux是什么?

Linux是一种操作系统(OS),就比如我们平常生活中的:

  • Windows
  • macOS
在这里插入图片描述在这里插入图片描述

tips:企鹅名叫Tux,在英文中有晚礼服的意思

Linux的全称是GNU/Linux,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统,用C语言编写。严格来说Linux只是一个内核(Kernel),提供了操作系统当中最底层的硬件控制与资源管理架构。核心、核心工具结合GNU丰富的软件构成了一个完整的、功能强大的操作系统。大家使用的各种Linux发行版本是Linux内核配以GNU丰富的应用的软件。

Linux的诞生

林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds,1969年12月28日- )也就是Linux之父:

  • 大学期间对Unix产生兴趣
  • 后来基于Minix(Unix的变种)进行开发
  • 随后确定开发一个类Unix操作系统内核
  • 1991年9月,完成内核的0.01版本,命名为Linux。并将代码完全开源

提到Linux就要提到Unix,Unix的创始人之一(下图右边那个)为了开发出这套系统创造了C语言(本来应该叫new B 语言)

在这里插入图片描述在这里插入图片描述

冷知识:

安德鲁除了开发Minix,他还是《计算机网络》的作者,同时他还是一个天体物理学家

林纳斯还开发了大名鼎鼎的的版本控制工具Git

BSD协议:BSD协议允许作者使用该协议下的资源,将其并入私人版本的软件,该软件可使用闭源软件协议发布。【保证开发者的自由】

GPL协议:GNU通用公共许可证。【保证使用者的自由】

GNU/Linux

GNU是一个自由的操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU's Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。

作为操作系统,GNU的发展仍未完成,其中最大的问题是具有完备功能的内核尚未被开发成功。GNU的内核,称为Hurd,是自由软件基金会发展的重点,但是其发展尚未成熟。在实际使用上,多半使用Linux内核、FreeBSD等替代方案,作为系统核心,其中主要的操作系统是Linux的发行版。Linux操作系统包涵了Linux内核与其他自由软件项目中的GNU组件和软件,可以被称为GNU/Linux

在这里插入图片描述在这里插入图片描述

==基于同一个Linux内核,在外围添加上不同的shell和不同的外围应用层构成不同的Linux操作系统==

我们常说的给电脑装Linux系统,是指广义的Linux

Linux的内核最小可以小到几百kb

我们在桌面上右键打开的终端并不是真正意义上的shell控制台,他只能算桌面环境的一部分,我们可以说它是真正的shell控制台的仿真包:

在这里插入图片描述在这里插入图片描述

我们是可以进入真正的shell的,根据不同的发行版本有着不一样的操作:

①如果你使用的是Centos,那么Ctrl Alt F2~F6是进入控制台界面,Ctrl Alt F1是进入图形界面

②如果你使用的是Ubuntu,那么Ctrl Alt F1~F6是进入控制台界面,Ctrl Alt F7是进入控制台界面

在这里插入图片描述在这里插入图片描述

Linux的发行版

在这里插入图片描述在这里插入图片描述

我们国内也有一些Linux的发行版,例如:

  • 红旗Linux
  • BluePoint蓝点
  • Deepin
  • ·······

我们熟知的移动操作系统,Android、鸿蒙其使用的也是Linux的内核

Linux和Windows的区别

在这里插入图片描述在这里插入图片描述

Linux的优势

  • 合法升级到最新版本却不需要花一分钱。
  • 一个命令就可以安装二十个程序。
  • 以自由分发该操作系统及其他运行其上的软件而不会违犯法律,政治或伦理道德,因为它本身就提倡这么做的。
  • 无需杀毒软件,反广告/间谍防护软件,甚至可以数月不用重启机器,因为它具有独特的内存管理方式。
  • 从来不用磁盘碎片整理。
  • 尝试软件,觉得不喜欢,就删掉他,而且知道他不会在什么注册表里留下一些垃圾可能导致把我的系统搞慢。而比较的windows呢?时间长了得重装系统!
  • 合法自定义任何我想要的东西,包括我最喜爱的程序。我甚至可以跟踪软件开发者并向他们问问题,提意见,如果我愿意的话,也可以参与到真正的软件设计和开发进程中去。而相比的windows可能告你侵权。
  • 硬件可以使用超过五年而无须更换。
  • 使用几乎所有的硬件,因为系统已经自带了驱动。

Linux的内核组成

Linux内核主要由5个模块构成:

  • 内存管理模块:内存管理主要完成的是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子系统对内存分配的请求。
  • 进程管理模块:进程管理主要控制系统进程对CPU的访问。
  • 进程间通信模块:进程间通信主要用于控制不同进程之间在用户空间的同步、数据共享和交换。
  • 文件系统模块:支持对外部设备的驱动和存储。
  • 网络接口模块:网络接口提供了对各种网络标准的实现和各种网络硬件的支持。

Linux版本

==Linux的内核版本:==

代码语言:txt复制
major.minor.patch-build.desc 
  • major:主版本号,有结构性变化时变更
  • minor:次版本号,新增功能时发生变化
  • patch-build:释出版本-修改版本
  • desc:当前版本的特殊信息,也可省略

例:3.10.0-693.el7.x86_64

3.0版本前,此版本奇数表示开发版,偶数表示稳定版。3.0版本后取消了这种编号。分为主线版本和长期维护版本。主线版本开发完毕后会往下一个主线版本进行。旧的版本会结束开发或保持维护。

==发行版和内核版本不一样:==

例如:CentOS-7-x86_64-DVD-2003.iso

64位 DVD 版本 20年3月

Linux文件系统

我们打开文件系统就会发现,Linux是没有盘符的,这是与windows非常不一样的地方。Linux的大大小小各种发行版本其文件就够相差无几。

==在Linux中一切皆文件==

“一切皆文件”指的是对所有文件(目录、字符设备、块设备、套接字、打印机、进程、线程、管道等)操作,读写都可用fopen()/fclose()/fwrite()/fread()等函数进行处理。屏蔽了硬件的区别,所有设备都抽象成文件,提供统一的接口给用户。虽然类型各不相同,但是对其提供的却是同一套操作界面

接下来我们来熟悉一下Linux的文件目录结构。如果我们将文件之间的关系用线段进行表示,会发现呈现一个树状结构(如果是windows那就是多棵树,因为有C盘、D盘等等):

在Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(Filesystem

Hierarchy Standard,FHS)采用树形结构来存放文件(称为目录树)

==目录树的特点:==

①目录树的起点始终为根目录(/)

②目录不仅能够使用本地的文件系统,还能使用网络上的文件系统

③每一个文件在此目录树中的文件名都是独一无二的

在这里插入图片描述在这里插入图片描述

我们发现 Linux 的一切资源都挂载在 / 节点下,所以我们一般称其为根节点

  • /bin:Binary(二进制)的缩写,也就是说机器码,该目录存放着最经常使用的命令(可以直接使用)。
  • /boot: 启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)
  • /dev : Device(设备)的缩写, 存放的是外部设备(访问设备的方式和访问文件的方式是相同的)。
  • /etc: 用来存放所有的系统管理所需要的配置文件和子目录。
  • /home:用户的主目录。每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。(root用户不在里面,其自成一个文件夹)
  • /lib:lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。(不要动)
  • /lost found:一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的一些文件)
  • /media:系统会自动识别一些设备,例如U盘、光驱等等,当识别后,会把识别的设备挂载到这个目录下。
  • /mnt:供用户临时挂载别的文件系统,我们可以将光驱挂载在该目录上,然后进入该目录就可以查看光驱里的内容了。 (把一些本地的文件挂载在这个文件下)
  • /opt:opt 是 optional(可选) 的缩写,主机额外安装软件所摆放的目录。比如安装一个 Oracle 数据库就可以放到这个目录下。默认是空的。
  • /proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root:系统管理员,也称作超级权限者的用户主目录。
  • /sbin:s 就是 super user 的意思,这里存放的是系统管理员使用的系统管理程序。
  • /srv:服务启动之后需要提取的数据。(没有它系统的服务启动不起来)
  • /sys:存放硬件相关的信息。这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
  • /tmp:tmp 是 temporary(临时) 的缩写,用来存放临时文件。
  • /usr:用户的应用程序和文件都放在这个目录下,类似于 Windows 下的 program files 目录。
    • /bin: 系统用户使用的应用程序。
    • /sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
    • /src: 内核源代码默认的放置目录。
  • /var:存放着在不断扩充着的东西,一般将那些经常被修改的目录放在这个目录下。包括各种日志文件。
  • /run:一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
  • /www: 存放服务器网站相关的资源,环境,网站的项目

在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

值得提出的是 /bin、/usr/bin 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

而home,opt,tmp这几个目录可以随意使用。(var目录的影响也不大)

注意:Linux里的路径是以斜杠/划分的,而windows中是以反斜杠划分的(==易于转义字符发生冲突==)

在这里插入图片描述在这里插入图片描述

像这种有箭头的文件夹,说明它自身并不在这里,它只是一个链接:

在这里插入图片描述在这里插入图片描述

有点类似与windows中的快捷方式那种感觉

文件类型

  • 普通文件:最常用的一类文件,其特点是不包含文件系统的结构信息。通常用户所接触到的文件,如图形文件、数据文件、文档文件等都属于这种文件。包括文本文件、数据文件、二进制文件
  • 目录文件:用于存放文件名及其相关信息的文件。是内核组织文件系统的基本节点。
  • 符号链接文件:是一种特殊文件,实际上是指向一个真实存在的文件链接,类似于Windows下的快捷方式。
  • 设备文件:
    • 字符设备文件:允许I/O传送任意大小的数据,代表终端、打印机及鼠标等,类型为 c
  • 块设备文件:存储数据以供系统存取的设备,典型设备是硬盘, 类型为b
  • 管道文件:一种特殊文件,主要用于不同进程间的信息传递,Linux对管道操作与文件相同
在这里插入图片描述在这里插入图片描述

Linux文件拓展名

与Windows不同,Linux系统中文件的扩展名是没有意义的。一个文件能否执行取决 于 是 否 拥 有 “x” 权 限 。 扩 展 名 仅 仅 用 来 了 解 文 件 是 什 么 , 比如

  • .sh
  • .tar
  • .gz
  • .html

Linux文件命名规则

  • 名字长度:允许1-256字符
  • 文件名的字符包括:字母、数字、.(点)、_(下划线)和-(连字符)。

有些转意字符在 Linux 的命令解释器中有特殊的含义。?、*、$、&、!、|、、[]、{}、()等等。在文件名中应尽量避免使用这些字符。

以‘.’开头的文件为隐藏文件。/ 既可代表目录树的根也可作为路径名中的分隔

符(类似DOS下的 ),因此 / 不能出现在文件名中。

  • ==文件名区分大小写==

硬链接和符号链接

为了避免同样的文件在系统中被不必要地多次复制,可以通过创建文件链接,使得各个用户在自己方便的位置存取同一个文件,实现文件的共享

==硬链接==

  • 含义:是一个文件的一个或多个文件名,也就是把文件名和计算机文件系统使用的节点号链接起来。
  • 格式:ln 源文件 创建的目标链接文件
  • 限制:不能对目录文件做硬链接;不能在不同的文件系统之间做硬链接。
  • 特点:
    • 创建的硬链接文件和源文件节点号相同。
    • 创建的硬链接文件命名可以和源文件名不同。
    • 源文件删除了,而链接文件仍具有原来特性。
    • 创建的硬链接文件属性和源文件相同。
    • 更改源文件或链接文件属性,则全部更改
代码语言:shell复制
$ ln linktest linktest.hard
$ ls -l linktest linktest.hard
-rw-rw-rw- 2 kc kermit 17935 Dec 12 18:07 chapt0
-rw-rw-rw- 2 kc kermit 17935 Dec 12 18:07 intro 

$ ls -i linktest linktest.hard
13210 linktest
13210 linktest.hard
linktest与linktest.hard同时存在时,地位完全平等
删linktest文件,则linktest.hard仍存在但link数减1

==符号链接(软链接)==

  • 含义:软链接又叫符号链接,是将一个路径名链接到一个文件上,类似于Windows系统中的快捷方式。
  • 格式: ln –s 源文件 创建的目标链接文件
  • 特点:
    • 软链接是一个新文件,它与目标文件有不同的inode;
    • 软链接可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接;
    • 删除源文件或目录时,不会删除链接,但链接失效;
    • 软链接的大小是其链接文件的路径名中的字节数。
    • 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。
代码语言:shell复制
$ ln -s linktest linktest.soft
$ ls -l linktest. soft
lrwxrwxrwx 1 guest other 8 Jul 26 16:57 linktest.soft->linktest
类型为l,大小为8字节,文件中只存放linktest字符串
文件的最后一次写时间以后不再变化
一旦建立了符号连接,删除操作删除的是符号连接文件,其它所有操
作都将访问符号连接所引用的文件

文件系统与目录树的关系

硬盘需要经过分区格式化挂载才能使用。

  • 分区:硬盘分区是指将硬盘的整体存储空间划分成多个独立的区域,分别用来安装操作系统、安装应用程序以及存储数据文件等。
  • 格式化:磁盘分区完毕后需要进行格式化,之后操作系统才能够使用这个文件系统。每种操作系统所设定的文件属性、权限并不相同,为了存放这些文件所需的数据,需要对分区槽进行格式化,成为操作系统能够利用的文件系统类型。
  • 挂载:挂载是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下,进入该目录就可以读取该分区槽。
在这里插入图片描述在这里插入图片描述

每个文件都会占用一个inode。

  • 对于目录,inode存储属性、权限以及分配的data block号,而data block存储的是文件名与该文件对应的inode号。
  • 对于普通文件,inode存储属性、权限以及分配的一组data block 号

说到这又有了一个新的问题:什么是inode?

要理解inode是什么,我们首先得了解硬盘,文件数据是储存在硬盘上的,物理上的原理我们这里就不做讨论了。==硬盘的最小存储单位叫做扇区。每个扇区存储512字节,而连续的8个扇区组成了一个块(block),大小为4kb。文件数据都存储在块中,为了能够方便找到存储数据的位置我们还必须找到一个地方存储文件的属性,这种存储文具属性信息的区域叫做inode(索引节点)==

node包含文件的属性信息有以下内容:

  • 文件的字节数
  • 文件拥有者的id
  • 文件所属组id
  • 文件的读写执行权限
  • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动时间,atime指文件上一次打开时间。
  • 链接数,既有多少个文件指向这个inode。
  • 文件数据块的位置。

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘划分为两个区域。一个是数据区,存放文件数据,另一个是inode区(inode table),存放inode所包含的信息。 每个inode节点的大小,一般是128字节或者256字节。inode节点的总数。在格式化时就给定,一般是每1kb或者每2kb就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小就会达到128MB。

每个inode都有一个号码inode_num,操作系统用inode号码来识别不同的文件。

linux系统内部不使用文件名,而使用inode号码来识别文件,对于系统来说,文件名只是inode号码便于识别的别称,表面上,用户通过文件名,打开文件。实际上是系统找到这个文件名对应的inode号码;然后通过inode号码获取inode信息最后,根据inode信息,找到文件数据所在的块,读出数据。

于是我们可以知道目录树的读取方式:从根目录的inode逐层向下访问

例如:访问/etc/passwd

  1. 通过挂载点信息找到根目录的inode,查看inode中的权限是否可读取data block。
  2. 从data block中找到etc目录的inode,查看权限,读取etc的data block。
  3. 从etc的data block中找到passwd的inode,查看权限,读取passwd内容

VI / VIM编辑器

VI / VIM是什么

VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。

VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。

Linux下如何使用中文输入法:

①inputMethod中选择pinyin

②按super space即可切换输入法

普通模式

以 vi 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、粘贴』来处理你的文件数据。

常用语法:

在这里插入图片描述在这里插入图片描述

w就代表选取一个单词

^代表操作到行头

$代表操作到行尾

在这里插入图片描述在这里插入图片描述

编辑模式

编辑模式较为简单,与我们使用windows时差不多。

在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的!要等到你按下『i, I, o, O, a, A』等任何一个字母之后才会进入编辑模式。

这么多按键都可以进入编辑模式,那么他们有什么区别呢?

在这里插入图片描述在这里插入图片描述

注意了!通常在Linux中,按下这些按键时,在画面的左下方会出现『INSERT或REPLACE』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。

在命令模式下按下i就进入了输入模式。

在编辑模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到普通模式

有一些大写字母命令按Shift 字母,也可以实现

指令模式

在一般模式当中,输入『 : / ?』3个中的任何一个按钮,就可以将光标移动到最底下那一行。

在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的

常用语法:

在这里插入图片描述在这里插入图片描述

替换类:

在这里插入图片描述在这里插入图片描述

打开文档时如果看到~,代表没有内容的意思:

在这里插入图片描述在这里插入图片描述

模式间转换

在这里插入图片描述在这里插入图片描述

以上涉及的是有关vim的常用指令,如果想要了解得更加全面,请参考:

Linux vi/vim

VI的暂存文件

vi编辑文件时,会在编辑文件所在的文件夹下生成.filename.swap。 记录了对文件的操作。若vi编辑器非正常退出、掉线,则可用该文件进行救援。下次编辑该文件将会出现若干提示:

  • Oopen Read-only:以只读方式打开,可以多人同时查看
  • Edit anyway:正常方式打开文件,但不会载入暂存文件,可能出现两个使用者互相改变对方的文件问题。
  • Recover:加载暂存文件,将之前未存储内容找回。但要手动删除swap文件
  • Delete it: 确定暂存文件误用可以直接删除。
  • Quit:离开vim
  • Abort:和quit类似,回到命令行

0 人点赞