20145219 《信息安全系统设计基础》第01周学习总结
教材学习内容总结
- 别出心裁的Linux命令学习法 - 1、Ubuntu快捷键 - CTRL+ALT+T:打开终端;CTRL+SHIFT+T:新建标签页;ALT+数字N:终端中切换到第N个标签页;Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成;上下键盘:切换命令历史,刚输入一个很长的命令,按上键就可以恢复;CTRL+C:中断程序运行。- 2、Linux命令 - 命令格式: - command [options] [arguments]。- 括号是可选的,有些命令不需要选项也不需要参数。 - 选项(option)是调整命令执行行为的开关,选项不同决定了命令的显示结果不同,- 参数(arugment)是指命令的作用对象。- 3、ls命令 - ls或- ls .是两条等价的命令,显示当前目录的内容。这里“.”就是参数,表示当前目录,这个参数缺省可以省略。- ls -a .命令表示显示当前目录中的所有内容,包括隐藏文件和目录。- 4、man命令 - man是manul的缩写,我们可以通过 - man man来查看man的帮助。- 其中,1,2,3是我们学习的重点: - 1是普通的Linux命令 2是系统调用,操作系统的提供的服务接口 3是库函数,C语言中的函数- 多关键字查找: - man -k key1 | grep key2 | grep key3 | ...- man -k等价的命令- apropos,使用- man -k找到命令后,可以用- man -f cmd查看命令的基本功能。- man -f等价于- whatis- 5、 cheat 命令 - cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。 - 6、其他核心命令 - find:查找一个文件在系统中的什么位置,可以通过cheat find学习find命令。- locate:神速版本的find(Windows下有个神器Everything和locate功能类似)。- grep:可以对文件全文检索。通过- grep -n main *.c可以快速找到main在哪个C文件中并指出在第几行。grep支持正则表达式,可以通过- cheat grep学习grep命令。- whereis、which:告诉你使用的命令工具装在什么地方。我们在Linux下上网使用firefox浏览器,大家可以使用- whereis firefox或更精确的使用- which firefox来看看结果。- apt-cache:可以在使用- apt-get install安装一个程序时先找找软件源的库里有没有这个程序,有才可以安装。
- Linux基础 - 1、知识 - 元知识:形成构建解决问题的专业体系的深度思考力;硬知识:给记忆造成大量的负担,又耗费大量的时间记忆的知识;软知识:经验知识。
- Linux 基础入门 - 1、Linux :一个操作系统。 - 2、操作系统:始于二十世纪 50 年代,当时的操作系统能运行批处理程序。批处理程序不需要用户的交互,它从文件或者穿孔卡片读取数据,然后输出到另外一个文件或者打印机。二十世纪六十年代初,交互式操作系统开始流行。它不仅仅可以交互,还能使多个用户从不同的终端同时操作主机。这样的操作系统被称作分时操作系统,它的出现对批处理操作系统是个极大的挑战。 - 3、重要人物: - Ken Thompson:C 语言之父和 UNIX 之父Dennis Ritchie:C 语言之父和 UNIX 之父Stallman:著名黑客,GNU 创始人,开发了 Emacs、gcc、bash shellBill Joy:BSD 开发者Tanenbaum:Minix 开发者Linus Torvalds:Linux 之父,芬兰赫尔辛基大学- 4、Linux 与 Windows 的不同 - (1)软件支持: - Windows 平台:数量和质量的优势,不过大部分为收费软件;由微软官方提供重要支持和服务; - Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;有全球所有的 Linux 开发者和自由软件社区提供支持。 - (2)安全性: - Windows 平台:三天两头打补丁安装系统安全更新,还是会中病毒木马; - Linux 平台:相对来说肯定比 Windows 平台要更加安全,不用装某杀毒,某毒霸。 - (3)使用习惯: - Windows:普通用户基本都是纯图形界面下操作使用,依靠鼠标和键盘完成一切操作,用户上手容易入门简单; - Linux:兼具图形界面操作(需要使用带有桌面环境的发行版)和完全的命令行操作,可以只用键盘完成一切操作,新手入门较困难,需要一些学习和指导(这正是我们要做的事情),一旦熟练之后效率极高。 
- 基本概念及操作 - 1、Terminal(终端) - 终端(Terminal)和控制台(Console)是有区别的。使用[Ctrl]+[Alt]+[F1]~[F6]进行切换标签,切换到其中一个终端后想要切换回图形界面,你可以按下[Ctrl]+[Alt]+[F7]来完成。 - 2、重要快捷键 - (1)[Tab]:进行补全命令、补全目录、补全命令参数。 - (2)[Ctrl+c]:强行终止当前程序,并不会使终端退出。 - (3)其他常用快捷键: - Ctrl+d 键盘输入结束或退出终端Ctrl+s 暂定当前程序,暂停后按下任意键恢复运行Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fgCtrl+a 将光标移至输入行头,相当于Home键Ctrl+e 将光标移至输入行末,相当于End键Ctrl+k 删除从光标所在位置到行末Alt+Backspace 向前删除一个单词Shift+PgUp 将终端显示向上滚动Shift+PgDn 将终端显示向下滚动- (4)方向上键:恢复你之前输入过的命令。 - (5)通配符:主要有星号(*)和问号(?),用来对对字符串进行模糊匹配(比如文件名,参数名)。Shell 常用通配符: - * 匹配 0 或多个字符? 匹配任意一个字符[list] 匹配 list 中的任意单一字符[!list] 匹配 除list 中的任意单一字符以外的字符[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]{string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串{c2..c2} 匹配 c1-c2 中全部字符 如{1..10}- 3、作业:可以输出图形字符的命令 - banner- 先使用如下命令安装: - $ sudo apt-get update和- $ sudo apt-get install sysvbanner - 然后: - $ banner shiyanlou- 使用命令: - $ printerbanner -w 50 A,'-w'参数指定打印宽度 - 安装 - toilet,figlet 



- 用户及文件权限管理 - 1、查看用户命令: - $ who am i或者- $ who mom likes,输出的第一列表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可),第二列的 pts/0 中 pts 表示伪终端,第三列则表示当前伪终端的启动时间。- who 命令其它常用参数: - -a 打印能打印的全部-d 打印死掉的进程-m 同am i,mom likes-q 打印当前登录用户数及用户名-u 打印当前登录用户登录信息-r 打印运行等级- 2、创建用户: - $ sudo adduser lilei,这个命令不但可以添加用户到系统,同时也会默认为新用户创建 home 目录。- 切换登录用户: - $ su -l lilei,退出当前用户跟退出终端一样可以使用- exit命令或者使用快捷键- Ctrl+d。- 3、用户组: - 方法一:使用groups命令 - $ groups shiyanlou,输出结果冒号之前表示用户,后面表示该用户所属的用户组。- 方法二:查看/etc/group文件 - $ cat /etc/group | sort,- cat命令用于读取指定文件的内容并打印到终端输出,- | sort表示将读取的文本进行一个字典排序再输出。使用命令- $ cat /etc/group | grep -E "shiyanlou"过滤掉一些你不想看到的结果。- 4、删除用户: - $ sudo deluser lilei --remove-home- 5、查看文件权限: - 使用较长格式列出文件: - $ ls -l- 给 ls 加上 -lh 参数来更直观的查看文件的大小 - 可以同时使用 '-A' 和 '-l' 参数: - $ ls -Al- 显示所有文件大小,并以普通人类能看懂的方式呈现: - $ ls -AsSh其中小 s 为显示文件大小,大 S 为按文件大小排序- 6、变更文件所有者命令: - $ cd /home/lilei$ ls iphone6$ sudo chown shiyanlou iphone6$ cp iphone6 /home/shiyanlou- 7、修改文件权限: - $ chmod 700 iphone6或- $ chmod go-rw iphone,'g''o'还有'u',分别表示group,others,user,'+','-' 就分别表示增加和去掉相应的权限。- 8、作业:添加一个用户loutest,使用sudo创建文件/opt/forloutest,设置成用户loutest可以读写。 - 未完成,遇到的问题写在下面了。 
- Linux 目录结构及文件基本操作 - 1、FHS 标准:FHS 定义了两层规范,第一层是 - /下面的各个目录应该要放什么文件数据,第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。执行- $ tree /可以显示。- 2、目录路径 - cd命令可以切换目录,- .表示当前目录,- ..表示上一级目录,- -表示上一次所在目录,- ~通常表示当前用户的"home"目录。使用- pwd命令可以获取当前所在路径(绝对路径)。- 3、新建 - 新建空白文件: - $ touch test,新建目录:- $ mkdir mydir- 使用 - -p参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录:- $ mkdir -p father/son/grandson- 4、复制 - 使用 - cp(copy)命令复制一个文件或目录到指定目录:- $ cp test father/son/grandson- 复制目录: - $ cp -r father family- 5、删除 - 删除一个文件或目录: - $ rm test,使用-f参数- $ rm -f test可以强制删除。- 删除目录: - $ rm -r family- 6、移动文件 - 使用 - mv(move or rename files)命令,移动文件(剪切)。将文件"file1"移动到"Documents"目录- mv 源目录文件 目的目录:- $ mkdir Documents和- $ mv file1 Documents。- 7、重命名文件 - 将文件"file1"重命名为"myfile" - mv 旧的文件名 新的文件名:- $ mv file1 myfile- 批量重命名: - $ rename 's/\.txt/\.c/' *.txt- 8、查看文件 - 使用cat,tac和nl命令查看文件,其中cat为正序显示,tac倒序显示,nl命令添加行号并打印。 - 使用more和less命令可以分页查看文件 - 使用head和tail命令可以查看文件 - 使用file命令可以查看文件的类型: - $ file /bin/ls- 9、编辑文件 - 在 Linux 下面编辑文件通常我们会直接使用专门的命令行编辑器,输入 - $ vimtutor命令即可开始。- 10、作业:召唤一双眼睛动画 - 输入命令: - $ xeyes - 放到后台运行: - $ nohup xeyes & 

- 环境变量与文件查找 - 1、创建变量: - $ declare tmp,赋值变量:- $ tmp=shiyanlou,读取变量值:- $ echo $tmp,删除变量:- $ unset temp- 2、变量修改: - ${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串- 3、搜索文件命令:whereis简单快速 - $whereis who,locate快而全- $ locate /etc/sh,which小而精- $ which man,find精而细- $ find /etc/ -name interfaces- 4、作业:实现“数字雨” - 安装 - cmatrix- 修改终端的主题配色为黑底绿字  
- 文件打包与解压缩 - 1、zip - 2、rar - 3、tar - 4、作业:创造“火炉”  
- 文件系统操作与磁盘管理 - 1、查看磁盘和目录的容量:使用 - df命令查看磁盘的容量,使用- du命令查看目录的容量,- -d参数指定查看目录的深度- 2、磁盘管理: - 创建虚拟磁盘:dd命令用于转换和复制文件,命令行选项格式为 - 选项=值,dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。- 格式化磁盘: - $ sudo mkfs.ext4 virtual.img- 挂载磁盘到目录树: - $ mount -o loop -t ext4 virtual.img /mnt- 卸载已挂载磁盘: - $ sudo umount /mnt- 磁盘分区:查看 - $ sudo fdisk -l,进入- $ sudo fdisk virtual.img- 3、作业:使用cowsay命令,可以让你在终端里以一种动物说话的形式打印出一段话。  



- Linux下的帮助命令 - 1、内建命令与外部命令 - 内建命令:实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,并由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。 - 外部命令:是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。 - type命令可以区分命令是内建的还是外部的。- 2、帮助命令 - (1)help 命令:用于显示 shell 内建命令的简要帮助信息。 - (2)man 命令:得到的内容比用 help 更多更详细,而且 man 没有内建与外部命令的区分。 (3)info 命令:是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息。
- Linux任务计划crontab - crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令。 - 启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了。 通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。
- 命令执行顺序控制与管道 - 1、顺序执行 - 简单的顺序执行你可以使用 - ;来完成:- $ sudo apt-get update;sudo apt-get install some-tool;some-tool- 2、有选择的执行 - &&表示如果前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回0则执行后面的,否则不执行。- ||在这里就是与&&相反的控制效果,当上一条命令执行结果为≠0($?≠0)时则执行它后面的命令。- 3、管道 - $ ls -al /etc | less命令,通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入,然后就可以一行一行地看。- cut 命令,打印以 - :为分隔符的第1个字段和第6个字段分别表示用户名和其目录:- $ cut /etc/passwd -d ':' -f 1,6- grep 命令,在文本中或 stdin 中查找匹配字符串: - $ grep -rnI "shiyanlou" ~命令,搜索目录下所有包含"shiyanlou"的所有文本文件,并显示出现在文本中的行号。-r 参数表示递归搜索子目录中的文件,-n表示打印匹配项行号,-I表示忽略二进制文件。- wc 命令,统计并输出一个文件中行、单词和字节的数目。 - sort 排序命令,将输入按照一定方式排序,然后再输出,它支持的排序有按字典排序,数字排序,按月份排序,随机排序,反转排序,指定特定字段进行排序。 - uniq 去重命令,用于过滤或者输出重复行。 - 4、作业:安装aview和imagemagick,然后用asciiview命令显示图片 未完成,使用- man命令查询asciiview的使用方法并结合网上的一些教程操作后出现问题,在问题中提出。
- 简单的文本处理 - 1、tr 命令:用来删除一段文本信息中的某些文字或者将其进行转换。 - 常用的选项: - -d 删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配-s 去除set1指定的在输入文本中连续并重复的字符- 2、col 命令:可以将Tab换成对等数量的空格建,或反转这个操作。 - 常用的选项: - -x 将Tab转换为空格-h 将空格转换为Tab(默认选项)- 3、join命令:用于将两个文件中包含相同内容的那一行合并在一起。 - 常用的选项: - -t 指定分隔符,默认为空格-i 忽略大小写的差异-1 指明第一个文件要用哪个字段来对比,,默认对比第一个字段-2 指明第二个文件要用哪个字段来对比,,默认对比第一个字段- 4、paste命令:与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。 - 常用的选项: - -d 指定合并的分隔符,默认为Tab-s 不合并到一行,每个文件为一行- 5、作业:安装小蜜蜂游戏  

- 数据流重定向 - 1、简单的重定向 - stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)。 - 将一个文件作为命令的输入,标准输出作为命令的输出: - $ cat Documents/test.c- 将echo命令通过管道传过来的数据作为cat命令的输入,将标准输出作为命令的输出: - $ echo 'hi' | cat- 将echo命令的输出从默认的标准输出重定向到一个普通文件: - $ echo 'hello shiyanlou' > redirect和- $ cat redirect- 2、标准错误重定向: - $ cat Documents/test.c hello.c >somefile 2>&1- 3、使用tee命令同时重定向到多个文件: - $ echo 'hello shiyanlou' | tee hello- 4、永久重定向: - $ exec 1>somefile- 5、创建输出文件描述符: - $ cd /dev/fd/;ls -Al,关闭文件描述符:- $ exec 3>&-和- $ cd /dev/fd;ls -Al;cd -- 6、完全屏蔽命令的输出: - $ cat Documents/test.c nefile 1>/dev/null 2>&1- 7、使用 xargs 分割参数列表:将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题, - $ cut -d: -f1 < /etc/passwd | sort | xargs echo- 8、作业:创造彩色火焰  
- 正则表达式基础 - 1、正则表达式:又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 - 2、基本语法: - | 竖直分隔符表示选择,例如"boy|girl"可以匹配"boy"或者"girl"+ 表示前面的字符必须出现至少一次(1次或多次),例如,"goo+gle",可以匹配"gooogle","goooogle"等;? 表示前面的字符最多出现一次(0次或1次),例如,"colou?r",可以匹配"color"或者"colour";* 星号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次),例如,“0*42”可以匹配42、042、0042、00042等。() 圆括号可以用来定义模式字符串的范围和优先级,这可以简单的理解为是否将括号内的模式串作为一个整体。例如,"gr(a|e)y"等价于"gray|grey",(这里体现了优先级,竖直分隔符用于选择a或者e而不是gra和ey),"(grand)?father"匹配father和grandfather(这里体验了范围,?将圆括号内容作为一个整体匹配)。- 3、grep模式匹配命令: - grep命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。grep支持三种正则表达式引擎,分别用三个参数指定: - -E POSIX扩展正则表达式,ERE-G POSIX基本正则表达式,BRE-P Perl正则表达式,PCRE- 4、sed 流编辑器: - sed 命令基本格式: - sed [参数]... [执行命令] [输入文件]...- sed执行命令格式: - $ sed -i 's/sad/happy/g' test #- 5、awk文本处理语言: - AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一 - awk所有的操作都是基于pattern(模式)—action(动作)对来完成的,如下面的形式: awk命令基本格式:- $ pattern {action}- awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...],其中-F参数用于预先指定前面提到的字段分隔符(还有其他指定字段的方式) ,-v用于预先为awk程序指定变量,-f参数用于指定awk命令要执行的程序文件,或者在不加-f参数的情况下直接将程序语句放在这里,最后为awk需要处理的文本输入,且可以同时输入多个文本文件。
- Linux 下软件安装 - 1、 - apt-get命令:使用各用于处理apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等- install 其后加上软件包名,用于安装一个软件包update 从软件源镜像服务器上下载/更新用于更新本地软件源的软件包列表upgrade 升级本地可更新的全部软件包,但存在依赖问题时将不会升级,通常会在更新之前执行一次updatedist-upgrade 解决依赖关系并升级(存在一定危险性)remove 移除已安装的软件包,包括与被移除软件包有依赖关系的软件包,但不包含软件包的配置文件autoremove 移除之前被其他软件包依赖,但现在不再被使用的软件包purge 与remove相同,但会完全移除软件包,包含其配置文件clean 移除下载到本地的已经安装的软件包,默认保存在/var/cache/apt/archives/autoclean 移除已安装的软件的旧版本软件包- 2、卸载软件: - sudo apt-get remove w3m- 3、软件搜索: - sudo apt-cache search softname1 softname2 softname3……- 4、作业:bb命令  
教材学习中的问题和解决过程
1、作业“添加一个用户loutest,使用sudo创建文件/opt/forloutest,设置成用户loutest可以读写。”,创建用户后一直显示文件不存在。
解决:未解决。
2、作业“将图片调节成ASCII码打印的样子”,一直显示图片无法打开。
解决:未解决。
3、安装some-tool时说未发现软件包。
解决:但安装其它软件时并没有问题,所以初步判断应该不是网络问题。最终未解决。
4、磁盘分区时不成功,提示权限不够。
解决:未解决。
5、复制继承文件时提示没有这个文件或目录。
解决:我创建文件时在mydir中,但是命令中目的文件夹并没有写上mydir,加上后就解决了。
其他(感悟、思考等,可选)
实验楼内容实在是太多了,学习完后感觉就是被塞了一脑袋东西,内容太多、重点又不明确导致并不能详细记下具体的命令使用方法,也不能真正掌握。掌握这些命令需要时间和练习,我现在还没有掌握这些知识,后续会不断巩固练习以早日掌握的。
参考资料
- 《深入理解计算机系统V2》学习指导
- ...