命令行既可以成为你的至交好友,又可能成为你最大的敌人。它关键取决于你怎样用它,以及用它来做什么。如果你还是像大部分人一样畏惧使用命令行界面,那么这篇文章定会让你受益匪浅。
是的,它是在黑色屏幕上的白色(或者绿色)的显示区域,是神秘的文字流和奇怪的命令执行的地方。我知道很多大师级的程序员从来不使用命令行界面;然而,我也知道一些初级用户用命令行来做所有的事而不是用图形界面。他们控制应用程序去浏览网页和文件系统,查收邮件,查看图片和编辑文字。他们甚至看youtyube视频和查看PDF文件都不使用图形界面!
最好的工作流程是取决于个人的。有些人倾向于图形界面,其他人则钟爱于命令行。
shell就是一个可以读取用户输入,然后在屏幕输出结果的程序。一个shell可以是基于字符的(像CLI),或者是基于图形的(像Windows的GUI)。今天,shell已经不仅仅是用户与系统的接口,他还肩负着管理进程,窗口,应用程序,命令,以及系统的其他方面。
shell解释执行命令行中输入的命令,用户也可以将命令组合起来写成一个脚本。现代的shell拥有自己的脚本语言,这提供了执行复杂任务的能力。
大多数现代的Linux发行版,如同Mac OSX一样,使用一个shell,BASH(译注:默认的,想用什么自己换)。Solaris和OpenIndiana默认使用Korn Shell,一个BASH的变种。请注意这篇指南主要讲的是BASH。
当然,这仅仅是一个简单的例子。你可以放更多的东西进提示符中。来看看更多的例子吧。
PS1,PS2,PS3和PS4是BASH的特殊变量,它们控制着不同类型的提示符(例如PS2是一般使用于命令行里较长命令的换行提示信息)。我们在这篇指南中只用到PS1。你可以用下面的命令查看你的PS1变量。
csaba@csaba-pc ~/Personal/Programming/NetTuts $ echo $PS1 \[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]
输入命令echo $PS1,然后你就看见了我的PS1变量。在BASH中,我们将$到变量名称前就可以得到这个变量的内容。这个echo命令仅仅会输出它接到的参数。我们给echo的参数是变量的值,所以它会输出这个变量的值。
输出代表着一种格式。\[\033[01;32m\]表示绿色,\u表示当前用户的用户名。\h表示主机名,\[\033[01;34m\]表示蓝色,\w是当前目录,\[\033[00m\]是将文字后续输入的文字置为高亮灰色。通过下面的屏幕截图你能够更好地理解结果。
以“\”开头的特殊字符具有特别的意义。反之“\”标识后面的字符是一个转义字符(比如颜色代码)。下面的内容是从BASH官方手册中引用的,你可以在BASH命令中使用的特殊字符的完整列表:
在命令行环境中,每个人都要做的一件事就是操作文件系统,创建,删除,复制和移动文件系统对象,并且执行命令。这对你来说可能已经是家常便饭,然而,还是让我们来看一眼:
csaba@csaba-pc ~ $ mkdir ~/tmp/NetTuts csaba@csaba-pc ~ $ cd ~/tmp/NetTuts/ csaba@csaba-pc ~/tmp/NetTuts $ mkdir ./AnotherDir csaba@csaba-pc ~/tmp/NetTuts $ mkdir ./SecondDir csaba@csaba-pc ~/tmp/NetTuts $ touch ./SecondDir/aFile csaba@csaba-pc ~/tmp/NetTuts $ touch ./SecondDir/AnotherFile csaba@csaba-pc ~/tmp/NetTuts $ cd ./SecondDir/ csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ pushd ~/tmp/NetTuts ~/tmp/NetTuts ~/tmp/NetTuts/SecondDir csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 16 drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 SecondDir csaba@csaba-pc ~/tmp/NetTuts $ popd ~/tmp/NetTuts/SecondDir csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ ls -al total 8 drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile csaba@csaba-pc ~/tmp/NetTuts/SecondDir $逐句解释:
评论删除后,数据将无法恢复
评论(44)
引用来自“zhuang”的评论
好的,不错.. 我也让我老娘学习下..
引用来自“phoniex”的评论
在我的系统(UBUNTU)上,
find . -name *File 1>./SecondDir/ThirdFile 2>&1
find . -name *File 2>./SecondDir/ThirdFile 1>&2
的输出结果相同!
是否意味着,>重定向符号只是重定向
而与各个通道结果在最终接收文件 ThirdFile 的排序无关?
find . -name *File 1>./SecondDir/ThirdFile 2>&1
find . -name *File 2>./SecondDir/ThirdFile 1>&2
的输出结果相同!
是否意味着,>重定向符号只是重定向
而与各个通道结果在最终接收文件 ThirdFile 的排序无关?