笔记
第一章 引言
一、概述:
在第一章引言里,简单介绍了Unix的历史,包括贝尔实验室开发的Unix早期版本、AT&T System V以及Unix的其他版本,如BSD、HP UX、IBM AIX和Sun/SolarisUnix。此外,还介绍了Linux的开发及其各种发行版(包括Debian、Ubuntu、 Mint、 RedHat和Slackware),列出了适用于Linux的各种硬件平台和虚拟机,并展示了如何将UbuntuLinux同时安装到Microsoft Windows中的VirtualBox 虚拟机和VMware虚拟机上。本章还解释了Linux的启动过程(从Linux内核启动到用户登录和命令执行),描述了UaixLiun文件系统组织、文件类型和常用的Unx/Linux命令。最后,本章介绍了用户管理和维护Linu系统需执行的一些系统管理任务。
二、本书目的:
- 1.强化学生的编程背景知识
- 2.动态数据结构的应用
- 3.进程概念和进程管理
- 4.并行编程
- 5.定时器和定时功能
- 6.信号、信号处理和进程间通信
- 7.文件系统
- 8.TCP/IP和网络编程
三、Unix与Linux
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:移除目录
In oldfile newfile:在文件之间创建链接
find:搜索文件
grep:搜索文件中包含模式的行
ssh:登录到远程主机
gzip filename:将文件压缩为.gz文件
gunzip file.gz:解压.gz文件
tar -zcvf file.tgz:从当前目录创建压缩tar文件
tar -zxvf file.提供者:从.tgz文件中解压文件
man:显示在线手册
四、文件类型:
- 特殊文件:
1.字符特殊文件:字符I/O,如/dev/tty0、/dev/pts/1等。
2.块特殊文件:块I/O,如/dev/had、/dev/sda等。
3.其他类型,如网络(套接字)特殊文件、命名管道等。
符号链接文件:属于常规文件,其内容为其他文件的路径名。
如 ln -s aVeryLongFileName myLink
五、文件路径名
用“/”符合表示为根目录。
以“/”开头的路径名为绝对路径名,反之则为相对于进程当前工作目录(CWD)的相对路径名。
六、Ubuntu Linux系统管理
对于sudo命令:
出于安全原因,Ubuntu禁用了根或超级用户账户,这可防止任何人以根用户身份登录(其实也不完全是;有一个方法可杜绝这种情况,但不便透露)。sudo(“超级用户执行”)允许用户以另一个用户(通常是超级用户)的身份执行命令。
为确保用户可发出sudo,只需在sudoers文件加一行,如:username ALL(ALL) ALL
第二章 编程背景
一、了解并使用文本编辑器
三种文本编辑器
- 1.vim(Linux的标准内置编辑器)
vim有三种不同的操作模式:命令模式、插入模式和末行模式
命令模式
默认状态,用来输入命令一般,大部分按键都有特定的功能。
比如hjkl这四个键,依次表示将光标向左、下、右、上移动一个字符或一行。
通过vim filename`进入文本后就是这个状态了
插入模式
用来输入和编辑文本,对应的按键是i(insert插入)和a(add追加)
末行模式
用来退出或保存文件。
:w:保存文件;
:q:退出vim
:wq:保存并退出
:q!:强制退出,不保存,这个选择因为vim的保护机制,基本没用,想要强制退出还需要一些 WYSIWYG编辑器中常见的快捷键。
WYSIWYG(所见即所得)快捷键
Ctrl+C:终止或退出,最有用,可以代替:!q了;
Ctrl+K:删除行到缓冲区,暂时不知道怎么用这个;
Ctrl+Y:从缓冲区内容中复制或粘贴,与Ctrl+K配合使用的吧;
Ctrl+S:保存文件,大部分编辑器都有类似功能,保存。
- 2.gedit(GNOME桌面环境默认的文本编辑器)
- 3.emacs(可以在多个不同平台上运行)
了解如何使用emacs
二、编程
了解全局变量、局部变量、静态变量、自动变量和寄存器变量等等的作用:
全局变量在函数外定义。局部变量在函数内定义。全局变量具有唯一性,并且只有一个副本。静态全局变量仅对定义它们的文件可见。非静态全局变量则对同一程序的所有文件都可见。全局变量可以初始化,也可以不初始化。初始化的全局变量在编译时赋值。未初始化的全局变量在程序执行开始时清零。局部变量只对定义它们的函数可见。默认情况下,局部变量是自动变量,它们在函数调用时出现,按逻辑在函数退出时消失。对于寄存器变量,编译器试图把它们分配在CPU寄存器中。由于自动局部变量在函数调用前没有分配内存空间,因此在编译时不能初始化。静态局部变量具有永久性和唯一性,可以初始化。此外,C语言还支持易失性变量,这些变量用作内存映射I/O的地址,或者通过中断处理程序或多个执行线程来访问的全局变量。易失性关键字可阻止C编译器优化用这些变量进行操作的代码。
汇编代码与目标代码
静态与动态链接
静态库和共享库;动态链接库。
静态链接库:
gcc -c mysum.c
ar rcs libmylib.a mysum.o
gcc -static t.c -L. -lmylib
a.out
以上代码是一个使用静态库的过程,-L.表示指定当前目录,可修改为其它,-l表示指定链接库mylib,其中,并未指定前缀lib和后缀.a。
动态链接库:
gcc -c -fPIC mysum.c
gcc -shared -o linmylib.so mysum.o
gcc t.c -L -mylib
export LD_LIBRARY_PATH=./
a.out
- 可执行文件格式:
1.二进制可执行平面文件:
2.a.out可执行文件:
3.ELF可执行文件:
- a.out相关知识点:
1.文件头:包含了a.out文件的加载信息和大小,tsize表示代码段大小,dsize表示包含初始化的全局变量和初始化的静态局部变量数据段的大小,bsize表示了未初始化的全局变量和未初始化的静态局部变量的bss段的大小,total_size表示加载的a.out文件的总大小。
2.代码段:也叫正文段,包含了程序的可执行代码。从标准的C启动代码crt0.o开始,这一代码调用的是main()函数,这也是为啥一个C程序只能有一个main()函数。
3.数据段:包含了初始化全局变量和初始化静态局部变量的数据。
4.符号表:可选部分,仅在运行调试时有用。
32位,64位GCC在运行时堆栈使用情况
C语言程序中的函数调动
这部分主要作为知识拓展,可以简单的概括为crt0.o -> main() -> A(par_a) -> B(par_b) -> C(par_c)
三、GDB调试工具
GNU调试工具(GDB)是一个交互式调试工具,可以调试用C、C++和其他几种语言编写的程序
在程序执行时,GDB以一个黑色三角标志显示执行进度关于使用调试工具的建议:
程序开发的最佳方法是仔细设计程序的算法,然后根据算法编写程序代码。过度依赖调试工具通常和适得其反,因为这可能浪费更多的时间。
对于我来说最有收获的就是学会了如何使用vim,emacs,以及如何编译代码,增强了我的动手能力。
问题与解决思路
1.VirtualBox调整分辨率
问题:
在使用虚拟机过程中,根据教材指导对VirtualBox分辨率的调整,发现输入“xdiagnose”后没有成功。
解决思路:
我认为可能是整个过程中有步骤没有完善,所以重复实验,发现任然不行,我就去网上查找资料,发现首先要先输入sudo apt-get install xdiagnose安装xdiagnose,因为首次安装系统大部分没有这个软件。安装完了之后输入sudo xdiagnose并输入密码,会出来几个选项,勾选之后点击apply,再输入sudo reboot重启才算真正的完成。
2.虚拟机的Ubuntu安装
问题:安装出现错误
解决办法:
重启电脑,按下F2快捷键进入BIOS界面;
按下F7
选择 高级/advanced
选择CPU配置/CPU Configuration
找到 Intel Virtualization Technology,Disabled->Enabled(禁用->开启)
按F10保存重启
3.虚拟机内vim,gcc,emacs的安装
问题:安装出现错误,安装不了。
解决办法:上网查询发现需要先输入sudo apt-get install ctags代码,安装成功后再依次安装其余程序即可。