2022-2023-1 20222803《Linux内核原理与分析》第一周作业

实验一、Linux系统简介

什么是Linux

Linux就是操作系统,与平常使用的Windows以及Mac OS类似。
2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第1张图片
Linux主要是系统调用和内核那两层。当然,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器、浏览器、电子邮件等。

Linux发展历史

1969 年,Ken Thompson(C 语言之父)利用汇编语言开发了 File Server System(Unics,即 UNIX 的原型);
1973 年,Dennis Ritchie 和 Ken Thompson 发明了 C 语言,而后写出了 UNIX 的内核;
1984 年,因为 UNIX 规定“不能对学生提供源码”,Tanenbaum 老师自己编写兼容于 UNIX 的 Minix,用于教学;
1984 年,Stallman 开始 GNU(GNU’s Not Unix)项目,创办 FSF(Free Software Foundation)基金会;
1991 年 10 月,Linus Torvalds(Linux 之父)从 MINIX 开始入手,计划开发一个比 MINIX 性能更好的操作系统,即Linux。

C语言与Unix之父:Dennis RitchieKen Thompson
Linux之父:Linus Torvalds

Linux和Windows的区别

  1. 免费与收费
    最新正版 Windows 10,需要付费购买;
    Linux 免费或少许费用。
  2. 软件与支持
    Windows 平台:数量和质量的优势,不过大部分为收费软件;由微软官方提供重要支持和服务;
    Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;由全球所有的 Linux 开发者和自由软件社区提供支持。
  3. 安全性
    Windows 平台:三天两头打补丁安装系统安全更新,还是会中病毒木马;
    Linux 平台:要说 Linux 没有安全问题,那当然是不可能的,这一点仁者见仁智者见智,相对来说肯定比 Windows 平台要更加安全,使用 Linux 你也不用装某杀毒、某毒霸。
  4. 使用习惯
    Windows:普通用户基本都是纯图形界面下操作使用,依靠鼠标和键盘完成一切操作,用户上手容易,入门简单;
    Linux:兼具图形界面操作(需要使用带有桌面环境的发行版)和完全的命令行操作,可以只用键盘完成一切操作,新手入门较困难,需要一些学习和指导,一旦熟练之后效率极高。
  5. 可定制性
    Windows:这些年之前算是全封闭的,系统可定制性很差;
    Linux:你想怎么做就怎么做,Windows 能做到得它都能,Windows 做不到的,它也能。
  6. 应用范畴
    或许你之前不知道 Linux ,要知道,你之前在 Windows 使用百度、谷歌,上淘宝,聊 QQ 时,支撑这些软件和服务的,是后台成千上万的 Linux 服务器主机,它们时时刻刻都在忙碌地进行着数据处理和运算,可以说世界上大部分软件和服务都是运行在 Linux 之上的。
  7. Windows 没有的
    稳定的系统
    安全性和漏洞的快速修补
    多用户
    用户和用户组的规划
    相对较少的系统资源占用
    可定制裁剪,移植到嵌入式平台
    可选择的多种图形用户界面(如 GNOME,KDE)
  8. Linux 没有的
    特定的支持厂商
    足够的游戏娱乐支持度
    足够的专业软件支持度

如何学习Linux

Linux的学习之路大致如下
2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第2张图片

实验二、基本概念及操作

Linux桌面环境介绍

相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 UNIX/Linux 发行版上看到的图形界面实际都只是运行在 Linux 系统之上的一套软件,类似 Windows95 之前的 Windows 的图形界面实则也只是运行在 DOS 环境的一套软件。而 Linux 上的这套软件以前是 XFree86,现在则是 xorg(X.Org),而这套软件又是通过 X 窗口系统(X Window System,也常被称为 X11 或 X)实现的,X 本身只是工具包及架构协议,而 xorg 便是 X 架构规范的一个实现体,也就是说它是实现了 X 协议规范的一个提供图形界面服务的服务器,就像实现了 http 协议提供 web 服务的 Apache 。如果只有服务器也是不能实现一个完整的桌面环境的,当然还需要一个客户端,我们称为 X Client,像如下几个大家熟知也最流行的实现了客户端功能的桌面环境 KDE,GNOME,XFCE,LXDE 。其中就有你看到的,实验楼目前使用的 XFCE 桌面环境。

在 Linux 上你可以自己选择安装不同的桌面环境,甚至可以定制自己的专属桌面。

终端的概念

通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal),不过这里所说的终端(Terminal)和控制台(Console)是有区别的。

在 UNIX/Linux 中比较流行的常见的 Shell 有 bash、zsh、ksh、csh 等等,Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME)。

命令行操作体验

在 linux 中,最最重要的就是命令。

  1. 重要快捷键
按键 作用
Tab 命令补全
Ctrl+c 强行终止当前程序
Ctrl+d 键盘输入结束或退出终端
Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a 将光标移至输入行头,相当于Home键
Ctrl+e 将光标移至输入行末,相当于End键
Ctrl+k 删除从光标所在位置到行末
Alt+Backspace 向前删除一个单词
Shift+PgUp 将终端显示向上滚动
Shift+PgDn 将终端显示向下滚动
  1. 学会利用历史输入命令
    使用方向上键“↑”恢复之前输入的命令
  2. 学会使用通配符
Shell常用通配符
按键 作用
* 匹配 0 或多个字符
? 匹配任意一个字符
[list] 匹配 list 中的任意单一字符
[^list] 匹配 除 list 中的任意单一字符以外的字符
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9][a-z]
{string1,string2,…} 匹配 string1 或 string2 (或更多)其一字符串
{c1…c2} 匹配 c1-c2 中全部字符 如{1…10}

使用通配符可以一次创建多个文件,如图所示:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第3张图片

  1. 学会在命令行中获取帮助
    在 Linux 环境中,如果你遇到困难,可以使用man命令,它是Manual pages的缩写。Manual pages 是 UNIX 或类 UNIX 操作系统中在线软件文档的一种普遍的形式, 内容包括计算机程序(包括库和系统调用)、正式的标准和惯例,甚至是抽象的概念。用户可以通过执行man命令调用手册页。
    若尝试输入man man命令,终端中会出现如下界面
    2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第4张图片
    man 手册的内容很多,涉及了 Linux 使用过程中的方方面面。为了便于查找,man 手册被进行了分册(分区段)处理,在 Research UNIX、BSD、OS X 和 Linux 中,手册通常被分为 8 个区段,安排如下:
区段 说明
1 一般命令
2 系统调用
3 库函数,涵盖了 C 标准函数库
4 特殊文件(通常是/dev 中的设备)和驱动程序
5 文件格式和约定
6 游戏和屏保
7 杂项
8 系统管理命令和守护进程

通常 man 手册中的内容很多,你可能不太容易找到你想要的结果,不r过幸运的是你可以在 man 中使用搜索 /<你要搜索的关键字>,查找完毕后你可以使用n键切换到下一个关键字所在处,shift+n为上一个关键字所在处。使用Space(空格键)翻页,Enter(回车键)向下滚动一行,或者使用kj(vim 编辑器的移动键)进行向前向后滚动一行。按下h键为显示使用帮助(因为 man 使用less作为阅读器,实为less工具的帮助),按下q退出。

想要获得更详细的帮助,你还可以使用info命令,不过通常使用man就足够了。如果你知道某个命令的作用,只是想快速查看一些它的某个具体参数的作用,那么你可以使用--help参数,大部分命令都会带有这个参数。

作业

可以输出图形字符的命令banner
先使用sudo apt-get install sysvbanner命令安装banner

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第5张图片
然后输入banner shiyanlou,效果如图

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第6张图片

类似的命令还有toilet,其效果如图

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第7张图片

实验三、用户及文件权限管理

Linux 是一个可以实现多用户登录的操作系统,比如“李雷”和“韩梅梅”都可以同时登录同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制,不同用户不可以轻易地查看、修改彼此的文件。

在终端中输入who am i或者who mom likes以及who可以查看表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可),需要注意的是,在某些环境中 who am i 和 who mom likes 命令不会输出任何内容,这是因为当前使用的 Shell 不是登录式 Shell(login shell),没有用户与 who 的 stdin 相关联,因此不会输出任何内容。如图所示为虚拟机终端的命令输入结果:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第8张图片
who命令的其他常用参数:

参数 说明
-a 打印能打印的全部
-d 打印死掉的进程
-m am imom likes
-q 打印当前登录用户数及用户名
-u 打印当前登录用户登录信息
-r 打印运行等级

创建用户

在 Linux 系统里, root 账户拥有整个系统至高无上的权限,即root权限,比如新建和添加用户。

root 权限,系统权限的一种,与 SYSTEM 权限可以理解成一个概念,但高于 Administrator 权限,root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到 root 权限,这个操作等同于在 Windows 下就是将新建的非法帐户添加到 Administrators 用户组。更比如安卓操作系统中(基于 Linux 内核)获得 root 权限之后就意味着已经获得了手机的最高权限,这时候你可以对手机中的任何文件(包括系统文件)执行所有增、删、改、查的操作。

关于root权限,有三个命令,susu-以及sudosu 可以切换到用户 user,执行时需要输入目标用户的密码,sudo 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。su - 命令也是切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的。

在终端中输入sudo adduser lilei,即可新建一个叫lilei用户,设置lilei用户的用户密码,如图所示:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第9张图片
这个命令不但可以添加用户到系统,同时也会默认为新用户在 /home 目录下创建一个工作目录:


输入命令su -l lilei可以切换登录用户至lilei,输入exit命令或者使用快捷键Ctrl+d可以退出当前用户

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第10张图片

用户组

在 Linux中想要知道自己属于哪个用户组有两个方法。
方法一: 使用 groups 命令,如图所示:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第11张图片
方法二: 查看 /etc/group 文件
在终端输入cat /etc/group | sort,可以看到用户组信息:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第12张图片

将其他用户加入sudo用户组

默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第13张图片
使用 usermod命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。在终端中输入sudo usermod -G sudo lilei可以将lilei加入sudo用户组:


此时再切换为lilei用户便也可以使用sudo命令了,如图所示:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第14张图片

删除用户和用户组

删除用户十分简单,在终端中输入sudo deluser lilei --remove-home便可以删除用户lilei,如图所示:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第15张图片
使用 --remove-home参数在删除用户时候会一并将该用户的工作目录一并删除。如果不使用那么系统会自动在 /home 目录为该用户保留工作目录。删除用户组可以使用 groupdel 命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。

Linux文件权限

文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。

Unix/Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux 系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。

在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

在终端中输入ls -l使用较长格式列出文件,如图所示:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第16张图片
其中各项的意思如下图:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第17张图片
第一项文件类型和权限的具体意思如下图:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第18张图片
关于文件,Linux中一切皆文件

现在切换到lilei用户(删除后重新添加),在终端中输入如图所示命令,然后在 /home/lilei 中目录新建一个文件,命名为qwe,可见文件所有者是 lilei:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第19张图片
切换回sudo用户,输入如图所示命令将qwe文件的所有者更改为sudo用户:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第20张图片
修改文件权限有两种方法:

方法一:二进制数字表示

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第21张图片
每个文件有三组固定的权限,分别对应拥有者,所属用户组,其他用户,记住这个顺序是固定的。文件的读写执行对应字母 rwx,以二进制表示就是 111,用十进制表示就是 7。例如我们刚刚新建的文件 qwe的权限是 rw-rw-rw-,换成对应的十进制表示就是 666,这就表示这个文件的拥有者,所属用户组和其他用户具有读写权限,不具有执行权限。

如果我要将文件qwe的权限改为只有我自己可以用那么就可以用这个方法更改它的权限。如图所示,可以看到修改文件权限之后lilei已经无法读写qwe文件了:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第22张图片
方法二:加减赋值操作

要完成上述操作,也可以在终端中输入chmod go-rw qwe命令,其中go 还有u 分别表示 group(用户组)、others(其他用户) 和 user(用户),+- 分别表示增加和去掉相应的权限。

adduseruseradd 的区别

useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd 去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradduserdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。

作业

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

首先添加新用户loutest,将其加入sudo用户组,使用sudo touch /opt/forloutest命令创建文件,如图所示:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第23张图片
在终端中输入下图中命令,可以看到用户loutest对于forloutest文件只有读的权限:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第24张图片
切换回root用户,使用sudo chmod 666 /opt/forloutest命令便可以修改文件forloutest的权限,在下图中可以看到修改权限之后,用户loutest对文件forloutest有了读写权限:

2022-2023-1 20222803《Linux内核原理与分析》第一周作业_第25张图片

小结

虽然之前接触过Linux操作系统以及Ubuntu,但是第一次系统的学习Linux的相关知识还是很有收获,尤其是在用户、用户组和文件权限等方面,更是获益匪浅。在之后我会跟着老师以及实验楼中的课程更加深入的学习Linux的相关知识,需要多多努力。

你可能感兴趣的:(linux,unix)