Linux中chroot与pivot_root的区别
来源:互联网 发布:lego ev3编程中文下载 编辑:程序博客网 时间:2024/06/07 03:16
1. chroot: 在指定的root目录运行命令
参考"info root"中的例子,我把/bin/ls拷贝至~/myroot后,
运行"$ sudo chroot ~/myroot /ls -Rl /", 结果得到下面的错误结果:
“chroot: cannot run command `/ls': No such file or directory”.
事实上,"info root"中提到,如果执行的命令属于动态链接可执行文件,需要把依赖的共享库文件拷贝到新的root相关目录中。
运行,"$ ldd ~/myroot/ls",发现依赖于以下库:
“
linux-gate.so.1 => (0x00795000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0x00e7a000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00748000)
libacl.so.1 => /lib/libacl.so.1 (0x00fbf000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00110000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x0053d000)
/lib/ld-linux.so.2 (0x003ba000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x002f5000)
libattr.so.1 => /lib/libattr.so.1 (0x00255000)
”
在myroot下建立lib目录,然后把上诉库文件拷贝至该目录。重新运行chroot,成功。
chroot通常用于运行一些不可靠的程序,这样比较安全。
chroot也通常用于手动建立一个linux系统,属于LFS项目的重要部分。LFS项目(Linux from Scratch),提供方法和建议来建立自己定制的linux系统,包括全部通过源代码。
LFS用于学习linux系统以及定制小的系统非常有帮助。
2. exec命令在当前shell执行一个命令,同时结束该shell。exec可以用于用一种新的shell替换原来的shell,比如 "$exec ksh"。
3. pivot_root: 改变root文件系统
用法:pivot_root new_root put_old
描述:pivot_root把当前进程的root文件系统放到put_old目录,而使new_root成为新的root文件系统。
例子:
从127.0.0.1:/home/qianjiang/nfsroot挂载新的文件系统并且运行init
a. 拷贝sh,ls至nfsroot/bin,以及相关的共享库至nfsroot/lib
b. 在nfsroot下面建立目录old_root
c. mount -o ro 127.0.0.1:/home/qianjiang/nfsroot /mnt
d. cd /mnt
e. pivot_root . old_root
“这个时候,会发现比如"ls /"显示的是nfsroot下面的文件;"ls old_root"显示的是之前文件系统root下面的文件。”
f. exec chroot . sh -c "umount /old_root; exec /sbin/init' \
<dev/console >dev/console 2>&1
pivot_root和chroot的主要区别是,pivot_root主要是把整个系统切换到一个新的root目录,而移除对之前root文件系统的依赖,这样你就能够umount原先的root文件系统。而chroot是针对某个进程,而系统的其它部分依旧运行于老的root目录。
参考"info root"中的例子,我把/bin/ls拷贝至~/myroot后,
运行"$ sudo chroot ~/myroot /ls -Rl /", 结果得到下面的错误结果:
“chroot: cannot run command `/ls': No such file or directory”.
事实上,"info root"中提到,如果执行的命令属于动态链接可执行文件,需要把依赖的共享库文件拷贝到新的root相关目录中。
运行,"$ ldd ~/myroot/ls",发现依赖于以下库:
“
linux-gate.so.1 => (0x00795000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0x00e7a000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00748000)
libacl.so.1 => /lib/libacl.so.1 (0x00fbf000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00110000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x0053d000)
/lib/ld-linux.so.2 (0x003ba000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x002f5000)
libattr.so.1 => /lib/libattr.so.1 (0x00255000)
”
在myroot下建立lib目录,然后把上诉库文件拷贝至该目录。重新运行chroot,成功。
chroot通常用于运行一些不可靠的程序,这样比较安全。
chroot也通常用于手动建立一个linux系统,属于LFS项目的重要部分。LFS项目(Linux from Scratch),提供方法和建议来建立自己定制的linux系统,包括全部通过源代码。
LFS用于学习linux系统以及定制小的系统非常有帮助。
2. exec命令在当前shell执行一个命令,同时结束该shell。exec可以用于用一种新的shell替换原来的shell,比如 "$exec ksh"。
3. pivot_root: 改变root文件系统
用法:pivot_root new_root put_old
描述:pivot_root把当前进程的root文件系统放到put_old目录,而使new_root成为新的root文件系统。
例子:
从127.0.0.1:/home/qianjiang/nfsroot挂载新的文件系统并且运行init
a. 拷贝sh,ls至nfsroot/bin,以及相关的共享库至nfsroot/lib
b. 在nfsroot下面建立目录old_root
c. mount -o ro 127.0.0.1:/home/qianjiang/nfsroot /mnt
d. cd /mnt
e. pivot_root . old_root
“这个时候,会发现比如"ls /"显示的是nfsroot下面的文件;"ls old_root"显示的是之前文件系统root下面的文件。”
f. exec chroot . sh -c "umount /old_root; exec /sbin/init' \
<dev/console >dev/console 2>&1
pivot_root和chroot的主要区别是,pivot_root主要是把整个系统切换到一个新的root目录,而移除对之前root文件系统的依赖,这样你就能够umount原先的root文件系统。而chroot是针对某个进程,而系统的其它部分依旧运行于老的root目录。
0 0
- Linux中chroot与pivot_root的区别
- chroot linux中所有的事务
- Linux ---chroot命令的用处
- linux系统的chroot作用
- Linux中$(( )) 与 $( )的区别
- Linux中( ) 与{ } 的区别
- chroot过程中遇到的问题
- linux中profile与bashrc的区别
- linux中profile与bashrc的区别
- linux 中 return 与exit的区别
- linux中close与shutdown的区别
- Linux中tail与cat的区别
- linux中fork()与vfork()的区别
- linux 中mdelay() 与msleep()的区别
- linux 中mdelay() 与msleep()的区别
- Linux 中mdelay() 与msleep()的区别
- linux中more与less的区别
- Linux中tail与cat的区别
- 黑马程序员_总结15-java基础加强2
- 【Spring】学习点滴
- VS项目属性的一些配置项的总结(important)
- java.lang.IllegalStateException
- NSNumber的常用方法
- Linux中chroot与pivot_root的区别
- cocos2d-x知识巩固-基础篇(2)
- 001_024 Python 让某些字符串大小写不敏感 如比较和查询不敏感 其他敏感
- 分页代码及用法
- R语言学习笔记——读 bigmemory 文档
- UDP中的Connect
- 哈夫曼编码压缩,解压,压缩比,编码表,储存到文件
- Leetcode--3Sum
- sed awk grep 正则表达式