vim记忆方式:打开,关闭,查看,查询,插入,删除,替换,撤销,复制等等操作
1)要查看你的所有模式:打开vim,底行模式直接输入: help vim-modes
2)退出vim及保存文件,在[正常模式]下,按一下[:]冒号键进入[last line mode],例如:
:w(保存当前文件)
:wq (存盘并退出vim)
:q!(不存盘强制退出vim)
i: 从光标当前位置开始输入文件
a:从目前光标所在位置的下一个位置开始输入文件
o:插入新的一行,从行首开始输入文字
1)键盘操作:
左:h 下:j 上:k 右:l
$:移动到光标所在行尾
^:移动到光标所在行首
w:光标跳到下个字开头
e:光标跳到下个字字尾
b:光标回到上个字开头
#l:光标移到改行的第#个位置,如:5l,6l
2)文本操作:
G:移动到文章的最后
shift+g:进入文本末端
gg:进入到文本开始
ctrl+b:屏幕往后移动一页
ctrl+f: 屏幕往前移动一页
ctrl+u:屏幕往后移动半页
ctrl+d: 屏幕往前移动半页
x:每按一次,删除光标所在位置的一个字符
#x: [6x]表示删除光标所在位置的“后面(包含自己在内)”6个字符
X:删除光标所在位置的前面一个字符
#X:[20X]表示删除光标所在位置的“前面”20个字符
dd:删除光标所在行
[#dd]:从光标所在行开始删除#行
- yw 将光标所在之处到字尾的字符复制到缓存区中。
- #yw 复制#个字到缓存区
先按ESC键确定您已处于正常模式
区别:
前者是从上往下找
后者是从下往上找
3、简单vim配置
预处理阶段知识拓展
重要概念: 函数库
printf函数是在哪里实现的?
printf函数返回值是返回输出后面的个数。
- 系统把这些函数实现都被做到名为libc.so.6的库文件中去了,在没有特定指定时,gcc会到系统默认的路径“/usr/lib”下进行查找,也就是链接到libc.so.6库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。
静态库和动态库:
gcc -E //预处理 test.c -o test.i -m32(32位机器)
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
-o文件输出到文件
-static 此选项对生成的文件采用静态链接
- -g 生成调试信息。GNU调试器可利用该信息
-w 不生成任何警告信息。
- -Wall生成所有警告信息
readelf 查看elf文件-h查看文件的头 test.o -a列出所有信息
PE windows下可执行文件得格式
ELF linux下可执行文件得格式
虚拟内存空间大小为4个G
nm 查看符号表
main 函数运行起来后第一个函数是_start
ABI 二进制接口不一样
strip 可执行程序 删除符号信息,给文件瘦身
objdump -dS 可执行程序 查看符号main函数得符号信息
volatile(阻止编译优化)
1、gcc -g;//重新编译
2、ulimit -c unlimited;//让它的大小不受限制
3、./a.out
4、gdb a.out core.XXX//运行到core的地方
gcc -v显示所有详细信息
makefile书写:
1 .PHONY:clean
2 hello:hello.o
3 gcc hello.o -o hello
4 hello.o:hello.s
5 gcc -c hello.s -o hello.o
6 hello.s:hello.i
7 gcc -S hello.i -o hello.s
8 hello.i:hello.c
9 gcc -E hello.c -o hello.i
10 clean:
11 rm -f hello.o hello.s hello.i hello
# $^ 代表所有的依赖文件($< 代表第一个依赖文件)
# $@ 代表所有的目标文件
$< 第一个依赖文件
@指令 不显示该指令
可以写成;
1 .PHONY:clean
2 jindutiao:jindutiao.o
3 gcc -g Wall $^ -o $@
4 %.o:%.c
5 gcc -c -g Wall $< -o $@
6 clean:
7 rm -f *.o *.i *.s jindutiao
#include
2 int main()
3 {
4 printf("hello Makefile!\n");
5 sleep(3);
6 return 0;
7 }
此程序先输出hello Makefile,
等待3秒后输出[root@localhost day429]#
#include
2 int main()
3 {
4 printf("hello Makefile!");
5 fflush(stdout);
6 sleep(3);
7 return 0;
8 }
~
此程序先输出hello Makefile,
等待3秒后输出[root@localhost day429]#
#include
2 int main()
3 {
4 printf("hello Makefile!");
5 sleep(3);
6 return 0;
7 }
此程序等待三秒钟后再输入hello Makefile!
和[root@localhost day429]#
分析:
#include
2 #include
3 #include
4 int main()
5 {
6 int i=0;
7 char buf[101];
8 memset(buf,0,sizeof(buf));
9 const char *p="/|-\\";
10 for(i=0;i<100;i++)
11 {
12 buf[i]='#';
13 printf("\r\033[33m][%-100s][%%%d][%c]\033[0m]",buf,i+1,p[i%4]);
14 fflush(stdout);
15 usleep(100000);
16
17 }
18 printf("\n");
19 return 0;
20 }
截图:
八
步骤: 编译源码,然后安装
1.1安装准备:
a、 首先用yum安装gcc,用于编译源码
b、管网下载源码包
c、winSCP windows与Linux传输文件(若直接用安装软件的linux电脑下载就不用传输了)
1.2 安装过程
a、解压
b、进入解压后的目录配置文件 ./configure # 大多数情况下源码包都会带configure这样一个配置工具,具体使用方法可以vim查看其内容
c、make #编译源码包 如果报错了 make clean 清除缓存重新make
d、make install # 安装
然后删除源码包软件和安装目录
rpm安装:安装别人编译好的软件包
rpm即Redhat Package Manager,Redhat的软件包管方式,适用rpm install 命令
rpm不仅已经把软件源代码编译成二进制文件,而且对软件包依赖的文件,系统环境等做了统计文件扩展名:rpm
还有一种SRPM:没有编译成二进制文件,但是也包含rpm的特性
用rpm方式安装软件,如果依赖的软件没有事先安装,软件无法安装成功。
为了解决这个问题,推出yum方式。
既然依赖的软件没有安装在机器上,那么就先安装依赖文件,再安装我需要安装的软件。
因此yum在安装软件同时安装依赖文件。
因此需要一个yum源来放依赖的软件源,对比被安装机器上rpm软件库归根到底,yum也是基于rpm的。