2>&1使用

2>&1使用

一 相关知识

1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |)。
2)默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后引号(backquotes `)。
3) 默认地,标准的错误输出到终端,但是也可以重定向到文件。
4)标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示。
5)其实除了以上常用的3中文件描述符,还有3~9也可以作为文件描述符。3~9你可以认为是执行某个地方的文件描述符,常被用来作为临时的中间描述符。

二 实例

1)command 2>errfile : command的错误重定向到文件errfile。
2)command 2>&1 | …: command的错误重定向到标准输出,错误和标准输出都通过管道传给下个命令。
3)var=`command 2>&1`: command的错误重定向到标准输出,错误和标准输出都赋值给var。
4)command 3>&2 2>&1 1>&3 | …:实现标准输出和错误输出的交换。
5)var=`command 3>&2 2>&1 1>&3`:实现标准输出和错误输出的交换。
6)command 2>&1 1>&2 | …     (wrong…) :这个不能实现标准输出和错误输出的交换。因为shell从左到右执行命令,当执行完2>&1后,错误输出已经和标准输出一样的,再执行1>&2也没有意义。

三 “2>&1 file”和 “> file 2>&1″区别

1)cat food 2>&1 >file :错误输出到终端,标准输出被重定向到文件file。
2)cat food >file 2>&1 :标准输出被重定向到文件file,然后错误输出也重定向到和标准输出一样,所以也错误输出到文件file。

四 注意
通常打开的文件在进程推出的时候自动的关闭,但是更好的办法是当你使用完以后立即关闭。用m<&-来关闭输入文件描述符m,用m>&-来关闭输出文件描述符m。如果你需要关闭标准输入用<&-; >&- 被用来关闭标准输出。

五 同时输出到终端和文件 copy source dest | tee.exe copyerror.txt

六 参考

1)http://docstore.mik.ua/orelly/unix/upt/ch45_21.htm
2)http://www.unix.com/shell-programming-scripting/34011-meaning-dev-null-2-1-a.html
3)http://docstore.mik.ua/orelly/unix/upt/ch08_13.htm

ssh免密码登录的原理

昨天在搭建hadoop环境时用到了ssh client免密登录服务器,在查阅相关资料后对其原理有点迷糊。

于是看了该博主的文章:http://blog.csdn.net/u012814506/article/details/50932898,才顿悟。主要是对非对称加密方式有点不了解,误以为在client创建的公私钥密码对需要和登录的服务器有什么关系,其实非对称加密的核心是,公钥加密、私钥解密。你要免密登录首先就得有服务器的密码,而服务器只要保存你的身份信息就可以了,其余的事就交给ssh了。

附上一张原理图:

Linux 常用命令整理

文件、目录类

cd                     # cd 不加任何参数,返回 home 目录
cd -                   # 返回上一次所在目录,并显示其目录名
cd dir                 # 进入到指定目录
pwd                    # 显示当前目录的绝对路径
ls -l                  # 列出文件的详细信息,可简写为 ll
ls | grep "bin"        # 列出包含 "bin" 关键字的文件
mkdir dir              # 创建一个目录
mkdir -p dir/dir       # 创建一个多级目录
mkdir -m 777 dir       # 创建权限为 777 的目录
touch file             # 创建新的空文件
rmdir dir              # 删除空目录
rmdir -p dir/bin       # 删除子空目录 bin 和其父空目录 dir
rm -rf dir/bin         # 删除一个目录中的一个或多个文件或目录, 谨慎使用
rm -rf *.log           # 删除当前目录下所有 ".log" 的文件
find fileName ‐name  *.txt | xargs rm ‐rf   # 将查找出来的文件全部删除, 谨慎使用
cp file dir/file       # 将文件或目录拷贝到另一文件或目录中 
cp ‐R dir1 dir2 /dir   # 拷贝多个目录 (含子目录) 到指定目录
mv dir1 dir2           # 将文件或目录重新命名,或者将文件从一个目录移到另一个目录中

文件查看、处理

cat file                 # 显示文件的内容
cat -n file              # 从1开始对文件的行数编号
cat file1 file2 > file3  # 将文件 file1 和 file2 的内容合并之后放入 file3 中    
head file                # 显示文件的头 10 行内容
tail file                # 显示文件的最后 10 行内容 
tail -f file             # 显示文件最新追加的内容,并监视文件的变化,常用来跟踪日志文件
more file                # 基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容 
less file                # 作用与 more 十分类似, pageUp 向上翻页, pageDown 向下翻页, q 退出 
cat file1 > file2        # 覆盖导入
cat file1 >> file        # 追加导入
wc ‐l [‐m][‐c][‐w] file  # 统计行数、字符数、字节数、单词数

文件查询、搜索

grep keyWord                             # 常与 cat 搭配使用 cat file | grep keyWord
find dir -name "*.log"                   # 搜索指定目录下的 ".log" 文件
find dir -name "*.log" -o -name "*.pid"  # 搜索指定目录下的 ".log" 文件和 ".pid" 文件
find dir -user user1                     # 搜索指定目录下属于 user1 用户的文件

文本编辑 vi 底行模式下

:set nu               # 显示行号
:set nonu             # 不显示行号
:n                    # 跳转到指定第 n 行
:w file               # 另存为
:n1,n2 s/str1/str2/g  # 从 n1 行到 n2 行, 将 str1 替换为 str2
:wq                   # 保存并退出
:q!                   # 强制退出不保存

文本编辑 vi 命令模式下

G                # 到末行
gg               # 到首行
dd               # 删除行
u                # 撤销
yy               # 复制一行
nyy              # 复制 n 行
p                # 粘贴

权限管理

chmod 755 dir/file        # 修改指定文件的权限
chmod ‐R 755 dir          # 递归修改目录及其子文件、目录的权限  
chown user file           # 改变文件的所有者  
chown ‐R user dir         # 改变目录的所有者  
chgrp group1 file         # 改变文件的所有者 
chgrp ‐R group1 dir       # 改变目录的所属组  
chown user1:group1 file   # 同时改变文件的所有者和所属组   
chown ‐R user1:group1 dir # 同时改变目录的所有者和所属组   
whoami                    # 查看当前操作用户  
who                       # 查看当前已登录系统的用户  
id user1                  # 查看用户 user1 的归属 id 信息 

压缩、解压

tar -cvf test.tar test.log      # 仅打包,不压缩
tar -xvf test.tar               # 直接解包
tar -zcvf test.tar.gz test.log  # 打包后,以 gzip 压缩
tar -zcvf test.tar.gz *         # 将当前目录下所有文件压缩
tar -zxvf test.tar.gz           # 直接解压
tar ‐zxvf test.tar.gz ‐C dir    # 解压到新目录,只能是 dir 且已经存在
gzip *                          # 压缩目录下所有文件
gzip -d *                       # 解压缩目录下所有文件
zip test.zip *                  # 将当前目录下所有文件压缩为 zip 包
unzip test.zip                  # 解压缩 zip 包

用户管理

groupadd group1              # 创建组
groupdel group1              # 删除组
groupmod  ‐n group2 group1   # 将 group1 重命名 group2  
useradd user1                # 创建用户
useradd ‐g group1 user1      # 创建 user1 并将其分配到 group1 组下  
userdel ‐r user1             # 删除 user1, "‐r" 参数表示同时也删除 home 目录下的相关目录  
usermod ‐g group2 user1      # 改变 user1 的组为 group2  
usermod ‐G group2 user1      # 将 user1 的添加到 group2 组中来,同时保留原来的主组  
passwd                       # 修改当前用户密码 
passwd user1                 # 修改 user1 用户的密码,仅限 root 用户执行  
su user1                     # 切换到用户 user1 
groups user1                 # 查看用户 user1 所属的组 

网络配置管理

ifconfig -a                  # 查看 ip 信息
ping 127.0.0.1               # 测试主机之间网络的连通性,执行 ping 命令会使用 ICMP 传输协议
ping 192.168.0.1             # 测试从我们的电脑到路由器之间的是否通畅
ping 192.168.0.1 -t -l 65500 # 丢包检查
service network restart      # 重启网络服务 [start , stop]
hostname                     # 查看主机名
netstat -ntlp                # 查询当前系统监听 tcp 端口的进程

远程连接

ssh root@112.74.95.60                      # 远程连接 shell  
logout                                     # 退出连接  
scp ‐r root@112.74.95.60:/user/local/logs  # 远程复制目录,复制文件时不用加 "‐r" 

查看命令帮助

help cd       # 用于内部命令, 如 exit、history、cd、echo 等常驻内存  
ls ‐‐help     # 主要用于外部命令,可通过 "echo $PATH" 命令查看外部命令的存储路径,如 ls,vi 等  
man ls        # 命令手册,可用于所有命令,输入"q"可退出  
type cd       # 查看命令类型,内部 or 外部及命令位置 

系统相关命令

shutdown  ‐h now                    # 立即关机  
shutdown  ‐r now                    # 立即重启  
uname ‐r                            # 查看内核版本   
cal                                 # 日历  
date                                # 时间、日期  
date ‐s "2015‐12‐22 08:00"          # 修改时间  
ntpdate time.nist.gov               # 同步当前时间
history                             # 查看历史命令记录,运行时 "!"+ 命令号,如 !3314 运行 3314 命令  
ps -ef                              # 查看进程  
kill pid                            # 终止进程  
kill ‐9 pid                         # 制终止进程  
top                                 # 查看当前系统资源使用率  
df ‐h                               # 查看磁盘信息  
free ‐m                             # 查看内存信息  
du ‐h file/dir                      # 查看文件/目录大小 ‐h 表示以 K,M,G  
du ‐sh file/dir                     # 查看文件/目录总大小  
mount ‐o loop linux.iso /mnt/dir    # 加载文件系统到指定的加载点
umount /mnt/dir                     # 卸载已经加载的文件系统
rpm ‐ivh xxx.rpm                    # 安装 rpm 包  
rpm ‐e xxx.rpm                      # 卸载 rpm 包 
wget http://url                     # 下载远端 zip 包
echo > fileNme                      # 清空文件内容