史上最全linux语法汇总,教你一文掌握linux

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 查看10012、查看应用进程列表
 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]: 表示检索范围,省略时表示当前行。
如:“120” :表示从第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

需要注意的是在12两种方法中,^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;



  • 5
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值