前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【linux命令讲解大全】193.Linux命令解析:chroot与clock的用途和实例

【linux命令讲解大全】193.Linux命令解析:chroot与clock的用途和实例

作者头像
全栈若城
发布2024-03-02 14:39:39
1160
发布2024-03-02 14:39:39
举报
文章被收录于专栏:若城技术专栏若城技术专栏

chroot

将根目录更改为指定的目标目录。

补充说明

chroot 命令用于在指定的根目录下运行指令。chroot 是 change root directory (更改根目录)的缩写。在 Linux 系统中,默认的目录结构是以 / 作为根目录的起点。而使用 chroot 后,系统的目录结构将会以指定的位置作为新的根目录。

通过 chroot 命令,系统将会读取指定位置的目录和文件,而不再是旧的根目录下的目录结构和文件。因此,chroot 命令带来的好处主要有以下三个方面:

  1. 增强系统安全性,限制用户权限: 在经过 chroot 后,在新的根目录下无法访问到旧的系统根目录结构和文件,从而提高了系统的安全性。通常情况下,可以在登录之前使用 chroot,使得用户无法访问特定文件。
  2. 建立与原系统隔离的目录结构,方便用户开发: 使用 chroot 后,系统将读取新的根目录下的目录和文件,这是一个与原系统根目录下文件无关的目录结构。可以在这个新环境中进行软件的静态编译和与系统无关的独立开发。
  3. 切换系统的根目录位置,引导 Linux 系统启动和救援系统等: chroot 的作用是切换系统的根位置,在系统初始化启动磁盘处理过程中使用最为明显。通过切换初始 RAM 磁盘 (initrd) 中的根位置,并执行真正的 init 进程。此外,在系统出现问题时,也可以使用 chroot 切换到临时系统进行救援操作。
语法
代码语言:javascript
复制
chroot [选项] [参数]
选项
  • --help:显示在线帮助信息。
  • --version:显示版本信息。
参数
  • 目录:指定新的根目录。
  • 指令:指定要执行的指令。
实例

target 作为根目录(运行其中的 /bin/sh):

代码语言:javascript
复制
chroot target /bin/sh

在这里,target 是已经安装好的 BusyBox 的路径,类似于一个包含许多工具的文件系统。通过该命令,将进入一个以 target 为根的 shell 界面。通过运行 exit 命令退出该 shell,即可返回到原来的本机环境。也可以使用 Ctrl+D 快捷键。

注意:

  • 只有 root 用户才能执行该命令。
  • 如果直接使用 chroot target,默认将寻找 target 中的 /bin/bash。这将以 target 作为根目录。
  • target 作为根目录(运行其中的 /bin/ls):
代码语言:javascript
复制
chroot target /bin/ls

在这里,target 是已经安装好的 BusyBox 的路径,类似于一个包含许多工具的文件系统。通过该命令,运行的是 target 中的 ls 命令(而不是本机的 /bin/ls),然后立即返回到原来的目录环境。

请注意,如果自己在本地编译一个程序生成 a.out,并将其复制到 target/bin/ 目录中,上述操作是行不通的。因为它包含了动态链接的库,需要使用 ldd 命令查看 a.out 需要哪些动态库,并将这些库复制到新根目录的对应路径下才能执行。

可以使用 chroot 运行自己编译的程序:

  • 准备 chroot 的根目录:
代码语言:javascript
复制
mkdir newRoot
  • 编译自己的程序:
代码语言:javascript
复制
gcc main.c

在这里,main.c 生成了 a.out,其功能是输出 “hello”。

  • 查看程序需要的库:
代码语言:javascript
复制
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)
  • 将程序需要的库和程序复制到新根目录下:
代码语言:javascript
复制
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 的内容将如下所示:

代码语言:javascript
复制
a.out
lib/
  • 使用 chroot 运行自己编译的程序:
代码语言:javascript
复制
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 时间
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • chroot
    • 补充说明
      • 语法
        • 选项
          • 参数
            • 实例
            • clock
              • 补充说明
                • 语法
                  • 选项
                    • 实例
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档