文章目录
一、Linux的各个发行版
各个公司在Linux内核基础上进行二次开发、定制,出现不同的发行版
发行版——用户正在可以使用的操作系统软件
二、Linux目录结构
Linux主机的根目录为:/
目录 | 描述 |
---|---|
/root | 系统管理员(超级权限者)专有主目录 |
/bin | Binary的缩写,存放着经常使用的命令(如:/usr/bin、/usr/local/bin) |
/boot | 存放的是启动Linux时使用的一些核心文件、引导文件,包括一些连接文件及镜像文件 |
/dev | 类似Windows的设备管理器,把所有硬件用文件的形式保存 |
/etc | 所有系统管理所需的配置文件和子目录my.conf |
/home | 存放普通用户的主目录,在Linux中每个用户都有一个自己的主目录,目录名一般以用户的账号命名 |
/var | 存放着不断扩充的东西,习惯将经常被修改的文件存放在这个目录下,包括各自日志文件 |
/lib | 系统开机所需的基本的动态连接共享库、引导文件,类似于Windows里的DLL文件,几乎所有应用程序都会用到这些共享库 |
/usr | 非常重要的目录,用户安装的许多应用程序和文件都放在这个目录下,类似Windows下的Program files目录 |
/usr/local | 给主机额外安装软件的目标安装位置,一般是一些通过编译源码方式安装的程序 |
/opt | 给主机额外安装软件时安装程序所摆放的目录(规范我们需要把安装执行程序放在这个目录下) |
/media | Linux会自动识别一些设备,如U盘、光驱,Linux会把识别到的设备挂载到这个目录下 |
/mnt | 该目录用来让用户临时挂载别的系统文件,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了,如共享文件:d:/myShare |
/sbin | s即super user的意思,存放系统管理员使用的系统管理程序(如:/usr/sbin、/usr/local/sbin) |
/lost + found | 这个目录下一般为空的,当系统非法关机后,就会存放一些文件 |
/seLinux | SELinux是一种安全子系统,能控制程序只能访问特定文件 |
以下为Linux内核相关目录,一般不去动
目录 | 描述 |
---|---|
/proc | 一个虚拟的目录,为系统内存的映射,访问这个目录来获取系统信息 |
/srv | service的缩写,存放一些服务启动之后需要提取的数据 |
/sys | 为Linux2.6内核的一个很大的变化,目录下安装了2.6内核中新出现的文件系统sysfs |
/tmp | 用来存放一些临时文件 |
使用哪个用户账户登录,就会定位到当前用户的主目录下,如使用root登录,就会定位到/root下
总结:
Linux的目录中有且只有一个根目录:/
Linux的各个目录分别存放哪些内容是约定好的,我们需要遵守这个规范
Linux是以文件的形式管理我们的设备,linux系统中一切皆为文件
三、远程操作Linux服务器
实际工作中,我们一般将Linux作为远端服务器,部署软件系统及其他操作时,我们需要远程操作Linux服务器,这就需要借助以下两款工具
1.XShell(远程操控服务器)
远程登录Linux服务器,使用命令行操作(没有图像界面)
SSH协议
SSH(Secure Shell):应用层安全协议,是为远程登录会话,其他网络服务提供安全性的协议,可有效管理防止远程管理过程中的信息泄漏
开启sshd服务
使用远程工具有一个前提:主机是否开启了sshd服务,若没有开启则无法远程
sshd:监听端口22,这个服务基于SSH协议,为客户端远程操作进行服务、管理,开启这个服务后,则会一直在监听状态(监听22端口),有客户端连接进来后并进行管理
一般情况下这个服务默认开启
检查是否开启了sshd:
(1)在终端输入:setup
(2)选择系统服务
(3)检查sshd前面是否打了*,打了则表示已开启,没有则勾上开启
使用XShell远程登录Linux
(1)在CentOS终端输入ifconfig
,查看当前IP地址
(2)XShell中创建会话,将主机地址填上IP地址,端口为22,协议选择SSH
(3)连接,输入用户名root或其他用户名,及密码,完成连接
2.XFtp(文件上传/下载)
实现远程服务器与本地文件的上传/下载
(1)打开XFtp并新建会话
(2)主机地址填CentOS的IP地址(同上),协议选择SFTP,端口22,并输入登录账户的用户名、密码
(3)登录了哪个用户,如root,就会默认定位在哪个用户的主目录下,如/root(若出现乱码问题,点击打开会话的属性——选项——编码选择UTF-8),然后就可以右键选择文件进行传输了
四、vi和vim编辑器
vi:为Linux系统自带的一个文本编辑器
vim:具有程序编译的功能,可看成vi的增强版,会根据代码、语法、关键字来区分颜色,方便程序设计,有代码补全、编译及错误跳转等功能
vi、vim的三种模式:
(1)普通模式:使用命令行打开一个文件,终端输入:vim test.txt
,就会默认进入普通模式(若不存在这个文件,则会帮你自动创建),这个模式下,可以进行复制、粘贴、移动、删除等快捷键操作
(2)插入模式:普通模式下按i
或a
或I
或A
或O
即可进入插入模式,插入模式下可进行字符输入操作,按ESC
可回到普通模式
(3)命令模式:普通模式下按:
或/
或即可进入命令模式,该模式下可以进行保存、搜索、替换、退出、显示行号等操作,按ESC
可回到普通模式
命令模式中几种常用命令:
#(回车向后查找“word”关键字,按n向后继续查找)
:/word
#(回车向前查找“word”关键字,按n向前继续查找)
:?word
#(保存文本)
:w
#(强制保存,root用户,文件就算只读也能保存)
:w!
#(退出编辑器)
:q
#(保存并退出)
:wq
#(显示行号)
:set nu
#(不显示行号)
:set nonu
五、Linux常用命令
1.基本指令
关机
# 关机
shutdown
# 立刻关机
shutdown -h now
# 1分钟后关机
shutdown -h 1
# 立刻关机
halt
重启
# 立刻重启
shutdown -r now
# 现在重启
reboot
注意:不管是关机还是重启,首先要sync将主存中的数据保存到外存
# 把内存数据同步到硬盘上
sync
2.用户管理
Linux是一个多用户多任务的操作系统,必须一个账号对应一个用户,以账号的身份进入系统,且Linux维护了一个用户组的概念,会有多个不同权限的用户组,且每个用户至少属于一个用户组,如图:
Linux中有且只有一个超级管理员用户root,可以有多个普通用户,各个账号都有一个对应的主目录,root账户有一个专属的主目录,其他各普通用户在/home下有一个对应的主目录,主目录名称通常为用户名,登录时,默认进入对应用户的主目录下
实际工作中,不能把root用户分配给每个人,因为权限太大,而是创建多个用户组、用户,并分配不同的权限
用户登录&注销
实际工作中,应尽量少用root用户登录,因为权限太大
# 进行切换用户登录
# 从低权限用户往高权限用户切换时,需要输入密码,反之不需要
su [用户名]
# 注销,使用远程连接命令行操作时,输入logout就会注销用户并关闭连接,减少服务器压力,但在图形界面中打开终端输入logout不会起作用
logout
# 使用su切换过用户后,使用exit可返回原用户,无用户时,作用同logout注销用户
exit
创建用户
# 创建用户,同时会自动创建一个同名用户组并关联
# 例:useradd xm —— 会创建一个用户xm,同时会自动创建一个xm的用户组,并用户xm属于用户组xm
useradd [可选] [用户名]
# 创建用户,同时指定用户组(前提是用户组必须已经存在)
useradd -g [用户组名] [用户名]
# 创建用户,同时指定home目录(默认用户主目录会在/home下,也可以指定为某个目录下)
useradd -d [目录] [用户名]
给用户指定/修改密码
# 指定或修改该用户密码
passwd [用户名]
删除用户
# 删除用户,但会保留对应的用户主目录
userdel [用户名]
# 删除用户,同时删除对应的用户主目录
userdel -r [用户名]
# 实际中,一般建议保留用户主目录,方便查阅历史记录
查询用户信息
# 查询用户信息
# 若不存在用户,则返回 “no such user”
# 若存在用户,则返回uid(用户id)、gid(用户组id)、组(属于的用户组id及组名)
id [用户名]
查询当前登录用户
# 查询当前登录用户,返回用户名
whoami
3.用户组管理
相当于角色,可对多个有共性的用户进行统一管理、分配权限
增加组
groupadd [组名]
删除用户组
groupdel [组名]
修改用户的用户组
# 用户组事先存在为前提
usermod -g [用户组名] [用户名]
4.用户/用户组的配置文件详解
(1)用户的配置信息都记录在 /etc/passwd 这个文件中,我们使用cat/etc/passwd可以以只读的形式打开文件,打开后可以查看到例如用户cty的信息
(2)用户的密码记录在 /etc/shadow 这个文件中:
(3)用户组的配置信息记录在 /etc/group 这个文件中:
5.Linux的运行级别详解
什么是运行级别?
运行级别,举个例子,如使用 “多用户无网络” 这个运行级别运行Linux,就好比用 “安全模式” 启动Windows
Linux有以下运行级别:
常用运行级别为:3和5
切换到指定的运行级别
# 切换到0~6中某个运行级别
# 例:进入CentOS,若此时进入到了图形界面(运行级别为5)
# 则此时命令行输入:init 3,就会进入到纯命令行的模式(多用户有网络)
# 命令行输入:init 5,就会回到图形界面
# 命令行输入:init 0,就会直接关机
init [0~6]
实际中的运用
若忘记了root的密码,怎么找回?
步骤一:系统开机时,在内核选择界面时,按键盘任意键使Linux启动引导停留在选择阶段(使用方向键上下进行选择)
步骤二:根据步骤提示,键入小写 “e” 下一步
步骤三:选项停留在Kernel这一项,按 “e” 下一步
步骤四:此时,进入下一个界面,在quiet后键入 “1”(表示进入单用户模式),回车回到启动选择界面,选择停留在 “Kernel” 处,此时再输入 “b”(表示引导),现在启动就是单用户模式了
步骤五:在单用户模式下,即可以使用命令:passwd root 来修改root的密码,修改完成后reboot重启
对于CentOS7中进行到步骤三中选项没有Kernel这一项:
(1)按方向键下找到最下面有 “ro” 的这一行(意为read only),将 “ro” 替换成 “rw init=/sysroot/bin/sh”
(2)按 “Ctrl + x” 重启,重启进入出现 “😕#”,即表示已进入到了单用户模式,然后输入 “chroot/sysroot” 来获得root权限
(3)修改root密码并重启
修改开机的默认运行级别
Linux系统的运行级别的配置信息保存在 /etc/inittab 文件中
要修改默认的运行级别可在:/etc/inittab 文件中修改 id:5:initdefault: 这一行的数字
CentOS之后不再是这样设置了
我们打开inittab文件可以看到
得知 “multi-user.target” 相当于原来的运行级别3(多用户有网络),graphical.target相当于运行级别5(图形界面),并根据注释提示得知若要设置需要这样写:systemctl set-default [xxx.target]
(若要得知当前运行级别,可在终端输入:systemctl get-default)
在CentOS7中,不再是通过修改配置文件来改变启动默认的运行级别了,而是在终端输入:systemctl set-default [xxx.target]
CentOS7中运行级别对照表
运行级别 | 指令 |
---|---|
0(关机) | shutdown.target |
1(单用户模式) | emergency.target |
2(多用户无网络、安全模式) | rescure.target |
3(多用户有网络) | multi-user.target |
4(保留) | - |
5(图形界面) | graphical.target |
6(重启) | - |
若被他人恶意修改了启动默认的运行级别,例如修改为关机、重启,则会开机就关机、重启,解决方式也是进入单用户模式来进行修改
6.帮助指令
# 会返回关于这个命令、配置文件的使用、介绍
# 例:man ls
man [命令或配置文件]
# 获得shell内置的命令的帮助信息
# 例:help cd
help [命令]
7.文件目录类指令
显示当前工作目录的绝对路径
pwd
显示当前目录下的所有文件及目录(文件夹)
# 横向显示目录下的文件、目录
ls
# 显示所有并包括隐藏的文件、目录
ls -a
# 以列表的形式显示包括隐藏的
ls -l
切换目录
# 切换目录,切换到指定路径下
cd [路径]
# 切换到当前目录的主目录
cd ~ 或 cd
# 返回到上一级目录
cd ..
绝对路径、相对路径
(1)若当前工作目录为 /root,此时我们希望进入到 /home 下
绝对路径:cd /home (即从根目录 “/” 开始定位,定位到 home)
相对路径:cd …/home (从当前目录开始定位到 home,“…” 为返回上一级即根目录,再 /home,定位到 home 下)
(2)若当前工作目录为 /home,希望进入到 home 下的 cty 下
绝对路径:cd /home/cty
相对路径:cd cty
(3)若当前工作目录为在 /cty 下,希望进入到 /root 下
绝对路径:cd /root
相对路径:cd …/…/root
创建目录
mkdir [可选] [目录全路径名]
mkdir /test/t1 #会失败,因为只能创建一个级的目录,即此时根目录没有/test这个目录,因此/test/t1时,会先去检查是否存在/test,不存在则无法创建
mkdir /root/test #会成功,因为此时已存在/root目录,此时只需要创建/test
mkdir /root/123/321 #会失败,因此此时不存在/123
# 一次性创建多级目录
mkdir -p /root/aa/bb/cc
删除目录
# 删除目录,目录非空则无法删除
rmdir [可选] [目录全路径名]
# 删除目录并删除里面的内容
rm -f [目录全路径名]
创建空文件
# 创建一个空文件
# 可以在当前目录下touch test.txt,也可以在其他目录下touch /home/test.txt
# 例:touch test.txt、touch test.java
# 也可以一次性创建多个文件 touch 1.txt 2.java 3.txt
touch [文件全路径名]
拷贝文件
# 拷贝单个文件,路径可以是绝对路径如:cp /root/test.txt ../home/cty
# 例:当前在/home下,要将/root下的1.java拷贝至/home下的cty下
# 写法1:cp ../root/1.java /home/cty
# 写法2:cp ../root/1.java cty
# 写法3:cp /root/1.java cty
cp [要拷贝的源文件全路径名] [目标全路径]
# 拷贝整个目录(文件夹),即递归拷贝整个目录包括里面的内容,路径同样可以说绝对路径或相对路径
# 例:当前在/root下,拷贝/root下的/test目录及里面的内容至/home/cty下
# 写法1:cp -r test ../home/cty
# 写法2:cp -r /root/test /home/cty
cp -r [源文件全路径名] [目标全路径]
删除文件、目录
# 删除文件或目录
rm [可选] [目标删除的目录或文件的全路径名]
# 递归删除
rm -r [路径]
# 强制删除并不会提示
rm -f [路径]
# 强制递归删除并不会提示
rm -rf
# 注:
# 直接rm删除的是目录时,会提示 “无法删除,这是一个目录”
# 直接rm -r删除的是目录时,会提示 “是否进入目录”,选是便会进入目录,并对里面一个个的文件进行 提示是否删除,最后提示 “是否删除目录”
# 所以使用rm删除目录时,使用rm -rf递归不提示删除
剪切、重命名
# 移动文件或目录(即剪切),移动时同时可以改变了文件或目录名,就相当于重命名
# 例:
# 重命名:
# 在同一个目录下并改变了文件、目录名
# mv /root/test /root/test2
# mv /root/test/1.java /root/test/2.java
# 移动的同时重命名
# mv /root/test /home/cty/test2
# mv /root/test.txt /home/cty/1.txt
# 剪切:
# mv /root/test /home/cty
# mv /root/1.java /home/cty
mv [源目录或文件全路径名] [目标全路径名]
查看文件内容(只读)
# 例:cat /etc/profile
cat [可选] [文件全路径名]
# 以显示行号的方式查看
# 例:cat -n /etc/profile
cat -n [文件全路径名]
# 可以分页显示,按空格下一页,ctrl+B上一页
cat /etc/profile | more
cat -n /etc/profile | more
# more指令是基于vi编辑器的文本过滤器,它以全屏的方式显示文本内容
# 例:more /etc/profile
# 快捷键:
# 空格——下一页
# Enter——向下翻一页
# q——立刻立刻more,不再显示文本内容
# ctrl+F——向下滚一屏
# ctrl+B——返回上一屏
# =——输出当前行的行号
# :f——输出当前文件名和当前行的行号
more [文件全路径名]
# 用来分屏(分页)查看文件内容,与more类似,但比more更强大,因为它是根据需要加载显示内容,而不是加载全部,性能更快
# 根据分屏,只先加载一屏的内容显示,向下翻一屏时再去加载下一屏来显示,而不是more一打开就全部加载
# 例:less /etc/profile
# 当查看大型如日志文件时推荐用less
# 快捷键:
# 空格——向下翻页
# [pagedown]——向下翻页
# [pageup]——向上翻页
# /关键字——向下搜索关键字,n:向下查找,N:向上查找
# ?关键字——向下搜索关键字,n:向上查找,N:向下查找
# q——离开文本内容
less [文件全路径名]
输出重定向
# 例:ls -l > /root/a.txt
# 将ls -l显示的内容(当前文件列表内容)写入到a.txt中,会覆盖原来的内容,若a.txt文件不存在,会自动创建
# cal > /root/b.txt 将当前日历信息写到b.txt中
>
文件中追加内容
# 追加内容(不会覆盖),同样若文件不存在则会创建
# 例:
# ls -l > /root/b.txt
# ls -a > /root/b.txt
>>
将一个文件的内容覆盖到另一个文件中
# 若文件不存在也会创建
# 例:cat /etc/profile > /root/a.txt
cat [文件1] > [文件2]
将一个文件的内容追加到另一个文件中
# 若文件不存在也会创建
# 例:cat /etc/profile >> /root/a.txt
cat [文件1] >> [文件2]
将内容覆盖到另一个文件中
# 若文件不存在也会创建
# 例:echo "hello" > /root/a.txt
echo [内容] > [文件全路径名]
将内容追加到另一个文件中
# 若文件不存在也会创建
# 例:echo "word" >> /root/a.txt
echo [内容] >> [文件全路径名]
将内容输出到控制台
# 例:
# echo $PATH 输出当前环境变量到控制台
# echo "hello" 输出"hello"到控制台
echo [可选] [输出内容]
查看文件前n行内容
# 默认显示前10行
# 例:head /etc/profile
head [文件路径全名]
# 指定显示前?行
# 例:head -n 5 /etc/profile
head -n [?] [文件全路径名]
查看文件末尾n行内容
# 默认显示末尾10行
tail [文件全路径名]
# 指定显示末尾?行
tail -n [?] [文件全路径名]
# *常用
# 实时追踪文件的所有更新
# 当文件更新时,就能在控制台看到变化的内容
tail -f [文件全路径名]
软链接\符号链接(类似Win中的快捷方式)
# 给源文件创建一个软链接(快捷方式)
# 例:当前在/home下,创建一个软链接到/root
# ln -s /root linkToRoot
# 此时在/home下:cd linkToRoot 就会到/root下,pwd时,显示的还是软链接所在的目录(/home)
ln -s [源文件、目录全路径名] [软链接名]
删除软链接
rm -rf [软链接全路径名]
8.显示在这台Linux上使用过的所有历史指令(使用指令痕迹)
# 显示所有历史指令
history
# 显示最近使用的10个指令
history 10
# 根据显示出的历史指令,每个都有一个唯一编号,如:!178
# 控制台中输入:!178 即可执行编号为178的这个指令
9.时间日期类
显示当前时间日期
# 显示当前日期,格式为(2021年 10月 11日 星期一 22:59:57 CST)
date
# 格式化:
# 显示年(2021)
date "+%Y"
# 显示年-月(2021-10)
date "+%Y-%m"
# 显示年 月(2021 10)
date "+%Y %m"
# 显示当前月(10)
date "+%m"
# 显示当前日(11)
date "+%d"
# 显示年月日时分秒(2021-10-11 22:59:57)
date "+%Y-%m-%d %H:%M:%S"
设置当前时间
date -s [时间]
显示日历
# 显示当前月的日历
cal
# 显示指定某年的一整年的日历
cal [年份]
9.搜索查找类
从指定目录下递归地遍历显示其某个子目录及文件
# 例:find /root 递归显示/root各个子目录及文件
find [指定目录] [可选]
# 查找指定文件名或所有相同格式的文件
# 例:
# 查找/root下及它的子目录下名为 “1.txt” 的文件:find /root -name 1.txt
# 查找/root下及它的子目录下的所有txt格式文件:find /root -name *.txt
find [指定目录] -name [文件全路径名]
# 查找所属于该用户的文件
# 例:
# 查找/opt下所有拥有者为root的文件:find /opt -user root
find [指定目录] -user [用户名]
# 按指定文件大小查找文件
# 例:
# 查找Linux下所有大小超过20M的文件:find / -size +20M (M必须大写,+表示大于,另外-表示小于,不写表示等于)
find [指定目录] -size [文件大小]
快速定位文件路径
# locate利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件
# 无需遍历整个文件系统,为了保证查询结果的准确度,管理员必须定期更新locate时刻
#
# locate基于数据库查询,第一次运行前,必须使用updatedb指令创建locate数据库
locate [文件全路径名]
查找文件中某个关键字
# 过滤查找
# grep一般与管道符号 ”|“ 结合使用
# 管道符号 ”|“:作用为把前一个指令的结果作为参数传输给下一个指令来处理
grep [可选] [查找内容] [源文件]
# 显示匹配行及行号
grep -n [查找内容] [源文件]
# 忽略字母大小写
grep -i [查找内容] [源文件]
# 例:
# 在hello.txt文件中,查找内容 ”yes“ 的所在行,并显示行号
# cat hello.txt | grep -n yes (cat读取文件内容(只读),把内容交给grep处理)
10.压缩、解压缩类
压缩文件(gz格式)
# 将文件压缩为*.gz文件,压缩完不保留原格式文件
# 例:
# gzip /root/a.txt
# gzip /root/a.txt /root/b.txt
gzip [文件全路径名]
解压文件(gz格式)
# 解压*.gz文件,解压后不保留原gz文件
# 例:
# gunzip /root/a.txt.gz
# gunzip /root/a.txt.gz /root/b.txt.gz
gunzip [gz格式文件全路径名]
压缩文件(zip格式,项目打包中很有用)
# 将文件压缩为*.zip文件,并自命名压缩后的文件
# 当前在哪个目录就保存在哪个目录下,压缩完保留原格式文件
zip [可选] [压缩后对zip格式文件的命名] [目标压缩文件全路径名]
# 递归压缩(即压缩目录)
# 例:
# 将 /home 目录压缩,命名为 “mypackage”
# zip -r mypackage.zip /home
zip -r [压缩后对zip格式文件的命名] [目标压缩文件全路径名]
解压文件(zip格式)
unzip [可选] [zip格式压缩文件]
# 解压并指定解压文件存放的目录
# 例:
# 将mypackage.zip解压到 /opt/tmp下
# unzip -d /opt/tmp /home/mypackage.zip
unzip -d [存放目录路径] [zip格式压缩文件]
打包(tar.gz格式,既可压缩也可解压)
# 打包为*.tar.gz格式文件
# 打包后不会删除原文件
tar [可选] [目标打包文件路径全名]
# 产生*.tar打包文件
tar -c [目标打包文件路径全名]
# 显示详细信息
tar -v [目标打包文件路径全名]
# 指定压缩后的文件名
tar -f [文件名] [目标打包文件路径全名]
# 打包同时压缩
tar -z [目标打包文件路径全名]
# 解包*.tar文件
tar -x [tar格式文件路径全名]
# 例:
# 压缩多个文件,将/home/a.txt 和 /home/b.txt压缩成名为 ”a.tar.gz“ 的文件
# tar -zcvf a.tar.gz a.txt b.txt
#
# 将/home文件夹压缩成 ”myhome.tar.gz“
# tar -zcvf myhome.tar.gz /home
#
# 将a.tar.gz解压到当前目录下
# tar -zxvf a.tar.gz
#
# 将myhome.tar.gz解压到 /opt/tmp下
# tar -zxvf myhome.tar.gz -c /opt/tmp (前提:/opt/tmp必须事先存在)
11.组管理
组:用户组,组信息配置文件在/etc/group下
用户:Linux每个用户必须属于一个组,不能独立于组外,用户信息配置文件在/etc/passwd下,口令配置文件在/etc/shadow下
文件:Linux下每个文件都有:
1.所有者(这个文件属于谁的)谁创建了这个文件,所有者就是谁
2.所有组,归属哪个组,默认在所有者所在的组
3.其他组
查看文件的所有者
# 查看文件的所有者
# 例:
# 先创建一个组名为police,再创建一个用户tom属于police组,然后用tom创建一个文件,查看该文件的所有者
# 1.groupadd police
# 2.useradd -g police tom
# 3.passwd tom
# 4.su tom
# 5.touch ok.txt
# 6.ls -ahl
ls -ahl
修改文件的所有者
# 例:使用root创建root.txt文件,再将这个文件的所有者改为tom
chown [用户名] [文件全路径名]
查看文件/目录所在组
当某个用户创建了该文件、目录,该用户所在的组默认就设为该文件、目录所在的组
# 同查看文件所有者
ls -ahl
修改文件所在组
# 例:
# 将root.txt所在组改为police
# charp police root.txt
charp [组名] [文件全路径名]
改变用户所在组
usermod -g [组名] [用户名]
改变用户登录时的初始目录
usermod -d [目录名] [用户名]
12.权限管理
文件、目录权限的基本介绍
这里的权限指的是文件、目录的权限
以root主目录下的文件为例
输入ls -l后列出所有文件
其中开头部分如“-rw-r–r--”,总共占10位,每一位代表不同含义
其中:
(1)第一位表示类型:
“-”——表示该文件为普通文件
“d”——表示为一个目录
“l”——表示是一个软链接
“c”——表示是一个字符设备(键盘、鼠标)
“b”——表示为块文件(硬盘)
如图:
后面的9位中,每3位为一组,每组都有rwx代表拥有的读、写、执行的权限,若为-则表示没有相应权限
3组中:
最前面的一组:表示文件的所有者拥有的权限
中间的一组:表示文件、目录所在组的用户拥有的权限
最后一组:表示文件、目录的其他组的用户拥有的权限
rwx表示的意思:
若是作用在文件上:
“r”——表示可读
“w”——表示可写,但是不代表可以被删除,该文件可以被删除的前提是对该文件所在的目录有写权限w,才可以删除
“x”——表示可以被执行
若是作用在目录上:
“r”——表示可读,可以ls查看目录内容
“w”——表示可写,目录内创建 + 删除 + 重命名目录
“x”——表示可执行(可以进入该目录)
每3位为一个rwx,代表不同意义的权限:
第一个3位表示文件的所有者所拥有的权限,若为“-”则表示没有权限
如图:
(2)第一组的3位:文件的所有者所拥有的权限,若为“-”则表示没有权限
(3)第二组的3位:文件的所在组的用户拥有的权限,若为“-”则表示没有权限
(3)第三组的3位:文件的其他组的用户拥有的权限,若为“-”则表示没有权限
(4)接着后面的数字:
若是文件,则数字代表该文件的硬链接的数量
若是目录,则表示该目录下子文件、子目录的数量
(5)其他一些信息
修改各角色对文件、目录权限
#修改文件、目录的权限,有下面两种方式
# u:所有者 g:所在组 o:其他人 a:全部人(u、g、o的总和)
-chmod
#第一种方式:通过 +、-、= 来变更权限
#(1)将文件、目录的所有者的权限设置为rwx,将所在组的权限设置为rx,将其他人的权限设置为rx
chmod u=rwx,g=rx,o=x [文件、目录名]
#(2)给文件、目录的其他人增加w的权限
chmod o+w [文件、目录名]
#(3)给全部人添加对该文件、目录的x的权限
chmod a+x [文件、目录名]
#(4)给文件的所有者除去执行的权限,给所在组增加写的权限
chmod u-x,g+w [文件、目录名]
#第二种方式:通过数字变更权限
# r=4,w=2,x=1,rwx=4+2+1=7
# chmod u=rwx,g=rw,o=x [文件、目录名] 等价于 chmod 751 [文件、目录名]
#
#(1)将/home/abc.txt文件的权限修改成 rwxr-xr-x,使用数字的形式
chmod u=7,g=5,o=5 /home/abc.txt
修改文件、目录的所有者
#改变文件、目录的所有者
chown [新的所有者] [文件、目录名]
#同时改变文件、目录的所有者和所在组
chown [新的所有者]:[新的所在组] [文件、目录名]
#如果是目录,使用-R可以使其下所有子文件或子目录递归生效
chown -R ...
#(1)将abc.txt文件的所有者改为tom
chown tom abc.txt
#若tom对abc.txt所在的目录没有写权限,则需要切换为root用户来操作
#(2)将/home/kkk目录下的所有文件和目录的所有者都改为tom
#首先需要切换为root用户来操作
chown -R tom /home/kkk/
修改文件、目录的所在组
#改变文件、目录的所在组
chgrp [新的所在组] [文件、目录名]
#(1)将/home/abc.txt文件的所在组改为bandit
#首先需要切换为root用户来操作
chgrp bandit /home/abc.txt
#(2)将/home/kkk目录下的所有子文件、子目录的所在组都改为bandit
#首先需要切换为root用户来操作
chgrp -R bandit /home/kkk/
13.定时任务调度
任务调度:指系统在某个时间执行特定的命令或程序
任务调度分类:
1.系统工作:有些重要的工作必须周而复始地执行,如病毒扫描
2.个别用户工作:个别用户可能希望执行某些程序,比如备份数据库
crontab [选项]
#常用选项:
#编辑crontab定时任务
-e
#查询crontab定时任务
-l
#删除当前用户所有的crontab定时任务
-r
#重启任务调度
service crond restart
复杂任务的定时调度:
对于比较复杂的任务,需要写脚本(Shell编程)
简单任务的定时调度:
可以不用写脚本,直接在crontab中加入即可
示例
每小时的每分钟执行 ls -l /etc/ >> /tmp/to.txt命令(意为列出/etc下的文件、目录信息并写入到/tmp/to.txt中)
每分钟的指令为:*/1 * * * *(下面再详解)
#步骤:
#1.首先要打开crontab进入编辑模式
crontab -e
#2.写入命令
*/1 * * * * ls -l /etc/ >> /tmp/to.txt
#3.保存并退出
wq
时间参数讲解
特殊符号 | 含义 |
---|---|
* | 代表任何时间,比如第一个“*”,代表每个小时中的每一分钟都执行一次 |
, | 代表不连续的时间,比如:0 8,12,16 * * * [命令] 表示每天的8点0分,12点0分,16点0分都执行一次命令 |
- | 代表连续的时间范围,比如:0 5 * * 1-6 [命令] 表示在周一到周六的每个凌晨5点0分执行一次命令 |
*/n | 代表每隔多久执行一次,比如:*/10 * * * * [命令] 表示每隔10分钟执行一次命令 |
“*”详解
位置 | 含义 | 范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟 | 0~59 |
第二个“*” | 一天当中的第几个小时 | 0~23 |
第三个“*” | 一个月当中的第几天 | 1~31 |
第四个“*” | 一年当中的第几个月 | 1~12 |
第五个“*” | 一周当中的星期几 | 0~7(0、7都代表星期日) |
特定时间执行任务示例
时间 | 含义 |
---|---|
45 22 * * * [命令] | 每天的22点45分执行一次 |
0 17 * * 1 [命令] | 每周一的17点0分执行一次 |
0 5 1,15 * * [命令] | 每个月的第1天和第15天的凌晨5点0分执行一次 |
40 4 * * 1-5 [命令] | 每周一到周五的凌晨4点40分执行一次 |
*/10 4 * * * [命令] | 每天的凌晨4点开始,每隔10分钟执行一次,到凌晨5点就停了 |
0 0 1,15 * 1 [命令] | 每个月的第1天和第15天的0点0分、每周一的0点0分,都会执行一次 注意:星期几和几号(每个月的第几天)最好不要同时出现,因为它们都是定义天,容易让管理员混乱 |
以Shell脚本文件的形式定时执行任务
(1)定时执行 date >> /tmp/mydate(定时将date信息追加到/tmp/mydate中),脚本文件为/home/mytask.sh
#步骤:
#第一步:使用root用户,切换到/home
cd home
#第二步:编辑mytask.sh文件
vim mytask.sh
#第三步:将要执行的命令写入到mytask.sh文件中,并保存退出
date >> /tmp/mydate
wq
#第四步:赋予root用户对mytask.sh执行的权限
chmod 744 mytask.sh
#第五步:以编辑模式进入crontab
crontab -e
#第六步:写入定时执行的任务,并保存退出
*/1 * * * * /home/mytask.sh
wq
(2)每天凌晨2点将mysql数据库testdb备份到/tmp/mydb.bak文件中
#备份mysql数据库指令:
#mysql数据库路径一般在/usr/local/mysql/bin下
/usr/local/mysql/bin/mysqldump -u [用户名] -p [密码] testdb > /tmp/mydb.bak
#其他步骤同理
14.磁盘分区、挂载
分区基础知识
分区的2种方式
1.传统的mbr分区
(1)最多支持4个主分区
(2)系统只能安装在主分区
(3)扩展分区要占一个主分区
(4)MBR最大支持2TB,但拥有最好的兼容性
2.gtp分区
(1)支持无限多个主分区(但操作系统可能会限制,比如windows下最多128个分区)
(2)最大支持18EB的大容量(EB=1024PB,PB=1024TB)
(3)Windows7 64位以后支持gtp
Linux分区原理
在Linux中一切皆为文件,一切文件归根结底只有一个根目录,整个组成一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分
Linux中采用挂载的处理方式
挂载(mount)
挂载指Linux中将一个分区与一个目录建立映射关系,这时这个目录下即为这个分区的存储空间
卸载(umount)
即取消这个映射关系
示意图
Linux硬盘说明
Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本为SCSI硬盘
IDE
对于IDE硬盘,驱动器标识符为“hdx”,其中,“hd”表面分区所在设备的类型,这里是指IDE硬盘了,“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘)“~”代表分区,前4个分区基本用数字1-4表示,它们是主分区或扩展分区,从5开始就是逻辑分区
如:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区
SCSI
对于SCSI硬盘则标识为“sdx”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样
可用指令:lsblk -f 查看系统当前的分区和挂载情况
若想查看分区容量大小,可用指令:lsblk
挂载案例(虚拟机增加硬盘)
给Linux增加一块硬盘,并挂载到/home/newdisk目录
步骤:
(1)虚拟机添加1个G的硬盘
鼠标右键虚拟机选择【设置】
点击【添加】
此时要重启虚拟机,操作系统才能识别到硬盘
重启
reboot
重启后 lsblk -f 就能看到硬盘了
(2)对sdb分区,使用指令 fdisk /dev/sdb
fdisk /dev/sdb
输入m获取帮助
根据提示得知选择n,输入n
选择p,代表要划一个主分区
输入1,代表主分区中的第一块作为主分区
然后一路回车完成
输入m,再次获取帮助,根据提示得知w:把分区信息写入硬盘并退出
输入w
此时就完成分区了,但是发现并没有文件系统类型和分区的唯一标识(操作系统还不能识别、使用该分区),因此需要格式化
(3)格式化:将sdb1分区格式化为ext4的文件系统类型
使用指令:mkfs -t ext4 /dev/sdb1
可以看到完成了格式化了,并且有了分区的唯一标识,此时操作系统才能识别该分区
(4)挂载(临时挂载——重启系统后将失效)
将新分区挂载到 /home/newdisk 目录
首先cd到 /home 目录下,并创建 /newdisk 目录
将分区sbd1挂载到/home/newdisk目录
使用指令:mount /dev/sdb1 /home/newdisk
此时可以看到完成挂载了
(5)设置开机自动挂载(永久挂载)
在 /etc/fstab 文件中记录了分区的挂载点信息,因此vim要进入这个文件中编辑:
vim /etc/fstab
参照里面的信息,输入要挂载的sdb1分区与挂载目录/home/newdisk相关信息(不要使用空格,使用Tab键)
然后wq保存并退出
然后输入指令:mount -a
表示自动挂载生效
重启后,发现挂载仍然生效,大功告成!
查询磁盘整体使用情况
df -h
查询指定目录的磁盘占用情况
#查询指定目录的磁盘占用情况,默认为当前目录
du [可选] [目录]
# 可选值:
# -s 指定目录占用大小汇总
# -h 带计量单位
# -a 含文件
# --max-depth=1 子目录深度
# -c 列出明细的同时,增加汇总值
示例:查询 /opt 目录的磁盘占用情况,深度为1
du -ach --max-depth=1 /opt
统计目录下文件的个数(除去子目录,只是文件的个数)
“^-”:表示以-开头的(ls -l列出目录下所有信息时,-开头为文件类型,d开头为目录类型)
wc:统计
#列出该目录下所有目录、文件,然后过滤、只保留-开头的(代表文件),然后wc统计
ls -l [目录名] | grep "^-" | wc -l
统计目录下文件的个数,包括子目录里的所有文件
加个R:代表递归统计
#递归地列出该目录下所有目录、文件,然后过滤、只保留-开头的(代表文件),然后wc统计
ls -lR [目录名] | grep "^-" | wc -l
统计目录下子目录的个数(除去文件,只是子目录的个数)
同理,将-开头改为以d开头,代表目录
#列出该目录下所有目录、文件,然后过滤、只保留d开头的(代表目录),然后wc统计
ls -l [目录名] | grep "^d" | wc -l
### 统计目录下子目录的个数,包括子目录里的所有目录
同理加个R
```bash
#递归地列出该目录下所有目录、文件,然后过滤、只保留-开头的(代表文件),然后wc统计
ls -lR [目录名] | grep "^d" | wc -l
以树状形式显示目录结构
#1.首先yum指令下载tree插件
yum install tree
#2.安装完成后使用tree指令
tree
15.网络环境配置
第一种:自动获取IP地址
由于每次启动虚拟机打开Linux都要手动打开网络连接,非常麻烦,现在配置自动获取IP地址,来使得Linux启动后自动获取IP地址,但是缺点是这样IP地址是动态的,每次获取的IP地址可能不一样
在网络设置中将【自动连接】勾上即可
第二种:指定固定IP地址
若是在真实服务器场景下,动态IP地址肯定是不行的,必须得是固定IP地址
网络配置的文件为:/etc/sysconfig/network-scripts/ifcfg-ens33(ens33为虚拟网卡名称)如图:
ifcfg-ens33即为ens33这块虚拟网卡的配置文件,若有多个虚拟网卡,就有多个配置文件
使用指令vim打开这个配置文件进行编辑:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
因为此时是DHCP自动获取IP地址(BOOTPROTO=dhcp),若要指定固定IP地址,则要写入:
IPADDR=xxx(IP地址)
GATEWAY=xxx(网关,与Windows虚拟机设置的网关一致,因为要通过这个网关接入互联网)
DNS1=xxx(与网关地址一样)
将ONBOOT改为yes
将BOOTPROTO改为static(静态IP地址)
虚拟机软件-【编辑】-【虚拟网络编辑器】里查看虚拟网关
然后wq保存并退出
最后要重启一下网络服务才会生效
#重启网络服务
service network restart
重启后ifconfig看到设置已生效
能ping通外网
之后重启系统后也会自动启用这个网络配置
防护墙相关
#查看防火墙所有信息
firewall-cmd --list-all
#查询端口开启信息
firewall-cmd --list-ports
#--zone(作用域)
#添加端口(格式为:端口/通讯协议)--add-port=80/tcp
#永久生效--permanent,没有此参数重启后失效
#例:永久开放80端口号
firewall-cmd --permanent --zone=public --add-port=80/tcp
#多端口
firewall-cmd --zone=public --add-port=80-90/tcp --permanent
#移除80端口号
firewall-cmd --permanent --zone=public --remove-port=80/tcp
#更新防火墙规则
firewall-cmd --reload
#启动|关闭|重新启动 防火墙
systemctl [start|stop|restart] firewalld.service
16.进程管理
在Linux中,每个执行的程序(代码)都称为一个进程,每一个进程都有分配一个ID号
每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程,例如www服务器
每个进程都可以以两种方式存在:前台、后台
前台进程:用户目前的屏幕上可以进行操作的
后台进程:实际在执行,但是屏幕上无法看到
一般系统的服务都是以后台进程的方式存在,而且会常驻在系统中,直到关机才结束
查看系统当前进程
#查看系统当前正在执行的进程,及一些进程的信息
ps
#显示当前终端的所有进程信息
ps -a
#以用户的格式显示进程信息(所属用户)
ps -u
#显示后台进程运行的参数
ps -x
#一般aux一起用:ps -aux
#显示所有进程
ps -e
#以全格式形式显示进程
ps -f
#以全格式形式显示所有进程,PPID指父进程ID
ps -ef
例:
输入ps -aux
,列出以下进程信息:
太多了看不过来,则使用more分页查看ps -aux | more
说明:
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
---|---|---|---|---|---|---|---|---|---|---|
所属用户 | 进程ID | 占用cpu百分比 | 占用内存百分比 | 占用的虚拟内存 | 占用的物理内存 | 使用的终端 | 进程状态 | 进程启动的时间 | 占用cpu时间 | 启动该进程的命令 |
进程状态说明:
D 不可中断睡眠 (通常是在IO操作) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
R 正在运行或可运行(在运行队列排队中)
S 可中断睡眠 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
T 已停止的 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
W 正在换页(2.6.内核之前有效)
X 死进程 (未开启)
Z 僵尸进程 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放BSD风格的
< 高优先级(not nice to other users)
N 低优先级(nice to other users)
L 页面锁定在内存(实时和定制的IO)
s 一个信息头
l 多线程(使用 CLONE_THREAD,像NPTL的pthreads的那样)
+ 在前台进程组
查看某一个服务的进程(根据服务名)
ps -aux | grep [服务名]
例:查看sshd服务的进程
查看父进程(即以全格式形式查看进程,PPID即父进程ID)
#查看所有进程信息同时查询父进程ID
ps -ef
#以分页形式
ps -ef | more
#查看某个服务的进程信息及父进程ID
ps -ef | grep [服务名]
PPID就是父进程ID
终止进程(根据进程ID)
#通过进程号杀死进程
kill [可选] [进程ID]
#常用选项:
#强制终止进程
-9
示例:
(1)剔除某个登录用户,如剔除用户jack
(2)终止远程登录服务sshd,以后在适当的时候再重新启用sshd服务
若要重启sshd服务,则service sshd restart
(3)强制终止一个命令行终端
命令:/bin/bash
即表示打开一个终端
因此根据服务名查询所有终端的进程
ps -aux | grep bash
根据终端进程开启的时间,判断要关闭的终端,这里假设终止先前打开的一个终端
发现kill 2967
不起作用(因为它被系统认为是核心进程,无法终止)
所以强制终止进程:kill -9 2967
终止多个进程(根据服务名称匹配)
#把所有归属于指定进程名的进程终止,常用于终止一个进程及它的所有子进程
killall [进程名]
以树形结构查看进程(可以更直观地看出进程父子关系)
若没有tree插件,首先需要按照tree插件:yum install tree
#查看进程树
pstree [可选]
#常用选项:
#显示进程地PID
-p
#显示进程地所属用户ID
-u
17.服务管理(守护进程)
服务(service)本质就是进程,但是是运行在后台的,通常会监听某个端口,等待其他程序的请求,比如(mysql、sshd、防火墙等),因此我们又称之为守护进程
查看有哪些系统服务
#方式1
setup -> [系统服务]
#方式2
/etc/init.d/
#CentOS7之后用:
systemctl list-unit-files
方式1:
方式2:
service(CentOS7之后为:systemcel)相关指令
service [服务名] [可选]
#CentOS7之后用systemctl代替service,但是service也还能使用,并且语法为:
systemctl [可选] [服务名]
#可选值:
#启动
start
#停止
stop
#重启
restart
#重载
reload
#状态信息
status
注:使用systemctl(service)相关指令操作后,会立即生效,但是只是临时生效,当系统重启后,还是回归到以前对服务的设置
例子:
(1)查看防火墙状态
service iptables status
#CentOS7之后用:
systemctl status firewalld
检查Linux的某个端口是否在监听,并且可以访问
telnet [ip地址] [端口]
服务的运行级别
即前面目录5的内容
每个服务在各个运行级别中都可以设置【是否自启动】
设置某个服务自启动、关闭永久生效
#通过chkconfig命令可以给每个服务在各个运行级别下设置自启动/关闭(不会自启动)
chkconfig
#查看服务在各个运行级别下的自启动/关闭情况:
chkconfig --list
#只查看某一个(通过服务名)
chkconfig --list | grep [服务名]
#或:
chkconfig [服务名] --list
#是否将某个服务在运行级别5下设置为自启动,on:自启动,off:关闭(即不自启动)
chkconfig --level 5 [服务名] on/off
#################################################
#CentOS7之后
#enable:自启动
#disable:关闭(即不会自启动)
#查看服务的自启动/关闭情况:
systemctl list-unit-files
#查看所有自启动/关闭的服务
systemctl list-unit-files | grep enable/disable
#CentOS7之后为:
设置自启动/关闭后,需要重启reboot之后才会生效
动态监控进程top
top与ps命令很相似,它们都用来显示正在执行的进程,top与ps的最大的不同的之处,在于top在执行一段时间可以更新正在运行的进程
top [选项]
#指定top命令每隔几秒更新,默认是3秒在top命令的交互模式当中可以执行的命令
-d [秒数]
#使top不显示任何闲置或僵死进程
-i
#通过指定监控进程ID来仅仅监控某个进程的状态
-p
#输入top后,再输入u,再输入用户名,可查看某个用户的进程
u
[用户名]
#输入top后,再输入k,再输入进程ID,即可杀死某一进程
k
[PID]
#输入top后,再输入P(大写),可使之按照CPU占用率从多到少排序显示(默认下就是这种)
P
#输入top后,再输入M(大写),可使之按内存占用率从多到少排序显示
M
#输入top后,再输入N(大写),可使之按PID号从大到小排序显示
N
#退出top
q
监控网络状态
netstat [选项]
#按一定顺序排列输出
-an
#显示哪个进程在调用
-p
示例:
(1)查看系统所有的网络服务,并按一定顺序排列输出,并显示哪个进程在调用,并分页
(2)只查看sshd服务的有关信息
18.rpm包的管理
rpm:一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中,它生成具有.RPM扩展名的文件,RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的
Linux的分发版都有采用(suse,redhat,centos等等),可以算是公认的行业标准了
rpm包的简单查询指令
#查询已安装的所有rpm软件包
rpm -qa
#查询已安装的所有rpm软件包,以分页显示
rpm -qa | more
#查询某个已安装的rpm软件包
rpm -qa | grep [软件包名称]
#查询软件是否安装
rpm -q [软件包名称]
#查询软件包信息
rpm -qi [软件包名称]
#查询软件包中的文件(可以用来查询软件包安装在哪个位置)
rpm -ql [软件包名称]
#查询文件所属的软件包
rpm -qf
#安装某个rpm软件包
rpm -ivh [软件包全路径名称]
#参数说明:
#i:安装
i=install
#v:提示
v=verbose
#h:进度条
h=hash
#卸载某个rpm软件包
rpm -e [软件包名称]
#如果有其他软件包依赖于将要卸载的软件包,卸载时则会产生错误信息,若还是要删除,则可以增加参数:--nodeps,就可以强制删除, 但是不推荐这样,因为依赖于该软件包的软件可能将无法运行
#强制卸载
rpm -e --nodeps
19.YUM
yum:是一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包
#查询yum服务器是否有需要安装的软件
yum list | grep [软件包名称]
#下载安装指定的yum包
yum install [软件包名称]
六、搭建JavaEE环境
安装JDK、Tomcat、MySql
不管是在将Linux系统作为服务器来运行Java程序,还是在Linux上进行开发,都需要安装JDK,若是作为服务器来运行程序,还需要安装Tomcat容器、Mysql数据库
这里演示安装JDK
1.先使用Xftp将jdk安装包上传到linux中的/opt下
2.在/opt下解压安装包
3.配置环境变量
编辑/etc/profile文件来配置环境变量:vim /etc/profile
,输入G(大写)定位到文本末尾,写入:
JAVA_HOME=/opt/jdk1.8.0_16 1
PATH=/opt/jdk1.8.0_16 1/bin:$PATH
export JAVA_HOME PATH
4.注销用户后生效
测试是否安装成功,在任何地方输入:java或javac