序号 | 地址 |
1 | 计算机网络核心 |
2 | 数据库相关 |
3 | Redis |
4 | Linux相关 |
5 | JVM的内容 |
6 | GC相关的 |
7 | Java多线程与并发 |
8 | Java多线程与并发-原理 |
9 | Java常用类库与技巧 |
10 | Java框架-Spring |
1、Linux的体系结构
- 体系结构主要分为用户态(用户上层活动)和内核态。
- 内核:本质是一段管理计算机硬件设备的程序。
- 系统调用∶内核的访问接口,是一种能再简化的操作。
- 公用函数库:系统调用的组合拳(系统调用封装)。
- Shell:命令解释器,可编程。
man 2 syscalls //查看所有的系统调用说明 man 3 //系统的库函数 ls -lrt // which ls // cat less more vim echo $SHELL //当前shell版本 cat /etc/shells //本机支持的shell版本 chsh -s /bin/dash //切换到上面查询到的shell版本
2、如何查找特定的文件(Find)
Find:在指定目录下查找文件
find path [options] params
使用:
find -name "test.java" # 在当前目录下查到test.java文件 find / -name "test.java" # 从根目录开始查到test.java文件 find ~ -name "test*" # 从用户目录下,找到以test开头文件 find ~ -iname "test.java" # 从用户目录下,找到test.java文件(忽略大小写)
3、检索文件内容(grep)
grep [options] pattern file
- 全称:Global Regular Expression Print。
- 作用:查找文件里符合条件的字符串。
grep "start" test* //从test开头文件中,查找含有start的行
管道操作符 |
- 可将指令连接起来,前一个指令的输出作为后一个指令的输入
find ~ |grep "test" find ~ //查找当前用户所有文件 grep "test" //从文件中
使用管道注意的要点
- 只处理前一个命令正确输出,不处理错误输出。
- 右边命令必须能够接收标准输入流,否则传递过程中数据会被抛弃
- sed,awk,grep,cut,head,top,less,more,c,join,sort,split等
grep 'error' email.log # 从email.log文件中查询包含error的行 grep 'error' email.log | grep -o '\[0-9\]' # 获取到error的行,并取[]含有数字的内容 ps -ef|grep tomcat |grep -v # 并过滤掉含有当前进程
4、对文件内容做统计(awk)
awk [options] 'cmd' file
- 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分。
- 将切片直接保存在内建的变量中,$1,$2…($0表示行的全部)。
- 支持对单个切片的判断,支持循环判断,默认分隔符为空格。
- -F 指定分隔符(默认为空格)
// 将email.out进行切分,打印出第1/3列内容 awk '{print $1,$3}' email.out // 将email.out进行切分,当第1列为tcp,第2列为1的列,全部打印。 awk '$1=="tcp" && $2==1{print $0}' email.out //在上面的基础上将表头进行打印(NR表头) awk '($1=="tcp" && $2==1)|| NR==1 {print $0}' email.out //以,为分隔符,切分数据,并打印第二列的内容 awk -F "," '{print $2}' test.txt
将日志中第1/3列进行打印,并对第1列的数据进行分类统计
awk '{print $1,$3}' email.out | awk '{count[$1]++} END {for(i in count) print i "\t" count[i]}'
5、批量替换文件内容(sed)
sed [option] 'sed commond' filename
- 全名Stream Editor,流编辑器
- 适合用于对文本行内容进行处理
- sed commond为正则表达式
- sed commond中为三个/,分别为源内容,替换后的内容
sed -i 's/^Str/String/' replace.java
将末尾的.替换为;(转义.)
sed -i 's/\.$/\;/'
全文将Jack替换为me(g是全部替换,不加只替换首个)
sed -i 's/Jack/me/g/ replace.java
删除replace.java中的空格(d是删除)
sed -i '/^ *$/d' replace.java
删除包含Interger的行(d是删除)
sed -i '/Interger/d' replace.java
6、lsof
查看某一端口的占用情况
lsof -i:8080
7、netstat
netstat 命令用于显示各种网络相关信息,如网络连接, 路由表, 接口状态等等;
列出所有处于监听状态的tcp端口:
包括 PID 和进程名称
netstat -tulpn
查看指定端口号占用的TCP网络连接情况
netstat -tunlp|grep 8080
8、jstack
根据PID,查看JVM中各线程信息('0x9eb’为nid值)
jstack 2246|grep '0x9eb' -A 50
9、实时查看文件后几行(实时查看日志)
tail -f a.java 查看a.java文件的后10行内容;
10、unzip
unzip file1.zip 解压一个zip格式压缩包 zip -r lib.zip lib/ 将目录进行压缩(lib.zip) zip -r lib.zip tomcat-embed.jar xml-aps.jar 将多个文件压缩为zip文件(lib.zip)
11、docker常用命令
#1、查看docker中下载好的镜像: docker images #2、查询需要的容器名称: docker search mysql #3、将需要的docker容器下载运行到本地(名称、端口号、msyql密码、ID): docker run -di --name=first -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root 26d26dsfsd31a #4、查看运行的docker容器: docker ps #5、查看所有的docker容器(包括未运行的): docker ps -a #6、停止当前运行的docker容器: docker stop first #7、启动docker容器: docker start first #8、重启docker容器: docker restart first #9、删除docker容器: docker rm first
更新yum
sudo yum update
安装docker
sudo yum install docker
查看docker版本
docker -v
Docker version 1.13.1, build 0be3e21/1.13.1
启动docker
systemctl start docker systemctl restart docker systemctl stop docker
查看docker是否启动
docker ps -a
搜索Redis镜像
docker search redis
12、查看当前目录所占存储
du -sh //查看当前文件夹所占存储空间 du --max-depth=1 //只查看当前目录下文件占用的存储空间 df -h //查看系统硬盘使用情况
13、Linux内核优化
打开配置文件
vim /etc/sysctl.conf
14、用户操作
添加用户sum
:
useradd –d /usr/sum -m sum
关于useradd的某些参数:
-u: 指定 UID,这个 UID 必须是大于等于500,并没有其他用户占用的 UID
-g: 指定默认组,可以是 GID 或者 GROUPNAME,同样也必须真实存在
-G: 指定额外组
-c: 指定用户的注释信息
-d: 指定用户的家目录
已创建的用户sum
设置密码
passwd sum
用户添加root
权限
visudo
找到root
用户权限位置
添加与root
用户相同权限
## Allow root to run any commands anywhere root ALL=(ALL) ALL eses ALL=(ALL) ALL
新建的用户在面显示
cat /etc/passwd
切换下刚才添加的用户
su sum
sum: x:1000:1000:: /usr/sum :/bin/bash
sum: x:0:1000:: /usr/sum :/bin/bash
回到root用户
exit
修改已有用户信息usermod
usermod 选项 用户名
删除用户文件夹
rm -rf /usr/sum
删除用户sum
userdel sum
15、添加组
添加用户组
groupadd groupname
修改用户组
使用者权限:管理员用户
groupmod 选项 用户组 groupmod -n new-usergroup usergroup
常用的选项有:
- -g GID 为用户组指定新的组标识号。
- -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
- -n新用户组 将用户组的名字改为新名字
删除用户组
groupdel groupname
可以看到自己的分组和分组id
cat /etc/group
16、sudo用户权限操作
比如我们使用普通用户操作用户或者操作用户组、以及修改网卡配置文件的时候,需要切换到root用户才操作,此时我们可以使用sudo命令提高普通用户的操作权限,以达到操作目的
sudo
:控制用户对系统命令的使用权限,root允许的操作。
通过sudo可以提高普通用户的操作权限。
使用者权限:普通用户
使用root用户权限执行命令,操作
sudo -s
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
17、更换文件所有者
格式:
chown [-R] 所有者 文件或目录 chown [-R] 所有者:所属组 文件或目录
将kibana-8.3.3-linux-x86_64.tar.gz
所有者改为用户sum
chown -R sum /usr/sum/kibana-8.3.3-linux-x86_64.tar.gz
将kibana-8.3.3-linux-x86_64.tar.gz
所有者改为用户sum
、所有组改为sum
chown -R sum:sum /usr/sum/kibana-8.3.3-linux-x86_64.tar.gz