一、基本命令
1、开机和关机
sync
shutdown
shutdown -h 10
shutdown -h 20:25
shutdown -h now
shutdown -r now
reboot
halt
logout
2、帮助指令
在对某个指令不熟悉时,可通过Linux提供的帮助指令来了解指令的使用方法。
再操作命令时,遇到某个命令记不太清了,也可通过 Tab 命令 自动补齐或给出对应的命令提示选择
man
man [命令或配置文件]
man ls
help
help [命令]
3、时间日期类型
date
date +%Y
date +%m
date +%d
date "+%Y-%m-%d %H:%M:%S
date -s [字符串时间]
cal
cal [选项]
4、查找命令
- find:find指令将从指定目录向下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端
find [搜索范围] [选项]
find /home -name t.txt
find /opt -user 用户名
find / -size +20M
- locate:可以快速定位文件路径。利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。无需遍历整个文件系统,查询速度较快。
注意:第一次使用要先 updatedb
locate 文件名
grep
|
grep [选项] 查找内容 源文件
-n
-i
- whereis:定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。
5、系统目录结构
1、一切皆文件
2、根目录 /
- /bin : bin是Binary的缩写,这个目录存放着最经常使用的命令。
- /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)
- /dev : dev是Device(设备)的缩写,存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
- letc :这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /home :用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。(不要动)
- /lost+found :这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的一些文件)
- /media : linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。(我们后面会把一些本地文件挂载在这个目录下)
- /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
- /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。(不用管)
- /root :该目录为系统管理员,也称作超级权限者的用户主目录。
- /sbin : s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。.
- /srv:该目录存放一些服务启动之后需要提取的数据。
- /sys :这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs 。
- /tmp:这个目录是用来存放一些临时文件的。用完即丢的文件,可以放在这个目录下,安装包!
- /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows 下的program files目录。
- /usr/bin :系统用户使用的应用程序。
- /usr/sbin :超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src :内核源代码默认的放置目录。
- /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
- /www: 存放服务器网站相关的资源、环境、网站的项目
二、常用基本命令
1、目录管理
绝对路径:全称
相对路径:
cd
./
cd ../
ls -a
ls -l
Linux所有命令都可以组合
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
2、文件属性
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中第一个字符代表这个文件是目录、文件 或 链接文件 等等(如上图):
- 当前为【d】则是目录
- 当前为【-】则是文件
- 当前为【l】则表示为链接文件(link file)
- 若为【b】 表示为装置文件里面的可供存储的接口设备(可随机存取装置)
- 若为【c】 表示为装置文件里面的串行端口设备,例如键盘(一次性读取装置)
其后的字符串中,以三个为一组,且均为【rwx】的三个组合,其中【r】代表可读(read);【w】代表可写(write);【x】代表可执行(execute)。
注意:这三个权限的位置不会改变,如果没有权限,就会出现减号【-】
每个文件的属性由左边第一部分的10个字符来确定:
chgrp
chgrp [-R] 属组名 文件名 -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
chown
chown [-R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
chmod
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 :文件赋予 所有用户 可读可写可执行
3、文件内容查看
cat
tac
nl
more
less
head
head -n
tail
grep abc test.txt
grep ^abc test.txt
grep [0-9] test.txt
sed -n '/abc/p' test.txt
sed -n '1,5p;5q' test.txt
sed -n '5p;5q' test.txt
sed '/^$/d' t.txt
sed -e '8d' t.txt
sed 's/eee/ddd/g' t.txt
sed -e 's/*$//' t.txt
paste file1 file2
sort file1 file2
comm -1 file1 file2
-2
-3
网络配置目录 : cd /etc/sysconfig/network-scripts
ifconfig : 查看网络配置
4、Linux链接(了解)
Linux的链接分为两种:硬链接、软硬件
- 硬链接: A—B,假设B是A的硬链接,那么他们两个指向了同一个文件!允许一个文件拥有多个路径,用户可以通过这种机制建立硬链接到一些重要文件上,以防误删
- 软链接:类似window下的快捷方式,删除的源文件,快捷方式也访问不了
ln
touch
echo
删除f1之后,查看f2,f3的区别:
5、Vim编辑器
Vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富。vi是老式的字符处理器。 在Linux中,必须会Vim (查看内容、编辑内容、保存内容)
三种使用模式:
- 命令模式(Command mode)
- 输入模式(Insert mode)
- 底线命令模式(Last line mode)
作用:
命令模式: 用户刚刚启动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 保存退出!
6、账号管理
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号,一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面可以帮助用户组织文件,并为用户提供安全性保护
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号管理,要完成的工作主要有:
- 用户账号的添加、删除、修改
- 用户口令的管理
- 用户组的管理
useradd
useradd -选项 用户名
-m
-c
-d
-g 用户组
-G 用户组
-s
-u 用户号,
本质:Linux中一切皆为文件,这里的添加就是往某个文件中 写入用户信息 /etc/passwd
userdel
userdel -r 用户名
usermod
su
su -root
$表示普通用户
exit
hostname
passwd
passwd -l 用户名
passwd -d 用户名
7、用户组管理
属主、数组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发、测试、运维、root)。不同用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组管理涉及用户组的添加、删除、修改。组的增加、删除、修改实际上是对 /etc/group 文件的更新。
groupadd
groupadd -g
创建完用户组后可以得到一个组的id,这个id是可以指定的,若不指定则自增。
groupdel
groupmod
groupmod -g -n
8、磁盘管理
df
du
du -sm /*
mount
mount /dev/kuang /mnt/kuang
umount
umount -f
9、进程管理
- 在Linux中,每一个程序都有自己的一个进程,每个进程都有一个id
- 每一个进程,都会有一个父进程
- 进程可以有两种存在方式:前台 和 后台运行
- 一般服务都是后台运行的,基本程序都是前台运行的!
ps
ps -xx :
-a
-u
-x
ps -aux
ps -aux|grep mysql
ps -aux|grep redis
|
grep
ps -ef
ps -ef|grep mysql
进程树
pstree -pu
-p
-u
kill
kill -9 进程id
top
PID to kill 进程ID
netstat -anp
-an
-p
netstat -anp |grep mysql
10、压缩和解压缩
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:一种用于互联网下载包的打包及安装工具,RedHat软件包管理工具。
rpm -qa | grep firefox
rpm -q 软件包名
rpm -qi 软件包名
rpm -e 软件包名[firefox]
rpm -ivh
yum list|grep xx 软件列表
yum install xxx
1、JDK安装
JDK安装运用 rpm 方式安装:
1、下载rpm包,并上传到Linux
jdk-8u221-linux-x64.rpm
2、查询是否已经安装jdk
java -version
rpm -qa | grep jdk
若已经安装,需要卸载
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
注意: 再次连接(重新连接服务器)后发现输入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
2、MySQL安装
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
解压后会有多个文件,实际只需要服务端和客户端两个:
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
之后再安装服务端,安装成功
最后整理可知,错误提示缺少什么就先装什么,与什么相冲突,就删除什么
4、卸载mariadb-libs
rpm -e --nodeps mariadb-libs-1:5.5.68-1.el7.x86_64
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
8、yum方式安装numactl
yum -y install numactl
9、安装服务端
rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm
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');
15、退出登录mysql
exit 或 quit
16、配置mysql运行其他用户访问
mysql>use mysql;
mysql> update user set host = '%' where user = 'root';
mysql>select host, user from user;
mysql> flush privileges;
或者
(建议使用以下方法,此操作在原来的基础上添加授权,不会改变原有的数据)
grant all privileges on *.* to 'root'@'%' identified by 'root';
grant all privileges on 数据库名.表名 to '用户名'@'主机' identified by '密码'
grant all privileges on *.* to 'root'@'192.168.1.123' identified by 'root';
flush privileges;
17、防火墙开发端口
show global variables like 'port';
firewall-cmd --zone=public --add-port=3306/tcp --permanent
systemctl restart firewalld.service
firewall-cmd --list-ports
3、Tomcat安装
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
./shutdown.sh
启动后,此时只能在Linux本地访问tomcat,外网如windows本机电脑仍不能访问
需让防火墙放行该端口号
4、防火墙放行端口号
firewall-cmd --state
systemctl start firewalld.service
firewall-cmd --list-ports
firewall-cmd --zone=public --add-port=8080/tcp --permanent
systemctl restart firewalld.service
再次查看端口信息可见8080端口已被开放,此时在外网可以访问
出现以下界面,说明tomcat安装成功且可在外网访问
systemctl status firewalld
service firewalld start
service firewalld restart
service firewalld stop
chkconfig --list
chkconfig --list | grep 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
systemctl start firewalld.service
systemctl restart firewalld.service
4、简单Javaweb项目部署
安装完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
5)进入到数据库,在Linux的MySQL中创建项目所要用的数据库
create database evaluation;
use evaluation;
source /opt/apache-tomcat-9.0.50/webapps/evaluation.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
注意:若出现访问项目后静态资源(如: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">
5、Maven安装
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
6、Redis安装
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
后台启动:
进入到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-cli
/usr/local/bin/redis-cli
shutdown / exit
8、修改配置文件
bind 127.0.0.1 -::1
protected-mode yes
port 6379
redis-cli -p 端口号
tcp-backlog 511
timeout 0
tcp-keepalive 300
requirepass 123
auth 123
ps -ef | grep redis
kill -9 进程id
进入到bin目录重启redis
cd /usr/local/bin
redis-server /usr/local/redis-6.2.5/redis.conf
9、防火墙放行端口号
firewall-cmd --state
systemctl start firewalld.service
firewall-cmd --list-ports
firewall-cmd --zone=public --add-port=6379/tcp --permanent
systemctl restart firewalld.service
再次查看端口信息可见6379端口已被开放,此时在外网可以访问
redis的主从复制:
主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slave以读为主。
原理:
- 当从连接上主服务之后,从服务向主服务发送进行数据同步消息。
- 主服务器接到从服务器发送过来的同步消息,把主服务器数据进行持久化,rdb文件,把rdb文件发送给从服务,从服务器拿到rdb文件进行读取。
- 每次主服务器进行读写操作之后,和从服务进行数据同步。
配置主从复制(一主两从):
1、创建/myredis文件夹
mkdir myredis
2、复制redis.conf配置文件到文件夹中
3、配置一主两从,即创建三个配置文件redis6379.conf、redis6380.conf、redis6381.conf
vim redis6379.conf
include /myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
cp redis6379.conf redis6380.conf
4、分别启动服务
redis-server /myredis/redis6379.conf
redis-server /myredis/redis6380.conf
redis-server /myredis/redis6381.conf
redis-cli -p 6379
info replication
5、将redis6379作为主服务,redis6380和redis6381作为从服务
slaveof ip port
slaveof 127.0.0.1 6379
若途中从服务其中有一个挂掉了(如退出连接、关闭服务),且期间主服务又进行了写操作。
之后,再重新启动这个挂掉的从服务机,查看主从信息为主机,
即,从服务挂掉后重连接,需要重新配置主从关系,即执行命令
slaveof 127.0.0.1 6379
再查看该从服务数据,数据是直接从主服务复制过来的。
若途中主服务挂掉了(如退出连接)
此时查看从服务机的主从关系,可见从服务仍为从服务,且还认定之前的主服务机。重新连接主服务,主服务也还认可之前的从服务。
slaveof no one
7、springboot项目部署
1)准备一个spring boot项目,将其jdk、mysql、redis都能连接到Linux上安装的环境,打包项目成jar包 然后在target包下生成有jar包
2)将打包的jar包上传到linux中
3)执行jar包
nohup java -jar xxx.jar &
可忽略该错误,按ctrl+C退出 或 用以下命令执行
nohup java -jar campusos-2.0.0-SNAPSHOT.jar > nohup.out 2>&1 &
4)开放端口
springboot项目配置文件中配置的端口号,在Linux中需放行
firewall-cmd --state
systemctl start firewalld.service
firewall-cmd --list-ports
firewall-cmd --zone=public --add-port=8888/tcp --permanent
systemctl restart firewalld.service
5)在本地访问该项目端口号,即可访问成功
http://主机地址(服务器ip):端口号/项目名
http://159.75.220.138:8888
8、Nginx安装
Nginx详细笔记:Nginx基本入门
9、Docker安装
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
10、zookeeper安装
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编程
shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序。
shell是用户与Linux操作系统沟通的桥梁
1、shell脚本简单例子
文件名 (后缀) 一般 以 .sh 结尾,以 #!/bin/bash 开头
单行注释: #
多行注释: :<<! 这里是注释 !
2、脚本的常用执行方式
- 输入脚本的绝对路径或相对路径
先赋予shell脚本文件 +x 权限,再执行
chmod u+x myShell.sh
chmod 744 myShell.sh
- sh 命令 或 bash 命令运行(不需要权限),不推荐使用
3、shell变量
Shell变量分为:系统变量 和 用户自定义变量。
系统变量:$HOME 、$PWD、$SHELL、$USER (可直接使用,如:echo $HOME)
#!/bin/bash
echo "hello world!"
echo "PATH=$PATH"
echo "user=$USER"
set # 显示当前shell中所有变量
shell变量的自定义(基本语法):
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量 (注意:不能unset)
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"
将命令的返回值赋给变量
- A= ’ ls-la ` 反引号,运行里面的命令,并把结果返回给变量A
- A=$(ls-la) 等价于 反引号
4、设置环境变量
基本语法:
- export 变量名=变量值 (将shell变量输出为环境变量)
- source 配置文件 (将修改后的配置文件信息立即生效,类似于刷新)
- echo $变量名 (查询环境变量的值)
TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME
echo $TOMCAT_HOME
5、位置参数变量
当执行一个shell脚本时,如果希望获取到命令行的参数信息,可以使用位置参数变量
基本语法:
- $n : n为数字,$0代表命令本身,$1~$9代表第一到第九个参数,十以上的参数,需要用大括号包含,如${10}
- $* : 代表命令行中所有的参数,把所有的参数看成一个整体
- $@ : 代表命令行中所有的参数,但 把每个参数区别对待
- $# : 代表命令行中所有参数的个数
#!/bin/bash
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"
6、预定义变量
shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法:
- $$ : 当前进程的进程号 (PID)
- $! : 后台运行的最后一个进程进程号 (PID)
- $? :最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体哪个值,由命令自己决定),则证明上一个命令执行不争取了。
#!/bin/bash
echo "当前的进程号=$$"
./myShell.sh &
echo "最后一个进程的进程号=$!"
echo "执行的值=$?"
7、运算符
基本语法:
- “$((运算符))” 或 “$[运算符]”
- expr m + n (注意:expr运算符间要有空格)
- expr m - n
- expr \* ,/,% =》 乘、除、取余
#!/bin/bash
RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"
RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"
TEMP=`expr 2 + 3`
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"
SUM=$[$1+$2]
echo "SUM=$SUM"
8、shell条件判断
基本语法:
- [ condition ] : 非空返回true,可使用 $? 验证(0为true,大于1为false)【注意 condition 前后都要有空格】
- 常用的判断条件
1)两个整数的比较= 字符串比较
-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
if [ "ok" = "ok" ]
then
echo "equal"
fi
if [ 23 -gt 22 ]
then
echo "大于"
fi
if [ -e /home/test.txt ]
then
echo "存在"
fi
~
9、流程控制
#!/bin/bash
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "其他"
;;
esac
#!/bin/bash
for i in "$*"
do
echo "the num is $i"
done
echo "=============="
for j in "$@"
do
echo "the num is $j"
done
#!/bin/bash
SUM=0
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum=$SUM"
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
10、读取控制台输入 read
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不等待了
参数:
变量:指定读取值的变量名
read -p "请输入一个数num1=" NUM1
echo "您输入的值是num1=$NUM1"
read -t 10 -p "请输入一个数num2=" NUM2
echo "你输入的值是num2=$NUM2"
11、shell函数
shell编程和其他编程语言一样,有系统函数,也可以自定义函数。
- 系统函数
1)basename :返回完整路径最后 / 的部分,常用于获取文件名
basename [String][suffix]
dirname
dirname 文件绝对路径
- 自定义函数
基本语法:
[function] funname[()]
{
action;
[return int;]
}
调用函数直接写函数名: funname[值]
#!/bin/bash
function getSum(){
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
read -p "请输入第一个数n1:" n1
read -p "请输入第二个数n2:" n2
getSum $n1 $n2
12、shell数据库备份案例
#!/bin/bash
BACKUP=/home/shell/data/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"
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
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "===备份成功===="
|