信息安全系统设计基础第二周学习总结
2015-09-27 19:08
288 查看
vim编辑器
一、快速入门
(一)vim有6种基本模式
1.普通模式
在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。
Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令
在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按
2.插入模式
在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。
在插入模式中,可以按
3.可视模式
这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。
4.选择模式
这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式
5.命令行模式
在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(
6.Ex模式
这和命令行模式比较相似,在使用
常用三种模式的切换
vim启动进入普通模式,处于插入模式或命令行模式时只需要按
直接使用vim也可以打开vim编辑器,但是不会打开任何文件。
进入命令行模式后输入
按
请尝试在普通模式下使用方向键移动光标到
请尝试不同的从普通模式进入插入模式的方法,在最后一行shiyanlou前面加上
以下为其它几种退出方式:
除此之外,你还可以在命令之前加上数字,表示一次删除多行,如:
二、vim文档编辑
拷贝测试文件到本地目录
打开文件进行编辑
普通模式下输入
在普通模式下,你还可以使用
小技巧:在完成依次跳转后,可以使用
普通模式中,
普通模式中,
普通模式中,
普通模式中,
普通模式中,
普通模式中,
普通模式中,
普通模式中使用
普通模式中,
普通模式中,
三、查找替换
打开文件进行编辑:
然后依次进行如下操作
输入
输入fa跳转到第一个
输入
输入
输入
输入
输入
输入
输入
打开文件进行编辑
普通模式下输入
普通模式下输入
普通模式下输入
普通模式下输入
设置缩进为10个字符
输入
命令行模式下输入
命令行模式下输入:
普通模式下输入
普通模式下输入
普通模式下输入
普通模式下输入
普通模式下输入
普通模式下输入
普通模式下输入
以上查找
四、高级功能入门
默认进入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
在普通模式下输入
在普通模式下输入
在普通模式下输入
在普通模式下输入
命令行模式下输入
命令行模式下输入
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
普通模式下
输入您的密码 确认密码 这样在下一次打开时,vim就会要求你输入密码
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
命令行模式下输入
[b]深入理解计算机系统[/b]
1.linux命令
Linux中命令格式为:
2.man命令
帮助文档包含:
解释一下:
1是普通的Linux命令
2是系统调用,操作系统的提供的服务接口
3是库函数, C语言中的函数
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如ifconfig
3.cheat命令
cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。
大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
几个设置
:set nu 显示行号
:set ai 自动缩行
:set ts=4 设置一个 TAB 键等于几个空格
移动光标
[[ 转到上一个位于第一列的"{"
]] 转到下一个位于第一列的"{"
{ 转到上一个空行
} 转到下一个空行
gd 转到当前光标所指的局部变量的定义
Tips:
Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可
作为Linux程序员,我们可以让gcc在编译的任何阶段结束,以便检查或使用该阶段的输出(这个很重要)
gdb programm(启动GDB)
b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
run 开始运行程序
bt 打印函数调用堆栈
p 查看变量值
c 从当前断点继续运行到下一个断点
n 单步运行
s 单步运行
quit 退出GDB
gdb主要帮忙用户完成下面4个方面的功能:
启动程序,可以按照用户自定义的要求随心所欲的运行程序。
可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。
当程序停住时,可以检查此时程序中所发生的事。
动态地改变程序的执行环境。
gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数即可。如:
如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。当用-g把调试信息加入,并成功编译目标代码以后,看看如何用gdb来调试。 启动gdb的方法有以下几种:
gdb <program> program也就是执行文件,一般在当前目录下。
gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
gdb <program> <PID> 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试它。program应该在PATH环境变量中搜索得到。 gdb启动时,可以加上一些gdb的启动开关,详细的开关可以用gdb -help查看。下面只列举一些比较常用的参数: -symbols <file> -s <file> 从指定文件中读取符号表。 -se file 从指定文件中读取符号表信息,并把它用在可执行文件中。 -core <file> -c <file> 调试时core dump的core文件。 -directory <directory> -d <directory> 加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。
makefile带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。make是一个命令工具,是一个及时makefile中命令的工具程序。
make工具最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。而makefile文件需要按某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系。
makefile基本规则
假设现在有一个简单的项目由几个文件组成:prog.c、 code.c、 code.h。这些文件的内容如下:
prog.c
code.c
code.h
这些程序都比较短,结构也很清晰,因此使用下面的命令进行编译:
如上所示,这样就能生成可执行文件test,由于程序比较简单,而且数量也比较少,因此看不出来有多麻烦。但是,试想如果不只上面的3个文件,而是几十个或者是成百上千个甚至更多,那将是非常复杂的问题。
那么如何是好呢?这里就是makefile的绝佳舞台,下面是一个简单的makefile的例子。
首先
有了这个Makefile,不论什么时候修改源文件,只要执行一下make命令,所有必要的重新编译将自动执行。make程序利用Makefile中的数据,生成并遍历以test为根节点的树;现在我们以上面的实例,来学习一下Makefile的一般写法:
一个Makefile文件主要含有一系列的规则,每条规则包含一下内容:一个目标,即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如‘clean’;一个或多个依赖文件的列表,通常是编译目标文件所需要的其他文件。之后的一系列命令,是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,并以tab开头(初学者务必注意:是tab,而不是空格) 执行以上Makefile后就会自动化编译:
最后就会多产生: porg.o code.o test这三个文件,执行
一、快速入门
(一)vim有6种基本模式
1.普通模式
在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。
Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令
dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个
d,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,
2dd(重复
dd两次),和
dj的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。
在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按
a(append/追加)键或者
i(insert/插入)键。
2.插入模式
在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。
在插入模式中,可以按
ESC键回到普通模式
3.可视模式
这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。
4.选择模式
这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式
5.命令行模式
在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(
:键),搜索(
/和
?键)或者过滤命令(
!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
6.Ex模式
这和命令行模式比较相似,在使用
:visual命令离开Ex模式前,可以一次执行多条命令。
常用三种模式的切换
vim启动进入普通模式,处于插入模式或命令行模式时只需要按
Esc或者
Ctrl+[(这在vim课程环境中不管用)即可进入普通模式。普通模式中按
i(插入)或
a(附加)键都可以进入插入模式,普通模式中按
:进入命令行模式。命令行模式中输入
wq回车后保存并退出vim。
(二)进入vim
1.使用vim命令进入vim界面
vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。 打开Xfce终端,输入以下命令$ vim practice_1.txt
直接使用vim也可以打开vim编辑器,但是不会打开任何文件。
$ vim
进入命令行模式后输入
:e 文件路径同样可以打开相应文件。
2.游标移动
在进入vim后,按下i键进入插入模式。在该模式下您可以输入文本信息,下面请输入如下三行信息:
12345678 abcdefghijk shiyanlou.com
按
Esc进入普通模式,在该模式下使用方向键或者
h,
j,
k,
l键可以移动游标。
按键 | 说明 |
---|---|
h | 左 |
l | 右(小写L) |
j | 下 |
k | 上 |
w | 移动到下一个单词 |
b | 移动到上一个单词 |
shiyanlou这几个字母上面。
(三)进入插入模式
1.进入插入模式
在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入命令 | 说明 |
---|---|
i | 在当前光标处进行编辑 |
I | 在行首插入 |
A | 在行末插入 |
a | 在光标后插入编辑 |
o | 在当前行后插入一个新行 |
O | 在当前行前插入一个新行 |
cw | 替换从光标所在位置后到一个单词结尾的字符 |
www.,注意每次要先回到普通模式才能切换成以不同的方式进入插入模式
(四)保存文档
1.命令行模式下保存文档
从普通模式输入:进入命令行模式,输入
w回车,保存文档。输入
:w 文件名可以将文档另存为其他文件名或存到其它路径下
(五)退出vim
1.命令行模式下退出vim
从普通模式输入:进入命令行模式,输入
wq回车,保存并退出编辑
以下为其它几种退出方式:
命令 | 说明 |
---|---|
:q! | 强制退出,不保存 |
:q | 退出 |
:wq! | 强制保存并退出 |
:w <文件路径> | 另存为 |
:saveas 文件路径 | 另存为 |
:x | 保存并退出 |
:wq | 保存并退出 |
2.普通模式下退出vim
普通模式下输入Shift+zz即可保存退出vim
(六)删除文本
1.普通模式下删除vim文本信息
进入普通模式,使用下列命令可以进行文本快速删除:命令 | 说明 |
---|---|
x | 删除游标所在的字符 |
X | 删除游标所在前一个字符 |
Delete | 同x |
dd | 删除整行 |
dw | 删除一个单词(不适用中文) |
d$或 D | 删除至行尾 |
d^ | 删除至行首 |
dG | 删除到文档结尾处 |
d1G | 删至文档首部 |
2dd表示一次删除2行
二、vim文档编辑
(一)vim重复命令
1.重复执行上次命令
在普通模式下.(小数点)表示重复上一次的命令操作
拷贝测试文件到本地目录
$ cp /etc/protocols .
打开文件进行编辑
$ vim protocols
普通模式下输入
x,删除第一个字符,输入
.(小数点)会再次删除一个字符,除此之外也可以重复
dd的删除操作
2.执行指定次数相同的命令
进入普通模式输入N<command>,N表示重复后面的次数
在普通模式下,你还可以使用
dw或者
daw(delete a word)删除一个单词,所以你可以很容易的联想到
dnw(n替换为相应数字)表示删除n个单词
(二)游标的快速跳转
普通模式下,下列命令可以让光标快速调转到指定位置,我们分别讨论快速实现行间跳转和行内跳转1.行间跳转
命令 | 说明 |
---|---|
nG(n Shift+g) | 游标移动到第 n 行(如果默认没有显示行号,请先进入命令模式,输入:set nu以显示行号) |
gg | 游标移动到到第一行 |
G(Shift+g) | 到最后一行 |
Ctrl+o快速回到上一次(跳转前)光标所在位置
2.行内跳转
普通模式下使用下列命令在行内按照单词为单位进行跳转命令 | 说明 |
---|---|
w | 到下一个单词的开头 |
e | 到下一个单词的结尾 |
b | 到前一个单词的开头 |
ge | 到前一个单词的结尾 |
0或 ^ | 到行头 |
$ | 到行尾 |
f<字母> | 向后搜索<字母>并跳转到第一个匹配的位置(非常实用) |
F<字母> | 向前搜索<字母>并跳转到第一个匹配的位置 |
t<字母> | 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用) |
T<字母> | 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用) |
(三)复制粘贴和剪切
1.复制及粘贴文本
普通模式中使用y复制
普通模式中,
yy复制游标所在的整行(
3yy表示复制3行)
普通模式中,
y^复制至行首,或
y0。不含光标所在处字符。
普通模式中,
y$复制至行尾。含光所在处字符。
普通模式中,
yw复制一个单词。
普通模式中,
y2w复制两个单词。
普通模式中,
yG复制至文本末。
普通模式中,
y1G复制至文本开头。
普通模式中使用
p粘贴
普通模式中,
p(小写)代表粘贴至光标后(下)
普通模式中,
P(大写)代表粘贴至光标前(上)
2.剪切及粘贴
dd删除命令就是剪切,每次
dd删除文档内容后,便可以使用
p来粘贴,也这一点可以让我们实现一个很爽快的功能——交换上下行:
ddp
三、查找替换
(一)字符的替换及撤销(Undo操作)
1.替换和撤销(Undo)命令
替换和Undo命令都是针对普通模式下的操作命令 | 说明 |
---|---|
r+<待替换字母> | 将游标所在字母替换为指定字母 |
R | 连续替换,直到按下Esc |
cc | 替换整行,即删除游标所在行,并进入插入模式 |
cw | 替换一个单词,即删除一个单词,并进入插入模式 |
C(大写) | 替换游标以后至行末 |
~ | 反转游标所在字母大小写 |
u{n} | 撤销一次或n次操作 |
U(大写) | 撤销当前行的所有修改 |
Ctrl+r | redo,即撤销undo的操作 |
$ vim practice_2 # 输入以下文本 www.shiyanlou.com
然后依次进行如下操作
输入
11G,跳转到11行
输入fa跳转到第一个
a字符
输入
r,并且输入b,a字符被b字符替换(实用)
输入
R替换字符,输入新字符串,输入完按ESC回到普通模式(实用)
输入
cc替换整行字符,输入新字符串,输入完按ESC回到普通模式
输入
cw替换一个英文字(word),输入完按ESC回到普通模式(实用)
输入
~,翻转游标所在字符的大小写
输入
C替换至行尾,即游标所在处以后的字都会被替换,输入完按ESC回到普通模式
输入
u撤销上一次的操作
(二)快速缩进
1.使用命令进行快速调整缩进操作
这一小节学习如何在vim中进行快速缩进,缩进操作均在普通模式下有效打开文件进行编辑
$ vim protocols
普通模式下输入
15G,跳转到15行
普通模式下输入
>>整行将向右缩进(使用,用于格式化代码超爽)
普通模式下输入
<<整行向左回退
普通模式下输入
:进入命令行模式下对
shiftwidth值进行设置可以控制缩进和回退的字符数
2.shiftwidth命令
shiftwidth命令是指上一节
>>命令产生的缩进(可以简写成
sw) 普通模式下输入
:进入命令行模式下对
shiftwidth值进行设置可以控制缩进和回退的字符数 获取目前的设定值
:set shiftwidth?
设置缩进为10个字符
:set shiftwidth=10
输入
ESC回到普通模式,再次尝试
>>看缩进量是否变化
3.调整文本位置
命令行模式下输入:ce(center)命令使本行内容居中
:ce
命令行模式下输入
:ri(right)命令使本行文本靠右
:ri
命令行模式下输入:
le(left)命令使本行内容靠左
:le
(三)查找
1.快速查找
普通模式下输入/然后键入需要查找的字符串 按回车后就会进行查找。
?与
/功能相同,只不过
?是向上而
/是向下查找。 进入查找之后,输入
n和
N可以继续查找
n表示继续查找,
N反向查找
2.快速查找练习
使用vim打开文件进行编辑$ vim protocols
普通模式下输入
/icmp查找字符串icmp
普通模式下输入
n查找下一个icmp
普通模式下输入
?tcp向上查找字符串tcp
普通模式下输入
N查找上一个出现的tcp
3.高级查找
普通模式下输入\*寻找游标所在处的单词
普通模式下输入
\#同上,但
\*是向前(上)找,#则是向后(下)找
普通模式下输入
g\*同
\*,但部分符合该单词即可
普通模式下输入
g\#同
\#,但部分符合该单词即可
以上查找
n,
N的继续查找命令依然可以用
四、高级功能入门
(一)多文件编辑
1.使用vim编辑多个文件
编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件。另一种就是进入vim后再编辑其他的文件。 同时创建两个新文件并编辑$ vim 1.txt 2.txt
默认进入
1.txt文件的编辑界面
命令行模式下输入
:n编辑2.txt文件,可以加
!即
:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件
命令行模式下输入
:N编辑1.txt文件,可以加
!即
:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件
2.进入vim后打开新文件
命令行模式下输入:e 3.txt打开新文件3.txt
命令行模式下输入
:e#回到前一个文件
命令行模式下输入
:ls可以列出以前编辑过的文档
命令行模式下输入
:b 2.txt(或者编号)可以直接进入文件2.txt编辑
命令行模式下输入
:bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目
命令行模式下输入
:e! 4.txt,新打开文件4.txt,放弃正在编辑的文件
命令行模式下输入
:f显示正在编辑的文件名
命令行模式下输入
:f new.txt,改变正在编辑的文件名字为new.txt
3.恢复文件
如果因为断电等原因造成文档没有保存,可以采用恢复方式,vim -r进入文档后,输入
:ewcover 1.txt来恢复
$ vim -r 1.txt
(二)可视模式
可视模式命令简介
在普通模式下输入v(小写),进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下v会后就会取消选取。
在普通模式下输入
Shift+v(小写),进入行选择模式,按下V之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次
Shift+v就可以取消选取。
在普通模式下输入
Ctrl+v(小写),这是区域选择模式,可以进行矩形区域选择,再按一次
Ctrl+v取消选取。
在普通模式下输入
d删除选取区域内容
在普通模式下输入
y复制选取区域内容
(三)视窗操作
视窗操作简介
vim可以在一个界面里打开多个窗口进行编辑,这些编辑窗口称为vim的视窗。 打开方法有很多种,例如可以使用在命令行模式下输入:new打开一个新的vim视窗,并进入视窗编辑一个新文件(普通模式下输入
Ctrl+w也可以,但是
Ctrl+w在chrome下会与chrome关闭标签页的快捷键冲突,所以使用该快捷键你可以在IE或其它浏览器进行练习),除了
:new命令,下述列举的多种方法也可以在命令模式或普通模式下打开新的视窗:
命令行模式下输入
:sp 1.txt打开新的横向视窗来编辑1.txt
命令行模式下输入
:vsp 2.txt打开新的纵向视窗来编辑1.txt
普通模式下
Ctrl-w s将当前窗口分割成两个水平的窗口
普通模式下
Ctrl-w v将当前窗口分割成两个垂直的窗口
普通模式下
Ctrl-w q即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!
普通模式下
Ctrl-w o打开一个视窗并且隐藏之前的所有视窗
普通模式下
Ctrl-w j移至下面视窗
普通模式下
Ctrl-w k移至上面视窗
普通模式下
Ctrl-w h移至左边视窗
普通模式下
Ctrl-w l移至右边视窗
普通模式下
Ctrl-w J将当前视窗移至下面
普通模式下
Ctrl-w K将当前视窗移至上面
普通模式下
Ctrl-w H将当前视窗移至左边
普通模式下
Ctrl-w L将当前视窗移至右边
普通模式下
Ctrl-w -减小视窗的高度
普通模式下
Ctrl-w +增加视窗的高度
(四)文档加密
1.创建加密文档
$ vim -x file1
输入您的密码 确认密码 这样在下一次打开时,vim就会要求你输入密码
(五)在vim执行外部命令
在命令行模式中输入!可以执行外部的shell命令
:!ls用于显示当前目录的内容
:!rm FILENAME用于删除名为 FILENAME 的文件
:w FILENAME可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件
(六)帮助系统
1.vim中的查看帮助
普通模式下按F1打开
vim自己预设的帮助文档
命令行模式下输入
:h shiftwidth打开名为
shiftwidth的帮助文件
命令行模式下输入
:ver显示版本及参数
(七)功能设定
1.vim的功能设定
可以在编辑文件的时候进行功能设定,如命令行模式下输入:set nu(显示行数),设定值退出vim后不会保存。要永久保存配置需要修改vim配置文件。 vim的配置文件
~/.vimrc,可以打开文件进行修改,不过务必小心不要影响vim正常使用
2.获取目前的设定
命令行模式下输入:set或者
:se显示所有修改过的配置
命令行模式下输入
:set all显示所有的设定值
命令行模式下输入
:set option?显示option的设定值
命令行模式下输入
:set nooption取消当期设定值
3.set功能的说明
命令行模式下输入:set autoindent(ai)设置自动缩进
命令行模式下输入
:set autowrite(aw)设置自动存档,默认未打开
命令行模式下输入
:set background=dark或
light,设置背景风格
命令行模式下输入
:set backup(bk)设置自动备份,默认未打开
命令行模式下输入
: set cindent(cin)设置C语言风格缩进
[b]深入理解计算机系统[/b]
1.linux命令
Linux中命令格式为:
command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数
选项是调整命令执行行为的开关,
选项不同决定了命令的显示结果不同。
参数是指命令的作用对象。
2.man命令
man是manul的缩写,我们可以通过man man来查看
man的帮助
帮助文档包含:
1 Executable programs or shell commands(用户命令帮助) 2 System calls (系统调用帮助) 3 Library calls (库函数调用帮助) 4 Special files (usually found in /dev) 5 File formats and conventions eg /etc/passwd(配置文件帮助) 6 Games 7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) 8 System administration commands (usually only for root) 9 Kernel routines [Non standard]
解释一下:
1是普通的Linux命令
2是系统调用,操作系统的提供的服务接口
3是库函数, C语言中的函数
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如ifconfig
3.cheat命令
cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。
Linux下C语言编程基础
vim相关大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
几个设置
:set nu 显示行号
:set ai 自动缩行
:set ts=4 设置一个 TAB 键等于几个空格
移动光标
[[ 转到上一个位于第一列的"{"
]] 转到下一个位于第一列的"{"
{ 转到上一个空行
} 转到下一个空行
gd 转到当前光标所指的局部变量的定义
gcc
GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。1.gcc 支持编译的一些源文件后缀名
后缀 | 源文件 |
---|---|
.c | C语言源文件 |
.C .cc .cxx | C++源文件 |
.m | Object-C源文件 |
.i | 经过预处理后的C源文件 |
.ii | 经过预处理后的C++源文件 |
.s .S | 汇编语言源文件 |
.h | 预处理文件(头文件) |
.o | 目标文件 |
.a | 存档文件 |
2. gcc 编译程序的流程
Tips:
Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可
sudo chmod u+x excutefile
作为Linux程序员,我们可以让gcc在编译的任何阶段结束,以便检查或使用该阶段的输出(这个很重要)
gdb
建议使用CGDB,比GDB好用,熟悉VC的调试方式,可以使用DDD。 注意使用GCC编译时要加“-g”参数。GDB最基本的命令有:gdb programm(启动GDB)
b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
run 开始运行程序
bt 打印函数调用堆栈
p 查看变量值
c 从当前断点继续运行到下一个断点
n 单步运行
s 单步运行
quit 退出GDB
gdb主要帮忙用户完成下面4个方面的功能:
启动程序,可以按照用户自定义的要求随心所欲的运行程序。
可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。
当程序停住时,可以检查此时程序中所发生的事。
动态地改变程序的执行环境。
gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数即可。如:
$ gcc -g hello.c -o hello $ g++ -g hello.cpp -o hello
如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。当用-g把调试信息加入,并成功编译目标代码以后,看看如何用gdb来调试。 启动gdb的方法有以下几种:
gdb <program> program也就是执行文件,一般在当前目录下。
gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
gdb <program> <PID> 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试它。program应该在PATH环境变量中搜索得到。 gdb启动时,可以加上一些gdb的启动开关,详细的开关可以用gdb -help查看。下面只列举一些比较常用的参数: -symbols <file> -s <file> 从指定文件中读取符号表。 -se file 从指定文件中读取符号表信息,并把它用在可执行文件中。 -core <file> -c <file> 调试时core dump的core文件。 -directory <directory> -d <directory> 加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。
makefile
一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作(因为makefile就像一个shell脚本一样,可以执行操作系统的命令)。makefile带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。make是一个命令工具,是一个及时makefile中命令的工具程序。
make工具最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。而makefile文件需要按某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系。
makefile基本规则
假设现在有一个简单的项目由几个文件组成:prog.c、 code.c、 code.h。这些文件的内容如下:
prog.c
#include <stdio.h> #include "code.h" int main(void) { int i = 1; printf ("myfun(i) = %d\n", myfun(i)); }
code.c
#include "code.h" int myfun(int in) { return in + 1; }
code.h
extern int myfun(int);
这些程序都比较短,结构也很清晰,因此使用下面的命令进行编译:
$ gcc -c code.c -o code.o $ gcc -c prog.c -o prog.o $ gcc prog.o code.o -o test
如上所示,这样就能生成可执行文件test,由于程序比较简单,而且数量也比较少,因此看不出来有多麻烦。但是,试想如果不只上面的3个文件,而是几十个或者是成百上千个甚至更多,那将是非常复杂的问题。
那么如何是好呢?这里就是makefile的绝佳舞台,下面是一个简单的makefile的例子。
首先
$ vim Makefile
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
有了这个Makefile,不论什么时候修改源文件,只要执行一下make命令,所有必要的重新编译将自动执行。make程序利用Makefile中的数据,生成并遍历以test为根节点的树;现在我们以上面的实例,来学习一下Makefile的一般写法:
test(目标文件): prog.o code.o(依赖文件列表) tab(至少一个tab的位置) gcc prog.o code.o -o test(命令) .......
一个Makefile文件主要含有一系列的规则,每条规则包含一下内容:一个目标,即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如‘clean’;一个或多个依赖文件的列表,通常是编译目标文件所需要的其他文件。之后的一系列命令,是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,并以tab开头(初学者务必注意:是tab,而不是空格) 执行以上Makefile后就会自动化编译:
$ make gcc -c prog.c -o prog.o gcc -c code.c -o code.o gcc prog.o code.o -o test
最后就会多产生: porg.o code.o test这三个文件,执行
./test查看结果
相关文章推荐
- 18--二叉树中和为某一值的路径
- machine Learning
- 图解Linux命令之--chgrp命令
- 单链表反转的图示操作
- RadioButton kongleifeng深究
- DirectX11 XNA数学库之矩阵
- 信息安全系统设计基础第三周学习总结—20135227黄晓妍
- 17-- 从上到下打印二叉树,按层打印。
- 16--二叉树的镜像
- java排列
- java 集合介绍
- ThinkPHP--url地址大小写问题
- 15-- 输入两个二叉树A和B,判断B树是否包含于A树。
- 14--合并两个排序的链表
- 14--反转链表
- A child container failed during start
- HTTPD 工作原理
- 图解Linux命令之--lsattr命令
- 13--输出链表中倒数第k个节点,
- 13--输入一个整数数组,实现一个函数来调整数组中数字的顺序