第一章
什么是Linux?
- Linux 是 UNIX 操作系统的一个克隆;
- 它由林纳斯 · 本纳第克特 · 托瓦兹从零开始编写,并在网络上众多松散的黑客团队的帮助下得以发展和完善;
- 它遵从可移植操作系统接口(POSIX)标准和单一 UNIX 规范标准;
- 具有现代成熟的 UNIX 操作系统的所有功能,包括真正的多任务、虚拟内存、共享库、按需加载、规范的内存管理等;
- 最初基于32位x86的PC开发,现在包括32位和64位版本的处理器。
Linux的诞生、发展依赖着五个重要支柱?
- UNIX 操作系统;
- MINIX 操作系统;
- GNU计划;
- POSIX 标准;
- Internet网络。
如何理解:Unix –> minix –> (linux) [posix] <- gnu
Unix 作为一个原始的有影响力的操作系统,启发了许多后续的系统,包括用于教学的 minix、基于 Unix 的开源操作系统 Linux(它遵循 POSIX 标准以确保兼容性),以及 GNU 项目(它提供了许多与 Unix 兼容的工具和库,通常与 Linux 内核一起使用以形成完整的操作系统)。
POSIX
- POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX),POSIX标准定义了操作系统应该为应用程序提供的接口标准。其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945;
- POSIX的诞生和UNIX的发展是密不可分的,IEEE最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性;
- POSIX 并不局限于 UNIX。许多其它的操作系统,例如 DEC OpenVMS 支持 POSIX 标准。
Linux操作系统的版本
- Linux 内核;
- Linux 发行版:Linux发行版是一个由Linux内核、大量基于Linux的应用软件和工具软件整合而成的操作系统。典型的Linux发行版包括Linux内核、GNU工具和库,附加软件、文档、窗口系统、桌面环境、软件包管理器;
- 把 Red Hat、Ubuntu、Debian等直接说成 Linux 其实是不确切的,它们是 Linux 的发行版本,更确切地说,应该叫作“以Linux为核心的操作系统软件包”。
Linux的应用领域?
- 传统企业级服务器领域;
- 智能手机、平板电脑、上网本等移动终端;
- 物联网、车联网等应用场景;
- 面向日常办公的桌面应用场景;
- 云计算、区块链、大数据、深度学习等应用场景。
第二章
- Linux发行版为用户提供了GUI(图形用户界面)。GUI有效降低了普通用户使用Linux的难度。而诸如排版、制图、多媒体等代表性的桌面应用,更离不开GUI的支持。
X Window是什么?
- X Window采用C/S架构,基于X协议,通过网络进行图形界面存取。
- 因此X window是Linux操作系统一个可选的组件。
- 它是 UNIX 与类 UNIX 系统最流行的窗口系统;
- 它是一个跨网络与跨操作系统的窗口系统,可用于几乎所有的现代操作系统。
与微软Windows的区别?
- X Window: 采用C/S架构,基于X协议,通过网络进行图形界面存取。因此X window是Linux操作系统一个可选的组件;
- 微软Windows: 微软Windows的图形环境与内核紧密结合,图形环境直接访问微软windows内核。
X Window 架构?
- 由X 服务器(X server)、X 客户端(X client)和通信协议(X protocol)三部分组成;
- 基于X协议。1987 年发布了该协议的第11 版。
- X Window System也被称为 X11 。
Unity 桌面环境(了解)
- Unity 是基于 GNOME 桌面环境的用户界面,由Canocical公司开发,主要用于 Ubuntu 操作系统;
- 与 GNOME 及KDE 不同,Unity并不是一个完整完整的桌面环境,它主要实现了桌面环境的面板部分,其他桌面环境要素仍然使用现有方案;
- Unity桌面环境与GNOME桌面环境在外观上存在较大差异;
- Unity 被设计成的可更高效地使用屏幕空间,与传统的桌面环境相比所消耗的系统资源更少。
第三章
Shell简介
Shell是Linux操作系统的用户界面。Shell提供了用户与系统内核进行交互操作的一种接口。Shell调用了系统内核的大部分功能来执行程序。
- 解释用户在命令行提示符下输入的命令;
- 提供个性化的用户环境,通常由Shell初始化配置文件实现;
- 编写Shell脚本,实现高级管理功能。
history 命令
- 使用history命令会列出所有使用过的命令并编号;
history #不加参数,列出近期的命令记录
history 10 #查看最近的10条历史命令记录
history -c #清空历史记录
grep命令
grep
是一个强大的文本搜索工具,它允许你在文件中搜索特定的字符串或模式,并将匹配的行打印到标准输出。
grep 'hello' file.txt
这将在 file.txt
文件中搜索包含 “hello” 的行,并将它们打印到标准输出。
管道
Shell程序可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道。
管道符:|
#在 /etc/passwd 文件中搜索包含 "zp" 的行
cat /etc/passwd | grep zp
重定向
输入/输出重定向就是改变输入输出的方向。
输出重定向
输出重定向是指命令的结果不再输出到显示器上,而是输出到其他地方,一般是文件中。
#将某个命令执行的输出保存到文件中
[命令] > [文件] #输出重定向,文件中已存在相同的文件,那么覆盖源文件中的内容。
[命令] >> [文件] #输出追加重定向
输入重定向
输入重定向就是改变输入的方向,不再将键盘作为命令输入的来源,而是使用文件作为命令的输入。
#输入重定向
[命令] < [文件] #将文件的内容分作为命令的输入
#例子:
#wc 是一个常用的 Unix/Linux 命令,用于计算字节数、字数和行数。
#-l 选项指定了 wc 只计算行数。
wc -l < /etc/profile #27
#输入追加重定向
#当前标准输入来自命令行的一对分隔符之间的内容。
[命令] << [分隔符]
> [文本内容]
> [分隔符]
#例子:
wc -l <<EOF
> 1111111
> 2222222222222222
> 333333333333
> 44444444444444
> EOF #4
错误重定向
错误重定向,即将某一命令执行的出错信息输出到指定文件中。
[命令] 2> [文件]
[命令] 2>> [文件] #输入追加重定向,将错误信息添加到已存在的文件
命令排列
命令排序:是指希望一次执行多个命令。
#使用 ";" 连接时,先执行命令1,不管命令1是否出错,接下来都会执行命令2
命令1; 命令2
#使用 "&&" 连接时,只有当命令1运行完毕并返回正确结果后,才会执行命令2
命令1 && 命令2
#使用 "||" 连接时,只有当命令1执行不成功(产生一个非0的退出码)时,才能执行命令2
命令1 || 命令2
命令续行
命令续行:通常指的是将一个长命令或语句分成多行来输入或编写的功能。
#转义符
#对特殊字符进行转义:
echo "\$zp" #输出结果$zp
#命令续行
#再反斜杠后面紧跟按回车键,表示下一行是当前行的续行。
mv \
> zp \
> zpdir #"mv zp zpdir"表示将zp文件移动到zpdir目录中
pidof命令
pidof
命令用于查找与给定程序名相关的所有进程的进程ID(PID);
命令替换
可以将一个命令的结果作为命令的参数,这就是命令替换
#使用 "$()"
命令1 $(命令2)
#使用 "``"
命令1 `命令2`
#例子
vi & #以后台方式启动vi进程
kill -9 $(pidof vi) #通过命令替换,查找并杀死vi进程
#解释:
#pidof vi 会返回所有与 vi 或 vim 相关的进程的PID
#$() 是一个命令替换,它会执行括号内的命令,并将其输出替换到当前位置
#$(pidof vi) 会被替换为与 vi 或 vim 相关的所有进程的PID列表
命令别名
命令别名(alias):允许用户为命令或命令组合定义简短的替代名称。这可以提高命令行界面的效率,特别是当你需要频繁执行复杂的命令或命令组合时。
#查看已定义的别名
alias
#创建别名
alias [别名]=[需要定义别名的命令] #如果命令中有空格,需要使用双引号""
#使用别名——与普通命令使用方法一样
#取消别名
unalias [别名]
Linux命令行帮助系统
#使用man命令获取帮助 —— 用于查看Linux操作系统的手册,主要资源位于/user/share/man
man [选项] [名称]
#使用info命令获取帮助 —— 具有更强的交互性
info 命令名称
#使用--help选项获取帮助 —— 可以显示命令的使用方法和命令选项的含义。
命令名称 --help