Linux学习笔记-基本操作3
1. vim编辑器的使用
2. gcc编译器
3. 静态库的制作 -- lib
4. 动态库的制作 -- dll
vi -- vim
vim是从vi发展过来的一款文本编辑器
vi a.txt
前提: 安装了vim软件
工作模式:
1. 命令模式 -- 打开文件之后, 默认进入命令模式
2. 编辑模式 -- 需要输入一些命令, 切换到编辑模式
3. 末行模式 -- 在末行模式下可以输入一些命令
1. vim编辑器的使用
命令模式下的操作:
1>. 光标的移动
H J K L
前 下 上 后
行首: 0
行尾: $
文件开始位置: gg
文件末尾: G
行跳转: 300G
2>. 删除操作
删除光标后边的字符: x
删除光标前边的字符: X
删除光标单词后面的: dw (光标移动到单词的开始位置, 否只能删除一部分)
删除光标到行首的字符串: d0
删除光标到行尾的字符串: D(d$)
删除光标当前行: dd
删除多行: ndd (n -- 自然数)
3>. 撤销操作
撤销: u
反撤销: ctrl + r
4>. 复制粘贴
复制: yy
复制多行: nyy
粘贴: p (光标所在行的下一行)
粘贴: P (光标所在行)
剪切 == 删除
5>. 可视模式
切换到可是模式: v
选择内容: hjkl
操作: 复制: y 删除: d
6>. 查找操作
1). /hello(向下查找,到尾部返回头部)
2). ?hello(向上查找,到头部返回尾部)
3). # -- 把光标移动到查找的单词身上 , 按#
遍历时候的快捷键: N/n
7>. r: 替换当前字符
缩进:
向右: >>
向左: <<
8>. 查看man文档 可以指定章节
3 shift + k
文本模式下的操作:
切换到文本模式:
a -- 在光标所在位置的后边插入
A -- 在当前行的尾部插入
i -- 在光标所在位置的前边插入
I -- 在光标所在行的行首插入
o -- 在光标所在行的下边开辟一个新的行
O -- 在光标所在行的上边开辟一个新的行
s -- 删除光标后边的字符
S -- 删除光标所在的行
末行模式下的操作:
:
行跳转 :123 -> 跳转到第123行
替换一行 :s/abc/123 -> 将当前行中的第一个abc替换为123
:s/abc/123/g -> 将当前行中的abc全部替换为123
替换全部 :%s/abc/123 -> 将所有行中的第一个abc替换为123
:%s/abc/123/g -> 将所有行中的abc全部替换为123
:10,30s/abc/123/g -> 将10-30行中的abc全部替换为123
执行shell命令 末行模式里输入!,后面跟命令
查找 :s/tom
保存退出:
q: 退出
q!: 退出不保存
w: 保存
wq: 保存退出
x: == wq
在命令模式下保存退出: ZZ
末行模式分屏操作:
1>. 水平分屏 :sp
2>. 垂直分屏 :vsp
3>. 命令:sp(vsp) + 文件名 水平或垂直拆分窗口显示两个不同的文件
ctrl+ww 切换两个屏幕
命令 :wq 保存并退出光标所在的屏幕
命令 :wqall 保存并退出所有屏幕
2. gcc编译器
1>. gcc工作流程: gcc hello.c -o hello
预处理器cpp:头文件展开,宏替换,注释去掉
gcc -E hello.c -o hello.i
编译器gcc:C文件变成汇编文件
gcc -S hello.i -o hello.s
汇编器as:汇编文件变成二进制目标文件
gcc -c hello.s -o hello.o
链接器ld:将函数库组合到目标文件
gcc hello.o -o hello
2>. gcc的一些参数使用
1). -I 指定头文件目录
2). -c 只编译子程序
3). -o 产生指定名字的目标文件
4). -D 编译时定义宏
5). -g 包含调试信息(gdb调试的时候必须加此参数)
6). -Wall 提示更多警告信息
7). -O 编译优化0到3 级别
3. 静态库的制作
1>. 命名规则
1). lib + 库的名字 + .a
2). libmytest.a
2>. 制作步骤:
1). 生成对应的.o文件 -- .c --> .o -c
2). 将生成的.o文件打包 ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o
3>. 发布和使用静态库:
1). 发布静态库
生成的静态库需要跟对应的头文件同时发布
2). 头文件
gcc main.c lib/libMytest.a -I./ -o app
gcc + 源文件 + -L 静态库路径 + -l静态库名 + -I头文件目录 + -o 可执行文件名
gcc main.c -L./ -l Mytest -I./ -o app
3). 打包到程序的最小单位是.o
nm libMytest.a 可以查看静态库包含的内容 (可执行文件也可以查看)
4>. 优缺点:
优点:寻址方便,速度快
库被打包到可执行程序中,直接发布可执行程序即可使用
缺点:静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
如果静态库改变了,那么你的程序必须重新编译。
4. 共享库的制作:(动态库)
1>. 命名规则:
1). lib + 名字 + .so
2>. 制作步骤:
1). 生成与位置无关的代码 (生成与位置无关的.o)参数 -fPIC 表示生成与位置无关代码 执行完毕后生成一系列的 .o 文件
gcc -fPIC -c a.c b.c c.c
2). 将.o打包成共享库(动态库)
gcc -shared -o libMytest.so a.o b.o c.o -I头文件目录
3>. 发布和使用共享库:
gcc main.c -L./ -l Mytest -I include -o app
4>. 解决程序执行时动态库无法被加载的问题:
ldd app 查询可执行程序在执行时所需依赖的所有共享库
发现没有给动态链接器(ld-linux.so.2)指定好动态库 libmytest.so 的路径
1). 复制到系统的库目录/lib/中 -- 不允许使用
2). 临时测试
环境变量: LD_LIBRARY_PATH=将动态库的路径设置给该变量
将设置的值, 导入到系统环境变量中: export LD_LIBRARY_PATH
当终端关闭, 设置会失效
3). 不常用的方法(永久设置):
在家目录的 .bashrc文件 中添加一句话: export LD_LIBRARY_PATH=动态库目录的绝对路径
.bashrc修改完成, 需要重启终端
4).
1. 需要找动态连接器的配置文件 -- sudo vi /etc/ld.so.conf
2. 动态库的路径写到配置文件中 -- 绝对路径
3. 更新 -- sudo ldconfig -v(输出一些信息)
5>. 优缺点:
优点:节省内存(共享)
易于更新(动态链接)停止运行程序 使用新库覆盖旧库(保证新旧库名称一致,接口一致) “接口” 重新启动程序。
缺点:延时绑定,速度略慢
发布时需要将动态库发布给用户
Linux学习笔记-基本操作3的更多相关文章
- Linux学习笔记-基本操作5
1. Linux文件操作相关函数 stat函数 :获取文件属性(从inode上获取) 返回值: 成功:0 ...
- Linux学习笔记-基本操作1
1>. 命令解析器2>. Linux快捷键3>. Linux 系统目录结构4>. 用户目录5>. 文件和目录操作6>. 文件和目录的属性7>. 文件权限, 用 ...
- Linux学习笔记-基本操作4
1. gdb调试2. makefile的编写3. 系统IO函数 1. gdb调试: 1. 启动gdb + 可执行文件 2. 查看代码: l== ...
- Linux学习笔记-基本操作2
1. 压缩包管理2. 进程管理3. 网路管理4. ftp服务器搭建5. nfs服务器搭建6. ssh服务器7. scp命令8. 其他命令9. 关机重启 1. 压缩包管理 1>. 屌丝版:不能对目 ...
- 20155303狄惟佳预备作业三Linux学习笔记
20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...
- Linux 学习笔记 1 使用最小的系统,从分区安装系统开始
我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...
- Linux 学习笔记 5 文件的下载、压缩、解压、初步认识yum
写在前面 上节我们通过简单的几组命令,已经完全的实现了文件的移动.删除.更名.以及复制,我们最常用的基本玩法,本节将带着大家学习压缩.解压的相关步骤. Linux 学习笔记 4 创建.复制.移动.文件 ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- linux学习笔记2-linux的常用命令
第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...
随机推荐
- Gym-100883F、Gym-101095B状态压缩小结
状态压缩的核心思想就是将数压缩成二进制,用二进制位来表示对应的位能取或者不能取,相比起来很方便. Eg:Gym-100883F 题意:给你两个字符串,要求你将两个字符串合起来,并不改变原先的顺序,一共 ...
- RBAC简介
1.RBAC 中文名称:基于角色的访问控制 1.1 作用:实现访问控制 1.2 核心:角色 2.英文名称:(Role-Based Access Control) 3.解释:一种思想,根据RBAC思想进 ...
- ThinkPHP 二维码生成
请求获取并展示二维码 <img src="<?php echo U('createCode?zsnumber='.$time.$kcname['id'].$stuInfo['id ...
- Amount of Degrees(数位dp)
题目链接:传送门 思路:考虑二进制数字的情况,可以写成一个二叉树的形式,然后考虑区间[i……j]中满足的个数=[0……j]-[0……i-1]. 所以统计树高为i,中有j个1的数的个数. 对于一个二进制 ...
- Codeforces Round #514 (Div. 2) E. Split the Tree(倍增+贪心)
https://codeforces.com/contest/1059/problem/E 题意 给出一棵树,每个点都有一个权值,要求你找出最少条链,保证每个点都属于一条链,而且每条链不超过L个点 和 ...
- IntelliJ IDEA 2017版 spring-boot2.0.4的集成JSP
一.必须依赖四个包,其中三个是springboot自带包,可以不写版本号,有一个不在springboot中,需要设置版本号 <!--引入Spring Boot内嵌的Tomcat对Jsp的解析包- ...
- 第28章:MongoDB-索引--过期索引(TTL)
①过期索引(TTL) TTL索引是让文档的某个日期时间满足条件的时候自动删除文档,这是一种特殊的索引,这种索引不是为了提高查询速度的,TTL索引类似于缓存,缓存时间到了就过期了,就要被删除了 ②范例: ...
- Switch 选择结构
switch 选择器 一.语法 switch(变量名){ case 情况1: //代码块 break: case 情况1: //代码块 break: default(默认): //代码块 break: ...
- 几种修改Linux主机名的方法
在安装一些系统时,需要修改hostname,比如安装Hadoop时需要修改主机名,而且主机名不能包含下划线. 实际上,主机名分三种(命令hostnamectl或hostnamectl status可查 ...
- VC6.0编译器设置
主要通过VC的菜单项Project->Settings->C/C++页来完成.我们可以看到这一页的最下面Project Options中的内容,一般如下:/nologo /MDd /W3 ...