2020-2021-1 20209326 《Linux内核原理与分析》第一周作业

Linux 基础入门(新版)学习总结

实验1 Linux系统简介

1.本实验主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识。

2.Linux大致的学习路径如下:

实验2 基本概念及操作

本实验主要介绍了Linux 基本命令、通配符的使用和查看帮助文档

  • 1.常用快捷键
  • 2.Shell常用通配符
  • 3.查看帮助文档
    • man、info、--help
  • 4.通过本章作业,安装艺术字程序,初步了解了linux命令

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

本实验介绍了Linux 中创建、删除用户,及用户组等操作和文件权限设置

  • 1.查看用户
    • who am i 和 who mom likes
  • 2.用户管理
    • 在 Linux 系统里, root 账户拥有整个系统至高无上的权限,比如新建和添加用户。
    • su 可以切换到用户 user,执行时需要输入目标用户的密码,sudo 可以以特权级别运行 cmd 命令。
    • 创建用户 sudo adduser
    • 在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源。
    • 删除用户sudo deluser 使用 --remove-home 参数在删除用户时候会一并将该用户的工作目录一并删除。
    • 删除用户组可以使用 groupdel 命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。
    • 文件权限说明
    • Linux 里面一切皆文件,一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件。
    • 变更文件所有者 sudo chown
    • 修改文件权限
      方式一:二进制数字表示

      每个文件有三组固定的权限,分别对应拥有者,所属用户组,其他用户
      chmod 600
      方式二:加减赋值操作
      chmod go-rw
      g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户),+ 和 - 分别表示增加和去掉相应的权限。
    • adduser 和 useradd 的区别:
      useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd 去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。
  • 3.作业中的问题

    解决办法:
    1、切换到root用户权限
    2、查看/etc/sudoers文件权限,如果只读权限,修改为可写权限
    3、执行vi命令,编辑/etc/sudoers文件,添加要提升权限的用户;在文件中找到root ALL=(ALL) ALL,在该行下添加提升权限的用户信息
    4、保存退出,并恢复/etc/sudoers的访问权限为440
    5、切换到普通用户,测试用户权限提升功能
    原文链接

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

本实验介绍了Linux 的文件组织目录结构、相对路径和绝对路径和对文件的移动、复制、重命名、编辑等操作

  • 1.FHS标准
    FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等。
    第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。
  • 2.切换路径
    使用 cd 命令可以切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录(注意,我们上一节介绍过的,以 . 开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a 命令查看隐藏文件),- 表示上一次所在目录,~ 通常表示当前用户的 home 目录。使用 pwd 命令可以获取当前所在路径(绝对路径)。在进行目录切换的过程中请多使用 Tab 键自动补全,可避免输入错误,连续按两次 Tab 可以显示全部候选结果。
  • 3.绝对路径
    关于绝对路径,简单地说就是以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。
  • 4.相对路径
    相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如: usr/local/bin (这里假设你当前目录为根目录)。
  • 5.Linux 文件的基本操作
    1.新建文件 使用 touch 命令创建空白文件。
    2.新建目录 使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性。
    3.复制文件 使用 cp 命令(copy)复制一个文件到指定目录。如果直接使用 cp 命令复制一个目录的话需要加上 -r 或者 -R 参数,表示递归复制。
    4.删除文件 使用 rm(remove files or directories)命令删除一个文件;跟复制目录一样,要删除一个目录,也需要加上 -r 或 -R 参数。
    5.移动文件 使用 mv(move or rename files)命令移动文件(剪切)。命令格式是 mv 源目录文件 目的目录。
    6.重命名文件 mv 命令除了能移动文件外,还能给文件重命名。命令格式为 mv 旧的文件名 新的文件名。rename批量重命名。
    7.查看文件 cat 为正序显示,tac 为倒序显示。可以加上 -n 参数显示行号。nl 命令,添加行号并打印,这是个比 cat -n 更专业的行号打印命令。使用 more 和 less 命令分页查看文件。使用 head 和 tail 命令查看文件首尾。
    8.查看文件类型 使用 file 命令查看文件的类型
    9.编辑文件 直接使用专门的命令行编辑器比如(emacs,vim,nano)
  • 6.作业


2.日志文件通常保存在/var/log目录下。

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

  • 5.1 三种环境变量相关的命令:set,env,export
  • 5.2 查看 PATH 环境变量的内容:echo $PATH
  • 5.3 添加自定义路径到“ PATH ”环境变量:PATH=$PATH:注意这里一定要使用绝对路径。
  • 5.4 修改已有变量
  • 5.5 删除已有变量 使用 unset 命令删除一个环境变量
  • 5.6 让环境变量生效 source 命令
  • 5.7 搜索文件 常用的有 whereis,which,find 和 locate。
    whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。
    locate 快而全,使用 locate 命令查找文件也不会遍历硬盘,它通过查询 /var/lib/mlocate/mlocate.db 数据库来检索信息。
    which 小而精,which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的程序,因为它只从 PATH 环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果。也就是说,我们可以看到某个系统命令是否存在以及执行的到底是哪一个地方的命令。
  • 作业

    问题:没找到以.list为后缀的文件
    解决办法:sudo find /etc -name "*.list"查找对象要注意规范加""

实验6 文件打包与解压缩

本实验介绍 Linux 上常用的压缩/解压工具,主要讲解 zip,tar 的使用。

  • 6.1 zip:打包 :zip something.zip something (目录请加 -r 参数)解包:unzip something.zip 指定路径:-d 参数
  • 6.2 tar:打包:tar -cf something.tar something 解包:tar -xf something.tar 指定路径:-C 参数

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

  • 7.1 使用 df 命令查看磁盘的容量
  • 7.2 使用 du 命令查看目录的容量

实验8 Linux下的帮助命令

  • 8.1 --help 外部命令基本上都有一个参数 --help,这样就可以得到相应的帮助
  • 8.2 man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述。
  • 8.3 info 来自自由软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息.

实验9 Linux任务计划crontab

crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。

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

  • 10.1 cut 命令,打印每一行的某一段
  • 10.2 grep 命令是很强大的,也是相当常用的一个命令,它结合正则表达式可以实现很复杂却很高效的匹配和查找 grep [命令选项]... 用于匹配的表达式 [文件]...
  • 10.3 wc 命令用于统计并输出一个文件中行、单词和字节的数目。注意:对于西文字符来说,一个字符就是一个字节,但对于中文字符一个汉字是大于 2 个字节的,具体数目是由字符编码决定的。
  • 10.4 sort 排序命令
    默认为字典排序:sort
    反转排序:sort -r
    按特定字段排序: sort -t':' -k 3 上面的-t参数用于指定字段的分隔符,这里是以":"作为分隔符;-k 字段号用于指定对哪一个字段进行排序。
  • 10.5 uniq 命令可以用于过滤或者输出重复行。

实验11 简单的文本处理

  • 11.1 tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。
  • 11.2 col 命令可以将Tab换成对等数量的空格键,或反转这个操作。
  • 11.3 join 命令就是用于将两个文件中包含相同内容的那一行合并在一起。
  • 11.4 paste这个命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。

实验12 数据流重定向

注意不要将管道和重定向混淆,管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接,你可以仔细体会一下上述第三个操作和最后两个操作的异同点。

  • 12.1 标准重定向 stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)
    实验13 正则表达式基础
  • 12.2 tee 除了需要将输出重定向到文件,也需要将信息打印在终端。那么你可以使用 tee 命令来实现
  • 12.3 exec 命令的作用是使用指定的命令替换当前的 Shell,即使用一个进程替换当前进程,或者指定新的重定向
  • 12.4 在类 UNIX 系统中,/dev/null,或称空设备,是一个特殊的设备文件,它通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个 EOF。
  • 12.5 xargs 是一条 UNIX 和类 UNIX 操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。

实验13 正则表达式基础

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

  • 13.1 模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串
    | 竖直分隔符表示选择
    + 表示前面的字符必须出现至少一次(1 次或多次)
    ? 表示前面的字符最多出现一次(0 次或 1 次)
    * 星号代表前面的字符可以不出现,也可以出现一次或者多次(0 次、或 1 次、或多次)
    () 圆括号可以用来定义模式字符串的范围和优先级,这可以简单的理解为是否将括号内的模式串作为一个整体。
    regex 的思维导图:
  • 13.2 grep 命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。常用参数如下:
  • 13.3 sed 工具在 man 手册里面的全名为"sed - stream editor for filtering and transforming text ",意即,用于过滤和转换文本的流编辑器。常用参数如下:
  • 13.4 AWK 是一种优良的文本处理工具,Linux 及 Unix 环境中现有的功能最强大的数据处理引擎之一。

实验14 Linux下软件安装

  • 14.1 apt-get 是用于处理 apt包的公用程序集
  • 14.2 软件升级# 更新软件源 sudo apt-get update # 升级没有依赖问题的软件包 sudo apt-get upgrade # 升级并解决依赖关系 sudo apt-get dist-upgrade
  • 14.3 卸载软件 sudo apt-get remove
  • 14.4 软件搜索 sudo apt-cache search
  • 14.5 dpkg 是 Debian 软件包管理器的基础,它被伊恩·默多克创建于 1993 年。dpkg 与 RPM 十分相似,同样被用于安装、卸载和供给和 .deb 软件包相关的信息。使用dpkg -L查看deb包目录信息。
  • 14.6 二进制包的安装比较简单,我们需要做的只是将从网络上下载的二进制包解压后放到合适的目录,然后将包含可执行的主程序文件的目录添加进PATH环境变量即可。

实验15 Linux进程概念

  • 程序(procedure):不太精确地说,程序就是执行一系列有逻辑、有顺序结构的指令,帮我们达成某个结果。就如我们去餐馆,给服务员说我要牛肉盖浇饭,她执行了做牛肉盖浇饭这么一个程序,最后我们得到了这么一盘牛肉盖浇饭。它需要去执行,不然它就像一本武功秘籍,放在那里等人翻看。

  • 进程(process):进程是程序在一个数据集合上的一次执行过程,在早期的 UNIX、Linux 2.4 及更早的版本中,它是系统进行资源分配和调度的独立基本单位。同上一个例子,就如我们去了餐馆,给服务员说我要牛肉盖浇饭,她执行了做牛肉盖浇饭这么一个程序,而里面做饭的是一个进程,做牛肉汤汁的是一个进程,把牛肉汤汁与饭混合在一起的是一个进程,把饭端上桌的是一个进程。它就像是我们在看武功秘籍这么一个过程,然后一个篇章一个篇章地去练。

  • 线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。因为线程中几乎不包含系统资源,所以执行更快、更有效率。

  • 进程有以下的特性:
    动态性:进程的实质是一次程序执行的过程,有创建、撤销等状态的变化。而程序是一个静态的实体。
    并发性:进程可以做到在一个时间段内,有多个程序在运行中。程序只是静态的实体,所以不存在并发性。
    独立性:进程可以独立分配资源,独立接受调度,独立地运行。
    异步性:进程以不可预知的速度向前推进。
    结构性:进程拥有代码段、数据段、PCB(进程控制块,进程存在的唯一标志)。也正是因为有结构性,进程才可以做到独立地运行。

  • 进程的分类
    以进程的功能与服务的对象来分,我们可以分为用户进程与系统进程:
    用户进程:通过执行用户程序、应用程序或称之为内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。
    系统进程:通过执行系统内核程序而产生的进程,比如可以执行内存资源分配和进程切换等相对底层的工作;而且该进程的运行不受用户的干预,即使是 root 用户也不能干预系统进程的运行。
    以应用程序的服务类型来分,我们可以将进程分为交互进程、批处理进程、守护进程:
    交互进程:由一个 shell 终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。
    批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。
    守护进程:守护进程是一直运行的一种进程,在 Linux 系统启动时启动,在系统关闭时终止。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。例如 httpd 进程,一直处于运行状态,等待用户的访问。还有经常用的 cron(在 centOS 系列为 crond)进程,这个进程为 crontab 的守护进程,可以周期性的执行用户设定的某些任务。

  • 进程的衍生
    fork() 是一个系统调用(system call),它的主要作用就是为当前的进程创建一个新的进程,这个新的进程就是它的子进程,这个子进程除了父进程的返回值和 PID 以外其他的都一模一样,如进程的执行代码段,内存信息,文件描述,寄存器状态等等
    exec() 也是系统调用,作用是切换子进程中的执行程序也就是替换其从父进程复制过来的代码段与数据段

实验16 Linux进程管理

  • 16.1 top 工具是我们常用的一个查看工具,能实时的查看我们系统的一些关键信息的变化
  • 16.2 ps 也是我们最常用的查看进程的工具之一
  • 16.3 通过 pstree 可以很直接的看到相同的进程数量,最主要的还是我们可以看到所有进程之间的相关性
  • 16.4 使用 kill 来发送这个信号来操作进程的结束或者重启等等

实验17 Linux日志系统

  • 日志是一个系统管理员,一个运维人员,甚至是开发人员不可或缺的东西,系统用久了偶尔也会出现一些错误,我们需要日志来给系统排错,在一些网络应用服务不能正常工作的时候,我们需要用日志来做问题定位,日志还是过往时间的记录本,我们可以通过它知道我们是否被不明用户登录过等等。
  • 在 Linux 中大部分的发行版都内置使用 syslog 系统日志,那么通过前期的课程我们了解到常见的日志一般存放在 /var/log 中
  • 配置日志的方式:一种是由软件开发商自己来自定义日志格式然后指定输出日志位置;一种方式就是 Linux 提供的日志服务程序,而我们这里系统日志是通过 syslog 来实现,提供日志管理服务。
  • logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件。我们可以根据日志文件的大小,也可以根据其天数来切割日志、管理日志,这个过程又叫做“转储”。

总结

本周通过系统性学习对Linux系统,对Linux的基本操作有了基本的理解,但操作、规范并不熟练,需要在实践中巩固。

参考资料

实验楼 Linux基础入门

posted @ 2020-10-11 13:05  20209326  阅读(199)  评论(0编辑  收藏  举报