Linux命令
https://www.bilibili.com/video/BV1dt411f7TZ?p=64
Day3 笔记
编辑器使用
工作模式:
- 命令模式 – 默认
- 编辑模式 -
- 末行模式 - :
具体使用
-  vim编辑器使用 命令模式: (1) 光标移动 hjkl 前 下 上 后 移动光标 0 行首 $ 行尾 gg文件头部 G文件尾部 500G第500行 (2) 删除操作 删除光标所在字符 x 删除光标前面的字符 X 删除单词 dw (注意移动单词到光标单词的第一个字符上) d0 删除光标前面所有东西 d$ / D 删除光标后面的所有内容 dd删除一行 4dd 删除4行 (3) 撤销操作 u 撤销 ctrl r 反撤销 (4) 复制粘贴 p粘贴 (粘贴在光标所在下一行) P 粘贴在当前行 yy 复制所在行 4yy 复制4行内容 (5) 可视操作 v 切换到可视模式 复制 y 删除 d (无换行操作) (6) 查找操作 
 /查找的内容(从光标位置 向下 最下边后 返回到头部)
 n 向下切换 N 向上切换
 ?查找的内容 (从光标位置向上查找 顶部之后 返回尾部)
 光标移动到单词处 # 开始搜索当前单词(7) 替换操作 
 r 单个字符替换
 <</>> 缩进修改(8) 查看man文档 K 跳转到man文档 3K则跳转到第三章 
 zz保存退出
 编辑模式 a 切换模式
 a 在光标后开始插入字符
 A 当前行尾部开始插入字符
 i 在光标前开始插入字符
 o 光标下一行创建新行并开始输入内容
 O 光标上一行创建新行并开始输入内容
 s 删除光标字符开始输入
 S删除一整行并开始输入
 **末行模式 :切换模式 **
  300 跳转到行
  字符串的替换
  当前行的替换 s/tom/jack/g 则替换tom为jack
  替换所有的 %s/tom/jack/g 则全部替换
  替换某几行的内容 :27,30s/tom/jack/g
 :!pwd 则可输入命令
 退出模式 esc esc 则可退回
 保存文件 :w保存 :q 退出 :q! 退出不保存 :wq 保存退出
 分屏操作
 末行模式下 水平分屏 :sp ctrl ww 切换 关闭全部要加all
 垂直分屏: :vsp
-  gcc编译器 
 预处理 gcc -E sum.c -o sum.i
 编译生成汇编文件 gcc -S sum.i -o sum.s
 生成二进制文件 gcc -c sum.s -o sum.o
 链接生成可执行程序 gcc sum.o -o app直接生成可执行程序 gcc sum.c -o myapp 指定头文件路径 gcc sum.c -I ./incude -o app -I include 指定宏 gcc sum.c -o app -I include -D DEBUG -O1/2/3 (优化等级) -Wall (输出警告信息) -g (添加调试信息) 
-  静态库 
 (1) 命名规则
 lib + 库的名字 + .a
 .libmaytest.a(2) 制作步骤 
 生成对应的.o gcc -c *.c
 将生成的.o文件打包 ar rcs + 静态库的名字 (libMytest.a) + 生成的所有的. o(3) 发布和使用静态库 
 发布静态库
 头文件(4) 优缺点 gcc main.c -I include -L lib -l Mycalc -o myapp  自己的程序 头文件 静态库 具体静态库(需要掐头去尾)生成可执行的文件 
 nm libMyCalc.a 可查看
 优点:发布程序时不需要提供对应的库;执行调用库时加载速度快
 缺点:打包到应用程序 导致库体积很大; 库发生了改变需要重新编译程序
-  动态库(共享库) 
 (1)命名规则
 lib + 库的名字 + .so 
 0-3G的用户空间 程序启动后才加载动态库(2)制作步骤 生成与位置无关的代码(生成.o)gcc -fPIC -c *.c -I ./incude 
 将.o打包成共享库(动态库)gcc -shared -o libMyCalc.so *.o -I include(3) 发布和使用共享库 
 gcc main.c lib/libMyCalc.so -o ap -Iincude
 gcc main.c -I include -L ./lib -l MyCalc -o myapp(4)解决执行程序时动态库无法被加载的问题ldd 查看可执行程序所依赖的共享库 echo $ LD_LIBRARY_PATH exprot LD_LIBRARY_PATH = ./lib 直接修改环境变量(关闭当前终端后失效) 
 永久设置bash配置文件ls -a ;vi .bashrc; 添加以上语句 一般使用方法 
-  动态库的优缺点 优点:执行程序体积小;动态库更新不需要编译程序 (接口不变) 缺点:发布程序时需要提供动态库;没有打包在应用程序中,加载较慢 









