Linux系统裁减之,制作一个极度精简的Linux-用脚本实现自动拷贝命令和依赖库文件

第2章 用脚本实现自动拷贝命令和依赖库文件

这篇文章主要是对我上一篇博文http://blog.51cto.com/linuxprince/2045703加以完善的,前一篇文章中拷贝命令和依赖库文件的过程是完全手工方式的,显得特别LOW,这章把该过程完善一下,用脚本方式实现。

2.1命令具体实现方法

创建脚本文件bincp.sh输入一下内容:

#!/bin/bash

#

DESPATH=/mnt/sysroot

libcp() {

LIBPATH=${1%/*}

[ ! -d $LIBPATH ] && mkdir -p $LIBPATH

[ ! -e $DESPATH$1 ] && cp $1 $DESPATH$LIBPATH

}

bincp() {

BINPATH=${1%/*}

[ ! -d $BINPATH ] && mkdir -p $DESPATH$BINPATH

[ ! -e $DESPATH$1 ] && cp $1 $DESPATH$BINPATH

for LIB in `ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`;

do libcp $LIB;

done

}

bincp /bin/ls

执行一下看看拷贝/bin/ls命令时,都做了哪些操作:

[[email protected] ~]# bash -x bincp.sh

+ DESPATH=/mnt/sysroot

+ bincp /bin/ls

+ BINPATH=/bin

+ '[' '!' -d /bin ']'

+ '[' '!' -e /mnt/sysroot/bin/ls ']'

++ ldd /bin/ls

++ grep -o '/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/librt.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/librt.so.1 ']'

+ cp /lib64/librt.so.1 /mnt/sysroot/lib64

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libacl.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libacl.so.1 ']'

+ cp /lib64/libacl.so.1 /mnt/sysroot/lib64

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libselinux.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libselinux.so.1 ']'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libc.so.6

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libc.so.6 ']'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libpthread.so.0

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libpthread.so.0 ']'

+ cp /lib64/libpthread.so.0 /mnt/sysroot/lib64

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/ld-linux-x86-64.so.2

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/ld-linux-x86-64.so.2 ']'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libattr.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libattr.so.1 ']'

+ cp /lib64/libattr.so.1 /mnt/sysroot/lib64

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libdl.so.2

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libdl.so.2 ']'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libsepol.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libsepol.so.1 ']'

[[email protected] ~]# sync      ?把修改立刻同步到磁盘

注意:此时精简的Linux系统虚拟机不能是启动或挂起状态,必须处于关机状态。

打开精简的Linux系统马上可以看到结果,如下图:

时间: 2024-10-07 20:00:33

Linux系统裁减之,制作一个极度精简的Linux-用脚本实现自动拷贝命令和依赖库文件的相关文章

Linux系统裁减之,制作一个极度精简的Linux-3-为精简的系统增加网络功能和关机重启功能

第3章 为精简的Linux系统增加网络功能和开关机功 在阅读这篇博文之前,建议先阅读我的上两篇博文,而且最好按顺序阅读:(不然可能会觉得我写得不知所云,呵呵!) 第1篇:Linux系统裁减之,制作一个极度精简的Linux-1http://blog.51cto.com/linuxprince/2045703 第2篇:Linux系统裁减之,制作一个极度精简的Linux-2-用脚本实现自动拷贝命令和依赖库文件http://blog.51cto.com/linuxprince/2046142 3.1 为

Linux系统裁减之,制作一个极度精简的Linux-5-重新编译login去除对pam模块的依赖

第5章 重新编译login去除对pam模块的依赖 在阅读这篇博文之前,建议先阅读我的前4篇博文,而且最好按顺序阅读:(不然可能会觉得我写得不知所云,呵呵!) 第1篇:Linux系统裁减之,制作一个极度精简的Linux-1 http://blog.51cto.com/linuxprince/2045703 第2篇:Linux系统裁减之,制作一个极度精简的Linux-2-用脚本实现自动拷贝命令和依赖库文件 http://blog.51cto.com/linuxprince/2046142 第3篇:L

Linux系统裁减之,制作一个极度精简的Linux-4-为精简的Linux 系统增加用户登录功能

第4章 为精简的Linux 系统增加用户登录功能 4.1下载mingetty和login程序源码 本文使用的CentOS 5.11的源代码都在官方源码网站http://vault.centos.org可以下载, 到http://vault.centos.org/5.11/os/Source/查找mingetty和login程序,如下图: ? ? mingetty和login程序分别属于mingetty-1.07-5.2.2和util-linux-2.13-0.59.el5_8软件包: [[ema

一般的linux系统默认安装的vim是精简版

一般的linux系统默认安装的vim是精简版(vim-tiny),所以不能配置语法检查等属性或获取在线帮助.需要安装vim-x:x.x.x,vim-common,vim-runtime. :syntax on 启动语法检查 或 :set syntax=sh :set hlsearch 搜索高亮 :set tabstop=4 tab为多少个空格 :set autoindent 自动缩进,即与上一行对其 可以将这些配置放在~/.vimrc中,不带冒号,一行一个命令.

linux系统如何更改字符集的支持,解决Linux中文显示乱码使centos显示中文

linux系统如何更改字符集的支持 怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码.出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导致的.咗嚛本经验以centos为例,操作Linux怎么查看语言,设置修改语言 主要是更改/etc/locale.conf文件.centos7之前的版本的配置文件为:/etc/sysconfig/i18n 查看当前系统语言 登陆linux系统打开操作终端之后,输入 

老男孩教育每日一题-2017年4月5日-统计你的linux系统的history历史记录,得出你最喜欢使用的前10个命令

统计你的linux系统的history历史记录,得出你最喜欢使用的前10个命令 方法一:awk数组方法 [[email protected] ~]# history |awk '{h[$2]++}END{for(key in h)printkey,h[key]}' |sort -rnk2|head awk 279 ll 78 cat 66 cd 41 ls 34 find 32 echo 32 man 30 sed 27 vim 26 #优雅的显示可以加上 |column -t  即可  [[e

(扩展根目录容量方法汇总)把Linux系统迁移到另一个分区或者硬盘

Linux系统扩容方法汇总 相信很多朋友都有过这样的经历,本想装个Ubantu玩玩,没想到玩久了反而不习惯Windows了,然而开始装系统的时候只分配了非常小的空间,那应该怎样扩展我们的ubantu呢?下面我为大家总结几种方法(仅在ubantu下测试过) 一.通过系统整体迁移 首先:进入Windows,右键  "此计算机(计算机)"--> "管理" -->计算机管理(本地)--> 存储 -->磁盘管理(本地) -->找到一个比较大的分区

Linux系统的启动流程以及做个小小的Linux

内核的作用     进程管理:进程间切换     内存管理:内存空间分割为内核空间和用户空间     IO管理:对底层硬件的使用必须由内来实现,不能由用户空间进程来实现     文件系统管理     驱动程序管理     安全管理:包括netfilter模块和selinux模块等 内核的设计模式     单内核:模块都是集成在内核内部(Linux是单内核)     微内核:模块都是独立的,随用随加载(Windows是微内核)     Ps:1.linux是单内核,但是广泛采用了微内核的设计思想

linux系统搭建(二)--busybox搭建小型linux

前提: 1.一个作为宿主机的Linux(Redhat Enterprise Linux 5.9): 2.宿主机上提供一块额外的硬盘作为新系统的存储盘(IDE接口): 3.Linux内核源码(linux-2.6.18)和busybox源码(busybox-1.20.2). 4.VMware平台:VMware Workstation 12 Pro 一.硬盘分区和挂载 1.硬盘分区情况 2.硬盘在宿主机上的挂载 # mount /dev/hda1 /mnt/boot# mount /dev/hda2