Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

  • Post author:
  • Post category:linux


0. grep命令


1. Linux ls  -ld 1


2. Linux 中ls -l // ll 命令详解  (7个字段):文件属性 1


3. shell中的if判断


4. Linux中 >和>>的区别   []和[[]]的区别 3

5. sed的使用参数 (shell的用途)


6. bg或者fg


7. ipset命令

8. wc – 命令

9. ifconfig命令

10. awk 命令



0.grep命令


Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。


1.命令格式:

grep [option] pattern file


2.命令功能:

用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。


3.命令参数:

-a   –text   #不要忽略二进制的数据。

-A<显示行数>   –after-context=<显示行数>   #除了显示符合范本样式的那一列之外,并显示该行之后的内容。

-b   –byte-offset   #在显示符合样式的那一行之前,标示出该行第一个字符的编号。

-B<显示行数>   –before-context=<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前的内容。

-c    –count   #计算符合样式的列数。

-C<显示行数>    –context=<显示行数>或-<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前后的内容。

-d <动作>      –directories=<动作>   #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。

-e<范本样式>  –regexp=<范本样式>   #指定字符串做为查找文件内容的样式。

-E      –extended-regexp   #将样式为延伸的普通表示法来使用。

-f<规则文件>  –file=<规则文件>   #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

-F   –fixed-regexp   #将样式视为固定字符串的列表。

-G   –basic-regexp   #将样式视为普通的表示法来使用。

-h   –no-filename   #在显示符合样式的那一行之前,不标示该行所属的文件名称。

-H   –with-filename   #在显示符合样式的那一行之前,表示该行所属的文件名称。

-i    –ignore-case   #忽略字符大小写的差别。

-l    –file-with-matches   #列出文件内容符合指定的样式的文件名称。

-L   –files-without-match   #列出文件内容不符合指定的样式的文件名称。

-n   –line-number   #在显示符合样式的那一行之前,标示出该行的列数编号。

-q   –quiet或–silent   #不显示任何信息。

-r   –recursive   #此参数的效果和指定“-d recurse”参数相同。

-s   –no-messages   #不显示错误信息。

-v   –revert-match   #显示不包含匹配文本的所有行。

-V   –version   #显示版本信息。

-w   –word-regexp   #只显示全字符合的列。

-x    –line-regexp   #只显示全列符合的列。

-y   #此参数的效果和指定“-i”参数相同。


4.规则表达式:

grep的规则表达式:

^  #锚定行的开始 如:’^grep’匹配所有以grep开头的行。

$  #锚定行的结束 如:’grep$’匹配所有以grep结尾的行。

.  #匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。

*  #匹配零个或多个先前字符 如:’*grep’匹配所有一个或多个空格后紧跟grep的行。

.*   #一起用代表任意字符。

[]   #匹配一个指定范围内的字符,如'[Gg]rep’匹配Grep和grep。

[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep’匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

\(..\)  #标记匹配字符,如’\(love\)’,love被标记为1。

\<      #锚定单词的开始,如:’\<grep’匹配包含以grep开头的单词的行。

\>      #锚定单词的结束,如’grep\>’匹配包含以grep结尾的单词的行。

x\{m\}  #重复字符x,m次,如:’0\{5\}’匹配包含5个o的行。

x\{m,\}  #重复字符x,至少m次,如:’o\{5,\}’匹配至少有5个o的行。

x\{m,n\}  #重复字符x,至少m次,不多于n次,如:’o\{5,10\}’匹配5–10个o的行。

\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:’G\w*p’匹配以G后跟零个或多个文字或数字字符,然后是p。

\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。

\b    #单词锁定符,如: ‘\bgrep\b’只匹配grep。

POSIX字符:

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

[:alnum:]    #文字数字字符

[:alpha:]    #文字字符

[:digit:]    #数字字符

[:graph:]    #非空字符(非空格、控制字符)

[:lower:]    #小写字符

[:cntrl:]    #控制字符

[:print:]    #非空字符(包括空格)

[:punct:]    #标点符号

[:space:]    #所有空白字符(新行,空格,制表符)

[:upper:]    #大写字符

[:xdigit:]   #十六进制数字(0-9,a-f,A-F)


5.使用实例:

实例1:查找指定进程

命令:

ps -ef|grep svn

输出:

[root@localhost ~]# ps -ef|grep svn

root 4943   1      0  Dec05 ?   00:00:00 svnserve -d -r /opt/svndata/grape/

root 16867 16838  0 19:53 pts/0    00:00:00 grep svn

[root@localhost ~]#

说明:

第一条记录是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。

实例2:查找指定进程个数

命令:

ps -ef|grep svn -c

ps -ef|grep -c svn

输出:

[root@localhost ~]# ps -ef|grep svn -c

2

[root@localhost ~]# ps -ef|grep -c svn

2

[root@localhost ~]#

说明:

实例3:从文件中读取关键词进行搜索

命令:

cat test.txt | grep -f test2.txt

输出:

[root@localhost test]# cat test.txt

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# cat test2.txt

linux

Redhat

[root@localhost test]# cat test.txt | grep -f test2.txt

hnlinux

ubuntu linux

Redhat

linuxmint

[root@localhost test]#

说明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行

实例3:从文件中读取关键词进行搜索 且显示行号

命令:

cat test.txt | grep -nf test2.txt

输出:

[root@localhost test]# cat test.txt

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# cat test2.txt

linux

Redhat

[root@localhost test]# cat test.txt | grep -nf test2.txt

1:hnlinux

4:ubuntu linux

6:Redhat

7:linuxmint

[root@localhost test]#

说明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显示每一行的行号

实例5:从文件中查找关键词

命令:

grep ‘linux’ test.txt

输出:

[root@localhost test]# grep ‘linux’ test.txt

hnlinux

ubuntu linux

linuxmint

[root@localhost test]# grep -n ‘linux’ test.txt

1:hnlinux

4:ubuntu linux

7:linuxmint

[root@localhost test]#

说明:

实例6:从多个文件中查找关键词

命令:

grep ‘linux’ test.txt test2.txt

输出:

[root@localhost test]# grep -n ‘linux’ test.txt test2.txt

test.txt:1:hnlinux

test.txt:4:ubuntu linux

test.txt:7:linuxmint

test2.txt:1:linux

[root@localhost test]# grep ‘linux’ test.txt test2.txt

test.txt:hnlinux

test.txt:ubuntu linux

test.txt:linuxmint

test2.txt:linux

[root@localhost test]#

说明:

多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上”:”作为标示符

实例7:grep不显示本身进程

命令:

ps aux|grep \[s]sh

ps aux | grep ssh | grep -v “grep”

输出:

[root@localhost test]# ps aux|grep ssh

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0

root  16901  0.0  0.0  61180   764 pts/0  S+   20:31   0:00 grep ssh

[root@localhost test]# ps aux|grep \[s]sh]

[root@localhost test]# ps aux|grep \[s]sh

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0

[root@localhost test]# ps aux | grep ssh | grep -v “grep”

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0

说明:

实例8:找出已u开头的行内容

命令:

cat test.txt |grep ^u

输出:

[root@localhost test]# cat test.txt |grep ^u

ubuntu

ubuntu linux

[root@localhost test]#

说明:

实例9:输出非u开头的行内容

命令:

cat test.txt |grep ^[^u]

输出:

[root@localhost test]# cat test.txt |grep ^[^u]

hnlinux

peida.cnblogs.com

redhat

Redhat

linuxmint

[root@localhost test]#

说明:

实例10:输出以hat结尾的行内容

命令:

cat test.txt |grep hat$

输出:

[root@localhost test]# cat test.txt |grep hat$

redhat

Redhat

[root@localhost test]#

说明:

实例11:输出ip地址

命令:

ifconfig eth0|grep -E “([0-9]{1,3}\.){3}[0-9]”

输出:

[root@localhost test]# ifconfig eth0|grep “[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}”

inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

[root@localhost test]# ifconfig eth0|grep -E “([0-9]{1,3}\.){3}[0-9]”

inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

[root@localhost test]#

说明:

实例12:显示包含ed或者at字符的内容行

命令:

cat test.txt |grep -E “ed|at”

输出:

[root@localhost test]# cat test.txt |grep -E “peida|com”

peida.cnblogs.com

[root@localhost test]# cat test.txt |grep -E “ed|at”

redhat

Redhat

[root@localhost test]#

说明:

实例13:显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行

命令:

grep ‘[a-z]\{7\}’ *.txt

输出:

[root@localhost test]# grep ‘[a-z]\{7\}’ *.txt

test.txt:hnlinux

test.txt:peida.cnblogs.com

test.txt:linuxmint

[root@localhost test]#

实例14:日志文件过大,不好查看,我们要从中查看自己想要的内容,或者得到同一类数据,比如说没有404日志信息的

命令:

grep ‘.’ access1.log|grep -Ev ‘404’ > access2.log

grep ‘.’ access1.log|grep -Ev ‘(404|/photo/|/css/)’ > access2.log

grep ‘.’ access1.log|grep -E ‘404’ > access2.log

输出:

[root@localhost test]# grep “.”access1.log|grep -Ev “404” > access2.log

说明:上面3句命令前面两句是在当前目录下对access1.log文件进行查找,找到那些不包含404的行,把它们放到access2.log中,后面去掉’v’,即是把有404的行放入access2.log


1.Linux ls  -ld

ls 列出文件以及目录

-l 以详细的格式列表

-d 仅列目录




只是查看当前目录的详细信息,只是目录,不包括目录下的子目录和文件。

ls -ld  目录名/文件名

只是查看此目录/文件的详细信息,只是目录,不包括目录下的子目录和文件。

ls -ld 目录名/文件名 | awk ‘{print  int($5)}’


2. Linux





ls -l // ll


命令详解


(7


个字段


):


文件属性




http://blog.csdn.net/sjzs5590/article/details/8254527






rw-r–r–

1

root

root   116 Feb  8 13:47 ZhiZhen.c

“-”表示普通文件 touch

“d”表示目录 mkdir

“l”表示链接

“b“表示块设备文件(block)

“c”表示字符设备文件(character)

“p”表示文件为命令管道文件

“s”为socket文件


前三个


rwx


表示:*文件拥有者权限




中间三个表示:$所属组拥有者权限




最后三个表示:#其他用户用于的权限




如果一个文件不是目录,此时这一字段表示这个文件所具有的硬链接数


所有人添加s权限,用户lee使用/bin/touch创建file所有人为root




文件


/目录的拥有者

文件/目录拥有者所在的组

文件所占用的的空间(以字节为单位)

文件/目录最近访问/修改的时间

文件名


3.shell


中的


if


判断


shell中的if与c语言if上的区别


shell if


c语言中的if


0为真,走then


正好相反,非0走then


不支持整数变量直接if


必须:if [ i –ne 0 ]但支持字符串变量直接if


if [ str ] 如果字符串非0


支持变量直接if


if (i )


文件表达式


整数变量表达式


字符串变量表达式


if [ -f  file ]    如果文件存在


if [ -d …   ]    如果目录存在


if [ -s file  ]    如果文件存在且非空


if [ -r file  ]    如果文件存在且可读


if [ -w file  ]    如果文件存在且可写


if [ -x file  ]    如果文件存在且可执行


if [ int1 -eq int2 ]    如果int1等于int2


if [ int1 -ne int2 ]    如果不等于


if [ int1 -ge int2 ]       如果>=


if [ int1 -gt int2 ]       如果>


if [ int1 -le int2 ]       如果<=


if [ int1 -lt int2 ]       如果<


If  [ $a = $b ]                 如果string1等于string2


字符串允许使用赋值号做等号


if  [ $string1 !=  $string2 ]   如果string1不等于string2


if  [ -n $string  ]             如果string 非空(非0),返回0(true)


if  [ -z $string  ]             如果string 为空


if  [ $sting ]                  如果string 非空,返回0 (和-n类似)

-s file     文件大小非0时为真

[ -f “somefile” ] :判断是否是一个文件

[ -x “/



bin



/ls” ] :判断/



bin



/ls是否存在并有可执行权限

[ -n “$var” ] :判断$var变量是否有值

[ “$a” = “$b” ] :判断$a和$b是否相等

-r file     用户可读为真

-w file     用户可写为真

-x file     用户可执行为真

-f file     文件为正规文件为真

-d file     文件为目录为真

-c file     文件为字符特殊文件为真

-b file     文件为块特殊文件为真

-s file     文件大小非0时为真

-t file     当文件描述符(默认为1)指定的设备为终端时为真


if [ -s  “audit” ];then


…………one…………


if [  ! -s  audit.bak ];then


…………two…………


else


…………three…………


fi


…………four…………


fi


…………five…………



shell中的




if…fi 语句


的基本控制语句,它允许Shell有条件作出决定并执行语句。


语法


if


[

expression

]


then


Statement


(

s

)

to be executed

if

expression

is


true


fi

Shell expression求值。如果结果值是true,给定statement被执行。如果 expression 为false ,则没有语句将不会被执行。大部分的时候,会使用比较操作符决策。

关注对括号和表达之间的空间。这个空间是强制性的,否则语法错误。

如果expression 是一个shell命令,那么它会被假定如此,如果它执行后返回0。如果它是一个布尔表达式,那么返回true。


例子:


#!/bin/sh

a

=


10

b

=


20


if


[

$a

==

$b

]


then

echo

“a is equal to b”


fi


if


[

$a

!=

$b

]


then

echo

“a is not equal to b”


fi

这将产生以下结果:

a

is


not

equal to b


shell判断文件有多少行




https://zhidao.baidu.com/question/922495731716454579.html


# awk ‘{print NR}’ a.txt | tail -n1

1、^代表行首

2、$代表行尾

3、所有行首增加sed -i ‘s/^/ABC/’ a.txt

4、所有行尾添加sed -i ‘s/$/XYZ/’ a.txt

5、删除首行sed -i ‘1d’ d.txt

6、删除末行sed -i ‘$d’ d.txt

7、第5行添加sed -i ‘5 r 5.txt’ a.txt

8、shell判断文件有多少行




https://zhidao.baidu.com/question/922495731716454579.html


# awk ‘{print NR}’ a.txt | tail -n1

9、剔除空格sed -i ‘s/[ ]*//g’ ~/vip1.txt

10、删除回车符sed -i ‘s/^M//g’ a.txt

11、从fromstart这行下面添加内容sed -i ‘/fromstart/r 4.txt’ 5.txt

12、第一列排序存文件awk ‘{print $1}’ vip1.txt |sort -n > vip2.txt //把 vip1.txt文件中的内容排序按照第一列排序 覆盖给 vip2.txt

13、取出文件中的某一列 # awk ‘{print $1}’ aa.txt

14、shell删除文件中的所有空行

# sed -i ‘/^$/d’ a.txt


shell截取字符串的方法




http://www.cnblogs.com/xwdreamer/p/3823463.html



4.Linux





>





>>


的区别


[]





[[]]


的区别

>(重定向到一个地方)直接把内容生成到指定文件,会覆盖员文件中的内容,还有一种用途是直接生成一个空白文件,相当于touch命令

>>(追加到一个地方)尾部追加,不会覆盖掉文件中原有的内容

双括号中的表达式可以看作是一个单的的语句,并返回其退出状态码:

而逻辑与(and)和逻辑或(or)在 [ 和 [[ 中的用法也不同:

[ 中使用 -a 和 -o 参数连接不同的条件,[[ 中使用 && 和 ||。


5. sed


的使用参数




http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html





http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html



常用选项:



-n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来

-e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑

-f∶指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作

-r∶sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)

-i∶直接修改读取的文件内容,而不是由屏幕输出


常用命令:

a ∶ 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

c ∶ 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行

d ∶ 删除,因为是删除,所以 d 后面通常不接任何内容

i ∶ 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)

p∶ 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起用

s∶ 取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如 1,20s/old/new/g


特殊字符意义:



、使用句点匹配单字符


句点“.”可以匹配任意单字符。“.”可以匹配字符串头,也可以是中间任意字符。假定正在过滤一个文本文件,对于一个有1 0个字符的脚本集,要求前4个字符之后为X C,匹配操作如下:. . . .X C. . . .



在行首以^匹配字符串或字符序列


^只允许在一行的开始匹配字符或单词。在行首第4个字符为1,匹配操作表示为:^ . . . 1



在行尾以$匹配字符串或字符


可以说$与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。如果在行尾匹配单词j e t 0 1,操作如下:j e t 0 1 $    如果只返回包含一个字符的行,操作如下:^ . $



使用*匹配字符串中的单字符或其重复序列


使用此特殊字符匹配任意字符或字符串的重复多次表达式。



使用/屏蔽一个特殊字符的含义


有时需要查找一些字符或字符串,而它们包含了系统指定为特殊字符的一个字符。如果要在正则表达式中匹配以* . p a s结尾的所有文件,可做如下操作:/ * / . p a s



使用[]匹配一个范围或集合


使用[ ]匹配特定字符串或字符串集,可以用逗号将括弧内要匹配的不同字符串分开,但并不强制要求这样做(一些系统提倡在复杂的表达式中使用逗号),这样做可以增 加模式的可读性。使用“ -”表示一个字符串范围,表明字符串范围从“ -”左边字符开始,到“ -”右边字符结束。假定要匹配任意一个数字,可以使用:[ 0 1 2 3 4 5 6 7 8 9 ]    要匹配任意字母,则使用:[ A – Z a – z ]表明从A – Z、a – z的字母范围。



使用/{/}匹配模式结果出现的次数


使用*可匹配所有匹配结果任意次,但如果只要指定次数,就应使用/ { / },此模式有三种形式,即:

pattern/{n/} 匹配模式出现n次。

pattern/{n,/} 匹配模式出现最少n次。

pattern/{n,m} 匹配模式出现n到m次之间,n , m为0 – 2 5 5中任意整数。

匹配字母A出现两次,并以B结尾,操作如下:A / { 2 / } B匹配值为A A B    匹配A至少4次,使用:A / { 4 , / } B


sed的工作方式:

实用工具按顺序逐行将文件读入到内存中。然后,它执行为该行指定的所有操作,并在完成请求的修改之后将该行放回到内存中,以将其转储至终端。完成了这一行 上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。

如同前面所提到的,默认输出是将每一行的内容输出到屏幕上。在这里,开始涉及到 两个重要的因素—首先,输出可以被重定向到另一文件中,以保存变化;第二,源文件(默认地)保持不被修改。sed 默认读取整个文件并对其中的每一行进行修改。不过,可以按需要将操作限制在指定的行上。


实用工具:

sed [options] ‘{command}’ [filename]


1





shell


将一个值替换为另一个值:


‘s/{old value}/{new value}/’

例如:

(全局修改)

将tiger改为worf   after改为before

$ echo The tiger cubs will meet on Tuesday after school |sed -e ‘s/tiger/wolf/’ -e ‘s/after/before/’

$ echo The tiger cubs will meet on Tuesday after school | sed ‘s/tiger/wolf/;s/after/before/’

$ echo The tiger cubs will meet on Tuesday after school | sed


> s/tiger/wolf/

> s/after/before/



sed  -i “s/after/before/”


文件名

例如:

(局部修改)

$ cat sample_one

one 1

two 1

three 1

one 1

two 1

two 1

three 1

$

假定希望用 “2” 来替换 “1”,但仅在单词 “two” 之后才作替换,而不是每一行的所有位置。通过指定在给出替换命令之前必须存在一次匹配,可以实现这一点:

$ sed ‘/two/s/1/2/’ sample_one

one 1

two 2

three 1

one 1

two 2

two 2

three 1

$


2





shell


删除第一行、最后一行或者增加删除某行


{^表示开始 $表示结束 }


删除某行

[root@localhost ruby]

# sed ‘1d’ ab

#删除第一行

[root@localhost ruby]

# sed ‘$d’ ab

#删除最后一行

[root@localhost ruby]

# sed ‘1,2d’ ab

#删除第一行到第二行

[root@localhost ruby]

# sed ‘2,$d’ ab

#删除第二行到最后一行


sed -i ‘/^QWQ/d’ <file>

删除文件中包含某个关键字

开头

的所有行


sed -i ‘/QWQ/d’ <file>

删除文件中包含某个关键字的所有行


sed -i ‘/ntpdate/s/^#//’ /etc/crontab

删除文中ntpdete所在行 开头#给删除


inet addr:



192.168



.



1.100



Bcast:



192.168



.



1.255



Mask:



255.255



.



255.0

将 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

接下来则是删除后续的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

将 IP 后面的部分予以删除

[root@www ~]# /sbin/

ifconfig

eth0 |

grep


‘inet addr’

|

sed


‘s/^.*addr://g’

|

sed


‘s/Bcast.*$//g’


192.168

.

1.100


显示某行

.    [root@localhost ruby]

# sed -n ‘1p’ ab

#显示第一行

[root@localhost ruby]

# sed -n ‘$p’ ab

#显示最后一行

[root@localhost ruby]

# sed -n ‘1,2p’ ab

#显示第一行到第二行

[root@localhost ruby]

# sed -n ‘2,$p’ ab

#显示第二行到最后一行


使用模式进行查询

[root@localhost ruby]

# sed -n ‘/ruby/p’ ab

#查询包括关键字ruby所在所有行

[root@localhost ruby]

# sed -n ‘/\$/p’ ab

#查询包括关键字$所在所有行,使用反斜线\屏蔽特


增加一行或多行字符串

[root@localhost ruby]# cat ab

Hello!

ruby is me,welcome to my blog.

end

[root@localhost ruby]

# sed ‘1a drink tea’ ab

#第一行后增加字符串”drink tea”

Hello!

drink tea

ruby is me,welcome to my blog.

end

[root@localhost ruby]

# sed ‘1,3a drink tea’ ab

#第一行到第三行后增加字符串”drink tea”

Hello!

drink tea

ruby is me,welcome to my blog.

drink tea

end

drink tea

[root@localhost ruby]

# sed ‘1a drink tea


\n


or coffee’ ab

#第一行后增加多行,使用换行符\n

Hello!

drink tea

or coffee

ruby is me,welcome to my blog.

end

[root@localhost ruby]

# awk ‘{print}{print “ccc”}’ ab

#在文档中的每一行后边都加一行相同的数据

Hello!

ccc

ruby is me,welcome to my blog.

ccc

end

ccc


代替一行或多行

[root@localhost ruby]

# sed ‘1c Hi’ ab

#第一行代替为Hi

Hi

ruby is me,welcome to my blog.

end

[root@localhost ruby]

# sed ‘1,2c Hi’ ab

#第一行到第二行代替为Hi

Hi

end


替换一行中的某部分

格式:sed

‘s/

要替换的字符串

/

新的字符串

/g

‘   (要替换的字符串可以用正则表达式)

[root@localhost ruby]

# sed -n ‘/ruby/p’ ab | sed ‘s/ruby/bird/g’

#替换ruby为bird

[root@localhost ruby]

# sed -n ‘/ruby/p’ ab | sed ‘s/ruby//g’

#删除ruby


插入

[root@localhost ruby]

# sed -i ‘$a bye’ ab

#在文件ab中最后一行直接输入”bye”

[root@localhost ruby]# cat ab

Hello!

ruby is me,welcome to my blog.

end

bye

[root@localhost ruby]

# sed -i ‘1i\enen’ ab

#在文件ab中最后一行直接输入”bye”

[root@localhost ruby]# cat ab

enen

Hello!

ruby is me,welcome to my blog.

end

3




shell


中的空格/空行

<1>、查看某文件时

忽略空格

(但是源文件中的空格还在,只是说在终端打印出来的文件是没有的)

^ : 开始

$ :结尾

^$ :表示空行

<2>、shell echo打印

换行

的方法

# echo -e “nihao \n jie” (注意\n前后要有空格)

<3>、shell删除文件中的所有空行

# sed -i ‘/^$/d’ a.txt

<4>、查看的时候在每一行的后边都打印一行空格

# awk ‘{print}{print “\n”}’ a.txt


4》she


ll


判断文件是否存在


5》shell判断文件夹是否存在


5》she


ll


文件的追加

文件a.txt 中的内容

aaaa

AAAA

文件b.txt中的内容

bbbb

BBBB

把a.txt中的文件追加到b.txt的文件开始

aaaa

AAAA

bbbb

BBBB

<1>、if[ !-f “c.txt” ];then //循环

touch c.txt

else

cat b.txt > c.txt

cat a.txt > b.txt

sed -i ‘$d’ b.txt //去掉b.txt的最后一行

cat c.txt >> b.txt

rm -rf c.txt

fi

<2>、cat a.txt b.txt > c.txt //会直接把a.txt的全部内容 直接复制到b.txt的前面

cat c.txt > b.txt //用c.txt的内容直接覆盖掉b.txt的内容


6.bg


或者


fg

1》当你编辑一个文件时候:# vi xiaoming.c

2》但是不小心按了ctrl+z 退出来了

3》输入  #bg

4》输入 # fg %1

其就会自动执行 编辑功能 vi


7.ipset命令




https://wenku.baidu.com/view/13bcdf2953ea551810a6f524ccbff121dd36c59b.html





https://wenku.baidu.com/view/c55ab62a14791711cc791781.html




参数



函数用法



函数功能



示例:


-N


-创建 集合名称 类型 类型具体选项


创建一个用集合名称命名并且指定类型的集合。类型具体想必须是系统指定。内核版本低于2.6时系统指定为iptreemap。


# ipset -N jie hash:ip


-A


-添加 集合名称 IP


往集合中添加一个ip。


# ipset -A jie 2.2.2.2


-L


-列出 [集合名名称]


列出指定集合的规则和绑定,如果没有指定或者指定为all就列出所有的集合。


-X


-删除 [集合名称]


删除指定的集合,如果没有指定或者指定all就删除全部的集合。如果集合的绑定和默认绑定,如果集合被使用,则什么都不做。


# ipset -X jie


-F


-清空 [集合名称]


删除指定集合中的所有规则。绑定不会受到清空操作的影响。


# ipset -F (删除所有集合名称里面的number)


# ipset -F jie(删除jie集合中的number)


-E


-重命名 旧集合名 新集合名


重命名集合,新集合名的标识必须是目前不存在的。


-W


-交换 源集合名 目的集合名


交换两个集合的内容,或者说交换两个集合的名称。两个集合存在且具有相同的类型。


-S


-保存 [集合名称]


保存指定集合的名称。


-D


-删除 集合名称 IP


从集合中删除一个IP


# ipset -D jie 2.2.2.2


-T


-测试 集合名称 IP


测试一个IP是不是在集合中,要是在集合中返回0,不在集合中返回非0.


# ipset -T jie 3.3.3.3


-T


-测试 集合名称 IP 绑定的目的集合


测试ip是否附属指定集合的绑定点。


-B


-绑定 集合名称 IP 绑定的目的集合


绑定集合里的ip和目的集合


-U


-解除绑定 集合名称 IP


删除集合中的指定ip的绑定


-H


-帮助 [帮助类型]


找出指定设置类型的帮助信息。

1>

1.1>

1.2>


8、 linux wc命令详解

wc -c filename:显示一个文件的字节数

wc -m filename:显示一个文件的字符数

wc -l filename:显示一个文件的行数

wc -L filename:显示一个文件中的最长行的长度

wc -w filename:显示一个文件的字数

本文转自凌众科技技术文章中心 http://www.lingzhong.cn ,转载请注明出处。

Linux wc命令详解



http://www.lingzhong.cn/tech/20572.htm



9、ifconfig命令

添加网卡: ifconfig eth0:1 192.168.10.25 netmask 255.255.255.0

/*注意需要在root权限下 才可以执行 用su切换*/

删除网卡: ifconfig eth0:1 192.168.10.25 netmask 255.255.255.0 down

/*这个是用命令删除 */

ifconfig eth0:1 down

/*这个是用别名 直接删除 网卡*/

取所有的eth开头的网卡: ifconfig -a | grep eth

/*

eth0 Link encap:Ethernet HWaddr 00:0c:29:11:89:2b

eth0:1 Link encap:Ethernet HWaddr 00:0c:29:11:89:2b

*/

根据别名,取一个网卡的所有的信息: ifconfig eth0:1

/*

eth0:1 Link encap:Ethernet HWaddr 00:0c:29:11:89:2b

inet addr:192.168.10.25 Bcast:192.168.10.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Interrupt:19 Base address:0x2000

*/

取某一个网卡的ip部分: ifconfig eth0:1 | grep inet | awk ‘{print $2}’

/*

addr:192.168.10.25

*/

直接取到eth0:1网卡的ip地址: ifconfig eth0:1 | grep inet | awk ‘{print $2}’ | awk -F: ‘{print $2}’

/*

192.168.10.25

*/

直接取到eth0:1网卡的网关: ifconfig eth0:1 | grep inet | awk ‘{print $3}’ | awk -F: ‘{print $2}’

/*

192.168.10.255

*/

把命令写到文件中,再从文件中读出来:

char cmd_net_buf[512] = {‘\0’};

snprintf(cmd_net_buf,sizeof(cmd_net_buf),”ifconfig -a | grep eth | awk ‘{print $1}’ “)

printf(“%s\n”,cmd_net_buf);

system(cmd_net_buf);

/* 结果

eth0

eth0:1

*/

char result_buf[512] = {‘\0’};

FILE *fp = NULL;

while(fgets(result_net,sizeof(result_net),fp)!=NULL) //此时获得eth0 但其最后有一个回车符

{

if(reult_net[strlen(reult_net)-1] == ‘\n’) //删除fgets函数取到的字符串 尾部的换行符号‘\n’

reult_net[strlen(reult_net)-1] == ‘\0’;

if(0 == strcmp(result_net,net)) //net 是前端传过来的值或者是从文件中读取出来的

{ }

}


10、awk命令



1》awk中使用substr命令 截取字符串

在ntp时间同步时候,需要查看/etc/crontab文件


功能:

设置周期性被执行的指令


格式:

minute(分钟)hour(小时) day(天)mounth (月) dayfweek(星期) program


注意:

星号(*)可以用来代表所有有效的值。

井号(#)的行是注释,不会被处理。

整数间的短线(-)指定一个整数范围。例如:1-3 表示1,2,3

逗号(,)隔开的一系列值指定一个列表。例如:

3, 4, 6, 8

标明这四个指定的整数

正斜线(/)可以用来指定间隔频率。

/<



integer



>

意味着在范围内可以跳过 integer。

例如:

0-59/2

分钟字段中定义每两分钟。


*/3

的值可以用在月份字段中表示每三个月运行一次任务。

# /etc/crontab: system-wide crontab

# Unlike any other crontab you don’t have to run the `crontab’

# command to install the new version when you edit this file

# and files in /etc/cron.d. These files also have username fields,

# that none of the other crontabs do.

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin


*/1 * * * * root /usr/sbin/ntpdate 1.1.1.1 //自己加的

# m h dom mon dow user command

17 * * * * root cd / && run-parts –report /etc/cron.hourly

25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.daily )

47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.weekly )

52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.monthly )

#

Ubuntu调用run-parts命令,定时运行四个目录下的所有脚本。

/etc/cron.hourly下的脚本会被每小时运行一次,在每小时的17分时运行。

/etc/cron.daily下的脚本会被每天运行一次,在每天6点25分运行。

/etc/cron.weekly下的脚本会被每周运行一次,在每周第7天的6点47分运行。

/etc/cron.monthly下的脚本会被每月运行一次,在每月1号的6点52分运行。

以上是文件的内容。


substr(字符串,开始,截取多少个)


# cat /etc/crontab | grep ntpdate | awk ‘{print substr($1, 1,1)}’

*


# cat /etc/crontab | grep ntpdate | awk ‘{print substr($1, 2,1)}’


/


# cat /etc/crontab | grep ntpdate | awk ‘{print substr($1, 3,1)}’

1


修改值:


# sed -i ‘/ntpdate/s/[0-9]\+/9/’ /etc/crontab ==》》把1改成9


# sed -i ‘/ntpdate/s/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/2.2.2.2/’ /etc/crontab ==》》把1.1.1.1改2.2.2.2


# sed -i ‘/ntpdate/s/^/#/’ /etc/crontab ==》》把*/1 前面加# */1==>>#*/1


# sed -i ‘/ntpdate/s/^#//’ /etc/crontab ==》》把#*/1前面的#删除 # */1==>>*/ 1



2》awk中使用split命令 截取字符串

在awk1.c文件中,有如下所示的内容。


-rwxr-xr-x 1 root root 13304 May(“17″,”a.out”);

-rw-r–r– 1 root root     0 May(“23″,”awk.c”);

-rw-r–r– 1 root root    12 May(“55″,”demo.txt”);

-rw-r–r– 1 root root   420 May(“54″,”readDemoTxt_fgetc.c”);

需要得到,其中的一些字符


a.out     17


awk.c     23


demo.txt   55


readDemoTxt_fget.c   54


readDemoTxt_fget.c   45

实现的命令如下(解释的时候以一行为例):



[root@node-2 dd]# cat awk1.c | sed ‘s/”//g’ | awk ‘{print($6)}’ | awk ‘{split($0,a,”(“);print a[2]}’ | awk ‘{split($0,b,”)”);print b[1]}’ | awk ‘{split($0,c,”,”);print c[2],c[1]}’

1》对于


cat awk1.c







不做过多的解释;

显示为:   -rwxr-xr-x 1 root root 13304 May(“17″,”a.out”);

2》对于


sed ‘s/”//g’


,意思是去掉文件中所有的双引号;

显示为:   -rwxr-xr-x 1 root root 13304 May(17,a.out);

3》对于


awk ‘{print($6)}’


,是取出第6列;

显示为:May(17,a.out);

4》对于


awk ‘{split($0,a,”(“);print a[2]}’


,是以’(   ‘为分割点,对字符串进行截取,打印出( 后面的;

显示为:17,a.out);

5》对于


awk ‘{split($0,b,”)”);print b[1]}’


,是以’   )’为分割点,对字符串进行截取,打印出 )前面的;

显示为:17,a.out

6》对于


awk ‘{split($0,c,”,”);print c[2],c[1]}’


,是以 ‘  ,’ 为分割点,对字符串进行截取,先打印出c[2],后打印c[1];

显示为:a.out 17



3》awk中使用split命令 截取字符串


字符串 VALUES(‘109′,’x11′,”,”,’yes’,’0′);   最后显示为   x11  109

[root@localhost l7-protocols]# sed  “s/’//g” resource_app.conf | awk ‘{print($4)}’ | awk ‘{split($0,a,”(“);print a[2],a[1]}’ | awk ‘{split($0,b,”,”);print b[2],b[1]}’



4》awk修改文件中的




某一列


asdfgh


popen.txt



《–【 文件该之前】

asdfgh


popen


qwerty


popen.c



【文件该之后】–》

qwerty


popen

如果只是改变显示的值:


#awk ‘{print $1,”popen”}’ popen.txt



如果要改文件中的值:


#awk ‘{print $1,\”popen\”}’ popen.txt > temp_1 && mv -f temp_1 popen.txt


//[[ popen引号需要转义]]  [[mv时候加-f取消 提示输入y/n]]   //[[并且要加cat命令 否则后需的fgets没有值]]



5》awk修改文件中的




第一行第一列设为1;第二行第二列设为2;……以此类推




a


b c









《–【 文件该之前】




1



b c







d


e


f                                                                                     d



2



f







g h


i







【文件该之后】–》



g h



3










只是改变显示的值:


# awk ‘{gsub($NR,NR);print $0}’ awk.txt

//


awk sub和gsub区别及用法

//

关于awk命令的几个内置变量(NF,NR,FS,FILENAME)




6》awk修改文件中的




第一行最后一列设为1;第二行最后一列设为2;……以此类推






a b

c










《–【 文件该之前】

a b

1








d e



f



d e



2








g h



i








【文件该之后】–》

g h

3






只是改变显示的值:


# awk  ‘$NF=NR’  awk.txt




7》awk修改文件中的




第一行第一列设为hi;第二行第一列设为hello;第三行第一列设为‘你好’





a

b c









《–【 文件该之前】                          hi

b c








d

e




f

hello

e


2








g

h i









【文件该之后】–》                         你好

h 3





只是改变显示的值:


# awk ‘{if(NR==1)$1=”hi”;else if(NR==2)$1=”hello”;else if(NR==3)$1=”你好”}1’ awk.txt

参考的链接有:


linux下awk内置函数的使用(split/substr/length)

: http://www.cnblogs.com/sunada2005/p/3493941.html

使用AWK进行分割字符串以及截取字符串: https://blog.csdn.net/amkio/article/details/40656991

去掉文件中所有的双引号: https://zhidao.baidu.com/question/1608917480852840147.html?fr=iks&word=awk%B9%FD%C2%CB%D7%D6%B7%FB%B4%AE%D6%D0%B5%C4%B5%A5%D2%FD%BA%C5&ie=gbk



版权声明:本文为weixin_42167759原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。