涉及工作中Linux常用命令详解

涉及工作中Linux常用命令详解

一、Linux

1.汇总

lz按照自己实际工作中(类别是从一些教学网站上截取的)

文件/目录操作 磁盘操作 网络通讯 系统操作 备份压缩 其他命令
cat cd telnet ps tar bc
find pwd netstat top zip head
grep ls ifconfig free unzip tail
sed mkdir ping crontab gzip xargs
cut rmdir date ip
awk df kill nohup
chmod passwd man
chown export curl
read set wget
mv unset ifconfig
rm reset
touch setenv
cp sudo
scp clear
rcp uname
expr whoami
wc rpm
let useradd
more userdel
usermod
groupadd
exit
sleep
reboot
shutdown
halt
id
chkconfig

2.具体使用

cat
1.语法
	cat [option] filename

2.作用:查看文件,也可新建 or 修改文件

2.option
	-b	对非空行输出行号
	-n	输出所有行号

3.eg
    cat filename     // 查看文件
    cat >filename    // 新建文件 or 覆盖原有文件内容
    cat >>filename   // 追加内容到文件的末尾
    cat f1 f2 > file // 合并f1 f2文件到file中
	cat -b filename
	cat -n filename
	
	结合其他命令使用(伪代码)
	cat filename | grep
	cat filename | cut
	cat filename | sed

回到顶部

find
1.语法
	find pathname [option...] [-print/-exec/-ok ...]
	
2.作用:查找指定文件,并执行相应的命令

3.option
	-name	// 根据文件名称,可正则匹配
	-type	// 根据文件类型 d:目录 f:文件
	-user	// 根据文件属组
	-group	// 根据文件所属的组
	-size n	// 查找指定文件大小的文件 +1000c
	-mmin n // 查找系统中最后n分钟被改变文件数据的文件
	-amin n //  查找系统中最后n分钟访问的文件
	-atime n	// 查找系统中最后n*24小时访问的文件 (用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件)
	-maxdepth n 最大查找目录深度


	-print	// 匹配到的文件输出到标准输出中
	-exec	// 匹配到的文件执行该参数给出的shell命令,模板:'command' {} \;
	-ok  	// 以安全模式执行shell命令,以询问的方式
	
4.eg
	find ./ -name '*.log'	// 查找当前目录下以.log为后缀的文件
	
	find -atime -2	// 查找48h内修改过的文件
	find -mmin -5	// 查找5min内修改过的文件
	find ./ -type f -mmin +1 -name "*.log"	// 查找1min前修改过的并且是文件名以.log为后缀的文件
	
	find -size +1000c	// 查找大于1K的文件
	find /tmp -size +100M	// 查找tmp下文件大小大于100M的文件
	
	
	find ./ -type f "*.log" -exec 'rm' {} \;	// 查找文件名以.log为后缀的文件并且删除
	find ./ -type f -mmin -10 -name "*.log" -exec 'rm' {} \;	// 查找当前目录下5min内修改过内容的并且文件名以.log为后缀的文件然后执行删除命令
	
	find ./ -type f "*.log"	| xargs rm -f	// 通过结合xargs执行rm命令	

回到顶部

grep
Global Regular Expression Print(全局正则表达式搜索)
1.语法
	grep [option] pattern file|dir
    	
2.作用:对数据进行行提取,不改变源文件内容-可搭配正则使用

3.option
    -v #对内容进行取反提取(打印出不符合条件的内容)
    -n #对提取的内容显示行号
    -w #精确匹配
    -i #忽略大小写
    ^ #匹配开头行首
    -E #正则匹配
    -r 递归查找文件(当前目录以及子目录下所有所有的文件)
    -c --count 计算匹配的列数
    -f 从文件中读取关键词
 
4.正则表达式
    ^  #锚定行的开始 如:'^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。
 
5.eg
	grep zhuyz *.txt    // 查找当前路径下后缀为.txt的所有文件中包含zhuyz字符串的文件,并且打印出该文件的行
	
	grep -r zhuyz ./	// 递归查找当前目录下以及子目录下的所有文件中包含zhuyz字符串的文件,并且打印出该文件的行
	
	grep -v zhuyz abc.txt	// 查找文件中不包含有zhuyz字符串的行内容,并且打印出这些行
	
	grep -rn zhuyz *	// 递归查找当前路径下以及子路径下所有文件 && 显示行号
	
	grep '\W' abc.txt	// 正则匹配\W:匹配非字母、数字、下划线
	
	ps -ef | grep zookeeper // 查看zookeeper的进程
	ps -ef | grep zookeeper -c // 查看zookeeper进程个数(查看zk集群有几台节点)
	
	cat abc.txt | grep -f zhuyz	// 从文件中读取关键字zhuyz的行内容
	
	grep -E 'zhuyz|zyz' abc.txt	// 从文件中读取含有zhuyz或者zyz的行内容
	
生产中查看日志:
	grep -n '2021-02-28 12:00:00' *.log | grep -n 'ERROR' *.log | grep -n 'Exception' *.log
    find ./ -type f -name "*.log" | xargs grep "ERROR|Exception" // 匹配找到当前目录以及子目录下以.log后缀的文件,传递给grep命令执行。

回到顶部

sed
Stream Editor(流编辑)
1.语法
	sed [选项][动作] 文件名 | sed [-hnV][-e<script>][-f<script文件>][文本文件]
	
2.对数据行进行处理(选取,新增,替换,删除,搜索)-可搭配正则使用

3.常见的选项与参数:
    -n #把匹配到的行输出打印到屏幕
    -e #表示可以执行多条动作[以选项中指定的script来处理输入的文本文件。]
    
    a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
	c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
	d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
	i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
	p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
	s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
		's' 就是替换的命令, 'g' 为本行中全局替换,如果不加 'g' 只换该行中出现的第一个。
		eg:'s/a/b/g':把a替换成b

4.正则表达式
    ^  #锚定行的开始 如:'^sed'匹配所有以sed开头的行。 
    $  #锚定行的结束 如:'sed$'匹配所有以sed结尾的行。 
    .  #匹配一个非换行符的字符 如:'s.d'匹配s后接一个任意字符,然后是d。  
    *  #匹配零个或多个先前字符 如:'*sed'匹配所有一个或多个空格后紧跟sed的行。
    .*   #一起用代表任意字符。  
    []   #匹配一个指定范围内的字符,如'[Ss]ed'匹配Sed和sed。 
    [^]  #匹配一个不在指定范围内的字符,如:'[^A-H]ed'匹配不包含A-H的一个字母开头,紧跟ed的行。  
    \(..\)  #标记匹配字符,如'\(love\)',love被标记为1。   
    \<      #锚定单词的开始,如:'\<sed'匹配包含以sed开头的单词的行。
    \>      #锚定单词的结束,如'sed\>'匹配包含以sed结尾的单词的行。
    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],如:'S\w*ed'匹配以S后跟零个或多个文字或数字字符,然后是ed。  
    \W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。  
    \b    #单词锁定符,如: '\bsedp\b'只匹配sed。


5.eg
	p #以行为单位进行查询,通常与-n一起使用[打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~]
    eg:df -h | sed -n '2p'
	
    d #删除[删除,因为是删除啊,所以 d 后面通常不接任何咚咚;]
    eg: sed '2d' df.txt	      			// 删除第2行
    eg: sed '2,5d' df.txt    			// 删除第2-5行
    eg: sed '2,$d' df.txt     			// 删除第2行到最后1行

    a #在行的下面插入新的内容[新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~]
    eg: sed '2a 1234567890' df.txt		// 在第2行下面新增1行

    i #在行的上面插入新的内容[插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);]
    eg: sed '2i 1234567890' df.txt		// 在第2行上面新增1行1234567890的内容
    eg: sed '2,5i 1234567890' df.txt	// 灵异插入,自己试试

    c #替换[取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!]
    eg: sed '2c 1234567890' df.txt		// 替换第2行的内容为1234567890
    eg: sed '2,5c 1234567890' df.txt	// 替换第2-5行的内容为1234567890

    s/要被取代的内容/新的字符串/g #指定内容进行替换[取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!]-(可使用正则)
    eg:sed 's/0%/100%/g' df.txt
    eg:cat df.txt | sed 's/[0-9]/\*/g'	// 把数字替换成*(*是元字符,所以需要\转义)

    -i #对源文件进行修改(高危操作,慎用,用之前需要备份源文件)
	eg: sed -i '1i aaa' df.txt        	//	把aaa写入到df.txt的第一行

    搜索:在文件中搜索内容或者搜寻并删除(可使用正则)
    eg:cat -n df.txt | sed -n '/100%/p' // 检索关键字内容行(和p结合使用一定要加—n)
	eg:cat -n df.txt | sed '/100%/d'	// 检索并删除关键字内容行,显示其他行
    eg:cat abc.txt | sed -n '/^e/p'		// 检索并查找以e为开头的行内容
	
    -e #表示可以执行多条动作
    eg:cat -n df.txt | sed -n -e 's/100%/100%-----100%/g' -e '/100%-----100%/p
    eg:cat -n /etc/passwd | sed -e '3,$d' -e 's/root/re-root/g'	// 删除/etc/passwd第3行到末尾的数据,并把root替换为re-root
    
    正则(如果sed命令想要使用正则匹配,一定要加上/)
	eg:sed -n '/[a-z]/p' df.txt
	

回到顶部

cut
1.语法
	cut OPTION... [FILE]...
	
2.作用:对数据进行列的提取

3.option
	-d #指定分割符
	-f #指定截取区域
	-c #以字符为单位进行分割

4.eg
-d和-f
	以':'为分隔符,截取出/etc/passwd的第一列跟第三列
	cut -d ':' -f 1,3 /etc/passwd
	
	以':'为分隔符,截取出/etc/passwd的第一列到第三列
	cut -d ':' -f 1-3 /etc/passwd
	
	以':'为分隔符,截取出/etc/passwd的第二列到最后一列
	cut -d ':' -f 2- /etc/passwd
	
-c
	截取/etc/passwd文件从第二个字符到第九个字符
	cut -c 2-9 /etc/passwd
	

回到顶部

awk
1.语法
	awk [option] 'script' var=value file(s)
	或awk [option] -f scriptfile var=value file(s)
	
	awk '{[pattern] action}' {filenames}
	awk -F "分隔符" 'script' {filenames}
	awk -v  # 设置变量
	awk -f {awk脚本} {文件名}
	
	awk '条件 {执行动作}'文件名
	awk '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
	或awk [选项] '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
	
	
	
2.作用:数据检索(列的操作)

3.option
	-F	// 指定列的分隔符,默认以空格或者制表符为分隔符
	-f	// 调用脚本
	-v	// 定义变量

4.运算符
    $									// 列字段引用	$0:一整行 $1:第1列 $2:第2列	...
    = += -= *= /= %= ^= **= 			// 赋值
    + - * / %							// 加,减 乘,除与求余	
    || && 								// 逻辑或 逻辑与
    ~ !~ 								// 匹配正则表达式和不匹配正则表达式
    < <= > >= != ==						// 关系运算符

log.txt文件内容:
	2 this is a test
	3 Are you like awk
	This's a test
	10 There are orange,apple,mongo	
		
    eg:awk '$1>2' log.txt				// 输出[第1列大于2]的行
    eg:awk '$1>2 {print $1,$2}' log.txt	// 检索[第1列大于2]的行,输出第1列和第2列
	eg:awk '$1*2==4' log.txt			// 检索输出[第1列乘以2等于4]的行
	eg:awk '$1*2%==0 && $1<4' log.txt	// 检索输出[第1列取余等于0并且第1列小于4]的行
	

5.内建变量
	NF          // 字段数量变量
	NR          // 行号
	\t          // 制表符
	\n          // 换行符
	FS          // BEGIN时定义分隔符
	~           // 包含(可结合正则使用,看下面eg)
	!~          // 不包含(可结合正则使用,看下面eg)
	FS			// Field Separator:输入字段分隔符, 默认为空白字符
	
log.txt文件内容:
	2 this is a test
	3 Are you like awk
	This's a test
	10 There are orange,apple,mongo
    ha hello
    hi hello
    a b
	
	# NF
	eg:awk 'NF<3' log.txt						// 检索输出[列字段数小于3]的行
	eg:awk 'NF<3 && $1 ~ /h/' log.txt			// 检索输出[列字段数小于3并且第1列包含h]的行
	eg:awk 'NF<3 && $1 ~ /^ha/' log.txt			// 检索输出[列字段数小于3并且第1列以ha开头]的行
	eg:awk 'NF<3 && $1 ~ /^ha/ {print $1,$2}'	// 检索[列字段数小于3并且第1列以ha开头]的行,输出第1列和第2列
	
	# NR
	eg:cat log.txt | awk 'NR==2 {print $3}'		// 检索[行等于2]的行,输出第3列
    eg:awk '(NR>=2 && NR<=5) {print $1}' /etc/passwd	// 检索[行大于等于2并且小于等于5]的行,输出第1列
	
	# \t \n
	eg:awk -F ' ' '{print $1"\t"$2}' log.txt	// 以空格为分隔符,输出第1列、\t、第2列
	eg:awk -F ' ' '{print $1"\n"$2}' log.txt	// 以空格为分隔符,输出第1列、\n、第2列
	
	# BEGIN(执行前的语句,在读取所有行内容前就开始执行) END(处理完所有的行后要执行的语句)
	eg(截取自菜鸟教程,很不错):
	1.cat score.txt
        Marry   2143 78 84 77
        Jack    2321 66 78 45
        Tom     2122 48 77 71
        Mike    2537 87 97 95
        Bob     2415 40 57 62
	
	2.awk脚本文件: score.awk
		#!/bin/awk -f
		#!/bin/awk -f
        #运行前
        BEGIN {
            math = 0
            english = 0
            computer = 0

            printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
            printf "---------------------------------------------\n"
        }
        #运行中
        {
            math+=$3
            english+=$4
            computer+=$5
            printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
        }
        #运行后
        END {
            printf "---------------------------------------------\n"
            printf "  TOTAL:%10d %8d %8d \n", math, english, computer
            printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
        }
    
	3.执行命令
	awk -f score.awk score.txt
	
	4.输出:	
        NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
        ---------------------------------------------
        Marry  2143     78       84       77      239
        Jack   2321     66       78       45      189
        Tom    2122     48       77       71      196
        Mike   2537     87       97       95      279
        Bob    2415     40       57       62      159
        ---------------------------------------------
          TOTAL:       319      393      350
        AVERAGE:     63.80    78.60    70.00
    
    
	# ~ !~	(可结合正则使用)
	eg:awk '$1 ~ /ha/' log.txt					// 检索输出[第1列包含ha]的行内容
	eg:awk '$1 ~ /^h/' log.txt					// 检索输出[第1列以h开头]的行内容
	eg:awk '$1 !~ /^h/' log.txt					// 检索输出[第1列不以h开头]的行内容


6.结合正则使用eg

.....待补充


7.其他的一些eg

    printf #格式化输出,不会自动换行。
    (%ns:字符串型,n代表有多少个字符; %ni:整型,n代表输出几个数字;%.nf:浮点型,n代表的是小数点后有多少个
    小数)
    
    print #打印出内容,默认会自动换行
    \t #制表符
    \n #换行符
    eg:printf '%s\t%s\t%s\t%s\t%s\t%s\n' 1 2 3 4 5 6
    eg:df -h |grep /dev/vda1 | awk '{printf "/dev/vda1的使用率是:"} {print $5}'
    
    小数:echo "scale=2; 0.13 + 0.1" | bc | awk '{printf "%.2f\n", $0}'
    
    -F #指定分割符
    eg:cat /etc/passwd | awk -F":" '{print $1}'
    
    
8.更多参考
	8个有力的 Awk 内建变量:https://www.runoob.com/w3cnote/8-awesome-awk-built-in-variables.html  

回到顶部

持续进阶更新…奥利剋

猜你喜欢

转载自blog.csdn.net/qq_43128724/article/details/114324792
今日推荐