Linux下命令总结


1. linux下探测端口是否存活【nc】

#1. nc命令    使用yum install nmap -y
nc -w 2 -zv 探测机器ip  端口号
示例:
[root@docker mysql]# nc -w 2 -zv 192.168.1.4 22
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.4:22.
Ncat: 0 bytes sent, 0 bytes received in 0.03 seconds.
```

2. linux下显示进程完成信息以及显示进程间关系【ps auxfww】

#具体详细转载自博客:https://www.cnblogs.com/fps2tao/p/7692482.html
[root@docker mysql]# ps auxfww
root       6699  0.8  2.0 532728 38476 ?        Ssl  Jul08   6:54 /usr/bin/dockerd
root       7025  0.2  0.4 316188  9288 ?        Ssl  Jul08   2:01  \_ docker-containerd -l 	unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-	timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-	containerd-shim --runtime docker-runc
root      13417  0.0  0.2 272456  3944 ?        Sl   02:57   0:00  |   \_ docker-containerd-shim 3551c4d8d60e0c7060fbb66bf34dcb03974fdabc110ca947ab421a8ad021c120 	/var/run/docker/libcontainerd/3551c4d8d60e0c7060fbb66bf34dcb03974fdabc110ca947	ab421a8ad021c120 docker-runc
root      13434  0.0  0.1  32644  3248 ?        Ss   02:57   0:00  |   |   \_ nginx: master process nginx -g daemon off;
101       13458  0.0  0.0  33100  1604 ?        S    02:57   0:00  |   |       \_ nginx: worker process
```

3. bc运算命令【bc】

因为bash shell不支持浮点数运算,所以用bc命令进行运算
[root@shell_test ~]# yum install bc -y

#scale表示保留几位小数
[root@shell_test ~]# echo "scale=2; 5/2.0"|bc
2.50

4. seq命令

用于产生从某个数到另外一个数之间的所有整数。
阅读博友 https://www.cnblogs.com/ginvip/p/6351720.html

【语法】:
seq [选项]... 尾数
seq [选项]... 首数 尾数
seq [选项]... 首数 增量 尾数
【选项】:
-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串 使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width 在列前添加0 使得宽度相同
【例子】:
[root@Gin scripts]# seq -f "%3g" 9 11
  9
 10
 11
%后面指定数字的位数 默认是%g,%3g那么数字位数不足部分是空格。
[root@Gin scripts]# seq -f "str%03g" 9 11
str009
str010
str011
这样的话数字位数不足部分是0,%前面制定字符串。
[root@Gin scripts]# seq -w 98 101
098
099
100
101
-w选项:指定输出数字同宽
-s选项:指定分隔符(默认是回车)
[root@Gin scripts]# seq -s" " -f"str%03g" 9 11
str009 str010 str011
[root@Gin scripts]# seq -s"`echo -e "/t"`" 9 11
9/t10/t11
[root@Gin scripts]# seq -s '=' 1 5
1=2=3=4=5
[root@shell_test shell]# seq -s " " -f "sunwei%04g" 100
sunwei0001 sunwei0002 sunwei0003 sunwei0004 sunwei0005 sunwei0006 sunwei0007 sunwei0008 sunwei0009 sunwei0010 sunwei0011 sunwei0012 sunwei0013 sunwei0014 sunwei0015 sunwei0016 sunwei0017 sunwei0018 sunwei0019 sunwei0020

5. shell中关于命令行的一些不好记的参数

$0: 脚本本身文件名称
$1: 命令行第一个参数,$2为第二个,以此类推
$*: 所有参数列表
$@: 所有参数列表
$#: 参数个数
$$: 脚本运行时的PID
$?: 脚本退出码

∗与@的区别

当命令行为test.sh 1 2 3
"$*“表示"1 2 3”
"$@“表示"1” “2” “3”
二者没有被引号括起来时是一样的都为"1 2 3",只有当被引号括起来后才表现出差异
----------------------------------------------------------------
----------------------------------------------------------------
$()  等同于: ``(反引号):运行一段命令
$(()) 进行数字运算 

# a=3;b=2;c=5
# echo $((a+b*c))

6. 那些年令我们头疼的grep、awk、sed(三剑客)

6.1 grep
示例文本如下:
[root@shell_test txt]# cat test1 
#sunwei
#sunwei111
sunwei
this is a test1 script
this is a test2 script
THIS IS a test3 script

#1) 反向查找
[root@shell_test txt]# cat test1|grep -v "^#"

#2) grep忽略大小写
[root@shell_test txt]# cat test1|grep -i "this"

#3) grep仅仅打印匹配,不打印整行
[root@shell_test txt]# cat test1 |grep -o "script"

#4) grep打印出上下文
[root@shell_test txt]# cat test1|grep -A 2 "test1"  ------------->打印匹配行的下2行,行数可以自定义
this is a test1 script
this is a test2 script
THIS IS a test3 script
[root@shell_test txt]# cat test1|grep -B 2 "test1"  ------------->打印匹配行的上2行,行数可以自定义
#sunwei111
sunwei
this is a test1 script
[root@shell_test txt]# cat test1|grep -C 2 "test1"  ------------->打印匹配行的上下两行,行数可以自定义
#sunwei111
sunwei
this is a test1 script
this is a test2 script
THIS IS a test3 script

#5) grep递归查找
grep -r 'ftp' /etc/passwd
[root@shell_test txt]# grep -r 'ftp' /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
------------小练习:过滤nginx官方网站安装包的版本----------------------
[root@shell_test txt]# curl -s  http://nginx.org/en/download.html|egrep -o 'Stable version.*'|egrep -o 'href="[^"]+"'|grep 'tar.gz"$'
[^"]+   表示双引号内没有引号,否则会匹配到末尾;匹配规则是 ‘href="[^"]+"’中是以href="开头,以“结尾,中间是非"的字符
href="/download/nginx-1.16.0.tar.gz"
href="/download/nginx-1.14.2.tar.gz"
href="/download/nginx-1.12.2.tar.gz"
href="/download/nginx-1.10.3.tar.gz"
href="/download/nginx-1.8.1.tar.gz"
href="/download/nginx-1.6.3.tar.gz"
href="/download/nginx-1.4.7.tar.gz"
href="/download/nginx-1.2.9.tar.gz"
href="/download/nginx-1.0.15.tar.gz"
href="/download/nginx-0.8.55.tar.gz"
href="/download/nginx-0.7.69.tar.gz"
href="/download/nginx-0.6.39.tar.gz"
href="/download/nginx-0.5.38.tar.gz"
6.2 awk
6.2.1 awk入门讲解

grep偏向于行处理
awk偏向于列处理,会把一行分成多个列,awk同时也是一门编程语言,也有变量、数组、判断、循环等语法,awk内置了很多实用函数。awk默认如果没有过滤的化,会全部行数处理。如果没有动作的话,就会打印整行{print $0}
以下着重阐述:列处理、列过滤
示例文本如下:
[root@shell_test txt]# cat test2
sunwei1 28 hangzhou
sunwei2 30 shenzhen
sunwei3 32 shanghai
zhangsan1 33 hangzhou
zhangsan2 34 foreign
zhangsan3 18 beijing


#1) awk简单使用,默认会使用空白字符隔成一列一列的
[root@shell_test txt]# cat test2 |awk '{print $1}' #打印姓名
sunwei1
sunwei2
sunwei3
zhangsan1
zhangsan2
zhangsan3

#2) awk内置变量
$0 整行 				
$1 第一列 			
$2 第二列  			
$n 第n列 			
$NF 最后一列  		
NR 当前处理到第几行
[root@shell_test txt]# cat test2 |awk '{print NR,$3,$NF}'
1 hangzhou hangzhou
2 shenzhen shenzhen
3 shanghai shanghai
4 hangzhou hangzhou
5 foreign foreign
6 beijing beijing

#3) awk打印多列、字符串拼接
cat test2 |awk '{print $1,$2}' #打印多列,默认中间加空格
[root@shell_test txt]# cat test2|awk '{print $1,$2}'
sunwei1 28
sunwei2 30
sunwei3 32
zhangsan1 33
zhangsan2 34
zhangsan3 18
cat test2 |awk '{print "name is "$1", ""age is "$2"."}' #拼接
注意:$1  $2这些不要用双引号引起来!!!!
[root@shell_test txt]# cat test2|awk '{print "name is "$1",""age is "$2}'
name is sunwei1,age is 28
name is sunwei2,age is 30
name is sunwei3,age is 32
name is zhangsan1,age is 33
name is zhangsan2,age is 34
name is zhangsan3,age is 18

#4) awk针对列过滤,整数比较
number1 > number2
number1 < number2
number1 == number2
number1 >= number2
number1 <= number2
[root@shell_test txt]# cat test2 |awk '$2>20'
sunwei1 28 hangzhou
sunwei2 30 shenzhen
sunwei3 32 shanghai
zhangsan1 33  hangzhou
zhangsan2 34 foreign
[root@shell_test txt]# cat test2 |awk '$2>30'
sunwei3 32 shanghai
zhangsan1 33  hangzhou
zhangsan2 34 foreign
[root@shell_test txt]# cat test2 |awk '$2==30'
sunwei2 30 shenzhen
[root@shell_test txt]# cat test2 |awk '$1=="sunwei1"'
sunwei1 28 hangzhou

#5) awk针对列过滤,使用正则
[root@shell_test txt]# cat test2 |awk '$3~/ei/'
zhangsan2 34 foreign
zhangsan3 18 beijing
[root@shell_test txt]# cat test2 |awk '$3~/(ei)|(ig)/'
zhangsan2 34 foreign
zhangsan3 18 beijing
[root@shell_test txt]# cat test2 |awk '$3~/(ei)&(ig)/'
None
[root@shell_test txt]# cat test2|awk '$2>30 {print $1}'
sunwei3
zhangsan1
zhangsan2
[root@shell_test txt]# cat test2|awk '$2>30 {print $2}'
32
33
34
[root@shell_test txt]# cat test2|awk '$2>30 {print $0}'
sunwei3 32 shanghai
zhangsan1 33  hangzhou
zhangsan2 34 foreign
6.2.2 awk列处理常用知识

示例文本如下:
[root@shell_test txt]# cat test3
sunwei1 28 hangzhou
sunwei2 30 shenzhen
sunwei3 32 shanghai
zhangsan1 33 hangzhou
zhangsan2 34 foreign
zhangsan3 18 beijing

#1) awk的BEGIN、END
	BEGIN{}大括号里: 只运行一次,在文本处理开始前运行
	{}大括号里:  针对每一行进行处理
	END{}大括号里: 只运行一次,在文本处理结束后运行
[root@shell_test txt]# cat test3|awk '{print $1} BEGIN{print "start...."} END{print "end...."}'
start....
sunwei1
sunwei2
sunwei3
zhangsan1
zhangsan2
zhangsan3
end....

#2) BEGIN可以用来做浮点数运算
[root@shell_test txt]# awk 'BEGIN{printf("%.2f",5/3)}'
1.67

#3) awk使用-F指定分隔符
	默认分隔符是以多个空白字符作为分隔:空格、tab
	-F参数可指定分隔符,后面跟正则表达式,支持扩展正则
[root@shell_test txt]# cat test3 |awk -F' ' '{print $3}'

#4) awk多个单字符分隔
cat test3 |awk -F'[:;]' '{print $3}'
cat test3 |awk -F':|;' '{print $3}'

#5) awk支持多字符分隔
[root@shell_test txt]# cat test3|awk -F':+|;' '{print $2}'
28
30
32
33
34
18

6) awk传参
[root@shell_test txt]# cat test3|awk -v age=30 '$2>age {print $0,$2}'
sunwei3  32 shanghai 32
zhangsan1 33 hangzhou 33
zhangsan2 34 foreign 34
[root@shell_test txt]# cat test3|awk -v age=30 '$2>age {print $0,age}'
sunwei3  32 shanghai 30
zhangsan1 33 hangzhou 30
zhangsan2 34 foreign 30
[root@shell_test txt]# cat test3 |awk -v age1=30 -v age2=20 '$2>age2 && $2<age1'
sunwei1 28 hangzhou
[root@shell_test txt]# cat test3 |awk -v age1=30 -v age2=20 '$2>age2 || $2<age1'
6.2.3 awk的判断语法

文本示例:
[root@shell_test txt]# cat test3
sunwei1 28 hangzhou
sunwei2 30 shenzhen
sunwei3 32 shanghai
zhangsan1 33 hangzhou
zhangsan2 34 foreign
zhangsan3 18 beijing

#数字判断条件
number1 > number2
number1 < number2
number1 == number2
number1 >= number2
number1 <= number2
#字符串简单判断
str1 == str2
str1 != str2

#正则判断条件
str1 ~ /str2/

[root@shell_test txt]# cat test3 |awk '{if($2>33){print $0;print "ok..."}else{print "sorry..."}}'
sorry...
sorry...
sorry...
sorry...
zhangsan2 34 foreign
ok...
sorry...
[root@shell_test txt]# cat test3 |awk '{if($3~/^hang/){print $0}}'
sunwei1 28 hangzhou
zhangsan1 33 hangzhou
6.2.4 awk数组循环语法

数组基础:
数字变量只能定义一个数,数组可以定义多个数
数组有索引和值,一般的索引是使用0、1、2递增
awk数组也支持使用字符串为索引,类似于字典

#1) 数组(类似于python列表)
numbers[0]=2
numbers[1]=4
numbers[2]=6
numbers[3]=8
echo ${numbers[0]} #第一个数
echo ${numbers[1]} #第二个数
echo ${numbers[*]} #所有数字
unset numbers #删除变量
numbers=(2 4 6 8)
echo ${numbers[0]}

#2) 关联数组(类似于python字典)
[root@shell_test txt]# declare -A info
[root@shell_test txt]# info["name"]="sunwei"
[root@shell_test txt]# info["age"]=25
[root@shell_test txt]# echo ${info["name"]}
sunwei
[root@shell_test txt]# echo ${info["age"]}
25

#3) awk循环语法
[root@shell_test txt]# awk 'BEGIN{var[0]=1;var[1]=2;var[3]=4;for(i in var){print i,var[i]}}'
0 1
1 2
3 4
#数字默认值为0
[root@shell_test txt]# awk 'BEGIN{var[0]++;var[0]++;var[1]--;for(i in var){print i,var[i]}}'
0 2
1 -1
awk数组字符串索引
[root@shell_test txt]# awk 'BEGIN{info["age"]=27;info["name"]="sunwei";for(i in info){print i,info[i]}}'
age 27
name sunwei
#统计每个城市的次数(此处使用sort、uniq),效率差,浪费cpu资源
[root@shell_test txt]# cat test3 |awk '{print $3}'|sort|uniq -c
      1 beijing
      1 foreign
      2 hangzhou
      1 shanghai
      1 shenzhen
#使用awk效率高
[root@shell_test txt]# cat test3 |awk '{count[$3]++}END{for(i in count){print i,count[i]}}'
foreign 1
shanghai 1
beijing 1
hangzhou 5
shenzhen 1
6.2.5 awk分析Nginx日志
[root@shell_test txt]# cat access.log |awk '{count[$1]++}END{for(ip in count){print ip"\t"count[ip]}}'|sort -nk 2
168.28.0.3	1
172.2.0.3	1
172.28.0.4	1
172.48.0.3	1
172.58.0.3	1
192.3.0.3	1
172.28.0.3	5
[root@shell_test txt]# cat access.log |awk '{count[$7]++}END{for(status in count){print status"\t"count[status]}}'
205	1
444	1
353200	1
400	3
324	1
200	3
500	1
[root@shell_test txt]# cat access.log | awk '{count[$7]++}END{for (status in count){print status"\t"count[status]/NR*100"%""\t"count[status]}}'
205	9.09091%	1
444	9.09091%	1
353200	9.09091%	1
400	27.2727%	3
324	9.09091%	1
200	27.2727%	3
500	9.09091%	1
[root@shell_test txt]# cat access.log | awk '{count[$7]++}END{for (status in count){print status"\t"int(count[status]/NR*100)"%""\t"count[status]}}'
205	9%	1
444	9%	1
353200	9%	1
400	27%	3
324	9%	1
200	27%	3
500	9%	1
#每分钟或者每秒或者每天的访问量
[root@shell_test txt]# cat access.log |awk '{print $3}'|awk -F'[' '{print $2}'|awk -F'+' '{print $1}'|awk '{count[$1]++}END{for(time in count){print time,count[time]}}'
31/aug2017:13:43 1
31/aug2017:13:44 9
31/aug2017:13:45 1
#nginx日志过滤
cat access.log|awk '$9~/^2/' #状态码,正常请求
cat access.log|awk '$9~/^5/' #状态码,处理异常
cat access.log |awk -F'"' '$(NF-1) ~ /iPhone/' #过滤含有iphone的ua
cat access.log|awl -F'"' '$(NF-1)~/IPhone/' #过滤含有iphone的ua
6.3 sed
6.3.1 sed文本操作入门

sed说明
vim可编辑文本,Shell脚本中无法使用vim
sed命令可对文本进行更改、删除、添加、打印,可以直接修改文本文件
示例文本文件如下:
Port 22 Port 22 Port 22
PermitRootLogin yes
Port 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
//note
nouse

#1) sed语法
sed '过滤+动作' 文件路径

#2) sed过滤(默认无过滤,每一行都处理)
	/^Port/       #正则过滤Port
	2,$        #指定行数,n代表第n行,$代表最后一行
	/PermitRootLogin/,/ListenAddress/  #包含PermitRootLogin的行开始,包含ListenAddress的行结束
	
#3) sed动作
	p 打印动作
	a 在行下面添加
	i 在行上面添加
	d 删除
	s/str1/str2/g 全局查找替换,str1替换成st2
	s/str1/str2/    查找替换,每行第一次出现的替换
	
#4) sed打印动作,跟-n结合使用(只打印出匹配的行)
[root@shell_test txt]# cat test4 |sed '/Port/p'  #此命令会将匹配的行打印两边,其他没有匹配到的行,也会打印出来,所以我们一般在使用sed进行过滤文本的时候,加上-n
Port 22 Port 22 Port 22
Port 22 Port 22 Port 22
PermitRootLogin yes
Port 22
Port 22
[root@shell_test txt]# cat test4|sed -n '/^Port/p'
Port 22 Port 22 Port 22
Port 22
[root@shell_test txt]# cat test4|sed -r -n '/^Port+/p'   #sed默认不支持扩展正则,需要加上-r才可以支持扩展正则
Port 22 Port 22 Port 22
Port 22
[root@shell_test txt]# cat test4|sed -n '3,5p'
Port 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
[root@shell_test txt]# cat test4 |sed -n '/PermitRootLogin/,/sed/p'
PermitRootLogin yes
Port 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
[root@shell_test txt]# cat test4 |sed -n '/tLogin/,/sed/p'
PermitRootLogin yes
Port 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
#由上可以看出,sed过滤文本是以行为单位的

#5) sed添加文本
[root@shell_test txt]# sed 'a 666' test4   #每一行下面添加”666“
Port 22 Port 22 Port 22
666
PermitRootLogin yes
666
Port 22
666
PasswordAuthentication yes
666
[root@shell_test txt]# sed 'i 666' test4  ##每一行上面添加”666“
666
Port 22 Port 22 Port 22
666
PermitRootLogin yes
666
Port 22
666
PasswordAuthentication yes
[root@shell_test txt]# sed 'i \     666' test4   #需要增加空格,使用反斜杠
     666
Port 22 Port 22 Port 22
     666
PermitRootLogin yes
     666
Port 22
[root@shell_test txt]# sed '/sedsedsed/a \ sunwei add' test4   #过滤加动作,找出包含”sedsedsed“的一行,并且在其下面添加” sunwei add“
Port 22 Port 22 Port 22
PermitRootLogin yes
Port 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
 sunwei add
//note
nouse
 Port
 [root@shell_test txt]# sed -i '/^ sunwei/d' test4  #过滤后删除
[root@shell_test txt]# cat test4
Port 22 Port 22 Port 22
PermitRootLogin yes
Port 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
//note
nouse
 Port
6.3.2 sed文本替换以及应用

示例文本如下:
Port 22 Port 22 Port 22
PermitRootLogin yes
Port 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
//note
nouse
Port

#1) sed普通替换
[root@shell_test txt]# cat test5|sed 's/22/1111/g'   #全局替换
Port 1111 Port 1111 Port 1111
PermitRootLogin yes
Port 1111
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
//note
nouse
    Port
[root@shell_test txt]# cat test5|sed 's/22/1111/'  #匹配行的第一次出现替换
Port 1111 Port 22 Port 22
PermitRootLogin yes
Port 1111
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
//note
nouse
    Port
    
#2) sed正则替换,支持普通正则和扩展正则(-r)
[root@shell_test txt]# cat test5|sed 's/ListenAddress.*/ListenAddress 192.168.1.1/g'  #普通正则
Port 22 Port 22 Port 22
PermitRootLogin yes
Port 22
PasswordAuthentication yes
ListenAddress 192.168.1.1
sedsedsed
//note
nouse
    Port
[root@shell_test txt]# cat test5|sed -r 's/(sed)+/111/g'   #或者使用[root@shell_test txt]# cat test5|sed -r 's/(sed){3}/111/g'
Port 22 Port 22 Port 22
PermitRootLogin yes
Port 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
111
//note
nouse
    Port
    
#3) sed分隔符可以有多种选择,一般都用/    
[root@shell_test txt]# cat test5|sed 's#22#444#g'
Port 444 Port 444 Port 444
PermitRootLogin yes
Port 444
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
//note
nouse
    Port
 
#4) sed过滤加替换
[root@shell_test txt]# cat test5|sed '1,2s/2/5/g'   #过滤加替换
Port 55 Port 55 Port 55
PermitRootLogin yes
Port 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
//note
nouse
    Port
[root@shell_test txt]# cat test5|sed '/^Port/s/Port/PORT/g'   #正则过滤加替换
PORT 22 PORT 22 PORT 22
PermitRootLogin yes
PORT 22
PasswordAuthentication yes
ListenAddress 10.175.201.36
sedsedsed
//note
nouse
    Port

#5) sed支持直接更改文本文件,使用-i选项
sed 's/22/1111/g' test5
sed -i 's/22/1111/g' test5
sed -i '/PermitRootLogin/a Permitsunwei' test5
注意:使用sed -i选项进行文本编辑时,记得先进行备份!  使用diff -u  file1  file2 或者 vimdiff  file1 file2进行文本内容比对

6) 实战:使用sed过滤出nginx版本包
nginxdownloadurl="http://nginx.org/download/nginx-1.14.1.tar.gz"
[root@shell_test shell]# echo $nginxdownloadurl|sed 's#.*/##'
nginx-1.14.1.tar.gz
7) 修改mfschunkserver.cfg文件中配置(直接锁定到那一行并进行修改)
sed '71s/#//' -i /usr/local/mfs/etc/mfs/mfschunkserver.cfg

7. find命令

7.1 find命令查找入门

find命令用来搜索指定文件
搜索到指定文件后可执行某些动作,例如rm操作
文件准备:
mkdir /tmp/sunwei;cd sunwei
[root@shell_test sunwei]# for line in KaTeX parse error: Expected group after '_' at position 23: …);do touch file_̲line;mkdir dir_$line;done
[root@shell_test sunwei]# ls
dir_1 dir_2 dir_4 dir_6 dir_8 file_1 file_2 file_4 file_6 file_8
dir_10 dir_3 dir_5 dir_7 dir_9 file_10 file_3 file_5 file_7 file_9
ln -s /tmp/sunwei/file_10 /tmp/sunwei/file_link
touch -d “365 days ago” file_9
chown nobody:nobody file_8

#1) find语法
	find 目录 选项 动作
	
#2) find选项说明
	选项可按文件类型、更改时间、名字等进行查找
	无选项默认全查找
	
#3) find动作说明
	动作默认print,输出查找到的文件路径
	动作可以自定义
根据文件类型查找-type
f 普通文件 file
d 目录  directory
l 链接文件
b 块设备文件
c 字符设备文件
p 管道文件
find /tmp/sunwei -type f
find /tmp/sunwei -type l
find根据文件名字查找
find /tmp/sunwei -name "file_*"  #只支持通配符
根据文件的用户、用户组来查找
find /tmp/sunwei -type f -user nobody
find /tmp/sunwei -type f -group nobody

#4) find反向查找
find /tmp/sunwei/ -type f ! -user nobody
7.2 find文件查找加动作
#1) linux文件时间,可用stat查看
	atime #access time访问时间
	mtime #modify time修改时间,比较常用。内容修改更新这个时间
	ctime #change time,包含内容修改或者属性修改(文件属主、文件权限)
	
#2) atime不生效原因
由于atime频繁更改会对文件io产生影响,因此很多线上系统atime的修改是禁止的。挂载的时候使用noatime  /etc/fstab

#3) 根据修改时间查找
find /tmp/sunwei -type f -mmin +3      #3分钟前修改
find /tmp/sunwei -type f -mtime +6     #6天前修改的
find /tmp/sunwei/ -type f -newer file_6     #相对文件时间查找
find /tmp/sunwei/ -type f -newermt '2018-11-25 13:15:00' #绝对时间查找

#4) find结合xargs
find /tmp/sunwei/ -type f -newer file_6 -print | xargs rm
find /tmp/sunwei/ -type f -print0|xargs -0 grep 'sunwei'
find结合xargs存在问题
touch '/tmp/sunwei/blank  sunwei'
find /tmp/sunwei -type f -name "blank*"
find /tmp/sunwei -type f -name "blank*" | xargs ls -l   #报错,因为默认有空格作为分隔符
find /tmp/sunwei/ -type f -name "blank*" -print0 |xargs -0 ls -l #使用-print0和-0代表以\0作为分隔符

8. curl命令

阅读博客:http://www.sgyma.com/hhlm_49052.html
是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态。
语法: curl [option] [url]

#1) 基本用法
获取页面内容:当我们不加任何选项使用 curl 时,默认会发送 GET 请求来获取链接内容到标准输出。
curl http://www.baidu.com
 
#2) 显示 HTTP 头
如果我们只想要显示 HTTP 头,而不显示文件内容,可以使用 -I 选项:
curl -I http://www.baidu.com
输出为:
[root@shell_test example_shell]# curl -I http://www.baidu.com
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Thu, 18 Jul 2019 14:37:51 GMT
Content-Type: text/html
Content-Length: 277
Last-Modified: Mon, 13 Jun 2016 02:50:23 GMT
Connection: Keep-Alive
ETag: "575e1f6f-115"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Accept-Ranges: bytes
也可以同时显示 HTTP 头和文件内容,使用 -i 选项:
curl -i http://www.baidu.com

#3) 把链接页面的内容输出到本地文件中
curl https://www.baidu.com > index.html
也可以通过 curl 自带的 -o/-O 选项将内容保存到文件中
- -o(小写的 o):结果会被保存到命令行中提供的文件名
- -O(大写的 O):URL 中的文件名会被用作保存输出的文件名
curl -o index.html https://www.baidu.com
curl -O http://www.hbygxh.org/html/2018/gyzxx_0309/857.html  #结果,文件名为857.html 的文件里保存着内容
###注意:使用 -O 选项时,必须确保链接末尾包含文件名,否则 curl 无法正确保存文件。如果遇到链接中无文件名的情况,应该使用 -o 选项手动指定文件名,或使用重定向符号。

#4) 同时下载多个文件
我们可以使用 -o 或 -O 选项来同时指定多个链接,按照以下格式编写命令:
curl -O http://www.baidu.com/page/2/ -O http://www.baidu.com/page/3/
curl -o page1.html http://www.baidu.com/page/1/ -o page2.html http://www.baidu.com/page/2/

#5) 测试网页返回值
curl -o /dev/null -s -w %{http_code} www.linux.com

9. lsof命令

转载自:https://www.cnblogs.com/sparkbj/p/7161669.html

10. 怎么找出进程号

阅读博客:https://blog.csdn.net/a12345555555/article/details/72770789

  • ps -ef |grep 进程名
  • pidof 进程名

11.uniq

在这里插入图片描述

  1. 使用uniq 命令删除重复的行
    uniq /etc/passwd
  2. 检查文件并删除文件中重复出现的行,并在行首显示该行重复出现的次数
    uniq -c testfile
  3. 当重复的行并不相邻时,uniq 命令是不起作用的,即若文件内容为以下时,uniq 命令不起作用
    $ cat testfile1 # 原有内容
    test 30
    Hello 95
    Linux 85
    test 30
    Hello 95
    Linux 85
    test 30
    Hello 95
    Linux 85

这时我们就可以使用 sort:
$ sort testfile1 | uniq
Hello 95
Linux 85
test 30

  1. 统计各行在文件中出现的次数:
$ sort testfile1 | uniq -c
   3 Hello 95  
   3 Linux 85 
   3 test 30
  1. 在文件中找出重复的行:
$ sort testfile1 | uniq -d
Hello 95  
Linux 85 
test 30 

12. sort

13. cut

14. 系统性能分析

14.1. sar
14.2. top
14.3. vmstat
14.4 free

15. yum

15.1. yum provides 查看命令的安装包
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值