【Linux】1. Linux操作系统介绍及环境搭建

发布于:2025-07-21 ⋅ 阅读:(19) ⋅ 点赞:(0)

  本文简单介绍了计算机的结构,为后续学习做了铺垫。然后介绍了操作系统、命令行解释器、系统调用接口、内核态、用户态等操作系统相关信息,并讲述了Linux环境的搭建方法(主要是云服务器)。最后介绍了一些XShell快捷键,用户管理工具及简单的系统自带工具等。

Linux系统介绍及环境搭建

  • 一、计算机的结构简介
  • 二、操作系统简介
    • 1. 操作系统的概念及结构简述
    • 2. 命令行解释器
    • 3. 系统调用接口
    • 4. 操作系统内核
  • 三、Linux环境的搭建
    • 1. Linux的介绍
    • 2. Linux环境搭建方式
  • 四、系统相关的命令与操作
    • 1. Xshell常用操作
    • 2. 用户管理
    • 3. 系统工具

一、计算机的结构简介

在学习操作系统前,要先简单了解计算机的结构。

(1)冯诺依曼体系结构

  • 控制器:是计算机的中枢神经,解释程序规定的控制信息,完成对程序、数据、地址等的控制和协调任务。
  • 运算器:对数据进行算数运算和逻辑运算的设备。(与控制器合称为中央处理器简称CPU
  • 存储器:存储数据的设备。
  • 输入设备:如键盘、鼠标等,将数据输入到计算机的设备。
  • 输出设备:如磁盘、显示器等,将计算机的运算结果输出到该设备。(与输入设备合称为外部设备,简称外设

简单的操作系统结构图:
简单体系结构图

(2)寄存器
  寄存器register:集成在CPU内部的存储器,是距离CPU最近、访问速度最快的存储介质。用来临时存储数据、指令等,方便运算器与控制器快速存取数据。寄存器具有高性能、高耗电、高造价的特点。

  • 数据寄存器:存储被运算的数据及运算结果。
  • 地址寄存器:存储内存的地址,方便CPU通过地址找到内存中的数据。
  • 指令寄存器:存储当前执行的指令。
  • 程序计数器:存储下一条指令的地址。每执行一条指令,程序计数器都会加一,自动指向下一条命令。
  • 状态计数器:存储CPU当前的状态码,用来记录CPU当前的状态。
  • 堆栈指针寄存器:记录栈顶位置,用于管理函数调用和返回。

  寄存器分为显示寄存器隐式寄存器,显示寄存器中的内容可以被用户看到,隐式寄存器用户无法访问,只能由操作系统内部进行使用。

(3)Cache高速缓冲存储器

Cache高速缓冲存储器:缓冲CPU与内存速度差的临时存储设备。

  由于CPU执行速度非常块,内存的读写速度与之相比慢了几个数量级,导致程序执行的速度被严重拖慢。为了解决这个问题,引入了Cache高速缓冲存储器,cache比内存读写速度快,比寄存器读写速度慢,访问数据时会先将内存中的数据以及周围的一大片数据全部复制到cache中,CPU执行下一条指令时,直接到cache中寻找即可,极大提高了CPU的运行速度。

局部性原理:当一个数据被访问时,下一个访问的数据极大可能是它周围的数据。所以复制周围的数据能有效提高效率。

(4)内存
  内存memory:主存储器,临时存储着正在运行的程序和数据。内存有掉电易失的特点,不能在断电情况下存储数据。通常在断电情况下存储数据的设备是磁盘等外设。

内存通常分为2类:

  • 只读存储器(ROM):在该设备生产时就将内容写入,之后只能读不能写。通常用于存储计算机启动时的代码程序等。
  • 随机访问存储器(RAM):可以任何时刻访问任何位置的数据,主要用于存储计算机运行时的临时数据。

(5)输入输出设备
外部设备:磁盘、鼠标、键盘等。

二、操作系统简介

1. 操作系统的概念及结构简述

(1)操作系统简介
  操作系统:一款管理软件,向上管理用户应用,向下管理硬件。

操作系统层级表

  • 用户应用:如QQ、微信等用户使用的软件,在操作系统(OS)上运行。
  • 操作系统:一个软件,向上管理用户软件,向下管理硬件设备。
  • 驱动程序:硬件设备的运行程序,由硬件厂商实现,操作系统通过调用驱动程序实现对硬件的使用。
  • 硬件:看得见摸得着的设备,真正从物理上做出实际反应的设备,像显示器、主机、内存卡等。

为什么用户应用不能直接使用硬件?

  1. 隔离用户软件与硬件的直接交互,防止用户操作不当导致硬件损坏。
  2. 软件开发者只用调用OS提供的接口,不必实现软件的管理细节,简化开发过程。
  3. OS能管理软件,让多个程序互不干扰、有序地运行,并能合理分配资源。

(2)操作系统的四个特点

  1. 并发:计算机中系统同时运行着多个程序,宏观上是同时运行的,微观上是交替运行的。
  2. 共享:资源共享,系统的资源可以供多个并发执行的进程共同使用。
  3. 虚拟:把物理上的实体变为逻辑上的对应物。物理实体是实际存在的,用户感受到的则是逻辑对应物。
  4. 异步:多道程序并发执行,但是由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

2. 命令行解释器

  命令行:用户通过输入命令(指令)来完成对操作系统的操作,如创建一个名为file的文件时,我们会输入touch file命令,操作系统接受到命令便会执行该任务。命令的本质是可执行程序,默认存储在/user/bin目录下,命令行参数则是该程序main函数的参数

注意:命令行解释器使用的是shell语言

命令行解释器 (Shell):将用户命令翻译成OS可以识别的指令的软件。

为什么要用Shell翻译指令给OS

  1. OS的系统调用使用复杂,不方便用户直接使用。Shell可以将用户方便的语言翻译成OS可以执行的命令,降低操作系统使用成本。
  2. Shell可以隔离用户与OS的直接交互,防止错误操作损坏OS。

Shell
  我们常使用的Windows操作系统一般通过图形化界面(GUI)实现对操作系统的操作,即对界面上的图标进行点击来操作。图形化界面是将命令行与图形关联起来,每点击一个图形,操作系统都会接收到对应的命令,本质上也是通过命令行完成对系统的操作。

  图形化界面比命令行操作更加简单,所以应用广泛,但是计算机对图形的渲染更加耗费性能,并且对于服务器而言,并不需要将操作方式展示给客户使用,因此服务器一般不需要图形化界面,程序员需要学习相关的命令行来操作Linux系统。

  我们常用的命令行解释器为XShell软件。

3. 系统调用接口

(1)系统调用接口
  Shell软件将用户与操作系统隔离开来,防止用户错误使用破坏操作系统。那用户是否可以编写程序,通过程序指令随意修改操作系统的内容?答案显然是不能的。操作系统为了防止用户代码随意使用操作系统的资源,向用户提供了系统调用接口,用户只能调用系统调用接口访问操作系统内核。

  系统调用接口:操作系统提供给用户,用来访问操作系统资源的一组C语言函数,程序只能调用这些函数接口来使用操作系统资源。

  • 操作系统由C语言实现的,所以系统调用接口是C语言函数。
  • 任何程序访问操作系统,都必须经过系统调用接口,所有编程语言(C++、java、Go、Python等)编写的代码都是利用系统调用接口访问操作系统的。每种语言的标准库(如C语言的stdio.h等)都封装了系统调用接口,如printf函数中封装了系统调用接口write等。

使用系统调用接口访问操作系统有以下好处:

  • 防止应用程序恶意修改操作系统内容,导致其他程序的运行环境被破坏。
  • 系统调用接口封装了操作系统的具体实现,用户程序只需要调用对应的函数即可,至于函数内部到底是什么样子用户可以不关心。
  • 增强了程序的可移植性,即不同设备的操作系统实现方式可能不同,但是只要它们提供同一套系统调用接口(即函数名、参数、返回值一样),即使函数体内部实现不一样,用户程序的代码也不需要修改,可以直接在该设备上运行。

4. 操作系统内核

  操作系统内核(kernel):操作系统的核心代码,用来完成进程管理、内存管理等最核心的功能。

  CPU在执行指令时,既会执行用户编写的程序的代码,也会执行操作系统内核的代码。

  • 内核态:CPU执行操作系统内核代码的状态,也叫核心态、管态
  • 用户态:CPU运行用户代码的状态,也叫目态

在CPU里会有一个寄存器中记录着当前进程的状态。

状态切换:每次切换状态时,都会修改寄存器中的值

  • 陷入(用户态 —> 内核态):由中断实现,更改寄存器中的值为内核态。(中断即是中断用户正在执行的代码,转头去执行内核代码),这个过程称为陷入。
  • 内核态 —> 用户态:将寄存器的内容修改为用户态。

   不同架构的CPU与操作系统表示内核态和用户态的方式不一样,Intel x86架构的CPU一共有0~3四个特权级,0级最高,3级最低。Linux只使用了0和3这两个特权级,0表示内核态,3表示用户态。

  系统调用接口的具体实现代码保存在操作系统内核。程序在使用系统调用接口时,会从用户态转变成内核态,执行完毕后会从内核态转变成用户态。切换内核态的操作由系统调用接口完成。

  • 系统调用函数做的第一件事就是将程序状态寄存器修改为内核态
  • 系统调用函数执行完毕后做的最后一件事也是将程序状态寄存器修改为用户态
    态

进程处于用户态时可以执行内核代码吗?

——不可以,操作系统区分正在执行的是用户代码还是内核代码,就是为了确认代码的权限,内核代码拥有最高的权限,可以对操作系统进行修改,而用户态直接执行内核代码会跨过权限认证这一步,让操作系统处于不安全的状态。

那进程处于内核态时可以执行用户代码吗?

——不能,CPU只能执行代码指令,无法区分代码的逻辑是恶意还是正常,若是内核态可以执行用户代码,有些用户代码就可以披着内核态的皮做一些损害操作系统的事情。

三、Linux环境的搭建

1. Linux的介绍

  常用的计算机操作系统很多,如微软公司的Windows操作系统、苹果的Mac系统、手机上的Android安卓系统等。对于企业而言,服务器所使用的操作系统通常为Linux操作系统。

现实中Linux的发音五花八门,最广为流传的便是以下几种:

  • /ˈlɪnəks/:勒呢克斯(推荐)。这是该词作为英语最地道的发音。但它的创始人Linus是芬兰人,芬兰人不会这么读。
  • /ˈli:nəks/:力呢克斯。
  • /ˈlɪnju:ks/:勒纽克斯。
  • /ˈli:nju:ks/:力纽克斯。

其实哪种发音都能听懂,但是推荐使用英文读法。

  Linux操作系统:一个 开源的 免费的 操作系统。
  开源:是指源代码是公之于众的,任何人都可以免费使用。

​   在1991年10月5日,一个赫尔辛基大学的研究生Linus Benedict Torvalds在一个新闻组中宣布了他编写出的一种类似UNIX的小操作系统,并叫做Linux,然后他将该系统上传到网站上供各路大神的改善,更新过很多的版本,我们所使用的Linux就是由此而来。(大致如此,欲知详情请在网上搜索)

为什么企业都是用Linux操作系统呢?

  1. Linux操作系统是免费的,可以为企业节省很多成本。
  2. Linux操作系统是开源的,从最初的发布至今,历经各路程序员的集思广益和长时间的迭代更新,无论是性能还是稳定性都达到了极高的水准。
  3. Linux操作系统的源代码是透明公开的,企业可以看到该系统的内部构造,相比于闭源的商业操作系统,Linux极大程度地保证了企业信息的安全性

Linux的发行版本(了解)

  1. Debian:运行非常稳定,非常适用于服务器,但是对新手并不友好,适合系统管理员和高级用户
  2. Ubuntu:是当今最受欢迎的免费操作系统,侧重于市场上的应用,对新手很友好
  3. 红帽企业级Linux:面向商业市场的Linux发行版,有服务器版本,支持众多架构,红帽公司通过课程对管理员进行培训。
  4. CentOS:是一个企业级Linux发行版,是对红帽中的免费源代码重构建成,我所使用的Linux就是CentOS 7.6
  5. Fedora……(剩下的自行查阅即可)
  6. Kali Linux……

  其实每个版本的Linux操作系统对于我们用户都是大同小异,我们只需要掌握其中一种,剩下的自然就不攻自破了,所以我们对于Linux版本的选择就是稳定、便宜,性能对于学者来说都是够用的,对于企业就需要仔细分析了。

2. Linux环境搭建方式

主要有3种方式:

  1. 直接安装在物理机上,但是Linux桌面使用起来非常不友好,所以不推荐。
  2. 使用虚拟机软件,将Linux系统搭载在虚拟机上,但是由于操作过程比较麻烦,并且有些虚拟机软件存在一些Bug,使用起来非常折腾,所以不推荐。
  3. 使用云服务器,在服务器厂商买一个云服务器,远程操控Linux系统,最贴近程序员工作环境,推荐。

为什么推荐使用云服务器呢?

  1. 云服务器搭建环境更为简单方便,且稳定。
  2. 远程访问Linux系统更符合我们未来的工作场景。
  3. 远程访问Linux系统更方便我们学习Linux网络编程。

云服务器的Linux环境搭建步骤:(以下是付费内容,要购买云服务器哦)

  1. 购买云服务器,如腾讯云、阿里云或华为云等。
  2. 购买后重置服务器root用户的密码,并将服务器的外网IP地址记下。
  3. 使用XShell软件远程登陆到Linux(在官网可以下载)
    1. 登录主机ssh [ip]如:ssh 123.123.123.123
    2. 如果网络通畅,提示输入用户名密码,这时候输入即可
    3. 最开始购买时用户名为root,密码是自己重置的密码,后续可以自己创建用户并授权。

四、系统相关的命令与操作

1. Xshell常用操作

(1)XShell常用热键(快捷键)

按键 功能
tab 命令补全、档案补齐
ctrl + C 让当前程序终止运行
ctrl + D 退出,相当于exit
ctrl + insert 复制
shift + insert 粘贴

(2)shell语言常用语法

注释:# 后为注释内容

clear:清屏。

exit:退出。

echo:输出变量,以字符串形式显示。

这里简单介绍一下能用上的,详细内容在《Shell语言》中说明。

(3)命令起别名
alias:给命令起别名,以达到简化较长命令的作用。

alias [name]='commands'		# 给commands命令起名为name

alias ll='ls -l'			# 给ls -l起名为ll
  • 当别名与原命令名一样时,会优先使用别名。
  • alias只限本次登录时使用,下次登录时会被重置。
  • 若是需要永久使用别名,需要修改配置文件/etc/.bashrc,在其中加入alias命令语句,如alias ll='ls -l'
    unalias:删除命令的别名。
unalias ll		# 删除ll的命令名

2. 用户管理

在Linux下有2种用户:

  • root用户:是Linux的管理员,可以在Linux系统下做任何事情,不受权限限制。
  • 普通用户:只能在Linux下做有限的事情

超级用户的命令提示符是#,普通用户的命令提示符是$

(1)用户登录

ssh:登录服务器,然后根据提示输入用户名和用户密码即可。

ssh [ip]  # [ip]为公网ip地址。

(2)查看用户

  1. whoami:显示自己的用户名,就是英文的 who am i(我是谁)
[root@VM-12-10-centos ~]# whoami
root
  1. who:显示当前登录的所有用户。
[root@VM-12-10-centos ~]# who
root     pts/0        2025-05-21 15:06 (124.160.201.106)

(3)创建用户

  1. adduser:创建用户,并创建用户的家目录。(需要root权限)
adduser [username]  # [username]为被创建的用户名。
  1. useradd:创建用户,但是不创建该用户的家目录。
useradd [username]
  1. passwd:设置密码,随后根据提示输入密码,并且再次输入密码确认一遍。(需要root权限)
passwd [username]  # 为[username]用户设置密码。

(4)删除用户

userdel:删除用户。(需要root权限)

  • userdel [username]只能删除该用户,不会删除他的家目录,-r选项可以连他的家目录及里面的文件一起删掉。
  • 若该用户有程序正在执行则无法直接删除。
userdel [username]     # 只能删除该用户,不会删除他的家目录。
userdel -r [username]  # 删除用户、家目录及下的所有文件。

(5)切换用户

su:切换用户。

  • root用户切换其他用户时直接用su [username]就可以了。
  • 其他用户切换另一个用户时,需要输入另一个用户的密码。
su [username]

(6)获取权限

sudo:普通用户获取root权限,需要输入自己的密码

  • 普通用户需要获取root的许可才能使用sudo命令,这需要修改配置文件/etc/sudors中的该用户权限。
  • 使用sudo执行命令时,是由root用户代为执行,所以该命令的执行者是root。
sudo [command]  # [command]为需要被root执行的命令

为什么sudo时,要输入自己密码,而不是root密码?

  1. root用户密码十分重要,不能让普通用户知道root密码。
  2. 只有被root授权的用户才能使用sudo命令,root对该用户信任,所以输入密码的作用不是为了拦截非法用户。
  3. 输入该用户密码是为了警醒用户,该操作需要慎重,防止用户因为意外操作导致失误。

3. 系统工具

(1)yum软件包管理器

yum(Yellow dog Updater Modified):是Cent OS系统上的软件包管理器,就是软件商店,用来下载安装软件包。

(Ubuntu系统的软件包管理器为apt-get

软件包:软件的安装包,可以将软件安装在Linux服务器上。

  1. 安装软件
    • 安装软件需要root权限。
    • 安装过程中可能会出现一些询问,需要回复同意或否,-y选项能默认同意。
yum install [app_name]    # [app_name]为软件名称
yum install -y [app_name] # 自动同意安装过程中的询问,无需手动点击。
  1. 卸载软件
    • 卸载软件需要root权限,且也会有一些询问。
yum remove [app_name]
yum remove -y [app_name]
  1. 查询软件列表
    • yum list会展示所有的软件包列表
    • 可以用grep命令筛选出自己想要查询的软件包名称
yum list					# 展示软件列表
yum list | grep [app_name]  # 在软件列表中搜索出带[app_name]名字的软件包。

软件列表

sl.x86_64                                5.02-1.el7                    epel
  • sl.x86_64:软件名称.CPU架构。x86_64表示64位系统,i686表示32位系统。
  • 5.02-1.el7:主版本号.次版本号-软件包发行号.操作系统发行版本。el7表示centos7/redhat7
  • @epel:表示软件源名称,相当于软件来源的商店的名称,epel是非官方的软件集合
  1. yum的扩展

  yum源:软件的来源,软件包来源于各自对应的官网,某些平台会收集这些软件或链接,将其做成一个集合,这样就可以通过平台这一个来源下载多种来自不同地方的软件,yum源则记录着这些软件或平台的链接。

  • Cent OS配置yum源的目录在/etc/yum.repos.d下,配置文件是以.repo为后缀的文件。
  • /CentOS-Base.repo为最基本的yum源文件。

  通常情况下,一些软件来自于国外的服务器,在国内进行访问速度会很慢,国内一些平台会将国外的这些软件实时复制到国内的服务器,供国内用户使用,复制的过程称为镜像,专门用来同步国外数据的服务器称为镜像服务器

  • 腾讯的镜像链接:http://mirrors.tencentyun.com/centos/

  有些软件没有在CentOS、Ubuntu等相关生态平台的官方软件集合中,这些在非官方软件集合epel中,我们可以通过yum安装epel非官方软件集合,安装后在/etc/yum.repos.d/路径下就出现了epel.repo这个文件

yum intall -y epel-release		# 安装epel非官方软件集合配置文件

  软件和软件是有一定的关联的,是具有一定耦合性的,有些软件是会相互依赖的,不过我们不必担心这些问题,yum会在安装时会自动帮我们解决这些问题。

(2)rzsz上传下载工具

rzsz:用于Windows机器和远端的Linux机器通过XShell传输文件。

rz				# 弹出选项框,将Windows电脑本地的文件上传当前Linux目录下
sz [file]		#弹出对话框,将当前文件下载到Windows电脑下你选择的目录下

  支持拖拽的方式将文件上传,只需要将文件拖拽到XShell窗口下,就会上传到Linux当前目录下。
rz

(3)man命令手册

  1. man:查看命令或函数的详细信息,内容是英文的。
man [command]			# 查看[command]命令或函数名的详细信息。
man [number] [command]	# [number]为数字,指定某章节查询命令或函数。
man -k [keyword]		# [keyword]为关键字,根据关键字模糊查找命令或函数。
man -f [command]		# 显示[command]命令为哪个章节

  注意:当man [number] [command]使用时发现系统手册中不存在该命令时,需要下载安装完整的man手册内容。

yum install -y man-pages # 安装man的完整内容
  1. man的章节:
  1. 用户命令(如 ls, cp
  2. 系统调用(如 open, read
  3. 库函数(如 printf, malloc
  4. 设备文件和驱动
  5. 配置文件格式(如 /etc/passwd)
  6. 游戏和娱乐
  7. 杂项(如协议、文件格式描述)
  8. 系统管理命令(如 mount, ifconfig
  9. 内核例程,面向 Linux 内核开发者。包含内核级例程和函数的文档。
  1. man的输出结构(部分):
  • NAME:命令或函数的名称及其简要说明。提供手册页所涵盖主题的简明概述。
  • SYNOPSIS:使用命令或函数的语法,包括选项和参数。
  • DESCRIPTION:详细说明命令或函数的功能。提供上下文、示例和用例。
  • OPTIONS:与命令一起使用的选项列表及其含义。
  • EXIT STATUS:命令返回的退出代码用于指示成功或错误。有助于调试和脚本编写。
  • EXAMPLES:演示命令用法的实际示例。
  • FILES:相关文件的列表,例如配置或日志文件。
  • ENVIRONMENT:环境变量。
  • SEE ALSO:相关命令或主题的参考。

man

  1. man的页面操作
  • 空格:向下翻页。
  • b:向上翻页。
  • /关键字:搜索关键字。
  • n:跳到下一个搜索结果。
  • q:退出。

(4)时间

  1. date:显示或设置系统时间
date +[format]				# [format]为格式。

date +%Y-%m-%d-%H:%M:%S		# 显示年月日时分秒,输出结果如"2025-05-22-12:52:13"
date +%F-%X					# 显示指定格式年月日时分秒,输出结果如"2025-05-22-12:52:53 PM"

时间显示格式:

  • 年月日时分秒:%Y %m %d %H %M %S
  • 年月日:%F输出格式相当于%Y-%m-%d
  • 时分秒与上下午:%X输出格式相当于%H:%M:%S PM%H:%M:%S AM
  • 时间戳:%s
  1. cal:查看日历信息
cal				# 显示当前月份日历,并标注日期。
cal -3			# 显示前一个月,当前月和下一个月的日历
cal -j			# 显示今日是当年的第几天
cal -y			# 显示当年所有月份日历
cal -y [year]	# 显示指定年份所有日历

常用选项:

  • -3显示系统前一个月,当前月,下一个月的日历
  • -j显示当年中的第几天
  • -y显示当年份日历

日历输出格式:
日历

(5)计算器bc

bc:计算器。quit可以退出

bc

(6)查看计算机各部件当前信息

  1. lscpu:查看cpu信息
  2. lsmem:查看内存信息
  3. df -h:查看磁盘信息
  4. uname:查看操作系统名称

(7)关机

shutdown:关机命令。默认一分钟后自动关机。(很少使用,服务器通常是一直开着)


网站公告

今日签到

点亮在社区的每一天
去签到