Linux操作系统学习之旅

实验一 部署虚拟环境并安装Linux系统
1.1实验目的
了解Linux系统物理安装与虚拟机安装的区别,选择安装虚拟机软件,并在虚拟机软件中安装RHEL7或CentOS7或Ubuntu16或18。
1.2实验要求

  1. 熟悉安装Linux的安装方式
  2. 安装配置虚拟机软件(根据自己的情况选择虚拟机软件vmware或virtualbox)
  3. 在虚拟机中安装RHEL(或CentOS)
  4. 重置root密码
  5. 了解RPM软件包管理器的使用
    1.3实验过程
    下载Vmware workstation虚拟机,我安装的操作系统是Ubuntu16.04,将选择“安装程序光盘映像文件”,并通过“浏览”按钮找到要安装 Linux 系统的 iso 。安装好后设置信息:

因为我下载的是Ubuntu。它的软件包管理器是apt,使用命令sudo apt-get update,更新软件包。

如果要下载一个软件,用到命令install,如下载vim编辑器:sudo apt-get install vim
实验二
实验2.1 Linux系统 基本概念与操作
一、实验目的
本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识。
实验楼环境介绍
常用 Shell 命令及快捷键
Linux 使用小技巧
二、实验内容
Linux:兼具图形界面操作(需要使用带有桌面环境的发行版)和完全的命令行操作,可以只用键盘完成一切操作,新手入门较困难,需要一些学习和指导(这正是我们要做的事情),一旦熟练之后效率极高。
三、实验过程
Tab键来进行命令补全
Ctrl+c键来强行终止当前程序
进入desktop创建文件

实验2.2用户文件权限 ,目录与文件操作
一、 实验目的
不同用户的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制,不同用户不可以轻易地查看、修改彼此的文件。这就是用户管理
Linux 的文件组织目录结构。
相对路径和绝对路径。
对文件的移动、复制、重命名、编辑等操作。

二、实验内容
Linux 中创建、删除用户,及用户组等操作。
Linux 中的文件权限设置。
每个目录的大体内容
文件的属性
touch,file,rm,mv 等基本命令

二、 实验过程
查看用户:who am i
创建用户lilei:$ sudo adduser lilei
登录到用户lilei:$ su -l lilei
查看所属用户组$ groups shiyanlou
默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:

注意 Linux 上输入密码是不会显示的

$ su -l lilei
$ sudo ls
删除用户; $ sudo deluser lilei --remove-home
查看文件:$ls
进入上一级文件:cd …
查看当前路径:pwd
创建文件:touch file
移动文件: $ cp test father/son/grandson
删除文件:rm test
删除目录文件: rm -r test
移动文件:mov test
使用 cat,tac 和 nl 命令查看文件

实验2.3环境变量,打包解压
一、 实验目的
本节实验介绍环境变量的作用与用法,及几种搜索文件的方法。学会这些技巧可以高效地使用 Linux
2、介绍 Linux 上常用的压缩/解压工具,主要讲解 zip,tar 的使用。
二、 实验内容
1、环境变量的设置
环境变量的修改
2、zip 命令
tar 命令
压缩与解压常用组合
三、 实验过程
1、使用 declare 命令创建一个变量名为 tmp 的变量:
$ declare tmp
这里介绍两个重要文件 /etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量。这个 .profile 只对当前用户永久生效。因为它保存在当前用户的 Home 目录下,当切换用户时,工作目录可能一并被切换到对应的目录中,这个文件就无法生效。而写在 /etc/profile 里面的是对所有用户永久生效,所以如果想要添加一个永久生效的环境变量,只需要打开 /etc/profile
查看 PATH 环境变量的内容:
$ echo $PATH
可以使用 unset 命令删除一个环境变量:
$ unset mypath
source 命令让环境变量立即生效
与搜索相关的命令常用的有 whereis,which,find 和 locate。
2、常用打包命令
zip:
打包 :zip something.zip something (目录请加 -r 参数)
解包:unzip something.zip
指定路径:-d 参数
tar:
打包:tar -cf something.tar something
解包:tar -xf something.tar
指定路径:-C 参数
实验2.4磁盘管理,帮助命令
一、 实验目的
1、磁盘相关命令
2、帮助命令我们时常使用 Linux 的命令,一些常用的命令即使不背我们也能记住,而一些较长的命令或是一些不常用的参数甚至是不常用的命令需要用时怎么也想不出来。本课程将带你好好利用 Linux 系统自带的帮助工具与文档。
本节我们讲解了内建与外部命令的差别,以及相关的帮助命令的使用。
二、实验内容
内建命令与外部命令之分
help , man , info 命令的使用以及区别
三、实验过程
1、dd的命令行语句与其他的 Linux 程序不同,因为它的命令行选项格式为选项=值,而不是更标准的–选项 值或-选项=值。dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。
我们先来试试用dd命令从标准输入读入用户的输入到标准输出或者一个文件中:

输出到文件

$ dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1

输出到标准输出

$ dd if=/dev/stdin of=/dev/stdout bs=10 count=1
使用 mount 命令挂载磁盘到目录树
使用sudo mount来查看下主机已经挂载的文件系统:
Sudo umount 命令卸载已挂载磁盘
2、
type 命令来区分命令是内建的还是外部
查看某一条指令的帮助:如ls –help;man ls;info ls(此需要安装)
实验2.5 Crontab,命令执行顺序控制管道
一、 实验目的
1、 定制周期任务
2、 顺序执行、选择执行、管道、cut 命令、grep 命令、wc 命令、sort 命令等,高效率使用 Linux 的技巧。
二、实验内容
1、crontab 语法
2、cut,grep,wc,sort命令的使用,管道的理解
三、实验过程
1、crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。
crontab 在本实验环境中需要做一些特殊的准备,首先我们会启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了:
sudo apt-get install -y rsyslog
sudo service rsyslog start
在本实验环境中 crontab 也是不被默认启动的,同时不能在后台由 upstart 来管理,所以需要我们来启动它:
sudo cron -f &
添加一个计划任务
crontab -e
该任务是每分钟我们会在/home/shiyanlou 目录下创建一个以当前的年月日时分秒为名字的空白文件
*/1 * * * * touch /home/shiyanlou/ ( d a t e + % Y % m % d % H % M % S ) 添加成功后我们会得到最后一排 i n s t a l l i n g n e w c r o n t a b 的一个提示当然我们也可以通过这样的一个指令来查看我们添加了哪些任务 c r o n t a b − l 我们通过这样一个命令可以查看到执行任务命令之后在日志中的信息反馈 s u d o t a i l − f / v a r / l o g / s y s l o g 删除任务 c r o n t a b − r 每个用户使用 c r o n t a b − e 添加计划任务,都会在 / v a r / s p o o l / c r o n / c r o n t a b s 中添加一个该用户自己的任务文档,这样目的是为了隔离。如果是系统级别的定时任务,只需要以 s u d o 权限编辑 / e t c / c r o n t a b 文件就可以。 2 、多条指令的执行,简单的顺序执行你可以使用 ; 来完成,比如上述操作你可以: (date +\%Y\%m\%d\%H\%M\%S) 添加成功后我们会得到最后一排 installing new crontab 的一个提示 当然我们也可以通过这样的一个指令来查看我们添加了哪些任务 crontab -l 我们通过这样一个命令可以查看到执行任务命令之后在日志中的信息反馈 sudo tail -f /var/log/syslog 删除任务 crontab -r 每个用户使用 crontab -e 添加计划任务,都会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样目的是为了隔离。如果是系统级别的定时任务,只需要以 sudo 权限编辑 /etc/crontab 文件就可以。 2、多条指令的执行,简单的顺序执行你可以使用;来完成,比如上述操作你可以: (date+%Y%m%d%H%M%S)添加成功后我们会得到最后一排installingnewcrontab的一个提示当然我们也可以通过这样的一个指令来查看我们添加了哪些任务crontabl我们通过这样一个命令可以查看到执行任务命令之后在日志中的信息反馈sudotailf/var/log/syslog删除任务crontabr每个用户使用crontabe添加计划任务,都会在/var/spool/cron/crontabs中添加一个该用户自己的任务文档,这样目的是为了隔离。如果是系统级别的定时任务,只需要以sudo权限编辑/etc/crontab文件就可以。2、多条指令的执行,简单的顺序执行你可以使用;来完成,比如上述操作你可以: sudo apt-get update;sudo apt-get install some-tool;some-tool # 让它自己运行
&&就是用来实现选择性执行的,它表示如果前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回 0 则执行后面的,否则不执行,你可以从$?环境变量获取上一次命令的返回结果:

||在这里就是与&&相反的控制效果,当上一条命令执行结果为 ≠0($?≠0)时则执行它后面的命令:
管道是一种通信机制,通常用于进程间的通信(也可通过 socket 进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
管道又分为匿名管道和具名管道

cut命令,用于打印某一行的某些字符。
打印/etc/passwd文件中以:为分隔符的第 1 个字段和第 6 个字段分别表示用户名和其家目录:
$ cut /etc/passwd -d ‘:’ -f 1,6
打印/etc/passwd文件中每一行的前 N 个字符:

前五个(包含第五个) $ cut /etc/passwd -c -5

前五个之后的(包含第五个) $ cut /etc/passwd -c 5-

第五个 $ cut /etc/passwd -c 5

2到5之间的(包含第五个) $ cut /etc/passwd -c 2-5

grep命令,在文件中或者stdin中查找匹配字符串。
wc 命令用于统计并输出一个文件中行、单词和字节的数目。
sort排序命令,将输入按照一定方式排序,然后再输出,它支持的排序有按字典排序,数字排序,按月份排序,随机排序,反转排序,指定特定字段进行排序等等
具体命令如下:

uniq命令可以用于过滤或者输出重复行。
实验2.6 简单文本处理,数据重定向
一、 实验目的
1、 这一节我们将介绍这几个命令tr(注意不是 tar),col,join,paste。实际这一节是上一节关于能实现管道操作的命令的延续,所以我们依然将结合管道来熟悉这些命令的使用。
2、 数据重定向,将原本输出到标准输出的数据重定向到一个文件中,如> 和>>,因为标准输出(/dev/stdout)本身也是一个文件
二、实验内容
1、常见文本处理命令
如何简单处理文本
2、数据重定向
三、实验过程
1、tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。
选项 说明
-d 删除和 set1 匹配的字符,注意不是全词匹配也不是按字符顺序匹配
-s 去除 set1 指定的在输入文本中连续并重复的字符
将输入文本,全部转换为大写或小写输出 $ echo ‘input some text here’ | tr ‘[:lower:]’ ‘[:upper:]’ # 上面的’[:lower:]’ ‘[:upper:]‘也可以简单的写作’[a-z]’ ‘[A-Z]’,当
col 命令可以将Tab换成对等数量的空格键,或反转这个操作。然反过来将大
col -x: 将空格命令转换为tab命令

col -h:将tab命令转换为空格命令
join命令:这个命令就是用于将两个文件中包含相同内容的那一行合并在一起。
paste命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。
-d 指定分隔符
-s 每个文件分别起行

使用cat -A 文本 可以看到文本中包含的不可见特殊字符
2、
<和<<操作也是没有问题的,它们的区别在于重定向的方向不一致而已,>表示是从左到右,<右到左。
Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)。
标准输出和标准错误都被指向伪终端的屏幕显示,那有的时候我们就是要隐藏某些错误或者警告,那又该怎么做呢。这就需要用到我们前面讲的文件描述符了:cat Documents/test.c hello.c &>somefilell,你应该在输出重定向文件描述符前加上&,
tee命令除了需要将输出重定向到文件,也需要将信息打印在终端。

exec命令实现“永久”重定向。exec命令的作用是使用指定的命令替换当前的 Shell,即使用一个进程替换当前进程,或者指定新的重定向:

先开启一个子 Shell $ zsh

使用exec替换当前进程的重定向,将标准输出重定向到一个文件 $ exec 1>somefile

后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向$ ls $ exit $ cat somefile

开启一个重定向,并且在查看是否重定向到文件成功。

如上面我们打开的 3 号文件描述符,可以使用如下操作将它关闭:
$ exec 3>&-
/dev/null 一个黑洞文件。输入到它的文件都会消失
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null
实验2.7 正则表达式,软件安装
一、 实验目的
1、 正则表达式。但实际这一节实验只是介绍grep,sed,awk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包含正则表达式
2、 介绍 Ubuntu 下软件安装的几种方式,及 apt,dpkg 工具的使用。
二、实验内容
1、掌握基本命令:sed ,grep ,awk的用法
掌握正则表达式符号和语法
2、通常 Linux 上的软件安装主要有四种方式:
在线安装
从磁盘安装 deb 软件包
从二进制软件包安装
从源代码编译安装
三、实验过程
字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。序列“\”匹配“\”而“(”则匹配“(”。
^ 匹配输入字符串的开始位置。
$ 匹配输入字符串的结束位置。
{n} n 是一个非负整数。匹配确定的 n 次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个 o。
{n,} n 是一个非负整数。至少匹配 n 次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有 o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m} m 和 n 均为非负整数,其中 n<=m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}”将匹配“fooooood”中的前三个 o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

  • 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”、“zo”以及“zoo”。*等价于{0,}。
  • 匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
    ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
    ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
    . 匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。
    (pattern) 匹配 pattern 并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符,请使用“(”或“)”。
    x | y 匹配 x 或 y。例如,“z | food”能匹配“z”或“food”。“(z | f)ood”则匹配“zood”或“food”。
    [xyz] 字符集合(character class)。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。其中特殊字符仅有反斜线\保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果出现在首位则仅作为普通字符。
    [^xyz] 排除型(negate)字符集合。匹配未列出的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
    [a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
    [^a-z] 排除型的字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
    perl正则表达式函数库
    grep命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。
    sed工具在 man 手册里面的全名为"sed - stream editor for filtering and transforming text ",意即,用于过滤和转换文本的流编辑器。
    AWK是一种优良的文本处理工具,Linux 及 Unix 环境中现有的功能最强大的数据处理引擎之一

2、APT 是 Advance Packaging Tool(高级包装工具)的缩写,是 Debian 及其派生发行版的软件包管理器,APT 可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了 Unix 系统上管理软件的过程
安装,需要执行apt-get install <软件包名>
重新安装,apt-get –reinstall <软件包>

更新软件源 $ sudo apt-get update

升级没有依赖问题的软件包 $ sudo apt-get upgrade

升级并解决依赖关系 $ sudo apt-get dist-upgrade

删除,apt-get remove <软件包>
搜索软件包sudo apt-cache search softname1
使用 dpkg 从本地磁盘安装 deb 软件包
二进制包的安装比较简单,我们需要做的只是将从网络上下载的二进制包解压后放到合适的目录,然后将包含可执行的主程序文件的目录添加进PATH环境变量即可,如果你不知道该放到什么位置,请重新复习第四节关于 Linux 目录结构的内容
实验2.8 进程管理,进程概念
一、实验目的
1、Linux 中也难免遇到某个程序无响应的情况,可以通过一些命令来帮助我们让系统能够更流畅的运行。 而在此之前,我们需要对进程的基础知识有一定的了解,才能更好、更有效率的使用 Linux 提供的工具。
2、通过本实验我们将掌握一些 Linux 所提供的工具来进行进程的查看与控制,掌握这些工具让我们能在某些进程出现异常的时候及时查看相关的指标,从而解决问题。
二、实验内容
1、进程与程序
进程的衍生
工作管理
2、查看进程的运行状态
进程的结束控制
进程的执行顺序
三、实验过程
每一个进程都会是一个进程组的成员,而且这个进程组是唯一存在的,他们是依靠 PGID(process group ID)来区别的,而每当一个进程被创建的时候,它便会成为其父进程所在组中的一员。一般情况,进程组的 PGID 等同于进程组的第一个成员的 PID,并且这样的进程称为该进程组的领导者,也就是领导进程,进程一般通过使用 getpgrp() 系统调用来寻找其所在组的 PGID,领导进程可以先终结,此时进程组依然存在,并持有相同的 PGID,直到进程组中最后一个进程终结。每当一个进程被创建的时候,它便会成为其父进程所在 Session 中的一员,每一个进程组都会在一个 Session 中,并且这个 Session 是唯一存在的,Session 主要是针对一个 tty 建立,Session 中的每个进程都称为一个工作(job)。Session 意义在于将多个 jobs 囊括在一个终端,并取其中的一个 job 作为前台,来直接接收该终端的输入输出以及终端信号。 其他 jobs 在后台运行。让进程在后台工作
ls &

我们还可以通过 ctrl + z 使我们的当前工作停止并丢到后台中去

被停止并放置在后台的工作我们可以使用这个命令来查看jobs
2、我们可以通过 top 实时的查看进程的状态,以及系统的一些信息(如 CPU、内存信息等),我们还可以通过 ps 来静态查看当前的进程信息,同时我们还可以使用 pstree 来查看当前活跃进程的树形结构。
top命令

ps命令

使用 -l 参数可以显示自己这次登录的 bash 相关的进程信息罗列出来

此外我们还可以查看时,将连同部分的进程呈树状显示出来

来自定义我们所需要的参数显示

通过 pstree 可以很直接的看到相同的进程数量,最主要的还是我们可以看到所有进程之间的相关性。
使用9这个信号强制结束 gedit 进程 kill -9 1608
进程调度的队列排列靠该进程的优先级值来判定进程调度的优先级,而优先级的值就是上文所提到的 PR 与 nice 来控制与体现。
renice 来修改已经存在的进程的优先级
实验2.9 日志系统,安装git服务器
一、实验目的
1、收集你想要的数据,分析出有价值的信息,可以提高系统、产品的安全性,还可以帮助开发完善代码,优化产品.
2、Linux系统安装git服务器。
二、实验内容
1、常见的日志
配置的日志
轮替的日志
2、Git 是一个开源的分布式版本控制软件。了解常见的代码托管软件,了解 Git 的一些常用的操作,安装配置 Git 服务器,提交自己写的代码。
三、实验过程
1、日志一般存放在 /var/log
系统日志主要是存放系统内置程序或系统内核之类的日志信息如 alternatives.log 、btmp 等等,应用日志主要是我们装的第三方应用所产生的日志如 tomcat7 、apache2 等等
rsyslog 能够接受各种各样的来源,将其输入,输出的结果到不同的目的地
安装rsyslog,启动rsyslog

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件。我们可以根据日志文件的大小,也可以根据其天数来切割日志、管理日志,这个过程又叫做“转储”。
2、安装git并且添加git用户以及设密码,新建用户目录。

在本地生成密钥,ssh-keygen -t rsa,将公钥发送给远程端 $ cat ~/.ssh/id_rsa.pub | \ ssh git@localhost \ “mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys”
因为在实验环境中,本地端和远程端都在本机,所以直接在本机上建立远程仓库,创建仓库文件夹,-p 是指建立上层目录,初始化仓库。

就需要在本地端完成仓库的创建和配置
使用 exit 命令退出 git 用户,切换回 shiyanlou 账户:
接下来,创建仓库的文件夹并初始化仓库:先配置个人的用户名和电子邮件地址 ,创建一个测试文件夹。

在初始化之后,我们就开始尝试提交自己的代码了,在 3.1 小节我们写了一个 readme ,现在来提交它。

我们把刚才提交的代码克隆下来,看看效果如何,远程仓库是不是托管了代码,可见以及完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值