zoukankan      html  css  js  c++  java
  • 《Linux系统编程笔记》----DAY01

    VIM基本操作

    跳转

    • 跳转到指定行:

      • 1.88G(命令模式)
      • 2.:88(末行模式)
    • 跳转到文件首

    ​ gg(命令模式)

    • 跳转文件尾

      • G(命令模式)
    • 光标移至行首:

      • 0(命令模式)
    • 光标移至行尾:

      • $(命令模式)
    • 自动格式化程序

      • gg=G
    • 大括号对应

      • %(命令模式)
    • 跳转至man手册:

    ​ 将光标置于待查看函数单词上,用NK(N是第几卷)

    • 查看宏定义:

      ​ 将光标置于待查看宏定义单词上,[d查看定义语句

    删除/替换

    • 删除一个字符

      • x(命令模式)
    • 删除一个单词

      • dw(命令模式)光标要放在首字母
    • 删除光标至行尾

      • D(命令模式)或者d+$
    • 删除光标至行首

      • d0(命令模式)

      删除指定区域:

      ​ 按v(命令模式)切换为“可视模式”,选中要删除的区域,按d删除

      删除指定一行

      ​ 在光标所在行,按dd

      删除多行

      ​ Ndd

    复制粘贴

    复制一行

    ​ yy(命令模式)

    ​ p粘贴(光标所在下一行)

    ​ P(粘贴)(光标所在上一行)

    查找和替换

    • 1.找设想的内容

    ​ 末行模式下按“/”输入要查找的单词 回车 n下一个

    • 2.找看到的内容

    ​ 命令模式下,将光标置于单词任意一个字符上,按“*”或"#"

    • 3.替换

    • 替换单个字符 ----r(命令模式)

      • -​ 3.1单行 末行模式,按 s /要替换的内容 /待替换的内容

      • -​ 3.2区域替换 末行模式,起始行号,终止行号 /要替换的内容 /待替换的内容/g

      • -​ 3.3通篇 末行模式 ,按%s /要替换的内容 /待替换的内容/g ,g不加,就是替换第一个

    • 撤销 u

    • 反撤销 ctrl+r

    • 显式行号 :set number

    末行模式 sp +回车(横屏) 切屏:ctrl+ww

    末行模式 vsp+回车(竖屏) 切屏:ctrl+ww

    在末行模式下执行shell命令

    ​ :!命令 :!ls-l



    gcc相关

    gcc编译可执行程序四步骤

    1.预处理(gcc -E):展开宏,头文件,替换条件编译,删除注释,空行,空白

    2.编译(gcc -S):检查语法规范【消耗时间,系统资源最多】

    3.汇编(gcc -c):将汇编指令翻译成机器指令

    4.链接(无参数):数据段合并,地址回填

    hello.c---预处理-->hello.i----编译---->hello.s-----汇编------>hello.o-----链接------>a.out

    gcc常用参数

    -I 指定头文件所在目录位置

    -c 只做预处理,编译,汇编。得到 二进制文件!(.o文件)

    -g 编译时添加调试文件。主要支持gdb调试

    -On n=0~3;编译优化,优化等级(默认2级),n越大优化越多

    -Wall 显式所有警告信息

    -D 向程序中,“动态”注册宏定义

    -L 指定库位置

    静态库和共享库

    ​ 静态库:对空间要求较低,而时间要求较高

    ​ 共享库:对空间要求较高,而时间要求较低

    制作静态库

    1.将 .c生成 .o文件

    gcc -c add.c -o add.o

    2.使用ar工具生成静态库

    ar	rcs	libmylib.a	file1.o
    

    3.编译静态库到可执行文件中

    ​ gcc test.c lib库名.a -o a.out

    制作动态库

    1.将.c生成.o文件(生成与位置无关的代码 -fPIC)

    ​ gcc -c add.c -o add.o -fPIC

    ​ 2.使用 gcc -shared 制作动态库(.so文件)

    ​ gcc -shared -o lib库名.so add.o sub.o

    ​ 3.编译可执行程序时,指定所使用的动态库。-l:指定库名(去掉lib前缀和.so后缀),-L:指定库路径

    ​ gcc test.c -o a.out -l mymath -L ./lib

    ​ 4.运行可执行程序 ./a.out出错

    *​ 原因:

    ​ 链接器 工作于链接阶段,工作时需要 -l和-L

    ​ 动态链接器 工作于层序运行阶段,工作时需要提供动态库所在目录位置

    ​ 【1】通过环境变量改变:export LD_LIBRARY_PATH=动态库路径

    ​ 【2】永久生效:写入 终端配置文件。 .bashrc

    ​ 1)vi ~./bashrc

    ​ 2)写入export LD_LIBRARY_PATH=动态库路径

    ​ 3). .bashrc/ source .bashrc /重启 终端----->让修改后的.bashrc生效 *

    ​ 【3】修改/etc/ld.so.conf

    ​ 1.sudo vi /etc/ld.so.conf

    ​ 2.添加你的共享库路径

    ​ 3.更新查找共享库的路径

    ​ sudo ldconfig -v

    ​ 4.测试程序可否找到共享库

    ​ ldd a.out

    扩展——数据段合并(链接时合并)
    【好像我记得上面的步骤有问题,下次使用记得的再补充】

    gdb调式工具

    -g :使用该参数编译可执行文件,得到调试表

    ​ gdb a.out
    ​ list:list 1 列出源码。根据源码指定 行号设置断点

    ​ b: b 20 在20行设置断点

    ​ r: 运行程序

    ​ n: 下一条指令(会越过函数)

    ​ s: 下一条指令(会进入函数)

    ​ p: 查看变量的值

    ​ continue:继续执行断点后续指令

    ​ quit:退出gdb当前调试

    ​ finish:结束当前函数调用

    gdb其他指令

    出现段错误,解决方法:

    ​ run:使用run查找段错误位置

    ​ set args:设置main函数命令行参数

    ​ run 字串1 字串2 ...:设置main函数命令行参数

    ​ info b:查看断点信息表

    ​ b 20 if i=5:设置条件断点

    ​ ptype:查看变量类型

    ​ bt:列出当前程序正存活着的栈帧(形参和局部变量都在栈帧上)

    ​ frame:根据栈帧编号进行切换

    ​ display:跟踪变量值,undisplay 取消跟踪

    set follow-fork-mode child	命令设置gdb在fork之后跟踪进程
    set follow-fork-mode parent	设置跟踪父进程
    

    makefile项目管理

    命名:makefile	Makefile	------make命令
    

    1个规则

    目标:依赖条件
    	(一个tab缩进)命令
    
    • 目标的时间必须晚于依赖条件的时间,否则,更新目标

    • 依赖条件如果不存在,找寻新的规则去产生依赖

    ALL:指定makefile的终极目标

    2个函数:

    ​ src=$(wildcard *.c)

    ​ 找到当前目录下所有后缀为.c的文件,赋值给src(src=add.c sub.c div.c)

    obj=$(patsubst %.c,%.o,$(src))

    ​ 将参数3中,包含参数1的部分,替换为参数2(obj=add.o sub.o div.o)

    ​ clean:(没有依赖)

    -rm -rf $(obj) a.out “-”作用是:删除不存在文件时,不报错。顺序执行结束

    3个自动变量

    ​ $@:在规则的命令中,表示规则中的目标

    ​ $<:在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖一次取出,套用模式规则

    ​ $^:表示规则中的所有条件,组成一个列表,以空格隔开,如果这个列表中有重复的规则消除重复项

    ​ 模式规则:

    ​ %.o:%.c

    ​ gcc -c $< -o $@

    ​ 静态模式规则:

    ​ $(obj):%.o:%.c

    ​ 伪目标:

    ​ .PHONY:clean All
    ​ 参数:

    ​ -n : 模拟执行make,make clean命令

    ​ -f: 指定文件执行make命令

  • 相关阅读:
    proc文件系统的简介
    linux获取文件属性(API)
    busybox inittab文件分析
    设计模式之Builder模式
    This用法
    以 280W 数据为依据。对比SQL2008 表分区前和分区后的 T_SQL 效率
    jquery数据验证插件(自制,简单,练手)
    C# 每天温习一点(IEnumerable<TSource>)
    多线程应用扫盲(如何简单使用多线程)
    之前做web性能优化的一些个人心得
  • 原文地址:https://www.cnblogs.com/hongweijiang/p/14514046.html
Copyright © 2011-2022 走看看