0

0

使用Linux+Python高端运维班作业记录

高洛峰

高洛峰

发布时间:2017-03-22 11:05:47

|

1801人浏览过

|

来源于php中文网

原创

本次作业内容:

1、写一个脚本,完成如下功能

    (1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;

    (2) 如果存在,则显示此设备上的所有分区信息;

答:

立即学习Python免费学习笔记(深入)”;

#!/bin/bash
#
if [ $# -ne 1 ]; then
echo "Please enter a disk device."
exit 2
fi
if [ -b $1 ]; then    
fdisk -l $1
else
echo "this disk device is not exist."
fi

2、写一个脚本,完成如下功能

   传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一;

   (1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.gz;

   (2) 如果参数1的值为bzip2,则使用tar和bzip2归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.bz2;

   (3) 如果参数1的值为xz,则使用tar和xz归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.xz;

   (4) 其它任意值,则显示错误压缩工具,并执行非正常退出;

答:

立即学习Python免费学习笔记(深入)”;

#!/bin/bash
#
[ -d /backups ] || mkdir /backups
read -p "pelase input a argu(gzip/bzip2/xz):" argu
 
case $argu in
gzip)
tar -Pzcf /backups/etc-`date +%Y%m%d`.tar.gz /etc 
;;
bzip2)
tar -Pjcf /backups/etc-`date +%Y%m%d`.tar.bz2 /etc
;;
xz)
tar -PJcf /backups/etc-`date +%Y%m%d`.tar.xz /etc
;;
*)
echo "error compression tools"
;;
esac

3、写一个脚本,接受一个路径参数:

   (1) 如果为普通文件,则说明其可被正常访问;

   (2) 如果是目录文件,则说明可对其使用cd命令;

   (3) 如果为符号链接文件,则说明是个访问路径;

   (4) 其它为无法判断;

答:

立即学习Python免费学习笔记(深入)”;

if [ $# -lt 1 ];then
echo "please input a url"
fi
if [ -L $1 ];then
echo "this is a access url"
elif [ -d $1 ];then
echo "can use cd common"
elif [ -f $1 ];then
echo "normal access"
else
echo "unknow"
fi

4、写一个脚本,取得当前主机的主机名,判断

   (1) 如果主机名为空或为localhost,或为"(none)",则将其命名为mail.magedu.com;

   (2) 否则,显示现有的主机名即可;

答:

立即学习Python免费学习笔记(深入)”;

#!/bin/bash
hostname=`hostname`
if [ $hostname == localhost -o $hostname == none ];then
hostname mail.magedu.com
else
echo $hostname
fi

5、写一个脚本,完成如下任务 :

   (1) 按顺序分别复制/var/log目录下的每个直接文件或子目录至/tmp/test1-testn目录中;

   (2) 复制目录时,才使用cp -r命令;

   (3) 复制文件时使用cp命令;

   (4) 复制链接文件时使用cp -d命令;

   (5) 余下的所有类型,使用cp -a命令;

答:

立即学习Python免费学习笔记(深入)”;

#!/bin/bash
mkdir /tmp/test1-testn
path="/tmp/test1-testn"
for file in /var/log/*;do
        if [ -d$file ]; then
                cp-r $file $path
        elif [ -L$file ];then
                cp-d $file $path
        elif [ -f$file ];then
                cp$file $path
        else
                cp-a $file $path

6、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)

答:

立即学习Python免费学习笔记(深入)”;

CentOS主机按以下顺序启动
(1)POST     加电自检        
(2)BIOS     读取CMOS中的BIOS设置的参数来识别基础硬件,寻找到启动设备        
(3)MBR          (1)读取启动设备MBR中前446字节的bootloader        
                (2)读取MBR后的扇区用来识别grub以及内核kernel所在的区域        
                (3)启动grub        
(4)GRUB     显示菜单界面,选择运行内核kernel;配置文件是/boot/grub/grub.conf        
                (1) 提供菜单、并提供交互式接口    
                (2) 加载用户选择的内核或操作系统    
                (3) 为菜单提供了保护机制    
(5)KERNEL   自身初始化        
                (1)探测可识别到的所有硬件设备;    
                (2)加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)    
                (3)以只读方式挂载根文件系统;    
                (4)运行用户空间的第一个应用程序:/sbin/init    
(6)INIT     运行/sbin/init程序,配置文件/etc/inittab和/etc/init/*.conf        
            设置默认运行级别    如:id:3:initdefault:
            运行系统初始脚本    如:si::sysinit:/etc/rc.d/rc.sysinit
                (1) 设置主机名;    
                (2) 设置欢迎信息;    
                (3) 激活udev和selinux;     
                (4) 挂载/etc/fstab文件中定义的文件系统;    
                (5) 检测根文件系统,并以读写方式重新挂载根文件系统;    
                (6) 设置系统时钟;    
                (7) 激活swap设备;    
                (8) 根据/etc/sysctl.conf文件设置内核参数;    
                (9) 激活lvm及software raid设备;    
                (10) 加载额外设备的驱动程序;    
                (11) 清理操作;    
            关闭对应的脚本中需要关闭的服务,启动需要启动服务(实际服务命令位于/etc/rc.d/init.d)        
                l0:0:wait:/etc/rc.d/rc 0    
                l1:1:wait:/etc/rc.d/rc 1    
                ...    
                l6:6:wait:/etc/rc.d/rc 6    
            设置登录终端         
                tty1:2345:respawn:/usr/sbin/mingetty tty1    
                tty2:2345:respawn:/usr/sbin/mingetty tty2    
                ...    
                tty6:2345:respawn:/usr/sbin/mingetty tty6

7、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;

  (1) 为硬盘新建两个主分区;并为其安装grub;

  (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;

Midjourney
Midjourney

当前最火的AI绘图生成工具,可以根据文本提示生成华丽的视觉图片。

下载

  (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;

  (4) 为grub提供配置文件;

  (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

答:

立即学习Python免费学习笔记(深入)”;

添加一块硬盘
~]# fdisk /dev/sdb                                               //将新硬盘sdb分为2个主区
~]# mke2fs -t ext4 /dev/sdb{1,2}                                //格式化分区
~]# mount /dev/sdb1 /mnt                                         //挂载分区1到/mnt目录
~]# grub-install --root-directory=/mnt /dev/sdb                  //安装grub到分区1上
~]# cp /boot/initramfs-2.6.32-504.el6.i686.img /mnt/initramfs    //复制内核文件
~]# cp /boot/vmlinuz-2.6.32-504.el6.i686 /mnt/vmlinuz            //复制ramdisk文件
~]# vim /mnt/boot/grub/grub.conf                                 //创建grub.conf文件
    default=0
    timeout=5
    title CentOS6(test)
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
    initrd /initramfs
~]# umount /dev/sdb1                                              //卸载分区1
~]# mount /dev/sdb2 /mnt                                          //挂载分区2
~]# mkdir -p /mnt/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp}
~]# mkdir -p /mnt/{usr/{bin,sbin,lib,lib64},var{lib,lib64,log,local,cache},proc,sys,selinux}
~]# cp /bin/{bash,ls,cat} /mnt/bin
~]# cp `ldd /bin/{bash,ls,cat}|grep -eo "/lib.*[[:space:]]"|
    sort -u` /mnt/lib                                             //复制lib文件
~]# sync                                                          //同步
~]# init 6                                                        //重启主机
重启后进入bios设置 调整硬盘启动顺序后保存退出。

8、写一个脚本

  (1) 能接受四个参数:start, stop, restart, status

   start: 输出“starting 脚本名 finished.”

   ...

  (2) 其它任意参数,均报错退出;

答:

立即学习Python免费学习笔记(深入)”;

#!/bin/bash
#
if [ $# -eq 1 ];then
    case $1 in
    start)
        echo "starting $0 finished."
        ;;
    stop)
        echo "stopping $0 finished."
        ;;
    restart)
        echo "restart $0 finished."
        ;;
    status)
        echo "status $0 finished."
        ;;
    *)
        echo "error 2"
        exit 1
        ;;
    esac
else
    echo "error 1"
fi

9、写一个脚本,判断给定的用户是否登录了当前系统;

  (1) 如果登录了,则显示用户登录,脚本终止;

  (2) 每3秒钟,查看一次用户是否登录;

答:

立即学习Python免费学习笔记(深入)”;

#!/bin/bash
#
if id $1 &>/dev/null && [ $# -eq 1 ] ;then    
    until  w |grep "^$1\>" &>/dev/null;do
        sleep 3
        echo "seaching..."    
    done
    echo "$1 is online."
else
    echo "UserId is error."
fi

10、写一个脚本,显示用户选定要查看的信息;

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

   非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

答:

立即学习Python免费学习笔记(深入)”;

#!/bin/bash
#
cat << EOF
cpu)    display cpu info
mem)    display memory info
disk)   display disk info
quit)   quit
==============================
EOF
read -p "Enter a option: " option
until [ "$option" == 'cpu' -o "$option" == "mem" -o "$option" == "disk" -o "$option" == "quit" ];do
    read -p "Wrong option, Enter again: " option
done
 
case "$option" in 
cpu)
    lscpu
    ;;
mem)
    cat /proc/meminfo
    ;;
disk)
    fdisk -l
    ;;
*)
    echo "Quit..."
    exit 0
    ;;
esac

11、写一个脚本

  (1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;

  (2) 提示用户输入一个用户名或输入“quit”退出;

    当输入的是用户名,则调用函数显示用户信息;

    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit: 

答:

立即学习Python免费学习笔记(深入)”;

#!/bin/bash
#
function userInfo {
uId=`grep "^$1\>" /etc/passwd | cut -d: -f3`
uShell=`grep "^$1\>" /etc/passwd | cut -d: -f7`
}
read -p "Input a user name or quit: " option
until [ "$option" == "quit" ];do
    if id $option &>/dev/null;then
        userInfo $option
        echo -e "User:\t$option\nUID:\t$uId\nSHELL:\t$uShell"
    else
        echo "Id is wrong."
    fi
    read -p "Input a user name or quit: " option
done

12、写一个脚本,完成如下功能(使用函数)

   (1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;

   (2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;

   (3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;

答:

立即学习Python免费学习笔记(深入)”;

#!/bin/bash
mkdir -p /mnt/sysroot
destPath="/mnt/sysroot"
read -p "enter a command: " command
which --skip-alias ${command} &> /dev/null
[ $? -ne 0 ] && echo "command notfound" && exit 1
binary=`which --skip-alias ${command}`
mkdir -p ${destPath}`dirname ${binary}`
cp --preserve ${binary} ${destPath}${binary}
for lib in `ldd ${binary} | awk ‘(NR>1){print$(NF-1)}‘`;do
        mkdir -p${destPath}`dirname ${lib}`
        cp--preserve ${lib} ${destPath}${lib}
done

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 序列化
Python 序列化

本专题整合了python序列化、反序列化相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.02

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

91

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

27

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

11

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

5

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

5

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

62

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

55

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

27

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.4万人学习

Git 教程
Git 教程

共21课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号