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

一、Linux介绍

我们现在很常见Windows系统,对于Linux则显得尤为陌生。当然我也不例外,初识Linux过程中遇到一些困惑,但我也在实验的同时通过不断查找资料与实践中慢慢解决问题。那么下面我将从安装Ubuntu到实现一些基本实验案例谈一下我的感受。

一些Linux开发名词解释

硬件,内核,应用程序理解

我觉得这是首先要理解的关系。硬件属于最底层,我们通过设备驱动系统来进行内核与设备之间的访问,内核是一个操作系统的核心,它具有访问管理硬件设备,分配系统资源,响应中断程序等等功能。而用户使用应用程序时则是通过系统调用接口来对用户空间进行操作的。可以说是层层调用的关系。

Linux终端与控制台

通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal),下面是几个比较常见的终端模拟器: gnome-terminal,Konsole,xterm,rxvt,kvt,nxterm 和 eterm 。而在实验中使用的的终端程序是 xfce 桌面环境自带的 xfce-terminal 。这里我就出现了疑问:我们平时都是说打开控制台输入命令行执行指令,那么现在出现的虚拟终端是什么。查找了相关资料后总结出来我认为,以前终端是指通过电缆、网络等等串口连接上的不是指计算机本身存在的,而控制台是一台计算机上本有的,与计算机是一一对应的关系,信息都是通过控制台显示,但由于现在基本上都是独占计算机,因此区别变模糊了,现在基本上都是指可以输入命令行并显示程序运行过程中的信息以及程序运行结果的窗口。

shell与shell scipt

shell就是我们通常说的壳,简单理解就是我们输入的命令可以进行显示解析,是与我们进行交互的界面,是用户与内核进行交互操作的一种接口,过程则为它接收用户输入的命令,并把它送入内核去执行。同时shell还有控制脚本语言的功能。那么shell script和shell之间是什么关系呢?shell脚本是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。

环境变量

环境变量相当于给系统或用户应用程序设置的一些参数,,具体起什么作用这当然和具体的环境变量相关。例如在Windows操作系统下path的使用,设置path是告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,,系统除了在当前目录下面寻找此程序外,还应到哪些目录下去寻找。

Linux文件结构

对于其文件结构其实表现为目录和文件的组织形式。整体来说Linux 是以树形目录结构的形式来构建整个系统的,在控制台上输入tree /便可以直观了解(若出现错误则先进行安装即可),那么目录采用什么标准,如何显示、创建,删除目录等等,以及包含在目录下的各种文件怎么查看,编辑,创建,搜索,打包等等这些问题,我通过实验已经基本了解,下面举出部分例子进行说明。在这过程中其实遇到不少问题,比如对一些命令之间的关系表示不很理解(例如root和sudo的关系)以及初学对于命令的掌握记忆不很熟练导致还得翻书来查看命令等等。但实验本身就是熟练与理解的过程,不断实践总会有收获。

实验1:添加一个用户 loutest,使用 sudo 创建文件 /opt/forloutest,设置成用户 loutest 可以读写。


步骤为:先添加一个用户loutest,然后通过mkdir命令新建一个opt文件,进入opt文件后,通过touch命令新建一个forloutest文件,然后修改权限为读写。

实验2:1. 创建一个 homework 目录,建立名为 1.txt~10.txt 文件,并删除 1.txt~5.txt 。2. Linux 的日志文件在哪个目录?

实验3:找出 /etc/ 目录下的所有以 .list 结尾的文件。

用命令 $ locate /etc/.list 即可实现

实验4:练习whereis,locate,which,find进行搜索文件



主要特点:whereis简单快速,locate快而全,which小而精,find精而细

实验5:有一个非常重要的文件(sources.list)但是你忘了它在哪了,你依稀记得它在/etc/目录下,现在要你把这个文件找出来,然后设置成自己可以访问,但是其他用户并不能访问。


实验6(挑战部分):小明是一个服务器管理员,他需要每天备份论坛数据(这里我们用日志替代),备份当天的日志并删除之前的日志。而且备份之后文件名是年-月-日的格式。alternatives.log在/var/log/下面。


步骤:1、启动日志服务器 sudo service rsyslog start
2、启动crontab 服务 sudo cron -f &
3、进入 crontab 文件 crontab -e
4、编辑自动启动内容 0 3 * * * cp /var/log/alternatives.log /home/shiyanlou/tmp/'date+ %y-%m-%d'

实验7(挑战部分):在linux中,对于文本的处理和分析是极为重要的,现在有一个文件叫做data1,里面记录是一些命令的记录,现在需要你从里面找出出现频率次数前3的命令并保存在/home/shiyanlou/result。

实验8(挑战部分):在文件data中匹配数字开头的行,结果写入/home/shiyanlou/num文件并且在文件data中匹配出正确格式的邮箱,结果写入一个名为/home/shiyanlou/mail的文件。

进程

我们需要初步的了解进程在系统中存在的概念,以及进程的如何在系统中衍生,发展,以及进程之间存在的相互关系,为以后学习打下基础。
简单来说,程序是为了完成某种任务而设计的软件,比如 vim 是程序。什么是进程呢?进程就是运行中的程序。程序只是一些列指令的集合,是一个静止的实体,而进程不同,进程有以下的特性:
动态性:进程的实质是一次程序执行的过程,有创建、撤销等状态的变化。而程序是一个静态的实体。
并发性:进程可以做到在一个时间段内,有多个程序在运行中。程序只是静态的实体,所以不存在并发性。
独立性:进程可以独立分配资源,独立接受调度,独立地运行。
异步性:进程以不可预知的速度向前推进。
结构性:进程拥有代码段、数据段、PCB(进程控制块,进程存在的唯一标志)。也正是因为有结构性,进程才可以做到独立地运行。
引入进程是因为传统意义上的程序已经不足以描述 OS 中各种活动之间的动态性、并发性、独立性还有相互制约性。程序就像一个公司,只是一些证书,文件的堆积(静态实体)。而当公司运作起来就有各个部门的区分,财务部,技术部,销售部等等,就像各个进程,各个部门之间可以独立运做,也可以有交互(独立性、并发性)。

而随着程序的发展越做越大,又会继续细分,从而引入了线程的概念,当代多数操作系统、Linux 2.6及更新的版本中,进程本身不是基本运行单位,而是线程的容器。就像上述所说的,每个部门又会细分为各个工作小组(线程),而工作小组需要的资源需要向上级(进程)申请。简而言之,一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

有趣的实验学习

实验9:“banner”,“figlet”,“toilet”使用



Linux"figlet"命令:这个命令会用大写方式把我们输入的字符串显示在标题栏,显示效果由ASCII字符组成。由于它不是标准设置,所以要先安装这一功能。$sudo apt-get install figlet Linux "toilet"命令:我不知道这个命令的名字源自哪里。但是它确实个五颜六色的命令。与figlet一样,它会把文本显示称标题栏,但是效果更好。它比figlet命令的效果更有艺术感。

实验10:使用wget命令将图片从网页中下载下来


简单学习总结:
通过对linux相关内容的学习,基本了解了linux是一个怎样的操作系统以及相比Windows系统具有的优点及缺点。学习到的linux使用和操作技巧,例如对于linux命令,不可能全部记忆,学会使用man和info指令查看相关命令。学会了一些简单的linux编程,如gcc编译器编译c程序并在shell中运行等。
总之,代码是要不断实践的,了解了基本原理后要亲自动手操作才会有收获。

原文地址:https://www.cnblogs.com/yl-930/p/7617773.html