【Shell编程】Windows下DOS编程及环境编译

01、目录

02、Windows下的Dos?

DOS (全称为 Disk Operating System ,被称为磁盘操作系统)是计算机操作系统的霸主,当然这是在XP系统之前。

说DOS,就不得不说.bat,相信很多接触计算机的人,或多或少都见过.bat为后缀的文件。这里我不仅仅指Programmer。现象呢?就是点击这个文件,会弹出黑色小窗口,然后就是执行一些指令。比如安装软件时有时会 遇到,然后这个.bat就是做配置环境等等的。这个,待会我会说到关于环境编译。

为什么要从批处理开始讲起?首先内心是有一点的崇拜“黑客”,那NB的技术真让人羡慕。

计算机本身是弱智的,只能识别 0 和 1 两个数字( 0 和 1 这两个数字被我们尊称为二进制数码),但是人类的智慧是无限的,通过对计算机大脑 (CPU) 的改造,可以让它支持整个宇宙的所有信息。回归正题,我们在计算机上查看的任何文件都是以 0 和 1 组成的二进制码存储在计算机中的,具体怎么存储的我也是后生,所以我也不懂。最早出现的磁盘操作系统 (DOS) 就是实现对计算机硬盘上的文件的操作和管理。说了这么多其实只想说明一点就是我很想知道 DOS 和批处理到底是怎么对计算机硬盘上的文件进行操作的?

03、Dos的相关版本

DOS(Disk Operating System) ,磁盘操作系统,我想对计算机有点了解的人应该都不会陌生这个词,但是具体它是干什么的呢? DOS 是计算机上的一种基于磁盘管理的操作系统,可以直接操作和管理磁盘上的文件,在计算机出厂是基本都会自带一个 DOS 磁盘操作系统。

DOS 发展到现在已经存在很多版本,以 MS-DOSPC-DOSFreeDOS 最为常见。

这些东西不用记,看看就行了,基本不用了。

为什么用dos?

  1. 个别情况下,通过dos操作比windows操作更简单(删除垃圾文件——写一个批处理)
  2. 可以侵入别人的系统
  3. 网络安全 (linux,unix,交换机、路由设置)

dos组成

  • 核心启动程序: io.sys msdos.sys command.com(有这三个文件可以称为dos启动盘)。
  • dos命令(内部——这些命令包含在command.com里,系统启动后核心启动程序的三个文件进入内存中、外部——不包含在command.com里,不能直接使用)

04、Dos常用命令

下面我讲几个频繁用到的命令,如果没有你所需要的,可以win + R输入cmd,然后输入help查看windows下支持的所有命令。
下列示例,我仅写出了命令,至于盘符的显示则省略了。例如:
c:\Users\Cain>cd c:\Users\Cain\Desktop
我直接写:
cd c\Users\Cain\Desktop

4.1、 md——创建子目录

功能:创建新的子目录
类型:内部命令
格式:

md[盘符:][路径名]〈子目录名〉

使用说明:
1、“盘符”:指定要建立子目录的磁盘驱动器字母,若省略,则为当前驱动器;
2、“路径名”:要建立的子目录的上级目录名,若缺省则建在当前目录下。

示例:
1、在c盘的根目录下创建名为test的子目录;

md c:\test

2、在test子目录下再创建user子目录;

md c:\test\user
4.2、 cd——切换路径(目录)

功能:改变当前目录
格式:

cd [/D] [drive:][path]

使用说明:
1、如果省略路径和子目录名则显示当前目录;
2、如采用“cd\”格式,则退回到根目录;
3、如采用“cd…”格式则退回到上一级目录。
4、使用 /D 命令行开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。

示例:
1、进入到user子目录;

cd c:\test\user

2、从user子目录退回到上级目录;

cd..

3、返回到根目录;

cd\
4.3、 rd——删除子目录

功能:从指定的磁盘删除子目录。
格式:

rd[盘符:][路径名][子目录名]

使用说明:
1、子目录在删除前必须是空的,也就是说需要先进入该子目录,使用del(删除文件的命令)将其子目录下的文件删空,然后再退回到上一级目录,用rd命令删除该子目录本身;
2、不能删除根目录和当前目录。

示例:
1、要求把c盘test子目录下的user子目录删除,操作如下:

  • 先进入test下user目录,执行del命令(这里不讲)
del c:\test\user\*.* //或者
del c:\test\user\* (建议执行这个)
  • 再执行rd命令,删除user子目录
rd c:\test\user

其实上面这个还有有一个bug,只能删除文件,不能删除user下的文件夹,下面我们完善一下。

c:\test\user /s  //此步骤,系统询问你是否确认(Y/N)
c:\test\user /s/q //这就不会再问你了

注意:以下两个参数只能在WINXP上使用(在vista系统下其实也可以使用下述两个参数!)
/S 除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。
/Q 安静模式,带 /S 删除目录树时不要求确认。

PS:dos下面是不区分大小写的,但是空格要被当做一个字符,比如:MyFile Go,就要这么写:
“MyFile Go”,这里提一下,下面不再做介绍

4.4、 dir——显示磁盘目录(当前)

功能:显示磁盘目录的内容。
格式:

dir [盘符][路径][文件名][/p][/w][/A[[:]属性]][/O[:]排列顺序]][/S]

使用说明:
1、/p的使用;当欲查看的目录太多,无法在一屏显示完屏幕会一直往上卷,不容易看清,加上/p参数后,屏幕上会分面一次显示23行的文件信息,然后暂停,并提示;press any key to continue(按任意键继续)
2、/w的使用:加上/w只显示文件名,至于文件大小及建立的日期和时间则都省略。加上参数后,每行可以显示五个文件名。
3、/A 显示具有指定属性的文件。
4、属性D 目录 R 只读文件 H 隐藏文件 A 准备存档的文件 S 系统文件 I 无内容索引文件 L 解析点 - 表示“否”的前缀
5、/O 用分类顺序列出文件。
6、排列顺序 N 按名称(字母顺序) S 按大小(从小到大) E 按扩展名(字母顺序)
7、D 按日期/时间(从先到后) G 组目录优先 - 反转顺序的前缀
8、/S 显示指定目录和所有子目录中的文件。

示例:
1、查看当前磁盘目录

dir

显示内容:

驱动器C中的卷是System Disk
卷的序列号是 6E7D-ADOC
C:\Users\Cain\Desktop 的目录
具体类容(桌面的东西)略
4.5、 tree——显示磁盘目录结构

功能:显示指定驱动器上所有目录路径和这些目录下的所有文件名。
类型:外部命令
格式:

tree [盘符:][/f][>prn]

使用说明:
1、使用/f参数时显示所有目录及目录下的所有文件,省略时,只显示目录,不显示目录下的文件;
2、选用>prn参数时,则把所列目录及目录中的文件名打印输出。

示例:
1、显示磁盘C目录结构

tree C:
4.6、 chkdsk——检查磁盘当前状态

功能:显示磁盘状态、内存状态和指定路径下指定文件的不连续数目。
格式:

chkdsk [盘符:][路径][文件名][/f][/v]

使用说明:
1、选用[文件名]参数,则显示该文件占用磁盘的情况;
2、选[/f]参数,纠正在指定磁盘上发现的逻辑错误;
3、选用[/v]参数,显示盘上的所有文件和路径。

示例:
1、显示C盘当前状态

chkdsk C:

在这里插入图片描述

上述命令使用管理员方式打开,这里提供两种方式,一种是操作、一种是命令,命令只做简单介绍。

  1. 界面运行管理员方式
    windows键,输入cmd->鼠标右键cmd.exe以管理员身份运行。即可获得管理员的权限。
    在这里插入图片描述

  2. Code升权

runas /noprofile /user:administrator cmd

此命令,在dos界面输入即可,但是要输入密码。公司电脑的密码我不记得,这里就不截图了。
如果忘记了管理员密码,需要用winPE工具清除密码。

运行时可能出现以下错误:

1326: 登录失败: 未知的用户名或错误密码。不输密码:错误1327,密码不能为"".

4.7、 diskcopy——整盘复制

功能:复制格式和内容完全相同的软盘。
格式:

diskcopy[盘符1:][盘符2:]

使用说明:
1、如果目标软盘没有格式化,则复制时系统自动选进行格式化。
2、如果目标软盘上原有文件,则复制后将全部丢失。
3、如果是单驱动器复制,系统会提示适时更换源盘和目标盘,请操作时注意分清源盘和目标盘。

此命令慎用,上面说明讲的很清楚,我这里不演示。

4.8、 copy——文件复制

功能:拷贝一个或多个文件到指定盘上。
格式:

copy [源盘][路径](源文件名) [目标盘][路径](目标文件名)

使用说明:
1、copy是文件对文件的方式复制数据,复制前目标盘必须已经格式化;
2、复制过程中,目标盘上相同文件名称的旧文件会被源文件取代;
3、复制文件时,必须先确定目标盘有足够的空间,否则会出现;insufficient的错误信息,提示磁盘空间不够;
4、文件名中允许使用通配举“*”“?”,可同时复制多个文件;
5、copy命令中源文件名必须指出,不可以省略。
6、复制时,目标文件名可以与源文件名相同,称作“同名拷贝”此时目标文件名可以省略;
7、复制时,目标文件名也可以与源文件名不相同,称作“异名拷贝”,此时,目标文件名不能省略;
8、复制时,还可以将几个文件合并为一个文件,称为“合并拷贝”,格式如下:copy;[源盘][路径]〈源文件名1〉+〈源文件名2〉…[目标盘][路径]〈目标文件名〉;
9、利用copy命令,还可以从键盘上输入数据建立文件,格式如下:copy con [盘符:][路径]〈文件名〉;
编辑结束后,Ctrl+Z保存编辑。
10、注意:copy命令的使用格式,源文件名与目标文件名之间必须有空格!

此命令,可自己亲测,相较diskcopy,安全太多了。

4.9、 xcopy——目录复制

功能:复制指定的目录和目录下的所有文件连同目录结构。
格式:

xcopy [源盘:]〈源路径名〉[目标盘符:][目标路径名][/s][/v][/e]

使用说明:
1、xcopy是copy的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝隐藏文件和系统文件;
2、使用时源盘符、源目标路径名、源文件名至少指定一个;
3、选用/s时对源目录下及其子目录下的所有文件进行copy。除非指定/e参数,否则/s不会拷贝空目录,若不指定/s参数,则xcopy只拷贝源目录本身的文件,而不涉及其下的子目录;
4、选用/v参数时,对的拷贝的扇区都进行较验,但速度会降低。

示例:
1、将c盘test文件复制到d盘

xcopy c:\Users\Cain\Desktop\test d:\

此结果肯定是ok的,可以自己试试,玩一下。

4.10、 cls——清理屏幕

功能:清除屏幕上的所有显示,光标置于屏幕左上角。
类型:内部命令
格式:

cls
4.11、 ver——查看系统版本号

功能:显示当前系统版本号
格式:

ver
4.12、 date——日期查看或设置

功能:设置或显示系统日期。
格式:

date[mm——dd——yy]

使用说明:
1、省略[mm——dd——yy]显示系统日期并提示输入新的日期,不修改则可直接按回车键,[mm——dd——yy]为“月月——日日——年年”格式;
2、当机器开始启动时,有自动处理文件(autoexec.bat)被执行,则系统不提示输入系统日期。否则,提示输入新日期和时间。

示例:
1、显示当前日期

date

在这里插入图片描述

2、修改日期为:2020-09-26

在这里插入图片描述
我的电脑被公司设置了权限,所以,你们电脑应该是可以,不行开启管理员即可。

4.13、 msg——显示系统信息

功能:显示系统的硬件和操作系统的状况。
格式:

msg[/s]

使用说明:
1、选用/i参数时,不检测硬件;
2、选用/b参数时,以黑白方式启动msg;
3、选用/s参数时,显示出简明的系统报告。

示例:
1、系统都夸我好帅!

msg Cain Cain太帅了吧!

msg 后面的Cain是我当前用户名字,请灵活变化。

在这里插入图片描述
黑框的内容就是我上面输入的,只是被加密了,看不到,这个命令就很奈斯。

下面我说两个网络常用命令,之后就是博主的第二个重点、编译环境。

4.14、 ping——检查网络

它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。下面就来看看它的一些常用的操作。先看看帮助吧,在DOS窗口中键入:ping /? 回车,。所示的帮助画面。在此,我们只掌握一些基本的很有用的参数就可以了(下同)。

在这里插入图片描述

4.15、 netstat——查看网络状态

这是一个用来查看网络状态的命令,操作简便功能强大。

-a 查看本地机器的所有开放端口,可以有效发现和预防木马,可以知道机器所开的服务等信息,如图4。

这里可以看出本地机器开放有FTP服务、Telnet服务、邮件服务、WEB服务等。用法:netstat -a IP。

-r 列出当前的路由信息,告诉我们本地机器的网关、子网掩码等信息。用法:netstat -r IP。
在这里插入图片描述
示例:
1、显示当前的所有端口等信息

netstat -a

在这里插入图片描述

4.16、 tracert——跟踪路由信息

跟踪路由信息,使用此命令可以查出数据从本地机器传输到目标主机所经过的所有途径,这对我们了解网络布局和结构很有帮助。如图5。

这里说明数据从本地机器传输到192.168.0.1的机器上,中间没有经过任何中转,说明这两台机器是在同一段局域网内。用法:tracert IP。

4.17、 net

这个命令是网络命令中最重要的一个,必须透彻掌握它的每一个子命令的用法,因为它的功能实在是太强大了 在这里,我们重点掌握几个常用的子命令。

net view

使用此命令查看远程主机的所有共享资源。命令格式为net view \IP。

net use

把远程主机的某个共享资源影射为本地盘符,图形界面方便使用。命令格式为net use x: \IP\sharename。上面一个表示把192.168.0.5IP的共享名为magic的目录影射为本地的Z盘。下面表示和192.168.0.7建立IPC$连接(net use KaTeX parse error: Undefined control sequence: \IPC at position 7: ">\\IP\̲I̲P̲C̲ “password” /user:“name”),

建立了IPC$连接后,呵呵,就可以上传文件了:copy nc.exe KaTeX parse error: Undefined control sequence: \admin at position 16: ">\\192.168.0.7\̲a̲d̲m̲i̲n̲,表示把本地目录下的nc.exe传到远程主机,结合后面要介绍到的其他DOS命令就可以实现入侵了。

net start

使用它来启动远程主机上的服务。当你和远程主机建立连接后,如果发现它的什么服务没有启动,而你又想利用此服务怎么办?就使用这个命令来启动吧。用法:net start servername,如图9,成功启动了telnet服务。

net stop

入侵后发现远程主机的某个服务碍手碍脚,怎么办?利用这个命令停掉就ok了,用法和net start同。

net user

查看和帐户有关的情况,包括新建帐户、删除帐户、查看特定帐户、激活帐户、帐户禁用等。这对我们入侵是很有利的,最重要的,它为我们克隆帐户提供了前提。键入不带参数的net user,可以查看所有用户,包括已经禁用的。下面分别讲解。

  1. net user abcd 1234 /add,新建一个用户名为abcd,密码为1234的帐户,默认为user组成员。
  2. net user abcd /del,将用户名为abcd的用户删除。
  3. net user abcd /active:no,将用户名为abcd的用户禁用。
  4. net user abcd /active:yes,激活用户名为abcd的用户。
  5. net user abcd,查看用户名为abcd的用户的情况

net localgroup

查看所有和用户组有关的信息和进行相关操作。键入不带参数的net localgroup即列出当前所有的用户组。在入侵过程中,我们一般利用它来把某个帐户提升为administrator组帐户,这样我们利用这个帐户就可以控制整个远程主机了。

net time

这个命令可以查看远程主机当前的时间。如果你的目标只是进入到远程主机里面,那么也许就用不到这个命令了。但简单的入侵成功了,难道只是看看吗?我们需要进一步渗透。这就连远程主机当前的时间都需要知道,因为利用时间和其他手段(后面会讲到)可以实现某个命令和程序的定时启动,为我们进一步入侵打好基础。用法:net time \IP。

05、 .bat与VS下system函数的编译环境

  • .bat上面已经介绍过,批处理程序。你写好程序之后,他一次性执行完全部,即.bat,环境的话,只要里面有cd、path等就不会有问题。
  • system:发出一个DOS命令,执行成功返回0,执行不成功由于不同的操作返回的值不同,可以查手册看

PS:此命令system在程序中是独立执行的!例如:

system("cd C:\Users\Cain\Desktop");
system("环境编译命令");  //这里不具象化
system("pause")

如果第一句执行之后,我们执行第二句,然后查看当前路径,你会发现,路径根本就没有在C:\Users\Cain\Desktop,这就是独立执行的意思,上下文是什么,与我本句命令无关。

上面没有将path命令不是说不重要,我拿到下面来一起讲。

5.1、 path——路径设置(环境设置)

功能:设备可执行文件的搜索路径,只对文件有效。
格式:

path[盘符1]目录[路径名1]{[;盘符2],〈目录路径名2〉…}

使用说明:
1、当运行一个可执行文件时,dos会先在当前目录中搜索该文件,若找到则运行之;若找不到该文件,则根据path命令所设置的路径,顺序逐条地到目录中搜索该文件;
2、path命令中的路径,若有两条以上,各路径之间以一个分号“;”隔开;
3、path命令有三种使用方法:

  • path[盘符1:][路径1][盘符2:][路径2]…(设定可执行文件的搜索路径)
  • path:(取消所有路径)
  • path:(显示当前所设的路径)

示例:
1、设置d盘test为环境变量

set path=%path%;D:\test

在这里插入图片描述

上面用到了echo命令,译为:反射、重复。即查看映射。使用:echo %path%就可以查看当前的环境。

上面所输入的都是在同一dos窗口输入,所以没有问题,但是如果你用system函数用程序来执行,就有问题了。他会提示缺失xxxx文件。

一般来说,当我们程序中用到system时,一定要注意他的特性:临时。
即:当前system执行之后只针对本次有效,过后就失效了,并不是永久生效,此环境设置。永久剩下的话,可以去高级环境里面设置,亦或是命令(这里不展开)。

当我们要用到程序的system来执行例如设置环境变量时,我们通常的做法(Windows平台)是写文件.bat,然后system调用.bat执行。保证是当前有效的。为什么要强调Windows平台,因为Linux那边试可以组合的,好用太多,Linux基础编程里面后面会讲此内容。

06、小结

尽管Windows这边的Dos我们用的很少,但是,毕竟主流平台是Windows,命令行系统(Linux、Unix等)只使用与开发者(程序员)。

所以,掌握一种高效的Windows批处理、命令技术是一种很有牌面的事。学了总比没有学强。
关于Dos的话,我目前就说这么多,研究了好久,搞明白了才写了这篇文章,如有错误的地方,感谢评论区留言告诉我,有问题也可以评论或者私信。

版权声明:转载请注明出处,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值