linux指令工具vim和gcc的介绍(6)

1.vim进入insert mode的方式

a 向后移动一列并进入insert mode

o 向下移动并新起一行并进入insert mode

复制代码
a行//光标在这
b行

按o后

a行
//光标在这
b行

i 直接进入insert mode

2.低行操作(通过shift+;进入)有:

w(保存) q(退出) !(强制执行) shift+zz(退出) set nonu(去除行号) set nu(加行号)

!+command(指令) 可以在vim的底行实行指令(如ls)

%s/dststr/srcstr/(将文件中的srcstr替换为dststr)

复制代码
:%s/foo/bar/  将每一行的第一个bar替换为foo
:%s/foo/gar/g 将所有的bar替换为foo

vim可以直接打开一个文件(不存在就新建一个,wq退出就保存下来,否则不保存)

vs:可以再开一个文件(可以新建一个也可以用已有文件)

复制代码
:vs filename //再打开一个文件

下图左右为两个文件

底行在操作那个文件取决于光标在那个文件中(ctrl +ww可以将光标更换到另一个文件中(逆序切换))

1./+一个单词:标亮文件中与该单词相同的所有单词,按n自动顺序到下一个

上面为/+hello后的情况

2.!+字母 自动运行最近与该些字母匹配的命令行。例:

复制代码
!v  enter后匹配最近的与该字母的命令行
有vim code.c(最近的代码出现)

vim + 文件路径 + n :光标打开文件后自动跳到第n行

!+字母:自动运行最近与这些字母匹配的命令行

3.vim

1.其是系统中安装的软件,当.vimrc文件存在时,vim就使用该文件的配置,否则就是用默认配置,因此我们最好自己配置一个.vimrc

在.vimrc中使用"可以注销该行代码

命令行:cat /etc/redhat-release 说明系统版本

cpp 复制代码
[fengyouyinli@VM-0-2-centos ~]$ cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 

4.gcc/g++的使用

直接生成可执行文件:

cpp 复制代码
[fengyouyinli@VM-0-2-centos ~]$ gcc gal.c -o galagame
                 //gal.c是已存在文件,galagame是要生成的可执行文件的文件名
[fengyouyinli@VM-0-2-centos ~]$ ls
galagame  gal.c  install.sh  teste

预处理:

cpp 复制代码
[fengyouyinli@VM-0-2-centos ~]$ gcc -E code.c -o code.i //临时文件
                           //处理完预处理就停下来
[fengyouyinli@VM-0-2-centos ~]$ ls
code.c  code.i  galagame  gal.c  install.sh  teste

/usr/include/ 存c语言的头文件

cpp 复制代码
[fengyouyinli@VM-0-2-centos ~]$ ls /usr/include/
aio.h        crypt.h     features.h      grp.h        langinfo.h  malloc.h    neteconet      pcrecpp.h           resolv.h       stdio_ext.h  uchar.h         wchar.h
aliases.h    ctype.h     fenv.h          gshadow.h    lastlog.h   math.h      netinet        pcre.h              rpc            stdio.h      ucm             wctype.h
alloca.h     db_185.h    FlexLexe

编译:

cpp 复制代码
[fengyouyinli@VM-0-2-centos ~]$ gcc -S code.i -o code.s
                          //处理完编译就停下来
[fengyouyinli@VM-0-2-centos ~]$ ls
code.c  code.i  code.s  galagame  gal.c  install.sh  teste

汇编:

cpp 复制代码
[fengyouyinli@VM-0-2-centos ~]$ gcc -c code.s -o code.o//.o文件也叫可重定位目标文件
                   //汇编完就停止
[fengyouyinli@VM-0-2-centos ~]$ ls
code.c  code.i  code.o  code.s  gal.c

为什么还要链接?

因为头文件的展开只是函数声明,真正的源代码还在外部库里面,只有链接在一起时才能正常使用库函数。

链接:

cpp 复制代码
gcc code.o -o code//生成的可执行文件的名字
cpp 复制代码
[fengyouyinli@VM-0-2-centos ~]$ gcc -c gal.c //直接生成对应的.o文件
[fengyouyinli@VM-0-2-centos ~]$ ls
code  code.c  code.i  code.o  code.s  gal.c  gal.o

连接所有文件的方法:

cpp 复制代码
[fengyouyinli@VM-0-2-centos ~]$ gcc gal.o code.o -o ccb
[fengyouyinli@VM-0-2-centos ~]$ ls
ccb  code  code.c  code.i  code.o  code.s  gal.c  gal.o

库文件也是.o文件,统筹文件的本质就是将一堆.o文件打包在一起。

一个命令:

ldd + 文件路径:查看该文件中用了哪些库

/lib64/libc.so.6是c语言的库,在文件中执行库函数时,会跑到该库中执行完该函数后再回到原文件中。

库的后缀

1.动态库:linux(.so) windows(.dll)

2.静态库:linux(.a) windows(.lib)

系统的命令库也会使用很多的库,例ls

cpp 复制代码
[fengyouyinli@VM-0-2-centos ~]$ ldd /usr/bin/ls
	linux-vdso.so.1 =>  (0x00007ffddd3d6000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f78b2d54000)
	libcap.so.2 => /lib64/libcap.so.2 (0x00007f78b2b4f000)
	libacl.so.1 => /lib64/libacl.so.1 (0x00007f78b2946000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f78b2578000)
	libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f78b2316000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f78b2112000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f78b2f7b000)
	libattr.so.1 => /lib64/libattr.so.1 (0x00007f78b1f0d000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f78b1cf1000)

宏定义:

cpp 复制代码
gcc code.c -o code -DM=100
                 //-D代表后面的为宏定义,M是宏定义的名字,=100是该宏的值(可以没有值,默认为1)

此处可以说明预处理的本质就是修改我们的代码,-DM就是将#define M直接插入到我们的代码中了。

相关推荐
charlie1145141912 小时前
2026年正点原子开发板移植方案——从0开始的Rootfs之路(5)WSL + NFS 网络启动踩坑记:从挂载失败到成功启动的完整历程
linux·网络·驱动开发·学习·嵌入式·嵌入式linux
Wu Junwu2 小时前
Linux启动过程中的initramfs和rootfs详解
linux·根文件系统·内核编译
zzzsde2 小时前
【Linux】库的制作与使用(1):库的概念及动静态库
linux·运维·服务器
2601_949814692 小时前
ubuntu 安装 Redis
linux·redis·ubuntu
薛定谔的悦2 小时前
站控显示下级从控EMS的版本信息开发(设计多线程和TCP通讯)
linux·网络·数据库·网络协议·tcp/ip·ems
看海的四叔2 小时前
【Linux】命令行常规操作全攻略:入门+实战+速查
linux·运维·github·命令行·batch命令
RrEeSsEeTt2 小时前
【HackTheBox】- BoardLight 靶机学习
linux·学习·网络安全·渗透测试·kali·红队·hackthebox
ruiang2 小时前
如何在 Ubuntu 22.04 上安装 MySQL
linux·mysql·ubuntu
ZzzZZzzzZZZzzzz…2 小时前
MySQL备份还原方法1---mysqldump
linux·运维·数据库·mysql·还原备份