#20145205《信息安全系统设计基础》第八周学习暨期中总结

知识点总结

常用的Linux命令

man命令

man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。
常用选项
-a:在所有的man帮助手册中搜索
-k:根据关键字搜索联机帮助,是一种模糊搜索
-f:关键字精确搜索,等价于whatis指令,显示给定关键字的简短描述信息

-M:指定man手册搜索的路径
参数
数字:指定从哪本man手册中搜索帮助
关键字:指定要搜索帮助的关键字
man -k:常用来搜索,结合管道使用。例句如下:man -k k1 | grep k2 | grep 2

cheat命令

在linux上,虽然我们可以用man命令调出该指令的命令帮助列表,但是其实我们不一定会看,因为那帮助太繁琐枯燥了,内容又长,我们又不知道自己要用的命令的例子又是怎样,所有有了简单易懂的cheat命令。正如它的名字一样,就像作弊一样,我们可以跳过学习的阶段,直接掌握如何使用一个命令。

grep命令

grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
命令格式:grep [options]
主要参数
-c:只输出匹配行的计数
-I:不区分大小写(只适用于单字符)
-h:查询多文件时不显示文件名
-l:查询多文件时只输出包含匹配字符的文件名
-n:显示匹配行及行号
-s:不显示不存在或无匹配文本的错误信息
-v:显示不包含匹配文本的所有行

find命令

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
命令格式:find pathname -options [-print -exec -ok ...]
参数
pathname:find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录
print:find命令将匹配的文件输出到标准输出

常用选项
-name:按照文件名查找文件
-perm:按照文件权限来查找文件
mtime -n +n:按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前
-newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件
-type:查找某一类型的文件,诸如:b - 块设备文件,d - 目录,c - 字符设备文件,p - 管道文件,l - 符号链接文件,f - 普通文件
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
举例:查找当前目录下大小大于50M的文件,查找大小大于10K的文件

locate命令

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
命令格式:locate [选择参数] [样式]
命令参数
-e:将排除在寻找的范围之外
-1:如果是1则启动安全模式,在安全模式下,使用者不会看到权限无法看到的档案。这会使速度减慢,因为 locate必须至实际的档案系统中取得档案的权限资料
-f:将特定的档案系统排除在外,例如我们没有到必要把proc档案系统中的档案放在资料库中
-q:安静模式,不会显示任何错误讯息
-n:至多显示 n个输出
-r:使用正规运算式 做寻找的条件
-o:指定资料库存的名称
-d:指定资料库的路径
-h:显示辅助讯息
-V:显示程式的版本讯息

whereis命令

whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
命令格式:whereis [-bmsu] [BMS 目录名 -f ] 文件名
主要参数
-b:定位可执行文件
-m:定位帮助文件
-s:定位源代码文件
-u:搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件
-B:指定搜索可执行文件的路径
-M:指定搜索帮助文件的路径
-S:指定搜索源代码文件的路径

which命令

which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。which是根据使用者所配置的PATH变量内的目录去搜寻可运行档的,所以,不同的PATH配置内容所找到的命令是不一样的。
命令格式:which 可执行文件名称
命令参数
-n:指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名
-p:与-n参数相同,但此处的包括了文件的路径
-w:指定输出时栏位的宽度
-V:显示版本信息

find、locate、which、whereis的区别

which (寻找执行档) :这个指令是根据PATH这个环境变量所规范的路径,去搜寻执行档的档名,所以,重点是找出执行档而已,which 后面接的是完整档名
whereis (寻找特定档案):搜寻linux数据库档案中所记录的东西,和locate的主要区别在于后面的参数
locate:搜寻linux数据库档案中所记录的东西,后面直接跟档案的部分名称就行
find:直接搜索整个硬盘

sort命令

将文本文件内容加以排序。可针对文本文件的内容,以行为单位来排序。
参数
m:将几个排序好的文件进行合并。
n:依照数值的大小排序
Linux Bash中,ls . | sort 命令的功能是(显示当前目录内容并排序)

du命令

显示目录或文件的大小。du会显示指定的目录或文件所占用的磁盘空间。
参数
a:显示目录中个别文件的大小。
b:显示目录或文件大小时,以byte为单位。
c: 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和

ls命令

显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。
参数
a:显示所有档案及目录
A:同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
t:将档案依建立时间之先后次序列出
列出目前工作目录下所有档案及目录;目录于名称后加 "/", 可执行档于名称后加 "*" : ls -AF
Linux Bash中,把ls命令显示当前目录的结果存入ls.txt的命令输出重定向命令是(ls > ls.txt)
vi、 gcc、gdb、make的使用

Vim六种模式

  1. 普通模式(Normal mode):在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。在普通模式中,进入插入模式比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
  2. 插入模式(Insert mode):在插入模式中,可以按ESC键回到普通模式。
  3. 可视模式(Visual mode):命令多与字母v有关,移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。
  4. 选择模式(Select mode):这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。
  5. 命令行模式(Command line mode):在命令行模式中,执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
  6. Ex模式(Ex mode):这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。

Vim常用命令总结

插入
i:在当前光标处进行编辑
a:在光标后插入编辑
退出
q!:强制退出,不保存
:q:退出
:wq!:强制保存并退出
:wq:保存并退出
:w <文件路径>:另存为
删除
x:删除游标所在的字符
dd:删除整行

GCC编译过程

以hello.c为例
预处理:gcc –E hello.c –o hello.i ;gcc –E调用cpp 产生预处理过的C原始程序
编译:gcc –S hello.i –o hello.s ;gcc –S调用ccl 产生汇编语言原始程序
汇编:gcc –c hello.s –o hello.o ;gcc -c 调用as 产生目标文件
链 接:gcc hello.o –o hello ;gcc -o 调用ld 产生可执行文件
运行: ./hello
下面是gcc常用选项

下面是gcc库选项

静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文 件);链接阶段,选择静态库,后缀名为“.a”;选择动态库,后缀名为“.so”。
静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o
静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx//链接到静态库
注意
-L:在库文件的搜索路径列表中添加dir目录
-l:在头文件的搜索路径列表中添加dir目录

共享库

共享库的生成
gcc -fPIC -c xxx.c
gcc -shared -o libxxx.so xxx.o
共享库的使用:gcc -o main main.c -L. -lxxx
注册共享库的方法:将库文件直接复制到/lib或者/usr/lib目录下: cp (lib+name).so /lib

GDB调试

进入gdb
gcc -g xxx.c -o xxx
gdb xxx
查看源码
(gdb) l:进行行号提示
(gdb) b n:在第n行设置断点
(gdb) r:运行代码,运行至断点处
(gdb) n:单步运行
(gdb) c:使程序继续往下运行,直到再次遇到断点或程序结束
(gdb) q:退出GDB
(gdb) watch n:在"n"设置了观察点,观察变量的变化情况
下面是gdb工作环境相关命令

下面是gdb设置断点与恢复命令

makefile

功能:识别文件代码是否更新,减少编译工作量
格式
目标体:依赖文件

目标体:由make创建,通常是目标文件或可执行文件
依赖文件:创建目标体所依赖的文件
运行命令:创建每个目标体时需要的运行命令,必须以tab键开头。
使用make的格式:make 目标体
下面是makefile中常见的自动变量 和环境变量

下面是makefile中常用的预定义变量

下面是make的命令行选项

自己的收获

在已经过去的七周,我感觉到自己在这门课上的收获在于以下几个方面。
首先我学习到在一个新的系统进行命令行的操作,这点是可以将来也给我们带来益处的,因为图形化界面一直在不断的发展和更新,而且当中核心命令只是不断的增加,并不会随着系统的升级而改变,我学到是一种核心的元知识,这点是我的收获之一。
第二点是我对于课程学习方法的提升,虽然有着学习JAVA的基础,但是显然这么课程比起JAVA的学习更加考验我们的能力,我任务娄老师选择这样的教学方式,拒接了以往的填鸭式教学,是给我们在之后自己一个人在提升自己上打基础,因为这门课程很像是我们之后在工作中面对任务的情况。给了我们任务,没有人会手把手指导你去如何去做,我们只能去使用我们可以得到的一切资源去完成任务,无论是前任留下的经验,网络中其他人撰写的文章,还是大家出版的教材,或是一些同好者的给出的建议,或是一起接下任务的同伴,这就是我们完成任务的一切资源和条件,我们的目的就是完成任务,基本依靠自己,和这门课的学习一样,在面对一门全新的课程,我们的任务就是每周的学习任务,如何完成就是我们的做的工作如何,而考核我们的方式就是每次课上的考试,这样我们可以一眼到自己上周学习的情况,是认真的完成了任务,还自己敷衍了过去,都是一目了然的情况,就像工作中的业绩考核一样,每个阶段都有每个阶段的考核,而到了最后就是结业的成绩和年终考核评定工作成果的时候,我想也许我之后面对那样的情况也会几分自信吧。

自己的不足

 自己在前几周的时候,学习态度不太好,对于课程的学习有些懈怠,这点在每次测验的成绩就可以如实的反应出来,但是最近几周自己找到了学习的快感,也许是每个人都有奴性或是这样说,在付出努力后取得收获的满足感,在看到自己确实付出了很多时间去学习后得到的分数一点一点增加,是让我继续努力的动力。在剩余学期学习中,我自己要继续努力,完成学习任务后,再不断提高自己,总是感觉自己可以学的更多一些,本身对于这个学期的课程也是很有兴趣,希望自己这份热度可以保持。

课程建议和意见

 对于课程意见,在最开始的几周,我感觉工作量还是有些大,而且开始接触的时候,教材中有些命令确实挺难懂的,虽然老师想培养我们的自主学习意识,但是我还是希望,老师可以多提点我们一二,因为并不是每个人都可以完美的进行自主学习,对于有些同学来说确实需要一些帮助,就可以走得更快一些。还有就是在考核的内容上,有些内容确实让我们有些摸不着头脑,比如有次测验考了一个人名,绝大多数的我们在学习中忽略了这个,因为感觉我们学习的是知识,而在计算机行业中,如若不是开拓者的名字总会被人淡忘,希望之后老师可给出更加具体的内容重要程度的说明吧,让我们可以按照重要性进行学习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 24篇 350小时
第一周 0/0 1/2 8/8
第二周 49/49 1/3 10/18
第三周 0/49 2/5 10/28
第四周 0/49 0/5 0/28
第五周 42/91 1/6 15/43
第六周 184/275 1/7 30/73
第七周 94/369 1/8 20/93
第八周 0/369 2/10 15/105

参考资料

posted @ 2016-11-06 01:11  20145205武钰  阅读(159)  评论(2编辑  收藏  举报