爱编程的大丙——Linux篇

查找命令

find

通配符:*?*可以匹配0个或多个字符,?只能匹配单个字符
通过文件名搜索:-name

find 路径 -name "文件名" (单引号双引号都可以)

通过文件类型搜索:-type
通过文件大小搜索:-size

find后处理

处理find后的结果:-exec
find添加了exec参数之后, 命令的尾部需要加一个后缀{} \;, 注意 {}和\之间需要有一个空格。

find 路径 参数 参数值 -exec shell命令2 {} \;

如搜索到满足条件的文件后,再继续查看文件的详细信息等
-ok也有相同的效果,不同点是处理前会询问是否处理
xargs也有相同的效果且更高效,但需要通过|来连接

find 路径 参数 参数值 | xargs shell命令2

grep

用于查找文件里符合条件的字符串
-r 递归搜索目录
-i 忽略大小写

grep "搜索内容" 搜索路径/文件 参数

同样单双引号都可以

locate

简化版的find,linux系统会自动创建一个本地数据库文件,每天自动更新一次。locate可以查最近没有发生过变动的文件,或使用updatedb更新数据库后,再查询


vim

vim有三种模式,命令模式、编辑模式、末行模式

搜索

直接按键盘上的/即可


GCC

GCC有四个阶段:

  • 预处理:展开头文件、宏替换、去掉注释行,得到xxx.i
  • 编译:得到汇编文件,得到xxx.s
  • 汇编:得到二进制文件,得到xxx.o
  • 链接:对程序要调用的库进行链接,最终得到一个可执行的二进制文件

静态库和动态库

静态库

静态库在编译链接阶段被复制到最终的可执行文件中,程序在运行时库文件
静态库比较少,主要是程序都在使用动态库
Linux中的静态库以lib作为前缀,以.a作为后缀,中间是库的名字,即:libxxx.a
Windows中静态库一般以lib作为前缀,lib作为后缀,即:libxxx.lib

生成静态库,通常先对原文件进行到汇编阶段得到.o格式的二进制文件,然后通过内部工具ar将文件打包得到静态库文件

动态库

程序运行时加载的库,可执行文件仅包含对库函数的引用,而不是库的代码本身。
Linux中动态库以lib作为前缀,以.so作为后缀,中间是库的名字,即:libxxx.so
Windows中静态库一般以lib作为前缀,dll作为后缀,即:libxxx.dll

生成动态库,直接使用gcc命令,在汇编时使用-fpic参数,在打包时使用-shared 参数

-fpic参数的作用:静态库中使用的是绝对地址,而动态库应用程序启动时才被加载到内存中,即可能被加载到内存的任何位置,故动态库中的函数和变量使用的是相对地址。其真实地址是动态连接器在程序运行期间通过引用映射加载出来的。具体地址解析过程取决于操作系统动态链接器使用懒惰解析还是立即解析模式,大部分都是懒惰解析模式。
动态链接器:是一个独立于应用程序的进程, 属于操作系统。

Makefile

当文件逐渐增多,GCC就显得力不从心了,这时候就需要借助项目构造工具makemake是一个命令工具,是一个解释makefile中指令的命令工具。
make工具在构造项目的时候需要加载一个叫做makefile的文件,makefile关系到了整个工程的编译规则。构建项目的时候在哪个目录下执行构建命令make这个目录下的makefile文件就会别加载。

Makefile规则

# 每条规则的语法格式:
target1,target2...: depend1, depend2, ...
			command
			...
			...

每条规则由三个部分组成:targetdependcommand

  • command:一个shell命令
  • depend:依赖
  • target:target和command相对应,生成目标

一些执行与生成规则:
**可嵌套:**规则A在执行过程中,如果有不存在的依赖,这个规则A就不会被执行。如果该依赖会被后续的规则B生成,则会调用该规则B,生成需要的依赖,直到规则A中所有依赖都被生成,该规则A生成对应目标。
时间戳:首先,规则中的目标对应的文件不存在, 那么规则中的命令肯定会被执行。若该文件存在,当目标文件时间戳 > 所有依赖的时间戳,规则命令不会被执行;若目标时间戳 < 某些依赖的时间戳,说明新生成了依赖,故目标文件会被重新生成。

Makefile变量

分为三种:自定义变量、预定义变量、自动变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值