一、Linux进程相关命令
ps -ef | grep java
pstree -p 21239查看21239所有子过程和线程。
pwdx 21239查看21239程序命令进程目录。
二、grep命令
1、日志搜索方法可以使用通配符查找主机上的所有服务器
grep "关键字" /wls/applogs/custom-*/error.log
2、grep '关键字' error.log:在error.log搜索“关键字”
3、grep -C10 '关键字' error.log:显示关键字前后10行记录
4、grep '关键字' error.log? -10[调整此参数,至能看到报错的具体原因]
三、less命令(精简)
1、less error.log:分页显示文件或其他输出
2、less error.log
/ 输入关键字,从文件头到后,按n从前到后找到下一个关键字,按n从后到前找到下一个关键字
? Shift+G到文件末尾,输入关键字,从文件末尾向前检查,按n从后到后搜索下一个关键字,按n从前到后搜索下一个关键字
3、less -N error.log
显示error.当log的内容被要求显示行号时
4、less -Mp '2015-06-13' error.log
查看一天的日志从哪一行开始
5、less -Mp '00:11:41' error.log
查看error.log从00:11:41日志开始时,显法阅读文件的百分比、行号和总行数
四、查看Linux文件内容的命令-less (详述)
less工具也是分页显示文件或其他输出的工具,应该说是linux正统查看文件内容的工具,功能极强;由于less的内容太多,下面是最常用的介绍。
1.less的语法格式
less [参数] 文件
常用参数
-c 刷新屏幕从顶部(从上到下),并显示文件内容。而不是通过底部滚动来刷新;
-f 强制打开文件,显示二进制文件时不提示警告;
-i 搜索时忽略大小写;除非搜索串包含大写字母;
-I 除非搜索串中包含小写字母,否则在搜索时忽略大小写;
-m 显示读取文件的百分比;
-M 显法读取文件的百分比、行号和总行数;
-N 每行前输出行号;
-p pattern 搜索pattern;比如在/etc/profile搜索单词MAIL,使用 less -p MAIL /etc/profile
-s 将连续多个空白行作为空白行显示;
-Q 在终端下不响铃。
2.less的动作命令
进入less后,我们必须学习一些动作,这样更方便 查阅文件内容。
回车键 向下移动一行;
y 向上移动一行;
空格键 向下滚动一个屏幕;
b 向上滚动一屏;
d 向下滚动半屏;
h less的帮助;
u 向上移动半屏;
w 从指定数字的下一行显示可以指定显示哪一行;例如,如果指定为6,则从第7行显示;
g 跳到第一行;
G 跳到最后一行;
p n% 例如,跳到n% 10%,即比整个文件内容的10%开始显示;
/pattern 搜索pattern ,比如 /MAIL表示在文件中搜索MAIL单词;
v 调用vi编辑器;
q 退出less
n 下一关键字
N 反向下一个关键字
!command 可以通过调用SHELL来操作命令;例如!ls 显示当前列目录下的所有文件
五、cat 命令的用法
该命令通常用于显示文件内容,或连接几个文件,或从标准输入中读取和显示,通常与重定向符号一起使用。
在显示文件内容或结合wc命令统计文件行数时,建议大家掌握这一常用的linux命令。
cat主要有三个功能:
一次显示整个文件:cat filename
2.从键盘创建文件:cat > filename 只能创建新文件,不能编辑现有文件.
3.将几份文件合并成一份文件:cat file1 file2 > file
命令参数:
-n, --number 对于输出的所有行数,从1开始对所有输出行数进行编号
代码示例:
1、cat log2012.log
2、cat -n log2012.log log2013.log
把 log2012.log 加上行号后输入的文件内容 log2013.log 这个文件里
3、cat -b log2012.log log2013.log log.log
把 log2012.log 和 log2013.log 加上行号(空白行不加)后,将文件内容附加到内容中 log.log 里。
4、cat -n log2012.log > log.log
把 log2012.log 加上行号后输入的文件内容 log.log 这个文件里
六、AWK 简明教程
1、起步上台:
我从netstat命令中提取了以下信息作为例子:
$ cat netstat.txt
以下是最简单、最常用的awk示例,输出第一列和第四例,
#awk语句包含在单引号中的大括号中。请注意,它只能包含在单引号中。
#其中的$1..$n表示第几例。注:$0表示整行。
$ awk '{print $1, $4}' netstat.txt
让我们来看看awk的格式化输出,它与C语言的printf没有什么不同:
$ awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n$1,$2,$4,$5,$6 netstat.txt
2、脱掉外套
过滤记录
让我们来看看如何过滤记录(以下过滤条件是:第三列值为0 && 第六列值为LISTEN)
$ awk '$3==0 && $6=="LISTEN" ' netstat.txt
其中“==”是比较运算符。其他比较运算符:!=, >, <, >=, <=
让我们来看看各种过滤记录的方法:
$ awk ' $3>0 {print $0}' netstat.txt
如果需要表头,可以引入内建变量NR:
$ awk '$3==0 && $6=="LISTEN" || NR==1 ' netstat.txt
加格式化输出:
$ awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s\n$4,$5,$6} netstat.txt
内建变量
说到内建变量,我们可以看看awk的一些内建变量:
$0 当前记录(整个行的内容存储在这个变量中)
$1~$n FS将当前记录的第n个字段分开
FS 输入字段分隔符 默认为空格或Tab
NF 当前记录中的字段数是多少列?
NR 读出的记录数是行号。从1开始,如果有多个文件,这个值就会不断积累。
如何使用,例如:如果我们想输出行号:
$ awk '$3==0 && $6=="ESTABLISHED" || NR==1 {printf "%02s %s %-20s %-20s %s\n",NR, FNR, $$5,$6} netstat.txt
指定分隔符
$ awk 'BEGIN{FS=":"} {print $$3,$6} /etc/passwd
上述命令也等同于:(-F意味着指定分隔符)
$ awk -F: '{print $$3,$6} /etc/passwd
注:如果要指定多个分隔符,可以这样做:
awk -F '[;:]'
让我们来看看一个以\t为分隔符输出的例子(下面使用/etc/passwd文件,本文件为:分隔):
$ awk -F: '{print $$3,$6} OFS="\t" /etc/passwd
3、脱掉衬衫
字符串匹配
让我们来看看几个字符串匹配的例子:
$ awk '$6 ~ /FIN/ || NR==1 {print NR,$$5,$6} OFS="\t" netstat.txt
$ awk '$6 ~ /WAIT/ || NR==1 {print NR,$$5,$6} OFS="\t" netstat.txt
上面的第一个例子与FIN状态相匹配, 第二个例子与WAIT字样的状态相匹配。其实 ~ 开始表示模式。/ /中间是模式。这是正则表达式的匹配。
其实awk可以像grep一样匹配第一行,就像这样:
$ awk '/LISTEN/' netstat.txt
我们能用 "/FIN|TIME/” 来匹配 FIN 或者 TIME :
$ awk '$6 ~ /FIN|TIME/ || NR==1 {print NR,$$5,$6} OFS="\t" netstat.txt
让我们来看看模式取反的例子:
$ awk '$6 !~ /WAIT/ || NR==1 {print NR,$$5,$6} OFS="\t" netstat.txt
或是:
$ awk '!/WAIT/' netstat.txt
折分文件
awk拆分文件非常简单,只需使用重定向即可。下面的例子是按照第6例分隔文件,相当简单(NR!=1表示不处理表头)。
$ awk 'NR!=1{print > $6}' netstat.txt
您还可以将指定列输出到文件中:
$ awk 'NR!=1{print $4,$5 > $6}' netstat.txt
统计
以下命令计算所有C文件、CPP文件和H文件的总和。
$ ls -l *.cpp *.c *.h | awk '{sum+=$5} END {print sum}'
几个花活
最后,我们再来看几个小例子:
#从file文件中找出长度大于80的行
awk 'length>80' file
#根据连接数查看客户端IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
#打印99乘法表
seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'