JXNU Linux 实验四~实验十五

实验二

  1. root用户登录系统,并创建目录/test;
  2. 分别将/etc目录下的所有以.conf结尾的文件以及acpi目录拷贝到目录/test中
  3. 将/test目录下的文件adduser.conf重命名为useradd.conf。将文件apg移动到目录/tmp中;
  4. 跳转到目录acpi中,并打印当前目录路径;
  5. 在acpi中创建一个空文件且文件名为file;
  6. 在acpi中创建一个文件file1,并在其中写入字符串“Hello World!”。
  7. 删除文件file及file1;
  8. 删除所有以.conf结尾的文件;
  9. 删除目录acpi。
  10. 删除目录/test。
答案:以下命令中涉及到文件路径的,写绝对路径或相对路径都可以给分。

1. 任意目录下输入: mkdir /test    /目录下输入:mkdir test

2. /etc目录下输入: cp *.conf /test 以及 cp -r acpi /test

3. /test目录下输入:mv adduser.conf useradd.conf 以及 mv apg /tmp

4. cd  /test/acpi 以及pwd

5. touch file

6. cat > file1 回车

   输入 Hello World

   按ctrl+d退出

7. rm file file1 或者 rm fil*

8. rm *.conf

9. rm -r acpi

10. rm -r /test 或者 rmdir /test (因为此时test目录为空)

实验四

  1. 在用户家目录下创建test目录,并进入test目录;
cd ~

mkdir test (5)

cd test  (5)
  1. 在test目录创建两个文件,character文件中的内容为字符,num文件中的内容为数字;
cat > character  (5分,字符任意)

cat > num  (5分,数字任意)
12
  1. 对character文件中的内容按字典顺序排序,对num文件中的内容按数值大小进行排序;
sort character 或者 cat character | sort (5)

sort -n num 或者 cat num | sort(5)
  1. 删除排序后两个文件中的重复行;
sort character | uniq 或者 cat character | sort -u 或者cat character | sort |uniq (5)

sort num | uniq 或者cat num| sort -u或者 cat num| sort |uniq (5)
  1. 复制文件/etc/passwd到test目录当中,查找包含daemon字符串的行,并统计有多少行。
cp /etc/passwd test/

cat passwd | grep daemon (5)

cat passwd | grep -c daemon 或者 cat passwd | grep  daemon | wc -l (5)
  1. 使用命令查找/etc目录下的文件named.conf。
find /etc -name named.conf  (10)
  1. 使用命令查找test目录下,最近5天有过更改的文件。
find ~/test  -ctime  -5   (10)
  1. 使用locate命令是否存在num文件,若没查到,说出原因。
locate num (5)

没查到,因为num文件刚创建不久,而后台数据库一天更新一次,还没到数据库更新的时间。(5分)

  1. 综合应用题。文件userurl_20150911是手机用户上网流量记录,使用Linux命令统计文件中包含的用户数。(注意:用户手机号在文件中的第三列,文件中各列是以TAB键隔开,使用cut命令时,TAB字符表示方式是 $’\t’)(10分)

此题多种方法都可实现,只要答案是对的即可(答案为1820)。常见的正确答案有:

cat userurl_20150911 | cut -d $’\t’ -f 3 | sort | uniq | wc -l  

cat userurl_20150911 | cut -d $’\t’ -f 3 | sort -u | wc -l  

cut -f 3 userurl_20150911 -d $’\t’ | sort | uniq | wc -l

cut -f 3 userurl_20150911 -d $’\t’ | sort -u | wc -l

cut -f 3 userurl_20150911 -d ‘		‘ | sort -u | wc -l  (注意:此处的tab输入方法是首先输入一对单引号;然后按ctrl+v;最后再按Tab键)

实验五

  1. 在用户家目录下创建backup、backup1、backup2目录,将/etc目录下所有以.conf结尾的文件分别拷贝到这三个目录之中;(10分)
mkdir backup backup1 backup2 

cp /etc/*.conf  backup

cp /etc/*.conf  backup1

cp /etc/*.conf  backup2
  1. 在backup1中使用gzip命令,对其中的abcde.conf进行压缩;(5分)
gzip  backup1/abcde.conf
  1. 在backup2中使用bzip2命令,对其中abcde.conf文件进行压缩;(5分)
bzip2  backup2/abcde.conf
  1. 列出这三个文件的详细信息,比较它们所占字节数,说明那种压缩方法效率更高;(10分)
ls -l backup/abcde.conf  backup1/abcde.conf.gz  backup2/abcde.conf.bz2
  1. 请使用gzip命令或bzip2命令对backup目录进行压缩,并解释输出的提示信息;(10分)
user01@ubuntu:~$ gzip backup

gzip: backup is a directory -- ignored 

弹出信息如上,提示backup为目录,被忽略,说明gzip命令不能直接对目录进行压缩。

  1. 请使用tar命令将backup打包成backup.tar,并观察打包后是否会删除原文件?(10分)
tar -cvf backup.tar  backup

打包后,不会删除原文件。

  1. 新建一个目录backup3,使用tar命令解开打包文件backup.tar,并将其存放在目录backup3中;(10分)
mkdir backup3

tar -xvf backup.tar  -C  backup3
  1. 请使用gzip命令对backup.tar进行压缩;(10分)
gzip  backup.tar

压缩后,文件自动加上.gz扩展名。

  1. 请使用tar命令将backup打包成backup.cpp,然后使用tar命令解开打包文件backup.cpp,观察是否能正确解开;(10分)
tar -cvf  backup.cpp  backup

tar -xvf  backup.cpp  -C  test

将文件解压缩到test目录中,发现能正确解开。

  1. 使用tar命令对backup1进行打包并使用gzip或bzip2任意方法进行压缩,并观察压缩后是否删除了原文件;(10分)
tar -jcvf  backup1.tar.bz2  backup1  或者

tar -zcvf  backup1.tar.gz backup1  

压缩后,不会删除原文件。

  1. 使用tar命令对上一步压缩的结果进行解压,指定解压路径。(10分)
tar -jxvf  backup1.tar.bz2  -C  test 或者

tar -jcvf  backup1.tar.gz -C  test 

实验六

  1. 请把/etc/services 复制到/root/目录下,并重命名为test.txt
cp  /etc/services /root/test.txt
  1. 用vim打开test.txt并设置行号
vi /root/test.txt

:set nu
  1. 分别向下、向右、向左、向上移动5个字符
 5↓ 5→  5←  5↑
  1. 分别向下、向上翻两页
Ctrl + f

Ctrl + b
  1. 把光标移动到第49行
49G
  1. 让光标移动到行末,再移动到行首
$

^
  1. 移动到test.txt文件的最后一行
G
  1. 移动到文件的首行
gg
  1. 搜索文件中出现的 services并数一下一共出现多少个
/services 找到一个按回车,按n找下一个  13个
  1. 把从第一行到第三行出现的services 替换成service
:1,3 s/services/service/g
  1. 还原上一步操作
u
  1. 把整个文件中所有的light替换成lighting
:1,$ s/light/lighting/g

文件里没有light这个单词 (换成其它词的也可得分)

  1. 把光标移动到50行,删除字符”#”
50G 将光标移动到“#”  x   (第50行可能没有#,命令对即可)
  1. 还原上一步操作
u
  1. 删除第50行
dd 
  1. 还原上一步操作
u
  1. 删除从37行到42行的所有内容
37G 6dd
  1. 还原上一步操作
u
  1. 复制48行并粘贴到52行下面
48G yy 51G P 或者52G p 
  1. 还原上一步操作
u 
  1. 复制从37行到42行的内容并粘贴到44行上面
37G 6yy 44G P 或者43G p
  1. 还原上一步操作
u
  1. 把37行到42行的内容移动到19行下面
:37,42 m 19  或37G 6yy 6dd 19G p
  1. 还原上一步操作
u
  1. 光标移动到首行,把/bin/sh 改成 /bin/bash
gg  按i进入编辑模式,按要求修改即可。(首行可能没有sh)
  1. 在第一行下面插入新的一行,并输入”# Hello!”
Esc o输入”# Hello!”
  1. 保存文档并退出
Esc  :wq

实验七

1、查看当前系统用户Shell定义的环境变量,并使用命令搜索HOME变量的值;(20分)

A、查看环境变量

user01@ubuntu:~/Desktop$ env

B、查看环境变量并使用命令搜索HOME变量的值

user01@ubuntu:~/Desktop$ env | grep HOME

或者

user01@ubuntu:~/Desktop$ echo $HOME

2、测试主进程变量和子进程变量区别;(不作要求)

user01@ubuntu:~/Desktop$ var_a=10  //设置主进程变量
user01@ubuntu:~/Desktop$ echo $var_a //查看主进程变量
10 //显示主进程变量值
user01@ubuntu:~/Desktop$ bash //进入子进程
user01@ubuntu:~/Desktop$ echo $var_a //子进程中查看主进程变量
  //值为空
user01@ubuntu:~/Desktop$ var_b=20 //子进程中设置子进程变量
user01@ubuntu:~/Desktop$ echo $var_b //查看子进程中设置的变量
20
user01@ubuntu:~/Desktop$ exit //退出子进程
exit
user01@ubuntu:~/Desktop$ echo $var_a //查看主进程变量
10
user01@ubuntu:~/Desktop$ echo $var_b //查看子进程变量

user01@ubuntu:~/Desktop$

结论:主进程变量在主进程有效,在子进程中无效;子进程变量在子进程中有效,在主进程中无效。

3、设计一个Shell程序,当程序运行时要求从键盘读入一个字符串(如:hadoop)并将其赋值给user变量,程序输出:“Current user is :hadoop”。其中输出字符串“hadoop”是变量user中的内容。(30分

#!/bin/bash
#This is a simple program!
# XL version 0.1
read -p "Please keyin your name:" -t 30 named
echo "Current user is :$named"

4、userurl_20150911文件是用户上网记录,每一行代表用户的一条浏览记录,同一个用户可能有多条浏览记录。试设计一个shell程序命名为userAnalysis.sh用来计算该文件中任一用户浏览记录总条数。(30分)

要求:1、命令行运行程序时传递手机号码参数

2、命令运行时输出查找用户浏览记录总条数

#!/bin/bash
#This is a user-statistical program!
# XL version 0.1

cd ~/Desktop

cat userurl_20150911 | cut -d $'\t' -f 3 | grep $1 | wc -l

实验八

1、编写shell脚本score。根据输入的学生成绩判断等级。当成绩≥90时为A级;80≤成绩<90时为B级;70≤成绩<80时为C级;60≤成绩<70时为D级;成绩<60时为E级。

show_date()
{
    cal $1 $2
}

while true
do
    echo "请输入2020年的月份"
    year=2020
    read month
    if [ $month == "Q" ];
    then    
        break;
    fi
    show_date $month $year
    
done

2、编写一个程序,它的作用是:

a、 创建1000个目录,目录名依次为1,2,3,……,1000;

b、 在每个目录下创建一个文件,文件名与目录名相同;

c、 向文件中写入数值,文件名为1的文件写入的数值为1,文件名为2的写入的数值为2,以此类推

t="url20180301"
for((i=2;i<=30;i++))
do
if [ $i -lt 10 ];then
	mkdir url2018030$l
	a="url2018030$i"
	s="$a "
	t="$t $s"
else 
	mkdir url2018030$l
	a="url201803$i"
	s="$a "
	t="$t $s"
fi
done
mkdir url201803$l
s="url201803$l"
t="$t $s"
echo $t

实验九

  1. 在/etc/fstab第5行前增加1行,内容为 ’Hello Sed!’
user01@ubuntu:~$ sed '5i Hello sed' /etc/fstab
  1. 将文档中所有的字符串device转变成大写字符,并将结果输出到当前用户家目录下的fstab;
user01@ubuntu:~$ sed 's/device/DEVICE/g' /etc/fstab > fstab
  1. 将文件fstab中的/identifier/和/none/之间的dev用DEV来替换;
user01@ubuntu:~$ sed '/identifier/,/none/ s/dev/DEV/' /etc/fstab
  1. 删除/etc/fstab⽂件中所有行首的#与空格;
user01@ubuntu:~$ sed '/^#/,s/^# *//' /etc/fstab
  1. 编写一个shell脚本,它的作用是:

a、 将文件/etc/fstab复制到当前用户的家目录;

b、然后再使用sed命令直接对该文件进行操作,执行第1、2、3、4步操作。其中,对第2步操作不需要重定向。

#!/bin/bash
cp /etc/fstab ~/fstab
sed -i '5i Hello sed' fstab
sed -i 's/device/DEVICE/g' fstab
sed -i '/identifier/,/none/ s/dev/DEV/' fstab
sed -i '/^#/ s/^# *//' fstab

实验十

  1. 某数据库文件 awk_exercise 如下(包含姓名,电话,过去三个月的捐款共5个字段,以“:”隔开)

注意:(1)中括号及其中的数值表示区号;

(2)姓名包括姓和名,人名仅表示名字。

Mike Harrington:[510] 548-1278:250:100:175

Christian Dobbins:[408] 538-2358:155:90:201

Susan Dalsass:[206] 654-6279:250:60:50

Archie McNichol:[206] 548-1348:250:100:175

Jody Savage:[206] 548-1278:15:188:150

Guy Quigley:[916] 343-6410:250:100:175

Dan Savage:[406] 298-7744:450:300:275

Nancy McNeil:[206] 548-1278:250:80:75

John Goldenrod:[916] 348-4278:250:100:175

Chet Main:[510] 548-5258:50:95:135

Tom Savage:[408] 926-3456:250:168:200

Elizabeth Stachelin:[916] 440-1763:175:75:300

要求:

a.显示所有电话号码 (5分)

user01@ubuntu:~$ awk -F : '{print $2}' awk_exercise 或cat awk_exercise | awk -F : '{print $2}'#此两种写法都可得分,以下仅采用一种写法。[510] 548-1278[408] 538-2358[206] 654-6279[206] 548-1348[206] 548-1278[916] 343-6410[406] 298-7744[206] 548-1278[916] 348-4278[510] 548-5258[408] 926-3456[916] 440-1763

b. 显示Dan的电话号码 (5分)

user01@ubuntu:~$  awk -F : /Dan/'{print $2}' awk_exerciseDan Savage [406] 298-7744

c. 显示Susan的姓名和电话号码 (5分)

user01@ubuntu:~$ awk -F : /Susan/'{print $1,$2}' awk_exercise Susan Dalsass [206] 654-6279

d. 显示所有以D开头的姓 (10分)

user01@ubuntu:~$ awk  '{print $2}' awk_exercise | awk -F: '/^D/{print $1} 'DobbinsDalsass

e. 显示所有以一个C或E开头的名 (10分)

user01@ubuntu:~$ awk '/^[CE]/{print $1}' awk_exercise ChristianChetElizabeth

f. 显示所有只有四个字符的名 (10分)

user01@ubuntu:~$ awk  '{print $1 }' awk_exercise | awk '{if(length($1)==4) print $1}'MikeJodyJohnChet

g. 显示所有区号为916的人名 (10分)

user01@ubuntu:~$ awk -F : '/916/{print $1}' awk_exercise | awk '{print $1}'GuyJohnElizabeth

h. 显示Mike的总捐款 (5分)

user01@ubuntu:~$ awk -F: '/Mike/ {print $3+$4+$5 }' awk_exercise525

i. 显示姓,其后跟一个逗号和名 (10分)

user01@ubuntu:~$ awk -F: '{print $1 }' awk_exercise | awk '{print $2,",",$1}'Harrington , MikeDobbins , ChristianDalsass , SusanMcNichol , ArchieSavage , JodyQuigley , GuySavage , DanMcNeil , NancyGoldenrod , JohnMain , ChetSavage , TomStachelin , Elizabeth

j. 显示Savage的全名和电话号码 (5分)

user01@ubuntu:~$ awk -F: '/Savage/ {print $1,$2 }' awk_exercise Jody Savage [206] 548-1278Dan Savage [406] 298-7744Tom Savage [408] 926-3456

k.显示Chet的捐款 (5分)

user01@ubuntu:~$ awk -F: '/Chet/ {print $3,$4,$5 }' awk_exercise 50 95 135

l.显示所有头一个月捐款$250的人名 (10分)

user01@ubuntu:~$ awk -F: '$3==250 {print $1 }' awk_exercise | awk '{print $1}'MikeSusanArchieGuyNancyJohnTom

实验十二

1、查看某个普通用户目前所有的进程;(10分)

JXNU Linux 实验四~实验十五_第1张图片

2、找出普通用户下的update-notifier进程(若没有,可换其它的),并将其kill掉;(15分)

JXNU Linux 实验四~实验十五_第2张图片

3、列出系统下所有用户运行bash进程的详细信息,并尝试kill不同用户的bash进程,在kill哪个进程时会关闭终端?它跟其它bash进程显示有何不同?(20)JXNU Linux 实验四~实验十五_第3张图片

若当前用户kill其他用户进程时,会提示“不允许的操作”,如图中显示。画方框进程是当前终端对应的进程,若执行命令 kill -9 99929 会关闭当前终端窗口。与其它进程相比,该进程运行的时间是当前时间,用户为当前用户,除此之外,该进程终端为pts/1。

注意:终端字段显示为?的进程是系统内核启动的进程,不是用户启动的。

4、找出任意进程的父进程具体是哪个进程?(15分)

JXNU Linux 实验四~实验十五_第4张图片

如图所示,ps -axl | grep bash 这个进程的父进程号为99929,其对应的进程为bash。

5、修改/etc/crontab文件实现自动备份,使得每星期一的11:00将/etc目录及其子目录经打包压缩存放到/root/backup目录中,压缩后的文件名称包含备份日期,例如:etc_20190527.tar.gz;(20)

通过编辑文件 /etc/crontab,在文件的最后增加以下语句。

0 11 * * 1 root tar -zcvf /root/backup/etc_$(date -d “today” +“%Y%m%d_%H%M”). tar.gz /etc

有些系统可能需要对符号“%”加转义字符,结果为:

0 11 * * 1 root tar -zcvf /root/backup/etc_$(date -d “today” +“%Y%m%d_%H%M”).tar.gz /etc

还可以将 命令tar -zcvf /root/backup/etc_$(date -d “today” +“%Y%m%d_%H%M”).tar.gz /etc放入crontab.sh文件,然后执行 chmod 755 crontab.sh

本次实验可以使用u盘或者虚拟硬盘。

实验十三

使用U盘请按照以下步骤操作:

1、请将u盘在Windows环境下格式化为FAT格式的文件系统。

2、虚拟机开机状态下,点击Vmware菜单栏虚拟机->可移动设备->找到你的设备->点击连接到设备->可将设备连接到linux操作系统中。

JXNU Linux 实验四~实验十五_第5张图片

3、使用fdisk –l 命令查看当前系统的硬盘,查看U盘相关信息,此时看到的U盘应该只有一个分区,名叫sdb1。

4、为你的虚拟机添加一块磁盘,并且新建六个分区,六个分区要求如下:

ü sdb1为主分区,500M的容量,文件格式为ext3;

ü sdb2为主分区,容量不限,文件格式为FAT;

ü sdb3为主分区,容量不限,文件格式为FAT;

ü sdb4为扩展分区

ü sdb5为逻辑分区,容量不限,文件格式为ext3;

ü sdb6为逻辑分区,容量不限,文件格式为ext3.

使用虚拟硬盘按照以下步骤操作:

1、新建一块虚拟硬盘;

2、使用fdisk –l 命令查看当前系统的硬盘,若新建硬盘成功,则会看到有一个名叫sdb的硬盘;

3、将sdb硬盘分为六个分区,六个分区要求如下:

ü sdb1为主分区,500M的容量,文件格式为ext3;

ü sdb2为主分区,容量不限,文件格式为FAT;

ü sdb3为主分区,容量不限,文件格式为FAT;

ü sdb4为扩展分区

ü sdb5为逻辑分区,容量不限,文件格式为ext3;

ü sdb6为逻辑分区,容量不限,文件格式为ext3.

实验步骤:

1、新建硬盘成功,大小为6GB

JXNU Linux 实验四~实验十五_第6张图片

2、打印磁盘的相关信息

JXNU Linux 实验四~实验十五_第7张图片

3、新建第一个分区

JXNU Linux 实验四~实验十五_第8张图片

设置文件格式

JXNU Linux 实验四~实验十五_第9张图片

4、新建第二个分区(一开始忘记设置大小,删除后重新设置分区)

JXNU Linux 实验四~实验十五_第10张图片

设置文件格式

img

5、新建第三个分区

JXNU Linux 实验四~实验十五_第11张图片

设置文件格式

img

6、新建第四个分区

JXNU Linux 实验四~实验十五_第12张图片

7、新建第五个分区

JXNU Linux 实验四~实验十五_第13张图片

设置文件系统

JXNU Linux 实验四~实验十五_第14张图片

8、设置第六个分区

JXNU Linux 实验四~实验十五_第15张图片

设置文件格式:

JXNU Linux 实验四~实验十五_第16张图片

9、打印分区信息

JXNU Linux 实验四~实验十五_第17张图片

实验十四

1、请查看你的虚拟机的IP地址;

JXNU Linux 实验四~实验十五_第18张图片

2、测试虚拟机与网关以及网站www.baidu.com的连通性;

查看虚拟网络编辑器,找到网关IP地址为:192.168.190.2

JXNU Linux 实验四~实验十五_第19张图片

JXNU Linux 实验四~实验十五_第20张图片

3、测试你的主机是如何到达网站www.baidu.com的;

img

4、请为你的虚拟机设置静态IP地址;

(1)关机,修改虚拟网络编辑器,将红箭头所指框中的勾去掉;

JXNU Linux 实验四~实验十五_第21张图片

(2)根据虚拟网络编辑器中的内容编辑/etc/network/interfaces文件,如下图所示。

JXNU Linux 实验四~实验十五_第22张图片JXNU Linux 实验四~实验十五_第23张图片

5、请修改你的Linux主机的主机名

将/etc/hostname文件中的字符串改成你喜欢的字符串。

6、为ubuntu安装openssh服务器,并使用secureCRT软件进行远程连接。

输入以下命令,安装openssh服务器,然后使用secureCRT进行远程连接。

JXNU Linux 实验四~实验十五_第24张图片

实验十五

1、 创建用户zhangsan、lisi、wangwu,并设置其登录密码为123456;

答:

root@ubuntu:~# useradd zhangsan

root@ubuntu:~# useradd lisi

root@ubuntu:~# useradd wangwu

root@ubuntu:~# passwd zhangsan

输入新的 UNIX 密码:

重新输入新的 UNIX 密码:

passwd:已成功更新密码

root@ubuntu:~# passwd lisi

输入新的 UNIX 密码:

重新输入新的 UNIX 密码:

passwd:已成功更新密码

root@ubuntu:~# passwd wangwu

输入新的 UNIX 密码:

重新输入新的 UNIX 密码:

passwd:已成功更新密码

2、 创建两个组linux以及hadoop;

root@ubuntu:~# groupadd linux
root@ubuntu:~# groupadd hadoop

3、 将用户zhangsan、lisi加入到linux组;

root@ubuntu:~# gpasswd -a zhangsan linux

正在将用户“zhangsan”加入到“linux”组中

root@ubuntu:~# gpasswd -a lisi linux

正在将用户“lisi”加入到“linux”组中

4、 将lisi与wangwu加入到hadoop组;

root@ubuntu:~# gpasswd -a lisi hadoop

正在将用户“lisi”加入到“hadoop”组中

root@ubuntu:~# gpasswd -a wangwu hadoop

正在将用户“wangwu”加入到“hadoop”组中

5、 设置lisi的主组群为hadoop;

root@ubuntu:~# usermod -g hadoop lisi

root@ubuntu:~# groups lisi

lisi : hadoop linux

6、 查看/etc/passwd文件,分别说出zhangsan、lisi、wangwu三个用户的UID和GID分别是什么?

答:查看/etc/passwd文件,可知zhangsan的UID为1001,GID为1002;lisi的UID为1002,GID为1000;wangwu的UID为1003,GID为1004. (注意:大家的答案可能不同,需要根据以下内容来鉴别)

zhangsan:x:1001:1002::/home/zhangsan:/bin/bash

lisi:x:1002:1000::/home/lisi:/bin/bash

wangwu:x:1003:1004::/home/wangwu:/bin/bash

7、 将lisi从linux组删除;

root@ubuntu:~# gpasswd -d lisi linux

正在将用户“lisi”从“linux”组中删除

root@ubuntu:~# gpasswd -d lisi hadoop

正在将用户“lisi”从“hadoop”组中删除

root@ubuntu:~# groups lisi

lisi : hadoop

8、 试试能否将lisi从hadoop组中删除?并说明为什么?

答:不能,因为hadoop组是lisi的主组群。

你可能感兴趣的:(学校课程实验,linux,bash,运维)