这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/19attackdefense
这个作业的要求在哪里 https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10228
我在这个课程的目标是 复习相关的linux操作,更好的学习下学期的课程
这个作业在哪个具体方面帮助我实现目标 复习Markdown格式的使用、掌握常用的Linux命令
作业正文.... 见作业一、作业二
其他参考文献 https://www.mosoteach.cn/web/index.php?c=res&m=index&clazz_course_id=EE8120D0-D29B-11E9-9C7F-98039B1848C6、https://www.cnblogs.com/20145120hxx/p/12231306.html
(1)你对网络攻击和防御了解多少?该课程需要计算机和网络相关的基础知识,你原专业是什么专业,目前你掌握多少基础知识?
(2)作业要使用Markdown格式,Markdown入门参考(需掌握)
# 作业一 #
常见的网络攻击有口令入侵、电子邮件、节点攻击、网络监听、黑客软件、端口扫描等。在上学期我们简单了解了wireshark、Burpsuite、Nmap的简单使用,对洪水攻击、重放攻击、扫描攻击等进行了相关的实验,了解了相关过程以及相关软件的简单使用方法。对WannaCry病毒进行了简单的了解。
我的原专业是网络工程
对计算机网络的相关内容进行了简单的了解,对网络协议有所简单的认知。对网络安全的简单内容有所了解,另外在研一的上学期对攻防内容有所实践。
由于上学期学习的linux内核原理,期间作业均是通过markdown完成的,对markdown已经有了一定的了解。
作业二
(1)学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统(也可以使用VMWare安装虚拟机,安装方法自己百度)
(2)通过实践学习别出心裁的Linux命令学习法,掌握Linux命令的学习方法
(3)参考上面的学习方法通过实践学习Linux 基础入门(新版)课程,掌握常用的Linux命令,重点是3/4/5/6/7/8节。
- 由于上学期学习的linux内核原理,已经安装了相关虚拟机
一些快捷键
CTRL+ALT+T:打开终端,天天使用终端,用鼠标打开太低效了;
CTRL+SHIFT+T:新建标签页,编程时有重要应用;
ALT+数字N:终端中切换到第N个标签页,编程时有重要应用;
Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成;
上下键盘:切换命令历史,刚输入一个很长的命令,按上键就可以恢复;
CTRL+C:中断程序运行。
man命令
1是普通的Linux命令
2是系统调用,操作系统的提供的服务接口
3是库函数, C语言中的函数
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如ifconfig
比如man 1 printf
和man printf
效果一样,而man 3 printf
可以对C函数库进行查看。man -k key1 | grep key2 | grep key3可多关键字进行指令key1的查看man -k sort | grep 3
此命令可根据c函数库查看相关命令使用man -k找到命令后,可以用man -f cmd查看命令的基本功能。man -f等价于whatis
find查找一个文件在系统中的什么位置,locate是神速版本的find(Windows下有个神器Everything和locate功能类似)。可以通过cheat find学习find命令。
grep 可以对文件全文检索,比如你接手一个C语言项目,里面有上百个C源文件,想找找main函数在那个文件中,你可以通过grep -n main *.c,快速找到main在哪个C文件中并指出在第几行。grep支持正则表达式,正则表达式也是一个重要的元知识。可以通过cheat grep学习grep命令。上面还提到,
whereis,which告诉你使用的命令工具装在什么地方。Linxu初学者会不习惯Linux的文件系统,C盘呢?D盘呢?用apt-get install安装程序好象也不用我们选择安装位置,程序装在哪了?比如:我们在Linux下上网使用firefox浏览器,大家可以使用whereis firefox或更精确的使用which firefox来看看结果。
apt-cache可以在使用apt-get install安装一个程序时先找找软件源的库里有没有这个程序,有才可以安装。比如老师推荐了一个调试工具ddd,你可以用apt-cache search ddd查查有没有这个程序
第三章(用户及文件权限管理)
首先通过$ sudo adduser lilei
创建一个用户,设置相关内容后进行登录$ su -l lilei
采用-l
的目的是更换登录者的情况下同时更换工作目录
接下来输入命令进行查看$ who am i $ whoami $ pwd
其中whoami是显示当前用户的登录名,who am i显示的是登录时的用户名,who是显示真正登录在系统中的用户。pwd命令用作显示工作目录的路径名称,这里通过-l更换了工作路径。
退出当前用户跟退出终端一样可以使用 exit 命令或者使用快捷键 Ctrl+d。
查看用户组的两种方法,其一是通过$ groups shiyanlou
进行查看,另外一种方法是通过$ cat /etc/group | sort
命令进行查看,这里 cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort 表示将读取的文本进行一个字典排序再输出。
这样列出的内容会比较多,命令$ cat /etc/group | grep -E "shiyanlou"
进行过滤
/etc/group 的内容包括用户组(Group)、用户组口令、GID 及该用户组所包含的用户(User),每个用户组一条记录。格式如下:
group_name:password:GID:user_list
你看到上面的 password 字段为一个 x 表示密码不可见。另外如果用户的 GID 等于用户组的 GID,那么最后一个字段 user_list 就是空的,比如图二就是这种情况。$ sudo usermod -G sudo lilei使用usermod 命令可以为用户添加用户组,执行 sudo 命令将 lilei 添加到 sudo 用户组,接下来通过命令$ sudo deluser lilei --remove-home
删除用户(deluser)并删除用户的目录(--remove-home)。
使用较长格式列出文件(-l)以及使用普通形式列出文件。$ ls -Al
查看包括隐藏文件并较长格式显示,$ ls -AsSh
显示所有文件,-s
显示文件大小,-S
按文件大小排序,-h
文件大小以人类可以看懂的格式
ll 查看文件属性,进入相关文件所在目录进行文件权限的修改,切换到shiyanlou 用户执行以下操作
$ cd /home/lilei
$ ls iphone6
$ sudo chown(更换文件属主命令) shiyanlou(新的用户名) iphone6(所选文件)
更换文件权限,首先命令$ echo "echo \"hello shiyanlou\"" > iphone6
这里echo 命令在>
后的文件中进行echo命令后的内容进行填充,这里有一些ascll码所以会有一些""的出现,另外我们修改文件权限时会按照拥有者,所属用户组,其他用户的顺序组成一个三位数字,每位数字按照rwx计算,公式为:
命令chmod 600 iphone6
使得只有user可以使用该文件,命令chmod go-rw iphone6
可以达到相同的效果,g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。
第四章(目录结构及文件基本操作)
绝对路径
关于绝对路径,简单地说就是以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。
相对路径
相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如: usr/local/bin (这里假设你当前目录为根目录)。你可能注意到,我们表示相对路径实际并没有加上表示当前目录的那个 . ,而是直接以目录名开头,因为这个 usr 目录为 / 目录下的子目录,是可以省略这个 . 的(以后会讲到一个类似不能省略的情况);如果是当前目录的上一级目录,则需要使用 .. ,比如你当前目录为 /home/shiyanlou 目录下,根目录就应该表示为 ../../ ,表示上一级目录( home 目录)的上一级目录( / 目录)。
使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性。$ mkdir mydir
使用 -p 参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录(这在安装软件、配置安装路径时非常有用):$ mkdir -p father/son/grandson
使用 cp(copy)命令复制一个文件到指定目录。使用 cp(copy)命令复制一个文件到指定目录。$ cp test father/son/grandson
如果复(删除)制目录需要加上 -r 或者 -R 参数,表示递归复制(删除)
$ cd /home/shiyanlou
$ mkdir family
$ cp -r father family
使用 rm(remove files or directories)命令删除一个文件:$ rm test
有时候你会遇到想要删除一些为只读权限的文件,直接使用 rm 删除会显示一个提示,你如果想忽略这提示,直接删除文件,可以使用 -f 参数强制删除:$ rm -f test
使用 mv(move or rename files)命令移动文件(剪切)。将文件“ file1 ”移动到 Documents 目录:
mv 源目录文件 目的目录:
$ mkdir Documents
$ touch file1
$ mv file1 Documents
使用 mv将文件“ file1 ”重命名为“ myfile ”:
mv 旧的文件名 新的文件名:
$ mv file1 myfile
使用 cat,tac 和 nl 命令查看文件
前两个命令都是用来打印文件内容到标准输出(终端),其中 cat 为正序显示,tac 为倒序显示。cat(tac) 可以加上 -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 位)
使用 more 和 less 命令分页查看文件
如果说上面的 cat 是用来快速查看一个文件的内容的,那么这个 more 和 less 就是天生用来"阅读"一个文件的内容的,比如说 man 手册内部就是使用的 less 来显示内容。其中 more 命令比较简单,只能向一个方向滚动,而 less 为基于 more 和 vi (一个强大的编辑器,我们有单独的课程来让你学习)开发,功能更强大。less 的使用基本和 more 一致,具体使用请查看 man 手册,这里只介绍 more 命令的使用。
使用 more 命令打开 passwd 文件:$ more passwd
打开后默认只显示一屏内容,终端底部显示当前阅读的进度。可以使用 Enter 键向下滚动一行,使用 Space 键向下滚动一屏,按下 h 显示帮助,q 退出。
使用 head 和 tail 命令查看文件
这两个命令一个是只查看文件的头几行(默认为 10 行,不足 10 行则显示全部)和尾几行。$ tail /etc/passwd
甚至更直接的只看一行, 加上 -n 参数,后面紧跟行数:$ tail -n 1 /etc/passwd
,关于 tail 命令有一个参数 -f,这个参数可以实现不停地读取某个文件的内容并显示。
在 Linux 中文件的类型不是根据文件后缀来判断的,我们通常使用 file 命令查看文件的类型:
$ file /bin/ls
第五章
指令 zsh 创建子进程
介绍两个重要文件 /etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量。变量的修改有以下几种方式:
$ path=$PATH
$ echo $path
$ path=${path%/home/shiyanlou/mybin}
# 或使用通配符,*表示任意多个任意字符
$ path=${path%*/mybin}
可以使用 unset 命令删除一个环境变量:$ unset temp
前面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用 source 命令来让其立即生效
$ cd /home/shiyanlou
$ source .zshrc
source 命令还有一个别名就是 .,上面的命令如果替换成 . 的方式就该是:
$ . ./.zshrc
在使用.的时候,需要注意与表示当前路径的那个点区分开。
注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。
与搜索相关的命令常用的有 whereis,which,find 和 locate 。whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用 locate 命令。有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令;which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的软件,因为它只从 PATH 环境变量指定的路径中去搜索命令;find 应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。find 命令强大到,要把它讲明白至少需要单独好几节课程才行,我们这里只介绍一些常用的内容。
这条命令表示去 /etc/ 目录下面 ,搜索名字叫做 interfaces 的文件或者目录。这是 find 命令最常见的格式,千万记住 find 的第一个参数是要搜索的地方:
$ sudo find /etc/ -name interfaces
注意 find 命令的路径是作为第一个参数的, 基本命令格式为find [path] [option] [action]
。与时间相关的命令参数:
下面以 -mtime 参数举例:
-mtime n:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件
-mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过的文件
-mtime -n:列出在 n 天之内(包含 n 天本身)被修改过的文件
-newer file:file 为一个已存在的文件,列出比 file 还要新的文件名
第六章(文件打包与解压缩)
打包
使用 zip 打包文件夹:
$ cd /home/shiyanlou
$ zip -r -q -o shiyanlou.zip /home/shiyanlou/Desktop
$ du -h shiyanlou.zip
$ file shiyanlou.zip
-r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小。
另外可以设置压缩级别为 9 和 1(9 最大,1 最小),重新打包:
$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou/Desktop -x ~/.zip
$ zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou/Desktop -x ~/.zip
这里添加了一个参数用于设置压缩级别 -[1-9],1 表示最快压缩但体积大,9 表示体积最小但耗时最久。最后那个 -x 是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用。
创建加密 zip 包
使用 -e 参数可以创建加密压缩包:
$ zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou/Desktop
解压
将 shiyanlou.zip 解压到当前目录:
$ unzip shiyanlou.zip
使用安静模式,-d将文件解压到指定目录:
$ unzip -q shiyanlou.zip -d ziptest
上述指定目录不存在,将会自动创建。如果你不想解压只想查看压缩包的内容你可以使用 -l 参数:
$ unzip -l shiyanlou.zip
使用 -O(英文字母,大写 o)参数指定编码类型:
unzip -O GBK 中文压缩文件.zip
tar 打包工具
创建一个tar包
tar -P -cf shiyanlou.tar /home/shiyanlou/Desktop
上面命令中,-P 保留绝对路径符,-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后,比如不能写成 tar -fc shiyanlou.tar,可以写成 tar -f shiyanlou.tar -c ~。你还可以加上 -v 参数以可视的的方式输出打包的文件。
解包一个文件(-x 参数)到指定路径的已存在目录(-C(大写) 参数):
$ mkdir tardir
$ tar -xf shiyanlou.tar -C tardir
只查看不解包文件 -t 参数:
$ tar -tf shiyanlou.tar
对于创建不同的压缩格式的文件,对于 tar 来说是相当简单的,需要的只是换一个参数,这里我们就以使用 gzip 工具创建 *.tar.gz 文件为例来说明。
我们只需要在创建 tar 文件的基础上添加 -z 参数,使用 gzip 来压缩文件:
$ tar -czf shiyanlou.tar.gz /home/shiyanlou/Desktop
解压 *.tar.gz 文件:
$ tar -xzf shiyanlou.tar.gz
现在我们要使用其它的压缩工具创建或解压相应文件只需要更改一个参数即可:
第七章(文件系统操作与磁盘挂历)
dd的命令行语句与其他的 Linux 程序不同,因为它的命令行选项格式为选项=值,而不是更标准的--选项 值或-选项=值。dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。
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 if=/dev/stdin of=test bs=10 count=1 conv=ucase
使用 dd 命令创建虚拟镜像文件
从/dev/zero设备创建一个容量为 256M 的空文件:
$ dd if=/dev/zero of=virtual.img bs=1M count=256
$ du -h virtual.img
将我们的虚拟磁盘镜像格式化为ext4文件系统:
$ sudo mkfs.ext4 virtual.img
使用mount来查看下主机已经挂载的文件系统:
$ sudo mount
mount命令的一般格式如下:
mount [options] [source] [directory]
mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]
挂载我们创建的虚拟磁盘镜像到/mnt目录:
$ mount -o loop -t ext4 virtual.img /mnt
# 也可以省略挂载类型,很多时候 mount 会自动识别
# 以只读方式挂载
$ mount -o loop --ro virtual.img /mnt
# 或者mount -o loop,ro virtual.img /mnt
使用 umount 命令卸载已挂载磁盘
# 命令格式 sudo umount 已挂载设备名或者挂载点,如:
$ sudo umount /mnt
使用 fdisk 为磁盘分区
# 查看硬盘分区表信息
$ sudo fdisk -l
我们重点看一下中间的分区信息
# 进入磁盘分区模式
$ sudo fdisk virtual.img
使用 losetup 命令建立镜像与回环设备的关联
$ sudo losetup /dev/loop0 virtual.img
# 如果提示设备忙你也可以使用其它的回环设备,"ls /dev/loop*"参看所有回环设备
# 解除设备关联
$ sudo losetup -d /dev/loop0
使用mkfs格式化各分区
$ sudo apt-get install kpartx
$ sudo kpartx -av /dev/loop0
# 取消映射
$ sudo kpartx -dv /dev/loop0
格式化,我们将其全部格式化为 ext4
$ sudo mkfs.ext4 -q /dev/mapper/loop0p1
$ sudo mkfs.ext4 -q /dev/mapper/loop0p5
$ sudo mkfs.ext4 -q /dev/mapper/loop0p6
在/media目录下新建四个空目录用于挂载虚拟磁盘:
$ mkdir -p /media/virtualdisk_{1..3}
# 挂载磁盘分区
$ sudo mount /dev/mapper/loop0p1 /media/virtualdisk_1
$ sudo mount /dev/mapper/loop0p5 /media/virtualdisk_2
$ sudo mount /dev/mapper/loop0p6 /media/virtualdisk_3
# 卸载磁盘分区
$ sudo umount /dev/mapper/loop0p1
$ sudo umount /dev/mapper/loop0p5
$ sudo umount /dev/mapper/loop0p6
然后:
$ df -h
第八章(Linux下的帮助命令)
help 命令
help 命令是用于显示 shell 内建命令的简要帮助信息。帮助信息中显示有该命令的简要说明以及一些参数的使用以及说明,外部命令基本上都有一个参数--help,这样就可以得到相应的帮助ls --help
man 命令
之前有所介绍这里就不一一陈述了
info 命令
# 安装 info
$ sudo apt-get update
$ sudo apt-get install info
# 查看 ls 命令的 info
$ info ls
man 和 info 就像两个集合,它们有一个交集部分,但与 man 相比,info 工具可显示更完整的 GNU 工具信息。