下载
https://www.bilibili.com/video/BV1dW411M7xL?from=search&seid=6818366384308552946
关于 Linux
Linux 特点
免费,开源,高效,稳定,处理高并发非常强悍
硬盘分区
swap分区:交换分区,当系统内存不足时,会暂时使用swap分区
Linux文件目录结构
/bin:Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
/boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
/etc:Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
/opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
/selinux:这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv: 该目录存放一些服务启动之后需要提取的数据。
/sys:这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
/usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
/usr/bin:系统用户使用的应用程序。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
/var:var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
- 用户配置文件(用户信息):/etc/passwd
- 口令和配置文件:/etc/shadow
- 组配置文件信息:/etc/group
- 鸟哥的LINUX私房菜_基础学习篇(第三版) :
软件
XShell,XFtp
快捷键
5yy 复制下面5行, p 粘贴
dd 删除行
Linux 常用操作命令
技巧
https://www.linuxidc.com/Linux/2020-03/162522.htm
-
使用tab键进行自动完成
使用Tab键进行自动完成
也可以在完成命令时使用Tab键。 -
切换回上一个工作目录
cd -
-
返回主目录
cd ~
但是,您也可以仅使用cd返回主目录:cd
-
列出目录的内容
ll
-
在一个命令中运行多个命令
假设您必须一个接一个地运行几个命令。您是否在等待第一个命令完成运行,然后执行下一个命令?
那么,您可以使用;
分隔符。这样,您可以在一行中运行许多命令。无需等待先前的命令完成后再执行其他任务。
command_1; command_2; command_3
-
仅在上一个命令成功的情况下,才能在一个命令中运行多个命令
在上一个命令中,您了解了如何在一个命令中运行多个命令以节省时间。但很多时候你必须确保命令不会失败才能执行下一条命令,那怎么半?
比如您要构建代码,然后在构建成功的情况下才接着运行make。
在这种情况下,可以使用&&
分隔符。 &&确保下一条命令仅在上一条命令成功执行时运行。
command_1 && command_2
此命令的一个很好的例子是当您使用sudo apt update && sudo apt upgrade
升级系统时。 -
轻松搜索您使用过的命令
只需使用ctrl + r键即可启动反向搜索并键入命令的某些部分。它将查询历史记录,并向您显示与搜索词匹配的命令。
ctrl + r 搜索词
默认情况下,它将仅显示一个结果。要查看更多与您的搜索字词匹配的结果,您将不得不反复使用ctrl + r。要退出反向搜索,只需使用Ctrl + C。
在命令历史记录中进行反向搜索 -
解除Linux终端意外冻结的Ctrl + S
在很多类Unix 的系统上,Ctrl-S 都有特殊的含义:它会“冻结”终端(它曾经被用来暂停快速滚动)。因为“保存”一般也是用这个快捷键,所以经常会有人不假思索地按下这个快捷键,结果大多数人都会被搞糊涂(我也经常犯这个错误)。解冻终端是用Ctrl-Q,所以如果你忽然发觉终端看起来被冻结了,试一下Ctrl-Q,看能不能释放它。 -
移至行首或行尾
假设您正在键入一个长命令,并且在途中您意识到必须在开始时进行一些更改。 您将使用几次向左键击移动到行的开头。 并且类似地进行到该行的末尾。
当然,您可以在此处使用Home和End键,但是也可以使用Ctrl + A
转到行的开头,并使用Ctrl + E
转到结尾。 -
实时读取日志文件
在需要在应用程序运行时分析日志的情况下,可以将tail命令与-F选项一起使用。
tail -F linuxidc_log
等同于--follow=name --retry
,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪。 -
读取压缩日志而不解压缩
服务器日志通常被gzip压缩以节省磁盘空间。这给分析日志的开发人员或系统管理员带来了一个问题。您可能必须将其scp到本地,然后提取它来访问文件,因为有时您没有提取日志的写权限。
值得庆幸的是,在这种情况下,z命令可以帮助您。 z命令提供了用于处理日志文件(例如less,cat,grep等)的常规命令的替代方法。
这样您就可以使用zless,zcat,zgrep
等命令查看压缩包的内容,甚至不必显式提取压缩文件。 -
使用 less 读取文件
less -N linuxidc.txt
//按下v键来编辑文件
//退出编辑器后,你可以继续用less浏览了
您可以在更少的范围内搜索字词,按页移动,高亮与行号等。 -
使用
!$
重新使用上一个命令中的最后一项
更好的方法您可以使用使用alt + . 。 在最后一个命令的选项之间来回移动的次数。 -
用
!!
重用当前命令中的上一个命令。
您可以使用!!调用前面的整个命令。当您必须运行一个命令并意识到它需要root特权时,这一点特别有用。
一个快速 sudo !! 省去了很多击键。 -
使用别名来修正错别字
您可能已经知道Linux中的别名命令是什么。你能做的是,用它们来修正打字错误。
例如,您可能经常将grep输入为gerp。如果您以这种方式在您的bashrc中放置一个别名:
alias gerp=grep
这样,您无需再次输入命令。 -
在Linux终端中复制粘贴
这一点有点模棱两可,因为它取决于Linux和终端应用程序。但通常,您应该能够使用以下快捷键复制粘贴命令:
选择要复制的文本,然后右键单击以粘贴(在Putty和其他Windows SSH客户端中有效)
选择要复制的文本,然后单击鼠标中键(滚动按钮)以进行粘贴
Ctrl + Shift + C
表示复制,Ctrl + Shift + V
表示粘贴 -
终止正在运行的命令/进程
这可能太明显了。如果有一个命令正在运行运行,并且您想退出该命令,则可以按Ctrl + C
停止该正在运行的命令。 -
清空文件而不删除它
如果只想清空文本文件的内容而不删除文件本身,则可以使用类似于以下命令:
> 文件名
-
查找是否有包含特定文本的文件
在Linux命令行中有多种搜索和查找方法。但是,当您只想查看是否有包含特定文本的文件时,可以使用以下命令:
grep -Pri
要搜索的字符串 路径
精通find命令。《如何使用find命令在Linux中查找文件》 见 https://www.linuxidc.com/Linux/2018-07/153205.htm -
对任何命令都可使用帮助命令(help)
比如bc命令的帮助:bc -help
用户操作
- 添加用户:
useradd [-d 指定目录/ -g 用户组名] 新的用户名
(不指定目录则默认创建在/home/目录下)
添加密码/修改密码:passwd 用户名
删除用户 :userdel [-r] 用户名
(-r 删除用户及用户家目录)
查询用户:id 用户名
切换用户:su - 用户名
- 添加组:
groupadd 组名
删除组:grouodel 组名
修改用户组:usermod -g 用户组 用户名
目录
- 添加目录:
mkdir [-p] 目录
(-p创建多级目录)
删除目录:rmdir 目录
(只能删除空文件目录)
复制
- 复制文件:
(\)cp [-r] 文件 路径
(\ 表示强制覆盖,-r 复制整个目录)
查看文件
cat
cat -n 文件名 | more
(-n 显示行号,"|" 管道符,more 分页显示)
“|” 管道符,表示将前一个命令的处理结果输出传递给后面的命令处理
more 常用操作命令
指令 作用 Enter 向下n行,需要定义。默认为1行 Ctrl+F 向下滚动一屏 空格键 向下滚动一屏 Ctrl+B 返回上一屏 = 输出当前行的行号 :f 输出文件名和当前行的行号 V 调用vi编辑器 !命令 调用Shell,并执行命令 q 退出more
less可用于查看大文件
> 指令和 >> 指令
- > 输出重定向:会将原来的文件的内容覆盖
>> 追加:不会覆盖原来文件的内容,而是追加到文件的尾部。
cal日历
head:head [-n 5] 文件
(输出文件前5行,默认10行)
tail:追踪文档
tail [-n 5] 文件
(输出文件后5行,默认10行)
tail -f 文件
实时追踪该文档的所有更新 (常用)
history:显示历史命令
!数字
执行标号为 n 的指令
find 查找
find 查找路径 -name/-user 名称
如果要进行不区分大小写的搜索,请使用-iname更改-name选项
find / -size +20M
查找大于20M的文件(+n 大于n,-n 小于n,n 等于 n,大写M)
过滤查找:grep [-n/-i] 查找内容 源文件
(-n 显示行号,-i 不区分大小写)
参数 | 作用 |
---|---|
-type | f:常规文件,d:目录,l:符号链接,c:字符设备,b:块设备,p:命名管道(FIFO),s:套接字 |
压缩和解压缩
- 压缩:
gzip 文件名
(压缩后不会保留原文件)
解压缩:gunzip 文件名.gz
zip/unzip 指令
zip用于压缩文件,unzip 用于解压的,这个在项目打包发布中很有用的
-
zip [选项]XXX.zip 将要压缩的内容
(功能描述:压缩文件和目录的命令)- zip常用选项
-r:递归压缩,即压缩目录
- zip常用选项
-
unzip [选项]XXX.zip
(功能描述:解压缩文件)- unzip的常用选项
-d <目录> 指定解压后文件的存放目录
- unzip的常用选项
tar指令
tar指令是打包指令,最后打包后的文件是.tar.gz 的文件。
- 打包:
tar -zcvf XXX.tar.gz 打包的内容
(功能描述:打包目录,压缩后的文件格式.tar.gz)
解包:tar -zxvf XXX.tar.gz -C [解包的目录]
(-C的作用:解压到指定目录,否则会在当前目录下也解压) - 选项说明
磁盘情况查询
- 系统整体磁盘使用情况:
df -h
- 查询制定目录的磁盘使用情况:
du [选项] /目录
选项 | 作用 |
---|---|
-s | 指定目录占用大小汇总 |
-h | 带计量单位 |
-a | 含文件 |
–max-depth=1 | 子目录深度 |
-c | 列出明细的同时,增加汇总值 |
统计/home文件夹下文件的个数:ls -l(R) /home | grep "^-" | wc -l
(-R 包括子目录)
统计/home文件夹下目录的个数:ls -l(R) /home | grep "^d" | wc -l
(-R 包括子目录)
Linux网络配置
- 指定固定的ip
直接修改配置文件来指定IP,并可以连接到外网(程序员推荐),编辑
vi /etc/sysconfig/network-scripts/ifcfg-eth0
重启网络服务:service network restart
Linux查看进程
ps
- 显示所有包含其他使用者的行程:
ps -aux | less
查看sshd的父进程:ps -ef | grep ssh
终止进程:kill [选项] 进程号
选项 | 作用 |
---|---|
-9 | 强制终止进程 |
- 根据名称终止进程及子进程:
killall 进程名
- 查看进程树:
pstree -pu
选项 | 作用 |
---|---|
-p | 显示进程的 PID |
-u | 显示进程的所属用户 |
top
top [选项]
选项 | 作用 |
---|---|
-d 秒数 | 指定top命令每隔几秒更新,默认是3秒在top命令的交互模式当中可以执行的命令 |
-i | 使top不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程id来仅仅监控某个进程的状态 |
- 案例 1.监视特定用户 top:输入此命令,按回车键,查看执行的进程。 u:然后输入“u”回车,再输入用户名,即可
- 案例 2:终止指定的进程。 top:输入此命令,按回车键,查看执行的进程。 k:然后输入“k”回车,再输入要结束的进程 ID 号
- 案例 3:指定系统状态更新的时间(每隔 10 秒自动更新, 默认是 3 秒): bash> top -d 10
Linux监控网络状态
netstat -anp
-an 按一定顺序排列输出
-p 显示哪个进程在调用
时区修改
tzselect
查看时区
-
更改每个用户的时区
Linux 用户一个多用户系统,每个用户都可以配置自己所需的时区,你可以为自己新增一个 TZ 环境变量:
export TZ='Asia/Shanghai'
-
执行完成之后需要重新登录系统或刷新 ~/.bashrc 生效。
source ~/.bashrc
更改Linux系统时区
要更改 Linux 系统整个系统范围的时区可以使用如下命令:
sudo rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
注意:/usr/share/zoneinfo/Asia/Shanghai 中的具体时区请用自己获取到的 TZ 值进行替换。 -
使用Systemd更改Linux系统时区
如果你使用的 Linux 系统使用 Systemd,还可以使用 timedatectl 命令来更改 Linux 系统范围的时区。在 Systemd 下有一个名为 systemd-timedated 的系统服务负责调整系统时钟和时区,我们可以使用 timedatectl 命令对此系统服务进行配置。
sudo timedatectl set-timezone 'Asia/Shanghai'
参考链接 https://www.linuxprobe.com/linux-time.html
rpm 和 yum
修改镜像
rpm
- 查询 fiefox 安装的rpm软件包:
rpm -qa | grep firefox
查询软件包是否安装 :rpm -q 软件包名
查询软件包信息:rpm -q firefox rpm -qi 软件包名
查询软件包安装目录:rpm -ql 软件包名
查询文件所属的软件包:rpm -qf 文件全路径名
- 安装rpm包:
rpm -ivh rpm包全路径名称
i:install 安装 ,v:verbose 提示,h:hash 进度条
自动安装所需依赖:yum localinstall wps-offcie-10.1.0.6634-1.i686.rpm
- 卸载安装包:
rpm -e [--nodeps] rpm包名称
(–nodeps 强制删除)
yum
- 到yum服务器查询:
yum list | grep chrome
镜像
http://chinanet.mirrors.ustc.edu.cn/help/centos.html
https://blog.csdn.net/qq_43736514/article/details/100078901
Linux 查看端口
#查看开放的端口号
firewall-cmd --list-all
#启用默认服务的(http)
firewall-cmd --add-service=http --permanent
#开放端口
firewall-cmd --add-port=8080/tcp --permanent
#重新加载一下设置,很关键~不然也不管用
firewall-cmd –-reload
Linux服务管理
-
service 服务名 [start | stop | restart | reload | status]
测试连接:telnet ip地址 端口号
-
查看服务名:
setup
Linux的运行级别
开机流程
修改运行级别:vim /etc/inittab
- 给每个服务的各个运行级别设置自启动/关闭:
chkconfig --list | grep 服务名
- 查看某个服务:
chkconfig 服务名 --list
- 设置某个服务开机开关:
chkconfig --level 5 服务名 on/off
找回丢失密码
CentOS 7.xx不同
开机->在引导时输入回车键~>看到-一个界面输入e->看到一个新的界面,选中第二行(编辑内核)在输入e-> 在这行最后输入 1,再输入回车键->再次输入b,这时就会进入到单用户模式。
这时,我们就进入到单用户模式,使用passwd指令来修改root密码。
组管理和权限管理(重难点)
- 修改文件所有者:
chown 用户名 文件名
修改文件所在组:chgrp [-R] 组名 文件名
(-R:如果是目录则使其下所有子文件或目录递归生效)
修改用户的所有者和所有组:chown newowner:newgroup file
修改用户所在组:usermod -g 组名 用户名
修改该用户登陆的初始目录:usermod -d 目录名 用户名
权限的基本介绍
ls -l 中显示的内容如下:
-rwxrw-r--1 root root 1213 Feb 2 09:39 abc
0-9位说明
1)第0位确定文件类型(d,-,1,c,b)
2)第1-3 位确定所有者(该文件的所有者)拥有该文件的权限。—User
3)第4-6位确定所属组(同用户组的)拥有该文件的权限,–Group.
4)第7-9位确定其他用户拥有该文件的权限—Other
rwx权限
- rwx 作用到文件
1)[r]代表可读(read):可以读取,查看
2)[w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
3)[x]代表可执行(execute):可以被执行 - rwx 作用到目录
1)[r]代表可读(read):可以读取,ls 查看目录内容
2)[w]代表可写(write):可以修改,目录内创建+删除+重命名目录
3)[x]代表可执行(execute):可以进入该目录
修改权限-chmod
基本说明:通过chmod指令,可以修改文件或者目录的权限10.10.2
第一种方式:+、-、=变更权限。u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
1)chmod u=rwx,g=rx,o=x 文件目录名
2)chmod o+w 文件目录名
(给其他组添加写)
3)chmod a-x文件目录名
(给所有人减少执行)
第二种方式:通过数字变更权限规则:r=4 w=2 x=1,rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于chmod 751 文件目录名
任务调度
crontab [选项]
选项 | 作用 |
---|---|
-e | 编辑crontab定时任务 |
-l | 查看crontab任务 |
-r | 删除当前用户所有的crontab任务 |
service crond restart | 重启任务调度 |
设置任务调度文件:
/etc/crontab 设置个人任务调度。
执行 crontab –e 命令。
接着输入任务到调度文件
如:*/1 * * * * ls –l /etc/ > /tmp/to.txt
意思说每小时的每分钟执行 ls –l /etc/ > /tmp/to.txt 命令
Linux磁盘分区、挂载
1)mbr 分区: 1.最多支持四个主分区 2.系统只能安装在主分区 3.扩展分区要占一个主分区 4.MBR 最大只支持 2TB,但拥有最好的兼容性
2)gtp 分区: 1.支持无限多个主分区(但操作系统可能限制,比如 windows 下最多 128 个分区) 2.最大支持 18EB 的大容量(1EB=1024 PB,1PB=1024 TB ) 3.windows7 64 位以后支持 gtp
主分区,逻辑分区
lsblk -f
查看分区
如何添加一块硬盘
- 虚拟机添加硬盘
- 分区
fdisk /dev/sdb
- 格式化
mkfs -t ext4 /dev/sdb1
- 挂载 先创建一个 /home/newdisk , 挂载
mount /dev/sdb1 /home/newdisk
- 设置可以自动挂载(永久挂载,当你重启系统,仍然可以挂载到 /home/newdisk) 。
vim /etc/fstab
添加:/dev/sdb1 /home/newdisk ext4 defaults 0 0
具体步骤
- 虚拟机增加硬盘步骤 1
在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,至到完成。然后重启系统(才能识别)!
- 虚拟机增加硬盘步骤 2
分区命令 fdisk /dev/sdb
开始对/sdb 分区
•m 显示命令列表
•p 显示磁盘分区 同 fdisk –l
•n 新增分区
•d 删除分区
•w 写入并退出
说明: 开始分区后输入 n,新增分区,然后选择 p ,分区类型为主分区。两次回车默认剩余全
部空间。最后输入 w 写入分区并退出,若不保存退出输入 q。
- 虚拟机增加硬盘步骤 3
格式化磁盘
分区命令:mkfs -t ext4 /dev/sdb1
其中 ext4 是分区类型 - 虚拟机增加硬盘步骤 4
挂载: 将一个分区与一个目录联系起来,
•mount 设备名称 挂载目录
•例如:mount /dev/sdb1 /newdisk
•umount 设备名称 或者 挂载目录
•例如:umount /dev/sdb1 或者 umount /newdisk
- 虚拟机增加硬盘步骤 5
永久挂载: 通过修改/etc/fstab 实现挂载添加完成后 执行 mount –a 即刻生效
Java的环境搭建
jdk,tomcat,mysql,eclipse
jdk 版本 1.8.0_144
- 安装、解压jdk https://www.oracle.com/java/technologies/downloads/#java8
- 配置环境变量:
vim /etc/profile
, - 在最后插入
export JAVA_HOME=/usr/lib/jvm/jdk-8u301-linux-x64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
- 退出用户,重新登陆生效
Tomcat-9.0.40
http://tomcat.apache.org/download-90.cgi
- 安装、解压Tomcat
- 运行 bin 下面的 startup.sh:
./startup.sh
,本地可访问 - 开放端口:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
或者关闭防火墙service firewalld stop
–zone=public:表示作用域为公共的;
–add-port=8080/tcp:添加tcp协议的端口8080;
–permanent:永久生效,如果没有此参数,则只能维持当前服务生命周期内,重新启动后失效;
Mysql-8.0.22-el7-x86_64
-
安装地址:https://dev.mysql.com/downloads/mysql/
参考:https://blog.csdn.net/weixin_44044929/article/details/101055453
https://www.cnblogs.com/Zhan-W/p/13162917.html(更详细) -
mysql 8 以上 第一次登录需要修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES; #立即生效,这个最后执行。要执行
-
查看当前服务:
netstat -anp | less
-
全局mysql:
vim /etc/profile
,添加mysql的安装路径
退重新登陆或刷新文件:source /etc/profile
即可
mysql无法输入中文字符时,修改/etc/my.cnf,将 [mysql] 和 [client] 的
default-character-set=utf8 注释掉即可。。
Maven 安装
https://maven.apache.org/download.cgi
解压,vim /etc/profile 文件,添加以下
export MAVEN_HOME=/opt/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin
通过 source /etc/profile 让文件立刻生效
mvn -v 查看
git 安装
yum -y install git
安装docker
参考文档:
https://help.aliyun.com/document_detail/60742.html?spm=a2c4g.11174283.6.548.24c14541ssYFIZ
- 第一步:安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
- 第二步:添加软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 第三步:更新并安装Docker-CE
yum makecache fast
yum -y install docker-ce
- 第四步:开启Docker服务
service docker start
- 第五步、测试是否安装成功
docker -v
Java 并发编程的艺术
- 使用
vmstat
可以测量上下文切换的次数
CS(Content Switch)表示上下文切换的次数 volatile
有volatile变量修饰的共享变量进行写操作的时候会多出第二行汇编代码,通过查IA-32架构软件开发者手册可知,Lock前缀的指令在多核处理器下会引发了两件事情。
1)将当前处理器缓存行的数据写回到系统内存。
2)这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效
- synchronize
synchronized用的锁是存在Java对象头里的。如果对象是数组类型,则虚拟机用3个字宽(Word)存储对象头,如果对象是非数组类型,则用2字宽存储对象头。在32位虚拟机中,1字宽等于4字节,即32bit
-
偏向锁
-
轻量锁
-
锁的优缺点的对比
-
处理器如何实现原子操作
第一个机制是通过总线锁保证原子性
第二个机制是通过缓存锁定来保证原子性
- CAS实现原子操作的三大问题
1)ABA问题
2)循环时间长开销大
3)只能保证一个共享变量的原子操作
-
在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递
-
指令重排序
-
JMM属于语言级的内存模型,它确保在不同的编译器和不同的处理器平台之上,通过禁止特定类型的编译器重排序和处理器重排序,为程序员提供一致的内存可见性保证