一、文件管理
1.查找文件
find
查找格式: find 路径 选项 选项值
示例: find /usr -name stdlib.h
find是搜索每个文件夹,慢。
查找任意文件
which
查找可执行文件,一般用来查找命令 (相比较而言,查找速度快。因为which 只在指定的路径下查找,查找的是可执行文件)
which并不是在路径里搜索文件,它是去环境变量里找。
环境变量:就是一些可执行文件的路径,系统是通过环境变量找到可执行文件。
如果系统环境变量中没有配置ls和which的路径,那么在执行ls和vi命令的时候将会失败。
示例:which ls
locate
sudo updatedb
locate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。
locate 的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 /var/lib/slocate/slocate.db 中,
所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库
2. 压缩文件
tar
压缩: tar cvfz dir.tar.gz dir
解压缩: tar xvfz dir.tar.gz
tar xzvf test809.tar.gz -C test 解压到指定路径下
c 创建压缩文件
x 解压缩
v 显示压缩过程
f 将多个文件打包生成一个文件
z 以gzip格式压缩
3.链接文件
ln
建立硬链接: ln an.c an.bak // 根据物理编号inode 节点,建立连接
此时 an.c 和an.bak 是同一个文件的两个inode节点(文件节点)
创建文件的时候,文件名就是一个硬链接。
touch a.c
//a.c会成为这个文件的第一个硬链接
//文件的本质是数据,我们需要通过链接访问这些数据。
删除所有的硬链接,文件的本体就不在了。
建立软链接: ln -s an.c an.lnk // 根据路径 建立连接。 windows快捷方式一个概念
总结:
硬链接文件,相当于一个实时备份文件。 同时,文件的链接数+1 。 如果想删除文件,需要删除所有的索引域。
索引域为0时,数据域才真正的被删除。如果文件多于1个索引。 而只删除了其中一个索引。文件的数据域并不会丢失。
软链接文件:相当于一个快捷方式。 它并不会增加文件的链接数。 是一个独立的快捷方式。 如果源文件被删除掉,
这个文件就真的被删除掉了。 此时软链接文件失效。 只要在原来的路径下,创建相同名字的文件,则软链接文件重新生效 。
4.管道符
|
作用: 前一个命令的输出,作为第二个命令的输入。
grep 在文本中查找关键字
cat test.c|grep for 查看test.c的内容,将查找到的内容作为grep的输入。
管道符的作用,将cat test.c的输出作为输入传给grep命令,grep命令会在输入中查找for关键字
5. 重定向符号 :
把本应该输出的内容,存放到文件里
>
>>
> 重定向 会覆盖原来的内容
>> 追加重定向 会在原有内容的后面追加新内容
示例: ls / > file.txt
二、Gcc编译器
gcc(是一个编译器, 是GNU组织主要的编译工具)
gcc 是一个跨平台(跨软件平台 和 硬件平台)的编译器。
跨平台,代码可以通过不同的编译器编译到适合不同平台运行的程序。
在windows下开发了一款软件,只需要使用linux支持的编译器对代码进行编译,这个软件就可以在linux下运行。这个过程叫做交叉编译。
1.编译命令
gcc 编译在不指定生成的可执行文件的名字时,默认的名字是 a.out
-o 指定生成文件的名称
gcc hello.c -o hello 编译hello.c文件,生成可执行文件的名字叫hello,可执行文件的名字自己起名
或者 gcc -o hello hello.c
./ 运行程序
./hello 运行名字叫做hello的程序
2.gcc 编译步骤
经过了四步 1 预处理 2 编译 3 汇编 4 链接
(1) 预处理
如果只做预处理 gcc -E -o hello.i hello.c
-E代表只做预处理
include是将头文件的内容复制到include的位置。
define是使用宏值替换宏名
(2) 编译(将c 文件变成汇编文件,注意此时还没有生成机器码)
编译到汇编步骤 gcc -S -o hello.s hello.c
(3) 汇编(将c 文件变成机器码文件(二进制文件))
如果只做汇编 gcc -c hello.c, 会自动生成hello.o (机器码文件, 二进制文件)
生成二进制文件人类已经无法阅读了
(4) 链接
gcc -o hello hello.c
-o 需要生成可执行文件的名字 hello 最终生成的可执行文件的名字
将使用的函数的源码(二进制)以及必要的库中的代码也加到可执行文件里
hello可执行文件是需要运行的 ./hello
链接之后程序变大。
3. gcc编译多个文件
main.c add.c del.c
main.c
void add();
void del();
int main()
{
add();
del();
return 0;
}
///add.c//
#include <stdio.h>
void add()
{
printf("add\n");
}
///del.c/
#include <stdio.h>
void del()
{
printf("del\n");
}
gcc main.c add.c del.c -o main
./main
/add.h/
void add();
///del.h///
void del();
///main.c/
#include "add.h"
#include "del.h"
//""包含自己写的头文件,一般都是相对路径
int main()
{
add();
del();
return 0;
}