Linux系统编程
~代表 根目录,每个用户根不同。
系统根目录
bin:存放可执行文件。
boot:系统开机启动的进程
dev:设备文件
etc:用户的配置文件
passwd:用户信息
home:用户的目录
lib:库目录
root:root权限用户目录
usr:unix software resource目录
Linux系统文件类型:
普通文件:-
目录文件:d
字符设备文件:c
块设备文件:b
软连接:l
管道文件:p
套接字:s
未知文件:u
软连接:
为保证软连接可以任意搬移,创建时务必对源文件使用绝对路径
硬链接:
操作系统给每一个文件富裕唯一的inode,当有相同的inode的文件存在时,彼此同步。
删除的时候,只将硬连接计数-1.当计数为0 inode文件被释放。
(
inode 和 block 概述
文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector
,每个扇区存储512字节
。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block
。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB
,即连续八个sector
组成一个block
。
文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode
,中文译名为索引节点
,也叫i节点
。因此,一个文件必须占用一个inode
,但至少占用一个block
。
)
Linux检查与检索
find 命令
-type 按文件类型搜索
-name 按文件名搜索
-
find ./ -name '*.jpg'
find ./ -type 'l'
find ./ -size +20m -size -50m
find ./ -size +20k -size -50k(只能小k) 单位:k、M、G
find ./ -name -maxdepth 1 '*.jpg*
find /usr/ -name '*tmp*' -exec ls -ld {} \
find -exec:讲find结果集执行某一指定的命令
sudo find ./ ctime 1 一天内修改
grep 根据内容检索
grep -r 'hello' ./
-xargs 当结果集数量过大的时候,可以分片进行处理
ps 命令 监控后台进程的工作情况
ps aux|grep 只有一条结果 说明系统没有该进程。
至少两条。
ps aux | grep '' ---通过管道,检索进程结果集
源码安装
1、解压缩源代码包
2、cd dir
3、./configure
检测文件是否缺失,创建Makefile,检测编译环境
4、make
编译源码,生成库和可执行程序
5、sudo make install
把库和可主席那个程序,安装到系统路径下
6、sudo make distclean
删除和卸载文件
软件安装:
1、联网
2、更新软件资源列表到本地sudo apt-get update
3、安装sudo apt-get install 软件名
4、卸载sudo apt-get remove 软件名
5、使用软件包.deb 安装: sudo dpkg -i 安装包名
压缩:
1、tar -zcvf 要生成的压缩包名 压缩材料。
tar zcvv test.tar.gz file1 dir2
tar zcvf 要生成的压缩包名 压缩材料
gzip gunzip 只能解压或压缩一个文件
tar zcvf test.tar.gz file1 dir2 使用gzip方式压缩
tar jcvf test.tar.gz file1 dir2 使用bzip2方式压缩
解压
将压缩命令中c-->x
tar zcvf test.tar.gz 使用gzip方式压缩
tar jcvf test.tar.gz 使用bzip2方式压缩
rar
打包:把dir压缩成newdir.rar
rar a -r new dir dir
解包:把newdir.rar解压缩到当前目录
unrar x newdir.rar
zip压缩:
zip -r 压缩包名(带.zip后缀)压缩材料
zip -r testzip.zip dir stdio.h test2.mp3
zip 解压
unzip -r
cat & (&让进程后台运行)
jobs 查看用户后台进程
fg 前后台切换
top 任务管理器
程序运行过程
gcc -c是小写。
gcc编译
步骤:
1、编译
-I:指定头文件所在目录位置
-c:只做预处理、编译、汇编。得到二进制文件
-g:编译时添加调试语句。主要支持gdb调试
-Wall:显示所有警告信息
-D:显示所有的宏。动态增加。
静态库和共享库
静态库制作步骤:
1、将.c生成.o文件
gcc -c add.c -o add.o
2、使用ar工具制作静态库
ar rcs lib库名.a add.o sub.o
3、编译静态库到可执行的文件中:
gcc test.c libmymath.a -o test
把.c和静态库一起编译。
头文件守卫:防止头文件被重复包含
#ifndef _HEAD_H_
#define _HEAD_H_
.....
#endif
动态库制作及使用
1、将.c生成.o文件(生成与位置无关的代码 -fPIC)
gcc -c add.c -o add.o -fPIC
2、使用gcc -shared 制作动态库
gcc -shared lib库名.so add.o sub.o div.o
3、使用动态库
编译可执行程序,指定所使用的动态库。-l -L
-l:指定库名 -L:指定库的路径
gcc test.c -o a.out -l lib库名 -L:指定库路径。
gcc test.c -o a.out -lmymath -L./lib
4、运行可执行程序./a.out (出错!!!!)
原因:
链接器:工作于链接阶段,工作的时候需要 -l 和 -L
动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置。
通过环境变量:export LD_LIBRARY_PATH=动态库路径
./a.out 成功!