DOS、CMD、PowerShell、Shell 与 Windows (类Unix)Terminal 的区别

在计算机历史的演进中,命令行界面CLI)始终是一个核心组件,它为用户提供了与计算机系统直接交互的能力。从早期的文本界面到现代的终端,命令行工具已经经历了长足的发展。

本文将深入探讨DOS、CMD、PowerShell、Shell和Windows Terminal这五种工具(系统)的特点、历史和应用。

一、概念

1.1 DOS (Disk Operating System)

  • 定义:DOS是20世纪80年代初的主流操作系统,主要用于IBM PC兼容的个人计算机。

  • 历史与发展

    • DOS最初是为IBM的第一台个人计算机而开发的。
    • MS-DOS是其中最流行的版本,由微软开发。
    • 随着Windows的出现,DOS的重要性逐渐减弱,但它为后续的命令行工具奠定了基础
  • 主要应用

    • 文件管理。
    • 系统配置。
    • 运行早期的应用程序。

1.2 CMD (Command Prompt)

  • 定义:CMD是Windows操作系统的命令行解释器,它继承了MS-DOS的许多特性。

  • 历史与发展

    • CMD首次出现在Windows NT中,作为MS-DOS的替代品。
    • 它提供了与Windows系统的更好集成,同时保留了MS-DOS的核心功能。
  • 主要应用

    • 文件和目录操作。
    • 网络诊断。
    • 系统管理。

1.3 PowerShell

  • 定义:PowerShell是一个跨平台的任务自动化和配置管理框架,由微软开发。

  • 历史与发展

    • PowerShell最初是为Windows Vista而开发的,目的是提供一个比CMD更强大的脚本环境
    • 它现在已经成为Windows Server和Azure云服务的核心组件。
  • 主要应用

    • 系统自动化。
    • 配置管理。
    • 数据处理和分析。

1.4 Shell

  • 定义:Shell是LinuxUnix系统的命令行解释器

  • 历史与发展

    • Unix Shell最初是为Unix操作系统而开发的,后来被许多其他系统采用。
    • Bash是最流行的Shell,但还有其他选择,如Zsh、Fish和Tcsh。
  • 主要应用

    • 文件和进程管理。
    • 脚本编程。
    • 系统监控。

1.5 Windows Terminal

  • 定义:Windows Terminal是微软的新终端应用程序,它提供了一个集成的环境,支持CMD、PowerShell和WSL

  • 历史与发展

    • Windows Terminal是微软对现代终端的回应,它在2019年首次发布。
    • 它的目标是提供一个统一、高效和高度可定制的终端体验。
  • 主要应用

    • 多标签界面。
    • 丰富的视觉效果和主题。
    • 高度的用户定制性。

实际上,有一大部分用户是很少使用Windows终端的,而是像它推出之前一样直接使用cmd或者powershell。但Windows终端的体验确实不错,比如可以显示更多的行数,在powershell中即使把缓冲区拉倒最大,有些命令的输出也不能显示全,需要分页或者输出重定向,而在Windows终端中则可以显示上千行(虽然不实用)。
在这里插入图片描述


与Windows终端不同,类Unix系统的终端,功能更加强大,除了能访问shell(命令解释器),还提供了许多其他功能,比如应用程序的执行(vim)、远程访问、脚本执行等等。它本身更是一个命令解释器(虽然并不是)。

1.51 Linux终端

Linux的终端,通常被称为“终端模拟器”或简称“终端”,是一个软件程序,它为用户提供了一个文本界面,以与Linux系统进行交互。它模拟了早期计算机的物理终端,这些计算机使用文本界面而不是图形界面。

以下是Linux终端的一些关键特点和功能:

  1. 命令行界面:终端提供了一个命令行界面,用户可以输入命令来执行各种任务,如文件管理、系统监控和软件安装。

  2. Shell访问:通过终端,用户可以访问系统的shell(如Bash、Zsh或Fish)。Shell是一个命令行解释器,它读取并执行用户输入的命令。

  3. 脚本执行:用户可以在终端中执行shell脚本,这些脚本可以自动化许多任务。

  4. 文本界面应用程序:某些Linux应用程序,如文本编辑器vimnano,以及文件管理器mc,是基于文本的,并在终端中运行。

  5. 远程访问:通过工具如ssh(安全壳),用户可以从一个终端远程访问另一个Linux系统的终端。

  6. 多样性:Linux有多种终端模拟器可供选择,如gnome-terminalkonsolextermterminator等,每个都有其独特的特点和功能。

  7. 高度可定制:大多数终端模拟器都允许用户定制其外观和行为,例如更改字体、颜色、背景和快捷键。

1.52 MacOS终端

macOS的终端与Linux的终端在许多方面都相似,因为macOS基于Unix。以下是macOS终端的一些关键特点和功能:

  1. 命令行界面:macOS的终端提供了一个命令行界面,允许用户输入命令来执行各种任务,如文件管理、网络诊断和系统配置。

  2. Bash Shell:直到macOS Catalina之前,macOS的默认shell都是Bash。从macOS Catalina开始,系统默认的shell变为了Zsh,但用户仍然可以选择使用Bash或其他shell。

  3. 脚本执行:与Linux终端一样,macOS终端允许用户执行shell脚本来自动化任务。

  4. 内置工具:macOS终端提供了许多Unix工具,如grepawksedssh等。

  5. Homebrew:macOS用户经常使用Homebrew作为包管理器来安装额外的命令行工具和应用程序。

  6. 远程访问:macOS终端内置了ssh工具,允许用户远程访问其他系统。

  7. 高度可定制:macOS终端支持多个标签和窗口,用户可以自定义字体、颜色和其他外观设置。

  8. 其他终端应用:除了默认的Terminal.app,macOS还有其他第三方终端应用,如iTerm2,它提供了更多的功能和定制选项。

  9. 集成开发环境(IDE)集成:许多现代IDE,如Visual Studio Code或PyCharm,都提供了集成的终端,允许开发者在同一个界面中编写代码和执行命令。

二、常用命令(少部分)

2.1 DOS (Disk Operating System)

DOS是一个基于文本的操作系统,其命令主要用于文件和目录管理。以下是一些常用的DOS命令:

  • DIR:列出目录中的文件和子目录。
  • COPY:复制文件。
  • DEL:删除文件。
  • REN:重命名文件。
  • CD:更改当前目录。
  • MKDIR (或 MD):创建新目录。
  • RMDIR (或 RD):删除目录。
  • TYPE:显示文件内容。

2.2 CMD (Command Prompt)

CMD是Windows的命令行解释器,它继承了DOS的一部分命令并添加了一些新功能。以下是一些常用的CMD命令:

  • CLS:清除屏幕。
  • ECHO:显示消息或开启/关闭回显。
  • FC:比较两个文件并显示差异。
  • FIND:在文件中查找字符串。
  • IPCONFIG:显示网络配置信息。
  • NET:用于管理网络资源。
  • SYSTEMINFO:显示计算机的系统信息。
  • TASKLIST:显示当前运行的进程。

2.3 PowerShell

PowerShell是一个强大的脚本环境,它提供了大量的命令(称为cmdlet)来执行各种任务。以下是一些常用的PowerShell命令(命令基本上都是谓宾结构):

  • Get-Command:列出所有可用的cmdlet和函数。
  • Get-Help:显示cmdlet的帮助信息。
  • Get-Process:列出所有运行的进程。
  • Get-Service:列出所有服务及其状态。
  • Set-ExecutionPolicy:设置脚本执行策略。
  • ConvertTo-Json:将对象转换为JSON格式。
  • Invoke-WebRequest:发送Web请求。
  • Export-Csv:将对象导出为CSV文件。

很多cmd的命令在powershell中也是可用的,但是有差异:

  1. 命令兼容性:PowerShell 可以执行大多数 CMD 命令,因为它允许运行外部程序。所以,你可以在 PowerShell 中运行像 diripconfignetstat 等传统的 CMD 命令。

  2. 别名:PowerShell 为了与 CMD 保持一定的兼容性,为许多常用的 CMD 命令提供了别名。例如,当你在 PowerShell 中输入 dir,它实际上是调用 Get-ChildItem cmdlet。这意味着你可以在 PowerShell 中使用熟悉的 CMD 命令,但实际上背后执行的是 PowerShell 的 cmdlet。

  3. 命令结构:尽管 PowerShell 支持许多 CMD 命令,但它们的工作方式可能会有所不同。PowerShell 使用 cmdlet 的结构,这些 cmdlet 通常遵循 Verb-Noun 的命名约定,如 Get-ContentSet-Item 等。

  4. 参数差异:即使某些 CMD 命令在 PowerShell 中有效,它们的参数和工作方式也可能与在 CMD 中有所不同。例如,某些命令可能需要使用 PowerShell 的参数前缀 - 而不是 CMD 的 /

  5. 扩展功能:PowerShell 提供了许多功能,这些功能在 CMD 中是不存在的,如对象管道、远程管理和丰富的脚本功能。

  6. 安全性:PowerShell 有一个执行策略系统,它可能会阻止某些脚本的执行,除非用户明确允许。这是为了增加安全性,防止恶意脚本的执行。

尽管 PowerShell 支持许多传统的 CMD 命令,但它们可能会以不同的方式工作,或者有不同的参数和功能。为了充分利用 PowerShell,建议用户学习和使用其原生的 cmdlet 和功能,而不是仅仅依赖于旧的 CMD 命令。

2.4 Shell (如 Bash)

Bash是Linux和Unix系统中最常用的shell。以下是一些常用的Bash命令:

  • ls:列出目录内容。
  • cd:更改当前目录。
  • pwd:显示当前工作目录。
  • echo:输出文本或变量。
  • grep:在文件中搜索特定的文本。
  • chmod:更改文件或目录的权限。
  • chown:更改文件或目录的所有者。
  • ps:显示当前运行的进程。
  • kill:结束进程。

2.5 使用CMD还是Powershell

2.51 总体对比

CMD(命令提示符)和PowerShell都是Windows操作系统中的命令行界面,但它们在设计、功能和目的上有所不同。以下是对两者的比较:

CMD(命令提示符):

  1. 历史:CMD是Windows的传统命令行工具,它继承了MS-DOS的命令集。
  2. 功能:相对基础,主要提供文件和目录管理功能。
  3. 脚本:使用批处理(.bat)文件进行脚本编写。
  4. 兼容性:由于其历史悠久,一些旧的应用程序和脚本可能仍依赖于CMD。
  5. 界面:文本基础,没有内置的高级文本处理或对象操作功能。

PowerShell

  1. 历史:PowerShell是Windows的现代命令行和脚本环境,首次发布于2006年。
  2. 功能:非常强大,提供了许多高级功能,如远程管理、事件日志访问和注册表操作。
  3. 脚本:使用.ps1脚本文件,并支持更复杂的编程结构和操作。
  4. 对象导向:PowerShell是基于对象的,这意味着命令的输出可以被当作对象处理,而不仅仅是文本。这使得数据处理和操作更加灵活和强大。
  5. 扩展性:PowerShell支持模块和扩展,允许用户添加更多的命令和功能。
  6. 跨平台:PowerShell Core是PowerShell的开源版本,可以在Windows、Linux和macOS上运行。

建议:

  • 对于基本的文件和目录管理任务,CMD和PowerShell都可以胜任,但PowerShell提供了更多的高级功能。
  • 如果你需要进行复杂的脚本编写、数据处理或系统管理任务,PowerShell无疑是更好的选择。
  • 对于习惯使用传统DOS命令的用户,CMD可能更为熟悉。
  • 对于希望学习现代命令行技能并利用Windows系统的全部功能的用户,PowerShell是推荐的工具。

选择CMD还是PowerShell取决于你的具体需求、经验和任务的复杂性。然而,随着时间的推移,微软明显更倾向于推广和支持PowerShell作为其主要的命令行工具。

2.52 脚本对比

CMDPowerShell 的脚本在语法、功能和设计哲学上有很大的区别。以下是两者脚本的主要差异:

  1. 脚本文件扩展名:

    • CMD:使用 .bat.cmd 作为批处理脚本的扩展名。
    • PowerShell:使用 .ps1 作为PowerShell脚本的扩展名。
  2. 语法:

    • CMD:批处理脚本的语法相对简单,主要基于早期的DOS命令。例如,使用 echo 打印文本,使用 if 进行条件判断,使用 for 进行循环等。

    • PowerShell:PowerShell的语法更加丰富和强大。它支持更复杂的编程结构,如函数、数组、哈希表、对象处理等。PowerShell的命令通常遵循 Verb-Noun 的命名约定,如 Get-ChildItemSet-Variable 等。

  3. 功能:

    • CMD:批处理脚本的功能相对有限,主要用于文件和目录管理、简单的文本处理和系统任务。

    • PowerShell:PowerShell提供了许多高级功能,如远程管理、事件日志访问、注册表操作、WMI查询、Active Directory管理等。

  4. 数据处理:

    • CMD:批处理脚本主要处理文本数据。文本处理功能有限,通常需要使用外部工具(如 findstr)进行文本搜索和替换。

    • PowerShell:PowerShell是基于对象的,这意味着命令的输出可以被当作对象处理,而不仅仅是文本。这使得数据处理和操作更加灵活和强大。

  5. 错误处理:

    • CMD:批处理脚本的错误处理相对简单,通常使用 errorlevel 变量来检查上一个命令的退出状态。

    • PowerShell:PowerShell提供了更先进的错误处理机制,如 try-catch-finally 结构,以及对错误对象的详细访问。

  6. 安全性:

    • CMD:批处理脚本没有内置的安全机制。

    • PowerShell:PowerShell具有执行策略系统,可以防止未经授权的脚本执行。此外,PowerShell脚本可以被数字签名,以确保其完整性和来源。

PowerShell脚本提供了比批处理脚本更强大和灵活的功能。尽管批处理脚本在某些简单任务中仍然有用,但对于复杂的系统管理和自动化任务,PowerShell是更好的选择。



~

猜你喜欢

转载自blog.csdn.net/weixin_43764974/article/details/132251532