《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏
一.知识点归纳
第一章 引言
1.本书目标
- 编程背景知识
- 详细介绍了程序开发步骤,包括汇报器、编译器、链接器等。
- 动态数据结构的应用
- 字符串标记化、搜索树节点、插入和删除树节点等。
- 进程概念和进程管理
- fork()、exit()、wait()等
- 并发编程
- Pthreads 编程、线程连接、互斥量等
- 定时器和定时功能
- 功能原理与编程项目
- 信号、信号处理和进程间通信
- 进程中通信机制,任务间交换信息
- 文件系统
- 存储设备、Unix\Linux内核中的文件系统支持、文件操作的系统调用、库I/O函数等。
- TCP/IP和网络编程
- TCP\IP协议、套接字API、UDP和TCP套接字编程,以及网络计算中的服务器-客户机模型。
2.Unix
-
Unix(Thompson 和Ritchie 1974,1978)是一种通用操作系统。该系统诞生于20世70年代早期,由肯·汤普森(KenThompson)和丹尼斯·里奇(DennisRitchie)采用贝尔实验室的PDP-11 微型计算机开发。1975 年,贝尔实验室向公众发布了 Unix,称为V6 Unixo该Unix系统的最初使用者以各大高校和非营利性机构为主。这一早期版本,连同有关C编程语言的经典著作(Kernighan 和Ritchie1988),在操作系统领域掀起了 Unix革命,其影响一直持续至今。
-
AT&T Unix
-
Berkeley Unix
-
HP Unix
-
IBM Unix
-
Sun Unix
3.Linux
-
Linux(Linux2017)是一个类Unix系统。它最初是林纳斯·托瓦兹(Linus Torvalds)
在1991年为基于Intelx86的个人计算机开发的一个实验性内核。后来,世界各地的人都开
始加人Linux的研发队伍。Linux的一个重要里程碑发生在20世纪90年代末,当时,它与 GNU(Stallman2017)相结合,纳入了许多GNU软件,如GCC编译器、GNUemacs编辑器和bash等,极大地促进了Linux的进一步发展。不久之后,Linux实现了访问互联网的 TCP/IP协议族,并移植了支持 GUI的X11(X-window),成为一个完整的操作系统。
Linux 包含其他Unix系统的许多特性。在某种意义上,它是由各种最为流行的 Unix系统组合而成。在很大程度上,Linux是兼容 POSIX标准的。Linux已被移植到许多硬件体系结构中,如摩托罗拉、SPARC和ARM 等。主要的Linux平台仍然是基于Intel x86 的个人计算机,包括广泛可用的台式机和笔记本电脑。此外,Linux可免费使用,且易于安装,因此,颇受计算机科学专业的学生欢迎。 -
Debian Linux
-
Ubuntu Linux
-
Linux Mint
-
基于RPM的Linux
-
Slackware Linux
4.Unix/Linux命令
-
Unix/Linux命令
-
ls:ls dirname:列出CWD或目录的内容。
-
cd dirname:更改目录。
-
pwd:打印CWD的绝对路径名。
-
touch filename:更改文件名时间戳(如果文件不存在,则创建文件)。
-
cat filename:显示文件内容。
-
cp src dest:复制文件。
-
mv src dest:移动或重命名文件。
-
mkdir dirname:创建目录。
-
rmdir dirname:移除(空)目录。
-
rm filename:移除或删除文件。
-
ln oldfile newfile:在文件之间创建链接。
-
find:搜索文件。
-
grep:搜索文件中包含模式的行。
-
ssh:登录到远程主机。
-
gzip filename:将文件压缩为.gz文件。
-
gunzip file.gz:解压.gz文件。
-
tar -zcvf file.tgz .:从当前目录创建tar文件。
-
tar -zxvf file.tgz .:从.tgz文件中解压文件。
-
man:显示在线手册页。
-
zip file.zip filenames:将文件压缩为.zip文件。
-
unzip file.zip:解压.zip文件。ls:ls dirname:列出CWD或目录的内容。
-
cd dirname:更改目录。
-
pwd:打印CWD的绝对路径名。
-
touch filename:更改文件名时间戳(如果文件不存在,则创建文件)。
-
cat filename:显示文件内容。
-
cp src dest:复制文件。
-
mv src dest:移动或重命名文件。
-
mkdir dirname:创建目录。
-
rmdir dirname:移除(空)目录。
-
rm filename:移除或删除文件。
-
ln oldfile newfile:在文件之间创建链接。
-
find:搜索文件。
-
grep:搜索文件中包含模式的行。
-
ssh:登录到远程主机。
-
gzip filename:将文件压缩为.gz文件。
-
gunzip file.gz:解压.gz文件。
-
tar -zcvf file.tgz .:从当前目录创建tar文件。
-
tar -zxvf file.tgz .:从.tgz文件中解压文件。
-
man:显示在线手册页。
-
zip file.zip filenames:将文件压缩为.zip文件。
-
unzip file.zip:解压.zip文件。
第二章 编程背景
1. 文本编辑器
-
vim
-
命令模式:用于输入命令
- h:将光标向左移动一个字符
- l:将光标向右移动一个字符
- j:将光标向下移动一行
- k:将光标向上移动一行
-
插入模式:用于输入和编辑文本
- i:插入文本
- a:追加文本
-
末行模式:用于保存文件并退出
- :w:写入(保存)文件
- :q:退出vim
- :wq:保存并退出
- :q!:不保存更改,强制退出
-
-
WYSIWYG
- Ctrl+C:中止或退出
- Ctrl+K:删除行到缓冲区
- Ctrl+Y:从缓冲区内容中复制或粘贴
- Ctrl+S:保存已编辑文本等
-
gedit
-
emacs
2.程序开发
-
创建源文件
-
用gcc把源文件转换成二进制可执行文件
-
静态与动态链接库
-
可执行文件格式
- 二进制可执行平面文件
- a.out 可执行文件
- ELF可执行文件
-
a.out文件
- 文件头
- tsize、dsize、bsize、total_size
- 代码段
- 数据段
- 符号表
- 文件头
-
程序执行过程
- 读取a.out文件头,以确定所需的总内存大小。
- sh从总大小中分配一个内存区给执行映像。
- sh放弃放弃旧映像,开始执行新映像。
- 执行从crt0.o开始,调用main()。
-
程序终止
- 正常终止
- 异常终止
3.C语言程序与汇编代码的链接
- 用汇编代码编程
- 将C代码编译成汇编代码
- 汇编代码说明
- 用汇编语言实现函数
- 从汇编中调用C函数
4.链接库
- 动态链接库
- 静态链接库
5.makefile
-
make工具是一个程序,它按照顺序读取makefile,以自动有选择的执行编译链接。
-
一个make文件由一系列目标项、依赖项和规则组成
目标项 依赖项列表 target: file1 file2 ... fileN 规则 < tab > command1 < tab > command2 < tab > other command
-
-
当make程序读取makefile时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项
5.GDB调试工具
- GDB调试工具是一个交互式调试工具,可以调试用C、C++和其他几种语言编写的程序。
- GDB是一个功能强大的调试工具,使用非常简单,但应该注意,所有调试工具只能提供有限的帮助,在某些情况下用处不大,所以程序开发的最佳方法是仔细设计程序的算法,然后根据算法编写程序代码。
6.C语言结构体
- 结构体和指针
- 类型转换
- 链表
- 树和二叉树
二. 问题与解决思路
问题1:所下载的Ubuntu20.04不是光盘,无法继续安装
解决方法:网上搜索教程,找到Ubuntu20.04的光盘
问题2:安装完显示的是英文版
解决方法:根据汉化教程,实现汉化配置
三. 实践内容与截图,代码链接
虚拟机以及Ubuntu的安装与配置
在终端运行代码
四.收获的内容
通过这次对书本第一第二章的学习,我对Linux/Unix有了一定的了解,同时也在虚拟机中安装了Ubuntu,并成功在终端中完成了新建用户,实现C语言代码等内容。