Linux的DOS-like命令如表2-1所示。
表2-1 DOS-like命令说明
常 用 指 令
简要中文说明
程序所在目录
ls
列示文件(相当于 DOS 的 DIR)
/bin
clear
清除屏幕(相当于 DOS 的 CLS)
/user/bin
date
显示或设置日期时间(类似于 DOS 的 DATE及TIME)
/bin
rm
删除文件(相当于 DOS 的 DEL 及 DELTREE)
/bin
cat
链接文件,另兼有将文件内容显示的作用(类似 DOS 的 TYPE)
/bin
cp
复制文件(相当于 DOS 的 COPY 及 XCOPY)
/bin
mv
移动文件(相当于 DOS 的 MOVE),另兼有文件改名的作用(类似 DOS 的 REN)
/bin
cd
切换目录(相当于 DOS 的 CD)
Shell 内部提供
mkdir
创建新目录(相当于 DOS 的 MD)
/bin
rmdir
删除目录(相当于 DOS的 RD)
/bin
mtools
与MS-DOS兼容的操作命令集
/usr/bin
ls [-选项] [文件名描述]
列示文件 ( 相当于 DOS 的 DIR)
ls 就相当于 DOS 的 dir 命令,所以当然是我们第一个要学的命令。
ls 后面所接的 [文件名描述] 可以使用通配符。而UNIX的通配符策略和范围与DOS稍微有点不同。
ls 所能列出的项目也比DOS多很多,譬如权限值。我们下面具体说明:
因为UNIX(注:以后除非特别声明,否则UNIX就是统称,包含Linux在内)是一个多人多工的操作系统,所以对于每一个文件,都有“所有者”、“同一用户组的人”、“其他人”3种不同的权限范围,每一个权限范围又分为“读权限”、“写权限”、“执行权”3种权限,因此每个文件都具有9个属性值。
所以当您用
ls –l (小写的L)
列出文件来的时候,就会看到这9个属性值(最前面还有一个属性值标明这是否是一个目录),分别依图2-1所示的顺序排列。
图2-1 9个属性值
例子中第3个项目autosave,最前面有一个“d”,表示它是一个目录。接着3个属性是“rwx”,表示所有者对它有“读权限”(r)、“写权限”(w)、“执行权”(对于目录来讲是进入权)。而同一用户组的人因为属性值是“r-x”,所以只能读取和执行,不能写入及删去。其他人也是一样“r-x”。其余依此类推。
方才我们在ls后面加了一个-l,它叫做“选项”或者“参数”(选项可以合并使用)。ls 常用的选项有:
l -l 会列出每个文件全部的详细资料,是long的意思。
l -a 连同隐藏文件也列出来。UNIX有很多隐藏文件(通常是做设置用的),它的文件名开头就是一个“.”,平常我们用ls命令它们是不会列出来的。
l -d 这个选项无法用几个字交待清楚。有些书上仅写“只列出目录而不列出内容”。相信这样的说明是无法让初学者了解的。
我们以一个例子来阐述(尤其是DOS的高手反而要特别注意):
譬如我们先用 ls 看看 /usr下面全部有哪些文件和目录,如图2-2所示。
图2-2 /usr下面的文件和目录
它们绝大部分都是目录名称。那么,如果我们下达:
ls s*
命令会出现什么呢?依照我们对DOS的了解,它应该会列出sbin,share,src三个目录。但结果不然,您下达这道命令之后,列出的居然是好几百个文件!如图2-3所示。
图2-3 输入ls s*后列出的文件
因为它把这3个目录下面的文件全都列出来了!
所以,为了避免这种状况,加上–d选项就可以解决了,这是 DOS 所没有的观念,请特别注意。如图2-4所示。
图2-4 输入ls –d s*命令
--color(请注意前面要加两个减号)因为 ls 列出来的内容,我们常常看不出哪一个是目录,哪一个是执行文件,哪一个是普通资料文件,哪一个是链接文件。所以我们很希望它能以“彩色”显示出来。这个选项就可以实现此目的。默认的彩色如下:
默认彩色 ls:
目录 蓝色
可执行文件 绿色
一般文件 白色
链接文件 浅蓝色
Slackware 默认彩色 ls:(可不用加 --color 选项)
目录 蓝色
可执行文件 绿色
一般文件 白色
链接文件 浅蓝色
图形文件 紫红色
压缩文件 红色
有人觉得,既然--color这么好,那为什么不默认这个选项?因为这个选项也有副作用的。我们试试看把它用 > 符号导向输出到一个文件,如图2-5所示。
图2-5 使用 > 符号
然后再把这个文件调出来,如图2-6所示。
图2-6 调出al.txt文件
惨了吧!因为彩色是我们眼睛看到的而已。事实上它是用所谓的“ANSI 控制码”叫终端机变化颜色的,一旦导向输出到普通文件,这些控制码就“现形”了!因为有些时候我们会用 ls 输出的结果来写一些程序,一旦遇到这些控制码,程序很可能会出差错。
如果您确定不会有程序被这些控制码影响,那么可以自己设置 --color 选项为 ls 的默认参数。
-F 如果您还是不喜欢彩色,或者您希望它导向输出到文字文件后(请见上一个选项--color 的说明)仍然能辨识哪一个是目录,哪一个是普通文件等;或者,您的终端机是单色的(其实在中大型电脑的UNIX系统,很多终端机都只有单色,例如交通监理单位、户政单位、大型医院等),那么我们加上这个选项,它会在所有的目录后面标上“/”,链接文件标示“@”,可执行文件标示“*”,一般文件不标示。这样我们就仍然可以在单色下辨认它们的种类了,如图2-7所示。
图2-7 增加-F选项
其实您若拿一本 UNIX 命令全集来看, ls 的选项共有高达23个以上。谁记得了那么多?本书定位在初学,相信您能把上述5个选项记牢(因为太常用了,所以值得记牢)就足够用了!
练习:
(1)其实Linux(UNIX尚无)也有一个dir命令,试试看,它相当于ls吗?
(2)Linux还有一个vdir命令,也请试试看,它相当于ls加上什么选项?
clear
清除屏幕(相当于DOS的CLS)
这个命令就是把屏幕清干净,与DOS的CLS命令一样。
所以它后面也不用接任何文件名,也没有任何选项。
练习:
清一下屏幕吧!
date -[选项] [日期或时间格式]
显示或设置日期时间(类似于DOS的DATE及TIME)
这个命令虽然名为 date ,但是却把DOS的 DATE命令和TIME命令的功能(也就是日期和时间)一起囊括了,所以您在后面不会再找到UNIX有time 的命令了。
然而在DOS上这么一个简单的命令(通常是DOS第一堂课学的,不是吗?)您若拿一本UNIX命令全集来看,它的选项竟然高达29个以上!这还不包括它各种控制的格式!
为了避免“票房毒药”的效应,我们不列出选项和控制格式了,下面用几个简单的例子来说明:您可以依照例子,顶多自己稍微变化一下,不用去记29个选项。
例1:
date
这样只输入date就按【Enter】键,就是列出今天的日期和现在的时间,它的排列格式可能不是您喜欢的,但是看得懂应该没问题吧?
呈现结果为:
Thu Jul 16 06:32:08 CST 1998
例2:
如果您想要自定义喜欢的排列格式,那我们就举一种国内比较通用的排列方式。
date "+Date:%y.%m.%d"
请注意加号是必须要的,加号后面的Date四个字母只是显示用,不是命令,所以大写小写,或者大小写混合都无所谓,四个字母都不要也可以,但是后面的y,m,d三个字母都要小写,它有指定意义的。
呈现结果为:
Date:99.07.16
如果您要呈现1999而不是99,那么把 y 字母改成大写就可以了,如:
date "+Date:%Y.%m.%d"
呈现结果为:
Date:1999.07.16
例3:
同一个date命令也可以用来只显示时间。
date "+Time:%H.%M.%S"
请注意加号是规定要的,加号后面的Time四个字母只是显示用,不是命令,所以大写小写,或者大小写混合都无所谓,四个字母都不要也可以,但是后面的H, M, S三个字母都要大写,它有规定意义的。
呈现结果为:
Time:07.40.38
如果您想要把日期、时间一次显示也可以:
date "+Date:%Y.%m.%d Time:%H.%M.%S"
第二个Time前面就不用加号了。
呈现结果为:
Date:1999.07.16 Time:07.40.39
例4:
设置日期和时间,在观念上和 DOS不相同的就是这个设置日期时间的动作只能由超级用户来做,其他人没有权利。不然因为 UNIX 是一个多人多工的系统,每个人都设一个日期时间,到底要听谁的?
所以在执行下例前,请先以超级用户登录,或者放弃。
date 071617301999
就会设置为1999年7月16日17时30分。
在UNIX上还有一种格式是
date 0950
只设置为时间是9时50分,日期不变,但这种格式在Linux上经试验行不通。
练习:
(1)当我们显示7时40分的时候,7和40之间能改用冒号(:)吗?
(2)把您的系统设置为公元2000年1月1日0 时00分,看看电脑会怎么样?
rm -[选项] 文件或目录名称
删除文件或目录(相当于DOS的DEL及DELTREE)
请特别注意,这里的rm命令并不只相当于 DOS 的DEL 删文件命令,更不等于DOS的RD或者RMDIR。因为如果它的对象是目录时,它能把目录整个删掉,而不管里面有多少文件或多少子目录。
所以,它的等级已经横跨单纯的 DEL 和可怕的 DELTREE 了!
它的常用选项有:
l -i 删除之前先询问用户是否确定。
l -v 删除之中出现进度报告。在删除许多文件时较有作用。
因为 rm 有危险性,所以在Thiz Linux版本里面,rm固定默认的-i选项以确保安全,这个默认设置在用户主目录的 .bashrc里面。
练习:
(1)在Thiz Linux的/usr/share/pixmaps目录里,有一些用做桌面图案的 .jpg文件,但这些图案似乎都较暗淡,不是很漂亮,请您练习用rm命令把它们删掉。
(2)同上题,如果我们想把 /usr/share/pixmaps/backgrounds/Propaganda 里面的/Vol2,/Vol3,/Vol4,/Vol5都删掉,只留下 /Vol1,您是否能用通配符配合rm命令一次达到目标?
cat 文件名称 [文件名称]
链接文件,另兼有显示文件内容的
作用(类似于DOS 的 TYPE )
cat明明是链接文件的意思,怎么又会有代替DOS的TYPE命令的意思呢?
其实,如果您在cat的后面只接了一个文件名称,它没有其他文件需要连接,它就在屏幕上列出来了:
cat a1.txt
这样的效果就跟 DOS 的 TYPE a1.txt 是一样的。
那么,后面接两个文件名称,它们就连接起来了吗?
cat a1.txt a2.txt
不,这样也没有连接起来,它会连续把 a1.txt 和 a2.txt 两个文件在屏幕上显示出来。这是DOS做不到的格式。
要连接两个文件,必须配合“重新输出导向符号”。
cat a1.txt a2.txt > a3.txt
这时,它就把a1.txt的内容和 a2.txt 的内容一起送到 a3.txt了,a3.txt是一个新产生的文件。
这很像DOS的一种命令格式:COPY a1.txt+a2.txt a3.txt,只是不用加号而已。
那么单独把一个文件送到一个单独文件呢?
cat b1.txt >b2.txt
这样也可以的。这就有点“复制”的味道了,相当于 COPY b1.txt b2.txt。
当然,也可以配合“重新输出导向符号”。例如,如果方才我们已经做过:
cat a1.txt a2.txt > a3.txt
现在再下达一个命令:
cat a4.txt a5.txt >>a3.txt
那么a3.txt的内容中将会有原来a1.txt, a2.txt, a4.txt, a5.txt 的内容。因为原来的 a3.txt的内容会完全保持而不会毁掉。
最后还有一种从键盘输入,然后存储到文件的方法:
cat > my.txt
注意,my.txt 是一个新产生的文件。如果您原来已经有这么一个同名的文件,它就彻底被覆盖了。这比丢到资源回收站还惨,因为它是恢复不回来的。
这个用法就相当于DOS中的COPY CON MY.TXT。不过如果输错了,到下一行的时候,是不能回上一行更改的。只有很短的文字文件才适宜这样做,输完的时候按【Ctrl+D】结束,就会保存文件。
练习:
(1)如果我们下达 cat a1.txt a2.txt >a1.txt 命令的话会如何?如果您还没有 a1.txt 和 a2.txt 类似的文字文件可供试验的话,可以用上述的 cat >a1.txt 的方法建一个简单的文件以供测试。
(2)cat显示在屏幕上的资料很长,一屏看不完,且一直往上卷,如何处理?
cp -[选项] 文件名称 目的地
复制文件 ( 相当于DOS的COPY及XCOPY)
所谓的“目的地”,如果它是一个目录名称的话,该文件(或该群文件,因为可以用通配符)就会以原来的名称复制一份到新的目录去。
如果“目的地”是一个文件名称(或一种通配符描述的文件名称)的话,该文件(或该群文件,因为可以用通配符)就会以新的名称产生一份。
如果“目的地”是一串目录名称后面接着一个文件名称(或一种通配符描述的文件名称)的话,该文件(或该群文件,因为可以用通配符)就在该命令的目录名称下以新的名称产生一份。
至于复制的时候会不会覆盖、权限是否会和原来相同、是否会连同整个目录一起复制,就由选项决定了。
它的常用选项有:
l -R 连同其下的所有目录一起复制,有了这个选项,它就相当于DOS 的 XCOPY 命令了。
l -p 复制过去以后,仍然保持原来文件的权限值(如果允许的话)。
l -i 如果目的地有相同文件名的文件存在的话,会先询问用户,而不会立刻覆盖该目的地的同名文件。
l -v 复制之中出现进度报告。当复制许多文件时较有作用。
l -u 除非目的地的同名文件比较旧,它才覆盖过去。
l -l 创建“链接文件”而不是真的复制。所谓的“链接文件”类似于Windows的“快捷方式”(DOS无此观念)。快捷方式只是快捷方式一个记载而已,本身文件并不在那儿。当我们读取或执行链接文件的时候,它会去找到真正的原文件。
因为 cp 有覆盖同名文件的危险性,所以在 Thiz Linux 版本里面,cp 是固定默认的 -i选项以确保安全的,这个默认设置在用户主目录的 .bashrc 里面。
练习:
(1)在Thiz Linux 的 /usr/share/pixmaps/backgrounds/space 目录里,有一些 .jpg 的太空图片,是用做桌面底片图案的(其他版本请用文件查找程序寻找类似文件)请您用 cp 命令,把它们复制给 Windows当做桌面的图案。
(2)请把 /etc 中的重要设置文件 inittab,lilo.conf,XF86Config复制一份到软盘中备份,以备将来设置错误后还能复制回来。
mv -[选项] 文件名称 目的地
移动文件,(相当于 DOS 的 MOVE),另兼有文件改名的作用(类似于DOS 的 REN)
这个命令除了有 DOS 的MOVE 命令的功用之外,也可以变成更改文件名的命令。
许多熟悉 DOS 的人在 UNIX 上一时找不到 REN 或者类似的命令,就是因为这个mv,因为它怎么看也不像与REN或RENAME有关系,这是观念不同所致。UNIX 家族都用搬移来处理更改文件名的动作,就连KDE,GNOME等图形接口也不例外。
所谓的“目的地”,如果它是一个目录名称的话,该文件(或该群文件,因为可以用通配符)就会以原来的名称搬移到新的目录中去。
如果“目的地”是一个文件名称(或一种通配符描述的文件名称)的话,该文件(或该群文件,因为可以用通配符)就会改名或者全部改名。
如果“目的地”是一串目录名称后面接着一个)文件名称(或一种通配符描述的文件名称的话,该文件(或该群文件,因为可以用通配符)就同时做了搬移目录和改名的两种动作。
它的常用选项有:
l -i 如果目的地有相同文件名的文件存在的话,会先询问用户,而不会立刻覆盖该目的地的同名文件。
l -v 搬移之中出现进度报告。对于搬移许多文件时较有作用。
l -u 除非目的地的同名文件比较旧,它才覆盖过去。
因为 mv 有覆盖同名文件的危险性,所以mv固定默认的 –i 选项以确保安全,这个默认设置在用户主目录的 .bashrc 里面。
练习:
(1)在Thiz Linux 的 /usr/share/afterstep/backgrounds 目录里,有一些 .xpm 的文件(其他版本请用文件查找程序查找),它们其实是点阵图文件,所以只要改名为 .bmp 文件,就可以被 DOS 或 Windows 所读取,请用 mv 命令达成该目标。
cd [目录名称]
切换目录(相当于DOS 的 CD)
该[目录名称]指已存在的目录名称,这个命令没有选项。
这个cd与DOS的cd意思和用法都几乎一模一样。只是差在DOS用cd \ 切换到主目录,而UNIX 用 cd / 切换到主目录。切换其他目录也依此类推。(注:我们称 / 为“主目录”,而不称为“根目录”,免得和/root混淆。)
还有两个小细节要特别注意,一个是在 DOS 输入 cd \ 时,cd和 \(反斜线)之间可以不空格,而 UNIX 在cd和 /(正斜线)间却一定要空格,否则它会出现错误信息:
No such file or directory
第二个小细节则是在UNIX中一定要小写。这点您应该已经知道了。至于切换目录名称的前面究竟要不要加“/”斜线呢?这个问题很多人都搞不清楚。其实加“/”和不加“/”都对,只是意思不一样。至于作用有些时候会一样,这就是让人产生错觉的原因了。
在UNIX默认的目录中有一个目录叫做 /bin,也有一个叫做 /usr/bin。我们就以这个来举例。在 /usr 中(假设方才已经从主目录用 cd /usr 命令切换到 /usr 目录了),那么如果输入:
cd /bin
则会切换到 /bin 目录中。
如果输入:
cd bin
则会切换到 /usr/bin 中。
当前面没有加斜线的时候,它的意思是在现行目录的下一层;加斜线的时候,则是从主目录算起。
所以如果我们刚才从主目录切换到 /usr 目录,那么分别输入:
cd /usr
和
cd usr
恰巧效果都一样,这是很特殊的例子。
另外,cd ..可以回到“上一层目录”。
所以如果您要从 /usr/bin 切换到 /usr/doc,除了按如下命令分成两个动作之外:
cd ..
cd doc
也可以这样下达命令,可以一次OK:
cd ../doc
练习:
(1)如何从 /usr/X11R6/lib/X11 切换到 /usr/share/doc ?
(2)只输入一个 cd 命令,后面不接目录名称就按【Enter】,会怎么样?
mkdir -[选项] [目录名称]
创建新目录(相当于 DOS 的 MD)
该 [目录名称] 指一个全新而并不存在的目录名称。因为UNIX本身的特性,大小写视为相异,所以如果您创建的目录名称与现有的目录名称字母相同,但是(只要其中有一个字母)大小写不同的话,那么这个目录还是可以被创建出来的。但DOS是不行的。
除了这点以外,大致囊括 DOS 的 mkdir 功能。(其实DOS的MD命令也可以输入为MKDIR。)为什么说“囊括”呢?因为它的功能只会比 DOS 的 MD 多,而不会比它少。用惯 DOS 的人,看第一个选项就知道:
l -p 如果我们现在想要建一个 /company 的公司目录,再在底下建一个 saledept 的部门目录,再在其下建一个 jacky 的私人目录。但是因为我是全公司第一个建目录的人,所以 /company 的公司目录和saledept 的部门目录根本都还没有创建。那么我要建这个 jacky 目录的时候必须一层一层地挺进。
如果有了这个选项,就可以直接输入命令:
mkdir -p /company/saledept/jacky
它不但会帮我建出jacky这个第三层的目录,就连/company的公司目录和saledept的部门目录也一次帮我建好了,根本不用我操心!是不是比DOS强很多?
l -m 因为 UNIX 是多人多工的系统,所以有权限的设置。文件需要,目录当然也需要。而与其我们先把目录建好,再用 chmod 命令去设置或改变权限,倒不如在设置的同时就一次完成它,所以有这样的命令:
mkdir -m 755 jacky
它会创建一个 jacky 目录,权限是 755。(至于 755 是什么意思,请参看 chmod 命令的说明。)
练习:
(1)如果不用 -p 选项,试试在您的系统上创建一个 /dog/cat/kitty 的三层子目录,顺便练一下功力,体会一下用DOS 的辛苦。
(2)请练习用 -m 选项创建一个所有者都有“读取”、“写入”、“执行”权限,同一用户组的人有“读取”、“执行”权限,而其他人只有“读取”权限的一个名为acc的目录。
rmdir -[选项] [目录名称]
删除目录(相当于 DOS 的 RD)
该 [目录名称]指已存在的目录名称。
rmdir 相当于 DOS 的RD 命令(其实DOS的RD命令也可以打成RMDIR),专门删除已经清空的目录,但如果这个目录里面有文件,就删不掉了。(这也是为了保险起见,万一这里面有您老板的整年会计账目资料怎么办?)
但是 rmdir 还多了一个选项是DOS 所不及的:
l -p 加入之后,如果此目录的上层目录也是空的,它也会一并把它的上层目录删除。
练习:
(1)先建一个 /dog 子目录,切进这个 /dog 目录,再在其下建一个 cat 子目录,再切进 cat 子目录,再在其下建一个 kitty 子目录。然后在其下用 pico 或 joe 等文书编辑程序随便创建一个含有三五个字母的纯文字文件。然后,如何用 rmdir 命令,把 /dog 目录删除?(不用 -p 选项)
(2)同上题,如果用 -p 选项的话,又用什么样的步骤删除呢?
mtools
(与MS-DOS 兼容的操作命令集)
这个命令把 MS-DOS 所有常用的命令都包括进来了,所以它是一个“命令集”,而不是单一“命令”。
如果您不想记 cp 代替 copy,cat 代替 type,rm 代替 del 的话,那么您就记mcopy 代替 copy,mtype 代替 type,mdel 代替 del,这就好记多了,只要在 DOS 命令的前面多加一个 m(但当然还都是小写)就好了。如表2-2所示。
表2-2 mtools命令说明
mtools命令
相当于DOS命令及作用
mdir
DIR
列示文件
mdel
DEL
删除文件
mtype
TYPE
将文件内容显示出来
mcopy
COPY
复制文件
mmove
MOVE
移动文件
mren
REN
文件改名
mcd
CD
切换目录
mmd
MD
创建新目录
mrd
RD
删除目录
mdeltree
DELTREE
无论目录中有无文件一律删除
mformat
FORMAT
格式化磁盘
mattrib
ATTRIB
改变文件属性
mlabel
LABEL
更改或设置磁盘卷标
而它的命令格式悉数依照 DOS 的格式,只要您熟悉 DOS,操作应该不成问题,就连 mformat 时,软驱都可以输入为 a:,而不用输入为 /dev/fd0。不过,言归正传,这只是给一些想偷点懒的人一个过渡时期的工具而已,在 Linux 下,能用 a: 代替 /dev/fd0 的机会不过就只有这么一点,您终究还是要用 /dev/fd0 的。而且,这套命令只在 Linux 能用,在其他 UNIX 家族未必可行的。
但我们还是每个命令举个例子,帮助您恢复一下 DOS 的记忆吧!
mdir k*.*
列出所有为字母 k 开头的文件。
另外值得注意的是,如果 mdir 要用 DOS 的 dir 常用的 /w 选项,它必须依照 UNIX 的规则(人在屋檐下嘛,毕竟住在 UNIX 的家)写成 -w 选项,即:
mdir -w k*.*
另外,如果要连所有隐藏文件一起显示出来,要加 -a 选项,前面也是用减号:
mdir -a
mdel a*.bmp
把 a 字母开头的 .bmp 图形文件全部删除掉。
mtype autoexec.bat
把“autoexec.bat”文件的内容列出来在屏幕上。
mcopy /etc/inittab a:
把 UNIX 的 /etc 目录中的“inittab”文件复制到软驱A中。
mmove /jacky/mark.bmp a:
把 UNIX 用户 /jacky 目录中的“mark.bmp”文件搬移到软驱A中。
mren myfile.txt mynew.txt
把“myfile.txt”文件改名为“mynew.txt”
mcd windows
切换到“windows”子目录中。
mmd test1
创建一个名为“test1”的子目录
mrd test2
把“test2”子目录删除,但是它里面必须是空的,否则无法删除。
mdeltree myfile
把“myfile”子目录整个删除,不管它里面含有多少文件和多少子目录。
mformat a:
把软盘A格式化(注意,格式化出来是 DOS 的磁片格式)!
mattrib +r my*.txt
把凡是文件名开头为“my”的纯文字文件全部设置成只读属性。
mlabel a:lai_shi
把软盘A的标签命名为lai_shi。
没有评论:
发表评论