linux 命令汇总

一 grep 命令

-i :ignore-case忽略大小写
-c :打印匹配的行数
-v :查找不包含匹配项的行
-n :打印包含匹配项的行和行标
-w :搜索整个词,而不是词中的部分字串
-A :显示匹配行之后的N行 
-B :显示匹配行之前的N行 
-C :显示匹配行之前之后的N行

 二 regex 相关

常见的转义

   忽略正则表达式中特殊字符的原有含义
^   匹配正则表达式的开始行
$   匹配正则表达式的结束行
<  从匹配正则表达式的行开始
>  到匹配正则表达式的行结束
[ ]  单个字符;如[A] 即A符合要求
[ - ] 范围  [A-Z]即A,B,C一直到Z都符合要求
.   所有的单个字符
*   所有字符,长度可以为0 

重复的操作的表示

?     最多匹配一次
*     匹配零次或者任意多次
+     匹配一次以上
{n}   匹配n次
{n,}  最少匹配n次
{,m}  最多匹配m次
{n,m} 匹配n到m次

 三 其他命令

uname -a     #查看内核,处理器,操作系统等信息
cat /proc/cpuinfo | sed -n '5p'    # 显示结果: model name    : Intel(R) Core(TM) i5-4310U CPU @ 2.00GHz
cat /proc/meminfo | head -3   #显示结果:   MemTotal: 8080420 kB     MemFree: 2983204 kB   Buffers: 100696 kB
df    #显示档案系统的状况,或是看所有档案系统的状况
du   #显示目录或文件的大小
top  #Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
alt + F7  黏住输入框(各种响应框)
ctrl + alt + F1 纯终端
ctrl + alt + F7  gnome
ps -A 查看所有运行进程
tar -zcvf 压缩文件名.tar.gz  被压缩的文件
tar -zxvf 压缩文件名.tar.gz  解压缩
ctrl + u 清除当前行所有字符
ctrl + a 移动到命令行首
ctrl + e 移动到命令行尾 

四 source   sh    ./ 的问题

1 先说sh test.sh 和 ./test.sh的区别:
(1) 如果脚本所在目录路径不在path 里面, 要执行当前目录下的可执行文件,使用全路径 ./executable-file
(2) 如果要执行一个sh脚本,不管有没可执行的权限(chmod),都可以使用 sh file,如果file不在当前目录,也要传入全路径


2 再说下source
(1) source命令也称为点命令,也就是一个点符号(.),是bash的内部命令,功能是使shell读入指定的shell程序文件并依次执行文件中的所有语句
(2) source命令通常用于重新执行刚修改的初始化文件,使之立刻生效,而不必注销并重新登录.
(3) 用法 source filename 或 . filename


3 source 和 sh or ./的区别
(1) sh file 和 ./ file 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
(2) source file 这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面

实例:

1.新建一个test.sh脚本,内容为:A=1
2.然后使其可执行chmod +x test.sh
3.运行sh test.sh后,echo $A,显示为空,因为A=1并未传回给当前shell
4.运行./test.sh后,也是一样的效果
5.运行source test.sh 或者 . test.sh,然后echo $A,则会显示1,说明A=1的变量在当前shell中

五 vim  快捷键  

操作类:

x    删除光标所在位置字符
i    光标前插入文本
A    行后添加文本
dw   删除一个单词(光标放在起始出)
d2w  删除两个单词
d$   从光标处删至当前行尾部
dd   删除该行(接着光标移动到另一行输入p将之前的一行粘贴置入到此行上方)
2dd  删除两行
r+char 替换光标所在位置的字符

  

移动类:

光标在屏幕文本中的移动可以用箭头键,也可以使用 h j k l 字母键    k (上行)j(下行) h(左移) l(右移)
w 跳到下一个单词的开始
e 跳到单词的结束
输入0(数字零)移动光标到行首
gg 跳到文件的开始
G 跳到文件的结束
10gg 或10G 跳到第10行

撤销类:

输入u来撤消最后执行的命令
输入U来撤消对整行的修改
Ctril + R 重做被撤消的命令,也就是撤消掉撤消命令

查找类:

正常模式下输入 /(或者:) 字符输入要查找的字符串 回车
n 查找所搜索的字符串
N 逆向查找所搜索的字符串

  

六 sed用法小结

简介:

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

  

sed使用参数

[root@www ~]# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!


要删除第 3 到最后一行
 nl /etc/passwd | sed '3,$d' 

在第二行后(亦即是加在第三行)加上『drink tea』字样!
nl /etc/passwd | sed '2a drink tea'那如果是要在第二行前

 nl /etc/passwd | sed '2i drink tea'


如果是要增加两行以上,在第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』
nl /etc/passwd | sed '2a Drink tea or ......
> drink beer ?'


将第2-5行的内容取代成为『No 2-5 number』呢?
nl /etc/passwd | sed '2,5c No 2-5 number'

仅列出 /etc/passwd 文件内的第 5-7 行
nl /etc/passwd | sed -n '5,7p'

搜索 /etc/passwd有root关键字的行

nl /etc/passwd | sed '/root/p'
使用-n的时候将只打印包含模板的行

nl /etc/passwd | sed -n '/root/p'
删除/etc/passwd所有包含root的行,其他行输出nl /etc/passwd | sed '/root/d'

搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:

 nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出

nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}' 
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代


先观察原始信息,利用 /sbin/ifconfig 查询 IP
[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(以下省略).....


处理得到本机ip
(1)将 IP 前面的部分予以删除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

(2)将 IP 后面的部分予以删除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100


多点编辑
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
[root@www ~]# sed -i 's/.$/!/g' regular_express.txt

利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』
[root@www ~]# sed -i '$a # This is a test' regular_express.txt由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!

八 cat命令

-b  对非空白行进行编号,行号从1开始
-n  和nl命令差不多,对所有行(包括空白行)进行编号输出显示
-E  在每行的结尾处附加$符号

cat对于内容极大的文件来说,可以用管道 | 传送到more工具,然后一页一页地查看
如[root@localhost ~]# cat /etc/fstab /etc/profile | more

cat 有创建文件的功能,创建文件后,要以EOF结束;(> 改为 >> 则为追加)
如[root@localhost ~]# cat > test << EOF  创建test文件,以EOF作为文件输入的结尾
>test1   这是输入内容
>test2   这是输入内容
>EOF 退出编辑状态

七 more

more 是我们最常用的工具之一,最常用的就是显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比

more [参数选项] [文件]

+num   从第num行开始显示;
-num   定义屏幕大小,为num行; 
+/pattern   从pattern 前两行开始显示; 



more 的动作指令:

我们查看一个内容较大的文件时,要用到more的动作指令,比如ctrl+f(或空格键) 是向下显示一屏,ctrl+b是返回上一屏; Enter键可以向下滚动显示n行,要通过定,默认为1行;

Enter           向下n行,需要定义,默认为1行;
Ctrl+f          向下滚动一屏;
空格键          向下滚动一屏;
Ctrl+b          返回上一屏;
=               输出当前行的行号;
:f              输出文件名和当前行的行号;
v               调用vi编辑器;
!命令          调用Shell,并执行命令;
q               退出

八 less

enter <-> y    向下/上滚动一行
space <-> b    向下/上滚动一屏
d  <-> u       向下/上滚动半屏
h              less的帮助
w              可以指定显示哪行开始显示,是从指定数字的下一行显示;比如指定的是6,那就从第7行显示
g              跳到第一行
G              跳到最后一行
p n%           跳到n%,比如 10%,也就是说比整个文件内容的10%处开始显示
/pattern       搜索pattern ,比如 /MAIL表示在文件中搜索MAIL单词
v              调用vi编辑器
q              退出less
!command       调用SHELL,可以运行命令;比如!ls 显示当前列当前目录下的所有文件

  

九 sort命令 

-b   忽略每行前面开始出的空格字符。
-c   检查文件是否已经按照顺序排序。
-f   排序时,忽略大小写字母。
-n   依照数值的大小排序。
-o   <输出文件>   将排序后的结果存入指定的文件。
-r   以相反的顺序来排序。
-t<分隔字符>   指定排序时所用的栏位分隔字符。
-k  选择以哪个区间进行排序。
-u   去除重复行





 sort的-t和-k用法示例

如果有一个文件的内容是这样:
[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

这 个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。那么我想以水果数量来排序,也就是以第二列来排 序,如何利用sort实现?幸好,sort提供了-t选项,后面可以设定间隔符。指定了间隔符之后,就可以用-k来指定列数了。

[rocrocket@rocrocket programming]$ sort -n -k 2 -t ':' facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

十 awk命令

简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

入门实例

显示/etc/passwd的账户

#cat /etc/passwd |awk  -F ':'  '{print $1}'  
root
daemon
bin
sys

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

#cat /etc/passwd |awk  -F ':'  '{print $1"	"$7}'
root    /bin/bash
daemon  /bin/sh
bin     /bin/sh
sys     /bin/sh

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。

cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'
name,shell
root,/bin/bash
daemon,/bin/sh
bin,/bin/sh
sys,/bin/sh
....
blue,/bin/nosh

awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

搜索/etc/passwd有root关键字的所有行

#awk -F: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash

这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。

搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd

搜索/etc/passwd有root关键字的所有行,并显示对应的shell

# awk -F: '/root/{print $7}' /etc/passwd             
/bin/bash

awk内置变量

awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符

 此外,$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。

统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:

#awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

使用printf替代print,可以让代码更加简洁,易读

 awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s
",FILENAME,NR,NF,$0)}' /etc/passwd

看这样一个例子,文件的路径为/usr/share/man/man5/locale.alias.5.gz 问如何使用命令得到所在的文件夹,也即/usr/share/man/man5/

十一 其他汇总

1 跳板机全量grep

atones -L 'grep "keyword" --color=always /home/xx/logs/access*' l-machine[1-2].cn.com | head -10

2 socat远程调试

socat tcp4-listen:50015,fork,range=192.168.130.126/32 tcp4:127.0.0.1:7789

50015是机器端口,随意指定即可,别和别人重复了。 range后面的ip是调试机的ip(本机) 127.0.0.1是对应的startenv.sh里面address指定的内容

3 java运维工具

jvisualvm
jsonsole
jmap
jstack -F -l 26042 > xxx.log
jstat -gcutil 26042 1000 100
jmap -heap 26042
原文地址:https://www.cnblogs.com/balfish/p/4772573.html