设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 综合讨论区 —— LinuxSir.cn
›
shell进阶应用、shell编程
›
bash之递归实例:拷贝库文件,或叫建立chroot jail ...
返回列表
查看:
979
|
回复:
2
bash之递归实例:拷贝库文件,或叫建立chroot jail
[复制链接]
huan
huan
当前离线
积分
462
IP卡
狗仔卡
发表于 2007-3-21 10:08:31
|
显示全部楼层
|
阅读模式
程序代码
[0 No.610 root@huanlf ~/svn/tools]# cat get_ldd.sh
#! /bin/sh
# 用途:拷贝程序/库所依赖的库文件
# 作者:huanlf AT gmail.com
# GPL v2
# ldd
get_so(){
ldd $1 | awk '{ if ($3 ~ /^\//){ print $3 } else if ($1 ~ /^\//){ print $1 } }'
}
# 取得并拷贝符号链接
get_link(){
local sym_link=$( readlink $1 )
# 防止相对路径
case $sym_link in
/*);;
*) sym_link=${1%/*}/$sym_link
esac
local sym_path=${sym_link%/*}
[ -d $dst/$sym_path ] || mkdir $dst/$sym_path
[ -e $dst/$sym_link ] || cp -a $sym_link $dst/$sym_link
# 再次检查链接
[ -h $sym_link ] && get_link $sym_link
}
# 取得并拷贝依赖的so库文件
get_ldd(){
local so
for so in $( get_so $1 ); do
path=${so%/*}
[ -d $dst/$path ] || mkdir -p $dst/$path
[ -e $dst/$so ] || cp -a $so $dst/$so
[ -h $so ] && get_link $so
get_ldd $so
done
}
# -------------main----------------
if [ "$#" != 2 ]; then
echo "用法: get_ldd 程序 目标文件夹"
echo
exit
fi
app=$1; shift
dst=$1; shift
case $app in
./*|/*);;
*) [ -f $app ] || app=`which $app`;;
esac
[ -z $app ] && {
echo "没有找到$app"
exit 1
}
mkdir -p $dst || exit $?
get_ldd $app
复制代码
# 运行并查看结果
[0 No.611 root@huanlf ~/svn/tools]# ./get_ldd.sh ls ls-chroot
[0 No.612 root@huanlf ~/svn/tools]# tree ls-chroot
ls-chroot
`-- lib
|-- ld-2.4.so
|-- ld-linux.so.2 -> ld-2.4.so
|-- libacl.so.1 -> libacl.so.1.1.0
|-- libacl.so.1.1.0
|-- libattr.so.1 -> libattr.so.1.1.0
|-- libattr.so.1.1.0
|-- libc-2.4.so
|-- libc.so.6 -> libc-2.4.so
|-- libdl-2.4.so
|-- libdl.so.2 -> libdl-2.4.so
|-- libpthread-2.4.so
|-- libpthread.so.0 -> libpthread-2.4.so
|-- librt-2.4.so
|-- librt.so.1 -> librt-2.4.so
|-- libselinux.so.1
`-- libsepol.so.1
1 directory, 16 files
复制代码
# 构建chroot jail运行测试
[0 No.613 root@huanlf ~/svn/tools]# cp `which ls` ls-chroot/
[0 No.614 root@huanlf ~/svn/tools]# chroot ls-chroot/ ./ls -R
.:
lib ls
./lib:
ld-2.4.so libacl.so.1.1.0 libc-2.4.so libdl.so.2 librt-2.4.so libsepol.so.1
ld-linux.so.2 libattr.so.1 libc.so.6 libpthread-2.4.so librt.so.1
libacl.so.1 libattr.so.1.1.0 libdl-2.4.so libpthread.so.0 libselinux.so.1
[0 No.615 root@huanlf ~/svn/tools]#
复制代码
可以看出
只要加上一行代码
把要运行的二进制放入去
一个chroot jail就建好了:)
欢迎提出意见
P.S. svn位于
http://svn.inlsd.org/svn/inlsd/tools/get_ldd.sh
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
DoDo
DoDo
当前离线
积分
1538
IP卡
狗仔卡
发表于 2007-3-21 10:56:25
|
显示全部楼层
不错, 收藏了.
以前出于某些目的也常临时建立一些这些小环境, 但一直是手工的, 却从未考虑过写个程序自动完成. 感谢楼主
回复
支持
反对
使用道具
举报
显身卡
seamonkey
seamonkey
当前离线
积分
2746
IP卡
狗仔卡
发表于 2007-3-21 12:52:37
|
显示全部楼层
很好的思路。
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
LFS(LinuxfromScratch)
Linux 输入开发与研究
BSD 讨论专题
Ubuntu Linux 专题讨论
开源软件专题讨论
硬件设备 Linux 驱动
Archlinux讨论区
红旗 REDFLAG Linux
Linux 基础讨论区(新手速成)
Redhat/Fedora/CentOS Linux
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表