当前位置: 首页 > 图灵资讯 > 技术篇> Linux常用命令

Linux常用命令

来源:图灵教育
时间:2023-06-02 09:34:56

一、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")}'