首页 > 系统相关 >北京某大厂Linux系统管理和Shell脚本笔试题

北京某大厂Linux系统管理和Shell脚本笔试题

时间:2024-08-15 20:52:18浏览次数:12  
标签:tmp Shell log -- 系统管理 Linux node1 root VG1

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

#创建一个测试文件
[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 
Hello
World
This is a test

Another line

Last line
[root@node1 ~]# sed -i '/^$/d;s/^/AAA/;s/$/BBB/' /tmp/input.txt 
AAAHelloBBB
AAAWorldBBB
AAAThis is a testBBB
AAAAnother lineBBB
AAALast lineBBB

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

#创建测试文件
[root@node1 ~]# mkdir /tmp/logs

[root@node1 ~]# touch /tmp/logs/{1..5}.log

#node2  IPV4:192.168.110.143
[root@node2 ~]# mkdir -p /tmp/logs

#配置免密访问192.168.110.143服务器
[root@node1 ~]# ssh-keygen -f ~/.ssh/id_rsa -N '' -q

[root@node1 ~]# ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Authorized users only. All activities may be monitored and reported.
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

#测试

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

Authorized users only. All activities may be monitored and reported.
sending incremental file list
1.log
2.log
3.log
4.log
5.log

sent 303 bytes  received 111 bytes  276.00 bytes/sec
total size is 0  speedup is 0.00

#node2:192.168.110.143
[root@node2 ~]# ll /tmp/logs/
total 0
-rw-r--r--. 1 root root 0 Jan 27  2024 1.log
-rw-r--r--. 1 root root 0 Jan 27  2024 2.log
-rw-r--r--. 1 root root 0 Jan 27  2024 3.log
-rw-r--r--. 1 root root 0 Jan 27  2024 4.log
-rw-r--r--. 1 root root 0 Jan 27  2024 5.log

#配置计划任务内容为0 15 * * 1 rsync -avz /tmp/logs/ *.log 192.168.110.143:/tmp/logs
[root@node1 ~]# crontab -e 
no crontab for root - using an empty one
crontab: installing new crontab

[root@node1 ~]# crontab -l
0 15 * * 1 rsync -avz /tmp/logs/ *.log 192.168.110.143:/tmp/logs

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

#创建测试文件
[root@node1 ~]# touch /tmp/test{1..3}_s1.jpg
[root@node1 ~]# vim find.sh
#!/bin/bash

#检查/tmp/back.tar.gz文件是否存在,如果存在则删除
[ -f /tmp/back.tar.gz ] && rm -f /tmp/back.tar.gz

#查找以_s1.jpg结尾的文件并压缩归档到/tmp/back.tar.gz,这里r为来将文件添加到已经存在的归档文件中,如果用c的话就归档一个文件就无法再添加
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
[root@node1 ~]# bash find.sh 
-rw-r--r-- root/root         0 2024-01-27 19:50 tmp/test3_s1.jpg
-rw-r--r-- root/root         0 2024-01-27 19:50 tmp/test2_s1.jpg
-rw-r--r-- root/root         0 2024-01-27 19:50 tmp/test1_s1.jpg

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

RevertInput “this is para1” para2 para3 应该输出:
para3
para2
this is para1 (注:需要注意第一个参数中的空格)

[root@node1 ~]# vim RevertInput.sh
#!/bin/bash
RevertInput() {
        #检测参数设否合法$#为参数长度
        if [ $# -ne 3 ]
        then
                echo 'Illegal parameters'
        else
                echo "$3"
                echo "$2"
                echo "$1"
        fi
}
RevertInput "this is para1" para2 para3
:wq

[root@node1 ~]# sh RevertInput.sh 
para3
para2
this is para1

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

[root@node1 ~]# vgcreate VG1 /dev/sdb   #创建逻辑卷组
  Volume group "VG1" successfully extended

[root@node1 ~]# lvcreate -n LV1 -L 5g VG1  #创建逻辑卷大小为5G
  Logical volume "LV1" created.

[root@node1 ~]# lsblk 
NAME                     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                        8:0    0   20G  0 disk 
├─sda1                     8:1    0    1G  0 part /boot
└─sda2                     8:2    0   19G  0 part 
  ├─openeuler_node1-root 253:0    0   17G  0 lvm  /
  └─openeuler_node1-swap 253:1    0    2G  0 lvm  [SWAP]
sdb                        8:16   0   20G  0 disk 
└─VG1-LV1                253:2    0    5G  0 lvm  
sr0                       11:0    1 17.1G  0 rom  
[root@node1 ~]# lvextend -L +1G /dev/VG1/LV1    #扩容,这里不写"+"意思为扩大到多少,但不能比本身小
  Size of logical volume VG1/LV1 changed from 5.00 GiB (1280 extents) to 6.00 GiB (1536 extents).
  Logical volume VG1/LV1 successfully resized.

[root@node1 ~]# lsblk
NAME                     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                        8:0    0   20G  0 disk 
├─sda1                     8:1    0    1G  0 part /boot
└─sda2                     8:2    0   19G  0 part 
  ├─openeuler_node1-root 253:0    0   17G  0 lvm  /
  └─openeuler_node1-swap 253:1    0    2G  0 lvm  [SWAP]
sdb                        8:16   0   20G  0 disk 
└─VG1-LV1                253:2    0    6G  0 lvm  
sr0                       11:0    1 17.1G  0 rom 
[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 (1536 extents) to 4.00 GiB (1024 extents).
  Logical volume VG1/LV1 successfully resized.

[root@node1 ~]# lsblk
NAME                     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                        8:0    0   20G  0 disk 
├─sda1                     8:1    0    1G  0 part /boot
└─sda2                     8:2    0   19G  0 part 
  ├─openeuler_node1-root 253:0    0   17G  0 lvm  /
  └─openeuler_node1-swap 253:1    0    2G  0 lvm  [SWAP]
sdb                        8:16   0   20G  0 disk 
└─VG1-LV1                253:2    0    4G  0 lvm  
sr0                       11:0    1 17.1G  0 rom  

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

#通过iotop命令检测
[root@node1 ~]# yum install iotop -y #默认没有这个命令
[root@node1 ~]# iotop -o  #动态检测系统示正在进行I/O操作的进程或线程默认从大到小排序


iotop命令详细参数
iotop是一个实时系统监视工具,它可以显示系统中哪些进程在I/O操作上消耗最多的CPU时间。以下是一些常见的选项:
	• -h, --help: 显示帮助信息并退出。
	• -o, --only: 只显示正在进行I/O操作的进程或线程。
	• -b, --batch: 非交互模式。
	• -n NUM, --iter=NUM: 结束前的迭代次数(无限)。
	• -d SEC, --delay=SEC: 迭代之间的延迟(1秒)。
	• -p PID, --pid=PID: 要监视的进程或线程的ID(所有)。
	• -u USER, --user=USER: 要监视的用户(所有)。
	• -P, --processes: 只显示进程,不显示所有线程。
	• -a, --accumulated: 显示累计I/O而不是带宽。
	• -k, --kilobytes: 使用千字节而不是人类友好的单位。
	• -t, --time: 在每行添加时间戳(隐含--batch)。
	• -q, --quiet: 抑制一些头部行(隐含--batch)。

标签:tmp,Shell,log,--,系统管理,Linux,node1,root,VG1
From: https://blog.csdn.net/hagecsdn/article/details/141231397

相关文章

  • Linux驱动入门实验班——SR04超声波模块驱动(附百问网视频链接)
    目录一、工作原理1.触发信号2.回响信号二、接口图​三、编写思路1.构造file_operations结构体2.实现函数,填充结构体3.编写入口函数4.编写中断处理函数5.编写定时器超时函数6.编写出口函数7.声明入口、出口函数以及协议 四、应用程序五、注意事项:六、源码驱动......
  • Linux vmstat命令基本使用
    目录vmstat命令介绍vmstat各个参数的含义procsmemoryswapiosystemcpuvmstat命令使用实例虚拟内存相关知识总结通过vmstat来识别CPU瓶颈:解决CPU瓶颈的办法如下:通过vmstat识别CPU满负荷:通过vmstat识别内存瓶颈:解决内存瓶颈的办法如下:vmstat命令介绍vmstat主要是用来检测虚拟内存的......
  • linux xxx is not in the sudoers file. This incident will be reported.
    前言linux报错:xxxisnotinthesudoersfile.Thisincidentwillbereported.这意味着用户xxx没有在sudoers文件中被授权使用sudo命令。解决su切换到root用户,报错:su:Authenticationfailure使用su-root命令,切换登录root用户成功。su:默认情况下,su命......
  • Linux线程
    一、线程的基本操作pthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg) :此函数用于创建新线程。thread 用于存储新创建线程的标识符,attr 可指定线程属性,start_routine 是线程执行的函数指针,arg 为传递给线程执行......
  • Linux iostat命令基本使用
    目录iostat命令介绍iostat命令帮助iostat帮助信息iostat的选项解释iostat命令基本使用查看iostat工具版本直接使用iostat命令每次间隔5秒,查看3次信息只查看磁盘状态以k或M为单位显示信息显示磁盘I/O详细情况查看cpu状态信息iostat命令的使用总结磁盘模块分析CPU模块分析iostat命......
  • shell编程:集群多主机一键启停服务脚本
    本文任务一、Kafka服务批量启动函数封装二、Kafka服务批量停止函数封装三、Kafka服务状态批量检测函数封装四、Kafka服务一键启停脚本主函数体实现五、进一步抽象脚本,改进为通用的一键启停其他服务的脚本核心知识点知识点1:一键启停多主机集群服务实现知识点2:服务状态检......
  • Kali Linux 三种网络攻击方法总结(DDoS、CC 和 ARP 欺骗)
    一、引言在当今数字化的时代,网络安全成为了至关重要的议题。了解网络攻击的方法和原理不仅有助于我们增强防范意识,更是网络安全领域专业人员必备的知识。KaliLinux作为一款专为网络安全专业人员和爱好者设计的操作系统,提供了丰富的工具来模拟和研究各种网络攻击手段。本文......
  • Linux expect命令
    Linuxexpect命令​ 在Linux系统中,expect是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。expect自动交互流程:​ spawn启动指定进程---expect获取指定关键字---send向指定程序发送指定字符---执行完成退出.使用场景自动化登录和操作远程服务器通......
  • Linux下的gdb日常使用
    100个GDB小技巧0.常用0.1获取源代码行与程序地址之间的对应关系(1)显示当前执行指令所在的源代码行:infoline(2)显示特定函数或源代码行的地址信息:infoline<function-name>|<source-file>:<line-number>例如,要查看函数myFunction的起始地址,可以使用:infolinemy......
  • shell编程中的else exit -1是什么意思
    在编程中,`elseexit-1`是一种控制流语句,通常用于条件判断中。具体来说,这段代码的意思是:如果某个条件不满足(即`else`部分),则执行`exit1`,这表示程序将以状态码`-1`退出。 这里的`exit`是一个系统调用或函数,用于终止程序的执行。退出状态码是一个整数,通常用于表示程序......