第一部分:Linux的应用领域
服务器领域
- Linux在服务器领域的应用是最强的。
- Linux免费、稳定、高效、开源、处理高并发强悍。
嵌入式领域
- Linux运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点。
- 主要应用:机顶盒、数字电视、手机、智能家居等,以后在物联网中应用更加广泛。
第二部分:Linux基础
- 很多企业级的项目都部署到Linux/unix服务器运行。
一、Linux主要发行版本
- 一般所说的Linux是指Linux内核。
- 主要发行版本:Redhat(红帽)、centOS、ubuntu(乌班图)、Suse、红旗Linux
二、Linux和Unix的关系
- Linux是基于Unix的
三、Linux和windows的区别
四、安装VM和centOS
1. 难点:虚拟机网络连接三种形式的说明
1. 桥接模式
- 安装的虚拟机会和用户的windos操作系统在同一网段。Linux可以和其他系统通信。
- 192.168.0这个网段理论上有255个网段,但是实际只有253个(除去网关1,和广播地址255)。
- 如果教室中人多,可能会造成ip地址冲突。
2. NAT模式(推荐)
- NAT模式可以转化一个网络地址,Linux可以访问到外网。
- 不会造成ip地址冲突。
3. 主机模式
你的Linux是一个独立的主机,不能访问外网。
2. 安装VM15
- 安装VM12,可能比较低。
3. 安装centOS7
- 阿里云镜像下载:http://mirrors.aliyun.com/centos/
- 安装过程出了很多问题,刚开始安装的centOS6,后来安装7终于好了
五、Linux的目录结构
- Linux的文件系统采用级层式的树状目录结构。在此结构的最上层是根目录“/”。
- 在Linux世界里,一切皆文件。
1. 目录结构
- /根目录
- /bin 存放最经常使用的目录
- /sbin Super User,存放系统管理员使用的系统管理程序。
- /home 存放普通用户的主目录,每一个用户都有一个自己的目录。
- /root 系统管理员。超级权限者的用户主目录。
- /etc 系统管理所需要的配置文件和子目录。
- /usr 用户的很多应用程序和文件都放在这个目录下。
- /boot 启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
- /dev 类似于windows的设备管理器,把所有的硬件已文件的形式存储。
- /opt 安装包存放目录(不是必须)
- /usr/local 安装软件的目录
六、远程登录
1. 为什么要远程登录?
- Linux的服务器部署在机房。
- 程序员需要远程登录进行操作。
2. 远程登录的客户端
Xshell:完美解决中文乱码问题。
Xshell可以远程访问Linux系统,需要Linux启动sshd服务,该服务会监听22端口。
1. 在Linux端开启sshd允许远程连接的服务。
- 终端输入setup命令。
- 选择系统服务
- 找到sshd服务,开启(空格键:开启/关闭,*代表开启)
2. 查看Linux系统的ip地址
ifconfig命令:查看Linux系统的ip地址
3. 文件上传和下载客户端
Xftp
七、vi和vim编辑器
- vi是文本编辑器
- vim是vi的增强版
1. vi和vim的三种模式
1. 一般模式
vim Hello.java
表示编辑Hello.java文件,如果没有该文件,编辑完成后也可以保存。
2. 编辑模式
按i或a进入编辑模式(按ESC退回到一般模式)
3. 命令行模式
:wq 表示保存并退出
:q 表示退出,不会保存
:q! 表示修改后不保存,强制退出
4. vim快捷键的使用
- 删除当前行dd
- 查找(在命令行模式下)输入/查找关键字,向下查找按n,向上查找按N
- 显示行号
:set nu
,取消行号:set nonu
- 定位到文档最上方按gg,定位到最底部按G(在一般模式下)
- 撤销操作,按u(相当于ctrl+z)
- 将光标定位到某一行,直接按行号+gg
- 删除一行操作,命令行模式下dd
八、关机、重启和用户登录注销
1. 关机
- shutdown -h now 立即关机
- shutdown -h 1 一分钟后关机
- shutdown -r now 立即重启
- halt 等价于关机
2. 重启系统
reboot 重启系统
sync 把内存数据同步到磁盘,防止数据丢失
3. 用户切换
su - 用户名:实现用户的切换
4. 用户注销
exit
九、用户的管理
- 在/home目录下,有每个用户的目录
- 当对应用户登录,会自动进入到自己的目录下。
1. 添加用户
useradd 用户名
设置密码:
passwd 用户名
2. 删除用户
- 删除用户,保留/home下用户对应的目录文件:userdel 用户名
- 删除用户,也删除/home下用户对应的目录文件:userdel -r 用户名
- 删除用户一般不删除用户对应的文件目录
3. 查询用户
id 用户名
4. 切换用户
- su - 用户名
- 从高权限用户切换到低权限用户不需要密码。
- 返回原来的用户,直接exit指令。
5. 查询所有用户
cat /etc/passwd
十、用户组
- 系统可以对用共性的多个用户进行统一管理。
1. 添加组
groupadd 组名
2. 删除组
groupdel 组名
3. 增加用户时直接加入组
useradd -g 用户组 用户名
4. 修改用户的组
usermod -g 用户组 用户名
5. 查询所有用户组
cat /etc/group
十一、用户和组的配置文件
1. 用户配置文件(存放用户信息)
/etc/passwd
2. 组配置文件(存放组信息)
/etc/group
3. 口令配置文件(存放密码和登录信息)
/etc/shadow(加密文件)
第三部分:常用指令
一、运行级别
0:关机
1:单用户【找回丢失密码时可以用】
2:多用户,没有网络
3:多用户,有网络
4:系统还未使用该状态
5:图形界面
6:系统重启
常用运行级别3和5,可以在/etc/inittab文件的id:5:initdefalut中修改默认级别
二、帮助指令
当我们对某个指令不熟悉时,可以使用帮助指令进行了解使用。
1. man 获取帮助信息
man ls 查看ls指令
2. help
获得shell内置命令的帮助信息。
help cd 查看cd命令的帮助信息
三、文件目录指令
1. pwd 显示当前目录
print working directory缩写
显示当前工作目录的绝对路径。
2. ls指令
- ls 【选项】 【目录或是文件】
常用选项:
-a 显示所有文件和目录,包括隐藏的
-l 以列表方式显示
-h 显示文件大小加单位
可以直接ll 显示文件列表
3. cd命令
cd … 回到上一级目录
cd ~ 回到家目录
cd /home 绝对路径:从根目录下进入到home目录
cd …/home 相对路径:当前在/root下
4. mkdir命令
- 创建目录(make directory)
- mkdir 【选项】创建的目录
- 常用选项
-p 创建多级目录 - 创建一级目录 mkdir /home/tiger
- 创建多级目录 mkdir -p /home/animal/dog
5. rmdir删除目录
删除空目录
rmdir [选项] 删除的空目录
rmdir /home/dog
如果不是空目录,就无法删除
如果要删除非空目录 rm -rf 删除的目录(-rf 表示递归删除,rm -rf /* 删除所有Linux文件,不要用)
6. touch创建一共空文件
touch 文件名称
创建一个文件:touch hello.txt
创建多个文件:touch hello.txt hello2.txt
7. cp拷贝文件
- cp [选项] 要拷贝的文件 拷贝的位置
- 常用选项
-r 递归复制整个文件夹 - cp hello.txt bbb 将当前文件夹下hello.txt文件拷贝到bbb目录下
- cp -r bbb aaa 将bbb目录拷贝到aaa目录下
- 如果复制文件夹时,已存在的文件会提示是否覆盖,如果文件太多,不想一个一个提示,可以使用/cp,直接覆盖不提示。
8. rm删除文件或目录
- rm [选项] 删除的文件或目录
- 常用选项
-r 递归删除整个文件夹
-f 强制删除不提示 - 删除一个文件 rm /home/hello.txt
- 递归删除整文件夹 rm -rf bbb
9. mv移动文件或重命名
在当前目录下是重命名
mv hello.txt dog.txt 修改文件名
指定目录就是移动文件
mv hello.txt /home/aaa 移动文件到home的aaa目录下
10. cat查看文件内容
只能查看文件,不能修改
- cat [选项] 查看的文件
- 常用选项
-n 显示行号 - 查看文件 cat -n /etc/profile
- 分页查看 cat -n /etc/profile | more(空格下一页)(| more是管道命令)
11. more分页显示文本内容
- more指令是一个基于vi编辑器的文本过滤器,按页显示文本内容。
- more 查看的文件
- more中的内置快捷键
- 空格 向下翻页
- entre 下一行
- q 离开
- ctrl+f 向下滚动一屏
- ctrl+b 向上滚动一屏
- = 输出当前行号
- :f 输出文件名和当前行号
12. less分屏查看文件内容
- 功能于more类似,但是比more更强大。
- less 查看的文件
- less在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示加载需要的信息,对于大型文件具有较高效率。可以查看日志
- 快捷键
空格 下一页
pagedown 下一页
pageup 上一页
/字符 向下搜索字符功能,n 向下查找,N 向上查找
?字符 向上搜索字符功能,n 向下查找,N 向上查找
q 离开
13. >覆盖和>>追加
“>” 表示输出重定向,覆盖
“>>” 表示追加
ls -l > aaa.txt 将列表内容写到aaa.txt文件(覆盖)
ls -al >> aaa.txt 将列表内容追加到aaa.txt文件
cat aaa.txt > bbb.txt 将文件aaa.txt覆盖到bbb.txt文件
echo “内容” >> aaa.txt 将内容追加到aaa.txt
cal > b.txt 将日历信息写入覆盖到b.txt文件中(cal打印当前日历信息)
14. echo输出内容到控制台
echo $PATH 输出Linux的环境变量
echo “hello” 输出一段文本
15. head查看文件的开头
head显示文件的开头部分,默认显示10行
head -n 5 显示文件前五行
16. tail输出文件尾行的部分
默认输出尾部10行
tail 文件
tail -n 5 输出尾部5行
tail -f 文件 实时跟踪文档的所有更新(经常用,查看日志)退出ctrl+c
17. ln快捷链接
软链接也叫符号链接,类似于windows中的快捷方式,主要存放其他文件的路径。
ln -s [原文件或目录] [软连接名] 给原文件创建一个软连接
ln -s /root linkToRoot 创建一个链接linkToRoot连接到/root目录(cd linkToRoot 就进入到了/root目录下,但是当前目录还在linkToRoot下)
rm -rf linkToRoot 删除软连接
18. history查看历史指令
可以查看历史指令,也可以执行历史指令
history 查看所有历史指令
history 10 显示最后10条指令
!275 执行编号为275的指令
四、时间日期指令
1. date显示日期
date 显示当前日期
date “+%Y” 显示当前年份
date “+%Y年%m月%d日 %H:%M:%S” 格式化输出时间
2. date设置当前时间
date -s “2018-06-12 20:56:52” 设置时间
3. cal显示日历
cal 显示本月日历
cal 2020 显示2020年一年的日历
五、搜索查找指令
1. find查找文件或目录
-
find指令将从指定目录向下递归遍历其各个子目录,查找满足条件的文件或目录。
-
find [查找的目录] [选项]
-
常用选项
-name 按名称查找
-user 按所属用户查找
-size 按文件大小查找 -
find /home -name aaa.txt 查找home目录下名称为aaa.txt的文件(查找到了显示路径,没查找到不显示)
-
find /opt -user root 查找opt目录下属于root用户的文件
-
find / -size +20M 查找根目录下大于20M的文件(-20M表示小于20M,20M表示等于20M)
-
find /home -name *.txt (查找home路径下,txt的文件)
2. locate快速定位文件路径
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的精准度,管理员必须定期更新locate时刻。
locate 搜索文件
由于locate指令基于数据库进行查询,所以第一次运行时,必须使用updatedb指令创建locate数据库。
locate aaa.txt 查找aaa.txt的路径
3. grep过滤查找和管道符号|
- grep过滤查找,管道符“|” 表示将前一个命令的处理结果传递给后面的指令处理。
- grep 【选项】查找内容 原文件
- 常用选项
-n 显示出行号
-i 忽略大小写查找 - grep hello aaa.txt 在aaa.txt文件中查找hello
- grep -n hello aaa.txt 在aaa.txt文件中查找hello并显示出行号
- grep -ni hello aaa.txt 在aaa.txt文件中忽略大小写查找hello并显示出行号
- cat aaa.txt | grep -ni hello 显示文件aaa.txt使用管道符交给grep忽略大小写查找hello并显示行号
六、 压缩和解压指令
1. gzip/gunzip 压缩和解压
gzip 文件 用于压缩(压缩成.gz文件,压缩之后原来的文件不保留)
gunzip 文件.gz 用于解压
gzip aaa.txt 压缩aaa.txt文件
gunzip aaa.txt.gz 解压文件
2. zip/unzip 压缩和解压
zip 用于压缩文件(压缩后原文件还存在)
unzip 用于解压文件(解压后原压缩文件还存在)
zip [选项] 压缩名称 文件或目录
unzip [选项] xxx.zip
- zip选项
-r 递归压缩,及压缩目录 - unzip选项
-d 目录 解压到那个目录 - zip -r myhome.zip /home 将home目录压缩成myhome.zip的压缩包
- unzip -d /opt myhome.zip 将文件解压到opt目录下
3. tar打包
-
可以压缩和解压
-
打包的文件时.tar.gz文件
-
tar [选项] xxx.tar.gz
-
常用选项
-c 产生tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar文件 -
tar -zcvf a.tar.gz a.txt b.txt 将a.txt和b.txt压缩打包成a.tar.gz文件
-
tar -zcvf myhome.tar.gz /home 将整个home目录压缩打包成myhome.tar.gz文件
-
tar -zxvf a.tar.gz 将压缩文件解压到当前目录
-
tar -zxvf a.tar.gz -C /opt 将压缩文件解压到opt目录下(目录必须存在)
第四部分:组的管理和权限管理
Linux中每个用户必须属于一个组,不能独立于组外。
一、文件/目录的所有者
1. 查看文件所有者
- 当一个文件创建后,这个文件的创建者就是它的所有者,默认也在该用户的组下。
- ls -ahl
2. 修改文件所有者
(change own)
- chown 用户名 文件名
- 修改用户过后,但是用户组不会变化
3. 修改文件所在组
chgrp 组名 文件名
4. 改变用户所在组
- 在添加用户时,指定用户的组
useradd -g 组名 用户名 - 改变用户的组
usermod -g 组名 用户名 - 改变用户初始的登录目录(/home目录/用户文件夹下)
usermod -d 目录名 用户名
二、文件的权限
1. 基本介绍
-
第0位表示文件的类型
“-” 代表普通文件
d 表示目录
l 表示软连接文件
c 表示字符设备(键盘、鼠标)
b 块文件,硬盘 -
第1-3位表示文件所有者拥有的权限
-
第4-6位表示所有组的其他用户的权限
-
第7-9位表示其他组的用户的权限
-
rwx作用在文件上
r(read)可读
w(write)可写:可以修改,但不代表可以删除该文件,删除文件的前提是对该文件目录有写的权限,才能删除该文件。
x(execute)可执行 -
rwx作用在目录上
r 可读
w 可以创建+删除+重命名
x 可以进入该目录 -
后的那个数字表示子目录数,包含两个隐藏目录(
.
表示当前目录,..
表示上一级目录) -
时间表示 最后的修改时间
2. chmod修改权限
可以修改文件或目录权限
方式一:+、-、=变更权限
u:所有者
g:所在组
o:其他人
a:所有人
- 赋给权限
chmod u=rwx,g=r,o=r 文件或目录名 - 增加减少权限
chmod u-x,g+w 文件或目录名 - 减少权限
chmod o-w 文件或目录名
方式二:数字改变权限
r=4
w=2
x=1
rwx=4+2+1=7
- 直接使用数字
chmod 751 文件或目录名
三、chown修改文件所有者
- 修改文件所有者
chown 用户名 文件名 - 修改文件的所有者和所在组
chown 用户名:所在组 文件名 - -R 如果是目录,使其下所有子文件和目录递归改变
chown -R 用户名 目录名
四、chgrp改变文件所在组
chgrp 组名 文件名或目录名
- -R 如果是目录,使其下所有子文件和目录递归改变
chgrp -R 组名 目录名
第五部分:任务调度
- crontab进行定时任务设置
- 任务调度:指系统在某个时间执行特定的命令或程序
- 比如病毒扫描、mysql数据库的备份
一、基本语法
- crontab [选项]
- 常用选项
-e 设置定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
二、使用步骤
crontab -e
编辑定时执行的消息(如果执行的内容较短,可以直接直接进行编写。执行步骤较多,就需要编写shell脚本)*/1 * * * * ls -l /home >> /tmp/to.txt
每分钟执行一次ls -l /home并将输出内容追加到/tmp/to.txt文件中
参数说明
- 保存退出后就生效
三、应用实例
- 每隔一分钟,将当前日期信息,追加到/tmp/mydate文件中
- 在/home下编写一个shell脚本mytask.sh里面写入
date >> /tmp/mydate
- 给mytask.sh一个可执行的权限
chmod 744 mytask.sh
- crontab -e 设置定时每分钟执行一次*
/1 * * * * /home/mytask.sh
- 在/home下编写一个shell脚本mytask.sh里面写入
- 每天凌晨2:00将mysql数据库testdb备份到文件中mydb.bak
- 编写一个shell脚本mydbtask.sh里面写mysql的备份命令
/usr/local/mysql/bin/mysqldump -u root -p123 testdb > /tmp/mydb.bak
- 给mydbtask.sh一个可执行命令chmod 744 mydbtask.sh
- crontab -e设置每天凌晨2:00写入文件中
0 2 * * * /home/mydbtask.sh
- 编写一个shell脚本mydbtask.sh里面写mysql的备份命令
四、相关指令
crontab -r
终止任务调度
crontab -l
列出任务调度
service crond restart
重启任务调度
第六部分:磁盘分区、挂载
一、分区基础知识
1. mbr分区(老版分区)
- 最多支持四个主分区
- 系统只能安装在主分区
- 扩展分区要占一个主分区
- MBR最大只支持2TB,但拥有良好的兼容性
2. gpt分区
- 支持无限多个主分区(但操作系统可能限制,如windows下最多128个分区)
- 最大支持18EB的大容量(1EB=1024PB 1PB=1024TB)
- windows7 64位以后支持gpt
二、Linux分区
1. 原理介绍
- Linux无论有几个分区,分给那个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
- Linux采用一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这是要载入的一个分区将使它的存储空间在一个目录下获得。
2. 硬盘说明
- Linux硬盘分IDE硬盘和SCSI硬盘,目前基本使SCSI硬盘
- 对于SCSI硬盘标识为“sd-?”,其中-为盘号(a为基本盘,b为基本从盘,c为辅助盘,d为辅助从盘),?表示分区,前四个分区用数字1-4表示,他们是主分区或扩展分区,从5开始就是逻辑分区。
- 使用
lsblk(老师不离开) -f
查看系统分区和挂载信息(不加-f就可以看到分区大小)
3. 给Linux添加一块新硬盘
挂载命令 mount
取消挂载 umount
- 给虚拟机添加一块新硬盘
- 分区
- 格式化
- 挂载目录
- 设置永久挂载
4. 查看磁盘使用情况
1. 查看磁盘使用
df -lh
2. 查看指定目录的磁盘占用情况
- du -h /目录
-s 目录占用大小汇总
-h 带单位显示
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
3. 统计文件个数
- 统计/home文件夹下文件的个数(使用管道符,wc表示统计)
ls -l /home | grep "^-" | wc -l
- 统计/home文件夹下目录的个数
ls -l /home | grep "^d" | wc -l
- 统计/home文件夹下包括子目录的文件个数(R是递归调用)
ls -lR /home | grep "^-" | wc -l
- 统计/home文件夹下目录包括子目录的个数
ls -lR /home | grep "^d" | wc -l
- 使用tree显示树状的目录结构
如果没有该命令就使用yum install tree
安装tree的软件包
tree
显示目录结构
第七部分:网络配置
一、网络配置原理
1. 查看网络IP和网关
- windows可以使用
ipconfig
查看网络配置信息。 - 查看虚拟网络编辑器
点击虚拟机 – > 编辑可以设置IP地址的网关 - 使用
ping 目的主机
可以测试当前服务器是否可以连接目的主机。
重启网络服务命令:service network restart
第八部分:进程的管理
一、进程基本介绍
- 在Linux系统中,每个执行的程序都称为一个进程。每个进程都分配一个ID号。
- 每个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。如www服务器。
- 每个进程都可能以两种方式存在。前台与后台。前台就是用户在目前的屏幕上可以进行操作的。后台进程则是实际在操作,但是在后台执行的。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才消失。
二、ps显示系统执行的进程
- ps命令是用来查看目前系统中,有哪些正在执行,以及他们执行的状况。可以不加参数。
- ps -a 显示当前终端的所有进程信息
- ps -u 以用户格式显示进程信息
- ps -x 显示后台进程运行的参数
ps -aux | more
分页显示线程信息
ps -aux | grep sshd
过滤sshd服务的进程
ps -ef | more
分页显示父进程
三、终止进程kill和killall
kill [选项] 进程号
通过进程号杀死该进程
killall 进程名称
通过进程名称杀死进程,也支持通配符
-
常用选项
-9 强进程立即停止 -
常见案例
踢掉某个非法登录用户 先ps -aux | grep sshd
找到非法登录的进程号。然后kill 进程号
终止一个终端 先ps -aux | grep bash
查看终端(bash是终端),然后kill -9 终端进程号
。
四、显示进程树
- 以树状形式显示进程id:
pstree -p
- 以树状形式显示进程的用户id:
pstree -u
五、服务管理
服务本质就是进程,但是运行在后台的,通常监听某个端口,等待其他程序的请求,比如mysql、sshd、防火墙,因此我们又称守护进程。
- 查看防火墙的状态(centOS7):
systemctl status firewalld
service firewalld status
- 关闭防火墙:
systemctl stop firewalld
service firewalld stop
- 开启防火墙:
systemctl start firewalld
service firewalld start
- 关闭或启动防火墙是立即生效,但是只是临时设置,当重启系统后还是会回到原来的状态。
一、setup查看服务名
输入setup指令,查看系统服务
二、动态监控进程top
- top和ps指令很相似,都是用来显示正在执行的进程。但top可以在执行一段时间更新正在运行的进程。
- top [选项]
三、监控网络状态
- netstat [选项]
- 选项说明
-an 按一定顺序排列输出
-p 显示那个进程调用 netstat -anp | more
分页查看网络信息- 查看开放了那些端口号:
netstat -nupl
(UDP类型的端口),netstat -ntpl
(TCP类型的端口)
第九部分:RPM
一、RPM包管理
- rpm是一种用于互联网下载包的打包及安装工具。它生成.RPM扩展名的文件。类似于windows的setup.exe。
1. 查看rpm安装包
-
显示所有的有没有安装火狐
rpm -qa | grep firefox -
查询所有rpm软件安装包
rpm -qa
-
查看软件的具体安装信息
rpm -qi firefox
-
查看一个软件安装了那些文件
rpm -ql firefox
-
查看一个文件属于那个安装包
rpm -qf /etc/passwd
2. 卸载rpm包
rpm -e firefox
如果其他软件包依赖于你要删除的软件包,卸载时回产生错误信息,可以使用rpm -e --nodeps firefox 进行强制删除(不推荐)
3. 安装rpm包
- rpm -ivh rpm包的全路径
- 参数说明:
i = install 安装
v = verbose 提示
h = hash 进度条 - 安装火狐
- 找到firefox的安装rpm包,需要先挂载上centOS的iso镜像文件,然后在/media下找到rpm安装包。
- 然后拷贝到/opt目录下
cp firefox的rpm文件 /opt
- 进行安装
rpm -ivh rpm.安装包
第十部分:yum
一、yum基本介绍
yum是一个shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包。
二、yum基本指令
- 查询yum服务器是否有需要安装的软件
yum list | grep 软件列表 - 安装指定的yum包(需要联网)(默认安装最新版本)
yum install xxx
第十一部分:Linux搭建javaEE开发环境
一般安装软件放在/opt目录下
一、安装jdk1.7
- 使用Xftp6将jdk1.7的Linux安装包传到Linux的/opt目录下
- cd /opt目录下,使用
tar -zxvf jak1.7
进行解压 - 在/etc/profile文件中配置环境变量,G定位到文件末尾
JAVA_HOME=/opt/jdk1.7 (JAVA_HOME)
PATH=/opt/jdk1.7/bin:$PATH (路径)
export JAVA_HOME PATH (输出变量,环境变量生效)
- source /etc/profile 读取执行环境变量文件
二、Mysql5.6安装和配置
- 查询系统中有没有安装mysql
rpm -qa | grep mysql - 解压软件包
tar -zxvf mysql版本 - 创建mysql的用户和用户组
groudadd mysql
useradd -g mysql mysql - 修改/opt/mysql版本的权限(mysql软件的用户和用户组为mysql,mysql会有专人管理)(这里是安装在了/usr目录下)
cd /usr/mysql版本
chown -R mysql:mysql ./ - 安装一个包
yum -y install autoconf - 初始化mysql
./scripts/mysql_install_db --user=mysql --basedir=/usr/mysql --datadir=/usr/mysql/data - 启动mysql
service mysql start - 如果启动失败修改一下文件名:
mv /etc/my.cnf /etc/my.cnf.bak
- 在mysql的目录下指定密码:
./bin/mysqladmin -u root password 'abc'
cd bin
登录mysql ./mysql -u root -p
三、tomcat安装
- 将压缩包解压到/opt
tar -zxvf tomcat版本 - 进入tomcat的bin目录下
cd /tomcat/bin - 启动tomcat服务
./startup.sh - 使用Linux系统本地的火狐浏览器可以访问localhost:8080
- 但是我们需要使用自己的windows系统访问tomcat,输入Linux的 ip:8080
- 使防火墙放行8080端口:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
- 重启防火墙:
systemctl restart firewalld
- windows可以进行访问tomcat了
第十二部分:Shell编程
一、为什么要学习Sheel编程
- Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
- 对于javaEE和python程序员,编写shell脚本进行程序或服务器的维护,比如编写一个定时备份数据库的脚本。
- 对于大数据程序员,需要编写shell程序来管理集群。
二、什么是shell
- shell是一个命令行解释器,他为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序。
- shell可以去调用Linux的指令。
三、shell快速入门
1. shell格式要求
- 脚本以#!bin/bash开头(告诉系统使用bash shell来进行解析,shell的版本很多)
- 脚本需要可执行权限
2. 编写第一个shell脚本
- 创建一个shell脚本的文件夹
mkdir shell - 编写一个shell文件,输出hello world
vim firstShell.sh (sh表明是一个shell脚本,也可以用其他后缀)
#!/bin/bash
echo "hello wolrd!"
- 给shell脚本一个可执行权限
chmod 744 firstShell.sh - 执行shell脚本
相对路径执行./firstShell.sh
绝对路径执行/root/shell/firstShell.sh
- 第二种执行方式:不给可执行权限,使用sh 执行(不推荐)
chmod 644 firstShell.sh
sh ./firstShell.sh
四、shell的变量
1. 基本介绍
- Linux Shell中的变量分为系统变量和用户自定义变量
- 系统变量:$HOME、 $PWD、 #SHELL、 $USER等
- 输出系统变量(echo输出,#相当于注释)
set | more
分页查看所有系统变量
2. shell变量的声明
- 定义变量 变量=值
- 撤销变量 unset 变量
- 声明静态变量 readonly 变量(静态变量不能unset)
- 例如
声明一个自定义变量
声明一个静态变量
可把变量提升为全局环境变量,供其他shell程序使用
3. 定义变量的规则
- 变量名称不能由数字开头
- 等号两侧不能有空格
- 变量名习惯大写
4. 将命令的返回值赋给变量
- 使用``符号
- 使用$()
5. 设置环境变量
- 将shell变量输出为环境变量
export 变量名=变量值 - 让修改后的配置信息立即生效
source 配置文件 - 输出环境变量的值
echo $变量名 - 配置jdk的环境变量
JAVA_HOME=/opt/jdk1.7 (JAVA_HOME)
PATH=/opt/jdk1.7/bin:$PATH (路径)
export JAVA_HOME PATH (输出变量,环境变量生效) - 定义一个tomcat的环境变量
- vim /etc/proflie
- 修改配置文件后需要
source /etc/profile
让配置文件生效 - 可以在控制台查看tomcat的环境
echo $TOMCAT_HOME
- 定义成环境变量之后,就可以在其他的shell脚本文件中使用该环境变量
- vim /etc/proflie
6. shell脚本的注释
‘#’ 表示单行注释
:<<! 多行注释 !
7. 命令行给shell脚本中传参
- 当我们执行一个shell脚本时,可以在执行后面加上传入的参数
- 例如:./firstShell.sh 100 200 这三段相当于三个参数
- 基本语法:
- $n:n为数字,$0代表执行脚本命令本身./firstShell.sh,$1-$9代表第一到第九参数,十以上参数需要加大括号${10}
- $* :代表所有参数,把所有参数看成一个整体
- $@:也代表所有参数,但是把每个参数区分对待
- $#:所有参数的个数
编辑shell脚本 vim firstShell.sh
传入参数
8. shell预定义变量
- 预定义变量就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。
- 基本语法
- $$ 当前进程的进程号(PID)
- $! 后台运行的最后一个进程的进程号(PID)
- $? 最后一次执行命令的返回状态,0表示上一个命令执行正确,非0表示上一个命令执行不正确。
五、shell运算符
1. 基本语法
-
$((运算符)) 或 $[运算符]
(推荐)
-
`expr m + n`
-
expr + - \* / % (乘号要\* 代表转义)
命令行输入两个参数,求参数的和
2. 条件判断
[ 条件 ] 条件非空返回true,为空返回false
- 判断两个字符串是否相等
- 判断数字的大小
- 判断一个文件是否存在
3. 流程判断
1. if
if [ 条件判断 ]
then
程序
elif [ 条件判断 ]
then
程序
fi
例如:
2. case
case 变量 in
"值")
执行的语句
;;
"值")
执行的语句
;;
*)
执行的语句
;;
3. for循环
方式一:
for 变量 in 值1 值2 值3 ...
do
程序
done
例1:使用$*输出所有输入参数
例2:
方式二:
for((初始值;循环控制条件;变量变化))
do
程序
done
例:从1加到100
4. while循环
while[ 条件判断式 ]
do
程序
done
例:输入一个数从1加到n
5. 从控制台中输入
- read [选项] 参数
- 选项:
- -p 指定输入时的提示内容
- -t 指定读取的等待时间(秒)
例1:从控制台输入一个数
例2:从控制台输入一个数,限制10秒内输入
六、shell函数
有系统函数和自定义函数。
1. basename函数
返回完整路径最后/的部分,常用于获取文件名。
- 返回aaa.txt
basename /home/aaa.txt
--> aaa.txt - 返回aaa文件名
basename /home/aaa.txt .txt
--> aaa
2. dirname函数
文件的绝对路径,返回目录部分
- 返回文件目录
dirname /home/aaa/test.txt
--> /home/aaa
3. 自定义函数
七、shell编程综合案例:备份数据库
- 编写备份数据库的shell脚本文件
#!/bin/bash
# 定时备份数据库
# 定义备份存放的路径
BACKUP=/data/backup/db
# 获取当前时间作为备份文件的文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
# 输出一句话开始备份
echo "===开始备份==="
echo "===备份的路径是 $BACKUP/$DATETIME.tar.gz==="
# 配置数据库
# 主机
HOST=localhost
# 用户名
DB_USER=root
# 密码
DB_PWD=abc
# 需要备份的数据库
DATABSE=mydb
# 创建备份的路径
# 如果备份的路径存在,就直接使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
# 执行mysql的备份数据库指令
mysqldump -u$DB_USER -p$DB_PWD --host=$HOST | gzip > $BACKUP/$DATETIME.sql.gz
# 打包备份的文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
# 删除刚刚的临时文件
rm -rf $BACKUP/$DATETIME
# 删除十天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm rf {} \;
echo "备份文件成功"
- 编写每天晚上2:10执行的定时执行shell文件
contab -e
10 2 * * * /usr/sbin/mysql_db_backup.sh