一、重定向
输入输出重定向
标准输入 System.in (从控制台输入,可以接收到程序中 Scanner) <
shell 中只有一个 read
标准输出 System.out (java 控制台输出) >
shell中 echo/cat/ls
重定向:就是把控制台标准的源头切换成文件
#把查询结果存到一个文件中
ls -la>~/ls.log
#把查询到的结果写入到当前用户根目录下的ls.log文件里
验证是否真的写入到ls.log文件里
注意:一个<是覆盖。两个<<是追加,之前做免密登录生成authoried_keys时用到过
不难看出,之前查询的内容被覆盖掉了
很明显,这是追加的结果,只截取了部分
二、脚本移植
以前,脚本移植我们采用的是cp,但是现在我们可以通过重定向
可以看到查询的内容已经存到根目录下的cp.sh脚本中
不难肯出由于缺少执行权限,所以需要授权
授过权后
#注解(以前我们写的时候可能不太理解)
nohup hive --service metastore>/dev/null 2>&1 &
# nohup和&是你后台启动的核心命令
# hive --service metastore 就是启动服务的命令,后台启动的命令,如果直接用hive --service metastore也可以直接启动,只不过会多打开一个窗口,所以加nohup & 为的就是你挂到后台不要影响窗口
# >/dev/null 指的是不要输出 既不会输出到文件里,也不会输出到控制台上,所有不要输出的都可以这么写
# 系统下有dev这样一个文件夹
# /dev/null下的null不是一个文件夹,而且里面没有东西,就是为了做重定向用的,重定向到不需要输出
#归纳这句话:把输出流重定向到一个假的字符设备里,对流进来的字符不做任何处理
一般来说,一个命令启动分为INFO、WARNING、ERROR这几种模式,正常情况下,INFO和WARNING是输出到/dev/null中的,2>表示异常信息输出,也就是说我们可以正常信息和异常信息分别输出到两个不同的文件中
(流分开做两个重定向,便于查看错误信息和日志)
&1就是指/dev/null,引用前一个位置的输出重定向,就是不管正常信息还是异常信息都不要
#如果想要你信息,可以这么写
nohup hive --service metastore>/hive-mt.log 2>hive-mt-err.log &
如果没有异常,hive-mt-err.log就是空的
crw-rw-rw-. 1 root root 1, 3 Nov 30 16:02 null
不是我们见到的常规项 ,就是假假的模拟了一个字符设备,并不做任何处理
linux 文件属性:
"l"是链接文件(link),动态链接,可以类比超链接
"b"是块设备,比如:硬盘,就是一块存储空间,像分区
"c"是字符设备文件,比如:键盘、鼠标 (模拟了一个字符设备)
“d”是目录文件,