复制文件
命令(copy):
cp 源文件 目标文件/文件夹
cp -r 源文件夹 目标文件夹
删除命令
命令(remove):
rm 文件1 文件2 文件2 ...
rm -rf 文件夹1 文件夹2...
远程连接
SSH 用于进行Linux的远程操作, 其原理为:
打包命令 tar
打包命令
tar -czvf 文件名.tar.gz 文件夹1 文件夹2 文件1 文件2 ...
-c 选项: create 创建文件包
-z 选项: 将包进行gzip压缩 当使用z选项使用 应该使用 .gz 结尾
-v 选项: 显示打包的过程,如果不加v就不显示打包过程
-f 选项: 指定目标文件名后续参数是被打包的文件或文件夹
案例:
cd
tar -czvf tomcat8.tar.gz apache-tomcat-8.0.24
如上命令将 apache-tomcat-8.0.24 文件夹打包为文件 tomcat8.tar.gz
释放文件:
tar -xzvf 文件名.tar.gz -x 选项: 释放文件
-z 选项: 使用gzip算法解压缩
-v 选项: 查看释放过程
-f 选项: 指定被释放的文件> 注意: 会将文件释放到当前文件夹中!
案例:
mkdir test1
cd test1
tar -xzvf ../tomcat8.tar.gz
上载数据到服务器试验:
$ tar -czf demo.tar.gz demo
$ sftp soft01@192.168.27.129
sftp> ls
sftp> put demo.tar.gz
sftp> ls
sftp> exit
$ ssh soft01@192.168.27.129
服务器$ ls
服务器$ tar -xzf demo.tar.gz
服务器$ ls
服务器$ exit
从服务器下载数据试验:
$ ssh soft01@192.168.27.129
服务器$ ls
服务器$ tar -czf 2048.tar.gz 2048
服务器$ ls
服务器$ exit
$ sftp soft01@192.168.27.129
sftp> ls
sftp> get 2048.tar.gz
sftp> lls
sftp> exit
$ ls
$ tar -zxf 2048.tar.gz
$ ls
vi 与 vim
字符界面的全屏文本编辑器。
语法
vim [文件名]
例子:
vim HelloWorld.java
VIM的工作状态:
利用VIM修改hosts文件解析本地域名
利用hosts文件可以实现本地DNS域名解析:
案例:
su
cd /etc
cp hosts hosts.2018.1.18
vim hosts192.168.27.33 laowang.com
ping laowang.com //检查 结束 Control + C
ssh soft01@laowang.com
...
配置Java 环境
需要配置3个环境变量:
JAVA_HOME=JDK的安装目录
CLASSPATH=.
PATH=$PATH:JDK的安装目录/bin
命令
export JAVA_HOME=/user/local/jdk1.8.0_144
export CLASSPATH=.
export PATH=$PATH:$JAVA_HOME/binjava -version# Linux
Windows SSH 客户端工具
- pytty
- 单纯的是SSH客户端
- Bitvise SSH Client
- SSH + SFTP
- MobaXterm
- SSH + SFTP
Linux 上Java环境的配置
-
下载jdk-8u161-linux-x64.tar.gz
-
释放: tar -zxf jdk-8u161-linux-x64.tar.gz
-
mv jdk1.8.0_161 /usr/local
-
设置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_161export CLASSPATH=.export PATH=$JAVA_HOME/bin:$PATH
注意:/usr/local/jdk1.8.0_161是JDK的安装位置,不同服务器可以不同!
centos6.5: /home/soft01/tts9/jdk1.8.0_144
centos7: /usr/local/java/jdk1.8.0_144 -
验证:
java -versionjavac -version
Profile 文件
Linux 启动时候按照次序加载启动脚本文件
- 先加载系统级别脚本 /etc/profile
- 对当前系统的所有用户有效
- 再开启命令窗口时候执行脚本 ~/.bash_profile
- 仅仅对当前用户有效
~ 代表当前用户的 Home 文件夹
修改系统级别profile文件:
su
cd /etc
cp profile profile.2018.1.19
ls
vim profileexport JAVA_HOME=/usr/local/jdk1.8.0_161export CLASSPATH=.export PATH=$JAVA_HOME/bin:$PATH
java -version
source profile //临时执行 profile
java -version
reboot
PATH 环境变量
操作系统的命令搜索路径,操作系统在执行命令时候,首先搜索系统内核命令,然后再搜索PATH变量中设置的目录,如果搜索到就执行命令,否则出现“命令没有找到”错误。
案例:
# whoami
root
# who
root pts/0 2018-01-19 10:37 (218.247.142.21 6)
# whoru
-bash: whoru: command not found
# echo $PATH
/usr/local/jdk1.8.0_161/bin:/usr/local/sbin:/usr/local /bin:/usr/sbin:/usr/bin:/root/bin
# which whoami
/usr/bin/whoami
# which who
/usr/bin/who
# which whoru
/usr/bin/which: no whoru in (/usr/local/jdk1.8.0_161/bin)
关于PATH变量
- 操作系统命令可以扩展,只需要将程序的位置添加到PATH变量即可。
- PATH变量在搜索时候是由次序的!排在前面的目录优先搜索
- 如: /usr/local/jdk1.7.0_16/bin:/usr/local/jdk1.8.0_161/bin时候优先执行 jdk1.7 的java命令
- 设置PATH变量时候,务必将原来的系统PATH带上!!!
- export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
- Linux 系统PATH的分隔符是冒号 :
- Windows系统的PATH的分隔符是分号 ;
echo 命令
echo $PATH 回显变量 PATH 的值。
文件权限管理,文件拥有者
修改文件、文件夹权限命令:
chmod 权限规则 文件夹/文件 rwx 421
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7chmod 700 demo
drwx------ demo
修改文件的拥有者
chown -R root:root jdk1.8.1_161
Shell 脚本
Shell脚本就是指一般文本文件,其包含一组能够在控制台执行命令集合。在给执行权限以后可以执行。
有时候也称Shell脚本为批处理命令。
试验步骤:
-
vim backup.sh
cdcd tts9tar -czf jdk.tar.gz jdk1.8.0_144mv jdk.tar.gz ..cdecho 备份完成!
-
chmod +x backup.sh
-
cat backup.sh
-
./backup.sh
查找文件
查找命令
find / -name jdk
more
用于分屏显示文本的内容
more 文本文件
more /etc/profile
经常与其他命令联合使用,将第一个命令的结果进行分屏显示
ls /etc | more
grep
筛选一个命令的运行结果
ls /etc | grep 正则
ls /etc | grep ^pr.*
ps
查看当前正在运行的进程
ps -A
ps -A | grep mysql
ps -A | grep ssh
kill
结束进程
kill 进程号
yum
CentOS Linux上用于管理官方发布软件包的工具。 相当于Linux的软件市场。
Linux MySQL 安装步骤:
-
利用yum 安装MySQL
yum install -y mariadb yum install -y mariadb-server
-
配置UTF-8支持中文 vim /etc/my.cnf, 添加
[mysqld]character-set-server=utf8
-
MySQL服务
//启动service mariadb startsystemctl start mariadb.service//关闭service mariadb stopsystemctl stop mariadb.service//重启service mariadb restartsystemctl restart mariadb.service
可以利用 ps -A|grep my 检查服务是否启动
-
设置MySQL为自动启动
systemctl enable mariadb
-
mysql 客户端连接到服务器验证一下即可
mysql -uroot -p
-
验证编码
show variables like 'char%';+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+
安装 Tomcat
yum 安装
yum install tomcat
Tomcat 安装位置
/use/share/tomcat
配置文件位置
/use/share/tomcat/conf
启动
systemctl start tomcat.sevice
停止
systemctl stop tomcat.sevice
部署Tomcat WEB 程序:
将WEB应用复制到 /use/share/tomcat/webapps 文件夹
将你的应用程序文件夹 授权给 tomcat:tomcat 用户
关于Tomcat不能使用80端口原因: tomcat 服务的默认启动用户是 tomcat 用户,不是root用户。CentOS7 Linux 中,只有root用户启动的服务才能占用80端口。 如果将Tomcat配置文件改成80端口时,启动会出现错误(在日志文件)没有权限绑定80端口。
阿里云的防火墙只开放了 80 和 22端口。
http://1708.canglaoshi.org:8080
可以利用Nginx进行转发来解决80端口问题。
Linux
下载命令wget
如果没有安装wget命令, 则利用YUM安装wget
yum install wget
语法:
wget URL
案例,下载tomcat:
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.0.48/bin/apache-tomcat-8.0.48.tar.gz
手工安装Tomcat
步骤:
-
下载Tomcat
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.0.48/bin/apache-tomcat-8.0.48.tar.gz
URL 地址来自 https://tomcat.apache.org/download-80.cgi
-
释放到 /usr/local
cd /usr/localtar -zxvf ~/apache-tomcat-8.0.48.tar.gz
-
执行:
cd apache-tomcat-8.0.48/bin./startup.sh
-
用浏览器访问 8080 端口
请注意:检查防火墙是否关闭了8080端口
-
打开防火墙命令(centos 7)
firewall-cmd --permanent --add-port=8080/tcpfirewall-cmd --reload
ping命令 检查服务器
语法:
ping ip/域名
服务器上必须开启 ICMP 服务,ICMP服务收到ping数据包会反馈一个接收消息。
案例:
ping tmooc.cn正在 Ping tmooc.cn [123.59.57.97] 具有 32 字节的数据:
来自 123.59.57.97 的回复: 字节=32 时间=2ms TTL=48
来自 123.59.57.97 的回复: 字节=32 时间=3ms TTL=48
来自 123.59.57.97 的回复: 字节=32 时间=2ms TTL=48
来自 123.59.57.97 的回复: 字节=32 时间=3ms TTL=48
说明:
时间=2ms 表示网络延迟时间
TTL=48 用于表示跳数,用一个64(或128)减去这个数得出:16跳
每经过一个路由器TTL数字减一,如果最后一个路由器减到0时候就丢弃ICMP包。
检查服务Tomcat服务端口
命令
netstat -utnalp | grep 8080
显示结果:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 12380/java
说明 Java 进程 12380 正在监听 8080 端口
利用Telnet命令检查服务器端口:Telnet本身是进行远程登录的命令,已经废弃,替代是SSH命令。
安装:
yum install telnet
使用:
telnet localhost 8080
表示连接到本机的TCP8080端口返回如下结果表示连接成功
80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.返回如下结果表示连接失败
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
Trying ::1...
telnet: connect to address ::1: No route to host
Nginx
什么是Nginx
Nginx
- 俄罗斯人开发的一个Web服务器软件。
- Nginx 具有极好的并发性能!资源占用低。
- 用于解决高并发问题
- 利用Nginx与应用服务器组建反向代理负载均衡服务器集群。
- Nginx 充当前置代理机
- 据测算Nginx本身能够支持500000并发!
Web Server
- 开源Web Server(Windows Linux Unix)
- Nginx Apache
- 商业服务器
- MS IIS Server (Windows)
- Java
- 开源 Tomcat Jetty JBoss
- 商业 IBM WebSpare, Oracle WebLogic
安装Nginx
使用yum 安装nginx
-
安装
yum install nginx
-
启动
systemctl start nginx.service
-
配置文件
/etc/nginx/nginx.conf
使用源码安装
-
下载源码:
在 http://nginx.org/en/download.html 找到下载地址wget http://nginx.org/download/nginx-1.12.2.tar.gz
-
编译, 需要安装 gcc openssl 包
tar -zxvf nginx-1.12.0.tar.gzuseradd nginxcd nginx-1.12.0./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_modulemakemake install
-
启动nginx(使用root用户)
cd /usr/local/nginx/sbin./nginx -c /usr/local/nginx/conf/nginx.conf
-
检查Nginx是否正在运行
ps -A | grep nginxnetstat -utnalp | grep 80
-
配置防火墙,开启 80 端口
firewall-cmd --permanent --add-port=80/tcpfirewall-cmd --reload
-
再另外一个电脑上用浏览器访问服务器
Nginx 的配置文件
编译安装的配置文件:
/usr/local/nginx/conf/nginx.conf
yum安装的配置文件:
/etc/nginx/conf/nginx.conf
Nginx 配置文件结构:
通用参数
http{http 参数server{虚拟机参数location{文件位置}}server{...}
}
通用参数
user nginx; //Nginx的启动用户
worker_processes 1; //Nginx 进程数量,建议按照处理器个数设置error_log logs/error.log; //错误日志文件
#error_log logs/error.log notice;
#error_log logs/error.log info;pid logs/nginx.pid; //保存nginx进程号的文件events {worker_connections 2048; //每个进程可以开启的线程数
}
nginx配置文件中的#表示注释
nginx HTTP通用参数
include mime.types; //配置文件任何位置都可以使用include
default_type application/octet-stream;
access_log logs/access.log main; //保存访问日志
sendfile on; //发生文件
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65; //设置服务器保持连接等待时间
#gzip on; //支持响应压缩技术
nginx 虚拟主机设置
虚拟主机: 复用同一台服务器,为多个网站提供服务。 对于客户端干就是两个主机一样。
虚拟主机方式有3种
- 基于IP的虚拟主机
- 基于端口的虚拟主机
- 基于域名的虚拟主机,这个方式最常用的方式。
案例测试步骤:
-
客户端利用hosts文件模拟解析域名,实际工作中可以利用DNS服务解析域名:
修改客户端/etc/hosts文件,添加:192.168.22.21 laowang.com192.168.22.21 laoli.com
-
修改服务器nginx配置文件
修改服务器端 /usr/local/nginx/conf/nginx.conf 添加:server {listen 80;server_name laowang.com;charset utf-8;location / {root web1;index index.html index.htm;}}server {listen 80;server_name laoli.com;charset utf-8;location / {root web2;index index.html index.htm;}}
-
利用nginx 测试配置文件:
nginx -t /usr/local/nginx/conf/nginx.conf
-
重写加载配置文件:
nginx -s reload或者关闭再重写启动nginx -s stopnginx -c /usr/local/nginx/conf/nginx.conf
-
客户端测试,利用浏览器访问域名或者:
wget http://laowang.com/index.htmlwget http://laoli.com/index.html
在阿里云配置Nginx虚拟主机
- 配置域名解析:
解析两个域名t1.canglaoshi.org --> ipt2.canglaoshi.org --> ip
-
安装 nginx
yum install nginx
-
修改nginx配置文件 /etc/nginx/nginx.conf:
server {listen 80;server_name t1.canglaoshi.org;location / {root web1;index index.html index.htm;}}server {listen 80;server_name t2.canglaoshi.org;location / {root web2;index index.html index.htm;}}
-
添加文件夹和文件
cd /usr/share/nginxmkdir web1mkdir web2
添加文件 web1/index.html
Hello web1!
添加文件 web2/index.html
Hello web2!
-
测试配置
nginx -t -c /etc/nginx/nginx.conf
-
启动nginx
systemctl start nginx.service
-
停止
systemctl stop nginx.service
-
重启动
systemctl restart nginx.service
-
浏览器测试:
http://t1.canglaoshi.orghttp://t2.canglaoshi.org
HTTPS 虚拟主机
支持HTTPS加密的虚拟主机,应用十分广泛:
其原理是在SSL加密的TCP通信基础上进行 HTTP 通信:
服务器配置步骤:
-
重新编译nginx增加ssl模块
useradd nginxcd /usr/local/nginx/nginx-1.12.0./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_modulemakemake install
-
更新nginx.conf增加ssl主机配置
server {listen 443;server_name tts.canglaoshi.org;ssl on;ssl_certificate cert/214438499540580.pem;ssl_certificate_key cert/214438499540580.key;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;location / {root web3;index index.html index.htm;}}
-
下载 证书文件 cert.zip 释放 到 /usr/local/nginx/conf/cert
/usr/local/nginx/conf/cert|-- 214438499540580.pem|-- 214438499540580.key
-
添加web文件
/usr/local/nginx/web3/index.html
-
在防火墙上开启端口 443
firewall-cmd --permanent --add-port=443/tcpfirewall-cmd --reload
-
测试nginx配置文件
nginx -t -c /usr/local/nginx/conf/nginx.conf
-
关闭nginx重新启动
nginx -s stopnginx -c /usr/local/nginx/conf/nginx.conf
-
修改客户端 hosts 文件解析域名
192.168.22.21 tts.canglaoshi.org
-
用浏览器测试
https://tts.canglaoshi.org 或者 wget https://tts.canglaoshi.org/index.html
添加用户功能
命令:
useradd 用户名
案例:
useradd tom
cat /etc/passwd|grep tom
为用户设置密码:
命令
passwd 用户名
案例:
passwd tom
删除用户
命令
userdel 用户名
案例:
userdel tom
Nginx
反向代理
利用服务器代理用户上网称为正向代理,相反利用服务器代理应用服务器提供网络服务称为反向代理。
搭建反向代理服务器群的目的就是为了解决“高并发”问题。
Nginx反向代理集群搭建
搭建环境设计:
搭建步骤:
-
配置并且启动Tomcat服务器
- 更新Tomcat的首页文件 tomcat/webapps/ROOT/index.jsp
- 设置Tomcat启动脚本执行权限:
chmod +x tomcat/bin/*.sh
- 在防火墙上开启 8080 端口
- 启动Tomcat
tomcat/bin/startup.sh
- 检查tomcat是否成功提供服务
-
配置第二台tomcat
-
更新添加集群配置文件 toms.conf
upstream toms {server 192.168.27.113:8080;server 192.168.27.140:8080;}server {listen 80;server_name toms.canglaoshi.org;access_log logs/toms.log;error_log logs/toms.error.log;index index.html index.htm index.jsp ;## send request back to apache ##location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;proxy_max_temp_file_size 0;proxy_connect_timeout 90;proxy_send_timeout 90;proxy_read_timeout 90;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;proxy_pass http://toms;}}
-
更新 nginx 配置文件nginx.conf,引用toms.conf
include toms.conf;
-
测试 nginx 配置文件
nginx -t -c /usr/local/nginx/conf/nginx.conf
如果测试出现问题,请根据提示更正
-
重新启动Nginx
nginx -s reload
-
更新客户端hosts文件,解析域名
192.168.27.63 toms.canglaoshi.org
windows的hosts文件位置:
C:/Windows/system32/driver/etc
-
利用浏览器访问,测试
http://toms.canglaoshi.org
Nginx 的负载均衡分配方案
Nginx 包含4种分配策略
- 轮询(默认)逐个转发请求
- 可以指定权重,权重大的服务器分担的任务重
- weight 指定权重
- ip_hash 根据客户端的IP地址分配固定的服务器
- 可以将用户与服务对应有利于保持Session
- fair:需要使用 fair模块
- url_hash: 第三方模块,根据URL映射到固定服务器
ip_hash 原理:
服务器配置
配置轮询权重
upstream toms {server 192.168.27.113:8080 weight=10;server 192.168.27.140:8080 weight=20;}
撤掉服务器
upstream toms {server 192.168.27.113:8080 weight=10;server 192.168.27.140:8080 down;}
备份服务器
upstream toms {server 192.168.27.113:8080 weight=10;server 192.168.27.140:8080 backup;}
失败时间
upstream toms {server 192.168.27.113:8080 weight=10;server 192.168.27.140:8080 ;fail_timeout 30;}
Redis
什么是Redis
- Redis是一种key-value内存数据库
- 底层算法就是散列表
- 性能极佳,查询110000次/秒,写80000次/秒
- 提供了持久化支持。
- Redis的Value支持5种数据类型,使用方便。
Redis查询性能非常优秀:在软件中经常做为数据库的缓存,提供软件的性能,也就是用于解决“高性能”问题。
Redis的用途
- 数据库缓存
- Redis共享Session
安装Redis
1. yum 安装
命令:
yum install redis
启动
systyemctl start redis.service
检查
ps -A|grep redis
2. 编译安装
-
下载redis
wget ...
-
编译安装
cd redis-3.0.0makemake install
-
位置:
/usr/local/redis/redis-3.0.0
-
启动redis
cd /usr/local/redis/redis-3.0.0/src./redis-server
redis-server命令启动Redis服务器以后,当前窗口就被占用了,不能关闭! 关闭或者 Ctrl+c 就是关闭Redis数据库。
Redis 命令
利用Redis客户端访问Redis数据库
String 类操作命令
-
帮助手册
help @string
-
set 命令
set KEY VALUE
-
get 命令
get KEY//返回Value
-
setrange
-
修改字符串的内容
setrange KEY 起始位置 替换值
SET message “Hello World”
SETRANGE message 6 “Redis”
GET message
“Hello Redis”
-
-
strlen 检查字符串Value的长度
SET message "Hello World"STRLEN message11
-
操作字符中的位
//设置位SETBIT times 0 1SETBIT times 1 1SETBIT times 4 1get times"0xc8" // 2进制: 1100 1000 //统计1的个数 BITCOUNT times3
-
增加与减少
set score 100 incr score //增加1get score101 decr score //减少1get score100incrby score 50 //将score增加50decrby score 50 //将score减少50
-
浮点数增加与减少
INCRBYFLOAT price 0.2INCRBYFLOAT price -0.2
-
批量添加数据 批量查询数据
mset key1 value1 key2 value2 key3 value3mget key1 key2 key3
Hash类型
value是一个Hash表,用于存储对象数据:
操作指令
//添加属性
hset key 属性名 属性值
//批量添加属性
hmset key 属性名1 属性值1 属性名2 属性值2 属性名3 属性值4
//获取一个属性
hget key 属性名1
//获取一组属性
hmget key 属性名1 属性名2 属性名3
//获取全部key
hkeys key
//获取全部的值
hvals key
//获取全部Hash对象信息
hgetall key
List
存储到Redis中的value是一个List,其用途是充当缓冲队列
操作命令:
lpush
lpop
rpush
rpop