20211105李宜时《信息安全系统设计基础》第一周学习总结
老师好,我针对教科书和云班课上面的知识学习了这门课第一章和第二章的知识
Linux的一些常用的命令
ls:用于列出目录中的文件和子目录。
cd:用于改变当前工作目录。
pwd:显示当前工作目录的路径。
mkdir:创建新的目录。
rmdir:删除空目录。
touch:创建新的空文件或更新已有文件的时间戳。
cp:复制文件或目录。
mv:移动文件或目录,也可用于重命名文件。
rm:删除文件或目录。
cat:显示文件内容,也可用于合并文件。
more/less:逐页显示文件内容。
head/tail:显示文件的开头或结尾部分。
grep:在文件中搜索文本模式。
find:查找文件或目录。
chmod:更改文件或目录的权限。
chown:更改文件或目录的所有者。
ps:显示正在运行的进程。
kill:终止进程。
df:显示磁盘空间使用情况。
du:显示目录的磁盘使用情况。
tar:用于压缩和解压文件。
wget/curl:从网络下载文件。
ssh:通过安全的Shell连接远程主机。
ping:测试与主机的网络连接。
ifconfig/ip:配置网络接口信息。
以下是我在看书的过程中结合实践的笔记和截图
这是我看第二章的书里面觉得的重点。
以下是我对书上的一些知识的实践和对gpt的询问来解决我的问题
以下是我的对几个重点知识的尝试
gcc
- 学习编译器gcc
命令格式:gcc「选项」「文件名」
-E :仅执行编译预处理
-S:将c代码转换为汇编代码
-c:仅执行编译操作,不进行连接操作
-o:制定生成的输出文件
-I(i):制定头文件目录
-l:制定程序要链接的库
-L:制定库文件所在的目录名
2.这个文件进行试验
(1)gcc -E hello.c -o hello.i
将.c文件预处理成为.i文件
(2)gcc -S hello.i -o hello.s
将预处理输出文件i变为s
(3)gcc -c hello.s -o hello.o
将输出文件,s变为.o
(4)gcc hello.o -o hello
将输出文件.o连接成最终可以执行的文件hello
以上的操作可以通过gcc hello.c -o hello
- 多个文件编译:
一起编译:gcc test_a.c test_b.c -o test或gcc *.c -o test
分别编译各个原文件,在对编译后的输出文件链接:
gcc -c test_a.c //生成test_a.o
gcc -c test_b.c //生成test_b.o
gcc -o test_a.o test_b.o -o test
不同:第一个需要所有文件重新编译
第二个只需要编译修改过的文件
项目的目录结构
Src:存放.c文件
Include:存放.h文件也就是头文件
Bin:存放项目调试之后的可运行文件
Libs:存放动态库和静态库文件
Readme.md:阅读指南文件,包括如何使用这个程序等
Makefile:描述整个工程的编译,链接等功能,自动化
-l 参数:输入gcc*c(一起编译所有.c文件)-o main
静态库和动态库,静态函数库,动态函数库:gcc-c-l|头文件所在路径,生成o文件
输入 ar rcvs。。。生成静态库
Add.c sub.c mul.c div.c
makefile
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
t :t.c
gcc -g -o t t.c
gdb
功能,启动程序,并且可以设置运行环境和参数来运行指定程序
让程序在指定断点处停止执行
对程序作出相应调整,纠正错误后继续调试,
注意: 使用-g编译选项的gcc命令来编译元程序
如:gcc -g test.c -o test
通过gbd test来启动gbd
Help(gbd 命令的种类)
Help all(查看所有的命令)
Help
Help
这个是云班课里面的代码用来调试
#include <stdio. h> int func(int n)
{
int sum=0, i;
for (i=0;i<n; i++)
{ sum+=i;
}
return sum;
}
int main)
{
int i;
long result=0;
for (i=1;1<=100;¡++)
{
result +=i;
printf("result[1-100]=%ld\n" , result);
printf("result[1-2501=%d\n" func (250);
}
longjump
#include <stdio.h>
#include <setjmp.h>
jmp_buf env;
void A();
void B();
int main()
{
int r, a = 100;
printf("call setjmp to save environment\n");
if ((r = setjmp(env)) == 0) {
A();
printf("normal return\n");
} else {
printf("back to main() via long jump, r=%d a=%d\n", r, a);
}
return 0;
}
void A()
{
printf("enter A()\n");
B();
printf("exit A()\n");
}
void B()
{
printf("enter B()\n");
printf("long jump? (y|n) ");
if (getchar() == 'y') {
longjmp(env, 1234);
}
printf("exit B()\n");
}
苏格拉底提问
我使用了chatgpt对我的linux相关知识进行了提问我进行了回答,我没学过的不会的问题也使用chatgpt进行了解答