将根目录更改为指定的目标目录。
chroot
命令用于在指定的根目录下运行指令。chroot
是 change root directory (更改根目录)的缩写。在 Linux 系统中,默认的目录结构是以 /
作为根目录的起点。而使用 chroot
后,系统的目录结构将会以指定的位置作为新的根目录。
通过 chroot
命令,系统将会读取指定位置的目录和文件,而不再是旧的根目录下的目录结构和文件。因此,chroot
命令带来的好处主要有以下三个方面:
chroot
后,在新的根目录下无法访问到旧的系统根目录结构和文件,从而提高了系统的安全性。通常情况下,可以在登录之前使用 chroot
,使得用户无法访问特定文件。
chroot
后,系统将读取新的根目录下的目录和文件,这是一个与原系统根目录下文件无关的目录结构。可以在这个新环境中进行软件的静态编译和与系统无关的独立开发。
chroot
的作用是切换系统的根位置,在系统初始化启动磁盘处理过程中使用最为明显。通过切换初始 RAM 磁盘 (initrd) 中的根位置,并执行真正的 init 进程。此外,在系统出现问题时,也可以使用 chroot
切换到临时系统进行救援操作。
chroot [选项] [参数]
--help
:显示在线帮助信息。--version
:显示版本信息。将 target
作为根目录(运行其中的 /bin/sh
):
chroot target /bin/sh
在这里,target
是已经安装好的 BusyBox 的路径,类似于一个包含许多工具的文件系统。通过该命令,将进入一个以 target
为根的 shell 界面。通过运行 exit
命令退出该 shell,即可返回到原来的本机环境。也可以使用 Ctrl+D 快捷键。
注意:
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
输入该命令后,会输出如下内容:
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
就没有依赖其他库。
用于调整 RTC 时间。
clock
命令用于调整 RTC 时间。RTC 是计算机内置的硬件时钟,执行该命令可以显示当前时间,调整硬件时钟的时间,将系统时间设置为与硬件时钟一致,或将系统时间回写到硬件时钟中。
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
:显示版本信息。获取当前时间:
clock # 获取当前时间
显示 UTC 时间:
clock -utc # 显示 UTC 时间