1.ssh免密:
-o StrictHostKeyChecking=no 避免第一次登录出现公钥检查。也就是避免出现
例如:
scp -o StrictHostKeyChecking=no $bakpathfrom:/$bakpath/$homebak/${day}/${day}.zip /$bakpath/$homebak/${day}/
sshpass 参数 SSH命令(ssh,sftp,scp等)。
参数:
-p password //将参数password作为密码。
-f passwordfile //提取文件passwordfile的第一行作为密码。
-e //将环境变量SSHPASS作为密码。
比如说:
scp [email protected]:/home/xxx/test /root 这个命令的作用是将服务器端文件test传到本地文件夹/root下。
利用sshpass,假设密码为efghi,则可写作:
ssh -p efghi scp [email protected]:/home/xxx/test /root
另外,对于ssh的第一次登陆,会提示:“Are you sure you want to continue connecting (yes/no)”,这时用sshpass会不好使,解决方法:
1.可以在ssh命令后面加上 -o StrictHostKeyChecking=no来解决。比如说上面的命令,就可以写作ssh -p efghi scp [email protected]:/home/xxx/test /root -o StrictHostKeyChecking=no。
2.或者写入配置文件:把 StrictHostKeyChecking no 加到/etc/ssh/sshconfig 可以让ssh客户端自动接受新主机的hostkey,不用每次都自己输入yes
scp参数
scp -t ..... 屏蔽非法参数报错,比如请求延时
-v 用来显示进度,可以用来查看连接,认证,或是配置错误
-C 使能压缩选项 [大写]
-P 选择端口,注意 -p已经被rcp使用
-4 强行使用 IPV4 地址
-6 强行使用 IPV6 地址
-r 递归复制整个目录
......
其他无关的。。。
` ` 命令
‘ ‘ 保护所有的元字符不被解析,想打印单引号,必须放在双引号内,或者转义
“ “ 只允许变量和命令被替换,其他元字符不被解析
2.awk -F"[ :]" '{print $3}'
表示以空格、冒号为分隔,取第三个参数
例:
root@Bizbox:/# echo "inet addr:192.168.28.205 Bcast:192.168.255.255 Mask:255.255.0.0" | awk -F"[ :]" '{print $3}'
192.168.28.205
awk '{if($(NF)== \"%s\") print $0}'
如果最后一个字段是%是,打印一整行
3.获取提示语言并发送密码(调用expect脚本语言)
/usr/bin/expect <<EOF
set timeout -1
spawn scp -r ${fromdir} root@${username}:${todir}
expect {
"root@${username}'s password:" { send "${password1}\r"
expect {
"root@${username}'s password:" { send "${password2}\r"}
}
}
}
expect eof
EOF
4. $? -ne 0
如果上一条命令执行后的结束代码不是0则执行下面的命令,直到fi行之前
if [ $? -ne 0 ];then
echo "... "
Fi
5.hdfs下判断文件或文件夹是否存在
test
Usage: hadoop fs -test -[defsz] URI
Options:
-d: f the path is a directory, return 0.
-e: if the path exists, return 0.
-f: if the path is a file, return 0.
-s: if the path is not empty, return 0.
-z: if the file is zero length, return 0.
Example:
hadoop fs -test -e filename
6.sed -i "s/ ,/,/g" test.csv
修改文件test.csv中“空格逗号”改为“逗号”
只需要修改"s/ ,/,/g"中间这个斜杠左右两边的内容
sed ‘s/修改前/修改后/g’ 文件名
7.字典和数组
定义字典:
#声明字典
declare -A dic
dic=([key1]="value1" [key2]="value2" [key3]="value3")
#打印指定key的value
echo ${dic["key1"]}
#打印所有key值
echo ${!dic[*]}
#打印所有value
echo ${dic[*]}
#遍历key值
for key in $(echo ${!dic[*]})
do
echo "$key : ${dic[$key]}"
done
定义数组
#数组
list=("value1" "value2" "value3")
#打印指定下标
echo ${list[1]}
#打印所有下标
echo ${!list[*]}
#打印数组下标
echo ${list[*]}
#数组增加一个元素
list=("${list[@]}" "value3")
8.grep -v grep
#过滤掉匹配"grep",因为你执行grep时会产生一个grep进程,所以把这个进程过滤掉
9.xargs
1>杀死进程的几种命令:
ps -ef | grep 'ddd' | xargs kill
kill `ps -ef | grep 'ddd'`
2>ls ./ |xargs -i cat {}
一行一行赋值给{},可以用{}代替
例 ls *.txt |xargs -t -i mv {} {}.bak
mv 1.txt 1.txt.bak
mv 2.txt 2.txt.bak
3>-d、-e、-p、与find一起使用
-d 选项
默认情况下xargs将其标准输入中的内容以空白(包括空格、Tab、回车换行等)分割成多个之后当作命令行参数传递给其后面的命令,并运行之,我们可以使用 -d 命令指定分隔符,例如:
echo '11@22@33' | xargs echo
输出:
11@22@33
echo '11@22@33' | xargs -d '@' echo
输出:
11 22 33
-p 选项
使用该选项之后xargs并不会马上执行其后面的命令,而是输出即将要执行的完整的命令(包括命令以及传递给命令的命令行参数),询问是否执行,输入 y 才继续执行,否则不执行。这种方式可以清楚的看到执行的命令是什么样子,也就是xargs传递给命令的参数是什么,例如:
echo '11@22@33' | xargs -p -d '@' echo
输出:
echo 11 22 33
?...y ==>这里询问是否执行命令 echo 11 22 33 输入y并回车,则显示执行结果,否则不执行
11 22 33 ==>执行结果
-n 选项
该选项表示将xargs生成的命令行参数,每次传递几个参数给其后面的命令执行,例如如果xargs从标准输入中读入内容,然后以分隔符分割之后生成的命令行参数有10个,使用 -n 3 之后表示一次传递给xargs后面的命令是3个参数,因为一共有10个参数,所以要执行4次,才能将参数用完。例如:
echo '11@22@33@44@55@66@77@88@99@00' | xargs -d '@' -n 3 echo
输出结果:
11 22 33
44 55 66
77 88 99
00
-E 选项,有的系统的xargs版本可能是-e eof-str
该选项指定一个字符串,当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令
echo '11 22 33' | xargs -E '33' echo
输出:
11 22
10.ps -fu 用户
例:ps -fu 用户|grep -v grep|awk '{print $2}'|xargs kill -9
f 显示程序间的关系
u 指定用户的所有进程
ps -fu 需要参数用户id号才能正常运行
ps -ef不需要就可以运行,显示所有进程
11.du -h –max-depth=0 user
–max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录。
12.find 目录/20* -maxdepth 0 -mtime +2 -type d -exec rm -r {} \;
删除当前目录下往前数第3天的数据(保留加上今天在内的三天时间),固定搭配
-maxdepth 可修改
-mtime 可修改
13.stat 文件名
关于时间的信息有三个:
最近访问时间 access time (-atime)、
最近更改时间 modify time (-mtime)、
最近状态改动时间 change time(-ctime),
当然我们也看到了创建时间那一项为空白,也证实了Linux系统下是无法查看文件的创建时间的
14. 解压缩命令
压缩:
gunzip 压缩后的文件名.gz
tar -zxvf 压缩后的文件名.tar.gz 待压缩的文件们
解压缩:
unzip 201710091600_00000.zip -d /data/2017temp/
15. 格式转化命令
iconv -f GBK -t UTF-8 -o 文件名
16. 筛选查看命令
cat 文件名 | grep "123456"
17.修改权限命令
(1)文字设定法
u 与文件属主拥有一样的权限
g 与和文件属主同组的用户拥有一样的权限
o 与其他用户拥有一样的权限
a 所有用户
+ 添加
- 取消
= 赋值
w 可写
r 可读
x 可执行
s 在文件执行时把进程的属主或组ID置为改文件的文件属主
chmod u+w 文件名
(2)数字设定法
1 可执行
2 可写
3 可读
chmod 777 文件名
18.修改所属用户组命令
chgrp -R book /opt/local/book
将/opt/local/book及其子目录下的所有文件的属主改为book
19.修改属主和属组命令
chown +R yu.users /his
把目录/his及其下的所有文件和子目录的属主改为yu,属组改为users
20.查看隐藏文件命令
ll -a
21.查看内存大小命令
free -m
total 总计物理内存大小
used 已使用多大
free 可用有多少
share 多个进程共享的内存总额
buffers/cached 磁盘缓存大小
-/+ buffers/cache:
22. 获取文件其中几行命令
sed -n ‘3,6p’ file > newfile
例如获取tia1_201709031525_00005.log文件的第三行至第五行(共三行),输出到yuyuyunewfile.log文件
23. 查看目录下所有文件大小以G为单位的命令
du -sh *|grep G
24. 查找命令汇总
(1)find
find path expression
1.按照文件名查找
(1)find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找
(2)find /etc -name httpd.conf #在/etc目录下文件httpd.conf
(3)find /etc -name '*srm*' #使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
(4)find . -name 'srm*' #表示当前目录下查找文件名开头是字符串‘srm’的文件
2.按照文件特征查找
(1)find / -amin -10 # 查找在系统中最后10分钟访问的文件(access time)
(2)find / -atime -2 # 查找在系统中最后48小时访问的文件
(3)find / -empty # 查找在系统中为空的文件或者文件夹
(4)find / -group cat # 查找在系统中属于 group为cat的文件
(5)find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件(modify time)
(6)find / -mtime -1 #查找在系统中最后24小时里修改过的文件
(7)find / -user fred #查找在系统中属于fred这个用户的文件
(8)find / -size +10000c #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
(9)find / -size -1000k #查找出小于1000KB的文件
3.使用混合查找方式查找文件
参数有: !,-and(-a),-or(-o)。
(1)find /tmp -size +10000c -and -mtime +2 #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
(2)find / -user fred -or -user george #在/目录下查找用户是fred或者george的文件文件
(3)find /tmp ! -user panda #在/tmp目录中查找所有不属于panda用户的文件
(2)grep
grep expression
1.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-i:不区分大小写
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
.:所有的单个字符。
* :有字符,长度可以为0。
2.实例
(1)grep 'test' d* #显示所有以d开头的文件中包含 test的行
(2)grep ‘test’ aa bb cc #显示在aa,bb,cc文件中包含test的行
(3)grep ‘[a-z]\{5\}’ aa #显示所有包含每行字符串至少有5个连续小写字符的字符串的行
(4)grep magic /usr/src #显示/usr/src目录下的文件(不含子目录)包含magic的行
(5)grep -r magic /usr/src #显示/usr/src目录下的文件(包含子目录)包含magic的行
(6)grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
25.mv命令
特别注意mv命令给目录改名
参考网址http://blog.csdn.net/u011794238/article/details/50343773
1,当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
2,当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。
注意;
- 文件夹移动
正确的移动文件夹1从/root目录下至/root/temp/下
例:mv /root/文件夹1 /root/temp/
ls /root/temp/
会出现文件夹1 //正确
但是下面是错误命令
mv /root/文件夹1 /root/temp/文件夹1
!!!会导致--> /root/temp/文件夹1/文件夹1
2.文件夹改名
mv /root/temp/文件夹1 /root/temp/文件夹2
前面的路径必须相同才是改名,否则是移动
- 文件的改名和移动同文件夹
-b选项会将同名的先备份(改名时)
mv log1.txt -b log2.txt
移动多个文件进一个文件夹
mv log1.txt log2.txt log3.txt /root/temp/test3
移动目录下所有文件至上一层文件夹
mv /root/temp/* ../
26.统计文件夹下文件个数
ls -l|grep "^-"|wc -l
文件夹下目录个数
ls -l|grep "^d"|wc -l
文件夹下文件个数,包括子文件夹里
ls -lR|grep "^-"|wc -l
27.cut
假设有个文件test.txt,数据为:
123 888888
124 999999
125 777777
while read line;do
id=`echo ${line}|cut -d" " -f1`
data=`echo $line|cut -d" " -f2`
。。。。。
done<test.txt
//id参数取的是以空格为分割的第一个参数,也就是123
//data参数去的是以空格为分割的第二个参数,也就是888888
//循环了test.txt文件中的每一行数据,循环赋值给id和data