声明:本篇文章参考和引用了2023下半年吉林大学郭东老师的PPT,如有侵权,请联系我,我将会立马删除

一、UNIX操作系统

1.历史简介

1969年诞生于AT&T贝尔试验室

开发者是Ken Thompson 和 Dennis Ritchie

最初使用汇编语言开发,后用C语言重写UNIX源码,UNIX和C完美地结合成一个统一的整体

UNIX以源代码的形式发行,形成了两个重要的流派:
UNIX SYSTEM V (AT&T)和 Berkeley UNIX(UCB)

2.标准化

即对每种实现必须定义的各种限制进行说明

有两个重要的UNXI标准:

  1. 系统V接口定义 SVID 例如: at&t
  2. 可移植操作系统接口 POSIX 例如:IEEE、 ISO

3.其他的UNIX系统

1> Linux

目前应用最为广泛的类UNIX系统

背景

「两个人」:

Richard Stallman和 Linus Torvalds,前者启动GNU项目 创建FSF组织 提出copyleft理念 制订GPL协议 发起开源运动

「四个一」
  • 一个项目 GNU

GNU’s NOT UNIX

目标

​ 创建一个自有共享 可以被任何人修改的类UNIX操作系统

​ 与UNIX系统兼容

​ 不受UNIX名字和源代码私有权限制

​ 能运行UNIX程序

​ GNU项目完成了许多UNIX系统上应用程序的仿制品

​ GNU项目开发的重要软件工具有:

​ GCC:GNU编译器套件,包括GNU c编译器

​ G++:C++编译器 是GCC的一部分

​ GDB:源代码级的调试器,支持多种语言

​ GNU make: UNUX make命令的免费版本

​ bash: 命令解释器(shell)

​ GNU Emacs : 文本编辑器及环境

未成功开发操纵系统内核

  • 一个组织 FSF

    自由软件基金会

    目标:
    执行GNU计划

    ​ 提供技术 法律以及财政支持

    ​ 开发更多的自有软件

  • 一个理念 Copyleft

  • 一个许可证 GPL

    背景:
    发行大型软件需要的合适许可协议

    已经有的许可协议:

    image-20231125202333757

    Copyright©:版权所有,即软件的一切权利归软件作者私有,用户只有使用权没有其他权利包括复制软件的权利

​ Richard Stallman提出Copyleft的概念(著权)

image-20231125202957871

利用现有的著作体制来保护所有用户和二次开发者的自由授权方式

它赋予所有人运行程序,复制程序,修改程序和发行修改程序的权限,但是使用者不能在修改后的软件上添加限制

​ 基于copyleft Stallman提出来了GPL许可证,GNU通用的公共许可证

GPL授予程序接受人以下权利,或称“自由”:

  • 赋予所有人运行程序,复制程序,修改程序和发行修改程序的自有
  • 重新发行软件的人不能在修改后的软件上添加限制

GNU开发的工具都在GPL下发行

意义:
image-20231125203240445

其他开源许可证:
Apache ,BSD,MIT,Mozilla

image-20231125203426215

Linux的诞生

内核在GPL协议下发布,参与了开源运动,Linux内核更新速度极其快

吉祥物:tux

image-20231125203724965

Linux的含义:操作系统内核或者是基于linux内核的操作系统

Linux操作系统版本:包括内核版本和发行版本

[内核版本]:有Linux内核社区统一进行发布,包括主版本号 次版本号和修订次数,奇数表示开发版本,偶数表示稳定版本,修订次数标明内核被修改的次数

image-20231125204046584

「发行版本」 发行版的名称或版本号是由发行版的维护者决定

image-20231125204139444

image-20231125204157090

2> UNIX操作系统概要

计算机系统= 硬件+系统软件+应用软件

UNIX操作系统是包含了文本编辑器 编译器 和其他系统工具程序的程序集

UNIX操作系统是按照分层软件模型实现的

image-20231125204400373

内核:

image-20231125204440090

image-20231125204501355

image-20231125204515488

image-20231125204551016

「相关概念」

虚拟计算机:UNIX向系统中每个用户指定一个执行环境,这个环境称为虚拟计算机,包括一个用户接口终端和共享的其他计算机资源,UNIX是多用户操作系统 虚拟计算机的集合,而从用户视角是独想计算机

进程:UNUX系统通过进程向用户分配资源

「特征」

可移植性(c语言保证)

多用户性:多用户同时共同使用计算机,各个用户执行不同的程序,提供安全机制隔离用户

多任务性:启动一个任务后继续执行其他任务,允许用户在前台和后台多个任务之间进行切换

分级文件系统:对数据和程序文件进行分组管理,便于查找文件和程序

与设备独立的输入输出操作:

用户界面shell:

​ 命令解释器: 控制用户与系统的交互,实现用户命令输入与结果输出

​ shell脚本: UNIX Shell是一种成熟的编程语言,Shell 脚本 包含一系列命令, 实现较为复杂 的功能

系统工具与服务:UNIX系统包括100多个系统工具程序(命令),标准的UNIX系统组成部分完成用户所需要的各种功能

二、Linux入门

1.登录系统

「登录作用」

  1. UNIX是一个多用户操作系统。
  2. 用户在使用UNIX系统前必须进行登录

「登录方式」

  1. 本地登录:在本地输入用户名和密码登录
  2. 远程登录:使用远程登录软件登录 eg: ssh

「命令提示符」

最简单的命令提示符只有一个字符,一般root根用户是#,普通用户是$,用户可以设置提示符,显示丰富系统信息。

image-20231128105235339

普通用户

「修改口令」

passwd命令来修改或创建口令

1.可以修改自己的口令:

image-20231128105425593

2.修改别人的口令

1
passwd username

只有root可以

3.创建口令

1
passwd username

应用场景:root创建普通用户后,为其分配初始口令

「退出系统」

用户完成工作后离开系统的过程,退出意味着和系统断开连接结束对话

三种方法:

1
2
3
exit
[Ctrl-d]
logout

logout需要在登录shell中

2.命令

  • UNIX系统有几百条命令/系统工具
  • 绝大多数命令格式相同
  • 大部分UNIX提供在线帮助 help man info
  • 通过输入命令告诉系统要做什么事
  • 命令行中回车键解释为命令行的结束符

例子:
image-20231128110218045

「命令格式」

基本格式

image-20231128110252691

image-20231128110324019

命令本身 和 命令+选项

1
2
3
4
5
6
7
8
#命令+选项
ls -a #显示目录中的隐藏文件
ls -a -l #将隐含的文件用长格式形式显示
ls -la #作用同上,写法不同
#命令+参数
ls /home #显示指定目录的文件
#命令+选项+参数
ls -a /home #命令+选项+参数

image-20231128110819617

image-20231128111034774

不同流派

image-20231128111303688

image-20231128111426160

image-20231128111413828

image-20231128111346324

image-20231128111534508

「日期和时间的显示」

1
date

image-20231128111633306

UNIX使用24小时制

「用户信息」

who命令

1
who

image-20231128111741085

第一列:登录用户名,登录用户名

第二列:登录终端号,登录到哪里

第三列:登录时间

第四列:登录主机,从哪里登录的

「终端」

物理终端:一套输入输出设备,用于用户登录和使用计算机,如连接在计算机上的显示器,鼠标,键盘与名词主机对应

虚拟终端(tty)

本地的linux系统提供的,例如虚拟机或者是linux系统服务器之类的,

image-20231128112152987

image-20231128112440981

虚拟机登录

使用虚拟机登录终端为tty

capture_20231128142808500

对于Ununtu图形化界面

image-20231128151721044

伪终端(pty)

远程登录软件或终端模拟软件模拟出的终端

image-20231128141759139

image-20231128141823390

手机软件远程登录

「常用其他命令」

who am i和whoami命令

1
2
who am i
who am I

显示终端上登录的用户信息

image-20231128152126549

1
whoami

显示用户名

image-20231128153157246

显示日历 cal命令

默认显示当月日历

image-20231128152807363

参数中可以指定年和月,显示指定年月的日历表

help命令 man命令 info命令

「内部命令」 shell代码中的一部分,shell启动后驻留内存,执行速度快

「外部命令」保存在文件系统中的程序,被调用时才载入内存执行

image-20231128154054687

image-20231128154113516

image-20231128154124919

image-20231128154138497

image-20231128154231499

last命令

1
last

它用来展示关于系统用户最后登录会话的信息

capture_20231128153410861

输出的每一行从左到右包含的列分别是:

  • 用户名。 当系统重启或者关闭时,last显示指定用户为reboot或者shutdown
  • 会话占用的 tty。:0通常意味着用户登录了一个桌面环境
  • IP 地址或者用户登录的主机名
  • 会话开始时间和停止时间
  • 会话时长。如果会话仍然是激活的,或者用户没有登出,last 将会显示信息,而不是时长

history

显示输入的所有命令记录

1
history

image-20231128153900626

「命令行快捷键与命令补齐」

image-20231128154332308

3.shell

image-20231128154719823

image-20231128154736510

image-20231129211049340

image-20231129211156849

image-20231129211302220

4.软件的安装与卸载

「安装软件」

1.两种方法

  • 下载软件源代码后编译安装

  • 基于网络存储库安装/更新软件

    两种基于网络存储库的软件安装方法:

    1.yum后继为dnf eg:Redhat OpenEluer

    2.apt eg:Ubuntu Debian

2.使用yum(dnf)安装软件包

image-20231129211838221

软件包集合:服务于一个共同的目的一组软件包,例如系统工具集等

使用dnf可以对软件包组进行安装和删除等操作,使相关操作更高效

image-20231129212018114

5.登录过程

启动过程

操作系统常驻部分载入内存其余部分保留在磁盘上,用户请求时候再载入内存,用户登录时 shell程序载入内存。

[init进程]:UNIX系统所有进程的祖先进程,启动所有系统服务和后台进程,系统启动后init创建虚拟终端为用户登录做准备

三、vi编辑器

工具软件,文本编辑器,用于创建新文件或修改旧文本文件,编辑对象是文本文件,相对简化的字处理器

image-20231129213205077

1.工作模式

「命令模式」

启动后默认进入,所有的输入都被看作命令,不显示,被执行,通过按键删除字 行 段落,移动光标或者执行其他操作

「末行模式」

按下冒号,在最后一行输入命令,回车结束命令

「文本输入模式」

键盘输入文本字符,屏幕显示用户输入

「模式切换」

image-20231129213525501

注意大小写和英文字符

2.基本操作

「打开或创建文件」

1
2
3
vi     #在当前工作目录新建一个文件并打开

vi myfirst #存在myfirst文件则为打开文件,不存在则新建并打开

image-20231129213840486

image-20231129213850965

「编辑文件」

  • 按下小写字母 i 进入文本输入模式
  • 通过键盘进行输入文本
  • 按下 BackSpace或者Ctrl+h删除字符
  • 每行结束后按Enter进入下一行

「保存文件与退出」

按下ESC退出文本编辑模式进入命令模式,输入

1
2
3
:wq
:x
ZZ

上述三种的其中一种,按下回车即为保存并退出

1
:q

若文件没被修改即为退出,已经被修改未保存则无法退出

1
:q!

不保存文件直接退出

「存储缓冲区」

image-20231129214521276

「光标的移动」

命令模式下

image-20231129214614398

命令模式进入文本输入模式不同的命令键有不同的效果:

image-20231129214707433

光标移动键(命令模式)

image-20231129215354489

精准定位

命令模式:

image-20231129215414056

末行模式:

image-20231129215526241

翻页:

image-20231129215624206

文件修改:

命令模式下:

image-20231130144409680

删除字符:

1
2
3
4
5
6
7
8
#删除单个字符
x
#数字n+x删除n个字符
2x
#撤销当前行的修改
U
#撤销最近的修改
u

删除行和单词

1
2
3
4
5
6
#删除光标所在行
dd
#数字n+dd删除n行
2dd#删除两行
#删除光标所在单词
dw

重复上一次操作

1
.

替换字符

image-20231130145148593

载入文本

从其他文件中载入文本内容

1
2
:r 文件名
#指定文本副本插入当前文件光标的下一行
1
2
:a,b w file
#把文件的a到b行写到file中

文件重排:

image-20231130150229039

1
2
3
4
#复制当前行
yy
#删除当前行
dd

使用操作符和域控制键修改/重排文本

image-20231130152354930

3.定制vi

image-20231130152759807

「选项格式」

image-20231130152856213

1
2
3
4
#只显示修改过的选项
:set
#显示X的值
:set X?

例如:

1
2
3
4
#显示行号
:set nu
#取消显示行号
:set nonu

「vim配置文件」

1
2
~/.exrc
~/.vimrc

vi编辑器中使用命令设置的所有选项都是临时的,退出vi就会失效

在用户主目录创建 ~/.exrc 或 ~/.vimrc 配置文件,设置选项后,可使每次启动时选项保持不变

4.搜索替换与命令执行

「搜索」

1
2
3
4
#命令模式下输入
/+要搜索的字符即为从光标所在的位置查找字符
#例如:
/A

按下N是下一个匹配与命令搜索方向相反,按下n为下一个匹配,与命令搜索方向相同

「搜索并替换」

1
2
:「行范围」 s/被替换单词/新单词/[g]
#g是全行替换,行范围默认为当前行

image-20231202185736902

「运行shell命令」

1
2
3
4
#: ! command
: ! date
#将命令执行结果加到文本中:
:r! command

四、Linux文件系统

1.磁盘组织

目录:Linux文件系统的组织单元

Linux文件系统通过目录对文件进行组织管理,

2.文件类型

UNIX文件视角:

  • 文件是字节序列,一切都是文件
  • 文件可以分为,普通文件、目录文件、特殊文件
1
2
#查看文件类型
file 文件名

image-20231202191624635

image-20231202191641349

3.目录详述

目录结构以层次结构进行组织

image-20231202191741582

父子关系:相邻两层目录间的关系

上层目录是下层目录的父目录,下层目录是上层目录的子目录

image-20231202191842230

重要目录:Linux系统的标准目录

image-20231202192035623

「重要目录作用」

image-20231202192347215

image-20231202192539500

image-20231202192558821

image-20231202192723221

「主目录」

主目录:管理员在创建用户的时候为其分配的特定目录

  • 用户登录时,自动进入主目录
  • 用户在其主目录拥有读、写和执行权限
  • 用户在其主目录可以创建任意多的子目录
  • 主目录名字通常和用户名相同

「工作目录」

工作目录:用户先在在文件系统中的目录

1
2
pwd
#查看目前的工作目录

「路径」

路径:文件在文件系统中的位置描述方式

路径名用来定义文件。

绝对路径:从根目录开始到文件的路径

image-20231202193349892

相对路径:从当前目录开始到达文件的路径

image-20231202193359114

「特殊符号」

点(.):表示当前目录

点点(…):表示当前目录的父目录

「命名约束」

文件和目录如何命名。

image-20231202193529448

4.目录操作命令

「cd命令」

1
2
cd [目录名]
#改变工作目录

image-20231202193744996

1
2
3
4
5
6
7
8
9
10
cd
#返回用户主目录
cd .
#进入当前目录
cd ..
#进入上一级目录
cd ~
#进入当前用户的主目录
cd ~tux
#进入tux主目录,前提是你有权限进入

「mkdir命令」

1
2
3
4
mkdir 目录名
#创建目录
mkdir 目录名1 目录名2 目录名3
#创建多个目录

image-20231202194116992

1
2
#一次创建多层目录
mkdir -p xx/yy/zz

「rmdir命令」

1
2
#删除目录,只能删除空目录,即目录中只含有.和..
rmdir 「目录名」

「ls命令」

1
2
#显示指定目录内容
ls 「目录名」

image-20231202194341628

选项 -l:

image-20231202194434138

image-20231202194520579

第二列:文件的链接数

第三列:文件的所有者,通常与文件创建者用户名相同,文件的所有者发生转移,则两者不同

第四列:文件所属的组,管理员创建用户时,指定用户隶属于某个组,用户创建文件时,文件属于用户默认隶属的组

第五列:文件大小,单位字节

第六列:文件上一次修改的日期和时间

第七列:文件的名称

选项 -a:
查看隐藏文件

image-20231202194822252

「cat命令」

1
2
#显示一个或多个文件的内容
cat 文件名1 文件名2

image-20231202194922602

「rm命令」

1
2
#删除文件
rm 文件名

image-20231202194955122

image-20231202195022506

五、UNIX文件系统高级操作

1.shell重定向

image-20231202195437195

「输出重定向」

输出重定向允许用户将命令(进程)的输出保存到文件中

shell使用>和>>作为输出重定向操作符

1
2
command > filename #覆盖重定向
command >> filename #追加重定向

image-20231202200457240

「输入重定向」

输入重定向允许用户从指定文件得到输入来运行命令

image-20231202200542587

shell使用<和 <<作为输出重定向操作符

1
2
comand < filename #命令行中使用
command << 分界符#脚本编程中使用

2.文件操作命令

「cat命令」

image-20231202200855618

1
2
cat filename #命令参数
cat < filename #输入重定向

image-20231202200950422

1
cat > filename #使用cat和输出重定向可以创建文件

image-20231202201039530

1
cat >> filename # 若文件不存在则会创建文件并将键盘输入内容输入到文件中,如存在则追加输入
1
2
cat filename > filename.copy #复制文件
cat filename1 filename2 > filename.copy #复制多个到一个

image-20231202201447583

「cp命令」

1
2
cp 文件名1 文件名2 #创建文件副本
cp filename1 filename2 目录名 #将一个或多个文件复制到指定目录

image-20231202201742015

image-20231202201803414

image-20231202201823928

命令选项:

-i:如果目标文件已经存在要求确认

image-20231202201932935

-r:将目录复制到新的目录

image-20231202202013511

「mv命令」

1
2
mv 文件名(s) 目录 #将文件移到其他目录(非文件所在目录)
mv 文件名1 文件名2 #移动并改变文件名

image-20231202204134259

image-20231202204154232

image-20231202204205615

命令选项:

-i :如果目标文件已经存在要求确认

image-20231202204258626

「ln 命令」

在已存在和新文件名之间创建链接,为已存在的文件起新名字,使用不同的名字引用同一文件

  • 在不同目录中频繁操作同一文件
  • 在每个目录中建立该文件的链接文件,通过链接文件对原文件进行操作
  • 链接文件不占用过多的磁盘空间

涉及文件存储的三个部分

image-20231202204606759

image-20231203102033260

image-20231203102140610

「wc命令」

1
2
3
4
5
6
#计算一个或者多个文件的行数、字数和字符数
wc [文件名]
#无参数默认键盘输入
wc
#统计多个文件
wc [文件名] [文件名]

image-20231203102458849

选项:

-l :统计行数

-c:统计字符数

-w:统计字数

image-20231203102721023

image-20231203102735066

3.文件名替换

image-20231203103037503

「?通配符」

代表单个字符,不可为空

image-20231203103420980

「*通配符」

文件名中的任意个字符(包括0个)

image-20231203103547461

image-20231203103559206

「[] 通配符」

包含括号中指定的任一字符

image-20231203103837817

image-20231203103924092

4.其它文件操作命令

「find命令」

在多层目录中搜索指定文件,快速查看文件指定部分

image-20231203104202314

image-20231203104329792

搜索选项:

image-20231203104352656

-name : 通过文件名查找文件

image-20231203104459455

-type: 通过文件类型查找文件

image-20231203104629325

动作选项:

image-20231203104715277

-exec:用户给出命令,对找到的文件进行操作

image-20231203104903043

-ok:用户执行命令前需要确认

image-20231203105155036

「head命令」

1
2
#显示文件头部若干行
head [filenames] #默认显示前10行

-n: 显示文件前n行

image-20231204090519119

「tail命令」

1
2
#显示文件尾部若干行
tail [filenames] #默认后10行

-n : 显示文件后n行

image-20231204090715118

「cut命令」

1
2
#从文件中取出指定域或列
cut 选项 文件名

-f : 指定域位置 ,1,3,5 1-3,5

image-20231204091146132

image-20231204091217513

-c :指定字符的位置

image-20231204091313084

-d :指定域分隔字符

image-20231204091403924

「paste命令」

1
2
# 逐行连接两个或多个文件
paste file1 file2+(s)

-d:指定具体分隔符,默认为制表符

image-20231204091627160

image-20231204091647719

「more命令」

1
2
#另页查看工具
more filename

-lines :每屏显示的行数

+line-number :从第line-number 行开始显示

+/pattern : 从包含pattern的行的上两行开始显示

-c :在显示每页之前清屏

-d :显示提示[Press space to continue, ‘q’ to quit]

image-20231204091933287

「less命令」

1
2
#分页查看工具,允许在文件中向后和向前移动
less filename

基于more 和 vi 更高级的工具

5.UNIX 内部:文件系统

image-20231204092210032

image-20231204092224326

image-20231204092310347

六、探索shell

1.启动shell

用户成功登录系统,shell启动,用户退出,shell进程结束

系统中每个用户都有一个默认的shell,在系统口令文件/etc/passwd指定

image-20231204093910980

image-20231204093928448

image-20231204094005033

2.shell的主要功能

image-20231204094146647

image-20231204094215586

「正则表达式」

image-20231204133415834

image-20231204133446879

image-20231204133543972

例子:

image-20231204133732850

POSIX标准正则表达式:

image-20231204133904964

扩展正则表达式:仅在部分程序中支持,例如 egrep、awk 等

image-20231204134201536

例子:

image-20231204134254841

正则表达式与通配符区别:
image-20231204134330146

「echo命令」

1
2
#将消息参数显示在用户终端上,没有参数输出空行
echo message

image-20231204094319850

-n :禁止换行,输出后不换行

image-20231204135140526

-e :解释反斜杠引导的转义字符(用于控制消息格式的字符,字符串的一部分,以\开始由shell解释为用户想要得到的输出)

image-20231204094459579

image-20231204133102241

image-20231204133128633

image-20231204135012223

image-20231204133213407

「消除元字符的特殊含义」

元字符:shell中具有特殊含义和用途的字符,在shell中出现时不代表字面含义

如:
image-20231204135653676

消除元字符特殊含义的元字符

image-20231204135735214

\ :后面的元字符按照字符的字面量解释

" " : 取消除$、`、\外元字符的特殊含义。双引号中保留空白字符(空格、制表和换行符等)

image-20231204140215379

’ ’ : 单引号中任何字符都失去特殊含义,单引号中保留空白字符(空格、制表和换行符等)

image-20231204140531736

3.shell变量

  • shell为响应用户请求,保存一些信息到shell变量中
  • 变量有名称,可以通过赋值来控制或定制系统环境

image-20231204140700159

「显示和清除变量:set和unset」

1
2
#查看当前使用的shell变量(环境变量和局部变量)
set

image-20231204140851846

1
2
#删除不需要的变量
unset

image-20231204141227863

赋值时,等号左右无空格

「给变量赋值」

image-20231204141317503

「显示shell变量的值」

image-20231204141350586

shell变量可用于在命令行中帮助保存复杂选项或参数

image-20231204142142961

「shell的标准变量」

image-20231204142211346

标准变量:

HOME:保存用户主目录;用于其他命令定位主目录

image-20231204142314306

PATH : 设置shell载入外部命令(程序)时所要查找的目录

image-20231204142634082

路径间的分隔符是 :

image-20231204143119671

PS1 : 设置作为命令提示符的字符串

image-20231204143511681

image-20231204143529264

image-20231204143619476

image-20231204143657006

PS2 : 多行输入一条命令时,设置第二行及以后行的提示符,默认为>

image-20231204144200378

image-20231204144144616

image-20231204144216316

SHELL:设置登录的shell的完整路径

image-20231204144325814

TERM : 设置终端类型

image-20231204144401392

4.其他元字符

「执行命令:使用重音符号 ` 」

1
# `告诉shell先执行重音符号扩起来的命令,结果替换命令行中原来扩起来的命令,也称命令替换符

image-20231204150134375

image-20231204150428115

「命令序列:使用分号 ; 」

1
2
#在一个命令行中分隔多个命令,shell从左到右执行
;

image-20231204150612587

「命令编组:使用括号 ( )」

1
2
#几个命令放在一对括号中,编为一组执行,编组命令可以被重定向
()

image-20231204150730847

「后台处理:使用 & 符号」

UNIX 是多任务系统,允许同时执行多个程序

image-20231204151039451

image-20231204151240267

「链接命令:使用管道操作符 | 」

| : 将一个命令的标准输出作为另一个命令的标准输入

image-20231204151409765

5.其他UNIX系统工具

「sleep命令」

sleep:使执行该命令的进程延时指定的秒数

「ps 命令」

ps:查看进程详细信息

image-20231204151807585

选项:

-e:显示所有进程
-f: 显示信息的完整列表(包括完整的命令行)

「kill命令」

kill :发信号给指定进程,进行进程间的通信

image-20231204152126562

1
kill [-signal] PID

image-20231204152231320

image-20231204152509331

「tee命令」

image-20231204152538886

image-20231204152651165

image-20231204152757094

注意:覆盖式输出。

选项:

-a : 追加而非覆盖

「grep命令」

在一个或多个文件中查找满足特定格式的行

image-20231204152855243

image-20231204152908288

image-20231204152945454

「sort命令」

对文件内容按照字母或者数字顺序排序

image-20231204153040406

image-20231204153056280

6.启动文件

「shell环境配置文件」

image-20231204153205012

「登录shell与非登录shell」

image-20231204153352222

「配置文件功能」

image-20231204153421749

image-20231204153515457

image-20231204153646249

image-20231204153736701

image-20231204153748650

「alias命令」

image-20231204153904462

image-20231204153958644

7.UNIX进程管理

image-20231204154021259

image-20231204154035124

image-20231204154101766

image-20231204154119984

image-20231204154131717

七、程序开发

1.程序的编辑、翻译与执行

「建立可执行程序的步骤」

  1. 编写源文件(源代码)
  2. 建立目标文件(目标代码/目标模块)
  3. 建立可执行文件(可执行代码/载入模块)

image-20231204160927261

「编译/解释程序」

image-20231204161014316

2.编译、链接C/C++程序

gcc : GNU C 编译器,Linux通用 C 语言编译器

g++:GNU C++ 语言编译器

「gcc / g++ 执行编译的步骤」

  1. 预处理:把头文件展开,去掉注释,宏替换,条件编译等;

    ​ 生成 .i 文件

  2. 编 译:将预处理后的文件转换成汇编语言

    ​ 生成 .s 文件

  3. 汇 编:由汇编语言变为目标代码(机器代码)

    ​ 生成 .o 文件

  4. 链 接:链接目标代码,生成可执行程序

image-20231204161322195

「gcc / g++编译程序」

1
gcc [选项] 源文件名

选项:

-c :只进行预处理、编译和汇编,只生成程序的目标代码文件

-o : 指定生成的可执行程序名,缺省时候生成的可执行程序名是 a.out ;语法: -o 文件名

image-20231204161547150

image-20231204161612641

3.重定向程序输出与出错信息

image-20231204161657044

image-20231204161829042

4.make工具(看不懂原理

make工具 : GNU工程化编译工具,用于编译众多相互关联的源代码文件

image-20231204161934418

image-20231204161949121

image-20231204162001606

image-20231204162333300

八、shell编程

1.UNIX shell编程语言简介

image-20231204163613672

image-20231204163747359

image-20231204163848400

前提条件:

  1. 对于使用sh命令的方法:脚本中的命令要与使用的shell兼容
  2. 对于第二种方法:要先使文件对于用户或所有者具有可执行权限

image-20231204164023952

image-20231204164102844

image-20231204164242380

image-20231204164437159

「退出shell的方法」

1
2
exit
Ctrl -d

「执行脚本」

1
2
3
sh program  #不需要执行权限,在子shell中进行,脚本文件需要与所用shell兼容
./program #要具有可执行的权限,在子shell中进行
. program #不需要可执行权限,在当前shell中执行

image-20231205100059587

2.编程基础

「命令置换 ``命令」

将一个命令的输出作为另一个命令的参数(重音符号)

1
`command`

image-20231205100259221

「读取输入 read命令」

从标准输入设备读入字符串存入变量中

多变量输入:输入中第1个字符串存入第1个变量,第2个字符串存入第2个变量,…,字符串数多于变量数,所有剩余字符存入最后一个变量

image-20231205100411909

「自定义变量」

1
变量名=变量值
  • shell不支持数据类型,赋给变量的值解释成字符串

  • 变量名遵守与文件命名同样的语法规则

  • 变量可以在shell提示符下定义并使用

生存周期:变量保存在内存中,直到脚本结束或终止

「清除变量」:

1
unset 变量名

「显示变量值」:

1
echo $变量名

「命令行参数」:

又称位置变量,用户输入命令时后面跟的数据项,空格分隔

  1. 参数传递给程序,可以改变程序行为或执行顺序
  2. 按顺序命令行参数被命名为$0、$1、…$9
  3. *命令行参数多于9个,第9个之后的被忽略,但可通过$获得

image-20231205100834762

「set 命令」

给位置变量赋值,set参数依次赋值给位置变量

image-20231205100950854

「exit」

shell内部命令,立即终止程序运行

1
exit n
  • n是退出状态,也称返回码
  • 没有提供返回码,使用shell执行最后一条命令的退出值
  • 为与其他UNIX程序/命令完成时返回一个退出状态,保持一致,编写shell脚本,返回给父进程一个退出状态

3.条件与测试语句

「if-then」

image-20231205101350833

1
2
3
4
5
6
if [ condition ]
then



fi

image-20231205101431498

「if-then-else」

image-20231205101530279

1
2
3
4
5
6
7
8
9
if [ condition ]
then



else


fi

image-20231205101603297

「if -then-eif」

image-20231205101603297

1
2
3
4
5
6
7
8
9
10
11
12
if [ condition1 ]
then

elif [ condition2 ]
then

elif [condition3 ]
then

else

fi

「test」

内部命令,它计算作为其参数的表达式的真假

  • **真返回0,假返回非0值
  • [ condition ]是test命令的一种特殊写法

image-20231205103608624

image-20231205103641272

判断数值:

image-20231205103654191

判断字符串:

image-20231205103707192

image-20231205103733801

image-20231205103751538

文件检测:

image-20231205103934119

image-20231205104022879

4.算术运算

「expr 」

image-20231205104139324

image-20231205104225736

image-20231205104242409

「let」

image-20231205104313227

5.循环

「for」

image-20231205104412482

image-20231205104428159

「while循环」

九、系统管理

1.文件系统管理

image-20231205104731672

「fdisk 命令」

image-20231205104812741

「mkfs」

image-20231205104853625

「mount」

image-20231205104922676

image-20231205104945923

「df」

image-20231205105013868

「du」

image-20231205105036834

2.存档和压缩文件

「tar」

image-20231205105131143

image-20231205105225215

image-20231205105302202

image-20231205105317906