做为一名程序员,势必或多或少的要和服务器打交道,不求像那些搞运维的人一样,Linux出神入化,但也要会一些基本的命令。它会使你的程序之路,更加开阔。
以下是本人工作中总结的一些组合命令,太简单的就不介绍了。
一 查看文件属性,要求显示完整的时间
1 ls -full-time -- 显示当前文件夹的下的所有文件
2 ls --full-time 文件或文件路径 -- 显示某个文件夹下或某个文件的文件
二 、查看文件内容
虽然查看文件的命令有很多,像cat,more,head,tail,sed,vi 但是,我们还是应该根据
自己的需求进行选择使用,选择好了事半功倍。
1.搜索查看文件内容。
less register/index2.jsp -- less 文件路径或者文件名
使用less有个好处,你可以在查看的过程中进行搜索。执行完"less 文件路径或者文件名"
命令后,按键盘的"/" 键,然后在Linux终端输入你要查找的字符串,按Enter,就可以查到
你刚才输入的关键字,继续按Enter,会一直往下搜索。
2 . 搜索查看并做修改。
vi register/index2.jsp -- vi 文件路径或者文件名
vi 查看的模式和less相似,也是执行完命令后,可以输入要查找的字符串,但是,它区分向上查找、向下查找
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
pattern是需要匹配的字符串,例如:
1: /abc<Enter> -- 查找abc2:
2: abc <Enter> -- 查找abc单词(注意前后的空格)
除此之外,pattern还可以使用一些特殊字符,包括(/、^、$、*、.),其中前三个这两个是vi与vim通用的,“/”为转义字符。
1: /^abc<Enter> -- 查找以abc开始的行
2: /abc$<Enter> --查找以abc结束的行
3: //^abc<Enter> --查找^tabc字符串
3. sed 显示指定行范围的内容
--查看文件的第10到第20行
sed -n '10,20p' action.log
随便提一句,sed 还可以删除指定行范围的内容
-- 删除第4到第6行
sed '4,6d' fileName
-- 删除包含"haha"的行到包含"hehe"的行之间的行
sed '/haha/,/hehe/d' fileName
-- 删除包含"haha"的行到第十行的内容
sed '/haha/,10d' datafile
退出sed命令,按0
4.tail 经常被用来动态查看日志,调试程序。相信有过服务器维护经验的小伙伴们,都深有体会。
你在浏览器点击相应的功能,Linux终端会将你刚才点击功能的日志动态的显示在屏幕上。
eg:动态查看 mylog.out 倒数200行日志。
tail -200n mylog.out
5 more 和 cat 就是纯查看。
more mylog.out more 可以进行翻页查看。
cat mylog.out 可以查看多个文件,如何加上 -n 参数的话,会第一个开始开始往下编号。
我个人觉的cat 比较适合jsp找错,我们根据日志记录,去查看Jsp对应的java文件,根据行号找到对应的报错行,进行修改。
6 head 查看前n行
head -n 400 ./logs/catalina_20141120.out |tail -n 100
三 查找包含某个字符串的文件
1 find
find ./ -type f -name '*.out' |xargs grep "hehe" -- 查找当前目录下包含hehe 字符串的文件
find命令相信大家应该很熟悉了,我稍微介绍下xargs命令,它是一个给命令传递参数的过滤器,也可以说是一个工具。
例如上面的命令,可以解析为它把find的查询结果,传递给grep,即grep是在find的查询结果中查找包含hehe字符串的文件。
以下举几个Xargs使用的例子,方便大家参考。
删除tomcat目录下所有的日志文件
find /tomcat/ -type f -name '*.log' -print0 |xargs -0 rm -f -- -print0 和0 的含义是去掉空格。
查找包含A错,但不含B错的日志文件,并打包。
find ./tomcat/logs -type f -name 'catalina_201412*.out' |grep -rni "ExceptionA" |grep -v "ExceptionB" |xargs tar -zcvf ExcetpionA.tar.gz
2 grep
grep 和find的区别,主要是grep主要是用来查找包含的符串的文件。
grep "ExcetpionA" *.out 在当前目录中查找,包含字符串“ExcetpionA” ,且以out为后缀的文件。
以下是4个grep常用的参数
-c:只输出匹配行的计数。
-I:不区分大小写(只适用于单字符)
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
grep -e "正则表达式" 文件名
eg: grep -e "nn*" *.out -- 查找文件中包含连个以上n字符串的文件
grep -c "字符串" 文件名
eg: grep -c "Exception" catalina_201412*.out
[myHost@jing logs] catalina_20141201.out:27
[myHost@jing logs] catalina_20141202.out:8
grep –v "字符串" 文件名 -- 查找不包含字符串的文件
grep -i "字符串" 文件名 --查找包含字符串的文件,且文件不区分大小写。
举 2 个用grep进行查找的综合的例子。
查看包含A错,但不包含B错的日志文件
cat ./catalina_20141120.out|grep -rni "Exception" |grep -v "ScormException"
-i 要查找的字符串不区分大小
-r 在当前目录或子目录中查找
-n 显示行号
四 统计文件的数量
ls -lR|grep doc|wc -l
ls
-- l 以长清单模式,显示文件的权限,大小,拥有权等。
-- R 递归显示子目录
-- a 即 all 显示所有目录或文件
-- t 用文件或目录的更改时间排序
grep doc 超找doc文件
wc -l 统计行数
-c 统计下字节数
-w 统计字数
五 打包或解压命令
打包 目的路径 要打包的文件
tar -zcvf /home/xahot.tar.gz /xahot
tar -zxvf xxx.tar.gz
六 复制文件
scp -r ./send_email.jsp thjnpx@114.112.69.156:/jing/send_mail.jsp
-r -- 拷贝文件夹
rsync
最后介绍一下,将长命令简化的方法。
有时候,我需要写很长的命令来执行任务。长期多次的输入,会显得很繁琐,
那么我们有两种方法解决。
1 写一个shell脚本, 以后执行的时候,我们只要运行我们的shell脚本就行了。
比如 :/home/jyzdy/rsync.sh/rsync_all.sh 192.168.100.200
相信负责服务器的小伙伴们,很熟悉这个命令,就是同步。如果线上有10台服务器,那你每台服务器
都得执行这个命令,更新频繁的话,太累人了。
我们写一个shell脚本。
vi myrsync
内容:
#!/bin/bash
/home/jyzdy/rsync.sh/rsync_all.sh 192.168.148.49
wq 保存
mv myrsync myrsync.sh -- 重命名
chmod 700 myrsync.sh -- 赋值权限
把该文件移动到bin文件中。
将bin的路径放到系统环境变量中
export PATH=$PATH:/myproject/bin/
哦啦!
以后执行同步,直接myrsync.sh 就OK了,而且Linux 按tab键还自动补全,太方便了。
2 给长命令起别名
alias myrsync.sh ="/home/jyzdy/rsync.sh/rsync_all.sh 192.168.148.49"
注意:在定义别名时,等号两边不能有空格,否则 shell脚本搞不清楚,你要干啥。