前言
目前,我们的绝大多数的服务器均为linux环境。对于我们java程序员来说,基本常用的Linux命令是我们应该熟悉掌握的,也是面试中经常问到的点。
简介
我们首先来介绍一下Linux的体系结构,如下图所示:

以下是一些系统级别的常用命令:
- man 2 syscalls 查询所有系统调用的列表
- man 2 acct 查看所有的系统调用说明
- cat /etc/shells 获取当前系统支持的shell版本
- chsh -s <shell-path> 切换shell版本
- man <shell-name> 查找某个函数的介绍。例如 man find 就是查看find命令的详细介绍
常用命令
find 在指定目录下查找文件
语法
find path [options] params
常用方式
- find ~ -name "target3.java" 精确查找文件
- find ~ -name "target*" 模糊查找文件
- find ~ -iname "target*" 不区分文件名大小写模糊查找文件
补充:~代表Linux登陆用户的用户目录,/为Linux的根目录
grep 检索文件内容
语法
grep [options] pattern file
常用方式
- grep 'partial\[true\]' data.log 从data.log中查找parital[true]字符串并打印结果
- grep -o 'engine\[[0-9a-z]*\]' data.log 从data.log中查找符合后续正则表达式的字符串并打印结果
- grep -v 'grep' data.log 过滤掉data.log中的grep字符串并打印结果
| 管道操作符
简介
可将指令连接起来,前一个指令的输出作为后一个指令的输入
注意要点
- 只处理前一个命令的正确输出,不处理错误输出
- 右边的命令必须能够接收标准的输入流,否则在传递过程中数据会被抛弃
- sed、awk、grep、cut、head、top、less、more、wc、join、sort、split等等都可以接收标准输入流
awk 对文件内容做统计
语法
awk [options] 'cmd' file
解释:
- 一次读取一行文本,按输入分隔符进行切片,且成多个组成部分
- 将切片直接保存在内建的变量中,$1,$2...$0表示全部
- 支持对单个切片的判断,支持循环判断
常用方式
- awk '{print $1,$4}' test.txt 打印第一列和第四列的内容
- awk '$1=="tcp" && $2==1 {print $0}' test.txt 打印符合条件的内容
- awk '($1=="tcp" && $2==1) || NR==1 {print $0}' test.txt 打印第一行和符合条件的数据
- awk -F "," '{print $2}' test.txt 打印自定义分隔符的第二列的内容
- awk '{countarr[$1]++} END {for(i in countarr) print i "\t" countarr[i]}' test.txt 打印第一列的词语出现次数的统计(其中"\t"表示空格)
sed 批量替换文本内容
语法
sed [option] 'sed command' filename
常用方式
- sed 's/^Str/String/' test.txt 将test.txt内容中的第一个以Str开头的词语替换成String 打印结果(第一个s表示操作字符串,后面跟匹配的正则,后片跟替换的内容)
- sed -i 's/^Str/String/' test.txt 将test.txt内容中的第一个以Str开头的词语替换成String ,并写入到文件中(第一个s表示操作字符串,后面跟匹配的正则,后片跟替换的内容)
- sed -i 's/^Str/String/g' test.txt 将test.txt内容中的所有以Str开头的词语替换成String ,并写入到文件中(第一个s表示操作字符串,后面跟匹配的正则,后片跟替换的内容)
- sed -i '/^ *$/d' test.txt 将test.txt中的空行删除
- sed -i '/Integer/d' test.txt 将test中含有Integer的行全部删掉
文章评论