Linux第二次学习笔记
2015-09-27 17:14
453 查看
#Linux第二次实验(第三周)
学习目标
熟悉Linux系统下的开发环境熟悉vi的基本操作
熟悉gcc编译器的基本原理
熟练使用gcc编译器的常用选项
熟练使用gdb调试技术
熟悉makefile基本原理及语法规范
掌握静态库和动态库的生成
VI的使用
1.VI的模式
(1)命令行模式(2)插入模式
(3)底行模式
2.VI的基本流程
(1)进入vi,即在命令行下输入"vi hello",进入命令行模式。(2)在命令行模式下输入i进入插入模式。
(3)在插入模式中,按"Ese",将当前模式转入命令行模式,并在底行行中输入":wq"(存盘退出)进入底行模式
3.vi功能键的学习过程:
h:左移光标j:下移光标
k:上移光标
l:右移光标
在命令行模式中:
i:切换到插入模式,在目前的光标所在处插入输入的文字,已存在的文字会后退x:删除光标所在为止的一个字符
a:切换到插入模式,并从目前光标所在为止的下一个位置开始输入文字
vim 文件名: 进入Vim编辑器
dw:从当前光标删除至下一个单词的起始处,不包括它的第一个字符
d$:从当前光标删除至行末
de:从当前光标删除至单词末尾,包括最后一个字符
**对于中文的操作是否也是如此?
0:光标移动至行的开头
$:光标移动至行的结尾
e:光标移动至所在处下一个单词尾部
ne:光标移动至所在处下n个单词尾部
w:光标移动至所在处下一个单词开头
nw:光标移动至所在处下n个单词开头
**若所需移动的单词本行不足以提供时会怎样? 答:下一行的单词将用以拼凑
**用d0,d$来加深理解
dd:删除当前行
ndd:删除光标所在处往下n行(包括自己)
u:撤销最后执行的命令,相当于windows中的ctrl+z
U:撤销对整行的修改
ctrl+r:撤销掉撤销的动作
在正常模式下修改命令的格式:
operator [number] motion
operator - 操作符,代表要做的事情,比如d代表删除
[number] - 可以附加数字,代表动作重复的次数
motion - 动作,代表在所操作的文本上的移动,例如w代表单词(word),$代表行末等等
p:将最后依次删除的内容防止光标之后。(若删除的为行,则需要将光标移至需添加处的上方。若为仅为单词或字母,则可以需要将光标移至需添加出的左方。)
r和一个字符:替换光标所在为止的字符
R:多字符替换
ce:修改文本直到一个单词的末尾(相当于删除+插入的操作)
c [number] motion
c$:修改文本直至行末
**ce与cw的区别?
G:光标移动至文件最后一行
gg:光标移动至文件第一行
nG:光标移动至文件第n行
ctrl+g:显示当前编辑的文件名和文件中光标位置
/和一个字符串:在当前文件中查找该字符串
n:向光标所在处下方查找上一次的字符串
N:向光标所在处上方查找上一次的字符串
?相对于/为逆向查找
ctrl+0:回到之前的位置
ctrl+i:光标移动至较新的位置
%:查找配对的括号
v:进入可视模式
v+方向键:选取所需要进行操作的内容
o:在光标所在的下一行进入插入模式
O:在光标所在的上一行进入插入模式
y:复制
yw:复制一个单词
p:粘贴
[[ : 转到上一个位于第一列的"{"
]] : 转到下一个位于第一列的"{"
{ : 转到上一个空行
} : 转到下一个空行
gd 转到当前光标所指的局部变量的定义
在插入模式中:
完成后输入"Esc"退出编辑在底行模式中:
输入":wq"存盘退出输入":q!"放弃所有改动
输入":s/old/new/g" 替换old为new(整行)
输入":s/old/new" 替换old为new(第一个匹配项)
输入":#,#s/old/new/g" 替换两行之间出现的每个匹配串(#,#代表替换操作的若干行中首尾两行的行号
输入":%s/old/new/g" 替换整个文件中的每个匹配串
输入":s/old/new/gc" 找到整个文件中的每个匹配串,并且对每个匹配串提示是否进行替换
输入":!+外部命令":执行外部命令 例如::!ls,:!dir
输入":w 文件名":将整个文件以文件名保存
输入":r 文件名":提取文件,并放置于光标处
输入":r 外部命令":可将外部命令所得到的结果放置光标处
输入":set ic":忽略大小写
输入":set noic":关闭忽略大小写
输入"\c":仅在依次查找时忽略字母大小写
输入":set hls is":打开高亮
*hls = hlsearch(匹配项高亮显示)
*is = insearch(查找短语时显示部分匹配)
输入":nohlsearch":关闭高亮
输入":set nu":显示行号
输入":set ai":自动缩行
输入":set ts=n":设置一个TAB键等于n个空格
所有的:的命令都需要回车来结束
VIM获取帮助的方法
按下HELP键按下F1键
输入":help"
ctrl+w 窗口之间的跳转
输入":q"关闭帮助窗口
输入":help 具体参数":可以找到该参数的帮助
启用VIM的特性
1.编辑vimrc文件:
:edit ~/.vimrc (Unix系统命令):edit $VIM/_vimrc(MS-windows系统命令)
2.读取vimrc实力文件的内容:
:r $VIMRUNTIME/vimrc_example.vim3.保存文件
:writeCTRL+D 和 TAB键可以进行命令行补全
gcc
GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。编译器驱动程序
预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp(E-i)编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl(S-s)
汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as(C-o)
链 接:gcc hello.o –o hello ;gcc -o 调用ld
运 行:在Unix外壳的命令中输入"./hello"
gcc常用选项列表
-c 只编译不连接,生成目标文件".o"-S 只编译不汇编,生成汇编代码
-E 只进行预编译,不做其他处理
-g 在可执行预编译,不做其他处理
-o file 将file文件指定为输出文件
-v 打印处编译器内部编译各过程的命令行信息和编译器的版本
-I dir 在头文件的搜索路径列表中添加dir目录
链接器完成的两个任务:
符号解析
重定位
文件的三种形式
可重定位目标文件
可执行目标文件
共享目标文件
静态库的创建和使用
使用归档工具.ar将一些目标文件集成在一起。 《嵌入式》p64动态库的创建和使用
使用gcc的-fPIC选项为动态库构造一个目标文件使用-shared选项和已创建的为止无关目标代码,生成一个动态库
编译主程序,它将会链接到刚生成的动态库
gcc警告和出错选项列表
详见《嵌入式》p65gdb
gdb programm(启动GDB)b 设断点
info b 查看断点情况
run或者r 开始运行程序(若想从制定行开始,可在r后面加上行号)
bt 打印函数调用堆栈
p 查看变量值(例如p n)
c 从当前断点继续运行到下一个断点(恢复程序运行)
n 单步运行(不会进入函数,相当于Visual C++的step over)
s 单步运行(会进入函数,相当于Visual C++的step in)
quit 退出GDB
display 跟踪变量值的改变
until 跳出循环
finish 跳出函数
help 帮助
1 查看所载入的文件
*在对文件进行编译时,一定要加上选项-g,这样编译出来的可执行代码才包含调试信息,否则之后gdb无法载入可执行文件。
断点的设置
1. 函数断点把函数名列在命令"b"后,即b 函数名 (例如b sum)
2. 条件断点
b 行数或函数名 if 表达式 例如(b 10 if j==1)
3. 行断点
break [文件名:]行号或函数名 <条件表达式>
4. 临时断点(到达后自动删除)
tbreak [文件名:]行号或函数名 <条件表达式>
make工程管理器
自动编译操作管理器:能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入makefile文件的内容来执行大量的编译工作。用户只需编写依次简单的编译语句就可以了。大大提高了实际项目的工作效率,而且几乎所有Linux下的项目编程均会涉及它。makefile基本结构
makefile是make读入的惟一配置文件:需要由make工具创建的目标体(target),通常是目标文件或可执行文件;
要创建的目标体所以来的文件(dependency_file);
创建每个目标体时需要运行的命令(comman),这一行必须以制表符(Tab键)开头。
格式:
target:dependency_files
command:/该行以Tab键开头/
例如:有两个文件分别为hello.c和hello.h,创建的目标体为hello.o,执行的命令为gcc,编译指令:gcc -c hello.c相对应的makefile写为:
#The simplest example hello.o:hello.c hello.h gcc -c hello.c -o hello.o
make的使用
格式:make target例如: make hello.o
makefile变量
三个目标体(target)david
kang.o
yul.o
david的依赖文件就是kang.o和yul.o
makefile规则
隐含规则模式规则
meke管理器的使用
C dir 读入指定目录下的makefilef file 读入当前目录下的file文件作为makefile
i 忽略所有的命令执行错误
I dir 指定被包含的makefile目录
n 只打印要执行的命令,但不执行这些命令
p 显示make变量数据库和隐含规则
s 在执行命令时不显示命令
w 如果make在执行过程中改变目录,则打印当前目录名
- ----
学习过程中遇到的问题与解决方法
1.de、dw、d$对于中文的操作是否遵循对英文字母的操作?
经过试验,该命令对于字母或中文是否为一个单词的判定依据的是空格。倘若我们写中文时将词组都以空格分割则会出现与英文一样的效果,但实际上我们并不会如此。所以这些操作命令针对的是英文操作。2.若所需移动的单词本行不足以提供时会怎样?
下一行的单词将用以拼凑3.ce与cw的区别?
我是没发现有什么区别。若有不对请老师指点一下。相关文章推荐
- linux的简介 linux与windows服务器系统的区别
- linux 命令
- linux的运行级别介绍
- Linux之xz压缩用法
- linux下C语言开发入门
- CentOS 7 中 pptpd安装
- Linux下locale: Cannot set LC_CTYPE to default locale: No such file or directory警告
- Linux常用命令
- linux vim使用技能
- linux进程监控与自动重启实现
- linux基本知识点
- Linux经常使用的命令(两) - cd
- 第四章 Linux命令
- 【Linux命令-文件管理类】chattr命令和lsattr命令
- kali linux wpscan wordpress
- centos--命令
- centos 之7zip
- linux文件特殊属性介绍(s,s,t)
- Hadoop Linux下txt文件乱码
- linux sticky bit 目录权限 rwt权限