1.man:
查看帮助文档:man+关键词
man -k:
用来搜索,结合管道使用。html
man -k k1 | grep k2 | grep 2
搜索同时含有k1和k2,且属于系统调用。linux
最后的数字表明帮助手册中的区段,经常使用的123,分别以下:编程
1.Linux 2.系统调用 3.c语言
2.cheat
提供显示Linux命令使用案例,包括该命令全部的选项和简短但尚可理解的功能。
cheat是很是好用的“打小抄”搜索工具
eg:
cheat lsvim
3.grep 用来查找关键字,全文搜索,且能够直接查找文件内的内容缓存
greep -n 显示匹配的行号
greep -r 递归查找安全
eg:若是想查找某个宏,咱们已知宏保存在include文件夹中:
grep -nr XXX /usr/include(XXX注意要替换为所要找的宏)函数
三种经常使用模式及其转换:
普通→插入: i/a
普通→命令行: “:”
插入/命令行→普通: Esc 或 Ctrl + [工具
经常使用操做:
vim 文件名:进入vim,还可新建文件
命令行模式下 :wq 表示保存并退出学习
一、GCC
gcc流程:测试
一、预处理:gcc会调用预处理程序cpp,由它负责展开在源程序中定义的宏 gcc -E hello.c -o hello.i 二、编译:翻译成汇编文件 gcc –S hello.i –o hello.s 三、汇编:将hello.i编译为目标代码(二进制代码) gcc -c hello.s -o hello.o 四、连接:gcc链接器将目标文件连接为一个可执行文件 gcc hello.o -o hello
二、GDB
在编译时,必需要把调试信息加到可执行文件中。
gcc -g hello.c -o hello
基本命令:
gdb programm 启动GDB l 查看所载入的文件 b 设断点 info b 查看断点状况 run 开始运行程序 bt 打印函数调用堆栈 p 查看变量值 c 从当前断点继续运行到下一个断点 n 单步运行(不进入) s 单步运行(进入) quit 退出GDB
gdb四种断点:
①行断点 b [行数或函数名] <条件表达式> ②函数断点 b [函数名] <条件表达式> ③条件断点 b [行数或函数名] <if表达式> ④临时断点 tbreak [行数或函数名] <条件表达式>
gcc hello_print.c hello_main.c –o hello的解释中,最后一个命令的是将这两个.o文件转换为一个可执行的hello的文件
静态库和动态共享库的代码区别
建立:
静态库的建立须要调用归档工具ar:
gcc -c addvec.c multvec.c ar rcs libvector.a addvec.o multvec.o
而动态库只须要gcc便可:
gcc -shared -fPIC -o libvector.so addvec.c multvec.c
连接:
静态库的连接须要先编译生成.o文件,而后再和库连接,而且须要staric命令构建一个彻底连接的可执行文件:
gcc -02 -c main2.c gcc -static -o p2 main2.o ./libvector.a
动态库能够直接把.c文件和库文件连接
gcc -o p2 main2.c ./libvector.so
makefile须要说明如何编译各个源文件并连接生成可执行文件,要求定义源文件之间的依赖关系。
Makefile的通常写法:
test(目标文件): prog.o code.o(依赖文件列表) tab(至少一个tab的位置) gcc prog.o code.o -o test(命令) .......
eg.
例:
test: prog.o code.o gcc prog.o code.o -o test prog.o: prog.c code.h gcc -c prog.c -o prog.o code.o: code.c code.h gcc -c code.c -o code.o clean: rm -f *.o test
其余:
存储系统的核心思想:缓存
Linux Bash中,cd ~ 命令能够切换到'home'目录。 (Ok)
Linux Bash中,cd - 命令能够切换到上一个目录
cd ~ 命令切换到'home'目录
一些题目总结:
Linux中没有C盘,D盘,其文件系统的目录是由(FHS)标准规定好的。
Linux Bash中,使用tar命令把home目录打包成home.tar的命令是( tar -cf home.tar ~)
Linux Bash中,ls . | sort 命令的功能是( 显示当前目录内容并排序 )
Linux系统中,连接器程序是(ld)
(Shannon 或香农)创建了布尔代数和数字逻辑之间的联系。
IEEE浮点数标准包含符号、尾数、(阶码)三部分。
Linux汇编中,销毁栈帧的语句是(movl %ebp,%esp popl %ebp 或leave)
Linux汇编中,须要调用者保存的寄存器有(%eax,%edx,%ecx )
GDB中以16进制形式打印%eax中内容的命令是(print /x $eax)
解开sim.tar的Linux命令是(tar -xvf sim.tar)
SRAM和DRAM掉电后均没法保存里面的内容。( ok )
存储器给出的读访问时间是(局部性)的一个函数。
在本学期的八周的学习中,我最大的收获对自主学习这种方式有了更深刻的体会,也更加适应了每周对这门课的学习状态。
在刚拿到这本书的时候,内心仍是有一慌乱的。被本书比上学期更厚了,感受无从着手学习。知识量很大,经常是学习下一部份内容,就忘了上一部份内容。经过在实验楼上的实践练习还有老师画出课后的一些重点习题对知识进行巩固。
在后面逐渐深刻的学习中,发现有的内容以前的其余课程或多或少都有接触过,好比汇编的知识,还有HCL知识。经过对比学习,可让我把知识理解的更透彻、更深刻。还有实验部分,最开始第一边作时没有成功,在后来本身一步步检查时查出问题所在,然后修改为功时,感受仍是颇有成就感的。
学期过半,我在收获知识的同时,也学到了自学的方法,以后只有更加努力才行。
部分知识学习仍是有些流于表面,没有深刻理解到精髓。同时课后的习题也要多作,根据每周划的重点习题,更加细致去理解知识点。考试的错题要及时查看老师每周更新的答案,本身多上心一些。操做的部分也须要多多动手,不能死板的跟着步骤一步步作,无目的的敲代码,要理解每一步这样作是为了,本身为什么打这些代码。
课上最好还能够讲一下书本的重点习题和错的比较多的课前测试的内容,这学期的课程仍是围绕课本展开的。但这仅是个人我的的想法,老师能够酌情采纳。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 100/100 | 2/2 | 25/25 | 安装了虚拟机并学习掌握核心的linux命令 |
第二周 | 100/200 | 1/3 | 30/55 | 虚拟机上的C语言编程 |
第三周 | 150/350 | 1/4 | 10/65 | 计算机中信息的表示和运算 |
第四周 | 0/350 | 0/4 | 3/68 | 复习前几周内容 |
第五周 | 75/420 | 1/5 | 20/88 | 程序的机器级表示 |
第六周 | 125/545 | 1/6 | 20/108 | Y86指令 硬件语言控制HCL |
第七周 | 72/617 | 1/7 | 20/128 | 磁盘 存储器相关结构 |
第八周 | 0/617 | 2/9 | 20/148 | 期中总结 |