【Docker】Docker Run 中指定 `bash` 和 `sh` 参数的区别:深入解析与实践指南

发布于:2025-02-16 ⋅ 阅读:(155) ⋅ 点赞:(0)

引言

在使用 Docker 运行容器时,我们经常需要通过 docker run 命令指定容器的启动参数。其中,bashsh 是两种常见的 Shell 解释器,它们在功能和用法上有一些显著的区别。此外,ps -efps aux 是 Linux 系统中常用的进程查看命令,它们的参数 efaux 也常常让人感到困惑。本文将深入探讨 docker run 中指定 bashsh 的区别,并分析 ps -efps aux 中参数的含义及其在 Docker 命令和 Shell 命令中的关联与区别。


一、docker run 中指定 bashsh 的区别

1. bashsh 的基本概念

  • bashbash(Bourne Again Shell)是 Linux 系统中最常用的 Shell 解释器之一。它是 sh 的增强版,支持更多的特性和功能,例如命令行编辑、命令历史、脚本调试等。
  • shsh(Bourne Shell)是 Unix 系统中最原始的 Shell 解释器。它的功能相对简单,主要用于执行基本的脚本任务。

2. 在 docker run 中指定 bashsh

docker run 命令中,我们可以通过 -it 参数启动一个交互式终端,并指定使用 bashsh 作为 Shell 解释器。例如:

docker run -it ubuntu bash
docker run -it ubuntu sh
2.1 使用 bash 作为 Shell 解释器
  • 功能丰富bash 提供了更多的功能,例如命令行补全、命令历史、条件判断、循环控制等。
  • 交互性强bash 更适合用于交互式操作,尤其是在需要频繁输入命令的场景中。
  • 兼容性bash 完全兼容 sh,可以执行 sh 脚本。

示例

docker run -it ubuntu bash
2.2 使用 sh 作为 Shell 解释器
  • 轻量级sh 的功能相对简单,适合执行基本的脚本任务。
  • 兼容性sh 是 Unix 系统的标准 Shell,具有更好的跨平台兼容性。
  • 资源占用少:由于功能较少,sh 的资源占用比 bash 更少。

示例

docker run -it ubuntu sh

3. bashsh 的主要区别

特性 bash sh
功能丰富度 支持更多特性(如命令行补全、历史记录) 功能较为简单
交互性 更适合交互式操作 适合执行简单脚本
兼容性 完全兼容 sh 是 Unix 标准 Shell
资源占用 较高 较低
脚本支持 支持复杂脚本 适合简单脚本

4. 如何选择 bashsh

  • 交互式操作:如果需要频繁输入命令或使用高级功能(如命令行补全),建议使用 bash
  • 脚本执行:如果只需要执行简单的脚本任务,建议使用 sh
  • 资源限制:在资源受限的环境中(如嵌入式系统),使用 sh 可以减少资源占用。

二、ps -efps aux 中参数的含义

1. ps 命令简介

ps 是 Linux 系统中用于查看进程状态的命令。它支持多种参数选项,用于显示不同的进程信息。

2. ps -efef 的含义

  • -e:显示所有进程(包括其他用户的进程)。
  • -f:以完整格式显示进程信息,包括 UID、PID、PPID、C、STIME、TTY、TIME 和 CMD。

示例

ps -ef

输出示例

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 10:00 ?        00:00:01 /sbin/init
root         2     0  0 10:00 ?        00:00:00 [kthreadd]

3. ps auxaux 的含义

  • a:显示所有用户的进程(包括其他用户的进程)。
  • u:以用户友好的格式显示进程信息,包括 USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME 和 COMMAND。
  • x:显示没有控制终端的进程。

示例

ps aux

输出示例

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  12345  6789 ?        Ss   10:00   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    10:00   0:00 [kthreadd]

4. ps -efps aux 的区别

特性 ps -ef ps aux
显示格式 完整格式 用户友好格式
包含信息 UID、PID、PPID、CMD 等 USER、%CPU、%MEM、COMMAND 等
适用场景 查看进程的父子关系 查看进程的资源占用情况

三、aux 参数在 Docker 命令和 Shell 命令中的关联与区别

1. 在 Shell 命令中的 aux

在 Shell 命令中,auxps 命令的参数,用于显示所有用户的进程信息,并以用户友好的格式输出。

2. 在 Docker 命令中的 aux

在 Docker 命令中,aux 并不是一个常见的参数。Docker 命令通常使用其他参数来管理容器和镜像,例如 docker ps -a 用于显示所有容器。

3. 关联与区别

  • 关联aux 在 Shell 命令中用于查看进程信息,而在 Docker 中,docker ps 用于查看容器信息。两者都用于监控系统资源的使用情况。
  • 区别auxps 命令的专用参数,而 Docker 命令有自己的一套参数体系,例如 -a-q-f 等。

四、总结

  • docker run 中,bashsh 是两种常见的 Shell 解释器,bash 功能更丰富,适合交互式操作,而 sh 更轻量,适合执行简单脚本。
  • ps -efps aux 是 Linux 系统中常用的进程查看命令,efaux 分别表示不同的输出格式和信息内容。
  • aux 在 Shell 命令中用于查看进程信息,而在 Docker 命令中并不常见,Docker 使用其他参数来管理容器和镜像。

希望本文能帮助 C++ 程序员更好地理解 Docker 和 Shell 命令的使用,提升容器化开发和系统管理的效率。


参考文献

  • Docker 官方文档: https://docs.docker.com/
  • Linux ps 命令手册: https://man7.org/linux/man-pages/man1/ps.1.html

网站公告

今日签到

点亮在社区的每一天
去签到