-
Notifications
You must be signed in to change notification settings - Fork 381
/
Copy pathLinux命令.md
195 lines (128 loc) · 4.02 KB
/
Linux命令.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档; linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们;
比如可是使用 --help 查看帮助选项。如 `ls --help`
## 文件和目录管理
### 创建和删除
- 创建:mkdir
- 删除:rm
- 删除非空目录:rm -rf file目录
- 删除日志 rm *log (等价: $find ./ -name “*log” -exec rm {} ;)
- 移动:mv
- 复制:cp (复制目录:cp -r )
- 创建文件 touch
### 查看
- 显示当前目录下的文件 **ls**
- 按时间排序,以列表的方式显示目录项 **ls -lrt**
```shell
ls -l
```
- 查看文件内容 cat 可以加more 、less控制输出的内容的大小
```shell
cat a.text
cat a.text | more
cat a.text| less
```
### 权限
- 改变文件的拥有者 chown
- 改变文件读、写、执行等属性 chmod
- 递归子目录修改: chown -R tuxapp source/
- 增加脚本可执行权限: chmod a+x myscript
### 管道和重定向
- 批处理命令连接执行,使用 |
- 串联: 使用分号 ;
- 前面成功,则执行后面一条,否则,不执行:&&
- 前面失败,则后一条执行: ||
```shell
ls /proc && echo suss! || echo failed.
cat access.log >> test.log
```
## 文本处理
### 文件查找 find
find 参数很多,本文只介绍几个常用的
-name 按名字查找
-type 按类型
-atime 访问时间
```shell
find . -atime 7 -type f -print
find . -type d -print //只列出所有目录
find / -name "hello.c" 查找hello.c文件
```
### 文本查找 grep
```
grep match_patten file // 默认访问匹配行
```
常用参数
- -o 只输出匹配的文本行 **VS** -v 只输出没有匹配的文本行
- -c 统计文件中包含文本的次数
`grep -c “text” filename`
- -n 打印匹配的行号
- -i 搜索时忽略大小写
- -l 只打印文件名
```shell
grep "class" . -R -n # 在多级目录中对文本递归搜索(程序员搜代码的最爱)
cat LOG.* | tr a-z A-Z | grep "FROM " | grep "WHERE" > b #将日志中的所有带where条件的sql查找查找出来
```
### 文本替换 sed
```shell
sed [options] 'command' file(s)
```
- 首处替换
```
sed 's/text/replace_text/' file //替换每一行的第一处匹配的text
```
- 全局替换
```
sed 's/text/replace_text/g' file
```
默认替换后,输出替换后的内容,如果需要直接替换原文件,使用-i:
```
sed -i 's/text/repalce_text/g' file
```
- 移除空白行
```
sed '/^$/d' file
```
```shell
sed 's/book/books/' file #替换文本中的字符串:
sed 's/book/books/g' file
sed '/^$/d' file #删除空白行
```
### 数据流处理awk
详细教程可以查看 http://awk.readthedocs.io/en/latest/chapter-one.html
```shell
awk ' BEGIN{ statements } statements2 END{ statements } '
```
工作流程
1.执行begin中语句块;
2.从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
3.执行end语句块;
**特殊变量**
NR:表示记录数量,在执行过程中对应当前行号;
NF:表示字段数量,在执行过程总对应当前行的字段数;
$0:这个变量包含执行过程中当前行的文本内容;
$1:第一个字段的文本内容;
$2:第二个字段的文本内容;
```shell
awk '{print $2, $3}' file
# 日志格式:'$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"'
#统计日志中访问最多的10个IP
awk '{a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
```
### 排序 sort
- -n 按数字进行排序 VS -d 按字典序进行排序
- -r 逆序排序
- -k N 指定按第N列排序
```shell
sort -nrk 1 data.txt
sort -bd data // 忽略像空格之类的前导空白字符
```
### 去重uniq
- 消除重复行
```
sort unsort.txt | uniq
```
### 统计 wc
```shell
wc -l file // 统计行数
wc -w file // 统计单词数
wc -c file // 统计字符数
```