2 linux常用工具
目录
一、回顾指令
1、硬链接与软链接
1.1硬链接:
- 相当于创建了一个副本,新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用。 源文件与新建的文件的节点号一样。"ln 源文件 链接文件"指令
1.2软链接:
- 也称为符号链接,新建的文件以“路径”的形式来表示另一个文件,和Windows的快捷方式十分相似,新建的软链接可以指向不存在的文件."ln -s 源文件 链接文件"
1.3硬链接和软连接之间的区别:
- 硬链接和原来的文件没有什么区别,而且共享一个 inode 号(文件在文件系统上的唯一标识);
而软链接不共享 inode,也可以说是个特殊的 inode,所以和原来的 inode 有区别。 - 若原文件删除了,则该软连接则不可以访问,而硬连接则是可以的。
- 由于符号链接的特性,导致其可以跨越磁盘分区,但硬链接不具备这个特性.
- 软链接和硬链接,更改链接文件,目的文件也会改变
2、修改文件权限指令
- 想将1.c的权限改为 rwx-w-r-- -- chmod 0724 1.c
3、修改文件的所属人
- chown 用户名 文件名 -- chown kfc 1.c
4、查找指定文件指令
- sudo find 路径 -name 文件名
二、linux下的常用工具
1、vim编辑器
-- 编辑器 - 编写代码的工具
1.1 vim的安装配置
- sudo apt-get update
- sudo apt install vim
1.2 vim的使用
-
注:在vim中如果按下了 ctrl+s vim会直接卡住 此时必须按下ctrl+ q 才可以解除卡顿
-
主要操作
-- (1)进入vim的时候默认进入到命令模式,此时对键盘的所有输入都被识别为命令。在命令模式下能进行许多操作,例如:
-- (2)只能从命令模式进入到插入模式, 在命令模式下按下i按键可以进入插入模式。当然,也有其他按键可以进入 。
-- (3)从任何模式返回命令模式 需要按下esc
-- (4)在命令模式下输入冒号就可以进入底行模式,在底行模式下可以输入指令,例如:
-- (5)在命令模式下输入/也可以进入底行模式。指令 "/字符串" 是用来查找指定字符串,":%s /源字符串/新字符串/g" 是用来替换字符串的 -
-- (6)在命令模式下 用鼠标进行选中即可进入可视模式,或者按下v也可以进入可视模式。
tip1:
-- 如果想每次用vim打开文件后,都会在.c文件中有一个初始的内容。就将我上传的文件复制在家目录下,就可以了。
注:该文件是一个隐藏文件,复制过去看不到 ,可以用“ls -a”指令看。
-- 主要更改的文件是将我发的文件的最后,更改如果打开.c文件就会显示的内容。
-- 将其更改为自己想要的效果就可以,我的效果如下:
-- 如果重复复制文件出现错误的时候或者想改变该文件的时候,解决方法:
tip2:
-- vim的功能有很多,基本上键盘上的每一个键,都有相对应的功能。想了解的可以去这个网站。
2、gcc编译器
-- c语言代码是让人类来阅读的 计算机是如何执行该程序呢? 计算机只认识二进制.
-- 主要目标:掌握 c 语言是如何一步一步变成机器语言的
- C 语言-->汇编-->机器语言(二进制)
(1)预处理 -- 处理所有#开头的语句
- #include 进行展开 #define 进行替换
- gcc -E xxx.c -o xxx.i
(2)编译 -- 将c语言编译为汇编语言
- gcc -S xxx.i -o xxx.s
(3)汇编 -- 将汇编语言转化为机器语言(二进制)
- as xxx.s -o xxx.o
(4)链接 -- 链接函数库
- 我们在程序中运行的函数 需要找到函数的定义,函数的定义就放在了别人写好的函数库中
- gcc xxx.o -o xxx
-- gcc 指令的一些选项
- -o 指定生成的文件名
- -E 预处理
- -I (大写 i)指定头文件路径
- -S 编译 将预处理过的文件编译成汇编
- -c 只编译不链接 会进行预处理 编译 汇编操作
- -l (小写 L)用来指定链接的函数库 例如: -lmath
- -lpthread
- -L 指定链接的库路径
3、函数库
- 库里面存放的是编译好的二进制代码
3.1静态库 -- .a结尾
-- 制作静态库的步骤
-
1 将函数编译成二进制文件
gcc -c xxx.c -o xxx.o -
2 将生成好的二进制文件进行打包 打包成静态库
ar -rc lib 库名.a xxx.o xxx.o .... -
3 链接静态库
gcc main.c 静态库
gcc main.c -L 静态库所在路径 -l 库名 -
生成的可执行文件会将静态库中的函数加载到可执行文件中去
-
删除静态库 对可执行文件无影响
-
用空间换时间
3.2动态库 -- .so结尾
-
1 将函数编译成二进制文件
gcc -fPIC -c xxx.c -o xxx.o -
2 将二进制文件制作成动态库
gcc -shared -fPIC -o libxxx.so xxx.o xxx.o ...... -
3 将制作好的动态库复制到/lib 目录下(必须要)
sudo cp libxxx.so /lib -
4 链接动态库
gcc main.c -lxxx -
动态库链接成功之后 当我们运行可执行程序的时候 才会去动态库中去查找我们所需的函数原型
-
删除动态库 可执行文件无法执行
-
用时间换空间