第一周学习笔记

第一章 引言

1.1-1.11关于unix和Linux的介绍以及本书的受众和独到之处

1.12虚拟机上的Linux

分别介绍了virtualbox和vmware两款软件,在大一的时候我们已经安装了virtualbox,但我在使用的同时,尝试安装了vmware,安装中遇到了不少的问题:

  • 安装过程中直接选择安装Ubuntu系统导致在进入Ubuntu操作页面时安装增强工具的图标是灰色的,解决办法是进入设置,配置CD/DVD(SATA),在VMware Workstation安装目录下找到linux.iso文件,并选中,在Ubuntu下多了个镜像文件夹VMware Tools,解压到downloads中,再进入终端,输入sudo ./vmware-install.pl,再启用共享文件
  • 再者,是网络异常,ifconfig检查到是网卡出现问题,需要手动重新配置,输入sudo dhclient,即可正常上网,但是此方法下,每次重启都需手动配置,检查原因,systemctl status NetworkManager发现dhclient正常运行,但NetworkManager未与ens33连接, nmcli device set ens33 managed yes即可

1.13-1.14使用 Linux和ubuntu

介绍了大致功能以及命令行代码

  • Linux内核映像位于/boot目录中,可启动的Linux内核映像 名为 vmlinuz-generic-VERSIONNUMBER
  • Ubuntu中sudo apt-get install包安装额外的软件包
  • 安装Ubuntu时,需要输入用户名和密码来创建一个默 认主目录为“/home/username”的用户账户
  • Ctrl+ALT+T组合键打开一个伪终端。右键点击 “Term”(终端)图标,选择“lock to launcher”(锁定到启动器),锁定菜单栏中的“Term”(终 端)图标。随后,在菜单栏中选择terminal->neW terminal (终端->新终端)来启动新终端。 每个新终端运行一个sh,提示用户执行命令。
  • PATH*$PATH:./ 为在PATH下运行程序
  • gcc -m32 t.c # compile t.c into 32-bit code
  •  

     

     

     

  • 树的每个节点都由以下表单的路径名指定: /a/b/c/d OR a/b/c/d
  • “/”开头的路径名为绝对路径名,反之则为相对于进程当前工作目录(CWD)的相对路 径名。

1.151.15.3Unix/Linux 命令

•Is: Is dirname:列出CWD或目录的内容。 •cd dirname:更改目录。 •pwd:打印CWD的绝对路径名。 •touch filename:更改文件名时间戳(如果文件不存在,则创建文件)。 •cat filename:显示文件内容。 •cp src dest:复制文件。 •mv src dest:移动或重命名文件。 •mkdir dirname:创建目录。 •rmdir dirname:移除(空)目录。 •rm filename:移除或删除文件。 ・Inoldfile 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.16.3 sudo命令

能够使用sudo.用户名必须保存在/etc/sudoers文件中。为确保用户能够发出sudo,只需在 sudoers文件中添加一行, Linux建议只使用特殊命令visud。来编辑该文件,该命令可週用vi编辑器,但需要检査和验证

第二章 编程背景

2.1-2.2介绍各种编辑器

  • vim
  • gedit
  • emacs

2.3程序开发

  • 创建源文件
  • 用gcc把源文件转换成二进制可执行文件
  • gcc是什么? gcc是一个程序,它包含三个主要步骤
  1. 将C源文件转换为汇编代码文件
  2. 把汇编代码转换成目标代码 每台计算机都有自己的机器指令
  3. 链接 -个程序可能包含多个文件,这些文件相互依赖
  • 动态库与静态库

    静态链接中,链接器将所有必要的库函数代码和数据纳入a.out文件中

    在使用共享库的动态链接中,库函数未包含在a.out文件中,但是对此类函数的调用以指令形式记录在a.out文件中。

动态链接的主要优点是: •可减小每个a.out文件的太小. •许多执行程序可在内存中共享相同的库函数 -修改库函数不需要重新编译源文件。

2.3.3 可执行文件格式

  • 二进制可执行平面文件
  • a.out可执行文件
  • ELF可执行文件

2.3.4 a.out文件的内容

  • 文件头、代码段、数据段、符号表

2.3.5 程序执行过程

  1. 读取a.out文件,一标记字符串作为命令行参数
  2. sh从总大小中分配一个内存区给执行映像
  3. sh放弃旧映像,开始执行新映像
  4. 执行从crt0.o开始,调用main,将argc和argv作为采纳数传递给main

2.3.6 程序终止

  1. 正常终止
  2. 异常终止(解决办法:Ctrl + C )

2.4 C语言中的函数调用

2.4.1-2.4.3 32位和64位GCC中的运行时堆栈使用情况

2.5 汇编语言与C语言

2.6 链接库

  • 静态链接库
  • 动态链接库

2.7 makefile

  • make是一 个程序,它按顺序读取makefile或Makefile,以自动有选择地执行编译链接。
  • makefile 格式
  • make文件有一系列目标项、依赖项和规则组成
  •  

     

  • 当make程序读取makefile时,它通过比较依赖项列表中源文件的时间戳来确定要构建 哪些目标项。如果任何依赖项在上次构建后有较新的时间戳,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 变量=值 //变量赋值

C语言相关知识:

2.9 C语言结构体

2.10链表处理

2.11 树

2.12 二叉树

2.13 编程项目:Unix/Linux文件系统树模拟器