• 20199317 《网络攻防实践》假期作业


    作业说明

    这个作业属于哪个课程 网络攻防实践(https://edu.cnblogs.com/campus/besti/19attackdefense)
    这个作业的要求在哪里 https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10228
    我在这个课程的目标是 学习网络攻防相关知识,并通过实践深入了解网络攻防
    这个作业在哪个具体方面帮助我实现目标 复习巩固Linux基础知识

    作业一

    1.  你对网络攻击和防御了解多少?该课程需要计算机和网络相关的基础知识,你原专业是什么专业,目前你掌握多少基础知识?

    ●  上学期学习了《网络系统安全》这门课,对网络攻击和防御的基础知识有一些了解,并做过一些相关实践。网络攻击分为主动攻击和被动攻击,主动攻击有伪装、重放、篡改和拒绝服务,被动攻击有报文分析和流量分析,对于被动攻击,重在防范,而不在于检测。

    ●  我原专业是网络工程,对计算机网络基础知识较为了解。

    2.  作业要使用Markdown格式,Markdown入门参考(需掌握)

    ●  因上学期选修《Linux内核原理与分析》这门课,所以已掌握基本的Markdown语法。

    作业二

    你自己动手安装过操作系统吗?如果没有话现在动手学一下吧。

    1.  学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统(也可以使用VMware安装虚拟机,安装方法自己百度)

    ●  因上学期选修《Linux内核原理与分析》这门课,已安装虚拟机。

    2.  通过实践学习别出心裁的Linux命令学习法,掌握Linux命令的学习方法

    ●  因上学期选修《Linux内核原理与分析》这门课,已掌握Linux的基本命令。

    3.  参考上面的学习方法通过实践学习Linux基础入门(新版)课程,掌握常用的Linux命令,重点是3/4/5/6/7/8节

    实验3  用户及文件权限管理

            在 Linux 系统里, root 账户拥有整个系统至高无上的权利,比如 新建/添加 用户。我们一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo 这个命令了。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。  

         ●  查看用户:who am i 或者 who mom likes

         ●  su,su- 与 sudo

            su <user> 可以切换到用户 user,执行时需要输入目标用户的密码。

        sudo <cmd> 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。

        su - <user> 命令也是切换用户,同时环境变量也会跟着改变成目标用户的环境变量。

         ●  新建用户:sudo adduser <user>,这个命令不但可以添加用户到系统,同时也会默认为新用户创建 home 目录。

         ●  查看用户属于哪些用户组:groups <user>

         ●  将其它用户加入 sudo 用户组

             默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限。使用usermod命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。

    $ su shiyanlou # 此处需要输入 shiyanlou 用户密码,shiyanlou 的密码可以通过 `sudo passwd shiyanlou` 进行设置。
    $ groups lilei
    $ sudo usermod -G sudo lilei
    $ groups lilei

          ●  删除用户: sudo deluser <user> --remove-home

          ●  查看文件权限:ls -l

              出现如下所示结果:

           

          ●  变更文件所有者

    # 注意当前的用户必须是 lilei
    # 如果是 shiyanlou 用户需要切换到 lilei(如果之前已经删除需要重新创建下)
    $ su lilei
    $ cd /home/lilei
    $ touch iphone6
    
    # 更改文件所有者为shiyanlou,需要切换到 shiyanlou 用户执行以下操作
    $ cd /home/lilei
    $ ls iphone6
    $ sudo chown shiyanlou iphone6

          ●  修改文件权限

              方法一:二进制数字表示

         

             每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)对应一个 " rwx ",也就是一个 “ 7 ” ,所以如果我要将文件“ iphone6 ”的权限改为只有我自己可以用那么就这样:

    $ chmod 600 iphone6

             方法二:加减赋值操作

    $ chmod go-rw iphone6    // g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。      

        adduser 和 useradd 的区别

             useradd 只创建用户,创建完了用 passwd lilei 去设置新用户的密码。adduser 会创建用户,创建目录,创建密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。

    实验4  Linux目录结构及文件基本操作

          ●  FHS标准

             

             FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用的形态,如下表所示:

         ●  进入上一级目录:cd ..

             进入你的 home 目录:cd ~   或者 cd /home/<你的用户名>

             获取当前路径:pwd

         ●  绝对路径与相对路径

             绝对路径:关于绝对路径,简单地说就是以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。

             相对路径:也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如:usr/local/bin (这里假设你当前目录为根目录)。你可能注意到,我们表示相对路径实际并没有加上表示当前目录的那个 . ,而是直接以目录名开头,因为这个 usr 目录为 / 目录下的子目录,是可以省略这个 . 的(以后会讲到一个类似不能省略的情况);如果是当前目录的上一级目录,则需要使用 .. ,比如你当前目录为 /home/shiyanlou 目录下,根目录就应该表示为 ../../ ,表示上一级目录( home 目录)的上一级目录( / 目录)。

             下面我们以你的 home目录为起点,分别以绝对路径和相对路径的方式进入 /usr/local/bin目录:

    # 绝对路径
    $ cd /usr/local/bin
    # 相对路径
    $ cd ../../usr/local/bin

         ●  新建空白文件:touch <文件名>

             新建目录:mkdir <目录名>

             同时创建一个多级目录:mkdir -p father/son/grandson

         ●  复制文件:cp <文件> <指定目录>,如:cp test father/son/grandson

             复制目录:要成功复制目录需要加上 -r 或者 -R 参数,表示递归复制

    $ cd /home/shiyanlou
    $ mkdir family
    $ cp -r father family

         ●  删除文件:rm <文件> 或 rm -f <文件>,表示强制删除

             删除目录:跟复制目录一样,要删除一个目录,也需要加上 -r 或 -R 参数,rm -r <目录>

         ●  移动文件:mv <源目录文件> <目的目录>

             重命名文件:mv <旧的文件名> <新的文件名>

             批量重命名:rename

         ●  查看文件

             使用 cattac 和 nl 命令查看文件:前两个命令都是用来打印文件内容到标准输出(终端),其中 cat 为正序显示,tac 为倒序显示。nl 命令,添加行号并打印。

             使用 more 和 less 命令分页查看文件:如果说上面的 cat 是用来快速查看一个文件的内容的,那么这个 more 和 less 就是天生用来"阅读"一个文件的内容的。   

             使用 head 和 tail 命令查看文件:它们一个是只查看文件的头几行(默认为 10 行,不足 10 行则显示全部)和尾几行。

         ●  查看文件类型:file <文件>

    实验5  环境变量与文件查找

         ●  变量

    $ declare tmp   // 创建变量,或也可以不用 declare 预声明一个变量,直接即用即创建
    $ tmp=shiyanlou  // 使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou
    $ echo $tmp  // 读取变量的值,使用 echo 命令和 $ 符号($ 符号用于表示引用一个变量的值)

         ●  环境变量

             通常我们会涉及到的变量类型有三种:  

             1)当前 Shell 进程私有用户自定义变量,如上面我们创建的 tmp 变量,只在当前 Shell 中有效。

             2)Shell 本身内建的变量。

             3)从自定义变量导出的环境变量。

            也有三个与上述三种环境变量相关的命令:setenvexport。这三个命令很相似,都是用于打印环境变量信息,区别在于涉及的变量范围不同。

    命 令说 明
    set 显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。
    env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。
    export 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。

              

         ●  我们在 Shell 中输入一个命令,Shell 通过环境变量 PATH来进行搜索的,然后执行。

              PATH 里面的路径是以 : 作为分割符的,所以我们可以这样添加自定义路径:

    $ PATH=$PATH:/home/shiyanlou/mybin   //注意这里一定要使用绝对路径。

             但是这样只是给 PATH 环境变量追加了一个路径,它也只是在当前 Shell 有效,我一旦退出终端,再打开就会发现又失效了。有没有方法让添加的环境变量全局有效?或者每次启动 Shell 时自动执行上面添加自定义路径到 PATH 的命令?下面我们就来说说后一种方式——让它自动执行。

             在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。zsh 的配置文件是 .zshrc,相应 Bash 的配置文件为 .bashrc 。它们在 etc下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。

    $ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc

            上述命令中 >> 表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的 > 是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。

          ●  前面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用 source 命令来让其立即生效,如:

    $ cd /home/shiyanlou
    $ source .zshrc  

              source 命令还有一个别名就是 .,上面的命令如果替换成 . 的方式就该是:

    $ . ./.zshrc

             在使用.的时候,需要注意与表示当前路径的那个点区分开。注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。

           ●  搜索文件

               whereis 简单快速

               locate 快而全

               which 小而精

               find 精而细

    实验6  文件打包与解压缩

           ●  zip

               打包 :zip something.zip something (目录请加 -r 参数)

               解包:unzip something.zip

               指定路径:-d 参数

           ●  tar

               打包:tar -cf something.tar something

               解包:tar -xf something.tar

               指定路径:-C 参数

    实验7  文件系统操作与磁盘管理

         ●  查看磁盘和目录的容量

              使用 df 命令查看磁盘的容量

      # 默认同样以 块 的大小展示
      $ df 
      # 加上`-h`参数,以更易读的方式展示
      $ df -h     
                 使用 du 命令查看目录的容量
      # 默认同样以 块 的大小展示
      $ du 
      # 加上`-h`参数,以更易读的方式展示
      $ du -h
    
      # 只查看1级目录的信息
      $ du -h -d 0 ~
      # 查看2级
      $ du -h -d 1 ~
    
      du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
      du -a #同--all 显示目录中所有文件的大小。
      du -s #同--summarize 仅显示总计,只列出最后加总的值。

          ●  dd命令用于转换和复制文件,不过它的复制不同于cp。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
    # 注
    在打完了这个命令后,继续在终端打字,作为你的输入

             上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),count用于指定块数量。

             dd在拷贝的同时还可以实现数据转换,那下面就举一个简单的例子:将输出的英文字符转换为大写再写入文件:

    $ dd if=/dev/stdin of=test bs=10 count=1 conv=ucase

          ●  使用 dd 命令创建虚拟镜像文件

              使用dd命令来完成创建虚拟磁盘的第一步。

    # 从/dev/zero设备创建一个容量为 256M 的空文件
    $ dd if=/dev/zero of=virtual.img bs=1M count=256
    $ du -h virtual.img

             然后我们要将这个文件格式化(写入文件系统),这里使用 mkfs 命令格式化磁盘(我们这里是自己创建的虚拟磁盘镜像)

    # 将我们的虚拟磁盘镜像格式化为ext4文件系统
    $ sudo mkfs.ext4 virtual.img

    实验8  Linux下的帮助命令

          ●  内建命令与外部命令

             内建命令实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。

             外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。

          ●  几个常用的帮助命令

              help 命令:只能用于显示shell内建命令的帮助信息。外部命令基本上都有一个参数--help:ls --help

              man命令:得到的内容比用 help 更多更详细,而且man没有内建与外部命令的区分,因为 man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述。通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性。

             info命令:man 和 info 就像两个集合,它们有一个交集部分,但与 man 相比,info 工具可显示更完整的 GNU 工具信息。若 man 页包含的某个工具的概要信息在 info 中也有介绍,那么 man 页中会有“请参考 info 页更详细内容”的字样。

  • 相关阅读:
    洛谷 1195 口袋的天空
    洛谷1955 程序自动分析
    【洛谷3295】[SCOI2016]萌萌哒
    洛谷2024 食物链
    八数码问题
    Codeforces Round #442 (Div. 2)
    Oracle 中truncate与delete的区别
    git命令提交步骤和解决冲突的
    git 更新代码到本地
    12、Python中的包
  • 原文地址:https://www.cnblogs.com/chengzhenghua/p/12308016.html
Copyright © 2020-2023  润新知