shell常用命令-自用

 

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 abc@192.168.0.5:/home/xxx/test /root   这个命令的作用是将服务器端文件test传到本地文件夹/root下。
利用sshpass,假设密码为efghi,则可写作:
ssh -p efghi scp abc@192.168.0.5:/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 abc@192.168.0.5:/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}'

如果最后一个字段是%是,打印一整行

取ip

ifconfig |awk -F '[: ]+' 'NR==2{print $4}'

 

查找一个目录下所有文件中包含某内容的行,显示整行

cat /home/test/* |grep 想查找的内容, | awk '{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’ 文件名

 

给文件第一行添加表头

 sed -i '1i\表头内容'  目标文件名
 

 

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. 文件夹移动

正确的移动文件夹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

前面的路径必须相同才是改名,否则是移动

 

  1. 文件的改名和移动同文件夹

 

-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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值