作业——拷贝命令及其链接库

1),提示用户输入一个可执行命令的名称

2),获取此命令所依赖额所有库文件列表

3),复制命令至某目标目录(/mnt/sysroot,即把此目录当做根)下的对的路径中

bash,/bin/bash ===> /mnt/sysroot/bin/bash

useradd, /usr/sbin/useradd ===> /mnt/sysroot/usr/sbin/useradd

4),复制此命令所有依赖的所有库文件至目标目录对应的路径下:

/lib64/ld-linux-x86_64.so.2 ==>

/mnt/sysroot/lib64/ld-linux-x86_64.so.2

5,每次复制完成一个命令后,不要退出,而是继续提示用户输入命令,直到输入"quit"菜退出文

blob.png

# 传递给函数可执行命令,复制命令程序和依赖库文件到指定目录 ,并且取掉绝对路径

f_copy_com_lib() {

     command_path=$(which "$1" | grep -v "alias") #获取绝对路径

     temp_dir=${command_path#*/} # 取掉绝对路径

     temp_dir=${temp_dir%/*} # 取掉后面的文件文件名

     mkdir -p $dir_path$temp_dir # 创建/mnt/sysroot下对应的的目录

     cp -rf $command_path  $dir_path$temp_dir

    

    #获取命令路径要注意两个问题:第一个要避开which查出结果有alias别名问题, which COM | grep -v "alias" 除去别名

     #第一步,查出命令路径,第二步,去掉alias,第三步,查出命令所以来的库,第四步,获取库的准确路径

     for lib_file in $( ldd $(which "$1" | grep -v "alias" ) | grep -o "/lib[^[:space:]]*") ; do

     #a_library[$i]=$lib_file # 完整的库文件路径

    

     temp_dir=${lib_file#*/} #取掉绝对路径 ${string#*word} 

     temp_dir=${temp_dir%/*} #去掉基名

     mkdir -p $dir_path$temp_dir #创建一个库文件的路径 

     cp -rf $lib_file   $dir_path$temp_dir  #复制库文件到指定的目录中

     #echo "${a_library[$i]}" #let i++

     echo "$lib_file"

     echo 

done

}

while true ; do

cat << EOF

+++++++++++++++++++++++++++++++++++++++++++++++++

command)Please enter the system existing  command

quit) quit script

+++++++++++++++++++++++++++++++++++++++++++++++++

EOF

read -p "Please enter existing command:" v_command

if [ $v_command == "quit" ] ; then

break

fi

#如果输入的不存在的命令,处理

if ! ( which $v_command &>/dev/null ) ; then

echo "ERROR:command not found!"

continue # 进行下一次循环

fi

f_copy_com_lib  $v_command

don

blob.png

原创文章,作者:不忘初衷,如若转载,请注明出处:http://www.178linux.com/67529

(0)
不忘初衷不忘初衷
上一篇 2017-02-04 11:43
下一篇 2017-02-05 14:54

相关推荐

  • MAN 手册各章节功能介绍及快捷键键位整理

    MAN 手册各章节功能介绍及快捷键键位整理 前言  Man 手册页(Manua pages ,缩写man page) 是在linux操作系统在线软件文档的一种普遍形式。内容包括计算机程序库和系统调用等命令的帮助手册。  手册页是用troff排版软件包排版的,是一组man宏。当时手册页系统带来的联机文档可用性被认为是一项伟大的进步。时至今日…

    Linux干货 2016-10-17
  • 用户和用户组相关的配置文件

    用户和用户组相关的配置文件 一、与用户相关的配置文件 一般来说,与用户配置相关的几个文件如下: l  /etc/passwd: 最重要的文件,存储着用户的用户名,UID,Shell等信息 l  /etc/shadow: 用户密码文件,使用sha-1算法加密存储(注意该文件的权限) l  /etc/skel/: 用户的模板文件,新…

    Linux干货 2016-10-23
  • 文本编辑器vim概述与应用示例

    文本编辑器vim概述与应用示例 文本编辑器概述 vim编辑器是一种易用、功能强大的文本编辑器,可以基于三种不同的模式对文本进行编辑,包括编辑模式、输入模式和末行模式。 编辑模式 模式转换 i 表示在光标所在处插入 a 表示在光标后方插入 o 表示在光标所在处的下一行插入 O 表示在光标所在处的上一行插入 I 表示在光标所在行的行首插入 A 表示在光标所在行的…

    Linux干货 2017-08-06
  • CentOS6+ LAMP+ wordpress 搭建个人博客站

        每个IT工程师都期待拥有一个自己的博客站,本文讲述在CentOS 6系统LAMP环境下使用WordPress框架构建个人博客站的详细过程。     —-构建LAMP环境—- 1,安装apache,mysql php yum install -y httpd mysql…

    2017-07-11
  • bash功能特性四 文件名通配符

    文件名通配(globbing)     通配符在bash中是一个非常有用的功能,它可以使我们更加方便的查找符合特定条件的文件。     文件通配符的包括以下几种:          *:任意长度的任意…

    Linux干货 2015-04-21
  • centos7上实现LAMP,并搭建wordpress

    实验:LAMP的架构,并搭建wordpress              1、准备环境,                      #mkdir src    …

    2017-08-07

评论列表(1条)

  • 马哥教育
    马哥教育 2017-04-10 15:52

    脚本的思路清晰,使用了函数功能,加油!!!