#!/bin/bash read -p 'Please input the directory of hadoop , ex: /usr/hadoop :' hadoop_dir if [ -d $hadoop_dir ] ; then echo 'Yes , this directory exist.' else echo 'Error , this directory not exist.' exit 1 fi if [ -f $hadoop_dir/conf/core-site.xml ];then echo "Now config the $hadoop_dir/conf/core-site.xml file." read -p 'Please input the ip value of fs.default.name , i.e. hdfs://ip:port :' ip i=1 while [ -z $ip ] do read -p 'Please input the ip value of fs.default.name , i.e. hdfs://ip:port :' ip let i++ echo $i if [ $i -gt 2 ];then echo 'You have input three time , done , exit.' exit 1 fi done if [ $ip = '' ];then echo 'The value of ip can not null , exit.' exit 1 fi read -p "Please input the port value of fs.default.name , i.e. hafs://$ip:port :" port if [ $port = '' ];then echo 'The value of port can not null , exit.' exit 1 fi read -p 'Please input the dir value of hadoop.tmp.dir :' hadoop_tmp_dir if [ $hadoop_tmp_dir = '' ];then echo 'The value of hadoop.tmp.dir can not null , exit.' exit 1 else if [ ! -d $hadoop_tmp_dir ];then echo 'The directory you have input is not exist , we will make it.' mkdir -p $hadoop_tmp_dir fi fi tmp_dir=$(echo $hadoop_tmp_dir|sed 's:/:\\/:g') sed -i "s/ip/$ip/g" $hadoop_dir/conf/core-site.xml sed -i "s/port/$port/g" $hadoop_dir/conf/core-site.xml sed -i "s/tmp_dir/$tmp_dir/g" $hadoop_dir/conf/core-site.xml else echo "The file $hadoop_dir/core-site.xml doen't exist." exit 1 fi cat $hadoop_dir/conf/core-site.xml echo 'Config the core-site.xml success !' echo
关键部分分析:
1. tmp_dir=$(echo $hadoop_tmp_dir|sed 's:/:\\/:g')
我们输入的$hadoop_tmp_dir是类似:/usr/hadoop/tmp这样的,如果直接写在sed里:sed -i "s/tmp_dir/$hadoop_tmp_dir/g" $hadoop_dir/conf/core-site.xml ,这样会出现错误。因为它解析进去会是:sed -i "s/tmp_dir//usr/hadoop/tmp/g" $hadoop_dir/conf/core-site.xml这样的,显然不能满足,这里解决的方式是:想办法将/usr/hadoop/tmp的输入转换为:\ /usr\ /hadoop\/tmp的形式,即加入转义字符。sed ' s:/:\\/:g ' 这样就可以了,然后通过$(),取值赋给变量。
2. sed -i " s/ip/$ip/g " $hadoop_dir/conf/core-site.xml
这里就是所谓的对文件中字符串的替换,示例文件为:
root@ubuntu:/home/houqd/hadoop/conf# cat -n core-site.xml 1 <?xml version="1.0"?> 2 <?xml-stylesheet type="text/xsl" href=/blog_article/"configuration/gt;.xsl" 3 4 <!-- Put site-specific property overrides in this file. --> 5 6 <configuration> 7 <property> 8 <name>fs.default.name</name> 9 <value>hdfs://ip:port</value> 10 </property> 11 <property> 12 <name>hadoop.tmp.dir</name> 13 <value>tmp_dir</value> 14 </property> 15 </configuration>
3. 注意其它语法: if [ ] ; then else fi while [] do ..done i=0 let i++
实验四十八微软应用程序虚拟化之三APP-V 5.1 Client部署和通过组策略自定义配置
APP-V Client分为Application Virtualization Desktop Client 和 Application Virtualization Client for Remote Desktop Services ,两者都为虚拟化应用程序提供并管理虚拟环境,管理到缓存的程序包传输、发布刷新、传输,以及与 Application Virtualization Server 的所有交互。
说明:
环境基于实验四十七
1以域管理员身份登录Clt-8客户机放入MODP 2013安装光盘,选择APP-V 5.0 SP1 Client安装直到完成,并且打开APP-V 5.1 Client程序了解如何配置(发现无法配置或自定义,实际只能通过组策略管理)
2登录DC服务器安装微软提供的Microsoft Desktop Optimization Pack Administrative Templates组策略模板(http://www.microsoft.com/en-us/download/details.aspx?id=35516),安装完成后把安装目录拷贝到复制到DC服务器的C:\Windows\sysvol\domain\policies\ 下
3在DC服务器上打开活动目录管理器新建一个组织单位名为ThinPC,然后把Clt-8移动到ThinPC OU里面。
4 在DC服务器上打开组策路管理器,在ThinPC OU上创建一个名为APP-V Client的组策略,编辑APP-V Client的组策略,展开计算机配置,在管理模板中找到APP-V项目进行自定义:配置报告服务器地址(http://app-vserver.kkkfloat.com:83)、
设置发布服务器地址(http://app-vserver.kkkfloat.com:82),然后在ThinPC OU上更新组策略
5再次登录Clt-8客户端打开APP-V 5.1 Client程序,观察变化(由于没有发布程序,所以点击更新或下载没反应)
安装过程分享:http://pan.baidu.com/share/link?shareid=709446&uk=1025659618
示例:robocopy E:\xutianlong F:\xutianlong /E
复制子目录,包括空的子目录。
参数解释
一、 复制选项:
参数解释:
/S :: 复制子目录,但不复制空的子目录。
/E :: 复制子目录,包括空的子目录。
/LEV:n :: 仅复制源目录树的前 n 层。
/Z :: 在可重新启动模式下复制文件。
/B :: 在备份模式下复制文件。
/ZB :: 使用可重新启动模式;如果拒绝访问,请使用备份模式。
/EFSRAW :: 在 EFS RAW 模式下复制所有加密的文件。
/COPY:复制标记:: 要复制的文件内容(默认为/COPY:DAT)。
(复制标记: D=数据,A=属性,T=时间戳)。
(S=安全=NTFS ACL,O=所有者信息,U=审核信息)。
/DCOPY:T :: 复制目录时间戳。
/SEC :: 复制具有安全性的文件(等同于/COPY:DATS)。
/COPYALL :: 复制所有文件信息(等同于/COPY:DATSOU)。
/NOCOPY :: 不复制任何文件信息(与/PURGE 一起使用生效)。
/SECFIX :: 修复所有文件的文件安全性,即使是跳过的文件。
/TIMFIX :: 修复所有文件的文件时间,即使是跳过的文件。
/PURGE :: 删除源中不再存在的目标文件/目录。
/MIR :: 镜像目录树(等同于/E 和/PURGE)。
/MOV :: 移动文件(复制后从源中删除)。
/MOVE :: 移动文件和目录(复制后从源中删除)。
/A+:[RASHCNET] :: 将给定的属性添加到复制文件。
/A-:[RASHCNET] :: 从复制文件中删除给定的属性。
/CREATE :: 仅创建目录树和长度为零的文件。
/FAT :: 仅使用 8.3 FAT 文件名创建目标文件。
/256 :: 关闭超长路径(> 256 字符)支持。
/MON:n :: 监视源;发现多于 n 个更改时再次运行。
/MOT:m :: 监视源;如果更改,在 m 分钟时间内再次运行。
/RH:hhmm-hhmm :: 运行小时数 - 可以启动新副本的时间。
/PF :: 以每个文件(而不是每个步骤)为基础检查运行小时数。
/IPG:n :: 程序包间的间距(ms),以释放低速线路上的带宽。
二、文件选择选项:
参数解释:
/A :: 仅复制具有存档属性集的文件。
/M :: 仅复制具有存档属性的文件并重置存档属性。
/IA:[RASHCNETO] :: 仅包含具有任意给定属性集的文件。
/XA:[RASHCNETO] :: 排除具有任意给定属性集的文件。
/XF 文件[文件]... :: 排除与给定名称/路径/通配符匹配的文件。
/XD 目录[目录]... :: 排除与给定名称/路径匹配的目录。
/XC :: 排除已更改的文件。
/XN :: 排除较新的文件。
/XO :: 排除较旧的文件。
/XX :: 排除多余的文件和目录。
/XL :: 排除孤立的文件和目录。
/IS :: 包含相同文件。
/IT :: 包含已调整的文件。
/MAX:n :: 最大的文件大小 - 排除大于 n 字节的文件。
/MIN:n :: 最小的文件大小 - 排除小于 n 字节的文件。
/MAXAGE:n :: 最长的文件存在时间 - 排除早于 n 天/日期的文件。
/MINAGE:n :: 最短的文件存在时间 - 排除晚于 n 天/日期的文件。
/MAXLAD:n :: 最大的最后访问日期 - 排除自 n 以来未使用的文件。
/MINLAD:n :: 最小的最后访问日期 - 排除自 n 以来使用的文件。
(If n < 1900 then n = n days, else n = YYYYMMDD date)。
/XJ :: 排除接合点。(默认情况下通常包括)。
/FFT :: 假设 FAT 文件时间(2 秒粒度)。
/DST :: 弥补 1 小时的 DST 时间差。
/XJD :: 排除目录的接合点。
/XJF :: 排除文件的接合点。