学习Linux的阶段划分
(1)第 1 阶段
linux 环境下的基本操作命令,包括 文件操作命令(rm mkdir chmod, chown) 编辑工具 使用(vi vim) linux 用户管理(useradd userdel usermod)等
(2)第 2 阶段
linux 的各种配置(环境变量配置,网络配置,服务配置)
(3)第 3 阶段
linux 下如何搭建对应语言的开发环境(大数据,JavaEE, Python 等)
(4) 第 4 阶段
能编写 shell 脚本,对 Linux 服务器进行维护。
(5)第 5 阶段
能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优。
(6)第 6 阶段
深入理解 Linux 系统(对内核有研究),熟练掌握大型网站应用架构组成、并熟悉各 个环节的部署和维 护方法。
(1)Linux 是一款操作系统,免费,开源, 安全,高效,稳定, 处理高并发非常强悍,现在很多 的企业级 的项目都部署到 Linux/unix 服务器运行。
(2)Linux创始人
Linux 林纳斯(linux Torvalds)
(3)图标(吉祥物)——企鹅
(4)发行版本
找到安装包根据引导即可安装
自行安装Centos7
安装之后可以进行像windows一样粘贴复制
1.进入 centos
2.点击 vm 菜单的->install vmware tools
3.centos 会出现一个 vm 的安装包
4.点击右键解压, 得到一个安装文件
5.进入该 vm 解压的目录 ,该文件在 /root/桌面/vmware-tools-distrib/下
6.安装 ./vmware-install.pl
7.全部使用默认设置即可
8.需要 reboot 重新启动即可生效
可以上网,理解为局域网中的一台电脑
可以上网,理解为网络中的一台计算机
外界不能ping通,只有宿主机可以连接
(1) linux 服务器是开发小组共享的.(因此需要)
(2)正式上线的项目是运行在公网的.
(3)因此程序员需要远程登录到 centos 进行项目管理或者开发.
(4)远程登录客户端有 Xshell5, Xftp5 , 我们学习使用 Xshell5 和 Xftp , 其它的远程工具大同小异.
如果希望安装好 XShell 5 就可以远程访问 Linux 系统的话,需要有一个前提,就是Linux 启用了 SSHD 服务,该服务会监听 22 号端口。
作用:
用于与服务器进行交互(和虚拟机上的终端一样)
根据提示进行安装
作用:
用于向服务器进行资源传输
根据提示进行安装
shutdown
shutdown -h now : 表示立即关机
shutdown -h 1 : 表示 1 分钟后关机
shutdown -r now: 立即重启
就是直接使用,效果等价于关机
就是重启系统。
注意点
当我们关机或者重启时,都应该先执行以下 sync 指令,把内存的数据写入磁盘,防止数据丢失。
(1)登录时尽量少用 root 帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利 用普通用户登录,登录后再用”su - 用户名’命令来切换成系统管理员身份.
(2)在提示符下输入 logout 即可注销用户
注意点
logout 注销指令在图形运行级别无效,在 运行级别 3 下有效.
在 Linux 中,一切皆文件
linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此 目录下再创建其他的目录。
/bin (/usr/bin、/usr\local\bin) | 是Binary的缩写, 这个目录存放着最经常使用的命令 |
---|---|
**/sbin(/usr/sbin 、/usr/local/sbin) ** | s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 |
/home | 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 |
/root | 该目录为系统管理员,也称作超级权限者的用户主目录。 |
/lib | 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 |
/lost+found | 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件 |
/etc | 所有的系统管理所需要的配置文件和子目录 |
/usr | 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。 |
/boot | 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里 |
/proc | 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 |
/srv | service缩写,该目录存放一些服务启动之后需要提取的数据 |
/sys | 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs |
/tmp | 这个目录是用来存放一些临时文件的。 |
/dev | 类似于windows的设备管理器,把所有的硬件用文件的形式存储 |
**/media(centos6) ** | linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 |
/run | 进程产生的临时文件,虚拟机加载光盘映像在:/run/media/root/ 目录下 |
/mnt | 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。 |
/opt | 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 |
/usr/local | 这是另一个给主机额外安装软件所摆放的目录。一般是通过编译源码方式安装的程序。 |
/var | 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 |
运行级别说明:
0 :关机
1 :单用户【找回丢失密码】
2 :多用户状态没有网络服务
3 :多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是 3 和 5 ,要修改默认的运行级别可改文件
/etc/inittab 的 id:5:initdefault:这一行中的数字
运行级别示意图:
基本语法:init [0,1,2,3,4,5,6]
如何找回密码:
开机->在引导时输入 回车键-> 看到一个界面输入 e -> 看到一个新的界面,选中第二行(编辑 内核)在输入 e-> 在这行最后输入 1 ,再输入 回车键->再次输入 b ,这时就会进入到单用户模式。
这时,我们就进入到单用户模式,使用 passwd 指令来修改 root 密码。
man [命令或配置文件](功能描述:获得帮助信息)
help命令 (功能描述:获得 shell 内置命令的帮助信息)
特别提示:
如果看不懂英文,不如直接百度来的快!
pwd (功能描述:显示当前工作目录的绝对路径)
ls [选项] [目录或是文件]
常用选项
-a :显示当前目录所有的文件和目录,包括隐藏的。
-l :以列表的方式显示信息
cd [参数] (功能描述:切换到指定目录)
注意相对路径和绝对路径
cd ~ 或者 cd :回到自己的家目录
cd … 回到当前目录的上一级目录
mkdir 指令用于创建目录(make directory)
mkdir [选项] 要创建的目录
-p :创建多级目录
rmdir 指令删除空目录
rmdir [选项] 要删除的空目录
注意:
rmdir 删除的是空目录,如果目录下有内容时无法删除的。
提示:
如果需要删除非空目录,需要使用 rm -rf 要删除的目录
touch 指令创建空文件
touch 文件名称
cp 指令拷贝文件到指定目录
cp [选项] 源文件 目标文件
-r :递归复制整个文件夹
使用细节
强制覆盖不提示的方法:\cp
小技巧:
可以通过 上下箭头的键,调出原来使用过的指令。
rm 指令移除【删除】文件或目录
rm [选项] 要删除的文件或目录
-r :递归删除整个文件夹
-f : 强制删除不提示
使用细节:
强制删除不提示的方法:带上 -f 参数即可
mv 移动文件与目录或重命名
mv 原来名称 新的名称
cat 查看文件内容,是以只读的方式打开。
cat [选项] 要查看的文件
-n :显示行号
使用细节:
cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more
cat 文件名 | more [分页浏览]
more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键,详见操作说明
more 文件名
less指令
作用:
用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持 各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示
需要加载内容,对于显示大型文件具有较高的效率。
">"指令 和 “>>” 指令
> 指令 和 >> 指令
> 输出重定向 : 会将原来的文件的内容覆盖
>> 追加: 不会覆盖原来文件的内容,而是追加到文件的尾部。
(1)ls -l > 文件 (功能描述:列表的内容写入文件 a.txt 中(覆盖写))
(2)ls -al >>文件 (功能描述:列表的内容追加到文件 aa.txt 的末尾)
(3)cat 文件 1 > 文件 2 (功能描述:将文件 1 的内容覆盖到文件
(4)echo “内容” >>文件
echo 输出内容到控制台
echo [选项] [输出内容]
head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容
head 文件 (功能描述:查看文件头 10 行内容)
head -n 5 文件 (功能描述:查看文件头 5 行内容,5 可以是任意行数)
tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。
(1) tail 文件 功能描述:查看文件后 10 行内容
(2) tail -n 5 文件 功能描述:查看文件后 5 行内容,5 可以是任意行数
(3) tail -f 文件 功能描述:实时追踪该文档的所有更新
ln 软连接命令
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
小细节:
当我们使用 pwd 指令查看目录时,仍然看到的是软链接所在目录。
history 命令 查看历史命令
history (功能描述:查看已经执行过历史命令)
date 指令-显示当前日期
(1)date (功能描述:显示当前时间)
(2)date +%Y (功能描述:显示当前年份)
(3) date +%m (功能描述:显示当前月份)
(4)date +%d (功能描述:显示当前是哪一天)
(5)date “+%Y-%m-%d %H:%M:%S”(功能描述:显示年月日时分秒)
date 指令-设置日期
date -s 字符串时间
cal 日历命令
cal [选项] (功能描述:不加选项,显示本月日历)
find 命令
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
find [搜索范围] [选项]
locate 命令
locaate 指令可以快速定位文件路径。locate 指令利用事先建立的系统中所有文件名称及路径的 locate
数据库实现快速定位给定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。为了保 证查询结果的准确度,管理员必须定期更新 locate 时刻。
locate 搜索文件
特别说明
由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。
直接输入 updatedb即可,数据库就创建成功了
grep 指令和 管道符号 |
grep 过滤查找 , 管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
grep [选项] 查找内容 源文件
-n:显示匹配行和行号
-i:忽略字母大小写
gzip/gunzip 指令
gzip 用于压缩文件, gunzip 用于解压的
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
细节说明:
当我们使用 gzip 对文件进行压缩后,不会保留原来的文件。
zip/unzip 指令
zip 用于压缩文件, unzip 用于解压的,这个在项目打包发布中很有用的
zip [选项] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
zip 常用选项
-r:递归压缩,即压缩目录
unzip 的常用选项
-d<目录> :指定解压后文件的存放目录
tar 指令:最常用的命令
tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件。
tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
选项说明
小细节:
①指定解压到的那个目录,事先要存在才能成功,否则会报错。
②- C :指定要解压的目录
linux下查看所有设备挂在情况
lsblk 或者 lsblk -f
进行分区
通过 fdisk /dev/sdb 开始对 /sdb进行分区,
m 显示命令列表
p 显示磁盘
n 新增分区
d 删除分区
w 写入并退出分区
分区步骤如下: 开始分区后输入n,新增分区,然后选择p ,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
格式化磁盘
命令: mkfs -t ext4 /dev/sd"n"(磁盘名)
磁盘的挂载(关机失效)
mount 设备名称 挂载目录
磁盘的卸载
umount 设备名称 或者 挂载目录
永久挂载
通过修改/etc/fstab实现挂载
添加完成后 执行mount –a 即刻生效
/etc/fatab文件参数介绍
第一列:磁盘设备文件或者该设备的Label或者UUID
第二列: 设备的挂载点,就是你要挂载到哪个目录下
第三列: 磁盘文件系统的格式,
包括ext2、ext3、reiserfs、nfs、vfat等
第四列: 文件系统的参数 ,defaults代表同时具有
rw,suid,dev,exec,auto,nouser,async等默认参数的设置
第五列: 能否被dump备份命令作用
0 代表不要做dump备份
1 代表要每天进行dump的操作
2 代表不定日期的进行dump操作
第六列: 是否检验扇区
0 不要检验
1 最早检验(一般根目录会选择)
2 1级别检验完成之后进行检验
df -h 查询系统整体磁盘使用情况
du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
例: du -ach --max-depth=1 /opt
ifconfig 查看网络配置
如何修改ip
(1)第一种方法:图形化操作
(2)第二种方法:命令行方式 vi /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=eth0 #接口名(设备,网卡)
BOOTPROTO=none
# IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP 协议
BROADCAST=192.168.1.255 #广播地址
HWADDR=00:0C:2x:6x:0x:xx #MAC地址
IPADDR=192.168.1.23 #IP地址
NETMASK=255.255.255.0 # 网络掩码
NETWORK=192.168.1.0 #网络地址
ONBOOT=yes #系统启动的时候网络接口是否有效(yes/no)
TYPE=Ethernet #网络类型(通常是Ethemet)
修改后一定要重启服务:
service/systemctl network restart
-a : 显示当前总段的所有进行信息
-u : 以用户的格式显示进程信息
-x : 显示后台进程运行的参数
详细内容解释
ps –aux|grep xxx
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密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数
kill pid 杀死指定pid对应的进程.
killall 杀死所有的进程
-9: 强行杀死进程
pstree [选项] ,可以更加直观的来看进程信息
常用选项:
-p :显示进程的 PID
-u :显示进程的所属用户
注册在系统中的标准化程序
有方便统一的管理方式(常用的方法)
service 服务名 start
service 服务名 stop
service 服务名 restart
service 服务名 reload
service 服务名 status
查看服务的方法 /etc/init.d/服务名
通过chkconfig 命令设置自启动
查看服务 chkconfig --list|grep xxx
chkconfig --level 5 服务名 on
查看默认级别: vi /etc/inittab
Linux系统有7种运行级别(runlevel):常用的是级别3和5
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
注册在系统中的标准化程序
有方便统一的管理方式(常用的方法)
systemctl start 服务名(xxxx.service)
systemctl restart 服务名(xxxx.service)
systemctl stop 服务名(xxxx.service)
systemctl reload 服务名(xxxx.service)
systemctl status 服务名(xxxx.service)
查看服务的方法 /usr/lib/systemd/system
查看服务的命令
systemctl list-unit-files
systemctl --type service
自启动 systemctl enable service_name
不自启动systemctl disable service_name
查看默认级别: vim /etc/inittab
Centos7运行级别简化为:
multi-user.target 等价于原运行级别3(多用户有网,无图形界面)
multi-user.target 等价于原运行级别5(多用户有网,有图形界面)
查看系统的网络情况
-an 按一定顺序排列输出
-p 显示哪个进程在调用
netstat –anp|grep 8080 查看占用8080端口的进程
同上:最常用
netstat –nltp|grep 8080
所有的 Linux 系统都会内建 vi 文本编辑器。
Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确 性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
(1)通过vi或者是vim打开文档后默认进入到一般模式,该模式下主要负责查看和一些基础的修剪工作
(2)常用的操作
dd | 删除光标当前行 |
---|---|
dnd / ndd | 删除n行 |
u | 撤销上一步 |
x | 删除一个字母,类似于键盘上Delete功能 |
X | 删除一个字母,类似于键盘Backspace功能 |
yy | 复制光标当前行 |
p | 粘贴 |
dw | 删除一个词 |
yw | 复制一个词 |
Shift+g | 移动到页尾 |
1+Shift+g | 移动到目标行 |
N+shift+g | 移动到第N行 |
Shift+6 | 移动到行头 |
Shift+4 | 移动到行尾 |
在模式下,程序员可以输入内容。
按下 i, I, o, O, a, A, r, R 等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可
如想退出编辑模式,需要按下【ESC】按键
i | 当前光标前录入 |
---|---|
a | 当前光标后录入 |
o | 当前光标行的下一行录入 |
I | 行首录入 |
A | 行尾录入 |
O | 当前光标行的上一行录入 |
(1)在一般模式下输入 / 或者 : 进入命令模式,命令模式一般用于存盘、退出VIM 、显示行号、搜索、批量替换等操作.
(2)常用的操作
:w | 保存 |
---|---|
:q | 退出 |
:! | 强制执行 |
:%/s/old字符/new字符 | 批量替换 |
/要查找的词 | 搜索,n查找下一个,N查找上一个 |
:set nu | 显示行号 |
:set nonu | 关闭行号 |
noh | 取消高亮显示 |
(1)Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资的用户,都必须首先向系统管理员申 请一个账号,然后以这个账号的身份进入系统。
(2)对用户的操作
新增用户:useradd 新用户名
设置密码: passwd 用户名
用户是否存在:id 用户名
切换用户:su – 切换用户名
查看当前用户/登录用户:whoami/ who am I
删除用户:userdel
(1) 类似于角色,系统可以对有共性的多个用户进行统一的管理。
(2)对用户组的操作
新增组:groupadd 组名
删除组:groupdel 组名
修改用户的组:usermod –g 用户组 用户名
增加用户时直接加上组:useradd –g 用户组 用户名
(1)再说 ls -l
0-9位说明
第0位确定文件类型(d, - , l , c , b)
第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group
第7-9位确定其他用户拥有该文件的权限 —Other
作用到文件
[ r ]代表可读(read): 可以读取,查看
[ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件 是对该文件所在的目录有写权限,才能删除该文件.
[ x ]代表可执行(execute):可以被系统执行
[ r ]代表可读(read): 可以读取,ls查看目录内容
[ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
[ x ]代表可执行(execute):可以进入该目录
(2)chmod
u:所有者 g:所有组 o:其他人
a:所有人(u、g、o的总和)
chmod u=rwx,g=rx,o=x 文件目录名
chmod o+w 文件目录名
chmod a-x 文件目录名
r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于 chmod 751 文件目录名
(3)chown
chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
-R 如果是目录 则使其下所有子文件或目录递归生效
(4)chgrp
chgrp newgroup file 改变文件的所有组
(1)用户(user)的配置文件: /etc/passwd
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
(2)口令的配置文件: /etc/shadow
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时 间:不活动时间:失效时间:标志
(3)组(group)的配置文件: /etc/group
每行含义:组名:口令:组标识号:组内用户列表
crontab 进行 定时任务的设置
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
2.个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。
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
(1)5个占位符说明
(2)特殊符号说明
(1)conrtab –r:终止任务调度。
(2) crontab –l:列出当前有那些任务调度
(3)service crond restart [重启任务调度]
案例 1:每隔 1 分钟,就将当前的日期信息,追加到 /tmp/mydate 文件 中
(1)先编写一个文件 /home/mytask1.sh date >> /tmp/mydate
(2)给 mytask1.sh 一个可以执行权限
chmod 744 /home/mytask1.sh
(3)crontab -e
(4)*/1 * * * * /home/mytask1.sh
(5)成功
案例 2:每隔 1 分钟, 将当前日期和日历都追加到 /home/mycal 文件 中
(1) 先编写一个文件 /home/mytask2.sh date >> /tmp/mycal
cal >> /tmp/mycal
(2) 给 mytask1.sh 一个可以执行权限
chmod 744 /home/mytask2.sh
(3)crontab -e
(4) */1 * * * * /home/mytask2.sh 5) 成功
案例 3: 每天凌晨 2:00 将 mysql 数据库 testdb ,备份到文件中
mydb.bak。
(1)先编写一个文件 /home/mytask3.sh
/usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak
(2) 给 mytask3.sh 一个可以执行权限
chmod 744 /home/mytask3.sh
(3) crontab -e
(4) 0 2 * * * /home/mytask3.sh 5) 成功
(1)Linux 运维工程师在进行服务器集群管理时,需要编写 Shell 程序来进行服务器管理。
(2)对于 JavaEE 和 Python 程序员来说,工作的需要,你的老大会要求你编写一些 Shell 脚本进行程 序或者 是服务器的维护,比如编写一个定时备份数据库的脚本。
(3)对于大数据程序员来说,需要编写 Shell 程序来管理集群。
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统 级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序.
2.1 脚本格式要求
(1) 脚本以#!/bin/bash 开头
(2) 脚本需要有可执行权限
2.2 编写第一个shell编程
#!/bin/bash
echo "hello world"
2.3 脚本的常用执行方式
方式 1:(输入脚本的绝对路径或相对路径)
(1)首先要赋予 helloworld.sh 脚本的+x 权限
(2)执行脚本
$chmod 777 myshell.sh
$./myshell.sh #相对路径
$/root/myshell.sh #绝对路径
方式 2: (sh+脚本),不推荐
说明:不用赋予脚本+x 权限,直接执行即可
sh ./myshell.sh
这样可以不用给执行权限,但是不推荐
(1)Linux Shell 中的变量分为,系统变量和用户自定义变量。
(2)系统变量: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER 等等
比如: echo $HOME 等等…
#!/bin/bash/
echo "PATH=$PATH"
echo "user=$USER"
(3)显示当前 shell 中所有变量:set
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly 变量,注意:不能 unset
案例 1:定义变量 A
案例 2:撤销变量 A
#!/bin/bash
A=100
echo "A=$A"
unset A
echo "A=$A"
案例 3:声明静态的变量 B=2,不能 unset
#! /bin/bash
readonly A=99
echo "A=$A" #定义和使用静态变量
unset A #这个是失效的,不能取消
echo "A=$A"
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
(2)等号两侧不能有空格
(3) 变量名称一般习惯为大写
(1)A=’ ls -la ’ 反引号(就是tab上面那个),运行里面的命令,并把结果返回给变量 A
(2)A=$(ls -la) 等价于反引号
(1)export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量)
(2) source 配置文件 (功能描述:让修改后的配置信息立即生效)
(3) echo $变量名 (功能描述:查询环境变量的值)
当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变 量,
比如: ./myshell.sh 100 200 , 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到 参数信息
$n (功能描述:n 为数字,$0 代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (功能描述:这个变量代表命令行中所有的参数, ∗(功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @(功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
就是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令
正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令
执行不正确了。)
在一个 shell 脚本中简单使用一下预定义变量
#!/bin/bash
echo "当前的进程号=$$"
#后台的方式运行 myShell.sh
./myShell.sh &
echo "最后的进程的号=$!"
echo "执行的值=$?"
学习如何在 shell 中进行各种运算操作。
(1) “$((运算式))”或“$[运算式]”
(2) expr m + n
注意 expr 运算符间要有空格
(3) expr m - n
(4) expr \*, /, % 乘,除,取余
应用实例
案例 1:计算(2+3)X4 的值
(1) $((运算式))
#!/bin/bash
#第一方式$()
RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"
(2)$[运算式]
#第二种方式[]
RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"
(3)expr
#使用expr
TEMP=`expr 2 + 3`
RESULT3 = `expr $TEMP \* 4`
echo "result3=$RESULT3"
案例 2:请求出命令行的两个参数[整数]的和
#求出两个参数的和
SUM=$[$1+$2]
echo "SUM=$SUM"
[ condition ](注意 condition 前后要有空格)
#非空返回 true,可使用$?验证(0 为 true,>1 为 false)
[condition] && echo OK || echo notok 条件满足,执行后面的语句
(1)两个整数的比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
(2) 按照文件权限进行判断
-r 有读的权限 [ -r 文件 ]
-w 有写的权限
-x 有执行的权限
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ] then
程序
elif [条件判断式]
then
程序
fi
注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格 (2) 推荐使用第二种方式
•应用实例
案例:请编写一个 shell 程序,如果输入的参数,大于等于 60,则输出 “及格了”,如果小于 60,
则输出 “不及格”
case $变量名 in
"值 1")
如果变量的值等于值 1,则执行程序 1
;;
"值 2")
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
应用实例
案例 1 :当命令行参数是 1 时,输出 “周一”, 是 2 时,就输出"周二", 其它情况输出 “other”
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
基本语法一:
for 变量 in 值 1 值 2 值 3…
do
程序
done
基本语法二:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
while [ 条件判断式 ]
do
程序
done
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。 参数
变量:指定读取值的变量名
案例 1:读取控制台输入一个 num 值
案例 2:读取控制台输入一个 num 值,在 10 秒内输入。
#!/:in/bash
#案例1:
read -p "请输入一个数num1=" NUM1
echo "你输入的值是num1=$NUM1"
#案例2
read -t 10 -p "请输入一个数num2=" NUM2
echo "你输入的值是num2=$NUM2"
shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个。
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’) 字符,然后将字符串显示出来。
选项:
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的 部分),然后返回剩下的路径(目录的部分))
[ function ] funname[()]
{
Action; [return int;]
}
调用直接写函数名:funname [值]
案例 1:计算输入两个参数的和(read), getSum
#!/bin/bash
function getSum(){
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
read -p "请输入第一个数n1" n1
read -p "请输入第二个数n2" n2
#调用函数
getSum $n1 $n2
需求分析
(1)每天凌晨 2:10 备份 数据库 atguiguDB 到 /data/backup/db
(2)备份开始和备份结束能够给出相应的提示信息
(3)备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:
2019-09-25_230201.tar.gz
(4) 在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除。
编写一个shell 脚本。
代码实现:
(1)RPM(RedHat Package Manager),Rethat软件包管理工具,类似windows里面的setup.exe
是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通
用的。
(2) 查询已安装的rpm列表 rpm –qa|grep xx
(3)rpm包的名称:firefox-52.5.0-1.el7.centos.x86_64
名称:firefox
版本号:52.6.0-1
适用操作系统: el7.centos.x86_64
表示centos7.x的64位系统。
(4)安装rpm
rpm –ivh rpm包名
-i 安装 install
-v 查看信息
-h 查看进度条
(5)卸载rpm
rpm -e RPM软件包
(1) 类似于我们java开发中的maven工具,可以从镜像网站上下载应用程序,并直接安装
(2) yum 操作
yum list|grep xx软件列表
yum install xxx 下载安装
(1)将JDK解压缩到opt目录下
(2) 配置环境变量 , vim /etc/profile
JAVA_HOME=/opt/jdk1.8.0_152
PATH=/opt/jdk1.8.0_152/bin:$PATH
export JAVA_HOME PATH
(3)配置完成后执行如下操作
安装完成注销重新登录一下
source /etc/profile
重启系统[最靠谱]
(1)解压缩到/opt
(2)进入到Tomcat目录下的bin目录中,启动tomcat ./startup.sh
CentOS6
rpm -qa|grep mysql
如果存在mysql-libs的旧版本包如下:
请先执行卸载命令:rpm -e --nodeps mysql-libs
CentOS7
rpm -qa|grep mariadb
如果存在如下:
请先执行卸载命令:rpm -e --nodeps mariadb-libs
执行 :chmod -R 777 /tmp
拷贝安装包到opt目录下
MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
执行如下命令进行安装
rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
执行 mysqladmin --version,如果打印出消息,即为成功
或者通过rpm查询
rpm –qa|grep –i mysql(-i 表示忽略大小写)
启动: service mysql start
停止: service mysql stop
mysqladmin -u root password ‘123123’
mysql -uroot -p123123
create database 库名
create table 表名 (字段名 字段类型(长度)约束 …)
查看字符集 show variables like 'character%’;
查看MySQL的安装位置.
修改字符集
将/usr/share/mysql/中的my-huge.cnf 拷贝到/etc/下,改名为my.cnf
tips:
mysql启动时,会优先读取/etc/my.cnf文件。
在[client] [mysqld] [mysql]中添加相关的字符集设置
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
重启MySQL服务,查看字符集
service mysql restart
修改库的字符集
alter database 库名 character set ‘utf8’;
修改表的字符集
alter table 表名 convert to character set ‘utf8’;
MySQL默认的root用户只允许本机登录,远程通过SQLyog工具不能登录.
查看MySQL mysql库中的用户表
列显示: select * from user\G;
查询常用字段: select host,user,password,select_priv from mysql.user;
grant all privileges on . to root@’%’ identified by '123123‘;
修改用户的密码
修改当前用户的密码
set password =password('123456’)
修改某个用户的密码
update mysql.user set password=password(‘123456’) where user=‘li4’;