`
vim和vi的基本介绍
所有的 Linux 系统都会内建 vi 文本编辑器。 Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别 语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别 丰富,在程序员中被广泛使用。
vim和vi的常用的三种模式
正常模式:
- 以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用 『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。
插入模式:
- 按下i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式, 一般来说按i即可
命令行模式:
- 在这个模式当中, 可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的 动作则是在此模式中达成的!
vi和vim的基本使用
使用vim Hello.java 对Hello.java进行编辑
vim和vi模式的相互切换

vim和vi快捷键的使用
快捷键练习使用:
-
- 拷贝当前行 yy , 拷贝当前行向下的5行 5yy,并粘贴。
-
- **删除**当前行 dd , 删除当前行向下的5行 5dd *
-
- 在文件中查找某个单词 [命令行下 /关键字 , 回车 查找 , 输入 n 就是查找下一个 ]
-
- 设置文件的行号,取消文件的行号.[命令行下 : set nu 和 :set nonu]
-
- 编辑 /etc/profile 文件,使用快捷键到底文档的最末行[G]和最首行[gg]
-
- 在一个文件中输入 “hello” ,然后又撤销这个动作 u
-
- 编辑 /etc/profile 文件,并将光标移动到 20行 shift+g
-
- 更多的看整理的文档

基本的指令
关机&重启命令
基本介绍
shutdown -h now 立即进行关机
shutdown -h 1 “hello,一分钟之后关机”
shutdown -r now 现在重启计算机
halt 关机,作用和上面一样 (CentOS6)
reboot 现在重新启动计算机
sync 把内存的数据同步到磁盘中
poweroff也是关机指令
注意细节
不管是重启系统还是关闭系统,首先要运行sync命,把内存中的数据写到磁盘中
用户管理
基本介绍: 1) 登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可 以利用普通用户登录,登录后再用”su - 用户名’命令来切换成系统管理员身份. 2) 在提示符下输入 logout 即可注销用户
在命令行里注销用户
直接输入logout(使用细节:logout注销指令在图形界面运行级别无效,在运行级别3有效)

添加用户
基本语法
useradd [选项] 用户名
cd 表示change directory,是切换目录
应用案例
1)添加一个用户xiaoming

细节说明
1)当创建用户成功后,会自动的创建和用户同名的家目录
2)也可以通过useradd -d指定目录 新的用户名,给新创建的用户指定家目录
修改/指定密码(在工作中密码必须复杂)
指定密码
passwd 用户名

修改密码

删除用户
基本语法
userdel [选项] 用户名 选项:-r 表示删除的同时,将其家目录也一同删除了
引用案例
1)删除用户xm,但是要保留家目录

2)删除用户xh以及用户主目录

细节:在删除用户时,我们一般不删除家目录
查询用户信息
基本语法
id 用户名
应用示例:查询root用户信息
如果用户不存在,则返回无此用户

切换用户
su - 切换用户名
应用实例
1)创建一个用户zf,指定密码,然后切换到zf

从普通用户切换回root用户两种方式
1)

2)
细节说明
1)从权限高的用户切换到权限低的用户,不需要输入密码,繁殖需要。
2)当需要返回到用户时,使用exit指令
查看当前用户/登录用户
- 基本语法
whoami / who am I
用户组
介绍:类似于角色,系统可以对共性的多个用户进行统一的管理。
增加组
groupadd 组名
案例演示(创建一个组)

删除组
指令(基本语法)
groupdel 组名
案例演示
增加用户时直接加上组
-
指令(基本语法)
useradd -g 用户组 用户名
案例演示
增加一个用户zwj,直接将zwj指定到wudang
步骤如下演示

修改用户组
指令(基本语法)
usermod -g 用户组(新的用户组) 用户名
案例演示
创建一个shaolin组,将zwj修改到shaolin

Linux实操篇 实用指令
指定运行级别(七个级别)
运行级别的示意图(centos6)

切换到指定运行级别的指令
基本语法
init[0123456]

应用实例
案例1:通过init来切换不同的运行级别,比如从5----->3,然后关机
init 3
init 5
init 0
指定运行级别
- 面试题
如何找回root密码,如果不小心忘记了root密码,怎么找回?
思路:进入到单用户模式,然后修改root密码。因为进入单用户模式,root不需要密码就可以登录。
演示



开机 —>在引导时输入 回车键 ----->看到一个界面输入 e ---->看到一个新的界面,选中第二行(编辑内核)
再输入 e ---->在这一行的最后输入 1 ,再输入回车键 ----->再次输入b,这时就进入了单用户模式 再用paswd root进行更改密码(上面的图片没有截完整)
2)请设置我们的运行级别,Linux运行后,直接进入到命令行界面,即进入到3运行级别vim /etc/inittab
将id:initdefault:这一行中的数字,5这个数改成3即可
centos7运行级别
进入不同运行级别的方式
init 0 #关机
init 3 #进入3级别字符界面
init 5 #进入5级别图形界面
init 6 #重启
设置系统默认的运行级别
#设置默认第三启动级别
[root@node5 ~]# systemctl set-default multi-user.target
#设置默认第五启动级别
[root@node5 ~]# systemctl set-default graphical.target
[root@node5 ~]# runlevel
3 5 #表示从3级别切换到了5级别
#查看当前默认的启动级别
[root@node5 ~]# systemctl get-default
graphical.target
[root@node5 ~]# systemctl get-default
multi-user.target
帮助指令
介绍
当我们对某个指令不熟悉时,我们可以使用Linux提供的帮助指令来了解指令的使用方法。
man基本语法
- man[命令或配置文件](功能描述:获得帮助信息)
应用实例
案例:查看ls命令的帮助信息

help指令
-
基本语法
-
help 命令(功能描述,获得shell内置命令的帮助信息)
-
应用实例
案例:查看cd命令的帮助信息

文件目录类
目录结构的基本介绍


pwd指令
基本语法
pwd(功能描述:显示当前工作目录的绝对路径)
应用案例
- 案例:显示当前工作目录的绝对路径

ls指令
基本语法
ls [选项] [目录或是文件]
常用选项
-a :显示当前目录所有的文件和目录,包括隐藏的。
-l :以列表的方式显示信息
应用实例
案例:查看当前目录所有内容信息


cd指令
基本语法
- cd [参数] (功能描述:切换到指定目录)
常用参数
- 绝对和相对路径
重点是脑海中要有一个目录树

cd ~ 或者cd: 回到自己的家目录(home目录)
cd ..回到当前目录的上一级目录
思考题:
1)当前工作目录是/root,我们希望进入到/home下
绝对路径:/home,即从根目录开始定位。
相对路径:. ./home(. .代表回到上级目录,然后再去找到home目录,从当前工作目录开始定位到需要的目录去)
应用实例
案例1:使用绝对路径切换到root目录
cd /root
案例2:使用相对路径切换到/root目录
这里我们要知道该用户目前在哪个目录下,才能写出这个指令,假设在/usr/lib
cd ../../root
非常重要:. .代表的是上级目录(在相对路径中)
cd ../home
案例3:表示回到当前目录的上一级目录
cd ..
案例4:回到家目录
cd
cd ~

mkdir指令
- mkdir指令用于创建目录(make directory)
基本语法
mkdir [选项] 要创建的目录
案例
一次性创建单个目录
在home目录下创建pig目录

一次性创建多级目录
在home目录下同时创建animal,同时创建tiger,记住创建多级目录要带上-p这个选项

rmdir指令
介绍
rmdir 指令删除空目录
应用实例
- 案例一:删除一个目录 /home/pig

使用细节
rmdir删除的是空目录,如果目录下有内容时无法删除。
提示:如果需要删除的非空目录,如要使用rm -rf要删除的目录

touch指令
介绍
- touch指令创建空文件
基本语法
touch 文件名称(后面可以接多个文件名,用于创建多个文件)
应用实例
- 案例一:创建一个空的hello.txt

- 案例二:创建多个文件夹

cp指令(重要)
介绍
- cp指令拷贝文件到指定目录(cp就是copy)
基本语法
cp [选项] source dest (source就是源文件的位置,dest就是要拷贝的目标文件的位置)
常用选项
-r:递归复制整个文件夹
应用实例
-
案例一:将/home/aaa.txt拷贝到/home/bbb目录下面

-
案例二:递归复制整个文件夹,举例
将/home/test整个目录拷贝到/home/zwj目录(用-r表示递归复制)

使用细节
- 强制复制不提示方法:\cp

技术小技巧
可以通过 上下箭头键,调出原来使用过的指令。
rm指令
基本介绍
rm指令移除文件或目录
基本语法
rm [选项] 要删除的文件或目录
常用选项
-r:递归删除整个文件夹
-f:强制删除不提示
应用实例
案例一:将/home/aaa.txt删除

案例二:递归删除整个文件夹/home/bbb

- 使用细节
强制删除不提示的方法:带上-f参数即可

mv指令
基本介绍
mv移动文件与目录或重命名(move)
基本语法
mv oldNameFile newNameFile (功能描述:重命名)可以理解为,把当前文件夹下的oldNameFile,移动到当前目录下面,发现已经有了,就是重名了
mv/temp/movefile/targetFolder (功能描述,移动文件)
应用实例
案例一:将 /home/aaa.txt文件 重新命名为pig.txt

案例二:将/home/pig.txt文件移动到 /root目录下

cat指令
基本介绍
cat 查看文件内容,是以只读的方式打开
基本语法
cat [选项] 要查看的文件
常用选项
-n : 显示行号
应用实例
案例一:/etc /profile 文件内容,并显示行号

使用细节
cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more
cat 文件名 | more[分页浏览]
more指令
基本介绍
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
more指令中内置了若干快捷键,详见操作说明。
基本语法
more 要查看的文件
操作说明
| 操作 | 功能说明 |
|---|---|
| 空白键(space) | 代表向下翻页 |
| Enter | 代表向下翻[一行] |
| q | 代表立刻离开more,不再显示文件内容 |
| Ctrl+F | 向下滚动一屏 |
| Ctrl+B | 返回上一屏 |
| = | 输出当前的行号 |
| :f | 输出文件名和当前行的行号 |
less指令
基本介绍
less指令用来分屏查看文件的内容,它的功能与more指令类似。但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是将整个文件加载之后才显示,而是根据现实需要加载内容,对于显示大型文件具有较高的效率。
基本语法
less要查看的文件
操作说明
| 操作 | 功能说明 |
|---|---|
| 空白键 | 向下翻动一页 |
| [pagedown] | 向下翻的一页 |
| [pageup] | 向上翻动一页 |
| /字串 | 向下搜寻[字串]的功能:n:向下查找 N:向上查找 |
| ?字串 | 向上搜寻[字串]的功能:n:向上查找 N:向下查找 |
| q | 离开less这个程序 |
应用实例
案例:采用less查看一个大文件文件/opt/金庸-射雕英雄传txt精校本.txt
>指令重定向和>>指令追加
基本介绍
>输出重定向 和>>追加(追加到文件末尾)
输出重定向:会将原来的文件内容覆盖
追加:不会覆盖原来的文件的内容而是追加到文件的尾部
基本语法
1)ls -l > 文件 (功能描述:列表内容写入到文件a.txt中(覆盖写))
- ls -al >> 文件 (功能描述:列表内容追加入到文件a.txt末尾)
说明:ls -l > a.txt,将ls -l显示的内容覆盖写入到a.txt文件中,如果该文件不存在则创建该文件,反之,则覆盖
- cat 文件1> 文件2 (功能描述:将文件1内容覆盖到文件2)
4)echo “内容” >> 文件
应用实例
案例一:将/home目录下的文件列表写入到/home/info.txt中

案例二:将当前日历信息追加到/home/mycal文件中[提示cal]

echo指令
基本内容
echo输出内容到控制台
基本语法
echo [选项] [输出内容]
应用实例
案例:使用echo指令输出环境变量 ,输出当前的环境的路径。

案例:使用echo指令输出hello,world!

head指令
基本说明
head用于显示文件的开头部分,默认情况下head显示文件的前10行内容
基本语法
head 文件 (功能描述:查看文件的头10行内容)
head -n 5 文件 (功能描述:查看文件的头5行内容,5可以是任意数)
应用实例
案例:查看 /etc/profile的前面5行代码

tail指令
基本介绍
tail用于输出文件中末尾的内容,默认情况下tail显示文件的后10行内容。
基本语法
tail 文件 (功能描述:查看文件后10行内容)
tail -n 5 文件 (功能描述:查看文件的后5行内容,5可以是任意数)
tail -f 文件 (功能描述:实时追踪该文档的所有更新)(工作中经常使用)
Ctrl+c退出追踪
使用示例
案例一:查看/etc/profile最后5行的代码

案例二:实时监控mydate.txt,看看到文件有变化时,是否会看到,实时的追加日期

ln指令(了解)
基本介绍
软链接也叫符号链接,类似于windows里面的快捷方式,主要是存放了链接其他文件的路径
基本语法
ln -s [源文件或目录] [软链接名] (功能描述:给源文件创建一个软连接)
应用实例
案例1:在/home目录下创建一个软链接linkToRoot,连接到/root目录

案例2:删除软链接linkToRoot

细节说明
当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。
history指令
基本介绍
查看已经执行过的命令,也可以执行历史指令
基本语法
history (功能描述:查看已经执行过的历史命令)
histroy number (显示最近number条指令)
!number (执行第number条指令)
应用实例
案例一:显示所有的历史命令

案例二:显示最近使用的10个命令

案例三:执行历史编号为5的指令

时间日期类相关的指令
date指令-显示当前日期
基本语法
date (功能描述:显示当前时间)
date +%Y (功能描述:显示当前年份)
date +%m (功能描述:显示当前月份)
date +%d (功能描述:显示当前是哪一天)
date +"%Y-%m-%d %H:%M:%s" (功能描述:显示年月日时分秒)
注意:这个+一定得加上
应用实例
案例一:显示当前时间信息

案例二:显示当前时间年月日

案例三:显示档期那时间年月日时分秒

date指令-设置日期
基本语法
date -s 字符串时间
应用实例
案例一:设置系统当前时间,比如设置成2021-5-28 11:22:22

cal指令
基本介绍
查看日历指令
基本语法
cal [选项] (功能描述:不加选项,显示本月日历) canlender的简写
应用实例
案例一:显示当前日历

案例二:显示2020年日历

搜索查找类
find指令
基本介绍
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
基本语法
find [搜索范围] [选项]
选项说明
| 选项 | 功能 |
|---|---|
| -name<查询方式> | 按照指定的文件名查找模式查找文件 |
| -user<用户名> | 查找属于指定用户名地所有文件 |
| -size<文件大小> | 按照指定的文件大小查找文件 |
应用实例
案例一:按文件名:更具名称查找/home目录下的hello.txt文件

案例二:按拥有者:查找/opt目录下,用户名称为nobody的文件

案例三:查找整个linux系统下大于20M的文件(+n大于 -n小于 n等于,注意这里的n表示的是数字,单位可以根据实际情况来调整,k得用小写)

案例四:查询小于20M的文件

案例五:查询根目录下面以txt后缀结尾的文件

locate指令
基本介绍
locate指令可以快速定位文件路径。locate指令利用实现建立的系统中所有文件名称以及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。
基本语法
locate 搜索文件
特别说明
由于locate指令基于数据进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
应用实例
案例一:请使用locate指令快速定位hello.txt文件所在目录
grep指令和管道符号 |
基本介绍
grep过滤查找,管道符,"|",表示将前一个命令的处理结果输出传递给后面的命令处理。 ("|",这后面的就是加上条件)
基本语法
grep [选项] 查找内容 源文件
选项 功能
-n 显示匹配行以及行号。
-i 忽略字母大小写
应用实例
案例一:请在hello.txt文件中,查找"yes"所在行,并显示行号。

压缩和解压缩类
gzip/gunzip 指令
基本介绍
gzip用于压缩文件,gunzip用于解压
基本语法
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
应用实例
案例一:gzip压缩,将/home下的hello.txt文件进行压缩

案例二:gunzip压缩,将/home下的hello.txt.gz文件进行解压缩

细节说明
当我们使用gzip对文件进行压缩后,不会保留原来的文件。
zip/unzip指令
基本介绍
zip用于压缩文件,unzip用于解压文件,这个在项目打包发布中很有用的
基本语法
zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
uzip [选项] XXX.zip (功能描述:解压文件)
zip常用选项
-r: 递归压缩,即压缩目录
uzip的常用选项
-d <目录> :指定压缩后的文件的存放目录
应用实例
案例一:将/home下的所有文件压缩成mypackage.zip


案例二:将mypackage.zip解压到/opt/tmp目录下

tar指令
基本介绍
tar指令是打包指令,最后打包后的文件是.tar.gz的文件。
基本语法
tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
- 选项说明
| 选项 | 功能 |
|---|---|
| -c | 产生.tar打包文件 |
| -v | 显示详细信息 |
| -f | 指定压缩后的文件名 |
| -z | 打包时同时压缩 |
| -x | 解压.tar文件 |
应用实例
案例一:压缩多个文件,将/home/a1.txt和/home/a2.txt压缩成a.tar.gz

案例二:将/home的文件夹压缩成myhome.tar.gz

案例三:将a.tar.gz解压到当前目录

案例四:将myhome.tar.gz解压到/opt/tmp2目录下

组管理和权限管理(重难点)
Linux组的基本介绍
在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、躲在组、其他组的概念。
1)所有组
2)所在组
3)其他组
4)改变用户所在组
文件 / 目录所有者
基本介绍
一般文件的创建者,设创建了该文件,就自然成为了该文件的所有者。
查看文件的所有者
指令: ls -ahl
应用实例
应用实例: 创建一个组police,再创建一个用户tom,然后使用tom来创建一个文件,看看情况如何


修改文件所有者
指令 : chown 用户名 文件名 (chown:就是change own)
应用案例
要求:使用root创建一个文件apple.txt,然后将所有者修改为tom

组的创建
基本指令
groupadd 组名
应用实例
创建一个组,monster
创建一个用户fox,并放入到monster组中

文件/目录所在组
当某个用户创建了一个文件后,默认这个文件的所在组就是该用户所在的组。
查看文件/目录所在组
基本指令
ls -ahl
应用实例
修改文件所在组
基本指令
chgrp 组名 文件名 (chgrp change group)
linux下命令“ll”是“ls -l"的别名。别名相当于windows里的快捷方式。
所以"ll"和“ls -l”的功能是相同的。
所以"ll"和"ls"的区别其实是“ls”和"ls -l"的区别。
”ls“是显示当前目录下文件,”ls -l“是显示当前目录下文件详细信息。
应用实例
使用root用户创建文件orange.txt,看看当前文件属于哪个组,然后将这个文件所在的组修改到police组

其他组
出去文件的所有者和所在组的用户外,系统的其他用户都是文件的其他在。
改变用户所在组
基本介绍
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限才可以改变某个用户所在的组。
改变用户所在组指令
usermod -g 组名 用户名
usermod -d 目录名 用户名 改变该用户登陆的初始目录
应用实例
创建一个土匪组(bandit)将tom这个用户从原来所在的police组,修改到bandit(土匪)组。

权限的基本介绍
Linux的权限不是很细致,只有RWX三种
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限;对目录来说,具有新建,删除,修改,移动目录内文件的权限。
x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
1、目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。
2、只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
3、一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外
4、目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件


rwx权限详解
rwx作用到文件
[r]代表可读(read):可以读取,查看
[w]代表可写(write):可以修改,但是不代表可以删除文件,删除文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
rwx作用到目录
[r]代表可读(read):可以读取,ls查看目录内容
[w]代表可写(write):可以修改,目录内创建+删除+重命名目录
[x]代表可执行(execute):可以进入该目录
文件及其目录权限实际案例
ls -l中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09 : 39 abc
10个字符确定不同用户能对文件干什么
第一个字符代表文件的类型:文件(-),目录(d),链接(l)
其余字符每3个一组(rwx)读(r)写(w)执行(x)
第一组rwx:文件拥有者同一组的用户权限是读、写和执行
第二组rw-: 与文件拥有者同一组的用户的权限是读、写但是不能执行
第三组r–:不与文件拥有者同组的其他用户的权限是读不能写和执行
**可用数字表示为:**r=4,w=2,x=1因此rwx=4+2+1=7 (用数字表示权限)
| 1 | 文件:硬链接数或目录:子目录数 |
|---|---|
| root | 用户 |
| root | 组 |
| 1213 | 文件大小(字节),如果是文件夹,显示4096字节 |
| Feb 2 09 : 39 | 最后修改时间 |
| abc | 文件名 |
修改权限 -chmod(change modify的意思)
基本说明
通过chmod指令,可以修改文件或者目录的权限。
第一种方式:+、-、= 变更权限
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
chmod u=rwx , g=rx , o=x文件目录名
chmod o+w 文件目录名
chmod a-x 文件目录名
案例演示
1)给abc文件的所有者读写执行权限,给所在组执行权限,给其他组的用户读执行权限。

2)给abc文件的所有者出去执行的权限,增加组的用户写权限

3)给abc文件的所有用户添加读的权限

第二种方式:通过数字变更权限
r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于 chmod 751 文件名称
- 案例演示
要求:将/home/abc.txt文件的权限修改为,rwx r-xr-x,使用给数字的方式实现(这里面是每三个符号一组)
rwx = 4+2+1=7
r-x=4+1=5
r-x=4+1=5
指令chmod 755 /home/abc.txt
修改文件所有者-chown
基本介绍
chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
带上-R参数如果是目录 则使其下所有子文件或目标递归生效
案例演示
1)请将/home/abc.txt文件的所有者修改为tom

2)请将/home/kkk目录下所有的文件和目录的所有者都修改为zwj
首先我们应该使用root用户来操作。

修改文件所在组-chgrp
基本介绍
chgrp [选项] newgroup(改变文件的所有组) file
选项:-R表示递归修改其下所有子文件或者目录
案例演示
1)请将/home/abc.txt文件的所有组修改成bandit(土匪组)

2)请将/home/kkk目录下的所有文件和目录的所在组都修改成bandit(土匪组)

最佳实践-警察和土匪游戏
police , bandit
jack,jerry警察
xh , xq:土匪
1)创建组
groupadd police
groupadd bandit
2)创建用户

将密码都指定为123

3)jack创建一个文件,自己可以读写,本组人可以读,其他组人没有任何权限
chmod 640 jack01.txt
也可以用 chmod o= jack01.txt

4)jack修改该文件,让其他组人可以读。本组人可以读写

5)xq投靠警察,看看是否可以读写
先用root修改xq的组:

再使用jack给他的家目录/home/jack所在组一个rx权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Ih9FvKS-1625659084602)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20210608155408201.png)]
文件联系权限管理[课后练习1]
建立两个组(神仙,妖怪)
建立四个用户(唐僧,悟空,八戒,沙僧)
把悟空,八戒放在妖怪组,唐僧沙僧放进神仙组
用悟空建立一个文件(monkey.java该文件要输出 i am monkey)
给八戒一个rw的权限

唐僧沙僧对该文件没有权限

把沙僧放入妖怪组

让沙僧修改该文件monkey,加入一句话(“我是沙僧,我是妖怪!”);
文件联系权限管理[课后练习2]
1)用root登录,建立用户mycentos,自己设定密码

2)用mycentos登录,在主目录下建立目录test/t11/t1

3)在t1中建立一个文本文件aa,用vi编辑器内容为ls -al

4)改变aa的权限为可执行文件[可以将当前日期追加到一个文件],运行该文件./aa


5)删除新建立的目录test/t11/t1

6)删除用户mycentos以及其主目录中的内容

7)将Linux设置到图形界面
8)重新启动Linux或关机
reboot 重启
halt 关机
定时任务调度
crond任务调度
crond进行定时任务的设置
原理示意图

概述
任务调度是指在系统的某个时间执行的特定的命令或者程序。
任务调度分类:1、系统工作:游戏重要的工作必须是周而复始的执行。比如病毒扫描等
2、个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。
基本语法
crontab [常用 选项]
常用选项
| -e | 编辑crontab定时任务 |
|---|---|
| -l | 查询crontab任务 |
| -r | 删除当前用户所有的crontab任务 |
任务要求
设置任务跳读文件:/etc/crontab
设置个人任务调度。执行crontab -e 命令
接着输入任务到调度文件
如:*/1 ****ls -l / etc />/ tmp/to.txt
意思说每小时的每分钟执行ls -l /etc/ > /tmp/to.txt命令
步骤如下
1) cron -e
2) */1 * * * * ls -l /etc>> /tmp/to.txt
3) 当保存后就退出程序
4) 在每一分钟都会调用 ls -l /etc>> /tmp/to.txt
细节参数说明
- 5个占位符的说明
| 项目 | 含义 | 范围 |
|---|---|---|
| 第一个“*” | 一小时中的第几分钟 | 0-59 |
| 第二个“*” | 一天中的第几小时 | 0-23 |
| 第三个“*” | 一月中的第几天 | 1-31 |
| 第四个“*” | 一年中的第几月 | 1-12 |
| 第五个“*” | 一周中的星期几 | 0-7(0和7都代表星期日) |
- 特殊符号的说明
| 特殊符号 | 含义 |
|---|---|
| * | 代表任何时间。比如第一个“*”就代表一个小时中每分钟都执行一次的意思。 |
| , | 代表不连续的时间。比如“0 8 ,12 ,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
| - | 代表连续的时间范围。比如“0 5 * * 1-6命令 ” ,代表在周一到周六的凌晨5点0分执行命令 |
| */n | 代表没隔多久执行一次。比如“*/10 * * * * 命令” ,代表每隔10分钟就执行一遍命令 |
- 特定时间执行任务案例
| 时间 | 含义 |
|---|---|
| 45 22 * * * 命令 | 在22点45分执行命令 |
| 0 17 * * 1 命令 | 在每周1的17点0分执行命令 |
| 0 5 1 ,15 * * 命令 | 在每月1号和15号的凌晨5点0分执行命令 |
| 40 4 * * 1-5 命令 | 每周一到周五的凌晨4点40分执行命令 |
| */10 4 * * * 命令 | 每天的凌晨4点,每隔十分钟执行一次命令 |
| 00 1 , 15 * 1命令 | 每月1号和15号,每周1点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们的定义都是天。非常容易让管理员混乱 |
crond任务调度应用实例
案例
案例1:每隔一分钟,就将当前的日期信息,追加到 /tmp/mydate文件中
1)先编写一个文件 /home/mytask1.sh
指令
vim /home/mytask1.sh
date >> /tmp/mydate
2)给mytask1.sh一个可执行权限
chmod 744 /home/mytask1.sh
3)crontab -e

4)*/1 * * * * /home/mytask1.sh
5)成功
案例2:每隔一分钟,将当前日期和日历都追加到 /home/mycal文件中
1)先编写一个文件 /home/mytask2.sh
指令
vim /home/mytask2.sh
date >> /tmp/mcycal
2)给mytask1.sh一个可执行权限
chmod 744 /home/mytask2.sh
3)crontab -e
4)*/1 * * * * /home/mytask2.sh
5)成功
案例3:每天凌晨2:00将mysql数据库testdb。备份到文件中。
crond相关的指令
crontab -r :终止任务调度
crontab -l :列出当前有哪些任务调度
service crond restart [重启任务调度]
Linux磁盘分区、挂载
分区基础知识
分区的方式(了解)
1)mbr分区:
1.最多支持四个主分区
2.系统只能安装在主分区
3.扩展分区只要占一个主分区
4.MBR最大支持2TB,但拥有最好的兼容性
2)gtp分区:
1.支持多个主分区(但操作系统可能限制,比如Windows下最多128个分区)
2.最大支持18EB的大容量(EB=1024PB,PB=1024TB)
3.windows7 64位以后支持gtp
Windows下的磁盘分区

Linux分区
原理介绍
1)Linux来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每一个分区都是用来组成文件系统的一部分。
2)Linux采用一种叫做“载入”的处理方法,它的整个文件系统中包含了一整套文件和目录,且将一个分区和一个目录联系起来。这是要载入一个分区将它的存储空间在一个目录下获得。
3)示意图

硬盘说明
1)Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
2)对于IDE硬盘,驱动器标识符为“hdx~”,其中 “hd”表明分区所在设备的类型,这是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,他们是主分区或扩展分区,hbd2表示为第二个IDE硬盘上过的第二个主分区或扩展分区。
3)对于SCSI硬盘则表示为“sdx”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。
使用 lsblk 指令查看当前系统的分区情况


挂载的经典案例
需求是给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk

如何增加一块硬盘
1)虚拟机添加硬盘
2)分区
fdisk /dev/sdb
3)格式化
mkfs -t ext4 /dev/sdb1 mkfs是格式化的意思
这里表示的是把dev下面的sdb1格式化成ext4类型的文件类型
4)挂载
先创建 /home/newdisk
再进行挂载 mount /dev/sdb1 /home/newdisk

5)设置可以自动挂载(永久挂载,当你重启机系统后,仍然可以挂载到 /home/newdisk上面去)。
vim /etc/fstab 进入之后加上
/dev/sdb1 /home/newdisk ext4 defaults 0 0
具体的操作步骤
虚拟机增加硬盘步骤1(增加硬盘)
在【虚拟机】菜单中,选择【设置】,然后设备列表里面添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,直至完成。然后重启系统(才能识别)!

虚拟机增加硬盘步骤2(对磁盘进行分区 )
分区命令
fdisk /dev/sdb
开始对/sdb分区
- m 显示命令列表
- n 显示磁盘分区 同 fdisk -1
- d 删除分区
- w 写入并退出
说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认全部空间,最后输入w并退出,若不保存推出输入q。

虚拟机增加硬盘步骤3(格式化磁盘)
格式化磁盘
分区命令:mkfs -t ext4 /dev/sdb1
其中ext4是分区类型
虚拟机增加硬盘步骤4 (挂载)
挂载:将一个分区于一个目录联系起来
mount 设备名称 挂载目录
例如:mount /dev/sdb1 /newdisk
umount 设备名称 或者 挂载目录 (相当于卸载)
例如:umount /dev/sdb1 或者 umount /newdisk
虚拟机增加硬盘步骤5(实现永久挂载)
永久挂载:通过修改/etc/fstab实现挂载
添加完成后 执行 mount -a 立即生效

磁盘情况查询
查询系统整体磁盘使用情况
-
基本语法
查看磁盘占用情况 df -lh -
应用实例

查询指定目录磁盘占用情况
-
基本语法
du -h /目录 查询指定目录的磁盘占用情况,默认为当前目录 -s 之目录大小的汇总 -h 带计量单位 -a 含文件 --max-depth =1 子目录深度 -c 列出明细的同时,增加汇总值- 应用实例
查询 /opt 目录的磁盘占用情况,深度为1

磁盘情况-工作实用指令
1)统计 /home 文件夹目录下的个数
ls -l /home | grep "^-" | wc -l

2)统计/home文件夹下目录的个数
ls -l /home | grep "^d" | wc -l

3)统计 /home 文件夹下文件的个数,包括子文件夹里面的
ls -lR /home | grep "^-" | wc -l 加上了R就将/home下面的文件的个数,包括子文件夹里面的都递归统计

4)统计文件夹下目录的个数,包括子文件夹里面的
ls -lR /home | grep "^d" | wc -l 加上了R就将/home下面的文件的个数,包括子文件夹里面的都递归统计

5)以树状显示目录结构
tree 指令的安装
yum install tree


实操篇之网络配置
Linux网络配置的原理图(含虚拟机)
目前我们采用的是NAT模式。


查看网络IP和网关
查看虚拟网络编辑器
VMware 编辑 -----> 虚拟网络配置
修改IP地址(修改虚拟网卡的IP 也就是vmnet8)

查看网络IP和网关

查看Windows环境中的VMnet8网络配置(ipconfig指令)
1)使用ipconfig查看
2)界面查看

ping测试主机之间网络的连通性
基本语法
ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)
应用实例
测试当前服务器是否可以访问百度
ping www.baidu.com
Linux网络环境配置
第一种方式(自动获取)
说明:登陆后,通过界面来设置自动获取IP

特点:Linux启动后会自动获取IP,缺点是每次启动后自动获取的IP地址可能不一样。这个不适用于做服务器,因为我们服务器的IP需要是固定的。
第二种方式(指定固定的IP)
- 说明192.168.122.1
直接修改文件来指定IP,并且可以连接到外网(推荐),编辑 vi /etc/sysconfig/network-scripts/ifcfg-ens33(centos7),( vi /etc/sysconfig/network-scripts/ifcfg-eth0 这个为centos6)
要求:将IP地址设置成静态的,IP地址为192.168.31.128

修改后,一定要重启服务
1)service network restart
2)reboot 重启机器
实操篇之进程管理
基本介绍
1)在Linux中,每个执行的**程序(代码)**都成为一个进程。每个进程都分配一个id号。
2)每个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器。
3)每个进程都可能以两种方式存在。前台和后台,所谓前台进程就是用户目前屏幕上可以进行的操作。后台进程实际在操作,由于屏幕上无法看到进程,通常使用后台方式执行。
4)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。知道关机才结束。
显示执行的进程
说明:查看进程使用的指令是ps ,一般来说使用的参数是 -aus
ps显示信息选项:
| 字段 | 说明 |
|---|---|
| PID | 进程识别号 |
| TTY | 终端机号 |
| TIME | 此进程所消耗CUP时间 |
| CMD | 正在执行的命令或进程名 |
ps -a :显示当前终端的所有进程信息
ps -u :以用户的格式显示进程信息
ps -x :显示后台进程运行的参数
ps -aux | more

ps详解
1)指令:ps -aux | grep xxx ,比如看看有没有sshd服务
2)指令说明
- System V 展示风格
- USER :用户名称
- PID:进程号
- %CPU:进程占用CPU的百分比
- %MEM:进程占用的物理内存的百分比
- VSZ:进程占用虚拟内存的大小(单位:KB)
- RSS:进程占用的物理内存的大小(单位:KB)
- TT:终端名称,缩写
- STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或被停止等待
- STARTED:进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间。
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
应用实例
要求:以全格式显示当前所有的进程,查看进程的父进程。
- ps -ef 是以全格式显示当前的所有的进程
- -e 显示所有进程。-f全格式。
- ps -ef | grep xxx
- 是BSD风格
- UID:用户ID
- PID:进程ID
- PPID:父进程ID
- C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程I/O密集型运算,执行优先级会提高
思考题,如果我们希望查看sshd进程的父进程号是多少,应该怎么样查询?
ps -ef | grep sshd

终止进程kill和killall
介绍
若是某个进程执行一般需要停止时,或是已消了很大的系统资源时,可以考虑停止该进程。使用kill命令来完成此项任务。
基本语法
kill [选项] 进程号 (功能描述:通过进程号来杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
常用选项
-9 表示强迫进程立即停止
最佳实践:
案例一:踢掉某个非法登录的用户
ps -aux | grep sshd

案例二:终止远程登陆服务sshd,在适当时候再次重启sshd服务
ps -aux | grep sshd
kill 1467
ps -aux | grep sshd

案例三:种植多个gedit编辑器 【killall ,通过进程名称来终止进程】
gedit 执行两次
killall gedit

案例四:强制杀死一个终端
ps -aux | grep bash
kill -9 [终端端口号]

查看进程树pstree
基本语法
pstree [选项] ,可以更加直观的来观看进程
常用选项
-p : 显示进程的PID
-u : 显示进程的所属用户
应用实例
案例一:请你以树状形式显示进程的pid
pstree -p | more

案例二:请你以树状形式显示用户的id
pstree -u | more

服务(service)管理
介绍
服务(service)本质就是进程,但是运行在后台的,同城都会监听某个端口,等待其他程序的请求,比如(mysql,sshd,防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。
【原理图】

service (CentOS6 )systemctl(CentOS7.0 ) 管理命令
CentOS7.0 systemctl [start | stop | restart | reload | status |
mask ] 服务名 这里的mask 是表示禁用的意思,reload表示的是重载
service服务指令在/etc/init.d/

systemctl指令管理的服务是在/usr/lib/systemd/system查看

service 服务名 [start | stop | restart | reload | status |mask ]
在CentOS7.0后 不再使用service ,而是systemctl
systemctl [start | stop | restart | reload | status | mask ] 服务名 这个很重要
chconfig指令
介绍
1、通过chconfig命令可以给服务的各个运行级别设置自 启动 / 关闭
2、chconfig指令管理的服务在/etc/init.d查看
3、注意:CentOS7后,很多服务使用systemctl管理
chconfig基本语法
- 查看服务 chconfig --list [ | grep xxx ]
- chconfig 服务名 --list

- ckconfig --level 5 服务名 on/off
案例演示:对network 服务进行各种操作,把network在运行级别3关闭自启动
chkconfig --level 3 network off
chkconfig --level 3 network on


使用细节
chconfig重新设置服务后自启动或关闭,需要重启机器reboot生效
systemctl指令的常见使用
systemctl基本介绍:在Centos 中 systemctl 是设置系统服务的命令,即 service , 它融合之前service和chkconfig的功能于一体。
可以使用它永久性或只在当前会话中启用/禁用服务。
systemctl 设置服务的自启动状态
systemctl 输出激活的单元,即列出所有正在运行的服务
systemctl list-units 输出激活的单元
systemctl --failed 输出运行失败的单元
systemctl list-unit-files [[|grep 服务名] (查看服务开机启动状态,grep可以进行过滤)
systemctl enbale 服务名 (设置服务开机启动)
systemctl disabale 服务名 (关闭服务开机启动)
systemctl is-enbaled 服务名 (查询某个服务是否是自启动的)
启动一个服务
systemctl start sshd.service 也可以省略(.service)
在开机启动或者关闭服务:
systemctl enbale sshd.service
systemctl disable sshd.service
查看是否开机启动
systemctl is-enbaled sshd.service
查看已启动的服务列表:
systemctl list-unit-files | grep enabled
查看启动失败的服务列表:
systemctl --failed
查看防火墙服务
ls -l /usr/lib/systemd/system | grep firewalld

查看防火墙的自启动状态
systemctl list-unit-files | grep firewalld

systemctl is-enabled firewalld

查看网络状态
netstat -anp |more

使用案例
1)查看当前防火墙的状况,关闭防火墙和重启防火墙 ( CentOS7.0中)
systemctl status firewalld firewalld 表示的是防火墙的意思
systemctl stop firewalld 关闭防火墙

细节讨论:
1)关闭或者其用防火墙后,立即生效。 [telnet 测试某个端口即可]

2)这种方式这是临时生效,当重启系统后,还是回归以后对服务的设置
3)如果希望设置,某个服务自动启动或关闭永久生效,使用chekconfig指令。
查看服务名
方式一:使用setup --> 系统服务 就可以看到
setup

方式二: /etc/init.d/服务名称

服务的运行级别(runlevel):
Linux系统有七种运行级别(runlevel):常用的是级别3和5
运行级别0:系统停机状态,系统默认的运行级别不能设置为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(有NFS),不支持网络
运行级别3:完全的多用户状态(有NFS)无界面,登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登录后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设置为6,否则不能正常启动
- 开机的流程
开机 -----》 BIOS -------》 /boot -------》systemd进程1----------》运行级别------------》运行级别对应的服务
1、查看默认的运行级别
systemctl get-default

2、设置运行级别为3号级别
systemctl set-default multi-user.target

3、设置成图形化界面
systemctl set-default graphical.target

示意图

打开或者关闭指定端口
在真正的生产环境中,往往需要防火墙打开,如果把防火墙打开,那么外部请求数据包就不能跟服务器监听通讯。这时,需要打开指定端口。比如80、22、8080等。
firewall指令
打开端口:
firewall-cmd --permanet --add-port=端口号/协议
关闭端口:firewall-cmd --permanet --remove-port=端口号/协议
需要重新载入,才能生效:firewall-cmd --reload
查询端口是否开放:firewall-cmd --query-port=端口/协议
应用案例
1、启用防火墙,测试111端口是否能telnet ,不行
2、开放111端口

3、再次关闭111端口
关闭端口:firewall-cmd --permanet --remove-port =端口号/协议
需要重新载入,才能生效:firewall-cmd --reload

动态监控进程
介绍
top与ps命令很相似。他们都是用来显示正在执行的进程。Top与ps的最大不同之处,在于top执行一段时间后可以更新正在运行的进程。
基本语法
top [选项]
选项说明
| 选项 | 功能 |
|---|---|
| -d 秒数 | 指定top命令每隔几秒更新。默认是3秒 |
| -i | 使top不显示任何闲置或者僵尸进程 |
| -p | 通过指定监控进程ID来仅仅监控某个进程的状态 |
使用top指令动态监控进程
下图的zombie是僵尸进程,已经死掉了,但是内存没有释放

交互操作说明
| 操作 | 功能 |
|---|---|
| P | 以CUP使用率排序,默认就是此项 |
| M | 一内存使用率排序 |
| N | 以PID排序 |
| q | 退出top |
应用实例
案例一:监视特定用户
top:输入此命令,按回车键,查看执行的进程。
u:然后输入"u"回车,再输入用户名,即可。

案例二:终止此进程,比如我们要结束pzx登录
top:输入此命令,按回车键,查看执行的进程。
k:然后输入“k”回车,再输入要结束的进程的ID号。(然后在输入9,进行强制杀死)
案例三:指定系统装态更新的时间(每隔10秒自动更行),默认是3秒
top -d 10
监控网络状态
查看系统的网络状态情况netstat
基本语法
netstst [选项]
选项说明
-an 按一定顺序排列输出
-p 显示哪一个进程在调用
应用案例
查看系统的网络状态情况netstat

查看sshd服务的服务信息
netstat -anp | grep sshd
网络有问题的处理方法

linux和Windows之间建立通信(这个其实就是建立tcp通信)

RPM和YUM
rpm包的管理
介绍
rpm用于互联网下载包的打包以安装工具,它包含在某些Linux发行版中。它生成具有.RPM拓展名的文件。RPM是RedHat Package Manager (RedHat 软件包管理工具)缩写,类似于windows中的setup.exe。 Linux的发行版都采用(suse,redhat,centos等等)
rpm的简单查询指令
查询已经安装的rpm列表
rpm -qa | grep xxx
案例演示:请查询是否安装firefox
rpm -qa | grep firefox

rpm包的其他查询指令:
rpm -qa 查询所安装的所有rpm软件包
rpm -qa | more
rpm -qa | grep X[rpm -qa | grep firefox]
rpm -q 软件包名:查询软件包是否安装
rpm -q firefox
rpm -qi 软件包名:查询软件包信息
rpm -q file
rpm -ql 软件包名:查询软件包中的文件
rpm -qi firefox
rpm -qf 文件全路径名 查询文件所属的软件包
rpm -qf /etc/passwd
rpm -qf /root/install.log

查询firefox安装在哪里
rpm -q file firefox

rpm -qf /etc/passwd

卸载rpm包
- 基本语法
rpm -e RPM的名称
- 应用案例
1)删除firefox软件包
rpm -e firefox

- 细节讨论
1)如果其他软件包依赖于你要卸载的软件包,卸载时则会产生错误信息。
如:$rpm -e foo
removing these packages would break dependences:foo is needed by bar-1.0-1
2)如果我们就是要删除foo这个rpm包,可以增加参数–nodeps ,就可以进行强制删除了,但是一般不推荐这样做,因为依赖于这些软件包的程序可能无法运行。
如:$rpm -e –nodeps foo 带上–nodeps就是强制删除的意思
安装rpm包
基本语法
rpm -ivh RPM包的全路径名称
参数说明
i=install 安装
v=verbose 提示
h=hash 进度条
应用实例
1)演示安装firefox浏览器
步骤:
1、先找到firefox的安装rpm包,你需要挂载到我们安装的centos的iso文件
2、到 /mdeia/ 下去找rpm
cp firefox-68.10.0-1.el7.centos.x86_64.rpm /opt/

yum
介绍
Yum是一个shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包。(有点像maven)使用yum的前提是可以联网。
示意图

yum的基本指令
查询yum服务是否具有需要安装的软件
yum list | grep xxx软件列表
安装指定的yum包
yum install xxx 下载安装 [-y] -y可选就不会询问你要不要安装了
yum应用实例
请使用yum的方式来安装firefox
1)先查看firefox rpm 在yum服务器上有没有

2)安装
yum insatll firefox
默认会安装最新版本的软件

JavaEE定制篇 搭建JavaEE环境
概述

如果需要在Linux下进行JavaEE开发,需要安装如下软件
安装jdk
-
先将软件通过xftp7上传到/opt
-
解压缩到/opt

JAVA_HOME=/opt/jdk1.7.0_79
PATH=/opt/jdk1.7.0_79/bin:$PATH
export JAVA_HOME PATH
- 需要注销用户,环境变量才能生效
1、如果是3运行级别,直接logout
2、如果是5运行级别 (可以使用 source /etc/profile 来刷新配置文件)
先用javac指令生成字节码文件,再用java指令运行。
javac Hello.java
java Hello



安装tomcat
步骤
1、先通过xftp传输压缩包到Linux上,然后解压到/opt
tar -zxvf apache-tomcat-7.0.70.tar.gz

2、启动tomca ./startup.sh
先进入到tomcat的bin目录

./startup.sh 启动tomcat

使用Linux本地的浏览器是可以访问到tomcat
3)开放放端口 vim/etc/sysconfig/firewall
在windows下访问http://localhost:8080/
eclipse的安装
步骤
1)解压到/opt
tar -zxvf eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz
tar -zxvf eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz

2)启动eclipse,配置jre和server
cd 切换到eclipse目录下
然后再用 ./eclipse 进行启动
3)编写Hello World程序并测试成功
4)编写jsp页面并测试成功
mysql的安装和配置
1、先查看是否已经下载了mysql
rpm -qa | grep mysql
如果有就删掉
rpm -e (--nodeps强制删除) mysql-libs
2、安装mysql的环境
yum -y install make gcc-c++ cmake bsion-devel ncurses-devel
3、解压mysql包
tar -zxvf mysql-5.6.14.tar.gz
4、切换到MySQL的目录下
cd mysql-5.6.14/
shell编程
为什么要学shell编程?
1)Linux运维工程师再进行对服务器集群管理时,需要编写shell程序来进行服务器的管理。
2)对于JavaEE和python程序员来说,工作需要,需要些shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
3)对于大数据程序员来说,需要编写Shell程序来管理集群。
Shell是什么
shell是一个命令行解释器,它为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。

shell编程快速入门-shell脚本的执行方式
脚本的要求
1)脚本以#!/bin/bash开头 (告诉编辑器是用bash来进行解析的)
2)脚本需要有可执行权限
编写第一个shell脚本
需求说明
创建一个shell脚本,输出hello world!
查看案例:

脚本的常用执行方式
方式一:(输入脚本的绝对路径或者相对路径)
1)首先要赋予helloworld.sh脚本的 +x权限

方式二(sh+脚本,不推荐使用)
说明:不用赋予脚本+x权限,直接执行即可

shell的变量
shell的变量的介绍
1)Linux Shell 中的变量分为,系统变量和用户自定义变量。
2)系统变量:SHOME 、 PWD、PWD 、PWD、SHELL、 $USER等等
比如:echo $HOME 等等

3)显示当前shell中的所有变量:set
shell变量的定义
基本语法
1)定义变量:变量=值
2)撤销变量:unset 变量
3)声明静态变量:readonly 变量,注意:不能用unset
快速入门
案例1:定义变量A
案例2:撤销变量A

案例3:声明一个只读变量B=2 (readonly 就相当于Java中的final),不能unset

案例四:可以把一个变量提升为一个全局环境变量,可供其他shell程序使用
定义变量的规则
1)变量名称可以由字母数字和下划线组成,但是不能以数字开头。
2)等号两侧不能有空格
3)变量名称一般习惯大写
将命令的返回值赋值给变量(重点)
A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A

设置环境变量

基本语法
1)export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
2)source 配置文件 (功能描述:让修改后的文件信息立即生效)
3)在另一个shell程序中使用TOMCAT_HOME
注意:在输出TOMCAT_HOME环境变量前,要让起生效
这个是刷新配置文件的意思:source/etc/profile
多行注释 :<<! 要注释的内容 !

位置参数变量
介绍
当我们执行一个shell脚本时,如果希望获得命令行的参数信息。就可以使用到位置参数变量。比如:./myshell.sh 100 200 ,这个就是执行shell命令行,可以在myshell脚本中获取到参数信息 (有点类似于Java方法传参数)
基本语法
$n(功能描述:n为数字,$0代表命令本身,$1-9代表第一到第九个参数,十以上的参数需要用大括号包含,如9代表第一到第九个参数,十以上的参数需要用大括号包含,如9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10})
∗(功能描述:这个变量代表命令行中所有参数,<fontcolor=′red′>* (功能描述:这个变量代表命令行中所有参数,<font color='red'>∗(功能描述:这个变量代表命令行中所有参数,<fontcolor=′red′>*把所有的参数看成一个整体)
@(功能描述:这个变量也代表命令行中的所有参数,<fontcolor=′red′>不过@(功能描述:这个变量也代表命令行中的所有参数,<font color='red'>不过@(功能描述:这个变量也代表命令行中的所有参数,<fontcolor=′red′>不过@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中的所有参数的个数)
位置参数变量的应用实例
案例:编写一个shell脚本positionPara.sh,在脚本中获得命令行中各个参数信息


预定义变量
基本介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。
基本语法
$$ (功能描述:当前进程的进程号(pid))
$! (功能描述:后台运行的最后一个进程的进程号(pid))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
应用实例
在一个shell脚本中简单使用一下预定义变量。

运算符
基本介绍
学习如何在shell中进行运算操作
基本语法
1)“((运算式))”或“((运算式))” 或 “((运算式))”或“[运算式]”
2)expr m + n
注意expr运算符间要有空格
3)expr m -n
4)expr \* , / , % 乘,除,取余 (expr : expression)
- 应用实例
- 注意在写shell脚本的时候变量和等号之间不要有空格
案例一:计算(2+3)X4的值
- $((运算式))

- $[运算式]

- expr

案例二:请求算出命令行两个参数之和
条件判断
基本语法
[ condition ] (注意condition前后要有空格)
#非空返回true,可使用$?验证(0为true,>1为false)
应用实例
[ atguigu ] 返回true
[] 返回false
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句
判断语句
- 常用的判断条件
1) 两个整数的比较
=字符串的比较
-lt小于 lt=less than
-le小于等于
-eq等于 eq=equal than
-gt大于 gt=great than
-ge大于等于 ge=great equal
-ne不等于 ne=not equal
按照文件所有权进行判断
-r 有读的权限
-w 有些的权限
-x 有执行的权限
按照文件类型进行判断
-f 文件存在并且是个常规文件
-e 文件存在
-d 文件存在并且是个目录
应用实例
案例一:“ok”是否等于“ok”
判断语句:
案例二:判断23是否大于等于22
这里的结束 fi ,就是把 if 反着写,后面的要学的 case 结束的关键字就是 esac
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
案例三:判断/root/shell/aaa.txt是否存在
判断语句:

shell 流程控制
if判断
基本语法
if [ 条件判断式 ];
then
程序
elif [ 条件判断式 ]
then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi
注意事项:(1)[ 条件判断式 ] ,中括号和条件判断式之间必须有空格
(2)推荐使用第二种方式
应用案例
#案例:请编写一个shell程序,如果输入的参数大于等于60,则输出”及格了“ ,如果小于60,则输出“不及格”
case语句
基本语法
case $变量名 in
"值1")
如果变量名等于值1,则执行程序1
;;
"值2")
如果变量等于值2,则执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
应用案例
案例1:当命令行参数是1时,输出“周一”,是2时,输出“周二”,其他情况输出“other”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
for循环
基本语法(这个相当于增强for循环,foreach)
for 变量 in 值1 值2 值3 ...
do
程序
done
应用实例
案例1:打印命令行输入的参数【会使用到$* $@】
这里的$i表示的是引用上面的i的意思


基本语法
for ((初始值;循环控制条件;变量变化))
do
程序
done
应用实例
案例1:从一加到一百的值输出显示[这里可以看出$* 和 $@的区别]
#!/bin/bash
#求1到100的值
#定义一个结果变量
sum=0
for ((i=1;i <= 100 ;i++ ))
do
sum=$[ $sum+i ]
done
echo "sum=$sum"

while循环
基本语法
while [条件判断式]
do
程序
done
应用实例
案例一:从命令行输出一个数n,统计从1+…+n的值是多少?
读取控制台的输入
基本语法
read (选项) (参数)
选项:
-p :指定读取时的提示符号
-t :指定读取时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数
变量:指定读取值的变量名
应用实例
案例一:从控制台读取一个num值。

案例二:读取控制台输入一个num值,在10秒内输入。

函数
函数介绍
shell编程和其它语言一样,有系统函数,也可以有自定义函数。在系统函数中,就介绍这两个。
系统函数
- bashname基本语法
功能:返回完整路径下最后 / 部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] 功能描述:basename命令会删掉所有的前缀包括最后一个('/')
字符,然后将字符显示出来
选项
suffix 为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
应用实例
案例一:请返回 /home/aaa/test.txt的”test.txt“部分

dirname基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname文件绝对路径(功能描述:从给定的包含绝对路径的文件中去除文件名(非目录部分),然后返回剩下的路径(目录部分))
应用实例
案例一:请返回/home/aaa/test.txt的/home/aaa

自定义函数
- 基本语法
[ function ] funname [()]
{
Action;
[return int;]
}
调用直接写函数名: funname
注意[]这个是可选的,里面的内容可写可不写
- 应用实例
案例1:计算输出两个参数的和,getSum

shell编程的综合案例
需求分析
- 每天凌晨2:10备份数据库atguiguDB到/data/backup/db
- 备份开始和备份结束能够给出相应的提示信息
- 备份后的文件要求以备份时间为文件名,并打成.tar.gz的形式,比如: 2018-03-12_230201.tar.gz
- 在备份的同时,检查是否有10天前的备份的数据库文件,如果有就将其删除
编写一个shell脚本。
思路分析:

代码实现:
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo $DATETIME
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/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
#创建备份的路径
#如果备份的文件夹存在就使用,否则就创建
#mkdir -p :递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
[ ! -d "$BACKUP/$DATETIM" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -P${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除十天前的备份文件
#下面那条指令的意思:find是查找指令,-m表示按照时间查找+10表示十天前的
#-name 表示按照名称查找以.tar.gz结尾的文件
#exec代表着执行 执行后面的 rm -rf {} \; 就是删除找到的那些文件,这个是一个固定的写法
find $BCAKUP -m +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "======备份文件成功======"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vsb03e0-1625659084658)(https://qlwy.oss-cn-shenzhen.aliyuncs.com/img/20210707194758.png)]
2020/7/7Linux学习完结撒花
77事变84周年,吾辈当自强
UR4z-1625659084653)]
for循环
基本语法(这个相当于增强for循环,foreach)
for 变量 in 值1 值2 值3 ...
do
程序
done
应用实例
案例1:打印命令行输入的参数【会使用到$* $@】
这里的$i表示的是引用上面的i的意思


基本语法
for ((初始值;循环控制条件;变量变化))
do
程序
done
应用实例
案例1:从一加到一百的值输出显示[这里可以看出$* 和 $@的区别]
#!/bin/bash
#求1到100的值
#定义一个结果变量
sum=0
for ((i=1;i <= 100 ;i++ ))
do
sum=$[ $sum+i ]
done
echo "sum=$sum"

while循环
基本语法
while [条件判断式]
do
程序
done
应用实例
案例一:从命令行输出一个数n,统计从1+…+n的值是多少?
读取控制台的输入
基本语法
read (选项) (参数)
选项:
-p :指定读取时的提示符号
-t :指定读取时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数
变量:指定读取值的变量名
应用实例
案例一:从控制台读取一个num值。

案例二:读取控制台输入一个num值,在10秒内输入。

函数
函数介绍
shell编程和其它语言一样,有系统函数,也可以有自定义函数。在系统函数中,就介绍这两个。
系统函数
- bashname基本语法
功能:返回完整路径下最后 / 部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] 功能描述:basename命令会删掉所有的前缀包括最后一个('/')
字符,然后将字符显示出来
选项
suffix 为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
应用实例
案例一:请返回 /home/aaa/test.txt的”test.txt“部分

dirname基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname文件绝对路径(功能描述:从给定的包含绝对路径的文件中去除文件名(非目录部分),然后返回剩下的路径(目录部分))
应用实例
案例一:请返回/home/aaa/test.txt的/home/aaa

自定义函数
- 基本语法
[ function ] funname [()]
{
Action;
[return int;]
}
调用直接写函数名: funname
注意[]这个是可选的,里面的内容可写可不写
- 应用实例
案例1:计算输出两个参数的和,getSum

shell编程的综合案例
需求分析
- 每天凌晨2:10备份数据库atguiguDB到/data/backup/db
- 备份开始和备份结束能够给出相应的提示信息
- 备份后的文件要求以备份时间为文件名,并打成.tar.gz的形式,比如: 2018-03-12_230201.tar.gz
- 在备份的同时,检查是否有10天前的备份的数据库文件,如果有就将其删除
编写一个shell脚本。
思路分析:

代码实现:
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo $DATETIME
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/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
#创建备份的路径
#如果备份的文件夹存在就使用,否则就创建
#mkdir -p :递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
[ ! -d "$BACKUP/$DATETIM" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -P${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除十天前的备份文件
#下面那条指令的意思:find是查找指令,-m表示按照时间查找+10表示十天前的
#-name 表示按照名称查找以.tar.gz结尾的文件
#exec代表着执行 执行后面的 rm -rf {} \; 就是删除找到的那些文件,这个是一个固定的写法
find $BCAKUP -m +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "======备份文件成功======"

2021/7/7Linux学习完结撒花
77事变84周年,吾辈当自强
本文详细介绍了vi/vim文本编辑器的基本使用、三种工作模式切换、快捷键操作,以及如何在Linux环境下编辑Hello.java文件、设置行号、管理用户和组、执行定时任务和网络配置等内容。



6668





