Ctrl + l 清屏指令
Ctrl + Alt + T (ubuntu)创建终端
man man 查看帮助文档首页
alias ls 查看ls实际执行的指令
alias pag='ps aux | grep' 可以临时打造一个pag 但是关掉终端后就无效了
ehco “hello linux” 显示一个字符串输出到终端上
env 查看当前进程的环境变量
echo $path 查看path的值 $就是取值符
vi和vim的区别:vim是从vi发展过来的一款文本编译器
工作模式:
1.命令模式——打开文件之后 默认进入命令模式
光标的移动 H J K L 前 下 上 后
光标移动到行首: 0 光标移动到行尾: $
光标移动到当前文件头部: gg 文件末尾:G 行跳转:300G
删除光标后面的字符:x 删除光标前面的字符: X 撤销:u 反撤销: Ctrl + r
删除光标后面的一个单词: dw 删除当前行光标前面的内容:d0
删除当前行光标后面的内容: d$或者D 删除光标所在的行:dd 从当前行开始删除之后的4行: 4dd
2.编辑模式——需要输入一些命令 切换到编辑模式
3.末行模式——在末行模式下可以输入一些命令
ndd 不仅仅是删除 也是剪切 (n是行数)
P 从当前行开始粘贴 p 从下一行开始粘贴
yy 复制当前行 nyy 复制多行
v 进入可视模式 然后就可以选中一些文本 通过上下左右调整 想复制就是y 想删除就是d
在文本中查找一个特定的字符串:
在命令模式下 输入/hello 然后所有文本中的hello就会以黄色高亮显示出来 在这些高亮的hello中切换就按n 或者 N
如果我想查一下一个单词出现了多少次 就把光标移动到单词身上 按一下# 然后单词就变成了黄色高亮 切换就按n 或者 N
r + 一个字符 可以替换一个字符
向右缩进 >> 向左缩进 <<
章节号 + shift + k 可以查man文档函数定义
a 开始从光标的后面开始插入内容
A 跳到当前行尾部开始插入内容
i 开始从光标的前面开始插入内容
o 在光标所在行下创建了新的一行开始插入内容
O 在光标所在行上创建新的一行开始插入内容
s 删除光标后边一个字符 然后开始插入内容
S 删除光标所在行一整行 然后开始插入内容
只能从命令模式切换到末行模式——输入一个冒号 :
:300 跳转到300行
/originString 查到originString字符串
:s/originString/newString 把光标所在行的第一个originString替换成newString
:s/originString/newString/g 把光标所在行的所有originString替换成newString
:%s/originString/newString/g 把文件所有originString替换成newString
:27,30s/originString/newString/g 把27到30行的originString替换成newString
:!pwd 把当前的路径输出到终端
:!ls 把当前路径的内容输出到终端
:w 保存文件
:q 退出文件
:q! 退出不保存
:wq 保存并退出 (或者在命令模式下按两次大写的Z)
:sp 水平分屏当前文件
Ctrl + w + w 在命令模式下切换屏幕
:q 关掉光标所在屏幕
:qall 关掉两个屏幕
:vsp 垂直分屏当前文件
:vsp hello.c 垂直分屏另一个文件
vim可以打造成IDE
系统级配置文件目录 /etc/vim/vimrc (支持所有用户)
用户级配置文件目录 ~/.vim/vimrc
配置vimrc可以实现类似于每次进入vim时都有行号 背景色 文本颜色等一些修改
如果直接一步编译到位 gcc hello.c -o myapp 其本质也是执行了上面的三步 只是没有生成中间文件
gcc hello.c 也是可以的 默认会生成一个a.out
⚠️:.c文件包含的.h文件必须在同一目录下 不然找不到 但是可以直接指定头文件目录 gcc hello.c -I ./include -o myapp (注意这里是大写的i 后面指定头文件目录)
gcc hello.c -o myapp -D DEBUG 指定了一个宏 相对于执行程序的时候有了一个宏定义
gcc hello.c -o myapp -O3 最大程度优化代码 例如 :
int a = 10;
int b = a;
int c = b;
int d = c;
//优化过后
int d = 10;
gcc hello.c -o myapp -Wall 可以输出警告信息
gcc hello.c -o myapp -g 增加一些调试信息(gdb调试的时候需要)
使用静态库可以不发给客户源代码 只发给客户一个静态库和头文件就能执行程序
1.命名规则
1) lib + 库的名字 + .a
2) libmytest.a
2.制作步骤
1)生成对应的.o文件 .c ----->.o -c
2)将生成的.o文件打包 ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o
3.发布和使用静态库
1)发布静态库
2) 头文件
开发端:
cd src 首先进入源文件目录 这里都是.c文件
gcc *.c -c -I../include 这里是把所有.c文件替换成.o (二进制文件) -I是定义头文件目录
ar rcs libMyCalc.a *.o 生成静态库
mv libMyCalc.a ../lib 把刚生成的静态库放到上级目录里的lib库中
客户端:
这时就可以把include头文件和lib库发给用户了 然后用户写了一个main.c测试静态库中的加法运算
gcc main.c lib/libMyCalc.a -o sum -I ./include
gcc main.c -I ./include -L lib -l MyCalc -o sum 和上面效果一样
nm libMyCalc.a 可以查看静态库的内容
静态库的优点:
1.发布程序的时候 不需要提供对应的库 因为已经被打包到可执行文件了
2.库的加载速度快
缺点:
1.库被打包到应用程序中 导致库的体积很大
2.库发生了改变 需要重新编译程序
1.命名规则
1)lib + 名字 + .so
2.制作步骤
1)生成与位置无关的代码 (生成与位置无关的.o)
2)将.o打包成共享库(动态库)
cd src 进入源文件目录
gcc -fPIC -c *.c -I../include 生成与位置无关的.o文件 加-fPIC
gcc -shared -o libMyCalc.so *.o -I ./include 生成共享库
mv libMyCalc.so ../lib 移到到上一级目录的lib
gcc main.c lib/libMyCalc.so -o app -I ./include 客户生成可执行文件
gcc main.c -I ./include -L ./lib -l MyCalc -o app 和上面效果一样
ldd myapp 查看可执行文件执行的时候依赖的所有共享库
动态链接器是按照环境变量来找动态库的
临时导入环境变量测试(关掉终端会失效):
echo $LD_LIBRARY_PATH 加载库的时候如果没有配置环境变量 那么就可以配置在这里环境变量内 它会在默认的环境变脸之前先进行调用
export LD_LIBRARY_PATH=./lib 给这个额外配置的动态库环境变量赋值
永久的设置:
vi .bashrc 在家目录下打开.bashrc
在文件的最后一行加上export LD_LIBRARY_PATH=/home/itcast/day03/Calc/lib
⚠️:需要重启终端才能生效
最常用的设置方式:
1.需要找动态链接器的配置文件——动态库的路径写到配置文件中
2.更新 —— sudo ldconfig -v
具体步骤:
cd /etc
sudo vi ld.so.conf 如果没有修改过只有第一行内容 在下面创建新的一行
在文件中加上/home/itcast/day03/Calc/lib 这时本地动态库的路径 保存退出
sudo ldconfig -v 更新
接下来切换到工作目录day03下的Calc
ldd myapp 就能看到是可以链接到文件配置的绝对路径
动态库的优点:
1.执行程序体积比较小
2.动态库更新不需要重新编译程序 前提是接口没变
缺点:
1.发布程序的时候 需要将动态库提供给用户
2.动态库没有被打包到应用程序中 加载速度相对较慢