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的一些编辑方法,我相信通过后面不断的写博客,我的会写得越来越好,越来越有条理和逻辑。
  • 这门课我感觉很有挑战性,下周继续努力跟着娄老师的步伐,努力学习。
原文地址:https://www.cnblogs.com/yuchao123/p/9781167.html