1 安装软件和配置环境
1.1 安装Virtualbox
如果空间足,修改盘符
1.2 安装Vagrant
配置环境变量,变量名:VAGRANT_HOME 变量值建议修改
1.3 安装centos7虚拟机
下载box,修改vagrantfile和bootstrap.sh
1.4 准备box
列出box vagrant box list
把刚才下载的box添加到vagrant中 vagrant box add centos_v1 ./centos_ v1.box 删除box vagrant box remove centos-travel
1.5 安装虚拟机
vagrant up 必须在vagrantfile的目录下进行
使用MobaXterm连接刚才安装的3个服务器192.168.56.71,72,73(例)
2 自定义box
打包当前虚拟机,产生一个自定制的box 例: vagrant package --base s1 --outputcentos_v2.box 把centos_v2添加到vagrant中 vagrant box add centos_v2 ./centos_v2.box
修改Vagrantfile,设置box使用centos_v2
注意:打包之前先关闭虚拟机并删除,
标准的虚拟机box没有vim
安装vim:yum install vim -y 打开虚拟机:vagrant up (例:s1) 关闭虚拟机:vagrant halt(例:s1) 删除虚拟机:vagrant destroy(例:s1)
3 常用命令
3.1 基本目录结构
一些命令:
- bin (binaries)存放二进制可执行文件
- sbin (super user binaries)存放二进制可执行文件,只有root才能访问
- etc (etcetera)存放系统配置文件
- usr (unix shared resources)用于存放共享的系统资源
- home 存放用户文件的根目录
- root 超级用户目录
- dev (devices)用于存放设备文件
- lib (library)存放跟文件系统中的程序运行所需要的共享库及内核模块
- mnt (mount)系统管理员安装临时文件系统的安装点
- boot 存放用于系统引导时使用的各种文件
- tmp (temporary)用于存放各种临时文件
- var (variable)用于存放运行时需要改变数据的文件
3.2 快捷键
- ctrl+l:清屏 = clear命令
- tab:自动补全
- 方向的上下键:历史命令=history
- ctrl + c:停止进程
- ctrl + r:搜索历史命令
- \:命令结束表示换行
- ctrl+f:下一页
- ctrl+b:上一页
- :q退出
3.3 打印命令
echo
echo hello v3 > v3.txt #覆盖到文件里
echo hello v3 >> v3.txt #追加文件里
3.4 ls命令 查看文件
- -l (long)详细列表
- -a (all) 显示隐藏文件、特殊目录.和..
- ll = ls -l
3.5 man命令 查看命令的帮助
例:man ls
4 文件或目录常用命令
4.1 cd 进入目录
cd ~ 进入用户的宿主目录
cd .. 进入上级目录
./ 不写,都是代表当前目录
cd - 进入上一个历史目录
4.2 pwd 显示当前工作目录(print working directory)
4.3 su 切换用户
使用vagrant安装的虚拟机默认2个用户
- 用户名:vagrant ,密码vagrant
- 用户名:root,密码vagrant
su root 或者su vagrant 密码都是vagrant
4.4 mkdir 创建目录(make directoriy)
后边加个-p 可以在父目录不存在情况下先生成父目录 (parents)
例:mkdir -p /home/vagrant/java-project/src
4.5 tree 以树列表目录
需要切换到root用户,然后 yum install -y tree ,再切回vagrant用户
例:tree java-project
4.6 touch创建空文件
cd +目录,然后创建 例:touch Hello.java
4.7 cp 拷贝文件,目录
-r:递归拷贝
例:cp java-project/src/Hello.java ./java-project/src/main/java/ tree java-project/
cp -r java-project/resources/ java-project/src/main/ tree java-project/
4.8 rm 删除文件或者目录
- -r:递归删除
- -f:强制删除
例:rm java-project/src/Hello.java
4.9 mv 移动文件和目录
例:mv java-project/resources/ java-project/src/main/
mv可以修改文件名
例: mv java-project/src/main/java/Hello.java java-project/src/main/java/HelloWorld.java
4.10 cat 显示文本文件内容 (catenate)
cat OAuth2Config.java(例)
cat a.txt > b.txt #把a.txt内容覆盖到b.txt
cat a.txt >> b.txt #吧a.txt追加到b.txt
4.11 more、less 分页显示文本文件内容
例: more OAuth2Config.java 显示文本前几页内容
less OAuth2Config.java 显示文本后几页内容
4.11 head
-n: 显示前几行内容 例: head -n 10 OAuth2Config.java
4.12 tail
-n 显示后几行数据 例:tail -n 10 OAuth2Config.java
-f b.log 循环读取(fellow,即时读取) 例:tail -n 20 -f OAuth2Config.java
4.13 wc 统计文本的行数、字数、字符数(word count)
-m 统计文本字节数
-w 统计文本字数
-l 统计文本行数
例:wc -w -l -m a.txt
4.14 find 查找文件
例:
find -name Hello*.java
[vagrant@s1 ~]$ tree java-project/
java-project/
└── src
├── java -> app
├── main
│ ├── java
│ │ └── HelloWorld.java
│ └── resources
│ └── db
│ └── jdbc.properties
└── test
6 directories, 3 files
[vagrant@s1 ~]$ find -name Hello*.java
./java-project/src/main/java/HelloWorld.java
[vagrant@s1 ~]$ find -name jdbc.*
./java-project/src/main/resources/db/jdbc.properties
4.15 grep 查找文本
-i
:忽略大小写进行匹配。-v
:反向查找,只打印不匹配的行。-n
:显示匹配行的行号。-r
:递归查找子目录中的文件。-l
:只打印匹配的文件名。-c
:只打印匹配的行数。
- -a 或 --text : 不要忽略二进制的数据。
- -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
- -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
- -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
- -c 或 --count : 计算符合样式的列数。
- -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
- -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
- -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
- -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
- -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
- -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
- -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
- -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
- -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
- -i 或 --ignore-case : 忽略字符大小写的差别。
- -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
- -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
- -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
- -o 或 --only-matching : 只显示匹配PATTERN 部分。
- -q 或 --quiet或--silent : 不显示任何信息。
- -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
- -s 或 --no-messages : 不显示错误信息。
- -v 或 --invert-match : 显示不包含匹配文本的所有行。
- -V 或 --version : 显示版本信息。
- -w 或 --word-regexp : 只显示全字符合的列。
- -x --line-regexp : 只显示全列符合的列。
- -y : 此参数的效果和指定"-i"参数相同。
例: grep class OAuth2Config.java -n -i -o
4.16 ln 格式
ln -s 目标地址 文件名
例:ln -s /home/vagrant/java-project/src/main/java/HelloWorld.java app
echo "hello spring" >> app 通过软连接添加内容
cat app 通过软连接查看文件内容
5 系统命令
5.1 du 显示指定的文件(目录)已使用的磁盘空间
- -h 显示单位
- -s 显示总的大小
例:cd ~
du -s -h
5.2 free 显示当前内存和交换空间的使用情况
5.3 netstat 显示网络状态信息,查看端口占用情况
- -a 显示所有连接和监听端口
- -t (tcp)仅显示tcp相关选项
- -u (udp)仅显示udp相关选项
- -n 拒绝显示别名,能显示数字的全部转化成数字。
- -p 显示建立相关链接的程序名
有的时候需要先安装命令 sudo yum install net-tools -y #sudo:得的管理员权限执行命令
例: netstat -tunpl
5.4 ifconfig 网卡网络配置详解
5.5 ping 测试网络的连通性
5.6 top 显示当前系统中耗费资源最多的进程 (实时)
5.7 ps 显示瞬间的进程状态(快照)
- -e /-A 显示所有进程,环境变量
- -f 全格式
- -a 显示所有用户的所有进程(包括其它用户)
- -u 按用户名和启动时间的顺序来显示进程
- -x 显示无控制终端的进程
例:ps -aux
5.8 kill 根据进程ID(pid)杀死进程
例:kill -9 3860
6 压缩和打包命令
6.1 gzip 把文件和目录压缩成gz格式
gzip OAuth2Config.java 压缩
gzip -d OAuth2Config.java.gz 解压
6.2 bzip2 以bzip2格式压缩和解压
bzip2 OAuth2Config.java 压缩
bzip2 OAuth2Config.java.bz2 -d 解压
6.3 tar(推荐)
- 打包目录成tar文件
- 整合gzip和bzip2压缩
- -c 建立一个压缩文件的参数指令(create)
- -x 解开一个压缩文件的参数指令(extract)
- -z 是否需要用 gzip 压缩
- -j 是否需要用 bzip2 压缩
- -v 压缩的过程中显示文件(verbose)
- -f 使用档名,在 f 之后要立即接档名(file)
例:
tar -cvf java-project.tar ./java-project/ #打包java-project目录
rm -rf java-project #删除java-project
tar -xvf java-project.tar
以gzip方式压缩
tar -czvf java-project.tar.gz ./java-project #z表示已gz格式压缩
tar -zxvf java-project.tar.gz #解压
以biz2方式压缩和解压
#压缩
tar -cjvf java-project.tar.bzip2 ./java-project
#解压
tar -xjvf java-project.tar.bzip2
7 vim命令
7.1 vim的模式
7.2 底行命令
- :wq保存退出
- :q! 不保存退出
- :q 退出,如果内容有改变不能退出
- :set number 显示行号
- :set nonumber 隐藏行号
- :w filename 另存为文件
- :e!撤销所有操作
- :行号:调到指定的行
7.3 移动命令
- w b 下一个,上一个单词
- 0, $ 行首,行尾
- gg 第一行
- G 最后一行
- xG到x行
7.4 替换命令
- :1,$s/private/public/g 将第一行到追后一行的private替换为public
- :1,$s/public/protected/c 将第一行到追后一行的public替换为protected(有提示)
7.5 编辑命令
- x删除一个字符
- dd 删除一行
- yy复制一行
- p粘贴
- 输入v进入选择模式,选择内容,输入y复制,调到要黏贴的位置输入p粘贴
- 输入u 撤销操作
- 在一般模式中输入/8080查找8080,输入n查找下一个
- 在一般模式输入r+替换的字符,执行替换
8 用户管理的配置文件
- 保存用户信息的文件:/etc/passwd
- 保存密码的文件:/etc/shadow
- 保存用户组的文件:/etc/group
- 保存用户组密码的文件:/etc/gshadow
- 用户配置文件:/etc/default/useradd
8.1 /etc/passwd格式
用户名 | 用户登陆系统的用户名 |
密码 | 密码位 |
UID | 用户标示号 |
GID | 默认组标示号 |
描述信息 | 存放用户的描述信息 |
宿主目录 | 用户登陆系统的默认目录,默认是在/home/下 |
命令解析器 | 用户使用的Shell,默认是bash |
用户的分类
- 超级用户:(root,UID=0)
- 普通用户:(UID在1000以上)
- 伪用户:(UID在1到999)
-
- 系统和服务相关的:bin、daemon、shutdown等
- 进程相关的:mail、news、games等
- 伪用户不能登陆系统,而且没有宿主目录
8.2 /etc/shadow格式
密码配置文件
用户名 | 登陆系统的用户名 |
密码 | 加密密码 |
最后一次修改时间 | 用户最后一次修改密码距现在的天数,从1970-1-1起 |
最小时间间隔 | 两次修改密码之间的最小天数 |
最大时间间隔 | 密码有效天数 |
警告时间 | 从系统警告到密码失效的天数 |
账号闲置时间 | 账号闲置时间 |
失效时间 | 密码失效的天数 |
标志 | 标志 |
8.3 用户的组
- 每个用户至少属于一个用户组
- 如果创建用户,没有指定组,此用户指定跟用户名同名组
- 每个用户组可以包含多个用户
- 同一个用户组的用户享有该组共有的权限
组名 | 用的所在的组 |
组密码 | 密码位,一般不使用 |
GID | 主标示号 |
组内用户列表 | 属于改组的用户列表 |
8.4 用户和组管理命令
8.4.1用户管理命令
- useradd:添加用户
-
- -u 指定组ID(uid)
- -g 指定所属的组名(gid)
- -G 指定多个组,用逗号“,”分开(Groups)
- -c 用户描述(comment)
- -e 失效时间(expire date)
- usermod:修改用户
- -l 修改用户名 (login)usermod -l a b(b改为a)
- -g 添加组 usermod -g sys tom-G添加多个组 usermod
- -G sys,root tom–L 锁定用户账号密码(Lock)
- –U 解锁用户账号(Unlock)
- userdel:删除用户
- -r 删除账号时同时删除目录(remove)
8.4.2 组管理的命令
- 添加组:groupadd
-
- -g 指定gid
- 修改组:groupmod
-
- -n 更改组名(new group)
- 删除组:groupdel
- groups 显示用户所属组
例:
添加一个jack用户,设置它属于users组,并添加注释信息
useradd jack
usermod -g users jack
usermod -c "hr jack" jack
#等于上面三个命令
useradd -g users -c "hr jackson" jackson
设置密码
passwd jack
将jack添加到sys和root组中
usermod -G sys,root jack
usermod -G sys,root jackson
把jackson从sys组中删除
gpasswd -d jackson sys
显示jack的组
groups jack
groups jackson
groups root
groups vagrant
添加一个hr组
groupadd hr
修改hr组为sale组
groupmod -n sale hr
jack添加到sale组
usermod -G sale jack
groups jack
9 权限管理
9.1 权限表示符号
例:
- 第1位:文件类型(d 目录,- 普通文件,l 链接文件)
- 第2-4位:所属用户权限,用u(user)
- 表示第5-7位:所属组权限,用g(group)表示
- 第8-10位:其他用户权限,用o(other)表示第
- 2-10位:表示所有的权限,用a(all)表示
三种基本权限
- r 读权限(read)4
- w 写权限(write)2
- x 执行权限 (execute)1
9.2 chmod命令 chmod修改文件权限命令(change mode)
- 参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)
- 两种方式
-
- 例如:chmod u+x a.txt,给a.txt增加当前用户的执行权限
- 用数字来表示权限(r=4,w=2,x=1,-=0) 例如:chmod 750 b.txt :表示b.txt的权限当前用户是rwx,当前用户的组rx,其他用户没有权限
两种方式修改权限:
#方式1
chomod u+rwx,g-w,o-rwx ~/OAuth2Config.java
#方式2
chmod 750 OAuth2Config.java
9.3 chown 改变文件所属用户,文件所属的组
- -R:递归
例:chown root:users OAuth2Config.java 把OAuth2Config.java的用户和组修改为root和users
10 在虚拟机安装JDK
10.1 把文件拖到虚拟机里,root根目录下
10.2 创建安装目录
一般程序安装的目录/user/local
mkdir /usr/local/java 创建一个java目录
10.3 移动安装文件到目录
mv ~/jdk-8u11-linux-x64.tar.gz /usr/local/java/
10.4 解压文件
tar -zxvf jdk-8u11-linux-x64.tar.gz
10.5 配置Java环境变量
- JAVA_HOME:java程序访问的jdk根目录,比如tomcat就要访问这个目录
- path:命令的寻址目录
whereis java #查找java在哪
vim /etc/profile
#输入G到文件末尾,增加2个环境变量
JAVA_HOME=/usr/local/java/jdk1.8.0_11
export PATH=$JAVA_HOME/bin:$PATH
#从新加载文件
source /etc/profile
java -version
...JDK1.8
10.6 HelloWorld实验
cd ~
vim Hello.java
在文件里输入:
public class Hello {
public static void main(String[] args) {
System.out.println("hello java");
}
}
编译:javac Hello.java
运行:java Hello
11 安装tomcat
11.1 把文件拖到虚拟机,根目录root里
11.2 创建目录解压
mv ~/apache-tomcat-8.5.56.tar.gz /usr/local/java
tar -zxvf apache-tomcat-8.5.56.tar.gz
11.3 运行
/usr/local/java/apache-tomcat-8.5.56/bin/startup.sh #启动
#cd /usr/local/java/apache-tomcat-8.5.56/bin
#./startup.sh
jps #java的一个工具,跟javac一样,查看java的进程
netstat -tunpl
11.4 测试
在宿主机浏览器访问http://192.168.56.71:8080/index.jsp
测试修改/usr/local/java/apache-tomcat-8.5.56/webapp/ROOT/index.jsp
vim /usr/local/java/apache-tomcat-8.5.56/webapp/ROOT/index.jsp
使用curl命令:
curl http://localhost:8080/index.jsp
12 安装Mysql
12.1 下载Mysql
下载地址 MySQL :: Download MySQL Community Server (Archived Versions),如图9-12所示。
图9-12 mysql下载
12.2 安装
拷贝mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz到/root目录下
cd ~ tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
解压完成后重命名
mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql-5.7.28 mv mysql-5.7.28 /usr/local/
检查mysql组和用户是否存在,如果没有则创建
cat /etc/group|grep mysql groupadd mysql useradd -r -g mysql mysql #useradd -r参数表示mysql用户是系统用户,不可用于登录系统
安装数据库
创建data目录 cd /usr/local/mysql-5.7.28 mkdir data
将/usr/local/mysql-5.7.28的所有者及所属组改为mysql
chown -R mysql.mysql /usr/local/mysql-5.7.28
在/usr/local/mysql-5.7.28/support-files目录下创建my_default.cnf
cd /usr/local/mysql-5.7.28/support-files vim my_default.cnf
具体配置内容如下:
[mysqld]
#设置mysql的安装目录
basedir =/usr/local/mysql-5.7.28
#设置mysql数据库的数据存放目录
datadir = /usr/local/mysql-5.7.28/data
#设置端口
port = 3306
socket = /tmp/mysql.sock
#设置字符集
character-set-server=utf8
#日志存放目录
log-error = /usr/local/mysql-5.7.28/data/mysqld.log
pid-file = /usr/local/mysql-5.7.28/data/mysqld.pid
#允许时间类型的数据为零(去掉NO_ZERO_IN_DATE,NO_ZERO_DATE)
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
拷贝配置文件,是否覆盖,是
cp my_default.cnf /etc/my.cnf
初始化Mysql
cd /usr/local/mysql-5.7.28/
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql-5.7.28/ --datadir=/usr/local/mysql-5.7.28/data/
如果报错:./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or 就安装libaio,如果没有则跳过
yum install libaio
初始化完成之后查看日志
cat /usr/local/mysql-5.7.28/data/mysqld.log
蓝框里的是临时密码,如图9-13所示。
图9-13 mysql默认密码
把启动脚本放到开机初始化目录
cp support-files/mysql.server /etc/init.d/mysql
启动mysql
service mysql start
进入mysql并更改密码
cd /usr/local/mysql-5.7.28
./bin/mysql -u root -p 上面生成的初始化密码
mysql> set password=password('123456');
mysql> grant all privileges on *.* to root@'%' identified by '123456';
mysql> flush privileges;
添加远程访问权限
mysql> use mysql;
mysql> update user set host='%' where user = 'root';
mysql> flush privileges;
如果更改时报错:ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY',就先查询一下是否已更改,最后执行刷新。
重启mysql生效
service mysql restart
12.3 常用命令
●启动service mysql start
●关闭service mysql stop
●重启service mysql restart