1、Linux-服务+网络端口号
服务:一般在后台运行
centos6有7种运行级别,系统启动时会按照配置的一个运行级别启动,然后使用init.d再根据此运行级别去判断服务是否在此级别中启动。到centos7时只保留了3和5
1.1 在centos6中如何管理服务(centos7也兼容6的服务管理命令)
1- chkconfig --list :查看服务运行级别
2- service firewalld status 查询服务的状态
3- service firewalld start 启动服务
4- service firewalld stop 停止服务
防火墙,端口号一般都被防火墙过滤掉,只暴露22端口号
5- ll /etc/init.d/ 查看init进程管理的服务文件夹
6- chkconfig --level 2 network off 设置指定的服务在指定运行级别关闭
7- chkconfig --level 2 network on 设置指定服务在指定运行级别启动
1.2 在centos7中管理服务(centos7天字第一号进程是systemd,只有3和5两个运行级别)
1- systemctl list-unit-files 查看所有的服务列表
ctrl+c 退出列表
查询指定的服务:systemctl list-unit-files |grep firewalld
2- systemctl status 服务名 :查看服务器的状态
3- systemctl start 服务名 :启动指定服务
4- systemctl stop 服务名:停止服务
5- systemctl diable 服务名:设置服务开机禁止启动
6- systemctl enable 服务名: 设置服务开机自启
7- systemctl get-default : 查看当前系统的运行级别
8- systemctl set-default multi-user.target/graphical.target: 设置系统的运行级别
1.3 网络端口号查询
netstat -anp | grep 端口号
将springboot项目上传到虚拟机的/opt目录下
java -jar xxxx.jar
主机浏览器访问:http://虚拟机ip地址:8080/hello
如果虚拟机控制台没有报错,虚拟机防火墙将请求拦截了
netstat -anp|grep 8080
kill -9 1490 :杀死占用端口号的进程
2、Linux-用户权限命令(了解)
id 用户名: 查看用户
useradd 用户名:新增用户
通过useradd的方式添加的用户都是普通用户,所有的用户的家目录都会创建在/home目录下
passwd 用户名:设置密码
whoami: 查看当前正在使用系统的用户
who am i :查看登录的用户
su 用户名: 切换用户
从超级管理员切换到普通用户不用输入密码
从普通用户到root需要输入密码
userdel -r 用户名:删除用户和他的/home目录下的家目录文件
groupadd 组名: 创建用户组
usermod -g 组名 用户名: 将用户添加到组中
useradd -g 组名 新用户名:新创建用户并分配到组中
groupdel 组名:删除组
groupmod -n 新组名 旧组名:修改组名
/etc/passwd :存储用户的信息
/etc/shadow:存储用户的影子信息[密码]
/etc/group :组
权限:
列表中的第一列代表文件类型权限
代表权限的第一列除了.,剩下10位
第一位:代表文件类型 d代表文件夹,-代表文件, l代表链接
第2~4位: u 代表文件拥有者的权限
rwx: 如果使用-代表其中一个,就表示没有这个权限(r-x 可读可执行 不能写)
r:read 读权限 , w:write写权限 , x:excute执行权限
第5~7位: g 代表文件拥有者所在组的成员拥有的权限
第8~10位:o 代表和文件拥有者不再同一个组的其他成员的权限
修改文件夹的权限:
第一种(不推荐):直接使用 rwx表示权限进行设置
chmod g=rx laohan :添加权限
chmod g-rx laohan:删除laohan文件夹的组的权限
第二种(推荐):将权限使用数字描述
r=4 w=2 x=1
chmod 750 laohan : 第一组权限全部设置,第二组权限设置rx,第三组没有权限
第三列代表文件的拥有者
第四列代表文件拥有者所在的组
chgrp 组名 文件夹名:修改文件夹所在组
chown -R 用户名 文件夹名:递归修改文件夹和他内部所有文件的拥有者
3、Linux-安装卸载命令
3.1 本地安装
rpm -qa |grep -i firewalld :查询已安装的程序,并忽略大小写筛选结果
rpm -e 安装包名: 卸载已安装的程序
rpm -ivh 安装包名: 安装程序
安装操作系统时,系统压缩包自带了非常多的应用,可以在光驱加载的ISO镜像中找到火狐浏览器的安装包(/run/media/root/CentOS 7 x86_64/Packages)
cd /run/media/root/CentOS 7 x86_64/Packages
rpm -ivh firefox-52.2.0-2.el7.centos.x86_64.rpm
3.2 远程联网安装
centos提供了中央软件库,可以通过yum命令远程连接下载程序自动安装
yum list |grep -i firefox: 联网搜索指定的程序安装包
yum install firefox.x86_64 : 安装指定的程序
4、Linux-开发环境搭建
4.1 jdk
1、拷贝课件中的已经下载好的jdk到虚拟机的/opt目录下
2、切换到opt目录下,解压缩压缩包
tar -zxvf 压缩包名 :解压缩所有的压缩包
jdk解压可用,无需安装,但是jdk的命令在bin目录下[/opt/jdk1.8.0_152/bin]
在控制台执行jdk的命令时,系统默认从path环境变量中查找对应的命令,我们自己解压的jdk没有配置到环境变量中,所以不能使用
3、将自己解压的jdk的bin目录配置到linux系统的环境变量中
vim /etc/profile
在文件最后:shift+g
JAVA_HOME=/opt/jdk1.8.0_152
PATH=/opt/jdk1.8.0_152/bin:$PATH
exportJAVA_HOME PATH
source /etc/profile:重新加载环境变量
==== 启动tomcat时
4.2 mysql
1、检查是否存在已安装的mysql
[root@atguigu bin]# rpm -qa|grep -i maria
mariadb-libs-5.5.56-2.el7.x86_64
2、卸载已安装的mysql[mysql安装时会安装其他的多个依赖]
rpm -e --nodeps mariadb-libs
3、检查mysql以后要使用的文件夹的权限[/tmp]
chmod 777 /tmp
4、安装mysql
cd /opt/MySQL/
rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
5、检查是否安装成功
rpm -qa|grep -i mysql
6、使用mysql客户端连接mysql服务端
如果报以下错误,表示mysql服务没有启动
systemctl start mysql
ps -aux|grep -i mysql
//连接mysql,初始化安装mysql没有密码
mysql -hlocalhost -P3306 -uroot -p
7、修改mysql编码
//连接mysql后,查看mysql的字符编码
show variables like '%char%';
//mysql默认编码为latin1,需要修改为UTF-8
//mysql安装后,配置文件保存在 /usr/share/mysql/my-huge.cnf
linuxmysql启动时,优先在/etc下查找my.cnf配置文件作为mysql的配置,如果/etc下没有此文件,mysql再到/usr/share/mysql/my-huge.cnf.
//将my-huge配置文件拷贝到/etc下一份,并改名为my.cnf
cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
//修改/etc/my.cnf,设置mysql的编码格式为utf-8
在17行[client]下添加
default-character-set=utf8
在26行[mysqld]下添加
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
在138行[mysql]添加
default-character-set=utf8
保存退出
重启mysql服务加载修改后的配置文件
service mysql restart
mysql -uroot -p
8、修改mysql密码
mysql5.5 密码存在mysql 库中的user表中
mysql保存用户信息时存在mysql.user表中
host代表ip地址,user代表账号,password代表密码,xxx_priv 代表权限
访问mysql时,mysql识别用户是通过 登录账号+登录时的ip地址组合判断账号
root@localhost
删除localhost root以外的其他用户: delete语句+条件删除
修改用户密码:
select host ,user,password , select_priv from mysql.user;
update mysql.user set password = password('123123');
或者 set password=password('123456');
修改后需要重启mysql服务: service mysql restart
9、远程连接mysql[主机使用sqlyog去连接虚拟机中的mysql]
原因: mysql user表中,只有localhost地址才可以使用root用户连接mysql服务
修改user表中的root@localhost用户,将host修改为%(通配符,统配所用)
重启mysql,再次使用sqlyog远程连接
10、安装web测试工具 ab
使用yum安装: yum install -y httpd-tools
使用:
ab --help
ab -n8000 -c800 http://192.168.1.130:8080/hello
5、Nosql数据库简介
6、redis简介
redis之前的版本只支持linux
只有linux才能最优化的使用redis
7、redis安装+启动停止
7.1 将redis安装包拷贝到 虚拟机的/opt目录下
7.2 解压缩redis的压缩包:tar -zxvf redis.tar.gz
7.3 查看redis的文件夹发现解压之后的src是redis的源码,需要先编译才能安装
redis是使用c语言开发的,需要使用c语言的编译命令
在redis目录下执行:make命令时,报错,原因:系统中没有安装c语言的环境
1、安装c语言和c++的语言环境
yum install -y gcc
yum install -y gcc-c++
gcc -v
g++ -v
2、删除上次make产生的错误文件
make distclean
3、再执行make进行编译
4、再执行安装命令: make install
5、如果执行 redis-server 能够看到redis的启动界面,就代表redis安装成功
ctrl+c 可以关闭redis-server
redis安装之后,命令存放在usr/local/bin下,命令可以在任意的地方执行
redis-server :redis服务端启动命令
redis-cli :redis客户端启动的命令
8、修改redis为后台启动
redis默认前台启动(阻塞启动)
8.1 在/下创建存放redis配置文件的文件夹
mkdir /myredis
8.2 拷贝redis的配置文件到/myredis目录下
cp /opt/redis-4.0.0/redis.conf /myredis/
8.3 编辑 /myredis/redis.conf 设置后台启动
vim /myredis/redis.conf
136行设置daemonize 改为yes
保存退出
8.4 指定配置文件启动redis服务
redis-server /myredis/redis.conf
服务端默认端口号:6379
8.5 redis客户端连接redis
redis-cli 默认连接本机的6379端口号的redis服务端
ctrl+c退出redis-cli连接
redis-cli -h 127.0.0.1 -p 6379 :连接指定ip指定端口的redis服务
8.6 关闭redis服务
在redis-cli的连接中,ctrl+c只会关闭redis客户端
方式1: 在linux命令中执行 redis-cli -h 127.0.0.1 -p 6379 shutdown
方式2:如果在redis-cli的连接中 shutdown
方式3: 可以通过redis进程id杀死进程 kill 进程id
8.7 redis简单使用+特点
redis默认有16个库。一般使用默认的索引为0的库:select 0
dbsize :查看redis存储数据的条数
flushdb : 清空当前库(慎用)
flushall: 清空redis所有的库
内存数据库存储数据都是在内存中操作,内存操作速度非常快,每个命令执行时的时间短
Redis是单线程+多路IO复用技术
Memcached 是串行+多线程的方式
redis和Memcached三点不同: 支持多数据类型,支持持久化,单线程+多路IO复用
9、redis-key操作
1、查看所有的键:keys *
2、判断某个键是否存在: exists key
返回1代表存在,0代表不存在
3、查看键对应值的类型: type key
4、删除指定的键(键在值在,键光值亡): del key
5、给键设置过期时间: expire key seconds
6、查看键的过期时间: ttl key
返回>=0的数字,代表剩余数字对应的秒数
返回-2 ,代表键已过期被删除
返回-1 ,代表键永不过期
10、redis-五大数据类型-string
redis最常使用的数据类型就是string类型: java对象可以转为字符串,图片也可以转为图片
redis中string类型的大小最大可以为512m,redis的字符串二进制安全
1、向redis中存入string键值对:set k v
如果键相同,后设置的值会覆盖之前的
2、获取redis中指定键的值: get k
3、给redis中指定键的值追加内容: append k appendStr
4、获取键的值的长度: strlen key
5、当键不存在时才设置键值对: setnx k v
分布式锁
6、设置值自增1 : incr k
如果k的值已存在,必须时整形才可以自增
如果k不存在,默认在0的基础上+1
应用场景: 计数器、密码今天输错的次数、秒杀库存自减
7、设置值自减1 : decr k
8、自定义步长增减: incrby k count , decrby k count
9、设置键值对同时设置过期时间: setex key secods val
使用场景: 保存手机验证码
10、批量操作
1、批量存入多个键值对: mset k v k v ....
2、批量获取多个键的值: mget k1 k2 k3...
3、批量设置键值对当键不存在时: msetnx k1 v1 k2 v2...
当有一个键如果存在时,所有的数据都保存失败
所有的键都不存在时,才可以存储成功
redis命令具有原子性,命令执行时,必须成功或者失败
java中的i++是否是原子操作?
不是,执行时,分为三步:先获取i的变量的值,执行i++操作,将计算后的结果设置到内存中
i=0;两个线程分别对i进行++100次,值是多少?2~200
11、获取值指定范围内的内容:getrange k start end
获取时,start和end索引都包含
end如果是-1 代表获取到最后
12、替换字符串指定范围的内容:setrange k start replacestr
13、设置值并返回被替换的内容:getset k newVal