20189215《Linux内核原理与分析》第一周作业

时间:2022-11-30 22:13:49

实验1 Linux系统简介

本节主要学习了 Linux 的历史,Linux 与 Windows 的区别等入门知识。通过学习,我明确了目的,是要用 Linux 来做程序开发、搭建服务器等;并且非常接受不用或少用图形界面;尽可能多学习一些Linux的发行版。在安装Ubuntu时也遇到了不支持虚拟化的问题,进入BIOS设置得以解决。

实验2 基本概念及操作

  • 学习实践
  1. 通配符?*的区别
    20189215《Linux内核原理与分析》第一周作业
    ?匹配一个字符,*匹配一个或者多个字符。
  2. 批量建立文件
    20189215《Linux内核原理与分析》第一周作业
  • 作业
  1. banner命令
    20189215《Linux内核原理与分析》第一周作业
    20189215《Linux内核原理与分析》第一周作业
    -w参数指定打印宽度,因为实验楼的环境在屏幕中显示比较小,必须要加上宽度限制。
  2. toilet命令
    20189215《Linux内核原理与分析》第一周作业
  3. flight命令
    20189215《Linux内核原理与分析》第一周作业

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

  • 学习实践
  1. 切换用户
    20189215《Linux内核原理与分析》第一周作业
  2. 添加用户组
    可以使用groups命令,或者查看/etc/group文件查看用户组,使用usermod添加用户组。
    20189215《Linux内核原理与分析》第一周作业
  3. 更改文件所有者
    使用chown命令更改文件权限
    20189215《Linux内核原理与分析》第一周作业
  4. 权限更改
    (1)数字更改权限
    数字说明:
    0 - 无权限
    1 - 可执行
    2 - 可写
    3 - 可写可执行
    4 - 可读
    5 - 可读可执行
    6 - 可读可写
    7 - 可读可写可执行
    三个数字分别对应文件所有者、所属用户组、其他用户。
    20189215《Linux内核原理与分析》第一周作业
    (2)加减赋值更改权限
    u、g、o分别对应文件所有者、所属用户组、其他用户。
    +和-分别表示增加、去除权限。
    r、w、x分别表示读、写、执行。
    20189215《Linux内核原理与分析》第一周作业
  • 作业
    题目:添加一个用户 loutest,使用 sudo 创建文件 /opt/forloutest,设置成用户 loutest 可以读写。
  1. 添加用户loutest
    20189215《Linux内核原理与分析》第一周作业
  2. 用户loutest加入sudo用户组
    20189215《Linux内核原理与分析》第一周作业
  3. 切换用户创建文件并修改权限
    20189215《Linux内核原理与分析》第一周作业

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

FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范,第一层是,/ 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin/sbin则应该放置可执行文件等等。第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如/var/log放置系统日志文件,/usr/share放置共享数据等等。

  • 学习实践
  1. rename批量修改文件名
    修改文件名可以使用mv命令,但是想要批量修改的话,需要使用rename命令。
    20189215《Linux内核原理与分析》第一周作业
  2. cattac命令(正反)
    20189215《Linux内核原理与分析》第一周作业
  3. file命令查看文件类型
    20189215《Linux内核原理与分析》第一周作业
  • 作业
  1. 创建一个 homework 目录,建立名为 1.txt~10.txt 文件,并删除 1.txt~5.txt
    20189215《Linux内核原理与分析》第一周作业
  2. Linux的日志文件在哪个目录?
    日志文件基本在/var/log和/var/run中。
    (1)/var/log/boot.log(自检过程)
    (2)/var/log/cron (crontab守护进程crond所派生的子进程的动作)
    (3)/var/log/maillog (发送到系统或从系统发出的电子邮件的活动)
    (4)/var/log/syslog (只记录警告信息)
    (5)/var/run/utmp
    (6)/var/log/wtmp(记录每个用户登录、注销及系统的启动、停机的事件)
    (7)/var/run/utmp(记录有关当前登录的每个用户的信息)
    (8)/var/log/xferlog(记录FTP会话)

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

  • 学习实践
  1. 添加环境变量
    20189215《Linux内核原理与分析》第一周作业
  2. 添加自定义路径且立即生效
    20189215《Linux内核原理与分析》第一周作业
  3. 搜索文件
    whereis --简单快速
    which --小而精
    find --精而细
    locate --快而全,通过/var/lib/mlocate/mlocate.db数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb命令。
  • 作业
    题目:寻找文件。找出 /etc/ 目录下的所有以 .list 结尾的文件
    实验楼的环境运行不了updatedb命令,所以本次作业在自己电脑上进行。
    20189215《Linux内核原理与分析》第一周作业

挑战1 寻找文件

  • 目标:
  1. 找到sources.list文件(依稀记得在/etc/目录下)
  2. 把文件所有者改为自己(shiyanlou)
  3. 把权限修改为仅仅只有自己可读可写
  • 解答:
    20189215《Linux内核原理与分析》第一周作业

实验6 文件打包与解压缩

  • 学习实践
  1. zip打包
    -r表示递归打包,将目录下所有文件打包。
    -9表示打包速度与大小等级设定,1表示最快压缩但体积大,9表示体积最小但耗时最久。
    -q表示静默打包,不向终端输出信息。
    -o表示输出文件。
    20189215《Linux内核原理与分析》第一周作业
  2. tar命令
    -c表示创建一个 tar 包文件
    -x表示解压缩文件,只能解压缩到一个已存在的目录,所以下图中第一次实现错误提示。
    -f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后
    20189215《Linux内核原理与分析》第一周作业
  • 作业
    题目:创建一个名为 test 的文件,分别用 zip 和 tar 打包成压缩包,再解压到 /home/shiyanlou 目录。
    20189215《Linux内核原理与分析》第一周作业

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

  • 学习实践
  1. 创建虚拟磁盘
    20189215《Linux内核原理与分析》第一周作业
  2. 虚拟磁盘挂载
    由于实验楼环境的问题(环境中使用的 Linux 内核在编译时没有添加对 Loop device的支持),所以将无法挂载成功。
    20189215《Linux内核原理与分析》第一周作业
    在自己机器上挂载成功。
    20189215《Linux内核原理与分析》第一周作业
  • 作业
    题目:找出当前目录下面占用最大的前十个文件
    du -a | sort -n -r | head -n 10
    使用du查看当前目录,并使用-a参数显示大小,sort进行排序,head取前十。

实验8 Linux下的帮助命令

  • 学习实践
    Linux命令分为内建命令和外部命令。内建命令是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,并由 shell 程序识别并在 shell 程序内部完成运行,而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。外部命令是 Linux 系统中的实用程序部分,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。
    可以使用type进行区分。
    20189215《Linux内核原理与分析》第一周作业
    help命令是用于显示 shell 内建命令的简要帮助信息。
    man没有内建与外部命令的区分,显示系统手册页中的内容,大多数都是对命令的解释信息,还有一些相关的描述。
    info是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息。

实验9 Linux任务计划crontab

  • 学习实践
  1. crontab
    20189215《Linux内核原理与分析》第一周作业
    20189215《Linux内核原理与分析》第一周作业
    添加*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)可以实现每分钟在/home/shiyanlou目录下创建一个以当前的年月日时分秒为名字的空白文件。
  2. 查看守护进程
    虽然刚刚添加了任务,但是如果cron的守护进程并没有启动,它根本都不会监测到有任务,当然也就不会执行.可以通过以下2种方式来确定cron是否成功的在后台启动。
    20189215《Linux内核原理与分析》第一周作业
  3. 查看文件,可以看到已经自动执行了几次
    20189215《Linux内核原理与分析》第一周作业

挑战2 备份日志

  • 目标:
  1. 为shiyanlou用户添加计划任务。
  2. 每天凌晨3点的时候定时备份alternatives.log到/home/shiyanlou/tmp/目录。
  3. 命名格式为年-月-日,比如今天是2017年4月1日,那么文件名为2017-04-01。
  • 解答:
    使用crontab -e为当前用户添加计划任务,此时不能使用sudo,否则是给root用户添加计划任务。
    添加如下代码即可:
    0 3 * * * cp alternatives.log /home/shiyanlou/tmp/$(date +\%Y-\%m-\%d)

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

  • 学习实践
  1. 有选择的执行命令
    && 表示前一条命令执行成功时才执行后一条命令,|| 表示上一条命令执行失败后才执行下一条命令
    20189215《Linux内核原理与分析》第一周作业
  2. cut命令,1,6显示第1和第6段,1~6显示1到6段。
    20189215《Linux内核原理与分析》第一周作业
    20189215《Linux内核原理与分析》第一周作业
  3. wc计数命令
    wc 命令用于统计并输出一个文件中行、单词和字节的数目。
    -l :行数
    -w :单词数
    -c :字节数
    -m:字符数
    -L :最长行字节数
    20189215《Linux内核原理与分析》第一周作业
  4. wc结合管道,统计/etc下面所有目录数
    20189215《Linux内核原理与分析》第一周作业

实验11 简单的文本处理

  • 学习实践
    20189215《Linux内核原理与分析》第一周作业
    tr命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。
    -d参数:删除。
    -s参数:去重。
  • 作业
    题目:在不使用转换工具的情况下,使用学过的命令手动完成 dos 文本格式到 UNIX 文本格式的转换。
    使用tr -d '\r' <test.txt> tes.txt进行转换,将test.txt转换为tst.txt。
    20189215《Linux内核原理与分析》第一周作业

实验12 数据流重定向

  • 学习实践
  1. 重定向
    分别进行:将cat的连续输出(heredoc方式)重定向到一个文件;
    echo命令通过管道传过来的数据作为cat命令的输入,将标准输出作为命令的输出;
    echo命令的输出从默认的标准输出重定向到一个普通文件。
    20189215《Linux内核原理与分析》第一周作业
  2. 标准错误定向到标准输出再定向到文件
    标准错误不能直接定向到标准输出,可以用以下两种方式:
    20189215《Linux内核原理与分析》第一周作业
  3. tee命令同时重定向到文件和终端
    20189215《Linux内核原理与分析》第一周作业
  4. exec实现shell重定向
    20189215《Linux内核原理与分析》第一周作业
  5. 创建、关闭文件描述符
    20189215《Linux内核原理与分析》第一周作业
    20189215《Linux内核原理与分析》第一周作业
  • 作业
    题目:理解下面这段代码的作用,实际这段代码不会正常工作,请结合这一小节的知识分析这段代码没有正确工作的原因,并设法解决这个问题。
while read filename; do
    rm -iv $filename
done <<(ls)

理解:这段代码的本意是读取当前目录的文件列表,并有交互地删除。
rm -iv的作用是在删除时进行交互,并且显示步骤。它期待用户从标准输入中输入y或者n来进行是否删除的操作,但是标准输入被<<(ls)重定向了,rm命令在 <<(ls)中寻找y或者n,找不到就中断退出了。
解决:标准输入一定要给到循环体,此时将标准输入复制一份,给予rm -iv命令进行交互即可。

exec 8<&0    //此时使用3~8均可
while read filename; do
    rm --iv $filename <&8
done <<(ls)

挑战3 历史命令

  • 目标:
  1. 处理文本data
  2. 将结果写入result
  3. 结果包含次数和命令,如“100 ls
  • 解答:
    cat data1 | cut -c 8- | sort |uniq -dc | sort -n -r | head -3 > result
    20189215《Linux内核原理与分析》第一周作业

实验13 正则表达式基础

  • 学习实践
  1. grep操作,使用正则表达式(作业:结合正则表达式做更多练习)
    注意:当^放到中括号内为排除字符,否则表示行首。
    20189215《Linux内核原理与分析》第一周作业
    20189215《Linux内核原理与分析》第一周作业
  2. 使用扩展正则表达式,加-E,不加则不执行
    20189215《Linux内核原理与分析》第一周作业
  3. sed
    sed工具用于过滤和转换文本的流编辑器。打印奇数行,并将"shiyanlou" 全局替换为"ly"。
    p通常与-n参数配合使用,不能省略最后的p命令。
    20189215《Linux内核原理与分析》第一周作业
  4. awk文本处理语言
    20189215《Linux内核原理与分析》第一周作业
    20189215《Linux内核原理与分析》第一周作业
    \t要用双引号。
  • 作业
    题目:基于 pattern space 和 hold space 实现将一个文本倒序输出和交换奇数行和偶数行。
  1. 反序
    sed '1!G;h;$!d' test.txt
    1!G —— 只有第一行不执行G命令,将hold space中的内容append回到pattern space
    h —— 第一行都执行h命令,将pattern space中的内容拷贝到hold space中
    $!d —— 最后一行不执行。其它行执行d命令,删除当前行
    20189215《Linux内核原理与分析》第一周作业
  2. 奇偶互换
    sed -n 'h;$!{n;G};p' test.txt
    -n —— -n参数静默模式,只打印受影响的行
    h —— 将pattern space中内容拷贝到 hold space中
    $!{n,G} —— 最后一行不执行。n进入下一行,G将hold space中内容append到pattern space中,appttern space中的两行位置交换了
    p —— 打印出交换后的两行
    注意:最后一行不执行的目的,是如果最后一行是奇数行,不需要交换直接打印。
    20189215《Linux内核原理与分析》第一周作业

挑战4 数据提取

  • 目标:
    在文件data2中匹配数字开头的行,结果写入/home/shiyanlou/num文件
    在文件data2中匹配出正确格式的邮箱,结果写入一个名为/home/shiyanlou/mail的文件
  • 解答:
  1. data2的内容
    20189215《Linux内核原理与分析》第一周作业
  2. 匹配数字开头的行
    grep '^[[:digit:]]' data2>num
    20189215《Linux内核原理与分析》第一周作业
  3. 匹配正确格式邮箱
    grep'^[[:alnum:]]*@[[:alnum:]]*\.com' data2>mail
    20189215《Linux内核原理与分析》第一周作业

实验14 Linux下软件安装

  • 学习实践
  1. apt-get是用于处理 apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等。
    比较有用的几个参数:
    -f——修复损坏的依赖关系
    -d——只下载不安装
    --reinstall——重新安装已经安装但可能存在问题的软件包
  2. dpkg工具——"Debian Package"的简写
    可以安装deb形式打包的软件包。
  3. 从二进制包安装
    二进制包的安装比较简单,将从网络上下载的二进制包解压后放到合适的目录,然后将包含可执行的主程序文件的目录添加进PATH环境变量即可。

实验15、16 Linux 进程概念和管理

通过这两节大致了解进程的概念、进程之间存在的相互关系、进程的查看命令pspstreetop、进程的管理命令killnicerenice等。

实验17 Linux 日志系统

通过本实验,了解了较新的系统日志收集工具rsyslog及其配置文件,还有一个日志文件管理工具logrotate,省心省力,不但可以压缩日志文件,减少存储空间,还可以将日志发送到指定E-mail,方便管理员及时查看日志。logrotate是基于CRON来运行的,其脚本是 /etc/cron.daily/logrotate;同时我们可以在 /etc/logrotate中找到其配置文件。

小结

本次进行了共计21个实验,即使以前使用过Ubuntu系统,也学习到了很多新的知识,将我对Linux系统的认识扳回了正确的方向,即使表面相似,内部的原理也是大有不同的。学习了很多知识,但是很多命令还不熟练,需要自己在实际使用中加深理解,熟练使用。