• 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内核非常有用但难度也大,下周继续努力!

  • 相关阅读:
    怎么查看京东店铺的品牌ID
    PPT编辑的时候很卡,放映的时候不卡,咋回事?
    codevs 1702素数判定2
    codevs 2530大质数
    codevs 1488GangGang的烦恼
    codevs 2851 菜菜买气球
    hdu 5653 Bomber Man wants to bomb an Array
    poj 3661 Running
    poj 1651 Multiplication Puzzle
    hdu 2476 String Painter
  • 原文地址:https://www.cnblogs.com/Jspo/p/7617526.html
Copyright © 2020-2023  润新知