《Linux系统应用与开发》上机实习报告

实验一

  • cd 命令:切换目录 (1)切换到目录 /usr/local
     $ cd /usr/local
    
    (2)去到目前的上层目录
     $ cd ..
    
    (3)回到自己的主文件夹
     $ cd
     或
     $ cd ~
    
  • ls 命令:查看文件与目录 (4)查看目录/usr 下所有文件(包括隐藏文件)的详细信息
     $ ls /usr
    
  • mkdir 命令:新建新目录 (5)进入/tmp 目录,创建一个名为 a 的目录,并查看该目录是否创建成功
     $ cd /tmp
     $ mkdir a
    
    (6)创建目录 a1/a2
     $ mkdir -p a1/a2
    
  • pwd 命令:查看当前路径 (7)切换到上例创建的目录 a,并查看当前目录路径
     $ cd /tmp/a
     $ pwd
    
  • rmdir 命令:删除空的目录 (8)将上例创建的目录 a(/tmp 下面)删除
     $ cd /tmp
     $ rmdir a
    
    (9)删除目录 a1/a2,查看有多少目录存在
     $ rmdir a1/a2
    
  • cp 命令:复制文件或目录 (10)将主文件夹下的.bashrc 文件复制到/usr 下,并命名为 bashrc1
     $ sudo cp ~/.bashrc /usr/bashrc1
    
    (11)在/tmp 下新建目录 test/test1,再复制这个目录 test/test1 内容到/usr
     $ mkdir -p /tmp/test/test1
    
  • mv 命令:移动文件与目录,或更名 (12)将上例文件 bashrc1 移动到目录/usr/test
     $ sudo cp /usr/bashrc1 /usr/test/
    
    (13)将上例 test 目录重命名为 test2
     $ sudo mv /usr/test /usr/test2
    
  • rm 命令:移除文件或目录 (14)将上例复制的 bashrc1 文件删除
     $ sudo rm /usr/test2/bashrc1
    
    (15)将上例的 test2 目录删除
     $ sudo rm -rf /usr/test2
    
  • cat 命令:查看文件内容 (16)查看主文件夹下的.bashrc 文件内容
     $ cat ~/.bashrc
    
  • tac 命令:反向列示 (17)反向查看主文件夹下.bashrc 文件内容
     $ tac ~/.bashrc
    
  • more 命令:一页一页翻动查看 (18)翻页查看主文件夹下.bashrc 文件内容
     $ more .bashrc
    
  • head 命令:取出前面几行 (19)查看主文件夹下.bashrc 文件内容前 20 行
     $ head -10 ~/.bashrc
    
    (20)查看主文件夹下.bashrc 文件内容,后面 50 行不显示,只显示前面几行
     $ head --lines=-10 .bashrc
    
  • tail 命令:取出后面几行 (21)查看主文件夹下.bashrc 文件内容最后 20 行
     $ tail -20 ~/.bashrc
    
    (22) 查看主文件夹下.bashrc 文件内容,只列出 50 行以后的数据
     $ tail -50 .bashrc
    
  • touch 命令:修改文件时间或创建新文件 (23)在/tmp 下创建一个空文件 hello 并查看时间
     $ touch /tmp/hello
     $ stat /tmp/hello
    
  • chown 命令:修改文件所有者权限 (24)将hello 文件所有者改为 root 帐号,并查看属性
     $ chown root /tmp/hello
    
  • find 命令:文件查找 (25)找出主文件夹下文件名为.bashrc 的文件
     $ find ~/ -name .bashrc
    
  • tar 命令:压缩命令 (26)在/目录下新建文件夹 test,然后在/目录下打包成 test.tar.gz
     $ sudo mkdir /test
     $ sudo tar -czvf /test.tar.gz /test
    
    (27)解压缩到/tmp 目录
     $ tar -xzvf /test.tar.gz -C /tmp
    
  • grep 命令:查找字符串 (28)从~/.bashrc 文件中查找字符串'examples'
     $ cat ~/.bashrc | grep examples
    
    (29)配置 Java 环境变量(JAVA_HOME),用 vi 或 gedit 文本编辑器打开~/.bashrc 配置文件,
     $ echo 'export JAVA_HOME=/HHHHH' >> ~/.bashrc
     $ vi ~/.bashrc
    
    (30)查看 JAVA_HOME 变量的值
     $ source .bashrc
     $ echo $JAVA_HOME
    

实验二

1. 设计如下一个菜单驱动程序。

Use one of the following options: P: To display current directory 
S: To display the name of running file 
D: To display today’s date and present time 
L: To see the listing of files in your present working directory W: To see who is logged in 
Q: To quit this program Enter your option and hit: 
菜单程序将根据用户输入的选择项给出相应信息。要求对用户的输入忽略大小写,对于无效选项的输入给出相应提示。要求使用 case 语句实现以上功能,输入相应的字母后应该执行相应的命令完成每项功能,如输入 P 或 p,就执行 pwd 命令。
    #! /bin/bash

    echo 'Use one of the following options:'
    echo 'P: To display current directory'
    echo 'S: To display the name of runnning file'
    echo 'D: To display todays date and present time'
    echo 'L: To see the listing of files in your present working directory'
    echo 'W: To see who is logged in'
    echo 'Q: To quit this program'
    echo "Enter your option and hit: "
    while :
    do
    read choice
    case $choice in
        P|p) pwd
        ;;
        S|s) echo $0
        ;;
        D|d) date
        ;;
        L|l) ls
        ;;
        W|w) who
        ;;
        Q|q) exit
        ;;
        *) echo "Wrong option"
        ;;
    esac
done

2. 编写一段 bash Shell 程序

根据从键盘输入的学生成绩,显示相应的成绩等级,其中60分以下为“Failed!”,60~70分为“Passed!”,70~80 分为“Medium!”,80~90分为“Good!”,90~100分为“Excellent!”。如果输入超过100或负数的分数,则显示错误分数提示。
    #!/bin/bash
    
    echo 'Please input a student grade, we would judge the levels: '
    
    while :
        do
            read grade
            if [ $grade -ge 0 ]
            then
                if [ $grade -lt 60 ] then
                    echo 'Failed!'
                elif [ $grade -lt 70 ]
                then
                    echo 'Passed!'
                elif [ $grade -lt 80 ]
                then
                    echo 'Medium!'
                elif [ $grade -lt 90 ]
                then
                    echo 'Good!'
                elif [ $grade -le 100 ]
                then 
                    echo 'Excellent!'
                else
                    echo 'Wrong input, please try again: '
                    continue
                fi
                    echo 'Please input a student grade, we would judge the levels: '
                continue
            fi
            echo 'Wrong input, please try again: '
        done

3. 编写一个 Shell 过程完成如下功能(必须在脚本中使用函数)。

  1. 程序接收 3 个参数:$1、$2 和$3,合并两个文件$1、$2 为$3,并显示,三个文件均为文本文件。
  2. 如果文件$3 不存在,那么先报告缺少$3,然后将合并后的内容输出到 mydoc.txt。如果有$3,就合并到$3。
  3. 如果文件$2 和文件$3都不存在,那么先报告缺少$2、$3,只显示$1 的内容。
  4. 如果文件$1 不存在,则提示缺少$1,要求重新运行程序。
    #!/bin/bash
    
    function1 ( ) {
    
    if [ $1 ]
    then
        if [ -e $1 ]
        then
            if [ -r $1 ]
            then
                if [ $2 -a -e $2 ]
                then
                    if [ -r $2 ]
                    then
                        outFile=$3
                        if [ -e mydoc.txt ]
                        then
                            rm mydoc.txt
                        fi
    
                        if [ $3 ]
                        then
                            if [ -w $3 ]
                            then
                                outFile=$3
                            else
                                touch mydoc.txt
                                outFile=mydoc.txt
                                echo "文件 ${3} 不存在或者不可写"
                            fi
                        else
                            touch mydoc.txt
                            outFile=mydoc.txt
                            echo '缺少$3'
                        fi
                        cat $1 >> $outFile    
                        cat $2 >> $outFile
                        cat $1
                        cat $2
                    else
                        echo "文件 ${2} 不可读"
                    fi
                else
                    if [ $2 ]
                    then
                        echo "文件${2} 不存在"
                    else
                        echo '缺少$2 $3'
                        cat $1
                    fi
                fi
            else
                echo "文件 ${1} 没有可读权限"
                exit
            fi
        else
            echo "文件 ${1} 不存在"
            exit
        fi
    else
        echo '缺少$1 请重新运行程序'
    fi
    }
    
    function1 $1 $2 $3

4. 编写一个脚本,显示当天日期,查找给定的某用户是否在系统中工作。如果在系统中, 就发一个问候给他

    #!/bin/bash
    sudo echo "今天的日期是:`date "+%Y-%m-%d"`"
    Users=`who | cut -d \  -f 1`
    Ttys=`who | cut -d \  -f 2`
    Numbers=`who | grep -c :`
    
    while (( $Numbers>0 ))
    do
        n1=`echo $Users | cut -d \  -f $Numbers`
        n2=`echo $Ttys | cut -d \  -f $Numbers`
        echo "Hello" | sudo write $n1 $n2
        let "Numbers--"
    done

实验三

1.实验目的

  • 了解 Linux 下 C 语言程序编译和调试的环境。
  • 掌握 GCC 的各种编译参数。
  • 掌握 makefile 的使用方法。
  • 掌握 gdb 调试工具的使用。

2.实验平台

  • 操作系统:Deepin

3.实验内容

(1)输入以下 C 程序hostname.c

#include <sys/utsname.h>
#include <unistd.h>
#include <stdio.h> 
#include <stdlib.h>

int main()
{

    char computer[256]; 
    struct  utsname uts;
    if (gethostname(computer, 255) !=0 || uname(&uts)<0) 
    { 
        fprintf(stderr, "could not get host information \n"); 
        exit(1);
    }

    printf("computer host name is %s \n", computer);
    printf("system is %s on %s hardware \n", uts.sysname, uts.machine); 
    printf("nodename is %s \n", uts.nodename);
    printf("version is %s, %s\n", uts.release, uts.version); 
    
    exit(0);

}

-E 选项

使用 gcc –E hostname.c –o hostname.i 生成预处理文件,观察在本目录中生成的hostname.i 文件。
$ gcc –E hostName.c –o hostName.i 
$ head hostName.i 
# 1 "hostName.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "hostName.c"
# 1 "/usr/include/x86_64-linux-gnu/sys/utsname.h" 1 3 4
# 25 "/usr/include/x86_64-linux-gnu/sys/utsname.h" 3 4
# 1 "/usr/include/features.h" 1 3 4

-S 选项

使用 gcc –S hostname.c –o hostname.s 生成汇编文件,观察在本目录中生成的hostname.s文件。
$ gcc –S hostName.c –o hostName.s
$ head hostName.s
    .file   "hostName.c"
    .section    .rodata
    .align 8
.LC0:
    .string "could not get host information \n"
.LC1:
    .string "computer host name is %s \n"
.LC2:
    .string "system is %s on %s hardware \n"
.LC3:

-o 选项

$ gcc hostName.c –o hostname
$ ./hostname 
computer host name is squarefong-PC 
system is Linux on x86_64 hardware 
nodename is squarefong-PC 
version is 4.9.0-deepin13-amd64, #1 SMP PREEMPT Deepin 4.9.57-1 (2017-10-19)

-g 选项

$ gcc hostName.c –g –o hostname
$ gdb hostname
GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from hostname...done.
(gdb) l
1   #include <sys/utsname.h>
2   #include <unistd.h>
3   #include <stdio.h> 
4   #include <stdlib.h>
5   
6   int main()
7   {
8   
9       char computer[256]; 
10      struct  utsname uts;
(gdb) b 6
Breakpoint 1 at 0x81b: file hostName.c, line 6.
(gdb) r
Starting program: /home/squarefong/Documents/LinuxCourse/third/hostname 

Breakpoint 1, main () at hostName.c:11
11      if (gethostname(computer, 255) !=0 || uname(&uts)<0) 
(gdb) n
17      printf("computer host name is %s \n", computer);
(gdb) c
Continuing.
computer host name is squarefong-PC 
system is Linux on x86_64 hardware 
nodename is squarefong-PC 
version is 4.9.0-deepin13-amd64, #1 SMP PREEMPT Deepin 4.9.57-1 (2017-10-19)
[Inferior 1 (process 23091) exited normally]

(2)按照以下目录结构存放程序,然后制作 makefile 文件,把 makefile 文件内容附上。现有一个程序由 7 个文件组成。

/main.c /functions/mytool1.c /functions/mytool2.c /functions/mytool3.c /functions/mytool1.h /functions/mytool2.h /functions/mytool3.h
#makefile
main : main.o mytool1.o mytool2.o mytool3.o
    gcc -o main main.o mytool1.o mytool2.o mytool3.o

main.o : /main.c /functions/mytool1.h /functions/mytool2.h /functions/mytool3.h
    gcc -c /main.c -I /functions

mytool1.o : /functions/mytool1.h /functions/mytool1.c
    gcc -c /functions/mytool1.c


mytool2.o : /functions/mytool2.h /functions/mytool2.c
    gcc -c /functions/mytool2.c


mytool3.o : /functions/mytool3.h /functions/mytool3.c
    gcc -c /functions/mytool3.c

clean : 
    rm main main.o mytool1.o mytool2.o mytool3.o

test: main.o mytool1.o mytool2.o mytool3.o
    gcc -o test /main.c /functions/mytool1.c /functions/mytool2.c /functions/mytool3.c -I /functions -g

发表评论

电子邮件地址不会被公开。 必填项已用*标注