sync #将数据由内存同步到硬盘中
shutdown #关机指令,
shutdown -h 10 # 10分钟后关机
shutdown -h 20:25 #在当天20:25关机
shutdown -h now #立马关机
shutdown -r now #系统立马重启
reboot #重启
halt #关闭系统
logout #注销用户,退出登录shell
在对某个指令不熟悉时,可通过Linux提供的帮助指令来了解指令的使用方法。
再操作命令时,遇到某个命令记不太清了,也可通过 Tab 命令 自动补齐或给出对应的命令提示选择
man # 获得帮助信息
man [命令或配置文件]
man ls # 查看ls命令的帮助信息
help # 获得shell内置命令的帮助信息
help [命令]
date #显示当前时间
date +%Y #显示当前年份
date +%m #显示当前月份
date +%d #显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S #显示年月日时分秒
date -s [字符串时间] #设置日期
cal #查看日历指令
cal [选项] #不加选项显示本月日历
find [搜索范围] [选项]
find /home -name t.txt #按名字查找
find /opt -user 用户名 #按文件的 拥有者查找
find / -size +20M #从根目录 按 文件大小 来查找
locate 文件名 #搜索文件
grep #过滤查找
| #管道符,表示将前一个命令的处理结果输出传递给后面的命令处理。
grep [选项] 查找内容 源文件
-n #显示匹配行及行号
-i #忽略字母大小写
1、一切皆文件
2、根目录 /
绝对路径:全称
相对路径:
cd #切换目录
./ #当前目录
cd ../ #返回上一级目录
# ls(列出目录!)
ls -a # all,查看全部文件,包括隐藏文件
ls -l # 列出所有的文件,包含文件的属性和权限,没有隐藏文件
pwd #显示当前所在目录
mkdir # 创建一个目录
mkdir -p #创建多级目录
touch #创建文件
rmdir #删除一个目录
rmdir -p #删除多级目录
rmdir -f #忽略不存在的文件,不会出现警告,强制删除!
rmdir -r #递归删除目录
rmdir -i #互动,删除询问是否删除
rmdir -rf / #系统中所有的文件就被删除了,删库跑路
rmdir 仅能删除空的目录,如果下面存在文件,需要先删除文件,递归删除多个目录 加 参数 -p
cp #复制文件或目录
cp 原来的地方 新的地址
mv #移动文件 或目录 、 重命名文件
mv -f #强制
mv -u #只替换已经更新过的文件
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中第一个字符代表这个文件是目录、文件 或 链接文件 等等(如上图):
其后的字符串中,以三个为一组,且均为【rwx】的三个组合,其中【r】代表可读(read);【w】代表可写(write);【x】代表可执行(execute)。
注意:这三个权限的位置不会改变,如果没有权限,就会出现减号【-】
每个文件的属性由左边第一部分的10个字符来确定:
chgrp #更改文件属组
chgrp [-R] 属组名 文件名 -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
chown # 更改文件属主,也可以同时更改文件属组
chown [-R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
chmod #更改文件9个属性
chmod [-R] xyz 文件或目录
Linux文件属性有两种设置方法,一种是数字、一种是符合。
Linux文件的基本权限有9个,分别是 owner/group/others三种身份各有自己的read/write/execute权限,
各权限的数字代表: r:4 w:2 x:1
可读可写不可执行 : rw- 4+2+0=6
可读可写可执行 :rwx 4+2+1=7
chomd 777 :文件赋予 所有用户 可读可写可执行
cat #由第一行开始显示文件内容,用来读文章,或读取配置文件,都用cat
tac #从最后一行开始显示,tac是cat的倒写
nl #显示的时候,顺道输出行号!
more #一页一页的显示文件内容 (空格代表翻页,enter代表向下看一行, :f 行号)
less #与more相似,可往前翻页 (空格代表下翻页,enter代表向下看一行, :f 行号, 上下键代表上下翻动页面,退出 q命令)
# 【/字符】:向下查询要查询的字符串; 【?字符】:向上查询要查询的字符串
head #只看头几行
head -n #显示几行 head -n 5 ifcfg-eth0/文件名
tail #只看尾部几行
grep abc test.txt #在test.txt文件中查找 abc 关键字
grep ^abc test.txt #在test.txt文件中查找以 abc 开头的关键字
grep [0-9] test.txt #显示文件中所有包含数字对的行
sed -n '/abc/p' test.txt #查看只包含关键词“abc”的行
sed -n '1,5p;5q' test.txt #查看从第一行到第五行的内容
sed -n '5p;5q' test.txt #查看第五行内容
sed '/^$/d' t.txt #删除t.txt文件中的所有空白行
sed -e '8d' t.txt #删除文件中的第8行
sed 's/eee/ddd/g' t.txt #将文件中的 eee 替换成 ddd
sed -e 's/*$//' t.txt #删除每一行最后的空白字符
# sed 默认不会真正修改原文件的内容
paste file1 file2 #合并两个文件内容
sort file1 file2 #排序两个文件内容
comm -1 file1 file2 #比较两个文件,去除file1所含内容
-2 #比较两个文件,去除file2所含内容
-3 #比较两个文件,去除两文件共有内容
网络配置目录 : cd /etc/sysconfig/network-scripts
ifconfig : 查看网络配置
Linux的链接分为两种:硬链接、软硬件
ln #创建链接
touch #创建文件
echo # 输入字符串,也可以输入到文件中 echo "i love you" >>f1
Vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富。vi是老式的字符处理器。
在Linux中,必须会Vim (查看内容、编辑内容、保存内容)
三种使用模式:
作用:
命令模式: 用户刚刚启动vi/vim,便进入了命令模式
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符,比如:
i # 切换到输入模式,以输入字符
x # 删除当前光标所在处字符
: # 切换到底线模式命令,以在最低一行输入命令
命令模式只有一些最基本的命令
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式
输入模式:在命令模式下,按下i,就切换到输入模式
字符按键及Shift组合 # 输入字符
ENTER # 回车键、换行
BACKSPACE # 退格键,删除光标 前 一个字符
DEL #删除键、删除光标 后 一个字符
方向键 #在文本中移动光标
HOME/END #移动光标到行首/行尾
Page Up/Page Down #上/下翻页
Insert #切换光标为输入/替换模式,光标将变成竖线/下划线
ESC #退出输入模式,切换到命令模式
底线模式:在命令模式下按 : (英文冒号),就进入了底线模式,光标就移动到了最底下,就可以在这里输入一些底线命令
q # 退出程序
w # 保存文件
wq # 保存并退出
w! # 文件属性为只读时,强制写入
q! # 强制离开不存储刚修改过的文件
ZZ # 若未修改,不存储离开;若被修改过,则存储后离开
set nu # 设置行号
set nonu #取消行号
新建或编辑文件,按 i 进入编辑模式,编写内容,编写完后 按 esc 退出编辑模式,之后按 :进入底线模式 wq 保存退出!
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号,一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面可以帮助用户组织文件,并为用户提供安全性保护
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号管理,要完成的工作主要有:
useradd #添加用户
useradd -选项 用户名
-m #自动创建这个用户的主目录
-c #指定一段注释性描述
-d #指定用户主目录,
-g 用户组 #指定用户所属的附加组
-G 用户组
-s #指定用户的登录shell
-u 用户号, #指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号
本质:Linux中一切皆为文件,这里的添加就是往某个文件中 写入用户信息 /etc/passwd
userdel #删除用户
userdel -r 用户名 #删除用户时将他的目录页一并删掉!
usermod #修改用户
su # 切换用户
su -root # 在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加 【-】
#表示超级用户,即 root用户
$表示普通用户
exit #退出当前用户
hostname #查看主机名
passwd #修改密码
passwd -l 用户名 #锁定用户,锁定之后这个用户就不能登录了
passwd -d 用户名 #没有密码不能登录
属主、数组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发、测试、运维、root)。不同用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组管理涉及用户组的添加、删除、修改。组的增加、删除、修改实际上是对 /etc/group 文件的更新。
groupadd #创建一个用户组
groupadd -g #指定id
创建完用户组后可以得到一个组的id,这个id是可以指定的,若不指定则自增。
groupdel #删除用户组
groupmod #修改用户组的权限信息和名字
groupmod -g -n
df # 列出文件系统整体的磁盘使用量
du # 检查磁盘空间的使用量
du -sm /* #检查根目录下每个目录所占用的容量
mount #挂载
mount /dev/kuang /mnt/kuang #将 外部设备kuang 挂载到mnt 目录下,来实现访问!
umount #卸载
umount -f #强制卸载
ps #查看当前系统中正在执行的各种进程信息
ps -xx :
-a #显示当前终端运行的所有的进程信息
-u #以用户的信息显示进程
-x #显示后台运行进程的参数!
ps -aux #查看所有的进程
ps -aux|grep mysql #查看MySQL相关的进程
ps -aux|grep redis #查看redis相关的进程
| #在Linux中表示 管道符
grep #查找文件中符合条件的字符串!
ps -ef #可以查看到父进程的信息
ps -ef|grep mysql
进程树
pstree -pu #查看目录树结构
-p #显示父id
-u #显示用户组
kill #结束进程
kill -9 进程id #强制终止
top #查看动态/执行进程状态(类似于任务管理器)
PID to kill 进程ID #要杀死进程ID
netstat -anp #查看系统网络情况
-an #按一定顺序排列输出
-p #显示哪个进程在调用
netstat -anp |grep mysql
gzip #用于压缩文件
gzip 文件 #只能将文件压缩为 *.gz文件 不保留原来的文件
gunzip #用于解压缩
gunzip 文件.gz #解压文件
zip #压缩文件
zip [选项] xxx.zip #将要压缩的内容 (文件或目录)
-r #递归压缩,即压缩目录
unzip #解压 项目打包常用
-d<目录> #指定压缩后文件的存放目录
tar # 打包指令,最后打包后的文件是 .tar.gz 文件
tar [选项] xxx.tar.gz 打包内容 #打包目录,压缩后的文件格式是.tar.gz
-c #产生.tar 打包文件
tar -zcvf myhome.tar.gz /home/ #将home下的所有目录文件打包
tar -zxvf a.tar.gz #将 a.tar.gz 解压到当前目录
tar -zxvf a.tar.gz -C /home/ #将文件解压到 home目录
安装软件一般有三种方式: - rpm -解压缩 -yum在线安装
rpm -qa | grep firefox #查询已安装的 rpm列表可用于查询是否已经安装
rpm -q 软件包名 #查询软件包是否已经安装
rpm -qi 软件包名 # 查询软件包信息
rpm -e 软件包名[firefox] # 卸载rpm包
rpm -ivh #安装
解压缩:下载 .tar.gz 软件安装文件,解压即可
yum在线安装:一个shell前端软件包管理器,基于RPM包管理,能从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次性安装所有的依赖包。前提是必须联网
yum list|grep xx 软件列表 #查询yum服务器是否有需要安装的软件
yum install xxx #下载安装
JDK安装运用 rpm 方式安装:
1、下载rpm包,并上传到Linux
jdk-8u221-linux-x64.rpm
2、查询是否已经安装jdk
java -version #查看Java版本
rpm -qa | grep jdk #查询已安装的Java rpm列表
若已经安装,需要卸载
rpm -e --nodeps jdk1.8-1.8.0_221-fcs.x86_64 #强制卸载
卸载完后,即可安装jdk
3、安装Java环境
rpm -ivh jdk-8u221-linux-x64.rpm
4、配置环境变量: /etc/profile
vim /etc/profile
在文件最后添加一下配置:
JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
CLASSPATH=%JAVA_HOME%lib;%JAVA_HOME%/jre/lib
PATH=$JAVA_HOME/bin;$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
#跟windows配置一样配置jdk、jre
注意: 再次连接(重新连接服务器)后发现输入Linux命令如 ls,vim等出现错误,形如:-bash: ls: command not found。 解决办法是:先执行以下命令
export PATH=/bin:/usr/bin:$PATH
然后修改jdk的配置为
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export PATH CLASSPATH JAVA_HOME JRE_HOME
最后执行配置文件
source /etc/profile
MySQL安装会用到三种方式,可先安装tomcat,了解相关操作:
1、下载mysql的 x.rpm-bundle.tar 包,并上传到Linux
mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar
2、查看是否已经安装mysql
rpm -qa|grep mysql
若安装需卸载
rpm -e --nodeps mysql-libs-....
3、解压上传的压缩文件
tar -xvf mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar #注意不是.tar.gz文件,解压应该用 -xvf
解压后会有多个文件,实际只需要服务端和客户端两个:
mysql-community-client-5.7.31-1.el7.x86_64.rpm #客户端
mysql-community-server-5.7.31-1.el7.x86_64.rpm #服务端
4、安装MySQL的服务端
rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm
5、安装MySQL的客户端
rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm
在这会发现安装服务端和客户端都会报一些错误,导致无法安装成功
mysql-community-client(x86-64) >= 5.7.9 is needed by mysql-community-server-5.7.31-1.el7.x86_64
mysql-community-common(x86-64) = 5.7.31-1.el7 is needed by mysql-community-server-5.7.31-1.el7.x86_64
该错误说明,安装服务端需要先安装客户端,且还需要安装mysql-community-common-5.7.31-1.el7.x86_64.rpm
根据所缺安装mysql-community-common-5.7.31-1.el7.x86_64.rpm 出现警告,出现一些文件之类的,看似安装成功,实则没有
安装客户端,报错提示需先安装mysql-community-libs-5.7.31-1.el7.x86_64.rpm
安装mysql-community-libs-5.7.31-1.el7.x86_64.rpm报错 :
mysql-community-common(x86-64) >= 5.7.9 is needed by mysql-community-libs-5.7.31-1.el7.x86_64
mariadb-libs is obsoleted by mysql-community-libs-5.7.31-1.el7.x86_64
该错误说明:需要先安装common,且mysql-community-libs与mariadb-libs冲突
解决办法,先卸载mariadb-libs,然后再安装其他
以上都安装好后,最后安装 服务端,出现错误:
libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.31-1.el7.x86_64
libnuma.so.1(libnuma_1.1)(64bit) is needed by mysql-community-server-5.7.31-1.el7.x86_64
libnuma.so.1(libnuma_1.2)(64bit) is needed by mysql-community-server-5.7.31-1.el7.x86_64
该错误指的是,这里缺少numactl,则需先安装numactl
之后再安装服务端,安装成功
最后整理可知,错误提示缺少什么就先装什么,与什么相冲突,就删除什么
#安装MySQL5.7步骤整理如下:
4、卸载mariadb-libs
rpm -e --nodeps mariadb-libs-1:5.5.68-1.el7.x86_64 #mariadb-libs文件名可在安装common的警告信息中找到
5、安装common
rpm -ivh mysql-community-common-5.7.31-1.el7.x86_64.rpm
6、安装libs
rpm -ivh mysql-community-libs-5.7.31-1.el7.x86_64.rpm
7、安装客户端client
rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm
# 以上文件在解压的MySQL软件包中存在,用rpm方式安装即可
# libnuma在解压的软件包中没有,则使用yum方式安装
8、yum方式安装numactl
yum -y install numactl
9、安装服务端
rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm
# 此时MySQL安装成功,还需进行以下配置
10、查看mysql服务状态
service mysqld status
11、启动mysql服务
systemctl start mysqld.service 或 service mysqld start
12、查看当前MySQL登录密码
grep "password" /var/log/mysqld.log
13、登录mysql
mysql -u root -p
14、修改密码
set password = password('root');
#这里会提示密码设置不规范,不安全,建议密码大于8位,字母,数字,特殊符号混合,要有大写字母,尝试即可
# 此时已经可以在Linux中登录MySQL,正常使用MySQL了
# 如果还需要让外网访问,跟tomcat一样,需要让防火墙放行端口
15、退出登录mysql
exit 或 quit
16、配置mysql运行其他用户访问
#修改mysql库的user表,将host项,从localhost改为%。
#%这里表示的是允许任意host访问,如果只允许某一个ip访问,则可改为相应的ip
#比如可以将localhost改为192.168.1.123,
#这表示只允许局域网的192.168.1.123这个ip远程访问mysql。
mysql>use mysql;
mysql> update user set host = '%' where user = 'root';
mysql>select host, user from user;
mysql> flush privileges; # 刷新MySQL的系统权限相关表
或者
(建议使用以下方法,此操作在原来的基础上添加授权,不会改变原有的数据)
# 设置远程访问(使用root密码):
grant all privileges on *.* to 'root'@'%' identified by 'root';
grant all privileges on 数据库名.表名 to '用户名'@'主机' identified by '密码'
# 星号*代表所有的数据库,数据库表;
# %代表允许任意host(主机)访问;
# 密码尽量复杂,mysql可能不允许太简单的密码
# 若指向指定某一ip主机访问,可使用以下设置
grant all privileges on *.* to 'root'@'192.168.1.123' identified by 'root';
# 此时可以在ip为192.168.1.123的主机上,以用户名和密码为root连接
flush privileges; # 可先查询一下user表是否有刚授权的记录,若没有,执行该语句刷新
17、防火墙开发端口
# 可先在登录MySQL的时候,查询MySQL的端口号
show global variables like 'port'; #查看MySQL的端口号
firewall-cmd --zone=public --add-port=3306/tcp --permanent #开端口命令
systemctl restart firewalld.service #重启防火墙
firewall-cmd --list-ports #查看端口信息,查看3306端口是否被放行
tomcat采用解压 .tar.gz 文件方式:
1、下载tomcat 的tar.gz包,并上传到Linux
apache-tomcat-9.0.50.tar.gz
2、解压这个文件
tar -zxvf apache-tomcat-9.0.50.tar.gz
3、启动tomcat测试!
./startup.sh #执行 #若未配置环境变量需要进入到tomcat的bin目录下
./shutdown.sh #停止
启动后,此时只能在Linux本地访问tomcat,外网如windows本机电脑仍不能访问
需让防火墙放行该端口号
4、防火墙放行端口号
firewall-cmd --state #查看防火墙状态(是否开启)
# 若为 not running ,则
systemctl start firewalld.service #开启防火墙
firewall-cmd --list-ports #查看端口信息,查看8080端口是否被放行
#若未放行,则
firewall-cmd --zone=public --add-port=8080/tcp --permanent #开端口命令
systemctl restart firewalld.service #重启防火墙
再次查看端口信息可见8080端口已被开放,此时在外网可以访问
systemctl status firewalld #查看firewall服务状态
service firewalld start #开启firewall服务
service firewalld restart #重启firewall服务
service firewalld stop #关闭firewall服务
chkconfig --list #查看服务
chkconfig --list | grep mysql #查看MySQL服务
chkconfig iptables on #在所有运行级别下开启防火墙
chkconfig iptables off #在所有运行级别下关闭防火墙
#查看防火墙规则
firewall-cmd --list-all #查看全部信息
firewall-cmd --list-ports #只查看端口信息
firewall-cmd --state #查看防火墙状态(是否开启)
#开启端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent #开端口命令
命令含义:
--zone #作用域
--add-port=8080/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
firewall-cmd --zone=public --remove-port=8080/tcp --permanent #关闭8080/tcp端口
systemctl start firewalld.service #开启防火墙
systemctl restart firewalld.service #重启防火墙
安装完jdk、MySQL、tomcat后,就可以在搭建一个Javaweb项目了。
1)准备一个在本地可以成功运行并访问的项目,将项目打包为war包:(注意:在打包之前将本地项目的jdk版本换成与Linux安装版本相同,不然可能会造成部署项目后访问404的问题;同时把配置文件中连接数据库的用户名和密码改为Linux连接数据库的用户名和密码)
2)导出war包:
等一会就可以在刚刚选择war包存放位置中找到war包。
3)将导出的war包,和该项目要连接的数据库的.sql文件,上传到Linux中tomcat的webapps目录下(其他目录也可以,但不会tomcat不会自动解压,上传文件可用xftp)
4)查看tomcat的webapps下有没有war包解压的对应文件,若没有,启动一下tomcat(运行tomcat的脚本)
./startup.sh #执行 #若未配置环境变量需要进入到tomcat的bin目录下
5)进入到数据库,在Linux的MySQL中创建项目所要用的数据库
create database evaluation; #创建数据库,数据库名要与本地使用的一样
use evaluation; #使用该数据库
source /opt/apache-tomcat-9.0.50/webapps/evaluation.sql #将上传的.sql的结构和数据存储到当前使用的数据库中
6)在本地访问该项目,即可访问成功
http://主机地址(服务器ip):端口号/项目名
http://159.75.220.138:8080/evaluation/
7)可进入到tomcat的server.xml文件中修改一些配置
cd /opt/apache-tomcat-9.0.50/conf/server.xml
8)可在tomcat的logs看到一些日志信息的文件
catalina.out #控制台输出信息文件
tail -f catalina.out #实时更新日志文件,访问项目,控制台输出可看到
Ctrl+c 是退出tail命令。
localhost_access_log.2021-07-22.txt #该文件会记录当天项目访问的信息,如发送了一个post请求
注意:若出现访问项目后静态资源(如:css、图片等)无法访问,或失效的问题,检查一下浏览器访问的地址有没有项目名,若没有,则需要将项目中的路径都需要从当前项目下开始获取。 若是使用的是jsp,解决如下:
<%
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() +request.getContextPath();
%>
<base href="<%=basePath %>">
然后引入静态资源如下:
<link href="<%=basePath %>/resource/css/course.css" rel="stylesheet">
或者使用
${pageContext.request.contextPath }
如:
<link href="${pageContext.request.contextPath }/resource/css/course.css" rel="stylesheet">
1、下载maven 的tar.gz包,并上传到Linux
apache-maven-3.5.4-bin.tar.gz
2、解压这个文件
tar -zxvf apache-maven-3.5.4-bin.tar.gz
3、配置文件
cd apache-maven-3.5.4/
cd conf
1、下载tomcat 的tar.gz包,并上传到Linux
redis-6.2.5.tar.gz
2、解压这个文件
tar -zxvf redis-6.2.5.tar.gz
3、进入到解压后的文件目录
cd redis-6.2.5
4、编译
make
5、安装
make install
6、进入到/usr/local/bin,可看到redis安装完成后的一些文件
cd /usr/local/bin
redis-benchmark :性能测试工具
redis-check-rdb :
redis-sentinel:redis集群使用
redis-check-aof :修复有问题的AOF文件
redis-cli :客户端,操作入口
redis-server :redis服务启动命令
7、启动
前台启动 :redis-server #ctrl + C 退出
后台启动:
进入到redis解压文件目录的,找到redis.conf修改
daemonize no 为
daemonize yes
进入到bin目录
cd /usr/local/bin
redis-server /usr/local/redis-6.2.5/redis.conf
ps -ef | grep redis #查看redis进程
redis-cli #通过客户端连接redis
/usr/local/bin/redis-cli
shutdown / exit #关闭
8、修改配置文件
# 若要实现远程连接,找到bind,注释掉
bind 127.0.0.1 -::1 #只可本地连接
# 关闭保护模式,找到以下配置,将yes改为no
protected-mode yes #开启保护模式
# 默认端口号6379
port 6379 # 若使用的是购买的服务器,建议启动redis服务之前更改端口号,不然很容易被攻击
#修改端口号后,连接
redis-cli -p 端口号
tcp-backlog 511 # backlog队列总和=未完成三次握手队列+已完成三次握手队列。
timeout 0 #永不超时
tcp-keepalive 300 #每隔三百秒检测是否活着
# requirepass foobared # 找到这行注释可在下面设置密码如123
requirepass 123
#登录报错:NOAUTH Authentication required 表示要密码 则输入 auth 密码
auth 123
ps -ef | grep redis #查看redis进程 id
kill -9 进程id #杀死redis server进程
进入到bin目录重启redis
cd /usr/local/bin
redis-server /usr/local/redis-6.2.5/redis.conf
9、防火墙放行端口号
firewall-cmd --state #查看防火墙状态(是否开启)
# 若为 not running ,则
systemctl start firewalld.service #开启防火墙
firewall-cmd --list-ports #查看端口信息,查看6379端口是否被放行
#若未放行,则
firewall-cmd --zone=public --add-port=6379/tcp --permanent #开端口命令
systemctl restart firewalld.service #重启防火墙
再次查看端口信息可见6379端口已被开放,此时在外网可以访问
主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slave以读为主。
原理:
配置主从复制(一主两从):
1、创建/myredis文件夹
mkdir myredis
2、复制redis.conf配置文件到文件夹中
3、配置一主两从,即创建三个配置文件redis6379.conf、redis6380.conf、redis6381.conf
vim redis6379.conf
#在redis6379.conf写入以下内容
include /myredis/redis.conf #引入redis.conf配置文件中的公共部分
pidfile /var/run/redis_6379.pid #pid文件位置
port 6379 #端口号
dbfilename dump6379.rdb #rdb文件名称
#以同样的方式创建redis6380.conf、redis6381.conf
cp redis6379.conf redis6380.conf
#然后修改相关6379为6380
4、分别启动服务
redis-server /myredis/redis6379.conf
redis-server /myredis/redis6380.conf
redis-server /myredis/redis6381.conf
redis-cli -p 6379 #连接端口号为6379的服务
info replication #打印主从复制的相关信息(查看主从)
# 此时可看到三个服务的角色都是主服务
5、将redis6379作为主服务,redis6380和redis6381作为从服务
#分别连接redis6380、redis6381,并执行以下命令
slaveof ip port
slaveof 127.0.0.1 6379
#此时查看主从信息,可见6379服务下有两个从服务;
若途中从服务其中有一个挂掉了(如退出连接、关闭服务),且期间主服务又进行了写操作。
之后,再重新启动这个挂掉的从服务机,查看主从信息为主机,
即,从服务挂掉后重连接,需要重新配置主从关系,即执行命令
slaveof 127.0.0.1 6379
再查看该从服务数据,数据是直接从主服务复制过来的。
若途中主服务挂掉了(如退出连接)
此时查看从服务机的主从关系,可见从服务仍为从服务,且还认定之前的主服务机。重新连接主服务,主服务也还认可之前的从服务。
#反客为主
slaveof no one #将从机变为主机
1)准备一个spring boot项目,将其jdk、mysql、redis都能连接到Linux上安装的环境,打包项目成jar包
然后在target包下生成有jar包
3)执行jar包
nohup java -jar xxx.jar &
# 可能会出现错误:nohup: ignoring input and appending output to ‘nohup.out’
可忽略该错误,按ctrl+C退出 或 用以下命令执行
nohup java -jar campusos-2.0.0-SNAPSHOT.jar > nohup.out 2>&1 &
4)开放端口
springboot项目配置文件中配置的端口号,在Linux中需放行
#如该项目的端口号为8888
firewall-cmd --state #查看防火墙状态(是否开启)
# 若为 not running ,则
systemctl start firewalld.service #开启防火墙
firewall-cmd --list-ports #查看端口信息,查看8888端口是否被放行
#若未放行,则
firewall-cmd --zone=public --add-port=8888/tcp --permanent #开端口命令
systemctl restart firewalld.service #重启防火墙
5)在本地访问该项目端口号,即可访问成功
http://主机地址(服务器ip):端口号/项目名
http://159.75.220.138:8888
Nginx详细笔记:Nginx基本入门
Docker详细笔记:Docker自学笔记
1、检测Centos版本
cat /etc/redhat-release #版本不一样,安装命令可能不一样
CentOS Linux release 7.9.2009 (Core)
2、下载软件
yum -y install 包名 #安装命令
yum -y install docker
3、启动docker
systemctl start docker
4、查看docker服务状态
systemctl status docker
1、将下载的安装包上传到Linux服务器
apache-zookeeper-3.5.7-bin.tar.gz
2、解压这个文件
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
#可以给解压后的文件夹重命名
mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7
3、进入解压后的文件
cd zookeeper-3.5.7/
cd bin #启动脚本文件
cd conf #配置文件
#修改配置文件的名称
mv zoo_sample.cfg zoo.cfg
4、在解压文件目录下创建一个目录专门放zookeeper数据
mkdir zkData
5、修改配置文件
vim zoo.cfg
dataDir=/opt/zookeeper-3.5.7/zkData
clientPort=2181 #默认端口
6、启动服务
./bin/zkServer.sh start
7、查看服务状态
./bin/zkServer.sh status
8、查看进程
jps
jps -l
9、客户端连接
./bin/zkCli.sh
10、退出
quit
shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序。
shell是用户与Linux操作系统沟通的桥梁
文件名 (后缀) 一般 以 .sh 结尾,以 #!/bin/bash 开头
单行注释: #
多行注释: :<
chmod u+x myShell.sh
chmod 744 myShell.sh
Shell变量分为:系统变量 和 用户自定义变量。
系统变量:$HOME 、$PWD、$SHELL、$USER (可直接使用,如:echo $HOME)
#!/bin/bash
echo "hello world!"
echo "PATH=$PATH" #输出系统变量
echo "user=$USER"
set # 显示当前shell中所有变量
shell变量的自定义(基本语法):
shell变量定义规则:
#!/bin/bash
# echo "hello,world"
A=100 #定义一个变量
echo "A=$A" #输出一个变量
unset A #撤销一个变量
echo "A=$A"
-----------
readonly A=99 #定义一个静态变量
echo "A=$A"
unset A #撤销一个静态变量(错误操作)
echo "A=$A"
基本语法:
TOMCAT_HOME=/opt/tomcat #定义一个自己的环境变量
export TOMCAT_HOME #输出环境变量
#保存文件后,刷新,然后可以直接在命令行查看 环境变量的 值
echo $TOMCAT_HOME #查看环境变量的值
当执行一个shell脚本时,如果希望获取到命令行的参数信息,可以使用位置参数变量
基本语法:
#!/bin/bash
# 获取到各个参数
echo "$0 $1 $2" # $0代表命令本身,$1~$9代表第一到第九个参数
echo "$*" # 代表命令行中所有的参数
echo "$@" # 代表命令行中所有的参数
echo "参数个数=$#" # 代表命令行中所有参数的个数
shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法:
#!/bin/bash
echo "当前的进程号=$$"
# 后台的方式运行 myShell.sh
./myShell.sh &
echo "最后一个进程的进程号=$!"
echo "执行的值=$?"
基本语法:
#!/bin/bash
# 第一种方式 "$((运算符))"
RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"
# 第二种方式 "$[运算符]"
RESULT2=$[(2+3)*4] # 推荐使用
echo "result2=$RESULT2"
# # 第三种方式 使用expr
TEMP=`expr 2 + 3` # 注意是反引号引起来
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"
# 求两个参数的和
SUM=$[$1+$2] #命令行输入的两个参数
echo "SUM=$SUM"
基本语法:
= 字符串比较
-lt 小于 (less than)
-le 小于等于(less than or equal)
-gt 大于 (greater than)
-ge 大于等于 (greater than or equal)
-eq 等于
-ne 不相等(not equal)
2)按文件权限进行判断-r 有读的权限
-w 有写的权限
-x 有执行的权限
3)按照文件类型进行判断-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
#!/bin/bash
# 1、判断“ok”是否等于“ok”
if [ "ok" = "ok" ] # = 字符串比较
then
echo "equal"
fi
# 2、判断23是否大于等于22
if [ 23 -gt 22 ]
then
echo "大于"
fi
# 3、判断一个文件是否存在
if [ -e /home/test.txt ]
then
echo "存在"
fi
~
#!/bin/bash
# 编写if else ,如果输出参数,大于等于60,输出及格了;小于60,输出不及格
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
#!/bin/bash
# 当命令行参数是 1 时,输出“周一”,是 2 时,就输出“ 周二 ” ,否则其他
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "其他"
;;
esac
#!/bin/bash
# 1、打印命令行输入的参数
for i in "$*" # $* 代表命令行所有的参数,当作一个整体
do
echo "the num is $i"
done
echo "=============="
for j in "$@" # $@代表命令行中所有的参数,但 **把每个参数区别对待
do
echo "the num is $j"
done
#!/bin/bash
# 1、从1加到100的值输出显示
SUM=0
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum=$SUM"
#!/bin/bash
# 1、从命令行输入一个数n,计算1+2+...+n 的值是多少
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不等待了
参数:
变量:指定读取值的变量名
#/bin/bash
#1、读取控制台输入一个num值
read -p "请输入一个数num1=" NUM1
echo "您输入的值是num1=$NUM1"
# 2、读取控制台输入一个num值,在10秒内输入
read -t 10 -p "请输入一个数num2=" NUM2
echo "你输入的值是num2=$NUM2"
shell编程和其他编程语言一样,有系统函数,也可以自定义函数。
basename [String][suffix] # basename命令会删掉所有的前缀包括最后一个【/】,然后将字符串显示出来
dirname # 返回完整路径最后 / 的前面的部分 ,常用于返回路径部分
dirname 文件绝对路径 #从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
基本语法:
[function] funname[()]
{
action;
[return int;]
}
调用函数直接写函数名: funname[值]
#!/bin/bash
#1、计算两个数的和 函数getSum
function getSum(){
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
read -p "请输入第一个数n1:" n1
read -p "请输入第二个数n2:" n2
#调用getSum
getSum $n1 $n2
#!/bin/bash
# 完成数据库的定时备份
#备份路径
BACKUP=/home/shell/data/db # /data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可输出变量调试
echo ${DATETIME} #大括号可不要
echo "====开始备份==="
echo "====备份的路径是 $BACKUP/$DATETIME.tar.gz"
#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库指令
mysqldump -u${DB_USER} -p${DB_PWD} -- host=$HOSST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时文件
rm -rf $BACKUP/$DATETIME
#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "===备份成功===="