1 Linux 目录结构
常用目录说明
root管理员所在目录
home普通用户的主目录
bin所有的命令可执行文件所在目录
etc系统配置文件所在的目录
usrUnix Share Resource,资源目录,很多软件就安装在这个目录下
2 Linux命令提示符
3 目录操作命令
cd [OPTION] [DIR]
Change the current directory to dir, 切换当前路径
dir
. 当前目录
.. 上一级目录
~ 用户主目录
- 上一次的目录
举个栗子:
切换到系统根目录 cd /
切换到该目录下usr目录 cd usr
切换到上一层目录 cd ..
切换到用户主目录,如果是root管理员,则是到root目录
cd /root
或:
cd ~
切换到上一个所在的目录
cd -
mkdir [OPTION] DIRECTORY
Make directories, 创建目录
举个栗子:
进入root目录
cd ~
在root目录下创建aaa目录
mkdir aaa
使用.方式的相对路径,在当前目录下创建bbb目录
mkdir ./bbb
在root目录下,在bbb目录下创建ccc目录
mkdir ~/bbb/ccc
使用..在上一级目录下创建eee目录
mkdir ../eee
使用绝对路径在root下创建目录fff目录
mkdir /root/fff
【重点】ls [OPTION] [FILE]
List directory contents, 显示目录内容
参数
-l
以详细的方式显示文件和目录。ls -l可以缩写成ll
-a
显示所有的文件和目录包含隐藏的文件和目录
隐藏的文件和目录以 . 开头
举个栗子:
进入root目录,以精简形式查询当前目录下的内容
cd /root
cd ~
ls
以详细形式查询当前目录下的内容,可以缩写成ll
ls -l
ll
在当前目录下创建一个隐藏的目录.ccc
mkdir .ccc
以精简形式查询当前目录下的所有的内容,包含隐藏文件
ls -a
以详细形式查询当前目录下的隐藏内容,-la和-al都可,也可以使用ll -a
ls -al
ll -a
第一列字母含义
字母含义
ddirectory, 目录
-文件
l 链接,类似快捷方式
find [PATH] [-name pattern]
search for files in a directory hierarchy, 搜索目录树上的所有文件
参数
-name pattern
指定要查询的字符串
* 匹配多个字符
? 匹配1个字符
举个栗子:
在/root目录下,查询当前目录下所有的文件和目录
cd /root
find -name *
查询/根目录下(包括子目录),名以abc开头的目录和文件
cd /
find -name abc*
查询根目录即其子目录下以cc开头的三个字符的目录或文件
cd /
find -name cc?
1.按照文件名查找
(1)find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找
(2)find /etc -name httpd.conf #在/etc目录下文件httpd.conf
(3)find /etc -name '*srm*' #使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
(4)find . -name 'srm*' #表示当前目录下查找文件名开头是字符串‘srm’的文件
2.按照文件特征查找
(1)find / -amin -10 # 查找在系统中最后10分钟访问的文件(access time)
(2)find / -atime -2 # 查找在系统中最后48小时访问的文件
(3)find / -empty # 查找在系统中为空的文件或者文件夹
(4)find / -group cat # 查找在系统中属于 group为cat的文件
(5)find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件(modify time)
(6)find / -mtime -1 #查找在系统中最后24小时里修改过的文件
(7)find / -user fred #查找在系统中属于fred这个用户的文件
(8)find / -size +10000c #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
(9)find / -size -1000k #查找出小于1000KB的文件
3.使用混合查找方式查找文件
参数有: !,-and(-a),-or(-o)。
(1)find /tmp -size +10000c -and -mtime +2 #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
(2)find / -user fred -or -user george #在/目录下查找用户是fred或者george的文件文件
(3)find /tmp ! -user panda #在/tmp目录中查找所有不属于panda用户的文件
mv [OPTION] SOURCE DEST
move (rename) files, 移动、重命名文件或目录
举个栗子:
将root文件夹下的aaa目录改成abc
cd /root
mv aaa abc
使用touch创建一个空文件为aaa,再使用mv将aaa文件改名为xyz
touch aaa
mv aaa xyz
cp [OPTION] SOURCE DEST
copy files and directories, 复制文件或目录
参数
-r 递归复制目录,连同子目录一起复制,recursive
举个栗子:
当前是root目录,复制/proc/dma文件到root目录下的bbb目录中
cp /proc/dma ./bbb
将/etc目录下所有c开头的文件复制到root目录下的bbb目录下
cp -r /etc/c* /root/bbb
将/etc目录下所有h开头的文件和目录复制到root目录下的eee目录,连同子目录下的内容一起复制
cp -r /etc/h* /root/eee
rm [OPTION] FILE
remove files or directories, 移除文件或目录
参数
-r, 递归地移除目录中的内容。recursive
-f, 忽略不存在的文件,并且从不向用户提示。force
举个栗子:
同时删除eee目录下的hostname和hosts文件
rm /root/eee/hostname*
rm /root/eee/hosts
进入root下的bbb目录,删除所有文件名csh,任意扩展名的文件
rm csh.*
进入root目录下的eee目录,递归删除httpd目录和所有子目录的文件,不进行确认,强制删除。
rm -rf httpd
【常用】man
an interface to the on-line reference manuals, 在线参考手册
举个栗子:
查看mkdir命令的参考手册
查看ls命令的参考手册
4 文件操作命令
相关命令概要
cat [OPTION] [FILE]
concatenate files and print on the standard output, 显示文件内容
more [OPTION] FILE
file perusal filter for crt viewing, 在显示器上阅读文件的过滤,分页显示文件
[Enter] 逐行显示
[Space] 逐页显示
[Q] 退出
head [OPTION] [FILE]
output the first part of files, 输出文件的开始部分
参数
-n 显示指定的前n行,默认10行
tail [OPTION] [FILE]
output the last part of files, 输出文件的末尾部分
-n 显示指定的后n行,默认10行
less [OPTION] [FILE]
opposite of more, 分页或翻页显示文件内容
参数
-N 显示行号
[Ctrl + U]向上翻一页
[PageUp]向上翻一页
[Ctrl + D]向下翻一页
[PageDn]向下翻一页
[Q] 退出
touch [OPTION] FILE
change file timestamps, 修改文件的时间戳,创建一个文本文件,长度是0个字节
举个栗子:
查看当前目录下Demo.java文件的全部内容
cat Demo.java
分页查看当前目录下Demo.java文件内容,按回车键一行一行的看,按空格健一页一页的看
more Demo.java
查看当前目录下Demo.java文件的前10行内容
head Demo.java
查看当前目录下Demo.java文件的后10行内容
tail Demo.java
查看当前目录下Demo.java文件的前5行内容
head -n 5 Demo.java
查看当前目录下Demo.java文件的后5行内容
tail -n 5 Demo.java
使用less命令显示Demo.java文件,显示行号
less -N Demo.java
5 vim文本编辑器
vim的三种模式
模式说明
命令模式可以移动光标、删除字符等操作,打开文件时即进入这个模式
编辑模式在此模式下可以输入字符,进行编辑等操作
底行模式可以输入命令对编辑的文件进行查找,保存,退出等操作
vim三种模式的切换
vim命令
命令描述
i在光标的前面插入字符
a在光标的后面插入字符
o在光标的下一行插入字符
yy复制当前行
p如果之前已经复制了这个就可以粘贴
dd删除当前行
u撤销前面的操作undo
/字符串在内容中搜索指定的字符串 n:向后继续查找 N:向前继续查找
wq保存并退出
q!强制退出,不保存
wq!强制保存退出,用于只读文件
操作演示
vim Hello.java 用vim编辑器创建/打开Hello.java文件,这时进入命令模式。
按i键,进入编辑模式,输入以下内容:
publicclassHello{
publicstaticvoidmain(String[]args) {
System.out.println("Hello!");
}
}
按Esc键,进入命令模式,按冒号进入底行模式
输入:wq回车,表示存盘退出
使用cat Hello.java查看文件的内容
使用vim打开Hello.java文件,进入命令模式。
将光标移动到System.out这一行,按yy复制
按3次p,粘贴这一行三次
publicclassHello{
publicstaticvoidmain(String[]args) {
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
}
}
按dd删除最后一行
按i进入编辑模式
再任意输入一些内容
在按Esc进入命令,按冒号进入底行模式
输入q!回车,不存盘强行退出。
使用cat Hello.java发现Hello.java没有变化
6 压缩与解压命令
压缩文件扩展名
扩展名分类
.zip或.rar在windows下两种压缩文件格式
.tar在Linux下打包文件,不一定压缩
.gz在Linux下压缩文件
.tar.gz既打包又压缩
tar
manipulate tape archives, 操作压缩文件
参数
-c, --create, 压缩文件
-v, --verbose, 详细显示处理的文件
-z, --gzip, --ungzip, 用 gzip 对存档压缩或解压
-f, --file [HOSTNAME:], 指定存档
-x, --extract, --get, 从存档展开文件
-C, --directory DIR, 转到指定的目录
举个栗子:
定位于root目录,将当前目录下的Hello.java和Hello.txt文件打包成hello.tar文件,并显示详细信息。
tar -cvf hello.tar Hello.java Hello.txt
将当前目录下的Demo.* 打包并压缩成demo.tar.gz文件,显示详细信息。
tar -zcvf demo.tar.gz Demo.*
定位于root目录下,删除所有大写的Hello开头的文件
rm -rf Hello*
解压hello.tar到当前目录
tar -xvf hello.tar
释放demo.tar.gz文件到abc目录下
tar -zxvf demo.tar.gz -C abc
7 其它命令
pwd
print name of current/working directory, 显示当前工作目录
ps
process status, 查看进程状态
Linux进程
操作系统启动的时候自动启动的进程
由用户在终端上(命令行中)输入的进程
Bash进程
每个用户登录以后都会分配一个终端操作的进程
这个进程是所有终端命令的父进程,不要随意终止这个进程
参数
-a, 显示所有用户在终端上启动的进程
-u, 显示所有用户在终端启动的进程的详细信息
-x, 显示所有用户启动的所有进程
举个栗子:
在客户端中显示当前用户通过终端启动的所有进程
ps
在Linux命令行窗口运行vim Hello.txt编辑文件,显示所有用户通过终端启动的所有进程。
ps -a
显示所有用户通过终端启动的所有进程详细信息
ps -au
显示所有用户所有进程详细信息
ps -aux
输出说明
列标题说明
%CPUCPU(处理器)使用百分比
%MEM真实内存使用百分比
CMD正被执行的命令的名称
COMMAND正被执行的命令的完整名称
PID进程ID
PPID父进程的进程ID
RSS内存驻留空间大小(内存管理)
START定时启动的时间
STAT状态代码(O, R, S, T, Z)
TIME积累CPU时间
TTY控制终端的完整名称(?表示没有控制终端,该进程为守护进程)
USER用户名
VSZ虚拟大小(单位为KB)
kill [-9] signal
terminate a process, 终止进程
参数
-9 强行终止
操作演示
在Linux命令行上使用vim 编辑Hello.txt文件
在shell客户端,显示所有用户通过终端启动的所有进程,并杀死vim这个进程。
在Linux命令行可以看到进程被终止
在Linux命令行使用ping www.itcast.cn
在shell客户端,显示所有用户通过终端启动的所有进程,并强行杀死ping这个进程
在Linux命令行可以看到进程被杀掉
grep [OPTIONS] PATTERN [FILE...]
print lines matching a pattern, 打印匹配给定模式的行
参数
-n, --line-number, 在输出的每行前面加上它所在的文件中它的行号
-v, --invert-match, 选择不匹配的行
-i, --ignore-case, 忽略大小写
举个栗子:
在Demo.java中搜索close字符串
grep close Demo.java
在Demo.java中搜索close字符串,并且显示行号
grep close Demo.java -n
在Demo.java中搜索没有close的行和行号
grep close Demo.java -nv
在Demo.java中忽略大小写搜索insert字符串并且显示行号
grep insert Demo.java -ni
|
管道命令
语法
命令1 | 命令2
解释
将一个命令(命令1)的执行结果做为另一个命令(命令2)的条件输入
操作演示
分屏显示/etc目录所有文件的详细信息,将ll的输出做为more的输入,即分屏显示。
ll /etc | more
在root目录下使用ll显示所有文件的详细信息,再在显示结果中使用grep查询Demo字符串
ll /root | grep Demo
显示Linux中所有进程的详细信息,查询ssh的字符串
ps -ax | grep ssh
shutdown
halt, power-off or reboot the machine, 停止、关闭或重启机器
参数
now, 立即关机
poweroff
同shutdown now
reboot
重启系统
8 权限操作
Linux中对每个目录和文件都做了规定,只能由满足条件的用户才能操作这个目录或文件,这个规定叫权限。
用户和组的概念
概念解释
属主目录或文件的所有者
属组所有者所在的组
其他用户其他用户和组
权限位
权限字母-权限数字对照
权限字母权限数字说明
r4Read 读取
w2Write 写入
x1eXecute 执行
-0没有权限
权限范围
权限范围说明
u User 属主
g Group 属组
o Other 其他用户
a All 上面所有的用户
权限操作
权限符号说明
+添加权限
=修改权限
-删除权限
chmod MODE FILE
change file mode bits
示例
添加权限
chmod u+x Demo.java
Demo.java,属主,添加可运行权限
chmod g+wx Demo.java
chmod a+rwx Demo.java
chmod u+x, o+w Demo.html
修改权限
chmod u=rwx, g=w, o=x Hello.txt
chmod 666 Hello.txt
删除权限
chmod 000 Demo.java
chmod u-w, g-w, Hello.txt
9 任务调度命令
crontab [OPTION]
maintains crontab files for individual users, 定时执行指定
参数
-l, 显示当有已经设置好的定时执行的任务
-e, 使用vim编辑任务
-r, 删除定时任务
定时任务的配置
一行写一个任务
每个任务有6个列,前面5列是时间,最后1列是要执行的命令
格式说明
分 时 日 月 周 命令
minute表示分钟,可以是从0到59之间的任何整数。
hour表示小时,可以是从0到23之间的任何整数。
day表示日期,可以是从1到31之间的任何整数。
month表示月份,可以是从1到12之间的任何整数。
week表示星期几,可以是从0到7之间的任何整数,0或7代表星期日,1-6表示星期一到六。
command要执行的命令
特殊字符
特殊字符说明
星号(*)代表所有可能的值。如:*,用在月上,表示每月执行;用在分上,表示每分执行
逗号(,)用逗号隔开的值指定某几个时间点。如:1,2,5,用在小时上,表示1点,2点,5点
短横(-)表示一个整数范围。如:2-6,用在日上,表示2号到6号
正斜杠(/)指定时间的间隔频率。如: 0-10/2,用在小时上,表示0点到10点中每两小时执行一次。 与星号一起使用。如: /10,用在分钟字段,表示每10分钟执行一次。
>>指定输出的设备如: * * * * * date >> /root/mydate.log
* * * * * command
每分钟执行一次
30 21 * * * command
每天的晚上9点30分
3,15 * * * * command
每小时的第3分和第15分钟执行
5,10 8-11 * * * command
每天的8点到11点的第5分和第10分钟
*/2 * * * * command
每过2分钟执行1次
date
print or set the system date and time, 打印或设置系统日期和时间
第三部分 Linux 深入
1 主机名配置
hostname
show or set the system's host name, 显示或临时设置系统的主机名
hostname [HOSTNAME]
临时设置主机名为HOSTNAME。如果hostname没有任何参数,显示主机名。
hostnamectl
control the system hostname, 永久设置系统的主机名
hostnamectl set-hostname [HOSTNAME]
永久设置主机名为HOSTNAME
举个栗子:
查看当前的主机名
hostname
设置新的主机名为itheima,再查看当前的主机名
hostname itheima
设置新的主机名为itheima,重启以后仍然有效
hostnamectl set-hostname itheima
2 服务管理
systemctl list-units *.service
显示已经启动的所有服务
systemctl start crond【常用】开启服务
systemctl stop crond【常用】关闭服务
systemctl status crond【常用】显示服务当前状态
systemctl restart crond【常用】重启服务,先关闭服务,再开启服务
systemctl reload crond重新加载服务,相当于读取新的配置
systemctl enable crond
设置服务为开机自启动
systemctl disable crond
取消服务开机启动
Linux常用服务
firewalld
3 网络管理
netstat
Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships.
显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组。
参数
-n --numberic, 显示进程的IP地址和端口号
-t -tcp, 只显示使用TCP协议进程
-l -listening, 只显示正在网络监听的进程(默认选项)
-p -program, 显示程序的名字和进程的ID
-r -route, 显示路由表
举个栗子:
显示TCP协议的网络连接
netstat -t
显示TCP协议和监听中的网络连接
netstat -tl
显示TCP协议和监听中的网络连接,显示IP地址和端口号
netstat -tln
显示TCP协议和监听中的网络连接,显示IP地址和端口号,显示程序的名字
netstat -tlnp
显示路由表
netstat -r
4 网卡配置
设置ip分为2种类型,dchp和static。
dchp是动态获取ip
static是配置静态ip
dhcp动态获取ip,可能ip经常会发生变化,导致客户端无法连接到。静态ip配置后就不会发生改变,这样客户端连接服务器具有更好的安全性。
关闭网卡
修改/etc/sysconfig/network-scripts/ifcfg-enp0s3,ONBOOT参数设置为"no"
运行命令systemctl restart network
运行命令ping www.itcast.cn,查看外网能否连接
按原步骤,激活网卡
配置静态IP地址
运行命令netstat -r,查看网关地址
修改/etc/sysconfig/network-scripts/ifconfig-enp0s8
BOOTPROTO=static
IPADDR=192.168.56.102
GATEWAY=192.168.56.0
NETMASK=255.255.255.0
DNS1=114.114.114.114
5 SSH免密登录
为什么要登录
在企业中,多台Linux机器是可以相互之间进行登录和退出的。用Linux自带的SSH客户端命令,可以通过输入用户名和密码的方式登录到另一台Linux机器中。
非对称加密
非对称加密特点
密钥成对出现(公钥、私钥)
使用公钥加密,就使用私钥解密
使用私钥加密,就使用公钥解密
SSH
Secure Shell 协议,安全壳协议。用于Linux之间加密登录一种协议
SSH两种验证机制
直接输入用户名和密码的方式
ssh username@ip
免密登录,直接登录,不需要输入用户名和密码
如果网络中Linux服务器比较多,需要记住每台服务器的密码也是比较痛苦的事。你无需知道另一台机器上的帐号和口令,也可以登录到远程主机。我们说的SSH免密登录,就说的是这种方式
ssh-keygen
生成公钥和私钥,生成的公钥和私钥在/root/.ssh目录下。id_rsa是私钥,id_rsa.pub是公钥
ssh-copy-id
ssh-copy-id root@192.168.56.102
将新生成的密钥(公钥)发送到指定服务器。在服务器的/root/.ssh/autorized_keys文件中。
ssh root@192.168.56.102
不需要输入密码了
6 用户管理命令
useradd [OPTION] LOGIN
create a new user or update default new user information, 创建一个新用户或更新默认新用户信息,创建好的用户信息在/etc/passwd文件中
参数
LOGIN 指定创建的用户名
-m --create-home 创建用户的同时,在/home下创建用户的主目录[默认参数]
-g --gid <GROUP>
创建用户的同时,指定用户所在的组。
未指定组名:默认就在一个与用户同名的组中。组名与用户名相同。
操作演示
进入/home目录,查看目录的内容
cd /home
ll
创建用户Jack,并且创建用户主目录
useradd Jack
再次ll查看/home目录下存在Jack目录,默认用户Jack在一个叫Jack的组中。
ll
创建用户Tom,把用户放在Jack这个组中,并且创建Tom主目录
useradd Tom -g Jack
通过ll查看/home目录下的信息
ll
查看/etc/passwd文件,可以看到创建的用户信息
more /etc/passwd
passwd [OPTION] [username]
update user's authentication tokens, 更新用户密码。
参数
username 只有管理员才可以给指定的用户设置密码,默认为当前用户。
操作演示
设置Jack的密码为abc123。如果提示无效的密码,忽略即可,再次输入同一个密码,修改成功。
passwd Jack
在Linux控制台先logout登出。以Jack登录,注:用户名和密码大小写是敏感的
whoami
print effective userid, 查看自己的用户名
su [OPTION] [username]
run a command with subtitute user and group ID, 切换用户
参数
username 指定要切换的用户名,默认为root
操作演示
当前用户是root,临时切换成Jack,不用输入密码
cd进入用户主目录,pwd显示当前的目录,观察前面的提示符
从Jack用户切换回root,需要输入密码。
cd进入用户主目录,pwd显示当前的目录
输入2次exit再回到root用户
userdel [OPTION] LOGIN
delete a user account and related files, 删除用户账户和相关文件
参数
LOGIN 指定删除的用户名
-r --remove, 删除用户的同时,也删除它的主目录
操作演示
使用root删除用户Tom,同时删除Tom的主目录。如果Tom已经登录,则删除失败
在/home目录下已经找不到Tom主目录了
usermod [OPTION] LOGIN
modify a user account, 修改用户帐户
参数
LOGIN 指定修改前的原用户名
-l, login NEW_LOGIN 指定修改后的新用户名
操作演示
确认Jack这个用户不在线,如果在线需要将Jack登出
修改Jack的登录名为Rose
usermod -l Rose Jack
修改以后在Linux控制台,使用Rose重新登录
7 用户组管理命令
groupadd [OPTION] GROUP
create a new group, 创建一个新组。在/etc/group文件中,包含了所有创建组的信息
操作演示
添加一个新的组America
查看/etc/group文件,做为主组的用户不会显示出来。
usermod [OPTION] LOGIN
modify a user account, 修改用户帐户。一个用户只能有一个主组,可以有多个从组
参数
-g, --gid GROUP
修改用户的主组
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]
修改用户的从组(附属组),可以有多个从组
操作演示
进入/home目录,ll显示home目录的内容可以看到Rose是属于Jack这个组
将Rose这个用户的主组Jack修改为America组
使用ll显示/home目录,查看Rose用户所属组名变成了America
创建两个组:China和Japan
将Rose添加进China和Japan两个从组中,组名之间使用逗号隔开。
查看/etc/group文件,查看到Rose与组的关系。文件中主组看不到用户的列表。
gpasswd [OPTION] GROUP
将用户从附属组(从组)中删除
参数
GROUP
指定要删除的组名
-d, --delete USER
将用户从附属组(从组)中删除
操作演示
把Rose从America这个组中删除,删除失败。
把Rose从China这个组中删除
查看/etc/group文件,发现Rose已经从China组中删除
groupmod [OPTION] GROUP
modify a group definition on the system, 修改组的名字
参数
-n, --new-name NEW_GROUP
将组名改成新的组名
操作演示
在/home目录下ll查看修改前的信息
将Rose的主组名America改成USA
查看/home目录信息,发现Rose的组名已经改成USA
groupdel [OPTION] GROUP
delete a group, 删除一个组
参数
GROUP
删除指定的组
操作演示
删除USA组,删除失败,因为还有Rose把它做为主组
删除Japan这个组
删除China这个组
查看/etc/group文件,发现没有这两个组的信息了
8 软件安装命令
rpm [OPTION]
Red Hat Package Manager, 对linux中已经安装的软件进行管理
参数
-v, --verbose
提供更多的详细信息输出
-q 软件名
查询当前系统是否安装了指定的软件
-a
查询所有已经安装的软件
-h
在安装的过程中显示进度条 # 50%
-i, --install 软件名
安装指定的软件
操作演示
查看所有安装的软件
rpm -qa
查看gcc-c++这个软件包是否安装
rpm -q gcc-c++
安装指定的软件
rpm -ivh 软件名
yum [OPTION] [command] [package ...]
Yellowdog Updater Modified, 从指定的服务器自动下载包并且安装,可以自动处理依赖关系,一次安装所有依赖的软件包。
参数
-y 所有的提问都回答yes
命令
install, 安装软件
remove, 卸载软件
举个栗子:
安装gcc-c++ 这个安装包,安装的提示全部回答yes
yum –y install gcc-c++
第四部分 Linux服务器搭建
1 JDK安装
配置Java环境
进入“/soft”目录,解压jdk到指定目录/usr/local下
tar -xvf jdk-8u211-linux-x64.tar.gz -C /usr/local/
查看解压后的目录,目录中有jdk1.8.0_211为jdk解压的目录
配置jdk环境变量,打开/etc/profile配置文件,将下面配置拷贝进去。export命令用于将shell变量输出为环境变量。
注:在linux下以冒号分隔不同的路径,而windows下是分号。
注:引用变量在linux下是$变量名, 在windows下是%变量名%
/etc/profile
#set java environment
JAVA_HOME=/usr/local/jdk1.8.0_211
CLASSPATH=.:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
重新加载/etc/profile配置文件,并测试
source /etc/profile
判断JDK是否安装成功
java -version
javac -version
编写Hello World程序
Hello.java
publicclassHello{
publicstaticvoidmain(String[]args) {
System.out.println("Hello World!!!");
}
}
编译成字节码文件
javac Hello.java
执行Java程序
java Hello
2 MySQL安装
MySQL在线下载安装
注:需要连接互联网,在线mysql的安装包,5.6的版本大约86M
查看CentOS是否自带的MySQL,如果已经安装需要卸载。如果没有找到,则表示没有安装。
rpm -qa | grep mysql
在线获取CentOS7的mysql的rpm安装文件,直接执行如下命令
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
这条语句只是下载了一个rpm文件,25K大小
执行安装命令
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
得到两个配置文件,在/etc/yum.repos.d目录下。
mysql-community.repo用于指定下载哪个版本的安装包
mysql-community-source.repo用于指定下载哪个版本的源码
修改MySQL的下载配置文件
vim /etc/yum.repos.d/mysql-community.repo
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysq.com/yum/mysql-5.6-community/el/7/$baseurl/
# 设置为1,表示下载
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysq.com/yum/mysql-8.0-community/el/7/$baseurl/
# 设置为0,表示不下载
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
在当前目录/etc/yum.repos.d下执行下面的命令,开始在线下载:客户端,服务器端,开发的工具包。
yum -y install mysql-community-client mysql-community-server mysql-community-devel
这里需要比较长的时间,要从互联网上下载86M左右的内容
使用rpm命令,可以查询到mysql已经安装好的包
rpm -qa | grep mysql
启动MySQL服务并登录
启动mysql的服务
systemctl start mysqld
将mysql加到系统服务中并设置开机启动
systemctl enable mysqld
登录mysql,root用户默认没有密码
mysql -u root -p
在mysql中修改自己的密码
set password = password('root');
设置远程访问权限
开启mysql的远程登录权限,默认情况下mysql为安全起见,不支持远程登录mysql,所以需要设置开启,并且刷新权限缓存。
远程登录mysql的权限登录mysql后输入如下命令
grant all privileges on *.* to 'root'@'%' identified by 'root';
flush privileges;
开放Linux的对外访问的端口3306
#开放3306端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
#开放的端口永久保存到防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#重启防火墙
systemctl restart firewalld
客户端Windows连接MySQL
在本地Windows系统使用Navicat Premium软件连接虚拟机中的Linux系统安装的MySQL
3 Tomcat安装与项目发布
安装步骤
解压Tomcat到/usr/local下
tar -xvf apache-tomcat-8.5.27.tar.gz -C /usr/local/
开放Linux的对外访问的端口8080
firewall-cmd --zone=public --add-port=8080/tcp --permanent
重启防火墙
systemctl restart firewalld
进入bin目录,启动Tomcat
chmod +x *.sh
./startup.sh
在Windows下打开浏览器访问Linux的8080端口
进入bin目录下,关闭服务器。关闭服务器以后,浏览器不能再访问。
./shutdown.sh
修改mysql底层码表
问题
由于mysql软件底层码表使用的不是utf-8,导致执行sql语句中文乱码。需要设置客户端和服务器端的编码为utf-8
解决方案
修改mysql的配置文件
vim /etc/my.cnf
在mysqld条目下增加以下配置,指定服务器的字符集为utf-8
[mysqld]
character-set-server=utf8
增加客户端的默认字符集的配置,指定为utf-8,将下面的配置放到文件的结尾处
[client]
default-character-set=utf8
文件保存退出后,重启mysql服务
systemctl restart mysqld