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

tips:企鹅名叫Tux,在英文中有晚礼服的意思
Linux的全称是GNU/Linux,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统,用C语言编写。严格来说Linux只是一个内核(Kernel),提供了操作系统当中最底层的硬件控制与资源管理架构。核心、核心工具结合GNU丰富的软件构成了一个完整的、功能强大的操作系统。大家使用的各种Linux发行版本是Linux内核配以GNU丰富的应用的软件。
Linux的诞生
林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds,1969年12月28日- )也就是Linux之父:
提到Linux就要提到Unix,Unix的创始人之一(下图右边那个)为了开发出这套系统创造了C语言(本来应该叫new B 语言)
在这里插入图片描述冷知识:
安德鲁除了开发Minix,他还是《计算机网络》的作者,同时他还是一个天体物理学家
林纳斯还开发了大名鼎鼎的的版本控制工具
GitBSD协议: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的发行版,例如:
我们熟知的移动操作系统,Android、鸿蒙其使用的也是Linux的内核
Linux和Windows的区别

Linux内核主要由5个模块构成:
内存管理模块:内存管理主要完成的是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子系统对内存分配的请求。进程管理模块:进程管理主要控制系统进程对CPU的访问。进程间通信模块:进程间通信主要用于控制不同进程之间在用户空间的同步、数据共享和交换。文件系统模块:支持对外部设备的驱动和存储。网络接口模块:网络接口提供了对各种网络标准的实现和各种网络硬件的支持。==Linux的内核版本:==
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是没有盘符的,这是与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不同,Linux系统中文件的扩展名是没有意义的。一个文件能否执行取决 于 是 否 拥 有 “x” 权 限 。 扩 展 名 仅 仅 用 来 了 解 文 件 是 什 么 , 比如
有些转意字符在 Linux 的命令解释器中有特殊的含义。?、*、$、&、!、|、\、[]、{}、()等等。在文件名中应尽量避免使用这些字符。
以‘.’开头的文件为隐藏文件。/ 既可代表目录树的根也可作为路径名中的分隔
符(类似DOS下的 \),因此 / 不能出现在文件名中。
为了避免同样的文件在系统中被不必要地多次复制,可以通过创建文件链接,使得各个用户在自己方便的位置存取同一个文件,实现文件的共享
==硬链接==
$ 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==符号链接(软链接)==
$ 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?
要理解inode是什么,我们首先得了解硬盘,文件数据是储存在硬盘上的,物理上的原理我们这里就不做讨论了。==硬盘的最小存储单位叫做扇区。每个扇区存储512字节,而连续的8个扇区组成了一个块(block),大小为4kb。文件数据都存储在块中,为了能够方便找到存储数据的位置我们还必须找到一个地方存储文件的属性,这种存储文具属性信息的区域叫做inode(索引节点)==
node包含文件的属性信息有以下内容:
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
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+字母,也可以实现
在一般模式当中,输入『 : / ?』3个中的任何一个按钮,就可以将光标移动到最底下那一行。
在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的
常用语法:

替换类:

打开文档时如果看到
~,代表没有内容的意思:在这里插入图片描述

以上涉及的是有关vim的常用指令,如果想要了解得更加全面,请参考:
vi编辑文件时,会在编辑文件所在的文件夹下生成.filename.swap。 记录了对文件的操作。若vi编辑器非正常退出、掉线,则可用该文件进行救援。下次编辑该文件将会出现若干提示:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。