nfs 服务器搭建
服务器端
1创建目录
mkdir nfsc
2修改配置文件
/home/calmcar/目录*(rw,sync)
3重启服务
sudo service nfs-kernel-server restart
客户端
1挂载登录
sudo mount serverip:共享目录 /mnt
ssh服务器
服务器端:
安装ssh服务器
(sudo apt-get install openssh-server)
远程登录
ssh 用户名@ip
scp命令:还是必须安装ssh
scp -r 目标用户名@ip:文件目录路径 存放文件的路径
echo 指定制符串
就是让指定的字符串在终端显示,
echo $PATH
这个就是从指定的变量PATH中取值
$这个就是取值符号
vi/vim
先是安装vim
vi是先有
工作模式
命令模式
编辑模式
末行模式
vim编辑器使用
行首 0
行尾 $
文件开始位置gg
文件末尾G
复制yy nyy(就多行复制
删除 x 删除光标位置后边的东西
删除的本质是被剪切走了
删除行 dd ndd是删除多行
粘贴 p
撤销 u
反撤销ctrl + R
查找 /查找内容 这个是从光标位置向下查找
?查找内容 这个是从光标位置向上查找
n 这个是连续向下查找 可查找内容
N这个是连续向上查找 可查找内容
#这个能够给需要查找的内容加上高亮
替换 r
这个只能替换单个字符
切换函数对应的man操作
直接在光标下
shift + k
编辑模式
A在光标行的行尾输入
a在光标行的行首输入
s删除单个字符插入
S删除整行字符插入
末行模式
分屏操作:sp 水平 vsp竖直分屏
实现分屏幕切换:ctrl + ww
gcc源代码编辑器
流程:
预处理器:(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
-o 表示指定生成文件的名称,如果不指定就是默认生成一个文件,效果一样
仅仅是文件名称不一样
可以直接就是使用链接
在使用链接的同时
系统会自动调用对应的汇编器,编译器
项目中就是使用源代码生成的库提供给客户
保证客户能够使用其中的程序
但是看不见其中的源代码
发布给客户的就是
静态库和头文件
静态库就是一些二进制文件,但是别人不知道你这边有什么接口
头文件这个就是能够存放头文件的
静态库
命名规则:lib + 库的名称+.a
a表示静态库
静态库的制作步骤
1根据.c文件生成对应的.o文件
2将生成的.o文件打包
ar rcs + 静态库名字(×××.a)+生成的所有.o文件(这个是和位置有关.o)
ar是类是tar的一个打包工具 rcs就是打包使用的参数
静态库就是一堆打包好的.o 文件
给别人提供的静态库和头文件怎么使用
调用静态库就是自己写一个能够执行的文件
把这个文件和调用的库一起编译
在编译的时候并且指定头文件
就能够生成新的可执行程序
实际上静态链接的打包规则就是
新生成的可执行程序里边用到了库里边的什么函数
都是会直接编译到新生成的可执行程序当中去
没有调用的不会打包,但是动态库就是不打包的
在编译的时候,只是做标记,说明在什么时候需要用到
什么函数
静态库的优点:
发布程序的时候不用提供对应的库文件了
另外加载速度很快
静态库缺点:
导致执行文件很大
如果库发生改变,源代码需要重新编译,比较麻烦
共享库(动态库)
` 命名规则:lib + 名字 +so
制作步骤:
1生成和位置无关的代码,就是生成和位置无关的.o
gcc -fPIC (和静态库不同的就是多加了个参数)
2把生成的.o文件打包
这个直接用gcc -shared 打包
正常打包好了
可以直接执行这个程序
但是出现不能链接到动态库的情况??
命名就是已经打包好了
为什么不能链接上
首先我们用ldd + 可执行程序的名称
能够查看这个可执行程序调用的所有的动态库
动态连接器
本质就是一个动态库,根据环境变量能够找到想要调用的链接的库
echo $PATH查看环境变量
怎么解决?
1把这个动态库放到系统的动态库里边,能够解决这个问题(实际上不能使用)
但是一般不能这样使用,会导致系统出现麻烦
2LD_LABTARY_PATH这是一个环境变量,就是这个库的默认路径不是在PATH里边
但是这LD能够在查找PATH之前就能够提前获取这个里边的路径
怎么使用呢
export LD_LABTARY_PATH=./lib
其实就是给这个环境变量赋值
并且导入到这个环境变量
但是这只是一个临时的使用,就是每次使用的时候就需要临时导入
就是开发过程中需要临时导入进行测试
3怎么才能够永久使用????
在当前用户的根目录下有一个隐藏的.bashrc文件
在这个文件的最下边那一行中添加一个export LD_LABTARY_PATH=./lib
重新关闭终端之后再打开终端,就能够实现永久的导入使用
4这中方法比较复杂但是常用
(1)找到的动态连接器的配置文件
在/etc/ls.so.conf
(2)把动态库的路径写入到配置文件当中去
添加这个一个动态库的路径
(3)更新这个配置文件 ----sudo ldconfig(就是使用这个命令)
优点:
更新不用更新程序
缺点:
发布需要把动态库打包给客户
gcc编译器总结
预处理gcc -E
编译gcc -S
汇编gcc -c
链接
-D在编译的时候控制宏,一般就是控制log的输出
-o指定生成的文件名字
-I就是指定头文件的路径
什么是和位置有关无关?????
就是每一个程序在执行的过程当中,操作系统都能够分配一个0~4G的地址空间
(虚拟地址空间)这个指的是正在运行的程序,在这个地址空间当中,有一块区域就是
用来存放代码的,静态库就是这些.o文件有固定的存放地址,但是动态库不是在程序编
编译的时候调用的,而是在程序已经编译好了之后调用的,所以每次的存放库文件的地
址是不确定的。所以是和位置无关的情况。
makefile 代码管理工具
就是能够将代码统一编译
c库函数