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


    实验一 Linux 系统简介

    这一节主要学习了Linux的历史,重要人物以及学习Linux的方法。Linux和Windows在是否收费、软件与支持、安全性、可定制性和应用范畴等方面都存在着区别。目前感受最深的是Linux的命令行操作,我还不能习惯不用或少用图形界面。在安装Ubuntu时遇到电脑不支持虚拟化的问题,通过VMware虚拟安装Ubuntu的详细过程及错误解决方案进入bios设置虚拟化启用得以解决。

    实验二 基本概念及操作

    • 实践

    1.批量建立文件

    通配符[c1-c2]含义为匹配 c1-c2 中的任意单一字符,我做了尝试想查看效果,但出现错误

    反思:如果使用touch命令,匹配 c1-c2 中的任意单一字符,会把所有的字符都创建出来,这就和touch {c1..c2}.txt没什么区别,后面的结果不能传递给touch做解释。于是我尝试其他命令看到了想要的结果:

    2.一些命令在使用前需要更新安装:

    • 作业

    实验三 用户文件权限管理

    • 实践

    1.su与su -l

    su 可以切换到用户 ,su - 命令也是切换用户,同时环境变量也会跟着改变成目标用户的环境变量:

    实践后我观察到了区别,但仍不明白环境变量的改变会带来什么影响,之后在本节作业中找到了答案。

    2.将其它用户加入 sudo 用户组

    新加入的用户yxt不具有 root 权限的,也不在 sudo 用户组。必须将yxt加入 sudo 用户组,才可以让它使用 sudo 命令获得 root 权限:

    3.变更文件所有者

    4.修改权限

    二进制数字表示:每个文件的三组权限(拥有者,所属用户组,其他用户)对应一个 " rwx ":

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

    • 作业

    1.添加用户loutest

    2.切换用户并创建opt文件夹

    这时问题来了,首先用su,mkdir opt报错没有权限。根据所学的“su与su-”,我猜测现在的位置不能支持loutest创建文件。参考Linux下su与su -命令的本质区别,知道了不带-的su不会读取目标用户的环境配置文件,所以没有权限为目标用户创立文件。(有时配置文件多了或者少了一个空格,服务就运行不了。一定要注意细节问题。)

    3.将loutest加入sudo组

    4.设置成用户 loutest 可以读写

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

    • 实践

    1.使用 -p 参数,同时创建父目录(如果不存在该父目录)

    2.使用-r 或者 -R 参数递归复制文件夹

    3.批量重命名

    4.cat正序打印文件内容到标准输出,tac 为倒序

    5.file查看文件类型

    • 作业

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

    2.Linux 的日志文件在哪个目录?

    日志文件是动态的,所以在/var/log中。

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

    • 实践

    1.当在 Shell 中执行一个命令时,系统会按照 PATH 中设定的路径按照顺序依次到目录中去查找。创建可执行 Shell 脚本放入mybin文件夹中,即可在mybin目录中运行此程序。回到上一级目录,当再想运行此程序时,会发现找不到此文件:

    如何做到像使用系统命令一样执行自己创建的脚本文件或者程序呢?那就要将命令所在路径添加到 PATH 环境变量。但是实践结果又出现找不到文件:

    反思:还有一个问题,在未将命令所在路径添加到 PATH 环境变量的条件下,在mybin目录中运行时输入的是./shell.sh,为什么必须加./才能执行?我将此问题与现在的出错点进行了对比,问题得以解决。“./”代表的是当前目录,所以执行的是当前目录下的脚本或程序,若不加“./”,shell就会去PATH环境变量保存的路径按照顺序查找,显然是查找不到的。在将命令所在路径添加到 PATH 中后,回到shiyanlou目录,在PATH中可以找到/mybin,故可直接执行shell.sh:

    确保每次启动 Shell 时自动执行上面添加自定义路径到 PATH 的命令:

    2.搜索文件

    locate通过“ /var/lib/mlocate/mlocate.db ”数据库查找,快而全:

    !

    注:locate不只是在 /etc 目录下查找,还会自动递归子目录进行查找。

    find不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索,精而细。

    列出当天内容有改动的文件:

    $ find ~ -ctime 0
    

    列出比 Code 文件夹新的文件:

    $ find ~ -newer /home/shiyanlou/Code
    

    实验六 文件打包与压缩

    • 实践

    1.zip和unzip

    -r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。压缩级别 -[1-9],1 表示最快压缩但体积大,9 表示体积最小但耗时最久。路径必须为绝对路径:

    2.tar

    -c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后。解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数):

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

    dd的命令行选项格式为选项=值!bs(block size)用于指定块大小(缺省单位为 Byte),count用于指定块数量。从/dev/zero设备创建一个容量为 256M 的空文件,使用 mkfs 命令格式化磁盘:

    实验八 Linux下的帮助命令

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

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

    type 命令来区分是内建命令还是外部命令:

    help 命令只能用于显示内建命令,外部命令的话基本上都有一个参数--help:

    实验九 Linux任务计划crontab

    通过 crontab 命令,可在固定的间隔时间执行指定的系统指令或 shell script 脚本:

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

    1.有选择的执行命令

    && 表示前一条命令执行成功时才执行后一条命令,|| 表示上一条命令执行失败后才执行下一条命令

    将 && 和 || 结合起来使用时是否以任意顺序都行?实践如下:

    修改后即可:

    2.计数工具wc

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

    结合管道:

    3.sort,uniq

    实验十一 简单的文本处理

    tr:-d 删除和set1匹配的字符(不是全词匹配也不是按字符顺序匹配),-s 去除set1指定的在输入文本中连续并重复的字符:

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

    paste命令在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。

    实验十二 数据流重定向

    1.重定向和管道
    管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接:

    2.tee
    使用tee命令,既可以将输出重定向到文件,也可以将信息打印在终端:

    实验十三 正则表达式基础

    1.正则表达式操作举例


    2.sed
    sed工具用于过滤和转换文本的流编辑器。

    打印奇数行,将"shiyanlou" 全局替换为"hehe"(p通常与-n参数配合使用,不能省略最后的"p"命令):

    实验十四、十五 进程管理和日志系统

    通过这两节大致了解进程的概念、进程之间存在的相互关系、进程的查看命令 ps,pstree,top、进程的管理命令 kill,nice,renice、系统日志结构以及日志工具的配置。

    小结

    1.Linux的常用命令基本掌握,命令的选项、mount挂载磁盘到目录树、 fdisk 为磁盘分区、正则表达式等还需要练习,进程和日志由于时间的关系看得比较粗需要继续琢磨,vim还不能熟练操作;

    2.做实验时同学间交流,root和普通用户有什么区别?为什么要把新建的用户拉到sudo组里才可以用sudo?我把普通用户比作实验室里的学生,把root比做老师,把sudo组比做可以让非本实验室学生进入实验室的权限,只有导师才有。新进入实验室里的学生(新用户)是不可以擅自将非本实验室的学生带到实验室的(不可sudo),除非导师赋予此权限(把新用户拉入sudo组)。故必须先使新用户属于sudo组,才可执行sudo(可能有部分地方不贴切);

    3.Linux内核非常有用但难度也大,下周继续努力!

  • 相关阅读:
    一个群发站内信的设计
    javascript typeof 小结
    setInterval,setTimeout的用法
    C#中常见异常类
    输入框关闭自动完成功能
    【转】javascript判断一个元素是否数组
    jquery的动态统计输入字符数方法
    giedview绑定数据格式化字符串
    jQuery 1.4单独为某个动画动作设效果
    GridView行编辑中找DropDownList控件
  • 原文地址:https://www.cnblogs.com/Jspo/p/7617526.html
Copyright © 2020-2023  润新知