Linux系统管理和Shell脚本笔试题

1、写一个sed命令,修改/tmp/input.txt文件的内容,要求:(1) 删除所有空行;(2) 在非空行前面加一个"AAA",在行尾加一个"BBB",即将内容为11111的一行改为:AAA11111BBB

#写入内容到/tmp/input.txt

[root@node1 ~]# echo -e "Hello\nWorld\nThis is a test\n\nAnother line\n\nLast line" > /tmp/input.txt

[root@node1 ~]# cat /tmp/input.txt

Linux系统管理和Shell脚本笔试题_第1张图片

语句分析:

  • '/^$/ d'是一个删除操作,匹配空行(由^$表示)并删除。
  • s/([a-Z].*)/AAA\1BBB/是一个替换操作,匹配任何以大写字母开头的行,并将其替换为AAA、原始行内容和BBB

[root@node1 ~]# sed -r '/^$/ d; s/([a-Z].*)/AAA\1BBB/' /tmp/input.txt

Linux系统管理和Shell脚本笔试题_第2张图片

 2、周一下午三点将/tmp/logs目录下面的后缀为*.log的所有文件rsync同步到备份服务器192.168.1.100中同样的目录下面,crontab配置项该如何写:

思路:1.创建文件   

           2. 配置免密登入   

           3. rsync将文件传入指定服务器下

           4. 编写 crontab

[root@node1 ~]# mkdir /tmp/logs

[root@node1 ~]# mkdir /tmp/logs/{1..6}.log

[root@node1 ~]# ll /tmp/logs/

Linux系统管理和Shell脚本笔试题_第3张图片

语句分析:

ssh-keygen是一个用于生成、管理和转换SSH密钥的工具。在你提供的命令ssh-keygen -f ~/.ssh/id_rsa -N '' -q中:

  • ssh-keygen是命令本身,用于生成SSH密钥。
  • -f ~/.ssh/id_rsa是-f选项后面跟着的参数,表示生成的密钥文件的路径,这里是~/.ssh/id_rsa。
  • -N ''是-N选项后面跟着的参数,表示密钥的密码,这里是空字符串(''),表示没有密码。
  • -q选项表示安静模式,不显示任何信息。

所以,这个命令的意思是在~/.ssh/id_rsa路径下生成一个没有密码的SSH密钥,并且在生成过程中不显示任何信息

[root@node1 ~]# ssh-keygen -f ~/.ssh/id_rsa -N '' -q

[root@node1 ~]# ssh-copy-id [email protected]

Linux系统管理和Shell脚本笔试题_第4张图片

  • # rsync是命令本身,用于同步文件和目录。

[root@node1 ~]# rsync -avz /tmp/logs/*.log 192.168.78.130:/tmp/logs/

Linux系统管理和Shell脚本笔试题_第5张图片

[root@node3 ~]# mkdir /tmp/logs/

[root@node3 ~]# ll /tmp/logs/

Linux系统管理和Shell脚本笔试题_第6张图片

编写计划任务:

0 15 * * 1 rsync -avz /tmp/logs/*.log 192.168.78.130:/tmp/logs/

[root@node3 ~]# crontab -e

[root@node3 ~]# crontab -l

3、找到/tmp/目录下面的所有名称以"_s1.jpg"结尾的普通文件,如果其修改日期在一天内,则将其打包到/tmp/back.tar.gz文件中

[root@node1 ~]# vim find.sh

#!/bin/bash

#查看/tmp/back.tar.gz 文件是否存在,存在则删除

[ -f /tmp/back.tar.gz ] &&  rm -f /tmp/back.tar.gz

find /tmp/ -type f -name '*_s1.jpg' -mtime -1 -exec tar rf /tmp/back.tar.gz {} \;  2>/dev/null

#查看压缩文件的内容

tar tvf /tmp/back.tar.gz

Linux系统管理和Shell脚本笔试题_第7张图片

语句分析:

find /tmp/ -type f -name '*_s1.jpg' -mtime -1 -exec tar rf /tmp/back.tar.gz {} \;  2>/dev/null

  • find:这是一个用于在文件系统中查找文件的命令。
  • -type f:这个选项告诉find只查找文件(不包括目录)。
  • -name '*_s1.jpg':这个选项告诉find只查找名字以'_s1.jpg'结尾的文件。
  • -mtime -1:这个选项告诉find只查找在过去24小时内修改过的文件。
  • -exec:这个选项允许你对找到的每个文件执行一个命令。在这里,命令是tar rf /tmp/back.tar.gz {} \;,这将把找到的每个文件添加到名为/tmp/back.tar.gz的tar存档中。
  • 2>/dev/null:这个部分将错误输出重定向到/dev/null,也就是说,任何错误信息都会被丢弃,不会显示在控制台上。
  • 所以,整个命令的意思是:在当前目录及其子目录中查找所有在过去24小时内修改过并且名字以'_s1.jpg'结尾的文件,然后把这些文件添加到名为/tmp/back.tar.gz的tar存档中,同时丢弃所有错误信息。

[root@node1 ~]# bash find.sh

Linux系统管理和Shell脚本笔试题_第8张图片

4、写出SHELL函数RevertInput,函数必须获取三个参数,然后将三个参数倒序echo打印出来,函数必须检查参数个数的合法性,如果参数非法,打印 ”Illegal parameters”

RevertInput “this is para1” para2 para3

应该输出:

para3

para2

this is para1

(注:需要注意第一个参数中的空格)

[root@node1 ~]# vim Illegal.sh 

#!/bin/bash

RevertInput() {

 if [ $# -ne 3 ]                             # ne 是not equal 不等于

 then

     echo "Illegal parameters"

 else

     for ((i=3;i>=1;i--))

     do

        echo ${!i}                         #变量的间接引用 “{!}”

     done

  fi

}

RevertInput "this is para1" para2 para3

[root@node1 ~]# cat  Illegal.sh 

Linux系统管理和Shell脚本笔试题_第9张图片

 [root@node1 ~]# sh Illegal.sh            #执行脚本

Linux系统管理和Shell脚本笔试题_第10张图片

5、如果一个系统使用LVM进行分区管理,请写出调整一个逻辑卷分区大小的命令:

[root@node1 ~]# vgcreate VG1 /dev/sda             

  Physical volume "/dev/sda" successfully created.

  Volume group "VG1" successfully created

[root@node1 ~]# lvcreate -n LV1 -L 5g VG1

  Logical volume "LV1" created.

#  lsblk是一个在Linux中用于列出所有连接到系统的块设备的命令。

[root@node1 ~ ]# lsblk

Linux系统管理和Shell脚本笔试题_第11张图片

#  lvextend是命令本身,用于扩展逻辑卷的大小。

#  -L +1G是-L选项后面跟着的参数,表示要增加的大小,这里是+1G,表示增加1GB

[root@node1 ~]# lvextend -L +1G /dev/VG1/LV1

  Size of logical volume VG1/LV1 changed from 5.00 GiB (128nts) to 6.00 GiB (1536 extents).

  Logical volume VG1/LV1 successfully resized.

[root@node1 ~]# lsblk  

Linux系统管理和Shell脚本笔试题_第12张图片

#  lvreduce是一个用于减小逻辑卷大小的命令

#  -L -2G是-L选项后面跟着的参数,表示要减少的大小,这里是-2G,表示减少2GB

[root@node1 ~]# lvreduce -L -2g /dev/VG1/LV1

  WARNING: Reducing active logical volume to 4.00 GiB.

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce VG1/LV1? [y/n]: y

  Size of logical volume VG1/LV1 changed from 6.00 GiB (153nts) to 4.00 GiB (1024 extents).

  Logical volume VG1/LV1 successfully resized.

[root@node1 ~]# lsblk

Linux系统管理和Shell脚本笔试题_第13张图片

 6、如何找出当前系统中磁盘I/O读写占用最高的程序:

[root@node1 ~]# yum install iotop -y 

 [root@node1 ~]# iotop -o

  -o, --only: 只显示正在进行I/O操作的进程或线程。

你可能感兴趣的:(linux,服务器,shell)