Linux(详细)

Linux入门 远程登录(xShell、xftp) vi和vim编辑器 开机重启用户注销 用户管理
vim和linux安装 实用指令 定时任务调度 磁盘分区、挂载 网络配置
linux目录结构 进程管理 RPM和yum

linux应用领域

服务器领域、嵌入式领域(运行稳定,内核小、应用于机顶盒、数字电话、网络电话等)

linux阶段

  • 第一阶段 linux基本操作命令 文件操作命令(rm、mkdir、chomd、chown、cp、mv、tar、cd)编辑工具使用(vi、vim) 用户管理(useradd、userdel、usermod)
  • 第二阶段 linux的各种配置(环境变量配置、网络配置、服务配置)
  • 第三阶段 linux下如何搭建对应语言开发环境(java)
  • 第四阶段 能编写shell脚本 ,对linux服务器进行维护
  • 第五阶段 能进行安全配置,防止攻击,保障服务器正常运行,能对系统调优
  • 第六阶段 深入理解linux系统(内核)熟练掌握大型网站应用架构组成、并熟悉各个环节的部署和维护方法

Linux基础篇

基于linux的内核有很多发行版本,基于内核(二次开发)添加应用软件 Readhat centOS ubuntu、suse、中国(红旗Linux),真正使用的就是发行版本。

unix在前linux在后,windows系统使用linux需要安装虚拟机及centos镜像操作,或者有云服务器,利用远程登录工具操作linux系统。

linux的目录结构

在linux系统中,采用层级树状目录结构,在此结构中的最上层是根目录 “/”,然后在此目录下在创建其他的目录。在Linux世界中,一切皆文件

/ 根目录

/root===>/root/Desktop root系统管理员的目录 (重点目录

/home 产生普通用户的家目录 (重点目录

/opt 给主机安装的软件目录重点目录

/usr===> 用户安装过后的程序和文件都在这里 (重点目录

usr/local 安装过后的软件的目录,一般通过编译源码方式安装的程序重点目录

/mnt 用户临时挂载别的文件系统在mnt (重点目录

/ bin ( /usr/bin /usr/local/bin) 系统常用的指令在这里(cp mkdir 等) (重点目录

/boot 系统启动需要加载的核心文件的位置 (重点目录

/etc 存放配置文件的 (重点目录

/var 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件 (重点目录

/tmp 存放临时文件

/sbin(/usr/sbin /usr/local/sbin) 系统管理员管理员使用的系统管理程序

/dev 管理设备 cpu、disk、dvd、usb 等硬件挂载到这个目录

/media 光驱u 盘识别

/lib 开机所需的动态库 .so

/selinux 关于安全的目录,能控制程序只能访问特定文件

不能动的目录

/proc 关于内存的映射

/srv 服务启动之后需要的数据

/sys 文件系统

linux操作

vi和vim编辑器

vi或者vim编辑文件进入正常模式
直接输入i或者a 进入编辑模式
:或者/进入命令行模式 输入i插入 wq保存并退出 q 退出
    u 复原上一步操作
    yy 复制一行
    dd 删除所在的一行
    set nu 显示行号
    shift+g 移动20行

开机重启用户注销

sync              //把内存数据同步到磁盘(防止没有保存的数据丢掉)
shutdown -h now   // 立刻关机
shutdown -h 1     // 1分钟关机
shutdown -r now   // 立刻重启
halt              // 立刻关机
reboot            //重启计算机
注:不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
切换用户:在原则上来说少用root账号登录,避免操作失误,可以利用普通用户登录,当发现权限不够时,使用su -用户名 的指令切换管理员身份
注销用户:在提示符下输入logout即可注销用户(图形化别下无效,在运行级别下有效(例如远程登录))

用户管理

linux系统会有好多用户,当你是项目root用户的时候,不可能给用户分配最高权限

用户组,在linux有很多组,这是用户管理的设计,root可以随时切换其他用户的组

家目录 home ,用户登录时,会自动进入到自己的家目录

添加用户
useradd 用户名  
useradd xm 
useradd -d /home/tiger //-d指定用户的家目录
useradd -g xm kaifa  //创建用户直接指定到组
passwd 用户名  // 给用户指定密码
删除用户
userdel 用户名 
userdel xm  //删除用户但是保留家目录(一般保留)
userdel -r xm // 删除用户同时删除家目录
查询用户信息
id root 
uid 用户的id号 gid 组id 组 = 0 属于哪个组
切换用户(高权限用户切换低权限用户不需要密码)
su -用户名 
需要返回原来用户
exit
​
Linux的用户至少要属于一个组
用户组(类似一种角色,开发组,测试组)
增加组
groupadd 组名
删除组
groupdel 组名
创建用户直接指定到组
useradd -g xm kaifa
修改用户组
usermod -g 用户组 用户名
usermod -g ceshi xm
​
​
用户和组的相关文件位置及含义
用户配置文件(用户信息) /etc/passwd
xm:x:200:520::/home/xm:/bin/bash
用户名:用户id:组id::家目录:所对应的解析器shell
组配置文件(组信息) /etc/group
组名:口令:组标识号:组内用户列表
口令(密码)配置文件 /etc/shadow

运行级别

设计者设计了7个运行级别

0: 关机

1:单用户 (找回丢失密码,进入单用户不需要密码)

2: 多用户无网络服务

3:多用户有网络服务

4:保留

5:图形界面

6:重启

系统运行级别配置文件 /etc/inittab,常用的运行级别是3和5,多用户有网络服务和图形界面,要修改运行级别,修改配置文件

指定运行级别的指令 init [0,1,2,3,4,5,6]

运行级别能够找回root用户的密码

进入到单用户模式,然后修改root密码,因为进入单用户模式root不需要密码就可以登录

开机引导时,输入回车->看到界面输入e->看到一个界面,高亮第二行编辑内核在输入e->在这行最后输入1 回车->再次输入一个b,进入单用户模式,passwd root

帮助指令

当我们对指令不熟悉的时候,使用帮助指令

man 命令 man ls
​
help 命令 help ls

文件目录指令

显示当前目录的绝对路径(从根目录开始的路径)相对路径(从当前工作目录开始定位)
pwd 
显示当前目录所有文件
ls 
ls -a 显示所有文件包含隐藏文件
ls -l ll 显示权限等
ls -lh 显示文件大小的列表
切换目录
cd 
cd ~或者 cd 回到家目录
cd .. 回退目录
cd 绝对路径 cd 相对路径(写法不一,以当前目录为准)
创建文件夹
mkdir 名称
mkdir /home/dog //表示在home路径下创建dog文件夹
mkdir -p /home/dog/cat //一次性创建多级目录
删除文件夹
rmdir 名称
rmdir /home/dog  //删除的是空目录,有内容删不掉
rmdir -rf /home/dog //删除非空目录
创建空文件
touch 文件名称
touch hello.txt
touch hello1.txt hello2.txt 创建多个空文件
拷贝文件到指定目录
cp 源文件目录 目标目录
cp aaa.txt bbb/ //将当前目录的aaa.txt拷贝到bbb/目录下
cp -r test/ zwj/ //-r递归拷贝文件夹
\cp -r test/ zwj/ //如果重复强制覆盖
删除文件或者文件夹
rm -[rf]文件或者目录
-r 递归删除整个文件夹
-f 强制删除不提示
移动文件和重命名
mv oldName newName //重命名(相同目录)
mv /temp/aaa.txt /home/ 移动文件 (不同目录)
查看文件
cat 文件名 
cat -n 文件名 //显示行号
cat -n 文件名|more //显示行号分页显示 后边的more是管道命令
more 文件名 //以全屏的方式**分页**显示文件(space下一页,一行一行看回车,ctrl+B 向上看)
less 文件名 // **分屏显示**,是按页加载的,对于大文件来说,速度比较快
输出重定向和追加指令 
> >>
ls - l > 文件  //将列表的内容写入文件中(覆盖)
ls -l >> 文件  //将列表美容追加到文件末尾(不覆盖)
cat 文件1> 文件2 //文件1的内容覆盖到文件2
echo “内容”>>文件 //追加内容到文件中
​
echo 输出内容到控制台
echo $PATH  //控制台输出环境变量路径
显示文件开头内容
head 文件 //显示开头10行
head -n 5 文件 //看前5行
显示文件的后10行
tail 文件  // 最后10行
tail -n 5 文件 // 显示最后5行
tail -f 文件 **** 实时追踪该文档的所有更新,常常使用
​
软链接指令 相当于windows里的快捷方式,主要存放了链接指向其他文件的路径
ln -s 源文件目录 软链接名
ln -s /root aaa //创建一个软链接aaa指向/root
cd aaa/  // 就是到root下,使用pwd 还是在链接目录
ll 在列表显示的为 aaa->/root 代表aaa就是一个软链接
删除软链接
rm -rf 链接名
​
查看系统执行过的历史命令
history  //查看全部历史指令
history 10 查看最近10条指令
!180 // 执行编号为180的历史指令

时间日期类

显示当前日期
date 
显示当前年份
date"+%Y"
显示月份
date"+%m"
显示天
date"+%d"
显示年月日时分秒
date"+%Y-%m-%d %H:%M:%S"
设置日期
date -s 字符串时间
以日历的方式显示时间
cal  显示当前日历
cal 2022 显示2022一年的日历

搜索查找

管道符|表示将前一个命令的处理结果输出传递给后面的命令处理
find指令
find 搜索范围 [选项] 文件
find /home -name hello.txt //在home目录下查找 文件名为hello的文件
find /opt -user root //按用户角色为root在opt下查找文件
find  / -size +20M  //查找系统下所有大于20M的文件 大于是+ 小于- 等于直接写
find / -name *.txt  //查找所有txt
locate 指令
locate 可以快速定位文件路径,利用系统中所有文件名称及路径的locate数据库实现快速定位
updatedb //第一次使用必须用这个指令建立locate数据库
locate hello.txt //查找hello.txt路径
grep指令和管道符号 (管道过滤查找)
grep过滤查找 管道符|表示将前一个命令的处理结果输出传递给后面的命令处理
-n显示匹配行及行号 -i忽略大小写
grep yes 查找yes
​
cat hello.txt | grep -n yes  //查看结果给grep进行过滤查找
cat hello.txt | grep -i yes  //查看结果给grep进行过滤查找

压缩解压缩

gzip/gunzip指令
gzip用于压缩文件,gunzip用于解压缩
gzip 文件  //将文件压缩为*.gz文件,不会保留原来的文件
gunzip 文件.gz // 解压缩命令
​
zip/unzip指令(对zip文件有用)
zip压缩文件 unzip解压文件项目打包发布中很有用
zip -r 文件 //递归压缩 压缩成*.zip文件
unzip -d 指定解压到的目录 文件.zip
​
tar指令 (使用频率最高)c是压缩 x是解压
tar既可以压缩也可以解压
tar指令最后打包的文件是.tar.gz的文件
tar -x 文件名 解压 -x为解压,其他四个zcvf为压缩
​
tar -zcvf a.tar.gz a.txt b.txt  //将a.txt和b.txt压缩成为a.tar.gz
tar -zxvf a.tar.gz //将a.tar.gz解压到当前目录
tar -zxvf a.tar.gz -C /home/aaa/ //将压缩包解压到home下的aaa文件夹 必不可少的参数 -C
-zcvf
-z 打包同时压缩
-c 产生.tar打包文件
-x 解压文件
-v 显示详细信息
-f 指定压缩后的文件名

组管理和权限管理

linux每个用户必须属于一个组,不能独立于组外,在linux中每个文件有所有者所在组 其他组的概念

  • 所有者:一般来说文件的创建者就是文件的所有者,
  • 所在组: 一般来说文件的所有者所在的组就是文件的所在组,
  • 其他组: 除了文件所在组的其他组
查看文件所有者所在组
 ls -ahl 或者ll 查看文件所有者  第一个用户名就是文件的所有者,第二个就是文件的所在组
修改文件所有者
chown 用户名 文件名 // change owner
chown admin01 hello.txt
组创建
groupadd 组名
useradd -g xm 组名
修改文件所在组
chgrp 组名 文件名  // change group
chgrp root hello.txt
修改用户所在组
usermod -g 组名 用户名  // user modify
usermod -d 目录名 用户名 

linux权限的基本介绍

权限就是文件或者目录的权限

权限详解(总共10位 0-9)
​
-rw-r--r--  
​
 第0位-代表文件的类型: 
​
-代表普通文件 
​
d:代表是一个目录
​
l:代表软链接
​
c:代表字符设备(键盘鼠标)
​
b:块文件(硬盘)
​
第1-3位确定所有者权限rwx(user)
​
第4-6位确定所有组拥有该文件的权限(group)
​
第7-9位确定其他用户拥有文件的权限 --- other
​
-rw-r--r--.1 //1如果是文件表示硬链接数量,如果是目录代表子目录的个数
drwx------.4 admin  staff   128B 12 21  2020 Pictures 时间是最后修改时间 大小如果是文件夹一律显示4096
​
rwx作用在文件上 (rwx的数字 r 4 w2 x 1)
r读 可以查看
w写(可以修改不代表可以删除,删除的前提是对所在目录有写的权限)
x可执行
rwx作用在目录上
r读 可以查看
w写 可以修改,目录内创建、删除、重命名目录
x可执行 可以进入该目录

权限管理

chmod 
通过chmod指令修改文件或者目录的权限+- =方式变更权限 
u:所有者 g:所有组 o:其他人 a:(ugo的总和)
chmod u=rwx,g=wx,o=x 文件或者目录  //chang modify
chmod u-x 文件或者目录 // 所有者剪掉一个可执行权限
通过数字
chomd 777 文件或者目录 rwxrwxrwx
​
练习
// groupadd police 
// groupadd bandi
// useradd -g jack police
// useradd -g jerry bandi
// touch jack.txt 
// chmod 640 jack.txt
// reboot 

任务调度

任务调度:是指系统在某个时间执行的特定命令或程序

任务调度分类 : 1.系统工作,有些重要的工作必须周而复始的执行,如病毒扫描等 2.个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份

基本语法
crontab []  //选项 -e 代表编辑定时任务 -l 查看定时crond任务 -r删除当前用户的crontab任务
重启任务调度
service crond restart 
先写一段脚本,配置任务调度即可,如果是简单的任务,可以不用编写脚本,直接在crontab中加入任务即可
案例 每个1分钟执行一段输出
crontab -e 
1 * * * *ls -l /etc/>>tmp/to.txt  
5个*的含义
// 第一个*代表 1小时中的第几分钟 0-59
// 第二个*代表 一天中的第几个小时 0-23
// 第三个*代表 一个月中的第几天 1-31
// 第四个*代表 一年中的第几个月 1-12
// 第五个*代表 一周中的星期几 0-7

磁盘分区

分区的方式:(了解)

mbr分区:

  • 最后支持四个主分区
  • 系统只能安装在主分区
  • 扩展分区要占一个主分区
  • MBR最大支持2TB,但拥有最好的兼容性

gtp分区(目前使用最多)

  • 支持无限多个主分区(但操作系统可能限制,比如windows下最多128分区)
  • 最大支持18EB的大容量(EB=1024pb pb= 1024TB)
  • windows7 64位以后支持gtp
  • windows 主分区是深蓝色 扩展分区里边可以放置逻辑分区
linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,linux中每个分区都是用来组成整个文件系统的一部分
linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时要载入的一个分区将使它的存储空间在一个目录下获得(挂载)
              /                                        磁盘分区(硬盘)
---------------------------------                 
|      ......                                          分区1
boot                                                    分区2
​
linux采用挂载的方法,磁盘分区可以mount(挂载)unmount(卸载)在目录树(文件系统目录树)的某个目录下,操作文件系统目录就等同于操作挂载到该目录下的硬盘
在linux中对于硬盘的管理
linux硬盘分为IDE硬盘和SCSI硬盘,目前都是SCSI硬盘
如果是IDE 驱动标识为 “hdx~” 其中hd表明分区所在设备的类型,
对于SCSI硬盘则标识为 “sdx~” 其中sd表明分区所在的设备类型
x为盘号(a为基本盘 b为基本从属盘 c为辅助主盘 d为辅助从属盘)
“~”代表分区,前四个分区用数字1-4表示,他们是主分区和扩展分区,从5开始就是逻辑分区例如 hdb2就代表第二个IDE硬盘上的第二个主分区或者扩展分区
查看分区挂载情况 
lsblk   (//谐音 老师不离开)
​
案例 增加一块硬盘2G ,挂载到home/newdisk
1、硬盘分区
fdisk /dev/sdb  //进入帮助页面
n 新增分区
d 删除分区
w 写入并退出
p 显示磁盘分区
2、的硬盘格式化(如果不格式化就相当于买了房子不装修,不能进行数据存取)
mkfs -t ext4 /dev/sdb1 //格式化ext4格式
3、挂载
mount /dev/sdb1 /home/newdisk   // 重启就失效
4、自动挂载(永久挂载)
    1、编辑文件 /etc/fstab ,这个文件记录了分区以及挂载点的情况
    dev/sdb1 /home/newdisk ext4 defults 0 0
    2、mount -a  //auto
    
​
磁盘情况查询
查看系统所有硬盘的使用情况
df -lh 
查询指定目录硬盘占用情况
du -ach --max-depth=1  /opt  //查询目录占用的情况 深度1
统计home下文件夹下的文件个数
ls -l /home |grep "^-"|wc -l // 先列出列表,在过滤以-开头的文件,在使用wc进行统计  d就是目录个数
统计home下文件夹下所有的文件个数包含子目录
ls -lr /home |grep "^-"|wc -l  // -r递归调用
以树的形式展示目录
tree

网络配置

网络配置原理

虚拟机 NAT模式(网络环境)

linux 192.168.184.125

windows vmnet虚拟网卡 192.168.184.1 真实网卡 192.168.2.125 真实网卡通过网关连接外部inernet,他们之间构成了一个内部网络

编辑配置文件指定固定ip
vim /etc/sysconfig/network-scripts/ifcf-eth0  //0代表第一个网卡
编辑内容
ONBOOT=yes  //启用boot获取ip
BOOTPROTO= static     //指定以静态方式获取ip
IPADDR= 192.168.184.130 //静态ip
GATEWAY=192.168.184.2  //网关
DNS1=192.168.184.2 //与网关保持一致就行
重启网络服务
service network restart

进程管理

进程就是对后台的服务进行管理,一般系统的服务都是在后台运行的,非常重要

  • PID 进程识别号
  • TTY 终端机号
  • TIME 此进程所消费的cpu时间
  • COMMAND 正在执行的命令或者进程名
  • MEM 内存
  • VSZ 虚拟内存(swap)
  • RSS 物理内存
  • STAT 进程的状态 S:休眠 R:运行
ps 命令查看进程
ps -a 显示当前终端所有的进程信息
ps -u 以用户的格式显示进程信息
ps -x 显示后台进程运行的参数
ps -aux
ps -a| more //分页查看
ps -aux | grep sshd   //通过管道过滤
查看父进程
ps -ef | grep XXX /-ef 全格式显示
终止进程
kill和killall
kill [选项] 进程号
killall 进程名称  // 直接杀掉父进程
强制杀掉一个终端 -9
kill -9 进程号 
以树来展示进程信息
pstree -p //以进程号展示
pstree -u //以用户进行展示
​
服务管理 (与进程不一样,服务跑起来才会有进程)
service systemctl
service 服务名 [start|stop|restart|reload|status]
在centOS7.0之后不再使用service,而是systemctl
systemctl 服务名 [start|stop|restart|reload|status]
查看防火墙的状态
systemctl iptables status
//防火墙只有22号端口是打开的
开启防火墙
systemctl iptables start
关闭防火墙
systemctl iptables stop
windows可以通过telnet检测linux某个端口是否在监听,并且可以访问 
telnet ip 端口
查看系统目前有哪些服务
/etc/int.d 文件
查看服务的运行级别
chkconfig --list |grep sshd
chkconfig 服务名 --list
systemctl启动的服务本次有效,设置自启动
chkconfig iptables on //关闭是off
​
进程监控指令(top)
top 指令与ps进程类似,最大的不同是top可以在运行时更新正在运行的进程
top -[d|i|p]  
交互指令 输入k 在输入进程号 q退出
查看系统网络服务情况(netstat)**********可以看到哪些外部地址远程登录此服务*********重要
netstat -p //显示哪个进程在调用
netstat -an  //按顺序排序    
netstat -anp |grep XXX

包管理工具

RPM和YUM

rpm是一种用于互联网下载包的打包及安装工具,他包含在某些linux的发布版本中(suse redhat centos),生成.RPM扩展名的文件,全称 ReadHat Manager,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的
​
查询已安装的rpm列表
rpm -qa|grep xx
查询软件包装了哪些文件
rpm -ql mysql   
查询文件是属于哪个包
rpm -qf /etc/passwd
卸载软件包
rpm -e mysql  加nodeps代表强制删除
安装软件包
rpm -ivh mysql安装包路径        //i代表install v代表提示 h代表进度条
​
yum是一个shell前端软件包管理器,基于RPM包管理,目前使用比较多,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次按章所有依赖的软件包
查询yum服务器是否有需要安装的软件
yum list |grep XXX
安装指定的yum包 默认安装最新版
yum install xxx
​
​
安装JDK(java程序必须安装)
1解压缩到/opt
2配置环境变量配置文件  vim /etc/profile(重点目录) 输入大G 到末尾
3.JAVA_HOME = /opt/jdk.1.8..   //jdk的目录
4.PATH = /opt/jdk../bin:$PATH  // 定位到bin 后边的:$PATH一定要写,这是代表把以前的path仍进去,就相当于windows的分号连接。
5.export JAVA_HOME PATH
6.需要注销用户环境,环境变量才会生效, 如果运行级别为 3 logout 如果为 5 点退出注销
在任何目录下都能java javac成功。
安装tomcat(springBoot内置tomcat,所以不需要tomact安装)
1、解压到opt
2、启动tomcat ./startup.sh 进入bin目录
3、开放端口 vim /etc/sysconfig/iptables //让防火墙放行8080

shell脚本

linux在服务器管理时,需要编写shell程序来进行服务器管理,shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序

shell脚本的后缀一般是.sh

执行

1、给脚本文件一个可执行权限

chmod 755 文件

然后直接输入相对路径或者绝对路径执行

2、sh 路径执行 (这样可以不给执行权限)

变量

echo "Hello world" 
每句语言结束后不需要写分号 注释用#
shell的变量
​
shell变量分为系统变量和用户自定义变量 ########
系统变量 
$HOME $PWD $SHELL $USER 等 
echo $USER 输出系统变量
显示当前shell的所有变量:
set
变量的定义 
变量=值
A=10
撤销变量
unset A
声明静态变量 注意不能unset
readonly B
将命令的返回值赋值给变量(重点)########
A=`ls -la` 用反引号
A= $(ls -la) 等价于反引号
设置环境变量(重点)########
export 变量名=变量值 (将shell变量输出为环境)
source 配置文件 (让修改后的配置信息立即生效)/etc/profile配置文件立即生效(环境变量配置文件)
echo $变量名(查询环境变量的值)
位置参数,当我门执行一个shell脚本时,如果希望获取命令行的参数信息,就可以使用到位置参数变量(就是传参)########
sh ./myshell.sh 100 200 
$n $* $@ $#
$n n是数字 $0代表命令本身 $1-$9代表第一到第九个参数,十以上的参数用大括号包含 ${10}
$* 是将所有参数看成一个整体
$@ 这个变量也代表命令行中的所有刹那火速,不过$@把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
注意:变量的命名不能以数字开头,等号两侧不能有空格,变量一般习惯为大写,在引用输出变量的时候用$
预定义变量,就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用 ########
$$   当前进程的进程号pid
$!   后台运行的最后一个进程的进程号
$?   最后一次执行命令的返回状态,0为成功,非0不成功(取决于命令)

运算符条件判断

运算符
基本语法
$((运算式))或 $[运算式]
expr m+n
expr m-n
expr \*,/,%
计算2+3
$((2+3))
$[2+3]
expr 2+3
计算命令行两个参数的和
expr $1+$2
​
条件判断
if [ confition ]
then
fi
判断语句
= 字符串比较
整数之间的比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
按照文件权限判断
-r 读的权限
-w 写的权限
-x 执行的全新啊
按照文件的类型进行判断
-f 文件存在并且是一个常规文件
-e 文件存在
-d 文件存在并是一个目录
ok是否等于ok
if [ "ok"="ok" ]
then
        echo "equal"
elif [ "a"="a" ]
        echo "a"
fi
案例 如果输入的参数大于等于60 输入及格,小于60 输出不及格
if  [ $1 -ge 60]
then 
  echo "及格"
elif [ $1 -lt 60 ]
    echo "不及格"
fi
case语句 
案例 如果命令行参数是1时,输出周一 是2时输出周二 其他情况输出other (两个分号代表结束,)
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
for循环语句(两种方式)
案例 打印命令行输入的参数
for i in "$*"  //遍历$* 因为是整体只输出一次
do
    echo "the num is $i"
done
for j in "$@"  //遍历$@ 因为不是整体有几个输出几次
do
    echo "the num is $j"
done
案例 从1加到100输出展示
SUM=0
for(i=1;i<100 i++)
do
    SUM = expr $SUM+i
done
echo $SUM
while循环 
案例从命令行输入1 计算1+n
SUM=0
i=0
while [ $i -le $1 ]
do
     SUM = expr $SUM+$i
     i=expr $i+1
done

读取控制台输入

read [-p|t] (参数)
-p 指定读取值时的提示符
-t 指定读取值时等待的时间,如果没有在指定的时间内输入就不等待啦
案例 读取控制台输入一个num值 10s内输入
read -t 10 -p"请输入一个数num1=" NUM
echo "你输入的值是num1=$NUM"

函数

shell编程和其它编程语言一样,有系统函数,也可以自定义函数,在系统函数中,介绍两个
basename 得到文件名部分
basename /home/aaa/text.txt  直接拿到test.txt 
basename /home/aaa/text.txt .txt 直接拿到text
dirname 得到路径部分
dirname /home/aaa/text.txt
​
自定义函数
案例 计算输入两个参数的和
function getSum(){
    SUM=expr $1+$2
    echo "和是$SUM"
}
调用
getSum $n1 $n2

综合案例定时备份

需求
1、每天凌晨2.10备份数据库 xxxDB 到 / data/backup/db
2、备份开始和备份结束能够给出相应的提示信息
3、备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式
4、在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
​
将脚本放在/usr/sbin下
shell脚本编写
BACKUP=/data/backup/db
DATETIME=$(date+%Y_%m_%d%H%M%S)
echo "===============开始备份================="
echo "======备份路径是$BACKUP/$DATETIME.tar.gz"
HOST= localhost
DBUSER=root
DBPWD=root
DATABASE=xxx
#判断路径是否存在
if [ !-d "$BACKUP/$DATETIME" ]
then
elif [ -d "$BACKUP/$DATETIME" ]
        mkdir -p "$BACKUP/$DATETIME"
fi
#执行备份数据库指令 mysql -u root -p **** 登录指令 -username -password mysqldump为备份指令
#先备份成一个文件夹,然后压缩在删掉
mysqldump -u$DBUSER -p$DBPWD --host=$HOST $DATABASE |gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIM
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除10天前的文件 -mtime +10 在10天前的意思  -exec rm -rf {} \; 固定写法,执行删除找到的那些文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "==========备份成功============"
​
放到 crontab定时调度
crontab -e
10 2 * * * /usr/sbin/mysql_db_backup.sh

你可能感兴趣的:(部署及运维,linux,vim,运维)