hadoop命令:
#登录hadoop:kinit [user]
kinit < passwd
hadoop fs -ls /user/ # 查看hdfs目录下文件
hadoop fs -put file /user/ # 上传passwd文件到hadoop目录
#调取hadoop日志:
alias bhive=beeline -u "hadoop.com" --hivevar user=hongshaofen
bhive -f obtain_log_wjwl_0902.sql
hadoop fs -getmerge /user/hive/warehouse/tj_tmp.db/hongshaofeng_monitorlog_jryk_20210902 hongshaofeng_monitorlog_jryk_20210902.tsv(大写会变小写) #在Hadoop上下载该日志到本地服务器:
hadoop fs -ls /user/hive/warehouse/tj_tmp.db/ |grep hongshaofeng # 查看关于我的进程文件
yarn application -list :显示当前集群中的任务列表,任务状态包含:SUBMITTED,ACCEPTED,RUNNING
yarn application -kill [application ID] :application ID可以使用list获得,停止指定ID的集群中的任务。KILL后的认为状态为KILLED。
linux 常用语法:
快捷键:ctrl +A 回到行首,ctrl +E 回到行尾,ctrl+u删除所有输入的字符,ctrl+w删除最近一个单词。ctrl+c退出回到终端,ctrl+z 退出python命令。
home,0回到行首,end、$回到行尾,u撤回。
0、文件权限:
d表示文件夹,-表示普通文件。rwx表示权限,r可读,w可写,x可执行,---表示不可读不可写不可执行。
1、查看命令
ll | grep name # 列出name字段的文件及文件夹,有序显示出来,
ls -a #列出所有文件包括以‘.’开头的隐藏文件。
ls -lh #组合选项,以易读方式来显示大小。
du -h # 查看内存大小5.6g等。
cat log.txt|tail -n +1000|head -n 20 查看log.txt的前20行到1000
sed -n 100,120p log.txt 100
cat shaofeng02 | head -n1 | awk '{print NF}' #查看第一行列数
cat shaofeng02 | awk '{print NF}' #查看所有行列数
wc -l shaofeng02 #查看行数
wc -c filename 输出 filename 的字节数
wc -m filename 输出 filename 的字符数
wc -w filename 输出 filename 的单词数
wc -L filename 输出 filename 文件里最长的那一行是多少个字符数
awk 'NR==m' filename //查看filename文件的第m行
0、cp命令
cp ../file . # 复制文件到当前目录
cp ../file file_new # 复制文件到当前目录并重命名
cp -r ../file . # 递归复制目录及其子目录内的所有内容,适用于文件夹的复制。
1、 rm删除命令
rm file -fr # 直接删除,不许问
ls | grep -v tmp | xargs rm 删除除了tmp文件外的所有文件!
rm -rf !(keep1 | keep2) #删除keep1和keep2文件之外的所有文件,无提示地强制递归删除文件
精确删除数据:rm -rf *.txt
rm save/{1131,1132} # 删除多个文件
1、cd命令
cd -:Linux 命令行下执行该命令,会将当前目录切换到上一次所在目录
cd / 切换到根目录
cd ~ 切换到环境
2、find命令
find / -name 'ins*' #查找/目录下以文件名ins开头的文件
find /-name '*.txt' #查找/目录下文件名以.txt结尾的文件
find / -name '*of*' #查找/目录下文件名包含of的文件
find / -type f-size +100M #查找/目录下文件大小大于100M的文件
find / -type f-size +1G #查找/目录下文件大小大于100M的文件
3、grep命令
grep命令一般很少单独使用,都是和管道结合使用
grep 1ang anaconda-ks.cfg #在文件中查找lang文本
4、which命令
which查看可执行文件的位置。
which 1s #查找1s命令可执行文件的位置
5、ps命令
ps #查看ps命令本身的进程,当前终端进程
ps-ef #查看当前inux系统所有的进程
6、管道命令
将前边命令的输出作为后边命令的输入
ps-ef | grep mysqld #查找mysq1进程是否启动 ,mysql要加d
7、普通用户hongshaofeng登录$:超级用户root#
8、添加或删除用户 addr:10.11.4.108 |Bcast:10.11.7.255 Mask:255.255.248.0
uesradd -r 用户名
userdel -r 用户名
passwd hongshaofeng # 设置用户密码
9、用户权限管理-chmod命令 rwx 默认是421
使用方式1:
chmod +x a.txt#给所有用户都加上执行权限!!!!!
chmod u+x a.txt#给所属用户添加执行权限,在原来权限的基础上追加(了解)chmod u=x a.txt#给所属用户赋为执行权限,将原来的权限覆盖(了解)使用方式2:
chmod 777 a.txt#给所有用户都加上所有权限!!!!!
一个文件刚创建时,默认的权限就是:644
9:网络管理命令
Linux查看IP地址:ifconfig
Windows查看ip地址:ipconfig
10、创建软连接,快捷方式
ln -s ../tj_model_lib-master/test_model_cp.py run_model.py
11、查看历史命令
history:查看历史命令,默认可存1000多条
history 100 查看100条
12、查看应用进程列表
yarn application -list |grep application_1628044774004_270410
13、sz下载,rz上传
sz data_save/1125/{wjwl_1125.png,jryk_1125.png}
14、随机取样:
shuf -n50000 hongshaofeng_monitorlog_rong360_v2_20210815.tsv >rong360v2_20210815.txt #随机取样,
head -n50000 hongshaofeng_monitorlog_rong360_v2_20210815.tsv >rong360v2_20210815.txt #按行取样
shuf hongshaofeng_monitorlog_wjwl_20210902.tsv -n 100000 --random-source='seed' > wjwl_20210902.txt #按种子随机取样 >>表示追加
15、nohup后台挂起
nohup python3.6 split.py Yixin_20211013_1.txt > runoob.log 2>&1 & # 2>&1表示将标准错误2重定向到标准输出&1,标砖输出&1在被重定向到runoob.log中,
# 最后一个&表示后台挂起。0-标准输入,1-标准输出,2-标准错误输出。 2>&1将两个输出绑定在一起, 错误输出和标准输出会到同一个地方。
16、查看、杀死进程
top 查看进程
htop可以以规则形式展示
ps -aux | grep dict_to_df.py
kill 57215 # 杀掉这个进程,在第二列,第一列是用户id,即pid
kill -STOP 1234 // 将该进程暂停
kill -CONT 1234 // 它恢复到后台(很多在前台运行的程序这样是不行的)
kill -9 强制终止退出, 例如: kill -9 3781
17、stat test.file # 查看文件创建时间及修改信息
ps显示进程信息,参数可省略
-aux 以BSD风格显示进程 常用
-efH 以System V风格显示进程
-e , -A 显示所有进程
a 显示终端上所有用户的进程
x 显示无终端进程
u 显示详细信息
f 树状显示
w 完整显示信息
l 显示长列表
18、|管道符,当前输出作为下一输入
alias mykinit='echo zw503KWd|kinit shiyunping' # 将密码作为下一要登陆的命令中。或者直接写入文件:kinit <passwd
19、alias 给命令起别名 =前后不能有空格,value内有空格,要用引号!如果想永久生效,就把这条写入到 /bin/.bashrc里面
alias bhive="beeline -u 'jdbc:hive2://bi-hadoop02.b28.rong360.com:10000/mkt;principal=hive/bi-hadoop02.b28.rong360.com@RONG360.COM'"
alias python='/usr/local/bin/python2.7'
20.crontab 定时任务
定时任务:crontab -e进入编辑模式!每天点半执行这个shell,并输出追加到log.txt。多个就多加一行写在下方即可!
(base) [hongshaofeng@dx-tjmodeclient01 hongshaofeng]$ crontab -l # 每天9:30执行
30 9 * * * cd /data/hongshaofeng/NV_score_monitorLogGenerate && bash /data/hongshaofeng/NV_score_monitorLogGenerate/shell.sh >> /data/hongshaofeng/NV_score_monitorLogGenerate/log.txt 2>&1
touch log_$(date +%Y%m%d).txt # 创建自动化日期文件 $ = ``
30 */6 * * * /home/test.sh ##每月每天每隔6小时的每30分钟执行test.sh脚本
30 3,12 * * * /home/test.sh ##每月每天凌晨3点30分和中午12点20分执行test.sh脚本
20、文件写入操作sed awk grep
head -n 240076 p_train.json > p_train2.json #将文件的前n行写入 2文件中
sed -i '1r a2.txt' a1.txt # 将a2.txt插入到 a1.txt 第一行后面
sed '$a helloworld' test.txt # 将helloworld插入到 a1.txt 末尾
sed -i '$r 1.txt' 2.txt # 将1.txt插入到 2.txt末尾 也可以一次性追加进去! cat 1.txt 2.txt 3.txt >>new.txt
sed -i '1d' Yixin_20211013_3.txt # 直接删除该文件第一行!sed -i 'nd' Yixin_20211013_3.txt # 直接删除该文件第n行!
sed -i '$d' Yixin_20211013_3.txt # 直接删除该文件末尾行!
sed -n "2, 1p" filename | awk 'print $1' #打印文本第二行第一列
sed 's/r/a/g' test.txt #全局修改某个字符串为XX
sed 's/r/a/gi' test.txt #全局修改某个字符串为XX,不区分大小写
sed -r 's/r/a/gi' test.txt #全局修改某个字符串为XX,-r还适用于扩展。
sed '2c helloworld' test.txt # 修改指定行号的内容
sed 's/^r/a/g' test.txt #修改指定开头的内容
sed -n '2,5p' test.txt # 查找指定行号间的内容
sed "s/lyl_zaxd_622_all/$file_name/g" hivesql.txt>current_running2.txt #全局更改模板中的文件名:'hsf_jryk_1123',不加g只匹配每行开头。
sed "s/lvm_multi_/zt_multi_plus_feature/g" xiaohua.txt > xiaohua.txt2.txt #全局更改模板中的文件名:'hsf_jryk_1123',不加g只匹配每行开头。
sed -i "\$c$sql_parameter" current_running2.txt #替换最后一行.resource_id=1017 and uid=202798;
ps:/^ */ 匹配以空格开头的字符
/^\s/ 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
/^[[:space:]]*/ 匹配以空格或者是\t制表符开头的字符
# sed 's/\s*//g' 2
+g :匹配每一行有行首到行尾的所有字符
不加g:匹配每一行的行首开始匹配,匹配到第一个符合的字段,就会结束,跳到下一行
awk 'BEGIN{OFS="\t";}{$2="";$3="";print $0}' yixin_1.txt >yixin_1_tuomin.txt #第二列,第三列置空,重定向到一个新的文件中!但是会有多余tab,记得删除
awk '{print $1,$5,$6,$4,}' yixin_1.txt >yixin_1_key.txt # 直接把4个主键拿出来!
awk 'NR==1{print}' filename #打印文本第一行
awk -F ',' '{print $1}' filename #打印文件中用','分割的第一列
awk '{print $1 $2}' filename #3、打印完第一列,然后打印第二列
awk 'END{print NR}' filename # 打印文本文件的总行数
# 可以先将第一行复制一下,再将其插入到第二行,最后再删除第一行即可。
1、yy 复制第一行,然后用p进行粘贴。(nyy复制n行)
2、head -n 1 hbxj_20211011_fea2.txt > 1111.txt
3、sed -i '1 r rong360_fq_fea_head.txt' rong360_fq_fea_10w.txt
4、dd删除第一行。
删除文件 text中第一列
方式一:awk '{$1="";print $0}' text
方式二:sed -e 's/[^ ]* //' text
21、压缩和解压缩命令
Linux的压缩包后缀一般是:.tar.gz
-c或--create 建立新的备份文件。
-x或--extract或--get 从备份文件中还原文件。
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
-v或--verbose 显示指令执行过程。
-f<备份文件>或--file=<备份文件> 指定备份文件。
#解压:.tar.gz格式
tar -zxvf snappy-1.1.1.tar.gz #默认解压到当前目录tar-xvf snappy-1.1.1.tar.gz 默认解压到当前目录!!!!!
tar -xvf snappy-1.1.1.tar.gz -C/opt#将压缩包解压到/opt目录!!!!!!!
#解压:.zip格式
unzip mysql-connector-java-8.0.13.zip 默认解压到当前目录!!!!!!
unzip -d/opt mysql-connector-java-8.0.13.zip 解压到指定目录!!!!!!!
unzip mysql-connector-java-8.0.13.zip -d/opt #解压到指定目录!!!!!!!
unzip -l n30_new.zip #只看一下zip压缩包中包含哪些文件,不进行解压缩
unzip -n test.zip #解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数
unzip -d /temp test.zip #tmp需要先创建 #如果要把文件解压到指定的目录下,需要用到-d参数。
#压缩:.tar.gz
tar -czvf wjwl.tar.gz wjwl_20211011_fea.txt #将snappy-1.1.1文件夹进行打包压缩
tar -czvf /root/dir/snappy-1.1.1.tar.gz /opt/server/snappy-1.1.1
tar -zcvf /home/users/xiesiya/data_cut/cy_947_sample_1.tar.gz /home/users/xiesiya/data_cut/cy_947_sample_1.tsv
#压缩:.zip格式
zip -r mysq1-connector-java-8.0.13.zip mysql-connector-java-8.0.13/
zip -r wjwl.tar.gz wjwl_20211011_fea.txt
22、查看内存,占用情况
nvidia-smi -l 服务器查看GPU使用情况 , 在命令行输入
top -bn 1 -i -c 查看cpu占用,dstas -c 也可以 。或者vmstat -w-w
free -m #内存占用率:
free #查看占用情况(总的):
vmstat #带宽占用
ps -aux | sort -k4nr | head -K # 查看占用内存最多的N个进程:如果是10个进程,K=10,如果是最高的三个,K=3
df -lh # 查看硬盘空间大小:
cat /proc/meminfo #查看内存信息
查看系统位数: getconf LONG_BIT
查看CPU信息: 查看cpu个数(几核):cat /proc/cpuinfo |grep "processor"|wc -l
'''
netstat -tunlp | grep 5560 #查看某一端口的使用情况:
PID:进程的ID USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,乙表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称
'''
python下quit()退出python!
hostname查看主机名,用ip地址太麻烦。每个电脑都有唯一的ip地址,便于区分,路由器寻找对方主机的参数,子网掩码也可以区分电脑是哪一类地址,abc类,a类国家级的。
23、文件切分与合并
split -l 500000 splitTest.txt 按行切分
24、删除乱码文件
ls -i #按文件的节点号:
find -inum 节点号 -delete
25、vi全局替换方法
语法为 :[addr]s/源字符串/目的字符串/[option]
全局替换命令为::%s/源字符串/目的字符串/g
[addr]: 表示检索范围,省略时表示当前行。
如:“1,20” :表示从第1行到20行;
“%” :表示整个文件,同“1,$”;
“. ,$” :从当前行到文件尾;
s :表示替换操作
[option] :表示操作类型
如:g 表示全局替换;
c 表示进行确认
p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
26. join方法
join 1.txt 2.txt # 内连接,相当于inner merge
join -a1 1.txt 2.txt # 左连接,相当于inner merge
join -a2 1.txt 2.txt # 右连接,相当于inner merge
join -a1 -a2 1.txt 2.txt # 全连接,相当于outer merge
join -1 2 -2 3 file1.txt file2.txt #以第一个文件的第二列和第二个文件的第三列做匹配字段。
#-o 指定 将file1的1,2,3列,file2的1,2,3 列都输出。-a指定将file1中不匹配的行也输出
join -o 1.1 -o 1.2 -o 1.3 -o 2.1 -o 2.2 -o 2.3 -e 'empty' -a 1 file1.txt file2.txt
join -v1 file1.txt file2.txt # -v 1 将file1中不匹配的行输出
join -v1 -1 2 -2 5 1.txt 2.txt > 3.txt
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/vivian/sky/(等同于 :g/vivian/s//sky/)替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来替换 / ): /oradata/apras/替换成/user01/apras1/
删除文本中的^M
问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M,
请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
使用命令:cat filename1 | tr -d “^V^M” > newfile;
使用命令:sed -e “s/^V^M//” filename > outputfilename
需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。
在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:
:%s/^V^M//
:%s/^M$//g
如果上述方法无用,则正确的解决办法是:
tr -d “\r” < src >dest
tr -d “\015〃 dest
strings A>B
其它用法
利用 :s 命令可以实现字符串的替换。具体的用法包括:
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上
27、 tee命令:cat 1.txt | tee 3.txt 查看1文件并写入到3文件,
ls >a.txt,这时我们就不能看到输出了,如果我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令了。
tee file 输出到标准输出的同时,保存到文件file中。如果文件不存在,则创建;如果已经存在,则覆盖之。
tee -a file 输出到标准输出的同时,追加到文件file中。如果文件不存在,则创建;如果已经存在,就在末尾追加内容,而不是覆盖。
tee -输出到标准输出两次。
tee file1 file2 - 输出到标准输出两次,同时保存到file1和file2中。
28、wget命令:下载
wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.10/ubuntu-20.10-desktop-amd64.iso
wget -d http://192.168.1.168 #下载192.168.1.168首页并且显示下载信息
wget -O https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.10/ubuntu-20.10-desktop-amd64.iso #使用wget -O下载并以自定义文件名保存
vi .git/arc/default-relative-commit
vim:
1.删除所有内容命令:ggdG
其中,gg为跳转到文件首行;dG为删除光标所在行以及其下所有行的内容;
再细讲,d为删除,G为跳转到文件末尾行;
编辑模式下,大写的O上方加一行,o下方加一行。全部替换%s/hello/haha/g
按【/】全局搜索
yy复制 5yy复制5行
p粘贴:- p(小写) 在光标位置之后粘贴 - P(大写) 在光标位置之前粘贴
u撤销
dd 删除 5dd删除5行
gg回到文件开头
G回到文件未尾
/Hello 在文件中查找字符串Hello
home行首,end回行尾。
:wq 保存退出
:wq!强制保存退出
:x 保存退出
shift+z+Z 保存退出
:q查看文件内容之后退出
:q!修改内容不想保存退出
:w只保存,不退出
:w b.txt 将当前文件另存为b.txt
:123将光标定位到123行
:%s/Haha/Hello/g 替换
:wq 保存并退出
:set number 显示行号
:set nonumber 隐藏行号
/apache 在文档中查找apache 按n跳到下一个,shift+n上一个
h(左移一个字符←)、j(下一行↓)、k(上一行↑)、l(右移一个字符→)
grep '2b5fe08c9b856b9bf17787fe3ae0d3b5' jiufu_meta02 #或者
cat jiufu_meta02|grep 9b75a13bad8b9574fac20cc9f3be234a
$ grep –e “正则表达式” 文件名 #从文件内容查找与正则表达式匹配的行
$ grep –i "被查找的字符串" 文件名 #查找时不区分大小写:
$ grep -l "被查找的字符串" 文件名 #查找匹配的行数:
拷贝/粘贴 (陈皓注:p/P都可以,p是表示在当前位置之后,P表示在当前位置之前)
P → 粘贴
yy → 拷贝当前行当行于 ddP
yyp 复制光标所在行,并粘贴
2dd → 删除2行
3p → 粘贴文本3次
NG → 到第 N 行
w → 到下一个单词的开头。
e → 到下一个单词的结尾。
% : 匹配括号移动,包括 (, {, [. (陈皓注:你需要把光标先移到括号上)
* 和 #: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
^ 到行头
^ → 到行头
<Ctrl-v> → 开始块操作
<Ctrl-d> → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
I-- [ESC] → I是插入,插入“--”,按ESC键来为每一行生效。
自动提示: <C-n> 和 <C-p>
在 Insert 模式下,你可以输入一个词的开头,然后按 <C-p>或是<C-n>,自动补齐功能就出现了……
系统管理命令
stat 显示指定文件的详细信息,比ls更详细
who 显示在线登陆用户
whoami 显示当前操作用户
hostname 显示主机名
uname 显示系统信息
top 动态显示当前耗费资源最多进程信息
ps 显示瞬间进程状态 ps -aux
du 查看目录大小 du -h /home带有单位显示目录信息
df 查看磁盘大小 df -h 带有单位显示磁盘信息
ifconfig 查看网络情况
ping 测试网络连通
netstat 显示网络状态信息
man 命令不会用了,找男人 如:man ls
clear 清屏
alias 对命令重命名 如:alias showmeit="ps -aux" ,另外解除使用unaliax showmeit
kill 杀死进程,可以先用ps 或 top命令查看进程的id,然后再用kill命令杀死进程。
打包压缩相关命令
gzip:
bzip2:
tar: 打包压缩
-c 归档文件
-x 压缩文件
-z gzip压缩文件
-j bzip2压缩文件
-v 显示压缩或解压缩过程 v(view)
-f 使用档名
例:
tar -cvf /home/abc.tar /home/abc 只打包,不压缩
tar -czvf /home/abc.tar.gz /home/abc 打包,并用gzip压缩
tar -jcvf /home/abc.tar.bz2 /home/abc 打包,并用bzip2压缩
当然,如果想解压缩,就直接替换上面的命令 tar -cvf / tar -zcvf / tar -jcvf 中的“c” 换成“x” 就可以了。
关机/重启机器
shutdown
-r 关机重启
-h 关机不重启
now 立刻关机
halt 关机
reboot 重启
用户及用户组管理
/etc/passwd 存储用户账号
/etc/group 存储组账号
/etc/shadow 存储用户账号的密码
/etc/gshadow 存储用户组账号的密码
useradd 用户名
userdel 用户名
adduser 用户名
groupadd 组名
groupdel 组名
passwd root 给root设置密码
su root
su - root
/etc/profile 系统环境变量 win+r ----sysdm.cpl
bash_profile 用户环境变量
.bashrc 用户环境变量
su user 切换用户,加载配置文件.bashrc
su - user 切换用户,加载配置文件/etc/profile ,加载bash_profile
更改文件的用户及用户组
sudo chown [-R] owner[:group] {File|Directory}
例如:还以jdk-7u21-linux-i586.tar.gz为例。属于用户hadoop,组hadoop
要想切换此文件所属的用户及组。可以使用命令。
sudo chown root:root jdk-7u21-linux-i586.tar.gz
更改权限
sudo chmod [u所属用户 g所属组 o其他用户 a所有用户] [+增加权限 -减少权限] [r w x] 目录名
例如有一个文件filename,权限为“-rw-r----x” ,将权限值改为"-rwxrw-r-x",用数值表示为765
sudo chmod u+x g+w o+r filename
上面的例子可以用数值表示
sudo chmod 765 filename
cur_dateTime="`date +%Y-%m-%d,%H:%m:%s`"
shell脚本:chmod +x test.sh #如果在开头加入bash解释器#!/bin/uesr/bash 则不用添加权限也可以执行,与python类似。
date_info=$(date -d "yesterday" +%Y%m%d) # 当前日期的前一天,输入到变量要加$
date +"%Y-%m-%d" # 获取当前日期。
date +'%Y%m%d' # 20211201
date +'%m%d' # 1201
date +'%F' #2021-12-01
date -d "10 day ago" +%Y%m%d #计算当前日期的前几天(例如计算当前日期的前10天),如果是负数的话,则会往前数
date -d "yesterday 20150401 " +%Y%m%d #计算指定日期的前一天的日期
file=/dir1/dir2/dir3/my.file.txt
可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 . 及其左边的字符串:file.txt
${file##*.}:删掉最后一个 . 及其左边的字符串:txt
${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 / 及其右边的字符串:(空值)
${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2
也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt
#!/bin/bash
export CDH_HOME="/opt/cloudera/parcels/CDH"
export HADOOP_HOME="/opt/cloudera/parcels/CDH/lib/hadoop"
export HIVE_HOME="/opt/cloudera/parcels/CDH/lib/hive"
export HADOOP_CONF_DIR="/etc/hadoop/conf"
export HIVE_CONF_DIR="/etc/hive/conf"
export HADOOP_VERSION=2.6.0-cdh5.13.3
export JAVA_HOME="/opt/jdk1.8.0_51"
PATH="$PATH:$JAVA_HOME/bin"
export PATH
source ~/.bashrc
echo $(which python)
kinit< passwd
date_info=$(date +%m%d) #日期
dir_res="./save/"$date_info #创建当天的文件夹
if [ ! -e $dir_res ];then #如果路径不存在,则创造路径
mkdir -p $dir_res
fi
date_save="./date_save" #创建date_save文件夹,之后从hadoop拉取的tsv文件都存放在里面
if [ ! -e $date_save ];then #如果路径不存在,则创造路径
mkdir -p $date_save
fi
while read -r line
do
if [ "${line:0:3}" != "END" ];then #line第0-2不为end就继续执行!
echo $line #输出当前命令
org_parameter=${line%%//*} #机构名删掉第一个 // 及其右边的字符串:xmqy2
file_name="hsf_"$org_parameter"_"$date_info # 'hsf_jryk_1123'
file_name_with_format=$date_save"/"$file_name".tsv" #tsv文件的路径,hsf_jryk_1123.tsv
temp=${line%//*} #${file%/*}:删掉最后一个 // 及其右边的字符串:xmqy2//resource_id=1017 and uid=202798;
sql_parameter=${temp#*//} #hivesql中的选择条件:${file#*/}:删掉第一个 // 及其左边的字符串: resource_id=1017 and uid=202798;
# temp=${line##*//} #python的参数输入,${file##*/}:删掉最后一个 // 及其左边的字符串: -name 厦门强云v2 -mode 300-850
# python_parameter="-path "$file_name_with_format" "$temp #xmqy2//resource_id=1017 and uid=202798;//-name 厦门强云v2 -mode 300-850
sed "s/lyl_zaxd_622_all/$file_name/g" hivesql.txt>current_running.txt #更改模板中的文件名:'hsf_jryk_1123'
sed -i "\$c$sql_parameter" current_running.txt #修改当前的文件指令:最后一行追加了resource_id=1017 and uid=202798;
$(/usr/bin/beeline -u "jdbc:hive2://bi-hadoop02.b28.rong360.com:10000/mkt;principal=hive/bi-hadoop02.b28.rong360.com@RONG360.COM" -f current_running.txt)
$(/usr/bin/hdfs dfs -getmerge hdfs://nameservice1/user/hive/warehouse/tj_tmp.db/$file_name $file_name_with_format)
sed "s/lyl_zaxd_622_all/$file_name/g" hivesql.txt>current_running2.txt #更改模板中的文件名:'hsf_jryk_1123'
sed -i "\$c$sql_parameter" current_running2.txt #修改当前的文件指令:替换最后一行resource_id=1017 and uid=202798;
$(/usr/bin/beeline -u "jdbc:hive2://bi-hadoop02.b28.rong360.com:10000/mkt;principal=hive/bi-hadoop02.b28.rong360.com@RONG360.COM" -f current_running2.txt)
$(/usr/bin/hdfs dfs -getmerge hdfs://nameservice1/user/hive/warehouse/tj_tmp.db/$file_name $file_name_with_format)
#下载文件
python ./report_generate.py $python_parameter #传入参数:"-path "$date_save"/"$file_name".tsv"" "-name 厦门强云v2 -mode 300-850
fi
done < ./parameter.txt #xmqy2//resource_id=1017 and uid=202798;//-name 厦门强云v2 -mode 300-850 \n END
cd ./save #进入save路径中
tar_name=$date_info".tar.gz"
tar -czvf $tar_name $date_info
set mapreduce.job.queuename=tj;
史上最全linux语法汇总,教你一文掌握linux
于 2022-03-07 18:29:16 首次发布