chroot
将根目录更改为指定的目标目录。
补充说明
chroot 命令用于在指定的根目录下运行指令。chroot 是 change root directory (更改根目录)的缩写。在 Linux 系统中,默认的目录结构是以 / 作为根目录的起点。而使用 chroot 后,系统的目录结构将会以指定的位置作为新的根目录。
通过 chroot 命令,系统将会读取指定位置的目录和文件,而不再是旧的根目录下的目录结构和文件。因此,chroot 命令带来的好处主要有以下三个方面:
- 增强系统安全性,限制用户权限:
在经过
chroot后,在新的根目录下无法访问到旧的系统根目录结构和文件,从而提高了系统的安全性。通常情况下,可以在登录之前使用chroot,使得用户无法访问特定文件。 - 建立与原系统隔离的目录结构,方便用户开发:
使用
chroot后,系统将读取新的根目录下的目录和文件,这是一个与原系统根目录下文件无关的目录结构。可以在这个新环境中进行软件的静态编译和与系统无关的独立开发。 - 切换系统的根目录位置,引导 Linux 系统启动和救援系统等:
chroot的作用是切换系统的根位置,在系统初始化启动磁盘处理过程中使用最为明显。通过切换初始 RAM 磁盘 (initrd) 中的根位置,并执行真正的 init 进程。此外,在系统出现问题时,也可以使用chroot切换到临时系统进行救援操作。
语法
代码语言:javascript复制chroot [选项] [参数]选项
--help:显示在线帮助信息。--version:显示版本信息。
参数
- 目录:指定新的根目录。
- 指令:指定要执行的指令。
实例
将 target 作为根目录(运行其中的 /bin/sh):
chroot target /bin/sh在这里,target 是已经安装好的 BusyBox 的路径,类似于一个包含许多工具的文件系统。通过该命令,将进入一个以 target 为根的 shell 界面。通过运行 exit 命令退出该 shell,即可返回到原来的本机环境。也可以使用 Ctrl D 快捷键。
注意:
- 只有 root 用户才能执行该命令。
- 如果直接使用
chroot target,默认将寻找target中的/bin/bash。这将以target作为根目录。 - 将
target作为根目录(运行其中的/bin/ls):
chroot target /bin/ls在这里,target 是已经安装好的 BusyBox 的路径,类似于一个包含许多工具的文件系统。通过该命令,运行的是 target 中的 ls 命令(而不是本机的 /bin/ls),然后立即返回到原来的目录环境。
请注意,如果自己在本地编译一个程序生成 a.out,并将其复制到 target/bin/ 目录中,上述操作是行不通的。因为它包含了动态链接的库,需要使用 ldd 命令查看 a.out 需要哪些动态库,并将这些库复制到新根目录的对应路径下才能执行。
可以使用 chroot 运行自己编译的程序:
- 准备
chroot的根目录:
mkdir newRoot- 编译自己的程序:
gcc main.c在这里,main.c 生成了 a.out,其功能是输出 “hello”。
- 查看程序需要的库:
ldd a.out输入该命令后,会输出如下内容:
代码语言:javascript复制linux-gate.so.1 => (0xb8034000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7eab000)
/lib/ld-linux.so.2 (0xb801a000)- 将程序需要的库和程序复制到新根目录下:
cp a.out newRoot
mkdir newRoot/lib
cp /lib/tls/i686/cmov/libc.so.6 newRoot/lib
cp /lib/ld-linux.so.2 newRoot/lib在这里,newRoot 的内容将如下所示:
a.out
lib/- 使用
chroot运行自己编译的程序:
su
chroot newRoot /a.out这样就可以正确运行 a.out 了,因为 a.out 使用了其他动态链接库,所以需要将这些库复制到 newRoot 中。如果没有其他库的话,直接复制 a.out 即可运行。例如,静态编译后的 BusyBox,其安装目录中的 /bin/busybox 就没有依赖其他库。
clock
用于调整 RTC 时间。
补充说明
clock 命令用于调整 RTC 时间。RTC 是计算机内置的硬件时钟,执行该命令可以显示当前时间,调整硬件时钟的时间,将系统时间设置为与硬件时钟一致,或将系统时间回写到硬件时钟中。
语法
代码语言:javascript复制clock [选项]选项
--adjust:第一次使用--set或--systohc参数设置硬件时钟时,在/etc目录下生成一个名为adjtime的文件。当再次使用这两个参数调整硬件时钟时,该文件将记录两次调整之间的差异值。日后执行带有--adjust参数的clock命令时,程序会根据记录文件的差异值计算平均值,并自动调整硬件时钟的时间。--debug:详细显示指令的执行过程,便于排错或了解程序的执行情况。--directisa:告诉clock命令不要通过/dev/rtc设备文件,直接对硬件时钟进行读写。这个参数适用于只有 ISA 总线结构的老式计算机。--getepoch:将系统核心内的硬件时钟新纪元数值显示在标准输出设备上。--hctosys:将硬件时钟的时间设定为与系统时间一致。由于这个操作会导致系统全面更新文件的访问时间,因此最好在系统启动时执行。--set --date="<日期时间>":设置硬件时钟的日期和时间。--setepoch --epoch=<年份>:设置系统核心的硬件时钟的新纪元数值,年份以四位数字表示。--show:读取硬件时钟的时间,并将其显示在标准输出设备上。--systohc:将系统时间存储到硬件时钟中。--test:仅进行测试,不会真正将时间写入硬件时钟或系统时间。--utc:将硬件时钟上的时间设置为 Coordinated Universal Time (CUT),有时也称为 UTC 或 UCT。--version:显示版本信息。
实例
获取当前时间:
代码语言:javascript复制clock # 获取当前时间显示 UTC 时间:
代码语言:javascript复制clock -utc # 显示 UTC 时间


