2021-2022-1 20212824《Linux内核原理与分析》第一周作业

使用gcc中碰到的问题

在这里插入图片描述
这个地方应该是由于 修改了.c文件中的函数之后和头文件里的函数申明格式不一样导致的

gcc静态库

主要命令如下
gcc -c -I /头文件所在的路径 *.c 这样可以生成需要的.o文件
-I 是指定头文件目录用的
在这里插入图片描述
ar rcvs libmath.a *.c 就可以生成.a的静态库文件
在这里插入图片描述
gcc main.c -o -o main -L. -lmath就可以生成可执行文件main

gcc 动态库

首先生成.o文件
gcc -fPIC -c -I /头文件所在的目录 *.c
在这里插入图片描述

得到
在这里插入图片描述
然后生成.so的动态库文件
gcc -shared -o libmath.so *.o
在这里插入图片描述
然后将libmath.so复制到/usr/lib文件夹中
在这里插入图片描述
得到
在这里插入图片描述
最后一步我感觉差不多 就是生成可执行文件main
gcc main.c -o main -I /头文件所在的目录 -L. -lmath
在这里插入图片描述
在这里插入图片描述

虽然这个地方除法函数好像有点问题,不过之后再回来改好了

gdb调试

在这里插入图片描述
先用-g 参数 生成一个可调试的文件
然后使用命令
cgdb test 进行调试
在这里插入图片描述
我觉得 cgdb比较好一点 所以没有用gdb

然后借下来打上两个断点
一个打在main函数那,一个打在fun函数那

在这里插入图片描述
输入r把程序跑起来直到第一个断点处,然后用c跑到第二个断点处
中间我还把i打印出来看了一下

在这里插入图片描述
这个地方我打了一个条件断点当i=50 打断点那一行被顶上去了
在这里插入图片描述

makefile的使用

在这里插入图片描述
开始还不太会写路径,所以我就把head.h文件也放在/src文件夹下面了
然后这个$(objects)是变量的使用,必须要声明在Makefile文件的最上方
然后有一很很重要的就是gcc -o testmath $(objects)这句代码中,testmath后面的空格不能省略,不然会出现错误(我出现了对main的未定义引用)

我愿意称之为makefile圣经

linux基础

终端

在这里插入图片描述

shell

shell是“给使用者提供使用界面”的软件
Ubuntu默认使用的shell 是bash,默认的终端环境是GNOME
实验楼默认使用的shellzsh,默认的桌面环境是XFCE

命令行常用快捷键

ctrl + d键盘输入结束或者退出终端
ctrl + s暂停当前程序,按下任意键恢复
ctrl + z程序放到后台运行,用fg恢复至前台。
ctrl + a光标移动至前台
ctrl + e光标移动至行末
ctrl + k删除光标从所在位置到行末
Alt+backspace删除前一个单词
shift + pgup终端显示向上滚动
shift + pgdn终端显示向下滚动
·
touch test_{1..10}.txt一次创建多个文件

实验楼查看用户

who am iwho mom likes
在这里插入图片描述

用户组

groups查看处在哪个用户组
查看/etc/group文件也行
在实验楼中删除用户
sudo deluser lilei --remove-home
在这里插入图片描述

FHS文件标准

第一层规范

/ 下面的各个目录应该要存放什么文件数据,例如/etc应该放置配置文件 /bin和/sbin应该放可执行文件

第二层规范

针对/usr 和/var 这俩目录的子目录来定义 。如/var/log放系统日志文件。/usr/share放置共享数据

批量修改后缀名

rename 's/\.txt/\.c/' *.txt 把所有txt文件的后缀改为.c
rename 'y/a-z/A-Z/ *.c 把所有.文件的文件名和后缀名改成大写

分页查看文件

more
less

读取变量

echo $变量名 读取变量

环境变量

在这里插入图片描述

搜索文件

whereis 文件名但是这个东西只能查找二进制文件和源代码文件,还有man帮助文件
locate
which
sudo find /去查找的地方/ -name interfaces

挑战一

find /etc -name sources.list 找到该文件
sudo chown shiyanlou sources,lit修改文件所有者在这里插入图片描述
chmod 600 sources.list将文件权限修改为只有自己能够写或者读
在这里插入图片描述

文件压缩、解压缩

zip -r -q -o命令
其中 -r 表示递归打包,-q表示安静模式(不在屏幕打印),-o指定输出文件名
du -h 压缩包名称查看压缩包文件大小
unzip -l 名称.zip -l参数表示,不想解压,只是想看看压缩包的内容
unzip -O GBK 中文压缩文件.zip -O 指定解压的编码格式

tar -P -cf 输出文件.tar 需要压缩的文件
-P 保留绝对路径符,-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后

tar -tf 需要解压的文件.tar -t 只查看文件不解压

在这里插入图片描述

文件与磁盘系统

df查看磁盘容量
在这里插入图片描述

du -h -d 1 ~查看1级目录的文件信息

crontab

在这里插入图片描述

添加新任务选择编辑器添加新任务

查看已添加的任务

在这里插入图片描述

crontab -e 添加一个任务
crontab -l 查看任务
crontab -r 删除任务

挑战二

有一说一,这个挑战还是蛮好玩的(虽然我没掌握这个写脚本的格式)
在这里插入图片描述
这个是想要执行的命令
在这里插入图片描述

命令执行与管道

&& 在命令行中可以表选择性执行,若前面的命令返回值是0,则执行后面的命令,否则就不执行后面的命令。
which cowsay>/dev/null && cowsay -f head-in ohch~
||的意思和上面那个刚好相反。

ls -al /etc | less 管道命令,前面的当作后面的输入

简单的重定向

可以通过>和`>>讲内容重定向输出或追加到某一个文件中去

cat > Documents/test.c <<EOF 比如使用这个命令,也可以向test.c文件中输入内容
在这里插入图片描述

挑战3

cat data1 |cut -c 8-|sort|uniq -dc|sort -rn -k1 |head -3 > /home/shiyanlou/result

cut制定输出某些文件中的某些元素-c指按字符定位 8-第八个字符之后的数据
sort命令对文本内容进行排序,默认按字典顺序
uniq出去文本中重复的行 -d仅显示重复出现的行列 -c标出该行重复出现的次数
head -3显示最头上三行的数据
>把输出重定向到某个文件中

挑战4

一个正则匹配的题
grep -E '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$' /home/shiyanlou/data2 > /home/shiyanlou/mail

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值