DOS简介与命令

文章目录
  1. 1. DOS简介
    1. 1.1. 设计架构
      1. 1.1.1. 脚本语言
      2. 1.1.2. 硬件访问
      3. 1.1.3. 设备保留名称
      4. 1.1.4. 磁盘命名法
      5. 1.1.5. 引导流程
    2. 1.2. 相关
      1. 1.2.1. 与Windows的关系
      2. 1.2.2. CMD
      3. 1.2.3. Shell
    3. 1.3. DOS命令
      1. 1.3.1. DOS常用命令例

DOS简介

  DOS(Disk Operating System),是磁盘操作系统的缩写,是个人计算机上的一类操作系统。从1981年直到1995年的15年间,DOS在IBM PC兼容机市场中占有举足轻重的地位。而且,若是把部分以DOS为基础的Microsoft Windows版本,如Windows 95、98和Me等都算入,那么其商业寿命至少可以算到2000年。
  DOS家族包括MS-DOS、PC-DOS、DR-DOS、FreeDOS、PTS-DOS、ROM-DOS、JM-OS等,其中以MS-DOS最为著名。虽然这些系统常被简称为“DOS”,但没有任何一个系统单纯以“DOS”命名(只有一个毫无关连的1960年代IBM大型主机操作系统以此命名)。此外,有几个和DOS无关、在非x86的微计算机系统上执行的磁盘操作系统在名称中也有“DOS”字眼,而且在专门讨论该机器的场合中也会简称为“DOS”(例如:AmigaDOS、AMSDOS、ANDOS、Apple DOS、Atari DOS、Commodore DOS、CSI-DOS、ProDOS、TRS-DOS等),但这些系统和DOS可执行文件以及MS-DOS API并不兼容。

设计架构

  所有DOS类的操作系统都是在使用Intel x86或其兼容CPU的机器上执行的(主要是IBM PC及其兼容机)。最早的时候,DOS并未受限于此;为了在许多以x86为基础,但和IBM PC不兼容的机器上执行,产生了不少特定机器版本的DOS及类似的操作系统。
  DOS是单一用户、单工的操作系统,拥有不可重入的基本核心函数(意即同时间只能有一个程序调用这些函数)。有一个例外的状况,就是常驻程序(Terminate and Stay Resident,缩写为TSR)。某些常驻程序允许用户多工操作;然而此时仍有“核心不可重入”的问题:当一个进程(process)调用了操作系统核心中的服务函数(也就是系统调用)时,在这个调用结束之前,其他的进程绝对不能进行系统调用、打断第一个进程。
  DOS的核心为用户程序提供了各式各样的函数,例如:在屏幕上显示文字、从键盘读入字符、访问磁盘上的文件等等。

脚本语言

  DOS透过批处理文件(扩展名为.BAT)提供界面脚本的功能。这些纯文本格式的脚本文件可以用任何的文本编辑器编辑。他们执行起来和编译而成的程序没有两样。文件中的每一行都被视为命令来执行。批处理文件也可以使用数个内部命令,例如goto和条件表达式。

硬件访问

  DOS提供了简单的硬件抽象层,让程序员可以开发文字界面的应用程序;但这个硬件抽象层无法访问大部分的计算机硬件,像是显卡、打印机,或是鼠标等。这使得程序员必须直接访问硬件,导致每个应用程序都有属于自己的一组硬件周边驱动程序。硬件制造商会将他们的硬件规格书发布,以确保在受欢迎的应用程序中有它们的驱动程序。

设备保留名称

  在DOS中,有数个名称保留给设备使用,无法拿来当一般文件的名称,且不管扩展名是什么;这些保留名称是用来将应用程序的输出发送给硬件周边用的。这样的限制也影响到数个版本的Windows,在某些情况下甚至会造成死机和安全性弱点。其中一些保留名称有:NUL:、COM1:或AUX:、COM2:、COM3:、COM4:、CON:、LPT1:或PRN:、LPT2:、LPT3:,以及CLOCK$。

磁盘命名法

  在DOS中,磁盘驱动器是利用不同的字母命名的。标准的作法是保留“A”和“B”给软盘驱动器。若是系统只有一台软盘驱动器的话,DOS允许这台软盘驱动器同时使用这两个代号,然后DOS会要求用户更换磁片。这么做可以让用户把文件拷贝到不同的软盘上,或是执行某一片软盘上的程序,然后把资料文件存放在另一片软盘上。最早硬盘的代号为“C”和“D”。在一台硬盘驱动器上,DOS只允许一个活动分区的存在。随着支持的硬盘数量越来越多,磁盘代号的命名方法演变为:先将磁盘代号指派给每一颗硬盘驱动器的活动主分区,然后第二轮将代号指派给延伸分区中的逻辑卷,第三轮再把代号指定给非活动的主分区。(前题是:它们存在,而且包含了DOS可以读取的文件系统。)最后,DOS才将代号指派给光盘驱动器、RAM disk,以及其他的硬件。一般来说,磁盘代号都是依照驱动程序的加载顺序,按字母顺序指派的,但驱动程序也可以要求DOS指派不同的字母。例如网络磁盘驱动器的驱动程序通常会指派最后的几个字母。
  因为DOS的应用程序会直接使用这些磁盘代号(和Unix类系统使用/dev目录的方法不同),因此若是新增了需要分配磁盘代号的硬件,可能会导致这些应用程序出错。举例来说:若是原本硬盘中的延伸分区中存在逻辑卷,此时新增一颗有主分区的硬盘的话,由于主分区拥有较高的分配优先权,所以原本硬盘的逻辑卷的代号就会改变。此外,就算是新增一颗只有延伸分区和逻辑卷的硬盘,还是会影响到RAM disk及光盘驱动器的代号。这个问题一直到9x系列的Windows都仍然存在;NT系列才有解决方案:磁盘代号会保留给已存在的磁盘驱动器机,除非用户手动更改。

引导流程

  PC兼容机的引导扇区(MBR)位于第 0 扇区。对于DOS来说,这段代码会将DOS的HAL读入存储器中然后执行。在DR DOS及PC DOS中,这个HAL放在IBMBIO.COM文件中;而MS DOS则是放在IO.SYS。接下来这个HAL会加载位于IBMDOS.COM(PC DOS或DR DOS)或是MSDOS.SYS(MS DOS)里面的DOS内核。Windows 9x中附的DOS版本(MS DOS 7和8)将HAL和核心合并放在IO.SYS里面,而MSDOS.SYS则是文字格式的配置文件案。然后DOS核心会去执行CONFIG.SYS这个文件。在CONFIG.SYS中,SHELL这个命令指定了SHELL的文件位置(通常是COMMAND.COM)。接下来这个SHELL会被执行,然后它会去开启开机启动项(通常是AUTOEXEC.BAT)。

相关

与Windows的关系

  纯32位版本的Windows(从NT开始;包含了2003、XP和Vista)并非以DOS为基础的。这些系统中内含了一个NT DOS虚拟机(NT Virtual DOS Machine,缩写为NTVDM),在上面执行一个修改过的DOS。原本以DOS为基础的系统使用传统的COMMAND.COM做为命令行界面,而Windows NT及其派生版本则是使用cmd.exe(不过cmd.exe也移植了许多DOS的命令)。x64架构的Windows也有cmd.exe(命令提示符),但是无法执行16位DOS程序(没有NTVDM)。

CMD

  CMD命令提示符,(command)的缩写,是 Windows 系统中的命令行窗口。Windows 系统内部保留了可以执行 DOS 命令的 CMD 命令行窗口,但CMD 只是一个 Windows 下模拟 DOS 环境的程序,脚本是批处理,语法不完整,逻辑有缺陷。
  CMD可以执行很多 DOS 命令,但是不能运行 DOS 程序。只能调用 Win32 或 Win64 的程序。

Shell

  Shell 本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell 脚本编程,完成更加复杂的操作。Shell是Linux必有的,类似于 DOS 下的 command和后来的CMD。Shell的脚本十分完整,逻辑也严谨。

DOS命令

命令 备注
MD 建立子目录
CD 改变当前目录
RD 删除子目录命令
DIR 示磁盘目录命令
PATH 路径设置命令
TREE 显示磁盘目录结构命令
DELTREE 删除整个目录命令
FORMAT 磁盘格式化命令
SCANDISK 检查磁盘当前状态命令
UNFORMAT 恢复格式化命令
DISKCOPY 整盘复制命令
VOL 显示磁盘卷标命令
SCANDISK 检测、修复磁盘命令
DEFRAG 重整磁盘命令
SYS 系统复制命令
COPY 文件复制命令
XCOPY 目录复制命令
TYPE 显示文件内容命令
REN 文件改名命令
FC 文件比较命令
ATTRIB 修改文件属性命令
DEL 删除文件命令
UNDELETE 恢复删除命令
VER 查看系统版本号命令
DATE 查看日期命令

DOS常用命令例

1
2
3
4
5
6
7
8
cls  //清屏
cd //切换目录
cd .. //进入上一级目录
md test //创建名为test的文件夹
cd >1.txt //创建1.txt的文件
rename a.txt b.txt //将a.txt重命名为b.txt
xcopy b.txt d:\ //将b.txt复制到D盘根目录下
del 1.txt //删除1.txt文件

版权声明

Scholar’s Blog by scholargeek is licensed under a Creative Commons BY-NC-ND 4.0 International License.
董仕麟创作并维护的scholargeek博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证

本文首发于Scholar’s Blog博客,版权所有,侵权必究。

本文永久链接:https://scholargeek.github.io/2018/01/01/DOS/

更新日期:


本站总访问量