Linux系统常用命令(3)

    xiaoxiao2022-07-13  144

    1. man命令

    2. echo命令

    例1:

    例2:   查看某环境变量的值

    3. vim的三种模式

    vim中是不能用鼠标的,我们需要用命令来对文件进行操作。

    4. vim中的光标位置删除_撤销操作

    注:光标实际处在所覆盖字符的前面位置。

    5. vim中的复制和粘贴

    复制光标所在当前行是命令 yy ,删除其实就是剪切。

    6. vim可视模式和查找

          

    让当前行向右缩进:>>    

    让当前行向右缩进:<<

    查看man文档:当进行查找操作后,光标此时在查找到的内容身上,此时 shift + k  可以进入它所在man文档中首次出现的位置。如果此时 3 + shift + k 可以指定跳转到man文档的第三章。

    7. 命令模式切换到文本模式

    注:1. a和i 在光标所在位置的后边和前边插入,这里的光标所在位置指的是被光标覆盖的字符,就是在这个字符的后边和前边插入。2. s 删除光标后边的字符指的就是被光标覆盖的字符。

    8. 末行模式相关操作

    (1)查找替换:

             1) :s/tom/jack     将光标所在行的第一个tom换成jack。

             2) :s/tom/jack/g     将光标所在行的所有tom都换成jack。

             3) :%s/tom/jack      文档中每一行的第一个tom被换成jack。

             4) :%s/tom/jack/g      文档中所有的tom都被换成jack。

             5) :27,30s/tom/jack/g      只有第27-30行的tom被换成jack。

    (2)在末行模式下用  :!+ 命令   来执行命令:     :!pwd   或    :!ls    等会输出信息:

             

    (3)保存退出

            

    9. vi分屏

    (1):sp  显示上下分屏

    (2):vsp   显示左右分屏

    (3):sp + 文件名字   /   :vsp + 文件名字         新打开的文件和之前的文件就会一起显示。   如果修改内容了的话,需要在保存之后两个才会显示的一样。

    (4)ctrl + w + w    在两个分屏之间进行切换。

    (5):q  关掉一个分屏     :qw   关掉并保存一个分屏    :qwall   关掉并保存所有分屏,等等组合。

    10. vim的配置文件

    11. gcc的编译过程

    例:

    12. gcc的一些参数

    (1)gcc sum.c -o myapp      这样就可以直接生成myapp这个可执行文件。

    (2)gcc sum.c -I ./include -o app     如果头文件不在当前目录下,需要指定头文件所在的目录(比如在./include),用 -I 参数指定。

    (3)下面这段代码define了一个宏DEBUG,并且在要printf时判断是否定义这个宏了,如果定义了就执行printf。

    那么如果把#define DEBUG给注释掉,那么再生成并执行的程序就不输出打印的内容了。我们用一个方法也可以加宏,就是在编译程序的时候,用参数-D DEBUG指定宏就可以了,这样就又可以输出打印内容了,如下:

    (4)-O1、-O2、-O3   这三个参数可以不同程度优化程序,可以把冗余的代码做一个优化,其中O3优化的级别最高。

    (5)-Wall 参数可以在程序编译时输出警告信息。

    (6)-g 参数是在程序中添加一些调试信息。(gdb调试的时候必须加此参数)

    13. 静态库的制作和使用

    例:

    Calc目录中有一个main.c文件,还有3个目录:include、lib、src。

    打开src目录中的一个文件,比如add.c:

    里面是add的实现:

    打开include目录中的head.h头文件,里面是函数的声明:

    下面开始生成静态库,先是第一步,生成对应的.o文件:

    然后是第二步,将生成的.o文件打包:

    这样就生成了静态库libMyCalc.a,然后把它移动到lib目录中去:

    现在把include目录和lib目录给用户,他们就可以用了。下面是在main.c中使用:

    生成可执行文件sum并执行(方法1):

    生成可执行文件sum并执行(方法2): -L参数用来指定静态库所在目录, -l参数用来指定静态库的名称(去掉头尾)。

    14. 静态库的优缺点

    如果程序中只调用了函数a()和函数b(),那么编译生成的可执行文件中只包含add.o和sub.o。

    静态库的优点:

    (1)发布程序的时候,不需要提供对应的库

    (2)加载库的速度快

    静态库的缺点:

    (1)库被打包到应用程序中,导致可执行文件体积较大。

    (2)库发生了改变,需要重新编译程序。

    15. 共享库的制作

    例:

    生成与位置无关的代码:

    用静态库生成可执行文件后,.o文件在程序运行初始时就在代码段中了,位置是固定的,称为与位置有关的.o;

    而用共享库时,在程序运行起来之后共享库才被逐步被加载到  共享库区,每次位置不一定相同,称为与位置无关的.o。

    上面已经生成.o了,现在生成动态库.so:

    然后把.so移动到 lib目录中:

    现在把include目录和 lib目录给用户,他们就可以用了。

    16. 共享库的使用

    生成可执行文件(方法1):

    生成可执行文件(方法2):

    现在运行可执行文件会发现运行不了,这是因为找不到动态库libMyCalc.so。

    可执行程序在执行时,动态链接器会自动调用需要使用的动态库。

    ldd命令可以查看可执行文件依赖的动态库,下图红框框起来的动态库就是动态链接器。

    可以看到自己创建的动态库 libMyCalc.so 在程序运行时是不能被找到的,我们有以下方法来解决:

    推荐使用第4种方法。解决后可以看到程序可以正常运行了。

    17. 共享库的优缺点

    共享库的优点:

    (1)可执行文件体积小。

    (2)动态库更新了,不需要重新编译程序(函数接口不变时)。

    共享库的缺点:

    (1)发布程序的时候,需要将动态库提供给客户。

    (2)动态库没有被打包到应用程序中,加载速度相对较慢。

     

    最新回复(0)