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
语句分析:
- '/^$/ d'是一个删除操作,匹配空行(由^$表示)并删除。
- s/([a-Z].*)/AAA\1BBB/是一个替换操作,匹配任何以大写字母开头的行,并将其替换为AAA、原始行内容和BBB
[root@node1 ~]# sed -r '/^$/ d; s/([a-Z].*)/AAA\1BBB/' /tmp/input.txt
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/
语句分析:
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 root@192.168.78.130
- # rsync是命令本身,用于同步文件和目录。
[root@node1 ~]# rsync -avz /tmp/logs/*.log 192.168.78.130:/tmp/logs/
[root@node3 ~]# mkdir /tmp/logs/
[root@node3 ~]# ll /tmp/logs/
编写计划任务:
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
语句分析:
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
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
[root@node1 ~]# sh Illegal.sh #执行脚本
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
# 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
# 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
6、如何找出当前系统中磁盘I/O读写占用最高的程序:
[root@node1 ~]# yum install iotop -y
[root@node1 ~]# iotop -o
-o, --only: 只显示正在进行I/O操作的进程或线程。