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

实验一 Linux系统简介

  这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别。其中学到了LInux中的应用程序大都为开源自由的软件,用户可以修改定制再发布;内核是实现多任务运行和硬件管理的基础;在我们使用应用程序时,在背后支持软件服务的是成千上万个Linux服务器主机。

实验二 Linux基础概念及操作

  这一节首先学习了实验楼环境、终端的概念、和shell命令以及相关小技巧和快捷键。其中Shell是一种中间程序,即是用户交互的界面,也是控制系统的脚本语言。

其次在实践中又学习了shell通配符以及批量创建文件。

实验三 用户文件管理

  1. Linux用户管理

  首先学习了 who命令, su命令 , sudo命令。了解了user、用户组等相关概念。

并且除了root自己外,其他sudo里的用户要使用root权限必须在命令前加上sudo,而且只有将用户添加到sudo组里才能使用root权限。 

实验楼

  这里 cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort 表示将读取的文本进行一个字典排序再输出

实验楼

  2. 文件权限

  Unix/Linux系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制

  一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。

  ls 加上 -lh 参数来更直观的查看文件的大小。

  

  g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。

  3. 创建新用户和新文件,并使新用户获得该文件的读写权限:

实验楼u

  发现:在shiyanlou中用sudo创建的文件forloutest的User和用户组都是root,所以一开始使用教程里的"chmod go+"命令没有权限,在命令前加了sudo才达到效果,最后使得这个文件对所有用户都有读写权限。

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

  Windows 一直是以存储介质为主的;Linux 是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架。

  FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。

  使用-p 参数创建父目录

  使用-r 参数递归复制文件夹

  rename 来实现批量重命名,不过它要用 perl 正则表达式来作为参数

  cat参数:

  -b : 指定添加行号的方式,主要有两种:

  -b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)

  -b t:只列出非空行的编号并列出(默认为这种方式)

  -n : 设置行号的样式,主要有三种:

  -n ln:在行号字段最左端显示

  -n rn:在行号字段最右边显示,且不加 0

  -n rz:在行号字段最右边显示,且加 0

  -w : 行号字段占用的位数(默认为 6 位)

  cat正序打印文件内容到标准输出

  创建1-10txt文件,再删除其中1-5txt文件。

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

   Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,除了创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。

  通常我们会涉及到的变量类型有三种:

  1. 当前 Shell 进程私有用户自定义变量,如上面我们创建的 tmp 变量,只在当前 Shell 中有效。

  2. Shell 本身内建的变量。

  3. 从自定义变量导出的环境变量。

  当我们在 Shell 中执行一个命令时,系统就会按照 PATH 中设定的路径按照顺序依次到目录中去查找,如果存在同名的命令,则执行先找到的那个。

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

   在将命令所在路径添加到 PATH 中后,shell在PATH中便可以找到/mybin,故可直接执行hello_shell.sh:

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

  上述命令中 >> 表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的 >是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。

  2. 搜索文件

  与搜索相关的命令常用的有 whereiswhichfind 和 locate 。

  作业:搜索/e t c中所有.list结尾的文件

实验六 文件打包与压缩

  1. zip和unzip

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

  2.tar

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

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

  硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/random)都像普通文件一样,只是在各自的驱动程序中实现了对应的功能,dd 也可以读取文件或写入这些文件。

  用户在 Linux/UNIX 的机器上打开一个文件以前,包含该文件的文件系统必须先进行挂载的动作,此时用户要对该文件系统执行 mount 的指令以进行挂载。该指令通常是使用在 USB 或其他可移除存储设备上,而根目录则需要始终保持挂载的状态。

  使用 mount 命令挂载磁盘到目录树

  用户在 Linux/UNIX 的机器上打开一个文件以前,包含该文件的文件系统必须先进行挂载的动作,此时用户要对该文件系统执行 mount 的指令以进行挂载。

实验八 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. 通过which, &&和 || 来选择性的执行任务,并注意它们的顺序搭配。

  2. 管道的概念,| 用作分隔符,其前者的命令的输出可作为其后者命令的输入

  3.grep命令在文本或stdin中查找匹配字符串

  4. wc简单记数小工具

  5. sort排序,之前在cat命令中用过

  默认为字典排序:$ cat /etc/passwd | sort

  反转排序:$ cat /etc/passwd | sort -r

  按特定字段排序:$ cat /etc/passwd | sort -t':' -k 3

  6. uniq 去重复

  uniq命令可以用于过滤或者输出重复行。

实验十一 文本处理

  1. tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。-d,删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配。-a,去除set1指定的在输入文本中连续并重复的字符

  2. col 命令可以将Tab换成对等数量的空格键,或反转这个操作。-x,将Tab转换为空格;-h,将空格转换为Tab。

  3.join命令

  4. paste命令 与join命令类似

实验十二 数据流重定向

  1. >命令 和 >> 命令

  2. 文件描述符

  文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于 UNIX、Linux 这样的操作系统。我们可以这样使用这些文件描述符:默认使用终端的标准输入作为命令的输入和标准输出作为命令的输出

  3. 使用tee命令进行重定向

  4. 关于其他重定向理解还不够,今后还需加强学习。

实验十三 正则表达式

  1. 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

  2. grep命令操作

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

  打印2-5行,打印奇数行。一开始的错误是忘加空格,而导致缺少了要操作的目标文件。

  将shiyanlou替换成hehe,并只打印那一行

实验十四~十五 Linux软件下载安装和进程概念

  十四章,学习了Linux中软件下载安装的特点,重点学习了apt的含义,与dep安装命令的优势劣势;以及apt-get的相关命令;实验十五讲述了进程的相关概念,与本科操作系统课程所学类似,以及进程如何在系统中衍生,发展,以及进程之间存在的相互关系,同时了解了工作与进程,以及工作管理的一些使用性的操作。

实验十六 进程管理

  这一章节主要学习了top、ps、pstree等查看工具,以及使用这些命令时所得到的信息的含义,同时我们学习了用于发送重启或结束进程的信号kill命令,以及修改进程优先级的nice,renice命令。

实验十七 Linux系统日志

  日志数据可以是有价值的信息宝库,也可以是毫无价值的数据泥潭。它可以记录下系统产生的所有行为,并按照某种规范表达出来。

  日志分为系统日志和应用日志

  如上图所示,在更新日志时发现了问题,首先在初始启动实验环境后查看历史日志,发现日志并不像教程所说一样为空,而且在我下载node.js后,再次查看日志,也没有更新。

经过思考过后,我想到了一个可能:我们的实验环境是实验楼服务器随便将一个会员使用过的环境分配来的,会员使用的环境不会清空,而我们使用的痕迹将会清空,所以在历史日志里也不会改变。

  2. rsyslog日志服务程序

  rsyslog 主要是由 Input、Output、Parser 这样三个模块构成的,并且了解到数据的简单走向,首先通过 Input module 来收集消息,然后将得到的消息传给 Parser module,通过分析模块的层层处理,将真正需要的消息传给 Output module,然后便输出至日志文件中。

  3. logrotate日志管理工具

  logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件。我们可以根据日志文件的大小,也可以根据其天数来切割日志、管理日志,这个过程又叫做“转储”。

小结:

  在本科期间,对Linux系统有过简单的操作,这次学习不仅对Linux的基础命令有了更全面更深度的学习,比如了解了常用的apt-get,以及在Windows中常用的dep;并且对其内部原理有了进一步了解。但是,由于这一周活动较多,时间较紧,对于正则表达式、重定向等内部原理还是一知半解,需要今后多看相关资料,来加强理解。

  Linux内核是信息安全领域最为重要的一个内容,经过这次学习,感触更深。例如在信息系统安全所学的用户和文件的权限管理,在这次学习中就有所实践,还需进一步学习,对主体域和客体类别等安全知识进行实践操作;其次,日志的操作是维护信息安全的重要工具,因此对于日志的深入学习也是非常重要的。

  总之,Linux内核原理是将来我们做项目以及参加工作的基础,需要我们潜下心来认真学习,这次的学习有些仓促,并且只是学习实验楼的知识是远远不够的,还需我们通过其他资料多多补充。

 

原文地址:https://www.cnblogs.com/20189210mujian/p/9785895.html