20145320 《信息安全系统设计基础》第一周学习总结
教材学习内容总结
第一节 Linux系统
1:Linux系统
登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着选项(options)或参数(arguments)。
即Linux中命令格式为:command[options][arguments]。但有些命令也不需要跟着选项或参数。
选项是调整命令执行行为的开关,选项不同决定了命令的显示结果不同。
参数是指命令的作用对象。
2 :man命令
1是普通的Linux命令(用户命令帮助)
2是系统调用,操作系统的提供的服务接口(系统调用帮助)
3是库函数, C语言中的函数(库函数调用帮助)
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义(配置文件帮助)
6是给游戏留的,由各个游戏自己定义(Games)
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明(Miscellaneous)
8是系统管理用的命令,这些命令只能由root使用,如ifconfig。(usually only for root)
3:cheat 命令
cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。
4:其他核心命令
和查找相关的核心命令还有find,locate,grep,whereis,which。
5:课程其他命令
实验一
- 本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识。
实验二:Linux 用户管理及权限
1.查看用户
- 打开终端,输入命令 $ who am i(或whoami) 或者 $ who mom likes。
2.创建用户
- $ sudo adduser tokyo
- 这里要注意的是这里不可出现大写,例如Tokyo什么的,会出现
3.用户组
-
方法一:使用groups命令
-
$ groups tokyo
-
方法二:查看/etc/group文件
-
$ cat /etc/group | sort
4.删除用户
- $ sudo deluser tokyo --remove-home
2:Linux 文件权限
-
1.查看文件权限 $ls -l
-
2.变更文件所有者
假设目前是 lilei 用户登录,新建一个文件,命名为 “tokyo”: $ touch tokyo 可见文件所有者是 lilei : 现在,使用以下命令变更文件所有者为 shiyanlou : $ cd /home/lilei $ ls tokyo $ sudo chown shiyanlou tokyo $ cp tokyo /home/shiyanlou
-
3.修改文件权限
方式一:二进制数字表示 $ echo "echo \"hello shiyanlou\"" > tokyo 然后修改权限: $ chmod 700 tokyo 方式二:加减赋值操作 $ chmod go-rw tokyo 'g''o'还有'u',分别表示group,others,user,'+','-' 就分别表示增加和去掉相应的权限。
实验三 :Linux 目录结构及文件基本操作
-
一、Linux 目录结构
使用 cd 命令可以切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录,- 表示上一次所在目录,~ 通常表示当前用户的"home"目录。使用 pwd 命令可以获取当前所在路径(绝对路径)。 进入上一级目录: $ cd .. 进入你的“home”目录: $ cd ~ # 或者 cd /home/<你的用户名> 使用 pwd 获取当前路径: $ pwd
二、Linux 文件的基本操作
-
1.新建
新建空白文件: 创建名为 test 的空白文件,因为在其他目录没有权限,所以需要先 cd ~ 切换回用户的 /home/shiyanlou 目录: $ cd ~ $ touch test。 新建目录: 创建名为"mydir"的空目录: $ mkdir mydir 。使用 -p 参数,同时创建父目录(如果不存在该父目录)。 $ mkdir -p father/son/grandson
-
2.复制
复制文件 使用cp(copy)命令复制一个文件或目录到指定目录。将之前创建的"test"文件复制到"/home/shiyanlou/father/son/grandson"目录中: $ cp test father/son/grandson 复制目录
如果直接使用cp命令,复制一个目录的话,会出现如下错误:要成功复制目录需要加上-r或者-R参数,表示递归复制。$ cp -r father family
-
3.删除
删除文件 使用rm(remove files or directories)命令,删除一个文件或目录: $ rm test 删除目录 跟复制目录一样,要删除一个目录,也需要加上-r或-R参数:$ rm -r family
-
4.移动文件与文件重命名
移动文件 使用mv(move or rename files)命令,移动文件(剪切)。将文件"file1"移动到"Documents" 目录mv 源目录文件 目的目录:$ mv file1 Documents 重命名文件 将文件"file1"重命名为"myfile" mv 旧的文件名 新的文件名: $ mv file1 myfile
-
5.查看文件
我们要查看之前从"/etc"目录下拷贝来的passwd文件: $ cat passwd 可以加上-n参数显示行号: $ cat -n passwd nl命令,添加行号并打印,这是个比cat -n更专业的行号打印命令。 这里简单列举它的常用的几个参数: -b : 指定添加行号的方式,主要有两种: -b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式) -b t:只列出非空行的编号并列出(默认为这种方式) -n : 设置行号的样式,主要有三种: -n ln:在行号字段最左端显示 -n rn:在行号字段最右边显示,且不加 0 -n rz:在行号字段最右边显示,且加 0 -w : 行号字段占用的位数(默认为 6 位)
-
6.查看文件类型
$ file /bin/ls。
实验四:环境变量与文件查找
一、环境变量
- 1.变量
使用=号赋值运算符为变量 tmp 赋值为 shiyanlou: $tokyo=shiyanlou
读取变量的值,使用echo命令和$符号:$ echo $tokyo
-
2.环境变量
-
3.命令的查找路径与顺序
查看PATH环境变量的内容:
$ echo $PATH
默认情况下你会看到如下输出:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
为文件添加可执行权限:
$ chmod 755 hello_shell.sh
执行脚本
$ ./hello_shell.sh
创建一个 C 语言"hello world"程序:
$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}
使用 gcc 生成可执行文件:
$ gcc -o hello_world hello_world.c
在 shiyanlou 家目录创建一个mybin目录,并将上述 hello_shell.sh 和 hello_world 文件移动到其中:
$ mkdir mybin
$ mv hello_shell.sh hello_world mybin/
回到上一级目录,也就是shiyanlou家目录,当再想运行那两个程序时,会发现提示命令找不到,除非加上命令的完整路径,但那样很不方便,如何做到想使用系统命令一样执行自己创建的脚本文件或者程序呢?那就要将命令所在路径添加到PATH环境变量了。
- 4.添加自定义路径到“PATH”环境变量
在前面我们应该注意到PATH里面的路径是以:作为分割符,所以我们可以这样添加自定义路径:
$ PATH=$PATH:/home/shiyanlou/mybin
-
5.修改和删除已有变量
变量修改
变量删除
-
6.如何让环境变量立即生效
二、搜索文件
与搜索相关的命令常用的有如下几个whereis,which,find,locate。
whereis简单快速 $whereis who
你会看到它找到了三个路径,两个可执行文件路径和一个 man 在线帮助文件所在路径,这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用locate命令。
locate快而全
实验五 文件打包与压缩
- 1.zip压缩打包程序
du命令查看打包后文件的大小
第一行命令中,-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。
使用-e参数。
- 2.使用unzip命令解压缩zip文件
使用-O(英文字母,大写o)参数指定编码类型;
不想解压只想查看压缩包的内容你可以使用-l参数;
- 3.rar打包压缩命令
使用rar和unrar工具分别创建和解压 rar 压缩包。
使用a参数添加一个目录~到一个归档文件中,如果该文件不存在就会自动创建。
- 4.tar打包工具(tar命令一些基本的使用方式)
实验六: 文件系统操作与磁盘管理
-
一、简单文件系统操作
-
1.查看磁盘和目录的容量
使用 df 命令查看磁盘的容量 $ df 使用 du 命令查看目录的容量 $ du # 加上`-h`参数,以更易读的方式展示 $ du -h -d参数指定查看目录的深度 # 只查看1级目录的信息 $ du -h -d 0 ~ # 查看2级 $ du -h -d 1 ~
-
二、简单的磁盘管理
-
1.创建虚拟磁盘
dd 命令简介 从标准输入读入用户输入到标准输出或者一个文件: # 输出到文件 $ dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1 # 输出到标准输出 $ dd if=/dev/stdin of=/dev/stdout bs=10 count=1 使用dd命令来完成创建虚拟磁盘的第一步。 从/dev/zero设备创建一个容量为 256M 的空文件: $ dd if=/dev/zero of=virtual.img bs=1M count=256 $ du -h virtual.img
-
使用 mkfs 命令格式化磁盘
-
使用mount来查看下主机已经挂载的文件系统:$ sudo mount
-
使用 umount 命令卸载已挂载磁盘
-
命令格式 sudo umount 已挂载设备名或者挂载点,如:
- $ sudo umount /mnt
-
使用 fdisk 为磁盘分区
-
实验八:命令执行顺序控制与管道
-
一、命令执行顺序的控制
1.顺序执行多条命令 $ sudo apt-get update # 等待——————————然后输入下面的命令 $ sudo apt-get install some-tool # 等待——————————然后输入下面的命令 $ some-tool 2.有选择的执行命令 $ which cowsay>/dev/null && cowsay -f head-in ohch~
-
二、管道
-
1.试用
先试用一下管道,比如查看/etc目录下有哪些文件和目录,使用ls命令来查看: $ ls -al /etc 有太多内容,屏幕不能完全显示,这时候可以使用滚动条或快捷键滚动窗口来查看。不过这时候可以使用管道: $ ls -al /etc | less 通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入,然后就可以一行一行地看。
-
2.cut 命令,打印每一行的某一字段
打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段分别表示用户名和其家目录: $ cut /etc/passwd -d ':' -f 1,6 # 前五个(包含第五个) $ cut /etc/passwd -c -5 # 前五个之后的(包含第五个) $ cut /etc/passwd -c 5- # 第五个 $ cut /etc/passwd -c 5 # 2到5之间的(包含第五个) $ cut /etc/passwd -c 2-5
-
3.grep 命令,在文本中或 stdin 中查找匹配字符串
-
4.wc 命令,简单小巧的计数工具
wc 命令用于统计并输出一个文件中行、单词和字节的数目,比如输出/etc/passwd文件的统计信息: $ wc /etc/passwd 分别只输出行数、单词数、字节数、字符数和输入文本中最长一行的字节数: # 行数 $ wc -l /etc/passwd # 单词数 $ wc -w /etc/passwd # 字节数 $ wc -c /etc/passwd # 字符数 $ wc -m /etc/passwd # 最长行字节数 $ wc -L /etc/passwd
-
5.sort 排序命令
-
6.uniq 去重命令
实验九:简单的文本处理
-
1:文本处理命令
-
1.tr 命令
tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。 使用方式: tr [option]...SET1 [SET2] 常用的选项有: -d 删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配 -s 去除set1指定的在输入文本中连续并重复的字符 操作举例: # 删除 "hello shiyanlou" 中所有的'o','l','h' $ echo 'hello shiyanlou' | tr -d 'olh' # 将"hello" 中的ll,去重为一个l $ echo 'hello' | tr -s 'l' # 将输入文本,全部转换为大写或小写输出 $ cat /etc/passwd | tr '[:lower:]' '[:upper:]' # 上面的'[:lower:]' '[:upper:]'你也可以简单的写作'[a-z]' '[A-Z]',当然反过来将大写变小写也是可以的
-
2.col 命令
col 命令可以将Tab换成对等数量的空格建,或反转这个操作。 使用方式: col [option] 常用的选项有: 选项 说明 -x 将Tab转换为空格 -h 将空格转换为Tab(默认选项)
-
3.join命令
学过数据库的用户对这个应该不会陌生,这个命令就是用于将两个文件中包含相同内容的那一行合并在一起。 使用方式: join [option]... file1 file2
常用的选项有:
-t 指定分隔符,默认为空格
-i 忽略大小写的差异
-1 指明第一个文件要用哪个字段来对比,,默认对比第一个字段
-2 指明第二个文件要用哪个字段来对比,,默认对比第一个字段 -
4.paste命令
paste这个命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。
使用方式:paste [option] file...
常用的选项有:
-d 指定合并的分隔符,默认为Tab
-s 不合并到一行,每个文件为一行
实验十 :数据流重定向
-
一、数据流重定向
-
1.简单的重定向
-
2.标准错误重定向
-
3.使用tee命令同时重定向到多个文件
经常你可能还有这样的需求,除了将需要将输出重定向到文件之外也需要将信息打印在终端,那么你可以使用tee命令来实现: $ echo 'hello shiyanlou' | tee hello
-
4.永久重定向
-
5.创建输出文件描述符
-
6.关闭文件描述符
-
7.完全屏蔽命令的输出
-
8.使用 xargs 分割参数列表