山东大学Linux应用课程实验记录

找到这篇博文的人,一定被Linux实验弄得很爆炸吧哈哈哈。
这里是我Linux实验的记录,供大家学习和参考。如有错误,还请指正。

实验一

一. 基本命令

  1. 显示系统当前时间.
    date

  2. 显示2003年的日历.
    cal 2003

  3. 分别显示1999年1月份和99年1月份的日历. 1999年的和99年的是否是一个?
    不是
    cal 1 1999
    cal 99

  4. 列出系统中所有登陆用户.
    who

  5. 显示你的登陆名.
    whoami

  6. 显示你的用户信息.
    whoami

  7. 清屏.
    clear

  8. 显示字符串’Out to lunch’.
    echo 'Out to lunch'

  9. 使用wall命令进行系统广播:Good Evening everyone!
    wall 'Good Evening everyone!'

  10. 使用一个命令屏蔽所有消息.这个命令对所有用户都起作用吗?
    不是
    mesg n

二. Man 手册

  1. 使用man手册察看ls命令如何使用.
    man ls

  2. 试着解释一下ls命令的man手册有几部分组成?每一部分是用来说明什么的?
    指令名,指令格式,指令参数,作者,BUG反馈,版权说明

  3. 在man手册中试着移动光标:
    上下键:上下移动一行
    空格键:到下一页

  4. 退出man手册.
    q键退出

实验二

一. 对目录的操作

  1. 检查你当前所在的目录,该目录是?
    用户主目录 “~”.

  2. 改变当前目录到根目录(/).
    cd /

  3. 验证是否在根目录,分别用简单列表和长列表的方式列出目录中的文件.
    ls
    ls -l

  4. 列出当前目录中的所有文件,列出当前目录及其子目录中的所有文件.
    ls -R

  5. 返回到你的主目录,列出该目录的内容包括隐藏文件.
    cd ~
    ls -a

  6. 在你的主目录里创建一个名为mydir的目录. 然后, 发出命令分别显示你的主目录和~/mydir目录的长列表.
    cd ~
    mkdir mydir

  7. 分别用绝对路径和相对路径两种方式转到mydir目录. 创建两个名为myfile1和myfile2的文件.
    cd mydir
    cd ~/mydir
    touch myfile1
    touch myfile2

  8. 用长列表形式显示mydir目录的内容. 长列表列出的各栏分别显示了什么信息?文件myfile1和myfile2的大小是多少?
    读写权限 文件数 拥有者 所属的group 文件大小 建档日期 文件名
    均为0
     
    ls -l

  9. 返回到你的主目录然后使用 ls -R 命令来显示你的目录树. 解释显示出来的信息。
    cd ~
    ls -R

  10. 试着用rmdir删除mydir目录. 能行吗?为什么?
    不行,因为mydir非空

  11. 进入mydir目录删除该目录中的2个文件. 然后返回到你的主目录并且删除掉mydir目录.
    cd mydir
    rm myfile1
    rm myfile2
    cd ..
    rm mydir

  12. 用一条rm命令可否实现12题中的要求?如何实现?解释rm命令的作用。
    rm -rf mydir

二. 对文件的操作

  1. 分别用cat,more和less命令查看 /etc/passwd 文件的内容。/etc/passwd 文件包含了能使用该系统的所有授权的用户的一个列表.这三个命令显示的方式有什么不同?
    cat /etc/passwd
    more /etc/passwd
    less /etc/passwd
    cat 显示文件全部的内容。
    more/less 分页显示文件的内容。

  2. 复制/etc/passwd 文件到你的主目录, 并将其重命名为usersfile.用一条命令实现。如果用两条命令实现呢?
    一条命令:cp /etc/passwd ~/usersfile

两条命令:cp /etc/passwd ~ mv passwd usersfile2

  1. 用wc命令统计文件userfile的字符数、行数和单词数. 解释显示出的各栏对应的内容。如果只统计行数呢?
    wc ~/usersfile

  2. 分别创建userfile的一个硬链接文件userfile-hard和一个字符链接文件userfile-soft。
    ln userfile userfile-hard
    ln -s userfile userfile-soft

  3. 用whereis搜索命令passwd所在的路径。用locate命令搜索文件名中带有aa字段的文件。 whereis和locate命令的区别是什么?
    whereis是精确搜索,locate可以模糊搜索
    whereis passwd
    locate aa

三. 对文件和目录的递归操作

  1. 创建一个sub1目录, 在sub1中再创建一个 sub2 目录. 用一条命令来实现.
    mkdir -p ~/sub1/sub2

  2. 转到 sub2 目录, 创建一个文件 myfile.
    cd ~/sub1/sub2
    touch myfile

  3. 返回到你的主目录. 复制整个 sub1目录树到tree1. 分别递归显示目录sub1和tree1里的所有文件.
    mkdir ~/tree1
    cp -Rf ~/sub1 ~/tree1
    cd ~/tree1
    ls -R
    cd ~/sub1
    ls -R

  4. 现在你有了2个目录树, sub1和tree1. 把目录树tree1 移到sub1子目录中.
    mv ~/tree1 ~/sub1

  5. 列出你的主目录的内容. 递归显示sub1目录中的所有文件和目录.
    cd ~
    ls
    cd sub1
    ls -R

四. 创建用户帐号
为了完整地演示权限, 我们需要创建一些附加的用户, tux1和tux2, 它们都是penguins 组的成员.

  1. 切换到tty3(按Ctrl+Alt+F3键),用 root帐号登录。

  2. 执行下列一系列命令:

groupadd penguins
useradd -m -g penguins -c "Tux the Penguin (1)" tux1
useradd -m -g penguins -c "Tux the Penguin (2)" tux2
passwd tux1
New password: penguin1
Retype new password: penguin1
passwd tux2
New password: penguin2
Retype new password: penguin2
  1. 切换到tty1(按Ctrl+Alt+F1键), 用tux1帐号登录, 密码是penguin1, 然后再切换到 tty2(按Ctrl+Alt+F2键),用tux2帐号登录, 密码是penguin2.

这里没什么可说的,照做就好

五. 文件和目录的权限

  1. 切换到tty1(按Ctrl+Alt+F1键), 你是以 tux1帐号登录的, 查看你的主目录的权限.
    读、写、执行权限

  2. 切换到tty2, 你是以 tux2帐号登录的. 试着改变到tux1的主目录, 或者显示tux1主目录的内容. 能行吗?为什么?
    不行,没有权限

  3. 切换到tty1. 改变tux1主目录的权限以使其他用户能够有读(read)和执行(execute)的权限.然后再以tux2帐号试着进入tux1的主目录. 现在能行吗?
    可以

  4. 作为用户tux2, 试着创建和删除tux1的主目录里的文件. 能否成功?
    不行

  5. 再次切换到tty1. 创建一个bin目录,复制文件/bin/ls 到此目录,并且重命名为my_ls.

  6. 设置my_ls的权限为rw-r-----, 然后分别以tux1和tux2登录试着运行它. 能否运行? 为什么?
    不行,没有执行权限

  7. 重新设置my_ls的权限为rwxr-xr-x, 然后再次分别以tux1和tux2登录试着运行它. 现在能否运行?
    可以,有执行的权限

  8. 试着运行 my_ls , 分别以tux1 , tux2, 和你自己的帐号 , 权限分别为 rw-------, rw-rw----, rwx------, rwx–x— 和 rwx–x--x . 对于tux1, 运行my_ls所需要的最小权限是什么? 对于tux2呢? 对于你自己的帐号呢?
    对于tux1,需要–x------
    对于tux2,需要-----x—
    对于自己的账号,需要--------x


实验三

一. 使用vi文本编辑器

  1. 以某个帐号登入系统,确认是否在主目录里。在主目录里用vi文本编辑器创建一个名为vitest的文件。可随意输入,尽量多输入以便能多分几屏显示。
    cd ~
    vi vitest

  2. 返回到命令行模式,保存文件但不退出vi。注意:按下“:”键, 该符号会在输入区域的末行显示。一旦缓冲区是空的,文件被关闭,可以看到一段信息,显示出文件的行数和字符数。

  3. 任意修改文件vitest的内容,然后放弃所有修改,强制退出vi。
    输入 q!

二. 光标移动键的使用

  1. 再次打开vitest文件,注意在屏幕的底部指示出该文件的名称和字符数。

  2. 使用,,和键,练习在文件中移动光标。最简单的移动光标的方法是使用上,下,左,右键.

三. 删除和粘贴

  1. 将光标移动至第5行alphanumeric处。用yy命令复制这一行内容,并粘贴到下一行。

  2. 将光标移至第6行,删除这一行的内容。

四. 字符串搜索与取代

  1. 设置一个文件中已经存在的字符串,比如在本文件中设置该字符串为"binary"。试着正向和反向搜索字符串binary.

  2. 转入第14行。将该行中的字符串"binary"用字符串"str1"来取代。如果要用"str1"替换文件中出现的所有字符串"binary"呢?

  3. 用命令u撤销11中进行的操作。

五. 其它

  1. 移至文件的末尾,另起一行输入"the current path of file myfile is: ", 然后写入myfile所在的路径。

  2. 在命令模式下用查看当前文本的状态。都显示什么信息?

  3. 保存文件退出。
    在命令方式下可有几种方法退出vi编辑器,:wq ,:ZZ ,:q!

实验四

一. shell环境
(一)命令和文件名补全功能

  1. 用date命令查看系统当前时间,在输入da后,按tab键,让shell自动补齐命令的后半部分。

  2. 用mkdir命令创建新的目录newdir。首先输入第一个字母m,然后按tab键,由于以m开头的命令太多,shell会提示是否显示全部的可能命令,输入n。
    cd ~
    mkdir newdir

  3. 再多输入一个字母k,按tab键,让shell列出以mk开头的所有命令的列表。

  4. 在列表中查找mkdir命令,看看还需要多输入几个字母才能确定mkdir这个命令,然后输入需要的字母,再按tab键,让shell补齐剩下的命令。

  5. 最后输入要创建的目录名newdir,按回车键执行命令。

  6. 用ls命令查看newdir目录下的内容,看newdir是否可以用文件补全功能来输入?
    可以进入

(二)命令别名功能

  1. 输入alias命令,显示目前已经设置好的命令的别名。
    alias

  2. 设置别名ls为ls –l,以长格形式显示文件列表。
    alias ls='ls -l'

  3. 显示别名ls代表的命令,确认设置生效。
    alias ls

  4. 使用别名ls显示当前目录中的文件列表。
    ls

  5. 在使定义的别名不失效的情况下,使用系统的ls命令显示当前目录中的命令列表:
    \ls

  6. 删除别名ls。
    unalias lsalias cde='cd /etc'

  7. 显示别名ls,确认删除别名已经生效。
    alias ls

  8. 最后再用命令ls 显示当前目录中的文件列表。
    ls

  9. 写出定义别名cde为:cd /etc的命令。
    alias cde='cd /etc'

二. 通配符的使用

  1. 以tux1帐号登入系统,用ls /bin/*sh 命令显示系统中的shell种类。
    ls /bin/*sh

  2. 进入/etc目录并且列出该目录下的所有文件。
    cd /etc

  3. 使用带通配符的ls命令列出文件名:
    (1) 文件名以conf结尾的文件
    ls *conf
    (2) 文件名以一个字母d或D开头的文件
    ls [d,D]*
    (3) 文件名的第五位包含一个字母o的文件
    ls ????o*
    (4) 文件名包含文字tab且不区分大小写字母的文件
    ls *[t,T][a,A][b,B]*
    (5) 文件名以一位数字结尾的文件
    ls *[^0-9][0-9]
    (6) 文件名不以一位数字结尾的文件
    ls *[^0-9]

  4. 执行命令ls -d ?[!y]*[e-f]将会发生什么情况?
    匹配不是y开头的且以e或f结尾的文件。

  5. 返回到你的主目录。
    cd ~

三. 重定向

  1. 使用cat命令重定向创建一个名为junk的文件,该文件包含了一些文本行。键入一些行以后,中止cat命令返回到shell提示符。查看你刚才创建的文件的内容。使用重定向在junk文件中再添加一些行。然后查看该文件的内容,检查你所输入的内容是否完整。
    cat junk
    输入一些内容之后:wq

  2. 将其标准输出重定向到文件cat.out,标准错误重定向到cat.err。
    cat 1>>cat.out
    cat 2>>cat.err

四. 管道

  1. 使用管道统计你的当前目录里的文件数,不要手动去计数。
    ls -l|wc -l

  2. 执行ls -l> tempfile ; wc -l tempfile ; rm tempfile 命令与第7题作用一样吗?为什么一样或不一样?
    第七题在哪……

  3. 使用ls命令并把输出结果保存在名为tempfile2的文件中,然后统计并显示文件数。
    ls -l>tempfile2
    ls -l|wc -l

五. 命令组

  1. 在同一个命令行上,显示当前的系统日期和登入的所有用户,包括一些说明注释,结果存入到一个文件中。
    date>>tempfile;who>>tempfile

六. 进程环境

  1. 显示在你的当前进程环境中定义的所有变量。显示所有环境变量。
    env

  2. 用命令 $localvar=10 给本地变量localvar赋值。
    localvar=10
    echo $localvar

  3. 用 $bash 命令启动一个子shell。再显示变量localvar的值。这次和28中显示的为什么不同?
    /bin/bash
    echo $localvar
    无法显示localvar

七. 使用grep和正则表达式

  1. 复制/etc/passwd文件到你的主目录,并换名为lspasswd。
    cp /etc/passwd ~/lspasswd

  2. 搜寻在lspasswd文件中所有首字母是s的行,并用wc,grep和管道组合成一条命令统计lspasswd文件中首字母是s的行数。
    grep '^s' ~/lspasswd|wc -l

  3. 重复上面的操作,但这次只显示符合条件的行的计数。
    grep '^s' ~/lspasswd

  4. 尝试用grep 和正则表达式在lspasswd中查找其它你想要查找的信息。

八. `Shell程序及其三种运行方式

  1. 使用vi编辑器,编辑一个名为setdir的脚本文件:
    dir1=/tmp
    dir2=/usr
    echo $dir1 $dir2

  2. 分别用学过的三种不同的运行方式运行该脚本,每次运行一种方式后,再次执行echo $dir1 $dir2
    三种方式:
    sh setdir.sh
    ./setdir.sh
    . setdir.sh

实验五

一.引号的使用

  1. 双引号和单引号的使用。依次输入下列命令:
    $string =“ hello world!”
    $echo “$string”
    $echo ‘$string’
    比较(2)和(3)的结果,为什么不同?
    (2)中输出hello world
    (3)中输出string

  2. 反引号的使用。进入你的主目录,输入:$echo “the current work directory is: pwd”会显示什么结果?解释反引号的作用。
    echo “the current work directory is:pwd
    输出为the current work directory is:/home/username

二. shell编程

  1. 位置变量参数和特定变量参数.验证讲义中Param脚本的运行结果。
    (1)在你的主目录/home/student下建立目录bin,并进入到bin目录。
    用vi编辑器编辑本脚本,内容如下:
echo " script name: "
echo $0
echo "show arguments:"
echo $*
echo "my process id:"
echo $$
echo "Did my script go with any errors?"
echo $?

(2)执行本脚本, 显示什么内容?
进入终端,执行:
cd 实验五的根目录
sh 实验5.sh hello world

显示内容为:

script name: 
/home/zy/桌面/Linux/实验5.sh
show arguments:

my process id:
19416
Did my script go with any errors?
0

(3)结合执行结果,解释脚本中 0 , 0, 0,*,$ , , ,?的意义.

$$ Shell本身的PID(ProcessID) 
$? 最后运行的命令的结束代码(返回值) 
$* 所有参数列表。
$0 Shell本身的文件名 
  1. 表达式。依次进行以下操作:
    (1) 给变量i赋值为10,变量j赋值为5.
    (2) 分别用算术扩展$(())和expr两种方式求表达式i*5-j的值。
i=10
j=5
r=$((i*5-j))
echo $r
x=`expr $i \* 5`
y=`expr $x + $j`
echo $y

5.test命令。
(1)字符串操作符。依次输入以下命令,并解释执行结果。

$str1=abcd 
$str2="abcd  "
$test  "$str1"  =  "$str2" 
$echo $? 
本脚本输出结果为1,意思为str1与str2不相等。

(2)整数操作符。依次输入以下命令,并解释执行结果。

$str1=1234 
$str2=01234 
$[ "$str1" –eq "$str2" ] 
$echo $? 
本脚本输出结果为0,意思为str1与str2相等。

(3)文件操作符。依次输入以下命令,并解释执行结果。

$touch aa
$ [ -w aa ]
$ test -w aa 
$ echo $?
输出0,aa具有写权限。
$[ ! -d aa ]
$ echo $?
输出1,aa不是一个目录。

(4)逻辑操作符。利用(3)中的文件aa执行如下命令,并解释结果。

$[ -r aa -a -x aa ] 
$echo $?
输出1,aa可读,但是不可执行。
  1. shell控制语句. 编写一个脚本,要求如下:
    (1)把用户名作为输入参数(位置变量参数),每隔60秒检查一次用户是否登陆,直至该用户登陆。
    (2)如果执行脚本时输入的参数数目不为1,则输出"Incorrect number of arguments"提示信息,并退出执行脚本。
    (3)该用户登陆后,显示"the user 用户名 has logged on"。其中用户名对应于用户执行时输入的参数信息。

提示:
(1) 用[ "$### " –ne 1 ]测试输入参数个数是否为1
(2) 用who|grep "^$user "> /dev/null判断用户$user是否登陆
(3) 用sleep 60表示每隔60秒进行某项操作。

脚本内容:

if [ $### -ne 1 ]; then  
    echo "Incorrect number of arguments" 
    exit 
else
    while true
    do 
	if who|grep "^$1 "> /dev/null; then
            echo "the user $1 has logged on"
        fi
        sleep 60   
    done   
fi  

实验六

一.用户和组的管理

  1. 列出你的系统中定义的所有帐号。
    compgen -u

  2. 查看是否所有帐号都有密码? 如何确定是否有密码?
    sudo cat /etc/shadow
    列出的所有数据中,第二列数据为密码的哈希值,如果密码不是一个哈希字符串,则代表没有密码。

  3. 以root帐号登录,增加一个帐号tux3。
    sudo -s
    adduser tux3

  4. 查看/etc/shadow文件。帐号tux3的密码是什么?
    登入另一个终端
    sudo cat /etc/shadow
    密码为“!”,代表没有密码。

  5. 给出帐号tux3的密码“penguin3”。再次查看/etc/shadow 文件,这次帐号tux3的密码是什么?
    sudo cat /etc/shadow
    密码(哈希字符串)为:
    $6$8sbhzr9N$H2.6I20UXLBIGA.SdxVRH7xguTByAvGUT4b8x4TfwR3yURP6HojTsjnxVBUSykdXv1Tl5e41nXjcVO.U4Z7OV

  6. 查看/etc/passwd- 文件的内容。该文件存储的是什么内容?
    sudo cat /etc/passwd-
    储存的是本机上用户的信息,包括用户名,密码,根目录等信息。

  7. 帐号tux3所在的组是什么?
    groups tux3
    所在的组为tux3

  8. 增加一个组“penguins”。
    groupadd penguins

  9. 把帐号tux3 加入到组penguins中。
    gpasswd -a tux3 penguins

  10. 在哪个文件中可以看到这个变化?解释一下如何变化的。

  11. 不退出root帐号,用一个命令转入到tux3用户帐号,要求改变身份时,同时变更工作目录。如果不要求变更工作目录那应该怎么做?
    改变工作目录:
    su - tux3
    不改变工作目录:
    su tux3

  12. 用一个命令从tux3用户帐号退回到root帐号。
    sudo -s

二.进程管理和任务自动化

  1. 使用vi编辑器,在你的用户主目录的bin目录下创建一个脚本文件myclock,内容如下:
while true
do
date
sleep 10
done
  1. 在前台运行该脚本文件。
    cd ~/bin
    sh myclock.sh

  2. 挂起刚才运行的任务。
    ctrl + z

  3. 列出系统中运行的所有任务,在后台重新运行上面的任务。
    jobs

  4. 查看系统中正在运行的所有进程的详细信息(包括前台和后台的),这里面有刚才启动的任务myclock吗?
    ps -A
    没有

  5. 只查看由root用户启动的进程信息
    ps -u root

  6. 把myclock任务转为前台运行,屏幕显示时间后退出该任务的运行。
    bg sh myclock.sh
    ctrl + c

  7. 再次在后台运行myclock脚本文件。
    sh myclock.sh &

  8. 使用kill命令停止shell脚本myclock的运行。
    kill [myclock的进程号]

三.文件的压缩和归档

  1. 拷贝/usr/share目录到用户主目录下,改目录名为backup,然后建立一个包含backup子目录中全部文件的名为backup.tar的档案文件
    cp -r /usr/share ~/backup
    tar -cf backup.tar backup

  2. 在当前目录下,建立一个包含backup子目录中全部文件的经过gzip压缩的名为backup.tar.gz的档案文件
    tar -czf backup.tar.gz backup

  3. 试着释放backup.tar.gz文件.
    tar -xf backup.tar.gz

四.网络配置

  1. 验证一下网络配置相关命令的使用。
hostname
ifconfig
ifup   {interface}
ifdown {interface}
ping www.baidu.com
netstat
nslookup
  1. 验证netconfig程序的使用。
    控制台输入:netconfig
    进入网络设置(貌似ubuntu不行)

你可能感兴趣的:(Linux,Linux)