学习笔记1

学习笔记1

第一章

  • 1.1~1.11
    这些内容主要介绍了linux和unix的一些历史和基本特征,现在汇总如下
    Linux和Unix都是操作系统家族,它们有一些联系和区别:

联系:

  1. Linux是基于Unix设计的操作系统,因此它们有一些共同的概念和结构。
  2. Linux借用了Unix的许多命令和工具,因此在使用上有一些相似之处。
  3. Linux和Unix都是多用户、多任务的操作系统,可以在服务器和个人计算机上运行。

区别:

  1. Unix是最早的商业化操作系统家族,诞生于1960年代,而Linux则是在1991年由Linus Torvalds创建的开源操作系统。
  2. Unix由多个厂商在不同的版本中进行开发和发布,而Linux由众多开发者组成的社区开发和维护。
  3. Unix需要购买许可才能使用,而Linux是免费的开源软件,可以自由获取和修改。
  4. Unix通常在大型服务器和工作站上使用,而Linux不仅可以在服务器上使用,还可以在个人计算机和嵌入式设备上使用。
  5. Unix的标准是Single UNIX Specification(SUS),而Linux没有一个统一的标准,但遵循POSIX标准。
  • 1.12 重点介绍了linux在virtualbox里的应用,由于在大一我们已经在娄老师的教导下应用完成了virtualbox里的ubuntu系统安装。在这学期 我只是将其换成了最新版本的vmware,并没有做太大改变。
  • 1.13 linux的使用
    本小节重点介绍了linux的基础知识和重点概念
Linux内核位置:/boot
Linux内核映像的三部分:BOOT|SETUP|linux kernel
Linux的三个文件流:stdin、stdout和stderr


linux常用命令

cd:更改目录
exit:退出
logout:注销
sudo apt install:安装应用程序
sudo:使用root权限执行
ls:lsdirname:列出CWD或目录的内容。
pwd:打印CWD的绝对路径名。
touch filename:更改文件名时间戳(如果文件不存在,则创建文件)。
cat filename:显示文件内容。
cp src dest:复制文件。
mv src dest:移动或重命名文件。
mkdir dirname:创建目录。
rmdir dirname:移除(空)目录。
rm filename:移除或删除文件。
find:搜素文件
grep:搜索文件中包含模式的行。
ssh:登录到远程主机
tar-zcvffile.tgz:从当前目录创建压缩tar文件。
tar-zxvffile.tgz:从tgz文件中解压文件。
man:显示在线手册页。
zip file.zip filenames:将文件压缩为.zip文件。
unzip file.zip:解压.zip文件。
history:查看历史命令。
!数字:执行第"数字"条命令。
  • 1.15Unix/Linux文件系统组织
  • 1.15.2 绝对路径和相对路径
绝对路径和相对路径是在Linux中常见的路径表示方式,它们有一些不同的特点:

**绝对路径**:
1. 绝对路径是指从根目录开始的完整路径。
2. 根目录在Linux中用斜杠(/)表示。
3. 绝对路径可以唯一地标识一个文件或目录。
4. 例如,/home/user/Documents 表示根目录下的home目录下的user目录下的Documents目录。

**相对路径**:
1. 相对路径是相对于当前工作目录的路径。
2. 当前工作目录是指用户当前所处的目录。
3. 相对路径不能唯一地标识一个文件或目录,它的解析依赖于当前工作目录。
4. 例如,如果当前工作目录是/home/user,Documents 相对路径表示当前工作目录下的Documents目录。

总结:
1. 使用绝对路径可以准确地定位文件或目录的位置,不受当前工作目录的影响。
2. 使用相对路径可以相对简洁地表示文件或目录的位置,但需要注意当前工作目录的影响。
3. 在命令行或脚本中,可以使用cd命令改变当前工作目录,进而影响相对路径的解析结果。

chatgpt知识点提问
https://chat.openai.com/share/4ab0970e-0683-472f-958e-0889f53dbf57(回答链接)





第二章 编程背景

  • 2.1 文本编辑器
    Linux中,文件编辑、文本编辑是必不可少的基本操作。首先学习vim,即使用命令行进行文本编辑,若熟练掌握其中的命令,就可以很快完成。gedit:类似于Windows中的记事本,是一个简单的图形界面文本编辑器。emacs:更加强大,具有更多功能的图形界面文本编辑器。
  • 2.2使用文本编辑器
    使用3个窗口的vim来开发程序:分别用来编写代码、调试、运行。

上述为网上找到的vim较为清晰的键位图

  • 2.3 程序开发步骤(上课课程重点讲述)
  • ubuntu使用快捷键和技巧
在Ubuntu中,有许多有用的快捷键和使用小技巧,它们可以提高你的效率和操作体验。以下是一些常用的Ubuntu快捷键和小技巧的总结:

**快捷键**:

1. Ctrl + Alt + T:打开终端。这是快速访问终端的常用快捷方式。

2. Ctrl + Alt + Delete 或 Ctrl + Alt + Esc:打开系统监视器,允许你查看和管理正在运行的进程和系统性能。

3. Alt + Tab:切换应用程序。按住Alt键,然后按Tab键,可以快速切换正在运行的应用程序。

4. Ctrl + W:关闭当前应用程序的窗口。

5. Ctrl + Alt + L:锁定屏幕,以保护你的计算机。

6. Ctrl + Shift + T:在终端中打开新的标签页。

7. Ctrl + C 和 Ctrl + V:复制和粘贴文本。

8. Ctrl + Z:暂停正在运行的进程,可以使用 `fg` 命令恢复。

**使用小技巧**:

1. 应用程序搜索:按下Super键(通常是Windows键)并开始输入应用程序名称,以快速启动应用程序。

2. 工作区:Ubuntu支持多个工作区,你可以使用Super + S来查看和管理它们。这有助于组织你的任务。

3. 截屏工具:Ubuntu自带了一个强大的截屏工具,按下Print Screen键或Super + Shift + S来截取屏幕内容。

4. 自定义快捷键:你可以在系统设置中自定义自己的快捷键,以适应你的工作流程。

5. 命令行技巧:学习一些基本的命令行技巧,如`ls`(列出文件和目录)、`cp`(复制文件和目录)、`mv`(移动文件和目录)和`rm`(删除文件和目录)。

6. 软件包管理:使用`apt`命令来安装、更新和卸载软件包。例如,`sudo apt update`用于更新软件包列表,`sudo apt install package-name`用于安装软件包。

7. 备份:定期备份你的数据,可以使用工具如Deja Dup或rsync来自动化这个过程。

  • 程序开发具体流程
  1. IDE
  • 代码文档编辑工具:vim,gedit,emacs,vscode
  • c语言编译工具:gcc
  • c语言调试工具:gdb
  • 项目编译、管理:make
  1. 编译过程
    ESC

  2. 注意
    程序编写注意:**高内聚,低耦合 **,利用面向对象的思想,将对象所做的函数和功能进行封装,同时,使用多种方式降低代码重写率,使用函数,将程序拆分为小部分,逐个完成。
  • chatgpt知识点提问2




  • 2.4-2.5
    此段主要介绍C程序在执行过程中的底层细节。
  • 2.6链接库


在Linux中,链接库(也称为共享库或动态链接库)是一种可执行程序使用的重要组件,它们包含了程序在运行时需要的函数和数据。链接库有两种主要类型:静态链接库和动态链接库。

1. **静态链接库**:
   - 静态链接库是一种在编译时将库的代码和数据与可执行文件链接在一起的库。这意味着所有的库函数和数据都被复制到可执行文件中。
   - 优点是可执行文件独立于系统上安装的库,因此可以在不同的系统上运行,前提是目标系统支持相同的CPU架构。
   - 缺点是可执行文件的大小较大,而且无法在运行时更新库的版本,因此需要重新编译可执行文件以更新库。

2. **动态链接库**:
   - 动态链接库是一种在运行时加载的库,它们不会被复制到可执行文件中,而是在需要时从系统的共享库中加载。
   - 这使得可执行文件更加轻巧,因为它们不包含库的实际代码。
   - 优点是系统上的多个程序可以共享相同的库,节省了内存和磁盘空间,并且库的更新可以在不重新编译程序的情况下进行。
   - 缺点是如果系统上缺少所需版本的共享库,程序可能无法运行。因此,库的版本管理变得非常重要。

在Linux系统中,常见的共享库文件通常以 `.so` 扩展名结尾,例如 `libexample.so`。

以下是一些与Linux链接库相关的重要概念:

- ldd命令:用于查看可执行文件依赖的共享库列表。

- rpath和runpath:用于指定可执行文件在运行时查找共享库的路径。

- LD_LIBRARY_PATH环境变量:用于指定系统在哪些路径中查找共享库。

- soname(共享库名称):是共享库的内部标识符,用于确保程序可以正确链接到所需的库。

共享库在Linux系统中扮演着重要的角色,它们使得程序的开发、维护和分发更加灵活和高效。
  • 2.7 makefile
    makefile用来管理和编译项目。makefile是一个文件,在使用make命令时,会读取这个文件并对项目按照文件内容进行编译。make文件由一系列目标项、依赖项、规则组成。

  • 2.8 GDB调试工具
    gdb断点设置指令总结:

(gdb)break 7 //以行号设置断点
(gdb)break function_name //以函数名设置断点
(gdb)clear 行号 //删除这行的断点
(gdb)clear 函数名 //删除该函数的断点
(gdb)delete breakpoints n //删除第n次(指定编号)设置的断点
(gdb)clear //删除程序中所有的基于行设置的断点
(gdb)delete //删除程序中所有的断点
(gdb)r //执行程序
(gdb)n //单步调试
(gdb)c //执行到下一个断点
(gdb)print 变量或表达式 //打印变量或表达式当前的值。
(gdb)print 变量=值 //对变量进行赋值
(gdb)whatis 变量或表达式 //显示变量类型
(gdb)set variable 变量=值 //变量赋值
  • 2.9-2.12数据结构与算法
    书中介绍了C结构体、指针等C语言基础内容,同时介绍了数据结构与算法的知识。我们学习过数据结构课程,以下为重要数据结构和算法知识。
    链表:是一种线性结构,由数据和指针连接而成,有单链表、双向链表、循环链表等类别。有多种操作,其中插入节点、删除节点复杂度为O(1),读取一个节点复杂度为O(n),在C语言中可使用结构体和指针完成。
    树:树形结构,每个节点有一个父节点和多个子节点,其中最简单的树为二叉树,除根节点和叶节点外,每个节点有一个父节点,两个子节点,二叉树应用广泛,有深度优先遍历、广度优先遍历和层序遍历,也可用二叉树表示普通树,应用有哈弗曼编码、二叉平衡搜索等。

问题与解决思路

在学习gcc编译器的时候 不太理解 于是询问了chatgpt




实验过程截图

  • 创建文件和打开窗口

  • 头文件编写
  • 程序运行


posted @ 2023-09-10 14:13  入林寻梨花白  阅读(6)  评论(0编辑  收藏  举报