Linux 的体系结构

  • 体系结构主要分为用户态(用户上层活动)和内核态
  • 内核:本质上是一段管理计算机硬件设备的程序
  • 系统调用:内核的访问接口,是一种能再简化的操作。
  • 公用函数库:系统调用的组合拳
  • Shell: 命令解释器,可编程

Linux体系结构

如何操作特定的文件

检索文件名 find

1
2
3
4
5
6
7
8
9
10
find path [options] params
# 作用:在指定目录下查找文件
# 不加 path 作用域时的默认路径为当前目录及其子目录
find -name "helloworld.java"
# linux 系统中 / 代表 root 根目录 ~ 代表 home 目录
find / -name "helloworld.java"
# 支持模糊查询
find ~ -name "hello*"
# -iname 忽略大小写
find ~ -iname "hello*"

检索文件内容 grep

1
2
3
4
5
6
# grep : global regular expression print
# 用于查找文件里符合条件的字符串 可以使用正则表达式 最终输出到终端
grep [options] pattern file

# 从以 hello 开头的文件中寻找含 hello 的字符串
grep "hello" "hello*"

管道操作符 |

1
2
3
4
5
6
# 可将指令连接起来 前一个指令的输出(stdout)作为后一个指令的输入(stdin)
# 只处理前一个命令的正确输出 不处理错误输出
# 右边的命令必须能够接收标准输入流 否则传递过程中会被抛弃
find ~ | grep "hello"
# grep -o
# grep -v

对文件内容做统计 awk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
awk [options] 'cmd' file
# 一次读取一行文本 按输入分隔符进行切片 切成多个组成部分
# 将切片直接保存在内建的变量中 $1, $2... ($0 表示行的全部)
# 支持对耽搁切片的判断,支持循环判断,默认分隔符为空格。

# 打印 netstat.txt 文件中第一列,第四列的内容
awk '{print $1, $4}' netstat.txt

# 打印 netstat.txt 文件中 第一列中为 tcp 第二列为 1 的所有内容
# NR
awk '$1=="tcp" && $2=1 {print $0}' netstat.txt

# enginearr[] 为变量名
# 可以先用 grep 过滤数据,然后用 awk 来整理
awk '{enginearr[$1]++}END{for(i in enginearr) print i "\t" enginearr[i]}'

批量替换掉文档中的内容 sed

1
2
3
4
5
6
// replace.java
Str a = "The girl's boyfriend is Jack".
Str b = "The girl often chats with Jack and Jack is Jack".
Str c = "The girl loves Jack so muck".

Integer bf = new Integer(2);
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
sed [option] 'sed command' filename
# 全名 stream editor 流编辑器
# 适合用于对文本的行内容进行处理

# 将 replace.java 中所有 Str 字符串替换为 String
# 第一个 / 之前的 s 代表对字符串进行操作
# 第一个 / 与第二个 / 之间的代表要操作的内容
# 第二个 / 与第三个 / 之间的内容表示要操作后的内容
sed 's/^Str/String/' replace.java

# 上面的命令指示将修改后的内容输出到 终端
# 如果需要输出到文件中需要加 -i
sed -i 's/^Str/String/' replace.java

# \ 为转义字符
# 将 replace.java 中所有以 . 作为结尾的变为以 ; 结尾的
sed -i 's/\.$/\;/' replace.java

# 默认只替换每行文件中第一个出现等于 Jack 的字符串
sed -i 's/Jack/me/' replace.java
# 全局替换
sed -i 's/Jack/me/g' replace.java

# 删除 3-4 行的空行 注意 ^ 与 *$ 之间的空格代表空行 /d 代表删除
sed -i '/^ *$/d' replace.java

# 删除含有 Integer 的行
sed -i '/Integer/d' replace.java

查看或者编辑文件

1
2
3
4
5
6
7
8
9
10
11
$ cat 猫一眼, 可以合并文件
$ head -n N 头几行
$ tail -n N 尾几行
$ more 较大文件, 分页显示, 提示文件显示百分比
$ less less 可以随意浏览文件, 而 more 仅能向前移动, 而且 less 在查看之前不会加载整个文件
$ vi
$ vim

# 如何查看大文件
# 就跟所有操作大文件的方法一样: 分治
# vim默认加载整个文件, 但是可以按需取用, 使用 less 最好, 可以把命令直接加进去.

3 如何查看系统的负载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ uptime # 获取主机运行时间和查询linux系统负载等信息

$ w # 和uptime差不多

$ top # 实时监控系统状态

$ iostat -x 1 10 # 监控IO, -x表示显示所有参数信息, 1表示每秒监控一次, 10 表示工监控10次

$ vmstat # 获得有关进程、虚存、页面交换空间及CPU活动的信息

$ free -m # 查看系统内存的使用情况, -m参数表示按照兆字节展示

$ sar -n DEV 1 # 查看网络设备的吞吐率

$ mpstat -P ALL 1 # 显示每个CPU的占用情况, 如果CPU占用率特别高, 可能是单线程应用程序引起

$ dmesg | tail # 输出系统日志的最后10行

评论