Linux实验步骤(二)

一、实验内容:

先创建用户家目录下创建文件名为“姓名+学号+02”的子目录,作为本次实验目录,本次实验的所有代码都放到该目录下。要求将所有源代码与数据文件打包成文件lab2.tar.gz,与实验报告一起提交。
预备任务(可不保存该任务源代码,但后面的任务要将源代码打包保存):查看命令类型 type的验证
//type [option] command
//-t 显示命令类型
其中 file :外部命令 alias: 别名 builtin:内部命令
//-p显示完整的路径
//-a显示所有匹配命令
[s2@centos8 ~]$ type ls
ls 是 `ls --color=auto’ 的别名
[s2@centos8 ~]$ type -t ls
alias
[s2@centos8 ~]$ type -t cd
builtin
[s2@centos8 ~]$ type -t date
file

任务1:将某用户最近使用过的20条命令行保存到一个文件中,并用vi编辑,删除命令行前的序号。
history|tail -20<<f1.txt
vim f1.txt
esc->ctrl+v->j->xx
删除第一列 在命令模式下ctrl+v 按下j(连续按下) 按下xx 可删除某一列

任务2. 验证如下脚本功能(理解每条语句注释,及脚本功能描述):

username=$1 //将第一个位置参数赋值给username

[ -z $username]&&read -p “Please Input Username:” username

//如果username长度为0那么 重新输入 username

w -h|grep -q “^$username”|| { echo $username do not login;exit 1;}

//w 命令用于显示已经登录系统的用户列表 -h 不打印头信息

// 检查用户是否登录 若没有登录 输出echo $username do not login;exit 1;

echo -n InputMessage to Send: // echo -n 不输出行尾的换行符

//输出Input Message to Send:

read msg //键盘输入msg

if echo$msg|write $username 2>/dev/null

// 2> 标准输出错误

//将msg 的值赋给(发送给)username 将错误信息输入/dev/null

then echo Send Message successfully!!

//若成功,就输出Send Messagesuccessfully!!

else echo Send Message fail!!

//否则 输出Send Message fail!!

Fi

//结束

任务3. 验证:编写脚本统计指定目录中普通文件的个数、目录的个数、链接文件的个数。

#! /bin/bash
//定义变量分别统计文件个数
a=0
b=0
c=0
//for循环
for s in ls *
do
[ -L “$s” ] && let c=c+1

    [ -f ”$s“ ] && let a=a+1
    [ -d “$s” ] && let b=b+1

done
echo 普通文件: a 目录文件: a 目录文件: a目录文件:b 链接文件: $c

任务4:验证:编写一个脚本名称为backup.sh,将第二个位置参数及其以后各参数所指定目录中的以.c和.sh结尾的,且文件大小不为0的文件复制到第一个位置参数所指定的目录中。(注:要求检查位置参数的合法性)

#! /bin/bash

[ $# -lt 2 ]&&{
echo 参数不够
exit 1
}

a=$3;//第二个位置
b=$2;//第一个位置
[ -d $b ]||{
echo 目录不存在

}

for s in $b/*.c b / ∗ . s h d o [ − s " b/*.sh do [ -s " b/.shdo[s"s" ]&& cp $s $a
done

//代码测试

//将根目录下 以.c .sh 结尾的文件复制到 dir3目录下
[s2@centos8 ~]$ ./backup.sh dir3 ~
[s2@centos8 ~]$ ls dir3
backup.sh dir31 f1.sh feb.c hello.c tongji.sh

任务5: 编写Shell脚本实现如下菜单界面:
Menu

  1. exit
  2. edit file
  3. date
  4. calc
    #?

任务6:编写Shell脚本,实现批量添加用户功能,要求如下:
1)用户名格式统一,为相同字符串加数字编号,如qwe1-qwe9
2)用户密码与用户名相同

任务7:编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match”,并显示“End of program”,如果不同则显示“End of program” (先用 vi 或 cat>命令建立脚本)

二、具体步骤

1.创建文件名为“姓名+学号+02”的子目录,代码及结果如下:

mkdir ~/姓名+学号+02

在这里插入图片描述
2.将某用户最近使用过的20条命令行保存到一个文件中,并用vi编辑,删除命令行前的序号,代码及结果如下:

history | tail -20 > ~/姓名+学号+02/f1.txt
vi ~/姓名+学号+02/f1.txt

在命令模式下按下ctrl+v
按下j(连续按下多次)
再按下xx
在这里插入图片描述
3. 验证如下脚本功能,首先先创建脚本shell1,在终端输入vim shell1.sh
在弹出的页面输入代码并退出(按i进入插入模式,退出按esc,输入“:wq”)
运行shell文件,在终端输入sh shell1.sh
输入用户名及发送的内容即可
具体代码及运行结果如下(Linux的注释是以#开头,不是//):

username=$1

# 如果没有输入用户名,则重新输入
[ -z $username ] && read -p "Please Input Username: " username

# 检查用户是否登录
w -h | grep -q "^$username" || {
  echo "$username do not login"
  exit 1
}

# 输出提示信息并读入数据
echo -n "Input Message to Send: "
read msg

# 发送信息
if echo $msg | write $username 2>/dev/null; then
  echo "Send Message successfully!!"
else
  echo "Send Message fail!!"
fi

请添加图片描述
4. 验证:编写脚本统计指定目录中普通文件的个数、目录的个数、链接文件的个数。
首先先创建脚本shell2,在终端输入vim shell2.sh
在弹出的页面输入代码并退出(按i进入插入模式,退出按esc,输入“:wq”)
运行shell文件,在终端输入sh shell2.sh
具体代码及运行结果如下(Linux的注释是以#开头,不是//):

#!/bin/bash

# 定义变量分别统计文件个数
a=0
b=0
c=0

# for循环
for s in ls *
do
  [ -L "$s" ] && let c=c+1
  [ -f "$s" ] && let a=a+1
  [ -d "$s" ] && let b=b+1
done

echo "普通文件:$a 目录文件:$b 链接文件:$c"

请添加图片描述5. 验证:编写一个脚本名称为backup.sh,将第二个位置参数及其以后各参数所指定目录中的以.c和.sh结尾的,且文件大小不为0的文件复制到第一个位置参数所指定的目录中。(注:要求检查位置参数的合法性)
首先先创建脚本backup.sh,在终端输入vim backup.sh
在弹出的页面输入代码并退出(按i进入插入模式,退出按esc,输入“:wq”)(原文件提供的代码有误,例如变量顺序是1,2不是2,3、cp指令的源文件夹和目标文件夹顺序、变量却少双引号等)
运行shell文件,在终端输入./backup.sh ~ dir3
(dir3为自己在文件夹根目录新创建的文件夹)
具体修改后代码及运行结果如下(Linux的注释是以#开头,不是//):

#! /bin/bash
 
[ $# -lt 2 ]&&{
echo 参数不够
exit 1
}
 
a=$2
b=$1
[ -d $b ]||{
echo 目录不存在
 
}
 
for s  in $b/*.c $b/*.sh
do
   [ -s "$s" ]&& cp "$s" "$a/"
done

6.编写Shell脚本实现如下菜单界面:
Menu

  1. exit
  2. edit file
  3. date
  4. calc
    #?
    首先先创建脚本shell3,在终端输入vim shell3.sh
    在弹出的页面输入代码并退出(按i进入插入模式,退出按esc,输入“:wq”)
    运行shell文件,在终端输入sh shell3.sh
#!/bin/bash

while true; do
  echo "Menu"
  echo "1) exit"
  echo "2) edit file"
  echo "3) date"
  echo "4) calc"
  echo "#?"

  read choice

  case $choice in
    1)
      exit
      ;;
    2)
      echo -n "Please input filename: "
      read filename
      vi $filename
      ;;
    3)
      date
      ;;
    4)
      echo -n "Please input expression: "
      read exp
      echo "scale=2;$exp" | bc
      ;;
    *)
      echo "Invalid choice"
      ;;
  esac
done

在这里插入图片描述
7. 编写Shell脚本,实现批量添加用户功能,要求如下:
1)用户名格式统一,为相同字符串加数字编号,如qwe1-qwe9
2)用户密码与用户名相同
首先先创建脚本shell4,在终端输入vim shell4.sh
在弹出的页面输入代码并退出(按i进入插入模式,退出按esc,输入“:wq”)
创建账户需要权限,进入root,在终端输入su root,输入密码
运行shell文件,在终端输入sh shell4.sh
在账户设置可以看到用户成功创建

#!/bin/bash

for i in {1..9}
do
  username=qwe$i
  password=$username
  useradd -m -p $(openssl passwd -1 $password) $username
done

在这里插入图片描述
请添加图片描述
请添加图片描述
8. 编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match”,并显示“End of program”,如果不同则显示“End of program” (先用 vi 或 cat>命令建立脚本)
首先先创建脚本shell5,在终端输入vim shell5.sh
在弹出的页面输入代码并退出(按i进入插入模式,退出按esc,输入“:wq”)
运行shell文件,在终端输入sh shell5.sh
具体代码及运行结果如下(Linux的注释是以#开头,不是//):

#!/bin/bash

echo -n "Please input the first word: "
read word1

echo -n "Please input the second word: "
read word2

if [ "$word1" = "$word2" ]; then
  echo "Match"
fi

echo "End of program"

在这里插入图片描述
9.最后打包,在终端输入tar -czvf lab2.tar.gz backup.sh shell1.sh shell2.sh shell3.sh shell4.sh shell5.sh,找到压缩包
在这里插入图片描述

一、 实验目的 1、 通过实验了解和熟悉Linux文件系统 2、 掌握文件操作命令 3、 了解文件与目录的默认权限,掌握文件权限的设置 4、 掌握文件的链接 、 开发工具和运行环境 1、虚拟机VMware 2、Linux操作系统 三、 实验内容 1、了解和熟悉Linux文件系统 了解Linux文件系统、文件命名、文件类型和常见目录:根目录(/)、 .bin、boot、dev、etc、home、Lib、lost+found、 opt、root、 usr、mnt、proc、sbin、 tmp、 var. 2、文件操作命令: (文件和目录名自拟、自行设计实验步骤) (1) 1s: 显示目录内容 -a显示指定目录下所有的目录与文件 -1以 长格式显示文件的详细信息。 -d显示目录本身信息 i显示索引号 (2) cd:改变当前工作目录 格式: cd [目录名] cd .. 上移- -层目录(注意,需要有空格) cd 移到自己的主目录 (3) cat: 查看文件信息命令 显示文件信息:格式: cat [选项]文件名 -n输出编号 建立文件: cat>新文件名ctrl+d 合并文件: cat 文件1文件2>新文件 (4) more: 逐屏显示文件内容 格式: more 文件名 (5) cp:复制命令 格式: cp [选项] 源文件或目录目标文件或目录 同时可以复制多个文件 -f 出现覆盖情况不提示 -p复制后,保持原有属性。目标文件保持原有的生成日期和inode编号 -r 复制目录目录下的文件 普通用户并不能进行这样的操作,只能切换到root用户然后进行-r的递归复制。 (6) rm: 删除文件与目录 格式: mv [选项] 文件名或目录名 -f删除时不提示 -r 删除目录目录下的文件(常用: -rf ) (7) mv: 文件移动及改名命令 格式: mv [选项]源文件或目录 目 标文件或目录 -f覆盖文件时 不提示 (8) grep: 文件信息检索命令 格式: grep [选项]字符串 [文件 ... ] -i 不区分大小写 (9) sort: 排序命令 格式: sort [选项][文件列表] (10) mkdir 创建目录命令 格式: mkdir [选项] [目录名] 可以同时创建多个目录 p :递归创建目录 -m:创建目录的时候赋予权限 (11) rmdir删除“空”目录命令 格式: rmdir [选项] [目录名] 注意:目录为空才能删除;否则需采用rm - r来删除。 p :递归删除目录,删除子目录,其父目录为空时,也同时删除3、文件权限的设置: (文件和目录名自拟、自行设计实验步骤) 文件的属主与属组 (1) chown [选项] [所有者][:[组]] 文件列表 更改每个文件的所有者和/或所属组。 字母模式形式即“用户对象操作符号操作权限”,其命令格式为:(2) chmod [选项]模式[,模式]文件名 +:添加-:取消=:赋予并取消其他所有 数字形式即由三位八进制数字组成,其命令格式为: chmod八进制模式 文件名 文件的特殊权限: SUID、 SGID 和Sticky 4、文件的链接: (文件和目录名自拟、自行设计实验步骤) (1)硬链接:不带选项,ln命令创建硬链接。在另外的目录或本目录增加目标文件的一个目录项,一个文件就登记在多个目录 1n源文件目标文件 (2)软链接(符号链接):用“1n -s”命令建立符号链接时,最好源文件用绝对路径名,这样可以在任何工作目录下进行符号链接。类似于Windows系统的快捷方式。 In -s源文件目标文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值