20189220 余超《Linux内核原理与分析》第一周作业
实验一 Linux系统简介
通过实验一主要是学习到了Linux 的历史简介,linux与windows之间的区别,主要是免费和收费,软件和支持,安全性,使用习惯,可制定性,应用范畴等。linux具有稳定的系统,安全性和漏洞的快速修补,多用户,用户和用户组的规划,相对较少的系统资源占用,可定制裁剪,移植到嵌入式平台(如安卓设备),可选择的多种图形用户界面(如 GNOME,KDE)等优点。因为是第一次接触到Luinx的操作系统,直观感受就是luinx上许多功能的执行都需要通过输入命令来完成的。
实验二 基本概念及操作
- 物理机系统上可以通过使用[Ctrl]+[Alt]+[F1]~[F6]进行切换登陆,当切换到其中一个终端后想要切换回图形界面,可以按下[Ctrl]+[Alt]+[F7]来完成
- echo“ ”可以用来打印字符串
- tab键可以补全命令,补全目录,补全命令参数
- Ctrl+c键可以强行终止当前程序
- Ctrl+d 键盘输入结束或退出终端 Ctrl+s 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg Ctrl+a 将光标移至输入行头,相当于Home键 Ctrl+e 将光标移至输入行末,相当于End键 Ctrl+k 删除从光标所在位置到行末 Alt+Backspace 向前删除一个单词 Shift+PgUp 将终端显示向上滚动 Shift+PgDn 将终端显示向下滚动
使用键盘上的方向上键,恢复你之前输入过的命令 - 通配符是一种特殊语句,主要有星号(*)和问号(?),用来对对字符串进行模糊匹配(比如文件名,参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符
- touch 可用来创建文件,用touch No.{1..10}.txt 可创建10个连续命名的文件
- 使用man来查看手册,--help来查看帮助
- 还学习到了输出图形字符的命令,首先进行命令包的安装:
$ sudo apt-get update sudo apt-get install sysvbanner
$ sudo apt-get update sudo apt-get install toilet
$ sudo apt-get update sudo apt-get install figlet
然后可以看到下面的图形:
实验三 用户文件权限管理
- 本次实验主要学习了linux中创建、删除用户,及用户组等操作,以及Linux 中的文件权限设置。
- 实验步骤如下:
- 新建一个叫 lilei 的用户:
- 登录用户:
3.默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:
4.文件权限:每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)对应一个 " rwx ",也就是一个 “ 7 ”
加减赋值操作:g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限:
5.作业:
- 添加loutest用户
- 使用 sudo 创建文件 /opt/forloutest,设置成用户 loutest 可以读写
实验四 Linux目录结构和文件基本操作
- 本次实验主要学习了以下操作命令:
cd 进入目录
cd ~ 到用户目录
cd .. 到上一级目录
cd /xxx/xxx/xxx 绝对路径,输入的必须是最精确的路径
cd ../../../xxx/xxx/xxx 相对路径,从当前位置开始向上一级然后再进入其他文件夹
cd xxx/xxx/xxx/ 相对路径,从当前位置开始直接走向下一级的文件夹
用cd时多用TAB按键来补全
pwd 查看当前的路径位置
ls 查看当前文件夹下所有文件和文件夹
ll 查看当前文件夹下所有文件和文件夹(更详细)
touch 新建一个文件
mkdir 新建一个文件夹
mkdir -p 新建一个路径(文件夹套文件夹)
rm 删除(文件)
rm -r 删除目录路径
rm -f 强制删除
cp [文件] [路径] 复制文件到某个路径中
cp -r [文件夹] [路径] 将整个文件夹(路径)复制到这个目标路径中
mv [文件] [路径] 剪切文件到某个路径中
mv [旧文件] [新文件名] 重命名文件/文件夹
cat 打开文件,查看文件内容(直接打开看)
more 打开文件,但看得更舒服
head 只看文件的前几行
tail 只看该文件里的最后几行【实时监控】
file 查看文件类型
- 作业
1.创建一个 homework 目录,建立名为 1.txt~10.txt 文件,并删除 1.txt~5.txt
2.Linux 的日志文件放在var/log的目录下
实验五 环境变量与文件查找
- 这次实验学习了环境变量的作用与用法,及几种搜索文件的方法
1.declare 命令创建一个变量名为 tmp 的变量,使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou:读取变量的值,使用 echo 命令和 $ 符号($ 符号用于表示引用一个变量的值,初学者经常忘记输入):
2.环境变量的作用域比自定义变量的要大,如 Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,除了创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。set,env,export。这三个命令很相似,都是用于打印环境变量信息
3.文件搜索:
whereis 简单快速
你会看到它找到了三个路径,两个可执行文件路径和一个 man 在线帮助文件所在路径,这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。locate 快而全
通过“ /var/lib/mlocate/mlocate.db ”数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型,如查找 /etc 下所有以 sh 开头的文件。
注意:它不只是在 /etc 目录下查找,还会自动递归子目录进行查找。which 小而精
which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的软件,因为它只从 PATH 环境变量指定的路径中去搜索命令。find 精而细
find 应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索
-mtime n:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件
-mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过的文件
-mtime -n:列出在 n 天之内(包含 n 天本身)被修改过的文件
-newer file:file 为一个已存在的文件,列出比 file 还要新的文件名作业
找出 /etc/ 目录下的所有以 .list 结尾的文件:
实验六 文件打包与解压缩
- zip的压缩和打包:
上面命令将目录 /home/shiyanlou/Desktop 打包成一个文件,并查看了打包后文件的大小和类型。第一行命令中,-r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小。 - 使用unzip命令解压缩zip文件
unzip -q shiyanlou.zip -d ziptest
使用安静模式-q,将文件解压到指定目录-d 若文件夹不存在则在当前目录下自动创建该文件夹
$ unzip -l shiyanlou.zip
如果你不想解压只想查看压缩包的内容 :使用 -l 参数
- 创建一个 tar 包:
上面命令中,-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后,比如不能写成 tar -fc shiyanlou.tar,可以写成 tar -f shiyanlou.tar -c ~。你还可以加上 -v 参数以可视的的方式输出打包的文件。上面会自动去掉表示绝对路径的 /,你也可以使用 -P 保留绝对路径符。 - 说了这么多,其实平常使用的参数并没有那么复杂,只需要记住常用的组合就可以了。 常用命令:
zip:
打包 :zip something.zip something (目录请加 -r 参数)
解包:unzip something.zip
指定路径:-d 参数
tar:
打包:tar -cf something.tar something
解包:tar -xf something.tar
指定路径:-C 参数
实验七 文件系统操作与磁盘管理
df :查看磁盘的容量
df -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
du:查看目录的容量
du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
du -a #同--all 显示目录中所有文件的大小。
du -s #同--summarize 仅显示总计,只列出最后加总的值。
dd命令用于转换和复制文件,不过它的复制不同于cp
dd if=/dev/stdin of=/dev/stdout bs=10 count=1
if =输入内容(从键盘输入内容stdin)
of=输出 形成和存入哪个文件里
bs=单位大小 默认byte,可以为K,M,G
count=几个单位
使用 mkfs 命令格式化磁盘(我们这里是自己创建的虚拟磁盘镜像)
作业:找出当前目录下面占用最大的前十个文件
du : 计算出单个文件或者文件夹的磁盘空间占用.
sort : 对文件行或者标准输出行记录排序后输出.
head : 输出文件内容的前面部分.
du:
-a:显示目录占用空间的大小,还要显示其下目录占用空间的大小
sort:
-n : 按照字符串表示的数字值来排序
-r :按照反序排列
head :
-n : 取出前多少行
实验八 Linux下的帮助命令
内建命令实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。
外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。
简单来说就是:一个是天生自带的天赋技能,一个是后天得来的附加技能。我们可以使用 type 命令来区分命令是内建的还是外部的。例如这两个得出的结果是不同的
得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的.def中
xxx is a shell builtin
得到这样的结果说明是外部命令,正如上文所说,外部命令在/usr/bin or /usr/sbin等等中
xxx is /usr/bin/xxx
若是得到alias的结果,说明该指令为命令别名所设定的名称;
xxx is an alias for xx --xxx
实验九 Linux任务计划crontab
- 启动日志
$sudo apt-get install -y rsyslog
$sudo service rsyslog start
启动crontab
$sudo cron -f &
创建任务计划
$crontab -e
查看已创建任务计划
$crontab -l
启动
$ps aux | grep cron
or
$pgrep cron
删除
$crontab -r
实验十 命令执行顺序控制与管道
1.有选择的执行命令:命令&&用来实现选择性执行,它表示如果前面命令的执行结果为0则执行后面的,否则不执行。
命令||用来实现选择性执行,它表示如果前面命令的执行结果不为0则执行后面的,否则不执行。
命令|通过管道将上一个命令的输出作为下个命令的输入
cut
cut /etc/passwd -d ':' -f 1,6
打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段分别表示用户名和其家目录
cut /etc/passwd -c 2-5
打印/etc/passwd文件中每一行的第2-5个字符,包含第5个
cut /etc/passwd -c -5
打印/etc/passwd文件中每一行的前5个字符,包含第5个
cut /etc/passwd -c 5-
打印/etc/passwd文件中每一行的第5个字符以后的内容,包含第5个
grep
在文本中或 stdin 中查找匹配字符串
grep -rnI "shiyanlou" ~
我们搜索/home/shiyanlou目录下所有包含"shiyanlou"的文本文件,并显示出现在文本中的行号
-r 参数表示递归搜索子目录中的文件,-n表示打印匹配项行号,-I表示忽略二进制文件
export | grep ".*yanlou$"
查找环境变量中乙yan lou结尾的字符串
$就表示一行的末尾、
w
wc 命令用于统计并输出一个文件中行、单词和字节的数目
wc -l /etc/passwd
统计行数
-w 统计单词数
-c 统计字节数
-m 统计字符数
-L 最长行字节数
ls -dl /etc/
统计 /etc 下面所有目录数
sort
cat /etc/passwd | sort
默认按字典排序
cat /etc/passwd | sort -r
反转排序
cat /etc/passwd | sort -t ":" -k 3
按特定字段排序 -t参数用于指定字段的分隔符,这里是以":"作为分隔符;-k 字段号用于指定对哪一个字段进行排序
这里/etc/passwd文件的第三个字段为数字,默认情况下是以字典序排序的,如果要按照数字排序就要加上-n参数
uniq
用于过滤或者输出重复行
history | cur -c 8- | cut -d " " -f 1 | uniq
history命令查看最近执行过的命令
uniq命令只能去连续重复的行,不是全文去重,所以要达到预期效果,我们先排序
history | cut -c 8- | cut -d " " -f 1 | sort | uniq
history | cut -c 8- | cut -d " " -f 1 | sort | uniq -dc
输出重复过的行(重复的只输出一个)及重复次数
history | cut -c 8- | cut -d " " -f 1 | sort | uniq -D
输出所有重复的行
实验十一 简单的文本处理
tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。
常见的方式为:tr [option]...SET1 [SET2]
-d:删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配
-s:去除set1指定的在输入文本中连续并重复的字符
col 命令可以将Tab换成对等数量的空格键,或反转这个操作:col [option]
join 这个命令就是用于将两个文件中包含相同内容的那一行合并在一起:join [option]... file1 file2
实验十二 数据流重定向
1.重定向简单来说就是将标准输出导向一个文件或追加到一个文件中
2.使用tee命令同时重定向到多个文件:
除了将需要将输出重定向到文件之外也需要将信息打印在终端
$ echo 'hello shiyanlou' | tee hello
实验十四 lunix下软件安装
主要学习了 Ubuntu 下软件安装的几种方式,及 apt,dpkg 工具的使用。
1.通常 Linux 上的软件安装主要有四种方式:
- 在线安装
- 从磁盘安装deb软件包
- 从二进制软件包安装
- 从源代码编译安装
2.apt-get 是用于处理 apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等,其基本的格式为:apt-get install <软件包名>即可。
更新软件源
sudo apt-get update升级没有依赖问题的软件包
sudo apt-get upgrade升级并解决依赖关系
sudo apt-get dist-upgrade软件的卸载
sudo apt-get remove w3m
- dpkg 是Debian软件包管理器的基础,dpkg本身是一个底层的工具。上层的工具,像是 APT,被用于从远程获取软件包以及处理复杂的软件包关系。"dpkg"是"Debian Package"的简写。
dpkg是常用于从本地磁盘安装deb格式软件的命令,搭配参数使用,例如sudo dpkg -i softname.deb(安装指定的deb软件包,如果是-I那就是查看软件包的信息)。
实验十五,十六 ,十七 进程概念和管理,lunix日志系统
程序(procedure):不太精确地说,程序就是执行一系列有逻辑、有顺序结构的指令,帮我们达成某个结果。
进程(process):进程是程序在一个数据集合上的一次执行过程,在早期的UNIX、Linux 2.4及更早的版本中,它是系统进行资源分配和调度的独立基本单位。
- 进程有以下的特性:动态性:进程的实质是一次程序执行的过程,有创建、撤销等状态的变化。而程序是一个静态的实体。
并发性:进程可以做到在一个时间段内,有多个程序在运行中。程序只是静态的实体,所以不存在并发性。
独立性:进程可以独立分配资源,独立接受调度,独立地运行。
异步性:进程以不可预知的速度向前推进。
结构性:进程拥有代码段、数据段、PCB(进程控制块,进程存在的唯一标志)。也正是因为有结构性,进程才可以做到独立地运行。
- 进程有以下的特性:动态性:进程的实质是一次程序执行的过程,有创建、撤销等状态的变化。而程序是一个静态的实体。
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。因为线程中几乎不包含系统资源,所以执行更快、更有效率。
进程分类:以进程的功能与服务的对象分为用户进程与系统进程;以应用程序的服务类型分为交互进程、批处理进程、守护进程。
通过 top 实时的查看进程的状态:
由上面的就可以在知道当前系统的工作时间为下午4点23分,该机器已经启动了19天,当前系统中只有一个用户,load average后面的数值表示1、5、15分钟内cpu的平均负载。
通过ps实时的查看进程的状态:
通过 pstree 可以很直接的看到相同的进程数量,最主要的还是我们可以看到所有进程之间的相关性。
首先通过前面的课程了解到常见的日志一般存放在 /var/log 中
根据服务对象粗略的将日志分为两类:系统日志和应用日志。系统日志主要是存放系统内置程序或系统内核之类的日志信息如 alternatives.log 、btmp 等等,应用日志主要是我们装的第三方应用所产生的日志如 tomcat7 、apache2 等等。
- 配置日志
在做其中一个趣味实验的时候要安装安装aview和imagemagick,但我一个一个安装时会出现下面的情况:安装和更新失败的情况
然后我选择了一次性更新和安装:安装成功了
之后要下载网站上的图片,用 man 命令查看了如何从网站上下载图片的命令:
-使用asciiview命令显示图片
这种实验非常有趣而且还可以激发我们积极主动去学习的能力
总结
- 这是我第一次接触到linux内核的知识,这些天一直跟着实验楼里面的实验一个一个的做,学习了一些linux的基本概念和基本的操作,以及一些对文件的操作命令。但在mount挂载磁盘到目录树、 fdisk 为磁盘分区、正则表达式等方面的知识理解上对我来说有一些困难,还是需要多多练习。
- 我觉得写博客最重要的一个方面就是,如果自己在今后的学习过程中忘掉了或者不记得这方面的知识了,方便我们自己查阅和参考,能够快速拾起来遗忘的部分。
- 通过看了老师给的那个makdown的教程,自己写出了第一篇博客,也学习到了makdown的一些编辑方法,我相信通过后面不断的写博客,我的会写得越来越好,越来越有条理和逻辑。
- 这门课我感觉很有挑战性,下周继续努力跟着娄老师的步伐,努力学习。
20189220 余超《Linux内核原理与分析》第一周作业的更多相关文章
- Linux内核原理与分析-第一周作业
本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...
- 2019-2020-1 20199314 <Linux内核原理与分析>第一周作业
前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和 ...
- 2019-2020-1 20199303<Linux内核原理与分析>第二周作业
2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...
- 20169219 linux内核原理与分析第二周作业
"linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...
- 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业
1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...
- Linux内核原理与分析-第二周作业
写之前回看了一遍秒速五厘米:如果
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业
这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ...
- 20169212《Linux内核原理与分析》课程总结
20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的 ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
随机推荐
- Java8新特性:接口
Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化. 以上是百度百科中对接口的定义,这个定义已经不准确. Java8对接口做了 ...
- JavaWeb 之 Listener:监听器
一.概述 1.事件监听机制 事件: 一件事情 事件源: 事件发生的地方 监听器: 一个对象 注册监听: 将事件.事件源.监听器绑定在一起. 2.监听器概念 当事件源上发生某个 ...
- 基于 Express + MySQL + Redis 搭建多用户博客系统
1. 项目地址 https://github.com/caochangkui/node-express-koa2-project/tree/master/blog-express 2. 项目实现 Ex ...
- Koa2 和 Express 中间件对比
koa2 中间件 koa2的中间件是通过 async await 实现的,中间件执行顺序是"洋葱圈"模型. 中间件之间通过next函数联系,当一个中间件调用 next() 后,会将 ...
- MySQL高可用架构应该考虑什么? 你认为应该如何设计?
一.MySQL高可用架构应该考虑什么? 对业务的了解,需要考虑业务对数据库一致性要求的敏感程度,切换过程中是否有事务会丢失 对于基础设施的了解,需要了解基础设施的高可用的架构.例如 单网线,单电源等情 ...
- yum升级curl支持http2测试
首先,先为你的服务器获取最新匹配的源:http://mirror.city-fan.org/ftp/contrib/yum-repo/ 方法1,rpm方式安装city-fan.org的yum源 # 安 ...
- ARTS-week4
Algorithm 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的.示例:输入:1->2->4, 1->3->4输出:1->1 ...
- Beta:凡事预则立
课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺) 团队名称:葫芦娃队 作业目标:尽力完成 团队博客 队员学号 队员昵称 博客地址 041602421 der himmel ht ...
- B/S大附件上传,支持断点续传
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- learning java 处理流的用法
有点重定向使用的味道 import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.Pri ...