zoukankan      html  css  js  c++  java
  • 20189220 余超《Linux内核原理与分析》第一周作业

    实验一 Linux系统简介

    通过实验一主要是学习到了Linux 的历史简介,linux与windows之间的区别,主要是免费和收费,软件和支持,安全性,使用习惯,可制定性,应用范畴等。linux具有稳定的系统,安全性和漏洞的快速修补,多用户,用户和用户组的规划,相对较少的系统资源占用,可定制裁剪,移植到嵌入式平台(如安卓设备),可选择的多种图形用户界面(如 GNOME,KDE)等优点。因为是第一次接触到Luinx的操作系统,直观感受就是luinx上许多功能的执行都需要通过输入命令来完成的。

    实验二 基本概念及操作

    • 物理机系统上可以通过使用[Ctrl]+[Alt]+[F1]~[F6]进行切换登陆,当切换到其中一个终端后想要切换回图形界面,可以按下[Ctrl]+[Alt]+[F7]来完成
    • echo“ ”可以用来打印字符串
    • tab键可以补全命令,补全目录,补全命令参数
    • Ctrl+c键可以强行终止当前程序
    • Ctrl+d 键盘输入结束或退出终端 Ctrl+s 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg Ctrl+a 将光标移至输入行头,相当于Home键 Ctrl+e 将光标移至输入行末,相当于End键 Ctrl+k 删除从光标所在位置到行末 Alt+Backspace 向前删除一个单词 Shift+PgUp 将终端显示向上滚动 Shift+PgDn 将终端显示向下滚动
      使用键盘上的方向上键,恢复你之前输入过的命令
    • 通配符是一种特殊语句,主要有星号(*)和问号(?),用来对对字符串进行模糊匹配(比如文件名,参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符
    • touch 可用来创建文件,用touch No.{1..10}.txt 可创建10个连续命名的文件
    • 使用man来查看手册,--help来查看帮助
    • 还学习到了输出图形字符的命令,首先进行命令包的安装:
      $ sudo apt-get update sudo apt-get install sysvbanner
      $ sudo apt-get update sudo apt-get install toilet
      $ sudo apt-get update sudo apt-get install figlet
      然后可以看到下面的图形:


    实验三 用户文件权限管理

    • 本次实验主要学习了linux中创建、删除用户,及用户组等操作,以及Linux 中的文件权限设置。
    • 实验步骤如下:
    1. 新建一个叫 lilei 的用户:
    2. 登录用户:

      3.默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:

      4.文件权限:每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)对应一个 " rwx ",也就是一个 “ 7 ”

      加减赋值操作:g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限:

      5.作业:
    • 添加loutest用户
    • 使用 sudo 创建文件 /opt/forloutest,设置成用户 loutest 可以读写

    实验四 Linux目录结构和文件基本操作

    • 本次实验主要学习了以下操作命令:

    cd 进入目录

    cd ~ 到用户目录

    cd .. 到上一级目录

    cd /xxx/xxx/xxx 绝对路径,输入的必须是最精确的路径

    cd ../../../xxx/xxx/xxx 相对路径,从当前位置开始向上一级然后再进入其他文件夹

    cd xxx/xxx/xxx/ 相对路径,从当前位置开始直接走向下一级的文件夹

    用cd时多用TAB按键来补全

    pwd 查看当前的路径位置

    ls 查看当前文件夹下所有文件和文件夹

    ll 查看当前文件夹下所有文件和文件夹(更详细)

    touch 新建一个文件

    mkdir 新建一个文件夹

    mkdir -p 新建一个路径(文件夹套文件夹)

    rm 删除(文件)

    rm -r 删除目录路径

    rm -f 强制删除

    cp [文件] [路径] 复制文件到某个路径中

    cp -r [文件夹] [路径] 将整个文件夹(路径)复制到这个目标路径中

    mv [文件] [路径] 剪切文件到某个路径中

    mv [旧文件] [新文件名] 重命名文件/文件夹

    cat 打开文件,查看文件内容(直接打开看)

    more 打开文件,但看得更舒服

    head 只看文件的前几行

    tail 只看该文件里的最后几行【实时监控】

    file 查看文件类型

    • 作业
      1.创建一个 homework 目录,建立名为 1.txt~10.txt 文件,并删除 1.txt~5.txt

    2.Linux 的日志文件放在var/log的目录下

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

    - 这次实验学习了环境变量的作用与用法,及几种搜索文件的方法
    

    1.declare 命令创建一个变量名为 tmp 的变量,使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou:读取变量的值,使用 echo 命令和 $ 符号($ 符号用于表示引用一个变量的值,初学者经常忘记输入):

    2.环境变量的作用域比自定义变量的要大,如 Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,除了创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。set,env,export。这三个命令很相似,都是用于打印环境变量信息

    3.文件搜索:

    • whereis 简单快速

      你会看到它找到了三个路径,两个可执行文件路径和一个 man 在线帮助文件所在路径,这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。

    • locate 快而全

      通过“ /var/lib/mlocate/mlocate.db ”数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型,如查找 /etc 下所有以 sh 开头的文件。
      注意:它不只是在 /etc 目录下查找,还会自动递归子目录进行查找。

    • which 小而精

      which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的软件,因为它只从 PATH 环境变量指定的路径中去搜索命令。

    • find 精而细

    • find 应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索

    • -mtime n:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件
      -mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过的文件
      -mtime -n:列出在 n 天之内(包含 n 天本身)被修改过的文件
      -newer file:file 为一个已存在的文件,列出比 file 还要新的文件名

    • 作业
      找出 /etc/ 目录下的所有以 .list 结尾的文件:

    实验六 文件打包与解压缩

    • zip的压缩和打包:

      上面命令将目录 /home/shiyanlou/Desktop 打包成一个文件,并查看了打包后文件的大小和类型。第一行命令中,-r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小。
    • 使用unzip命令解压缩zip文件

    unzip -q shiyanlou.zip -d ziptest

    使用安静模式-q,将文件解压到指定目录-d 若文件夹不存在则在当前目录下自动创建该文件夹

    $ unzip -l shiyanlou.zip

    如果你不想解压只想查看压缩包的内容 :使用 -l 参数

    • 创建一个 tar 包:

      上面命令中,-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后,比如不能写成 tar -fc shiyanlou.tar,可以写成 tar -f shiyanlou.tar -c ~。你还可以加上 -v 参数以可视的的方式输出打包的文件。上面会自动去掉表示绝对路径的 /,你也可以使用 -P 保留绝对路径符。
    • 说了这么多,其实平常使用的参数并没有那么复杂,只需要记住常用的组合就可以了。 常用命令:
      zip:
      打包 :zip something.zip something (目录请加 -r 参数)
      解包:unzip something.zip
      指定路径:-d 参数
      tar:
      打包:tar -cf something.tar something
      解包:tar -xf something.tar
      指定路径:-C 参数

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

    • df :查看磁盘的容量

      df -h #同--human-readable 以K,M,G为单位,提高信息的可读性。

      du:查看目录的容量

      du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。

      du -a #同--all 显示目录中所有文件的大小。

      du -s #同--summarize 仅显示总计,只列出最后加总的值。

      dd命令用于转换和复制文件,不过它的复制不同于cp

      dd if=/dev/stdin of=/dev/stdout bs=10 count=1

      if =输入内容(从键盘输入内容stdin)

      of=输出 形成和存入哪个文件里

      bs=单位大小 默认byte,可以为K,M,G

      count=几个单位

    • 使用 mkfs 命令格式化磁盘(我们这里是自己创建的虚拟磁盘镜像)

    • 作业:找出当前目录下面占用最大的前十个文件

    du : 计算出单个文件或者文件夹的磁盘空间占用.

    sort : 对文件行或者标准输出行记录排序后输出.

    head : 输出文件内容的前面部分.

    du:

    -a:显示目录占用空间的大小,还要显示其下目录占用空间的大小

    sort:

    -n : 按照字符串表示的数字值来排序

    -r :按照反序排列

    head :

    -n : 取出前多少行

    实验八 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等。

    • 简单来说就是:一个是天生自带的天赋技能,一个是后天得来的附加技能。我们可以使用 type 命令来区分命令是内建的还是外部的。例如这两个得出的结果是不同的

    得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的.def中
    xxx is a shell builtin

    得到这样的结果说明是外部命令,正如上文所说,外部命令在/usr/bin or /usr/sbin等等中
    xxx is /usr/bin/xxx

    若是得到alias的结果,说明该指令为命令别名所设定的名称;
    xxx is an alias for xx --xxx

    实验九 Linux任务计划crontab

    • 启动日志
      $sudo apt-get install -y rsyslog
      $sudo service rsyslog start

    启动crontab
    $sudo cron -f &

    创建任务计划
    $crontab -e

    查看已创建任务计划
    $crontab -l

    启动
    $ps aux | grep cron
    or
    $pgrep cron

    删除
    $crontab -r

    实验十 命令执行顺序控制与管道

    1.有选择的执行命令:命令&&用来实现选择性执行,它表示如果前面命令的执行结果为0则执行后面的,否则不执行。
    命令||用来实现选择性执行,它表示如果前面命令的执行结果不为0则执行后面的,否则不执行。
    命令|通过管道将上一个命令的输出作为下个命令的输入

    cut

    cut /etc/passwd -d ':' -f 1,6
    打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段分别表示用户名和其家目录

    cut /etc/passwd -c 2-5
    打印/etc/passwd文件中每一行的第2-5个字符,包含第5个

    cut /etc/passwd -c -5
    打印/etc/passwd文件中每一行的前5个字符,包含第5个

    cut /etc/passwd -c 5-
    打印/etc/passwd文件中每一行的第5个字符以后的内容,包含第5个

    grep

    在文本中或 stdin 中查找匹配字符串
    grep -rnI "shiyanlou" ~

    我们搜索/home/shiyanlou目录下所有包含"shiyanlou"的文本文件,并显示出现在文本中的行号
    -r 参数表示递归搜索子目录中的文件,-n表示打印匹配项行号,-I表示忽略二进制文件
    export | grep ".*yanlou$"

    查找环境变量中乙yan lou结尾的字符串
    $就表示一行的末尾、

    w

    wc 命令用于统计并输出一个文件中行、单词和字节的数目
    wc -l /etc/passwd

    统计行数
    -w 统计单词数
    -c 统计字节数
    -m 统计字符数
    -L 最长行字节数
    ls -dl /etc/

    统计 /etc 下面所有目录数

    sort

    cat /etc/passwd | sort

    默认按字典排序
    cat /etc/passwd | sort -r

    反转排序
    cat /etc/passwd | sort -t ":" -k 3

    按特定字段排序 -t参数用于指定字段的分隔符,这里是以":"作为分隔符;-k 字段号用于指定对哪一个字段进行排序
    这里/etc/passwd文件的第三个字段为数字,默认情况下是以字典序排序的,如果要按照数字排序就要加上-n参数

    uniq

    用于过滤或者输出重复行
    history | cur -c 8- | cut -d " " -f 1 | uniq

    history命令查看最近执行过的命令
    uniq命令只能去连续重复的行,不是全文去重,所以要达到预期效果,我们先排序
    history | cut -c 8- | cut -d " " -f 1 | sort | uniq

    history | cut -c 8- | cut -d " " -f 1 | sort | uniq -dc

    输出重复过的行(重复的只输出一个)及重复次数
    history | cut -c 8- | cut -d " " -f 1 | sort | uniq -D

    输出所有重复的行

    实验十一 简单的文本处理

    • tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。
      常见的方式为:tr [option]...SET1 [SET2]
      -d:删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配
      -s:去除set1指定的在输入文本中连续并重复的字符

    • col 命令可以将Tab换成对等数量的空格键,或反转这个操作:col [option]

    • join 这个命令就是用于将两个文件中包含相同内容的那一行合并在一起:join [option]... file1 file2

    实验十二 数据流重定向

    1.重定向简单来说就是将标准输出导向一个文件或追加到一个文件中

    2.使用tee命令同时重定向到多个文件:
    除了将需要将输出重定向到文件之外也需要将信息打印在终端
    $ echo 'hello shiyanlou' | tee hello

    实验十四 lunix下软件安装

    • 主要学习了 Ubuntu 下软件安装的几种方式,及 apt,dpkg 工具的使用。
      1.通常 Linux 上的软件安装主要有四种方式:
      - 在线安装
      - 从磁盘安装deb软件包
      - 从二进制软件包安装
      - 从源代码编译安装
      2.apt-get 是用于处理 apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等,其基本的格式为:apt-get install <软件包名>即可。

      • 更新软件源
        sudo apt-get update

      • 升级没有依赖问题的软件包
        sudo apt-get upgrade

      • 升级并解决依赖关系
        sudo apt-get dist-upgrade

      • 软件的卸载
        sudo apt-get remove w3m

    1. dpkg 是Debian软件包管理器的基础,dpkg本身是一个底层的工具。上层的工具,像是 APT,被用于从远程获取软件包以及处理复杂的软件包关系。"dpkg"是"Debian Package"的简写。
      dpkg是常用于从本地磁盘安装deb格式软件的命令,搭配参数使用,例如sudo dpkg -i softname.deb(安装指定的deb软件包,如果是-I那就是查看软件包的信息)。

    实验十五,十六 ,十七 进程概念和管理,lunix日志系统

    • 程序(procedure):不太精确地说,程序就是执行一系列有逻辑、有顺序结构的指令,帮我们达成某个结果。

    • 进程(process):进程是程序在一个数据集合上的一次执行过程,在早期的UNIX、Linux 2.4及更早的版本中,它是系统进行资源分配和调度的独立基本单位。

      • 进程有以下的特性:动态性:进程的实质是一次程序执行的过程,有创建、撤销等状态的变化。而程序是一个静态的实体。
        并发性:进程可以做到在一个时间段内,有多个程序在运行中。程序只是静态的实体,所以不存在并发性。
        独立性:进程可以独立分配资源,独立接受调度,独立地运行。
        异步性:进程以不可预知的速度向前推进。
        结构性:进程拥有代码段、数据段、PCB(进程控制块,进程存在的唯一标志)。也正是因为有结构性,进程才可以做到独立地运行。
    • 线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。因为线程中几乎不包含系统资源,所以执行更快、更有效率。

    • 进程分类:以进程的功能与服务的对象分为用户进程与系统进程;以应用程序的服务类型分为交互进程、批处理进程、守护进程。

    • 通过 top 实时的查看进程的状态:

      由上面的就可以在知道当前系统的工作时间为下午4点23分,该机器已经启动了19天,当前系统中只有一个用户,load average后面的数值表示1、5、15分钟内cpu的平均负载。

    • 通过ps实时的查看进程的状态:

    • 通过 pstree 可以很直接的看到相同的进程数量,最主要的还是我们可以看到所有进程之间的相关性。

    • 首先通过前面的课程了解到常见的日志一般存放在 /var/log 中

    根据服务对象粗略的将日志分为两类:系统日志和应用日志。系统日志主要是存放系统内置程序或系统内核之类的日志信息如 alternatives.log 、btmp 等等,应用日志主要是我们装的第三方应用所产生的日志如 tomcat7 、apache2 等等。

    • 配置日志

    在做其中一个趣味实验的时候要安装安装aview和imagemagick,但我一个一个安装时会出现下面的情况:安装和更新失败的情况

    • 然后我选择了一次性更新和安装:安装成功了

    • 之后要下载网站上的图片,用 man 命令查看了如何从网站上下载图片的命令:

    -使用asciiview命令显示图片

    这种实验非常有趣而且还可以激发我们积极主动去学习的能力

    总结

    • 这是我第一次接触到linux内核的知识,这些天一直跟着实验楼里面的实验一个一个的做,学习了一些linux的基本概念和基本的操作,以及一些对文件的操作命令。但在mount挂载磁盘到目录树、 fdisk 为磁盘分区、正则表达式等方面的知识理解上对我来说有一些困难,还是需要多多练习。
    • 我觉得写博客最重要的一个方面就是,如果自己在今后的学习过程中忘掉了或者不记得这方面的知识了,方便我们自己查阅和参考,能够快速拾起来遗忘的部分。
    • 通过看了老师给的那个makdown的教程,自己写出了第一篇博客,也学习到了makdown的一些编辑方法,我相信通过后面不断的写博客,我的会写得越来越好,越来越有条理和逻辑。
    • 这门课我感觉很有挑战性,下周继续努力跟着娄老师的步伐,努力学习。
  • 相关阅读:
    EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs的使用
    EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs的使用
    高性能流媒体服务器EasyDSS前端重构(四)- webpack + video.js 打造流媒体服务器前端
    高性能流媒体服务器EasyDSS前端重构(四)- webpack + video.js 打造流媒体服务器前端
    高性能流媒体服务器EasyDSS前端重构(三)- webpack + vue + AdminLTE 多页面引入 element-ui
    高性能流媒体服务器EasyDSS前端重构(三)- webpack + vue + AdminLTE 多页面引入 element-ui
    高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间
    高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间
    高性能流媒体服务器EasyDSS前端重构(一)-从零开始搭建 webpack + vue + AdminLTE 多页面脚手架
    高性能流媒体服务器EasyDSS前端重构(一)-从零开始搭建 webpack + vue + AdminLTE 多页面脚手架
  • 原文地址:https://www.cnblogs.com/yuchao123/p/9781167.html
Copyright © 2011-2022 走看看