中国传媒大学嵌入式系统设计与开发Linux上机实验

此实验适用于中国传媒大学电子信息工程朱兵老师的嵌入式系统设计与开发课程。

以下代码经本人测试均有效,其中有小部分只有我自己知道是怎么回事,所以即使你照着做做错了那也是你自己太菜,与我无关。

2.新建的centos系统新建/test 文件夹,配置并开启nfs服务器,把自己的/test文件夹挂载到/var/www文件夹下。
 

su(进入超级用户)
rpm -qa|grep httpd  ##检查装了阿帕奇没
yum install httpd      ##安装阿帕奇

(ps aux | grep yum
kill -9 3631)##如果安装被占用,就用这个杀死进程


rpm -qa|grep httpd  ##检查安装成功没,成功了就有/var/www
systemctl start httpd

mkdir /test
vi /etc/exports
(进入文本编辑)
(输入i)
/test 127.0.0.1(rw) ##括号前有空格
(按Esc :wq)
exportfs -a
showmount -e 127.0.0.1
systemctl stop firewalld
systemctl start nfs
mount 127.0.0.1:/test /var/www  ##注意test后面有空格

3.编写hello.c 程序,打印自己的名字拼音及学号。


rpm -qa|grep gcc    ##检测安装gcc没
vi hello.c

#include<stdio.h>
int main()
{
    printf("zhengwentao20181011xxxx\n");  ##加个\n可以让结果更明显
    return 0;
}
(Esc :wq)
gcc hello.c -o hello  ##生成可执行文件
./hello    ##执行文件,可看见结果

4.编写带自动变量的makefile文件,通过make实现hello.c的编译。

gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o  ##生成.o文件
mv hello.s hello.h           ##生成.h文件,注意在同一路径
vi makefile
##进入文本模式,注意不要复制粘贴,可能有缩进问题,最好自己敲一遍
OBJS=hello.o
CC=gcc
test:$(OBJS)
        @$(CC) $< -o $@
hello.o:hello.c hello.h
        @$(CC) -c $<
clean:
        @rm -rf test
        @rm -rf *.o
(Esc :wq)
make
./test    ##可以看见输出了姓名学号

5.在主机上编译boa.

使用虚拟机自带的火狐搜索百度搜索boa源码下载,进去选择0.94.13的版本保存
rpm -qa|grep byacc
yum install byacc
yum install flex
cd Downloads   ## 浏览器下载的文件在Downloads中
tar -xzf  boa-0.94.13.tar.gz  ##会在Downloads生成一个文件夹叫boa-0.94.13

mv boa-0.94.13 /  ##把boa-0.94.13移动到根目录,注意此时在Downloads中
cd /   ##进入根目录
cd boa-0.94.13/src  
./configure
vi compat.h
(用键盘一路下滑寻找目标,记住鼠标是移动不了光标的)
修改修改compat.h中的
    #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
   为:
    #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
(Esc :wq)
make
vi boa.c
修改boa.c文件,找到下面这句:    

    if (setuid(0) != -1) {
      DIE("icky Linux kernel bug!");
    }

    注释或删除这句
vi log.c
注释掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
为:
/*if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}*/
make

mkdir /etc/boa/
cd /boa-0.94.13  ##boa.conf不在src中,而是在上一级boa-0.94.13中
cp boa.conf /etc/boa
cd /etc/boa
vi boa.conf  ##修改/etc/boa/boa.conf
  (1)Group的修改

  修改 Group nogroup

  为  Group 0

  (2)user的修改

  修改 User nobody

  为  User 0

  (3)修改ScriptAlias的路径(好像在最后一行)

  修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

  为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/

  (4)去掉ServerName前面的注释符号#

  修改#ServerName www.your.org.here

  为 ServerName www.your.org.here

  (5)注释掉AccessLog命令

  修改AccessLog /var/log/boa/access_log

  为# AccessLog /var/log/boa/access_log
groupadd nogroup

##创建web服务器的文件根目录

  cd / 返回根目录

   mkdir /var/www 创建目录

    chmod -R 777 /var/www 修改权限

  ## 创建log目录

  cd /返回根目录

  sudo mkdir /var/log/boa

  sudo mkdir /var/log/boa/error_log

  sudo mkdir /var/log/boa/access_log

  sudo chmod -R 777 /var/log/boa 修改权限

  sudo chmod -R 777 /var/log/boa/error_log 修改权限

  sudo chmod -R 777 /var/log/boa/access_log 修改权限

 ##创建CGI目录

  sudo mkdir /var/www/cgi-bin 创建cgi文件存放目录

  sudo chmod -R 777 /var/www/cgi-bin 修改权限

##在src目录下编译

  cd ~ 返回根目录

  cd Destop/boa-0.94.13/src 切换目录

  make 编译

##在src目录下运行boa

  sudo ./boa 必须在src目录下运行

##查看进程

  ps -e 看boa是否已经运行

##网页测试

  浏览器访问:http://127.0.0.1

  注意:默认端口是80,如果你的80端口已经被占用,可以修改/etc/boa/boa.conf,变更Port 80。这里对应修改:http://127.0.0.1:端口号
make
./boa
##提示地址被占用时,可以重启虚拟机,再进入/boa-0.94.13/src进行make  ./boa即可

6.编写网页文件,通过浏览器访问boa服务器网页显示自己的学号姓名


cd /var/www  ##不要放进html文件夹中
vi zwt.html
<html>
<body>
 20181011xxxx zhengwentao
<body>
<html>
(Esc :wq)

输入网址http://127.0.0.1/zwt.html


7.编写shell程序,检测/test文件夹是否存在,如果存在显示里面的内容


先转到zhengwentao

vim function

if   [   -d   /test   ];   then   ls   /test;    fi ##注意空格非常多,很容易打错
/*if [ -d "/test/" ];then
  echo "文件夹存在"
else
  echo "文件夹不存在"
fi
if [ -f "/test/filename" ];then
  echo "文件存在"
else
  echo "文件不存在"
fi*/
(保存退出)
chmod 777 function
 ./function

8.编写python爬虫程序,把自己服务器里网页中的‘学号、姓名’爬取下来

此处建议写成.py文件,因为朱兵可能会扣你分。


yum install python3
pip3 install requests
python
import requests
response = requests.get('http://127.0.0.1/zwt.html')
print(response.status_code)  # 打印状态码
print(response.url)          # 打印请求url
print(response.headers)      # 打印头信息
print(response.cookies)      # 打印cookie信息
print(response.text)  #以文本形式打印网页源码
print(response.content) #以字节流形式打印
exit()

最后,所有的文件都要保存在text文件夹里,不然朱兵不认账。

不会做的建议最后再交,朱兵会随便给你个七八十分。

这是最后一次修改这个文章,想说一句,我爱岳昕,希望岳昕每天都开开心心,好好学习。

2021/11/02


版权声明:本文为weixin_57748215原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。