日期:2014-05-16  浏览次数:20948 次

开发人员需要熟知的常用Linux命令之一:重定向操作符
转载:http://blog.csdn.net/sfdev/archive/2008/07/29/2729680.aspx
记得以前整理过一份常用Linux命令清单,但现在怎么找也找不到了,只能再整理一份了;

作为一个开发人员我们登陆linux可能做的一些事情有:svn更新代码、发布应用、linux服务器之间传输文件、直接在服务器上查找修改文件等;以下将罗列一些常用的命令清单,当然只是各个命令中最常见的一些用法,如果要看全部的参数以及功能,可以求助于help或者man;

最常见的cd ll ls ~ . cat rm mkdir cp mv du df就不多介绍了;

su :在各用户之间切换,注意su admin与su - admin的区别,前者不会重新加载admin用户的环境变量,而后者会重新加载;

tail :查看文件尾部的信息,一般配合-f -nXX参数使用,代表查看文件最后XX行,且跟随文件,也即如果文件发生变化,则变化部分自动显示;

ifconfig :用来查看本机IP地址,位于/sbin/目录下,默认不在环境变量中;高级功能是可以变更IP地址等;

w :查看当前服务器中有哪些登陆用户,以及他们的来源IP,登陆时间等;

uptime :查看当前系统运行情况,比如运行时间,最近1、5、15分钟内的平均load;

top :动态显示当前系统运行情况,类似于windows的任务管理器;

kill killall :强制关闭某个进程,一般配合-9使用,意思是立即杀掉而不是等待应用自动关闭;

diff :比较两个文件的异同,显示的信息是两者不同之处,具体到某行;

wget curl :抓取制定URL的页面信息,前者生成文件,后者直接在控制台打印;

tracert :跟踪某个IP的路由情况,在解决一些网络问题时有用;

netstat :查看当前系统被占用的端口信息,一般配合|grep使用,查看某个特定端口是否被占用;

nohup & :指定应用在后台执行;前者当用户退出secureCRT时应用照常运行,而后者只在用户未退出secureCRT时有效,退出后进程失效;这点在我们执行一个需要耗时很长的脚本时非常有用;

> >> < :输入信息到目标,或者从目标读取录入信息;>表示直接覆盖,而>>表示追加;

下面重点介绍下由此展开的重定向操作符,比如我们经常看到这样的语句:mysh > mylog.txt 2>&1是什么意思?

重定向操作符可以用来将命令输入和输出数据流从默认位置重定向到其他位置,其输入或输出数据流的位置称为句柄;常见的句柄有三种,当然句柄可以自行扩展,一般的OS都提供类似的功能:
句柄 句柄代号 句柄描述
STDIN 0 键盘输入
STDOUT 1 输出信息到提示符窗口
STDERR 2 输出错误信息到提示符窗口

默认的 < 重定向输入操作符是 0,而默认的 > 重定向输出操作符是 1。键入 < 或 > 操作符之后,必须指定数据的读写位置,可以是文件名或其他现有的句柄。
要指定重定向到现有句柄,请使用与 & 字符,后面接要重定向的句柄号(即 &句柄号)。
例如,下面的命令可以将句柄 2(即 STDERR)重定向到句柄 1(即 STDOUT):2>&1
下表列出了可用于重定向输入和输出数据流的操作符:
重定向操作符 功能描述
> 将命令输出写入文件或设备,而不是命令提示符或句柄
< 从文件而不是从键盘或句柄读入命令输入
>> 将命令输出添加到文件末尾而不删除文件中已有的信息
>& 将一个句柄的输出写入到另一个句柄的输入中
<& 从一个句柄读取输入并将其写入到另一个句柄输出中
| 从一个命令中读取输出并将其写入另一个命令的输入中;也称为管道操作符

现在我们回过头来看看上面的那条语句mysh > mylog.txt 2>&1就可明白:

> mylog.txt意思是将标准输出重定向到mylog.txt,等价于mysh 1> mylog.txt;

2 >& 1 意思是将错误输出重定向到句柄1标准输出;综合起来就是mysh命令执行过程中产生的标准输出和错误输出都会被重定向到mylog.txt中;

重定向的功能十分强大,有兴趣的可以去尝试各种不同的组合,看看前后位置变下会有什么结果?

某些时候我们可能并不希望记录什么标准输出或者是错误输出,那可以用mysh >null 2>null或者mysh >/dev/null 2>/dev/null