20175327 《信息安全系统设计基础》第1周学习总结
教材学习内容总结
1.熟悉Linux系统下的开发环境
- Linux为何物
- Linux 就是一个操作系统,也就是系统调用和内核那两层
- Linux命令
command [options] [arguments]
command作用于arguments,options区别指令的不同
- man指令
man -k
可以结合grep
多关键字查找- 等价命令
apropos
man -f cmd
查看命令的基本功能,等价于whatis
- cheat命令
- 快捷键
ctrl+c
中端程序
Ctrl+d
键盘输入结束或退出终端
Ctrl+s
暂定当前程序,暂停后按下任意键恢复运行
Ctrl+z
将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a
将光标移至输入行头,相当于Home键
Ctrl+e
将光标移至输入行末,相当于End键
Ctrl+k
删除从光标所在位置到行末
Alt+Backspace
向前删除一个单词
Shift+PgUp
将终端显示向上滚动
Shift+PgDn
将终端显示向下滚动
- Shell 常用通配符
*
匹配 0 或多个字符
?
匹配任意一个字符
[list]
匹配 list 中的任意单一字符
[!list]
匹配 除list 中的任意单一字符以外的字符
[c1-c2]
匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
{string1,string2,...}
匹配 sring1 或 string2 (或更多)其一字符串
{c2..c2}
匹配 c1-c2 中全部字符 如{1..10}
who am i
命令查看用户- who 命令其它常用参数
-a
打印能打印的全部
-d
打印死掉的进程
-m
同am i,mom likes
-q
打印当前登录用户数及用户名
-u
打印当前登录用户登录信息
-r
打印运行等级
- who 命令其它常用参数
su <user>
切换到用户user,su<cmd>
以特权级别运行cmd命令,su - <user>
切换用户的同时环境变量也会跟着切换groups <user>
命令得知用户属于哪个组usermod
命令为用户添加用户组,deluer
删除用户ls -l
查看文件权限cd
命令切换目录:.
表示当前目录,..
表示上一级目录,-
表示上一次所在目录,~
通常表示当前用户的"home"目录。使用pwd
命令可以获取当前所在路径(绝对路径)mkdir(make directories)
命令可以创建一个空目录,也可同时指定创建目录的权限属性,-p
参数,同时创建父目录cp(copy)
命令复制一个文件或目录到指定目录,复制目录加参数-r
- 使用
rm
命令,删除一个文件或目录,删除目录加参数-r
- 使用
mv
命令,移动文件(剪切),
重命名文件,批量重命名,rename来实现 - 使用
cat
,tac
和nl
命令查看文件,cat
为正序显示,tac
倒序显示,nl
命令,添加行号并打印 - 使用
more
和less
命令分页查看文件,打开后默认只显示一屏内容,终端底部显示当前阅读的进度(百分比)。可以使用Enter
键向下滚动一行,使用Space
键向下滚动一屏,按下h
显示帮助,q
退出 - 使用
head
和tail
命令查看文件,只查看的头几行(默认为10行,不足10行则显示全部)和尾几行,也可以加上-n参数,后面紧跟行数 file
命令可以查看文件的类型declare
命令创建变量- 环境变量有关命令:
set
显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量
env
显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
export
显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量 - 变量修改:
${变量名#匹配字串}
从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串}
从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串}
从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串}
从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串}
将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串}
将符合旧字串的全部字串替换为新的字串 - Linux文件压缩格式:
*.zip
zip程序打包压缩的文件
*.rar
rar程序压缩的文件
*.7z
7zip程序压缩的文件
*.tar
tar程序打包,未压缩的文件
*.gz
gzip程序(GNU zip)压缩的文件
*.xz
xz程序压缩的文件
*.bz2
bzip2程序压缩的文件
*.tar.gz
tar打包,gzip程序压缩的文件
*.tar.xz
tar打包,xz程序压缩的文件 zip
压缩打包程序,zip -r -q -o shiyanlou.zip /home/shiyanlou
-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用du命令查看打包后文件的大小,-e参数可以创建加密压缩包,-l
参数转换格式,使之在Windows下打开没有问题unzip
命令解压缩zip文件,-d
表示路径(不存在会自动创建),-l
不解压只查看压缩包内容,-o
指定编码类型rar
打包压缩命令,rar a shiyanlou.rar
压缩文件(使用a
参数添加一个目录~到一个归档文件中,如果该文件不存在就会自动创建),rar d shiyanlou.rar .zshrc
从指定压缩包文件中删除某个文件,rar l shiyanlou.rar
查看不解压文件,unrar x shiyanlou.rar
全路径解压,unrar e shiyanlou.rar tmp/
去掉路径解压tar
打包工具,tar -cf shiyanlou.tar ~
创建一个 tar 包,-c
表示创建一个 tar 包文件,-f
用于指定创建的文件名,注意文件名必须紧跟在-f
参数之后,-v
参数以可视的的方式输出打包的文件。上面会自动去掉表示绝对路径的/
,你也可以使用-P
保留绝对路径符,解包一个文件(-x
参数)到指定路径的已存在目录(-C
参数),只查看不解包文件-t
参数df
命令查看磁盘的容量,加-h
转换成能看懂的形式du
命令查看目录的容量,-d
参数指定查看目录的深度(1级目录~ 0~)dd
命令用于转换和复制文件,bs(block size)
用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),count
用于指定块数量bs(block size)
用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),count用于指定块数量dd
命令创建虚拟镜像文件,dd if=/dev/zero of=virtual.img bs=1M count=256
mkfs
命令格式化磁盘,命令sudo mkfs.ext4 virtual.img
格式化为ext4文件系统sudo mount
查看下主机已经挂载的文件系统,命令格式mount [options] [source] [directory]
,常用操作mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]
,umount
命令卸载已挂载磁盘sudo umount /mnt
fdisk
为磁盘分区,查看硬盘分区表信息sudo fdisk -l
,进入磁盘分区模式sudo fdisk virtual.img
- 用
type
查看,内建命令
xxx is a shell builtin
外部命令
xxx is /usr/sbin/xxx
指令为命令别名所设定的名称
xxx is an alias for xx --xxx
help
命令只能用于显示内建命令的帮助信息。外部命令基本上都有一个参数--help
,这样就可以得到相应的的帮助man
没有内建与外部命令的区分cut
命令,打印每一行的某一字段grep
命令,在文本中或 stdin 中查找匹配字符串,格式grep [命令选项]... 用于匹配的表达式 [文件]...
wc
命令,简单小巧的计数工具sort
排序命令uniq
去重命令tr
命令可以用来删除一段文本信息中的某些文字- 使用
tee
命令同时重定向到多个文件,除了将需要将输出重定向到文件之外也需要将信息打印在终端 - 永久重定向,使用
exec
命令 - 利用设个/dev/null屏蔽命令的输出完全屏蔽命令的输出
2.熟悉vi的基本操作
参考:https://blog.csdn.net/xie_xiansheng/article/details/78413306
3.熟悉gcc编译器的基本原理
GCC编译器编译程序的流程:源文件(*.c)–>预处理(预处理器)–>编译(编译器)–>汇编(汇编器)–>链接(链接器)–>可执行文件
假定有一个最简单的hello.c源文件,代码即输出一个helloworld。通过几个不同步骤来展现gcc的编译器编译流程:
第一步:~ gcc -E hello.c -o hello.i 这是讲源文件进行预处理器处理,也就是主要进行一些宏替换,不会进行语法检查,-E参数可以让gcc在预处理结束后停止后面的编译过程。
第二步:~ gcc -c hello.i -o hello.o 此步骤会进行一些语法检查,将.i文件编译成目标文件。
第三步:~ gcc hello.o -o hello 第三步也是最后一步,将目标链接为一个可执行文件,最后的hello是自定义生成的可执行文件名。
GCC编译模块化的程序:代码:~ gcc denpend.c hello.c -o hello
4.熟练使用gcc编译器的常用选项
参考:https://blog.csdn.net/arackethis/article/details/43370307
5.熟练使用gdb调试技术
1)启动gdb
gdb hello或者gdbfile hello
2)显示程序
list 或者 l
3)打断点
break(b) main() //函数的入口处
break(b) 11 //行号
break(b) hello.c:14 //特定文件的行号
break(b) 12 if i=10 //if语句满足后在行号处打断点
4)获取断点信息
info break
5)删除断点
delete 13(断点编号)
6)运行程序
run(r)
7)单步(不进入子函数)
next(n)
8)单步(进入子函数)
step(s)
9)继续运行
continue(c)
10)查看变量
print(p) i(变量名)
11)运行程序到当前函数结束
finish
12)监控变量
watch i(变量名)
13)退出gdb
quit(q)
6.熟悉makefile基本原理及语法规范
7.掌握静态库和动态库的生成与调用方法
参考:https://blog.csdn.net/hua12134/article/details/88381929
8.理解C程序中模块的概仿,模块分解的“高内聚,低耦合”的原则
高内聚:
如果类中的方法是一组相关的行为,则称该类是高内聚的,反之成为低内聚的。
高内聚便于类的维护,而低内聚不利于类的维护。
迭代器模式中,对于高内聚低耦合原则的使用会有很好的解释。
低耦合:
就是尽量不要让一个类有太多其他类的实例引用,以避免修改系统的其中一部分会影响到其他部分,
中介者模式中,就会体会到这个低耦合原则的必要性。
9.了解链接的概念
参考:https://blog.csdn.net/u011857683/article/details/81044856
教材学习中的问题和解决过程
xxx
xxx
代码调试中的问题和解决过程
xxx
xxx
课后作业中的问题和解决过程
XXX
XXX
本周代码托管截图
其他(感悟、思考等,可选)
xxx
xxx