linux 基础篇 通篇学习
Linux
最小化安装
1,开启网络 ifconfig 配置静态ip
2,yum vim
3,yum wget
4,yum net-tools
5,配置yum源
6,iptables
linux下开发项目
- javaEE
- 大数据
- Python
- PHP
- C/C++
- 免费开源,应用于服务器领域
一, Linux基础篇
- liunx是免费的,开源的操作系统
- Linux之父 Linus Torvalds
- 同时也是Git的创始人
- Liunx的主要发行版
- Ubuntu(乌班图)
- RedHat(红帽)
- Debain(蝶变)
- CentOS
- Fedora
- SuSE
- OpenSUSE
Linux 和Unix的关系
-
unix 从贝尔实验室出来
-
黑客发起GNU计划
-
出现linux
-
二次开发linux
-
发展起来了
安装vm和CentOS
-
创建一个虚拟机,在虚拟机上安装Centos系统学习
-
安装virtual machine15.5
- 从官网上下载
- VMware-workstation-full-15.5.0-14665864.exe
-
安装Centos
-
安装vmtools 安装open-vm-tools
- vmtools安装后,可以更好的在windows下管理vm虚拟机
- 可以设置windows和centos的共享文件夹
- 虚拟机开机时就点击重新安装vmtools
- 安装的步骤
- 进入centos
- 单击vm菜单-->install vmware tools
- centos会出现一个vm的安装包 xx.tar.gz
- 拷贝 /opt
- 使用解压命令 得到一个安装文件
- cd /opt
- tar -zxvf VM tab键
- cd vmware-tools-distrib/
- cd /opt
- 进入该vm解压的目录,/opt目录下
- 安装 ./vmware-install.pl
- 全部使用默认设置即可,安装成功
- 注意: 安装时vmtools 需要有gcc
- 共享文件位置
- 在主文件
- 其他位置
- 计算机
- mnt
- hgfs
网络连接的三种方式 NAT
- 第一种方式
- 桥接模式
- 虚拟系统可以和外界的系统相互通信,但是会造成ip冲突
- 第二种方式 (使用这种方式)
- NAT模式
- 网络地址转换模式
- 虚拟系统可以和外界通讯,并且不会造成ip冲突
- 虚拟系统通过代理与外界通信
- 第三种模式
- 主机模式
- 独立的系统
虚拟机克隆
-
第一种方式
-
直接拷贝一份安装好的虚拟机文件
-
-
使用vmware克隆操作
- 注意: 克隆时,需要先关闭linux系统
- 直接点击 虚拟机的管理--->克隆
虚拟机快照
- 使用虚拟机的时候,想回到原先的某个状态
- vmware提供了功能
- 快照管理
虚拟机迁移和删除
- 虚拟系统安装好了,本质上就是文件(放在文件夹中)
- 迁移
- 将安装好的虚拟系统的这个文件夹拷贝或剪切到其他的位置
- 删除
- 用vmware移除
- 点击菜单--->从磁盘中删除
- 或者手动删除虚拟系统的文件
linux目录结构
- 在linux世界里,一切皆为文件
- 层级式的树状结构
- 根目录
- /
- 根目录
根目录 具体的目录结构
-
/bin
- Binary的缩写 存放着常用的命令
- /user/bin
- /usr/local/bin
-
/sbin
- Super User 的意思 系统管理员的系统管理程序
- /usr/sbin
- /usr/local/sbin
-
/home
- 普通用户的主目录
-
/root
- 系统管理员的主目录
-
/lib
- 系统开机时需要最基本的动态连接共享库
-
/lost + found
- 系统非法关机的时候存放的目录
-
/etc
- 系统管理所需要配置文件和子目录
-
/usr
- 用户的文件都存放在这个目录之中 类似与windows 的 program files
-
/boot
- 存放的是linux启动相关的文件
-
/proc
- 虚拟的目录 系统内存的映射 不用动
-
/srv
- service的缩写 提供启动的数据
-
/sys
- 系统文件 不用动
-
/dev
- 类似与windows的设备管理
-
/media
- liunx自动识别一些设备,当识别后,linux将识别的设备挂在某个目录下
-
/mnt
- 让用户临时挂在其他系统的文件
-
/opt
- 主机额外安装软件的所存在的目录
-
/user/local
- 给另外一个主机额外安装软件的目录,一般是通过源码方式安装的程序
-
/var
- 存放经常修改的目录
- 包括各种日志文件
-
/selinux
- 安全子系统,能控制程序只能访问特定文件
- 有三种方式
- 自己设置
远程登录
安装xshell
-
邮件地址下载
-
连接xshell7
-
reboot
- 重启系统
-
xftp7 互传文件
-
中文乱码
- 左上角文件-->当前会话属性-->选项-->编码-->UTF-8
vi和vim
- linux系统内置vi文本编辑器
- vim是vi的增强版
三种模式
- 正常模式
- 默认模式
- 插入模式
- i I o O r R
- 都可以
- 可以进入
- 命令行模式
- 进入命令行模式
- 按下esc按键
- shift + :
- 提供相关指令
- wq
- 保存
- q!
- 不保存
- wq
- 进入命令行模式
vi 和 vim的各种快捷键
-
正常模式下
-
拷贝当前行
- yy
- 拷贝当前行向下的5行并粘贴
- 5yy(输入p)
-
删除当前行
- dd
- 删除当前向下5行
- 5dd
-
定位到首行和尾行
- 首行: gg
- 尾行: G
-
撤销动作
- u
-
快速定位到行数
- 行号 shift + g
-
搜索
- /变量名
-
-
命令模式下
- 在文件中查找某个单词
- : 或者 /
- 关键字
- 回车
- 查找下一个 n
- 设置文件的行号
- set nu 显示行号
- set nonu 隐藏行号
- 在文件中查找某个单词
关机 重启 reboot
-
指令
-
shutdown -h now 立刻关机
-
shutdown -h 1 一分钟后关机
-
shutdown -r now 立刻重启计算机
-
halt 关机
-
reboot
- 现在重启计算机
-
sync 把内存的数据同步到硬盘上
-
注意: 不管是关机还是重启 都要运行sync命令 把内存的数据写到磁盘中
- 目前的重启,关机命令都是在关机前进行sync命令
-
二, Linux实操篇
用户管理
用户登录和注销 logout
-
登录的时候,尽量不要用root账户
-
普通用户切换到系统用户
- su -用户名
-
注销账户
- logout
-
细节
- logout在图形界面没有效果
- 在运行级别3下才有效
增删用户 useradd
-
添加用户
-
useradd 用户名
- 会自动创建同名的目录
- 在/home中
- useradd -d 指定目录 新的用户名 (自定义用户目录)
-
添加密码
- passwd 用户名
-
显示密码
- pwd
-
-
删除用户
- userdel zgw
- 删除用户zgw 保留家目录
- 推荐使用这个命令
- userdel -r tom
- 完全删除tom
- userdel zgw
查询用户 id
- id 用户名
切换用户 su
- su - 用户名 (用户名前面有空格)
- 从高权限到低权限不用密码
- who am i
- 我是谁
用户组 group
- 系统对有共性的多个用户进行统一的管理
- 新增组
- groupadd 组名
- 删除组
- groupdel 组名
- 新增用户直接加组
- useradd -g 用户组 用户名
- 修改用户的组
- usermod -g 用户组 用户名
- 用户和组相关的文件
- /etc/passwd 文件
- 查看 vim /etc/passwd
- 用户(user)的配置文件,记录用户的各种信息
- 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
- /etc/shadow 文件
- 口令的配置文件
- 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- /etc/group 文件
- 组(group)配置文件 记录linux组的文件
- 每行的含义:组名:口令:组标识号:组内用户列表
- /etc/passwd 文件
运行级别 3 5
- 介绍
- 0 : 关机
- 1 : 单用户[找回丢失密码]
- 2 : 多用户状态没有网络服务
- 3 : 多用户状态有网络服务 常用
- 4 : 系统未使用保留给用户
- 5 : 图形界面 常用
- 6 : 系统重启
- 可以指定运行级别
- 切换
- init 级别
- 指令
- 查看当前级别
- systectl get-default
- 设置运行级别
- systectl set-default
- 指定运行级别 3
- analogous to runlevel 3
- multi-user.target
- 指定运行级别 5
- analogous to runlevel 3
- graphical.taget
- 演示
- 设置运行级别为5
- systectl set-default graphical.taget
- 设置运行级别为5
- 查看当前级别
找回root密码
-
开机界面输入 e
-
找到Linux16开头的行数,在行最后输入:
- init=/bin/sh
-
ctrl + x
- 进入单用户模式
-
输入命令
- mount -o remount,rw /
-
输入密码
- passwd
-
输入命令
- touch /.autorelabel
-
输入命令
- exec /sbin/init
- 等待以下
-
系统自动重启
帮助命令 man
-
man
-
获取帮助信息
-
查看
- man ls
在linux下,隐藏文件以 . 开头
ls -a
-
-
help
- 获取shell内置的命令信息
- help 命令
其他指令
- cal
- 显示日历
- wc
- 统计数据
- telnet
- 测试端口
- &&
- 命令满足条件,执行后续的命令
快捷键
- ctrl + d
- 退出当前用户
- tab
- 字符补全
- 上下键
- 命令行快速调用之前的命令
文件目录类指令
一部分 touch
-
pwd 指令
- 显示当前目录
-
ls 指令
- 列举选项
- ll 相当于 ls -l
- 用来查询当前目录下文件及目录的详情
- 常用选项
- -a
- 显示当前目录所有的文件和目录 包含隐藏的
- -l
- 以列表的形式显示
- -h
- 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
- -a
- 列举选项
-
cd 指令
- 切换到指定目录
- cd ~ 或 cd :
- 回到家目录
- cd ..
- 回到当前目录的上级目录
- cd ../../root
- 使用相对路径回到/root目录
-
mkdir 指令
- 创建目录
- 语法
- mkdir 要创建的目录
- mkdir -p 多级目录
-
rmdir 指令
- 删除空目录
- 语法
- rmdir 目录
- 删除非空目录
- rm -rf 删除的目录
-
touch 指令
- 创建空文件
- 语法
- touch 文件名称
-
cp 指令
-
拷贝文件到指定目录
-
语法
- cp 选项 source 目标目录
-
常用选项
-
-r
- cp -r 要拷贝的目录 目标目录
- 递归复制整个文件夹
-
\cp
- 强制不覆盖的方法
-
-
二部分 more
- rm 指令
- 移除文件或目录
- 语法
- rm 选项 要删除的文件或目录
- 常用选项
- -r :递归删除整个文件夹
- -f : 强制删除不提示
- -rf: 删除非空目录
- mv 指令
- 移动文件与目录或重命名
- 语法
- mv oldNameFile newNameFile 重命名 同级目录下
- mv /temp/movefile /targetFolder 移动文件
- mv oldNameFile /targetFolder/newNameFile 移动文件并重命名
- cat 指令
- 查看文件内容
- 语法
- cat 选项 要查看的文件
- 常用选项
- -n 显示行号
- 注意:cat只能浏览文件
- more 指令
- 基于VI编辑器的文本过滤器
- 以全屏的方式按页显示文本文件的内容
- 语法
- more 要查看的文件
- 快捷键
- 空格键
- 向下翻一页
- enter
- 向下翻一行
- q
- 立刻离开more 不再显示文本内容
- ctrl + f
- 向下滚动一屏
- ctrl + B
- 返回上一屏
- =
- 输出当前行号 控制台
- :f
- 输出文件名和当前行号
- 空格键
三部分 echo
-
less 指令
- 分屏查看文件内容
- 和more 类似
- 比more功能强大
- 语法
- less 要查看的文件
- 快捷键
- 空格
- 向下翻动一页
- pagedown
- 向下翻动一页
- pageup
- 向上翻动一页
- /字串
- 向下搜寻[字串]的功能
- n: 向下查找
- N:向上查找
- 向下搜寻[字串]的功能
- ?字串
- 向上搜寻[字串]的功能
- n: 向上查找
- N:向下查找
- 向上搜寻[字串]的功能
- q
- 立刻离开less不再显示文本内容
- 空格
-
echo 指令
- 输出内容到控制台
- 语法
- echo 选项 输出的内容
- 演示
- echo $PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
-
head 指令
- 显示文件的开头部分内容
- 默认前10行内容
- 语法
- head 文件
- head -n 5 文件
- 查看文件头5行内容 5是任意行数
-
tail 指令
- 显示文件的尾部部分内容
- 默认前10行内容
- 语法
- tail 文件
- tail -n 5 文件
- 查看文件头5行内容 5是任意行数
- tail -f 文件
- 实时追踪该文档的所有更新
-
'> 指令 和 '>> 指令 不带''typora不允许直接箭头
- '> 输出重定向
- '>> 追加
- 语法
- ls -l > 文件
- 列表的内容写入文件中(覆盖写)
- ls -al >> 文件
- 列表的内容追加到文件的末尾
- cat 文件1 > 文件2
- 将文件1的内容覆盖文件2
- echo "内容" >> 文件1
- 将输出的内容 追加到文件1中
- ls -l > 文件
- 语法
-
ln 指令
- 软链接也称为符号连接
- 存放其他链接文件的路径
- 类似于windows 的 快捷方式
- 语法
- ln -s [原文件或目录] [软链接名]
- 给原文件创建一个软链接
- 注意:当我们使用pwd查看目录时,仍然看到的是软链接所在的目录
- ln -s [原文件或目录] [软链接名]
-
history 指令
- 查看已经执行过的历史指令
- 语法
- history
- 查看全部
- history 条数
- history
事件日期类指令 date
- date 指令
- 显示当前日期
- 语法
- date
- 显示当前日期
- date +%Y
- 显示当前年份
- date +%m
- 显示当前月份
- date +%d
- 显示当前是哪一天
- date "+%Y-%m-%d %H:%M:%S"
- 显示时分秒
- 2022-07-06 19:29:53
- 显示时分秒
- date
- date-设置日期 指令
- 语法
- date -s 字符串时间
- date -s "2022-07-06 19:29:53"
- 语法
- cal 指令
- 查看日历指令
- 语法
- cal 选项
- cal 2020
- 显示2020的日历
搜索查找类指令 grep
- find 指令
- 从指定目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示在终端
- 语法
- find 搜索的范围 选项
- 选项
- -name<查询方式>
- -user<用户名>
- -size<文件大小>
- -atime n : 在过去 n 天内被读取过的文件
- 实例
- find /home -name hello.txt
- locate 指令
- 快速定位文件路径
- 会自己创建数据库
- 语法
- locate 搜索文件
- 说明
- locate指令基于数据库进行查询时,第一次运行前,必须使用updatedb指令创建locate数据库
- updatedb
- locate Hello.txt
- which 指令
- 查看某个指令在某个目录
- which ls
- grep 指令 和管道符号 |
- grep 过滤查找
- 管道符号 |
- 表示将前一个命令的处理结果输出传递到后面的命令处理
- 语法
- grep 选项 查找内容 源文件
- 常用选项
- -n 显示匹配行和行号
- -i 忽略大小写
- 实例
- cat a.txt | grep -i "hello"
- grep -v grep
- 反向匹配,过滤掉grep这个进程
压缩解压类指令 tar
- gzip/gunzip 指令
- gzip 压缩文件
- gunzip 解压文件
- 语法
- gzip 文件
- 只能将文件压缩成*.gz文件
- gunzip 文件.gz
- 解压缩文件
- gzip 文件
- zip/unzip 指令
- 解压和压缩
- 语法
- zip 选项 xxx.zip
- unzip 选项 xxx.zip
- 选项
- zip选项
- -r
- 递归压缩,压缩目录
- 实例
- zip -r myhome.zip /home/ 将home目录及其子文件都压缩
- -r
- unzip选项
- -d<目录>
- 指定解压后文件的存放目录
- 实例
- unzip -d /home myhome.zip 解压文件
- -d<目录>
- zip选项
- tar 指令
- 打包指令
- 最后打包的文件是 .tar.gz 文件
- 语法
- tar 选项 xx.tar.gz 打包的内容
- 选项
- -c 产生.tar的打包文件
- -v 显示详细信息
- -f 指定压缩后的文件名
- -z 打包同时压缩
- -x 解包.tar文件
- -zxvf 组合使用解压
- -zcvf 组合使用打包
- 实例
- tar -zxvf pc.tar.gz /home/pig.txt
组管理
- 在linux中,每个用户都属于一个组
- 没有设置的用户默认生成同名的组
- 组的创建
- groupadd 组名
- 实例
- 创建一个组,monster
- groupadd monster
- 创建一个用户fox ,放到组中
- useradd -g monster fox
- 创建一个组,monster
文件/目录
-
颜色含义
-
绿色文件-可执行文件
-
红色文件-压缩文件或者包文件
-
蓝色文件-目录
-
白色文件-普通,如文本文件,配置文件,源码文件等
-
浅蓝色文件-链接文件,主要是使用ln命令建立的文件
-
红色闪烁-表示链接的文件有问题
-
黄色文件-表示设备文件
-
灰色文件-表示其它文件
-
所有者
- 查看文件的所有者
- ls -ahl
- 修改文件的所有者
- chown 用户名 文件名 (change own 的缩写)
- 实例
- chown tom cat.txt 修改cat.txt文件的所有者为tom
所在组
- 查看文件/目录所在的组
- ls -ahl
- 修改文件所在的组
- chgrp 组名 文件名
- 实例
- 使用fox创建一个文件,看看该文件属于哪个组
- -rw-r--r--. 1 fox monster 0 7月 7 10:03 ok.txt
其他组
- 改变用户的所在组
- usermod -g 组名 用户名
- usermod -d 目录 用户名 改变该用户登录的初始目录
- 注意:用户有进入到新建目录的权限
权限管理
-
举例
-
dr-xr-x---. 15 root root 4096 7月 7 10:08 root
-
前面10个,为0-9位
-
第0位 确定文件的类型(d - l c b)
-
" - : 普通文件
-
l : 链接 相当于windows的快捷方式
-
d : 目录 相当于windows的文件夹
-
c : 字符设备文件 鼠标 ,键盘
-
b : 块设备 比如永攀
-
-
第1-3位 确定所有者(该文件的所有者)拥有的权限 ---User
-
第4-6位 确定所属组拥有该文件的权限 ---Group
-
第7-9位 确定其他用户拥有该文件的权限 ---Other
-
-
15
- 文件 : 硬连接数
- 目录 : 子目录数
-
root
- 用户
-
root
- 组
-
4096
- 文件大小(字节)
- 如果是文件夹 显示 4096
-
7月 7 10:08
- 最后修改的日期
-
root
- 文件名
-
-
rwx作用到文件
- r : 代表可读(read) 可以读取,查看
- w : 代表可写(write) 可以修改
- 代表可以删除该文件,删除一个文件的前提是对该文件所在的目录有写的权限,才能删除该文件
- x : 代表可执行(execute) 可以被执行
rwx作用到目录
- r : 代表可读(read) 可以读取,查看
- ls 查看目录内容
- w : 代表可写(write) 可以修改
- 对目录内创建+删除+重命名目录
- x : 代表可执行(execute) 可以进入该目录
权限入门 chmod
- 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 文件目录名
修改文件所有者-chowm
-
改变所有者
- chown newowmer 文件/目录
-
改变所有者和所在组
- chown newowner:newgroup 文件/目录
-
选项
- -R
- 如果是目录,则是旗下所有子文件或目录递归生效
- -R
修改文件/目录所在组 chgrp
- 改变所在组
- chgrp newgroup 文件/目录
- 选项
- -R
- 如果是目录,则是旗下所有子文件或目录递归生效
- -R
警察和土匪
-
police
- jack jerry
-
bandit
- xh xq
-
实现步骤
- 1,创建组
- 2,创建用户
- 3,jack 创建一个文件 ,自己可以读写 本组人可以读 其他组没人有权限
- 4,jack 修改文件,让其他人可以读 本组人可以读写
- 5,xh 投靠警察,看看是否可以读写
-
代码
[root@java01 /]# groupadd police;groupadd bandit [root@java01 /]# useradd -g police jack;useradd -g police jerry [root@java01 /]# useradd -g bandit xh;useradd -g bandit xq; [root@java01 ~]# passwd jack [jack@java01 ~]$ vim jack.txt [jack@java01 ~]$ cat jack.txt [jack@java01 ~]$ chmod 640 jack.txt [jack@java01 ~]$ chmod 644 jack.txt [jack@java01 home]$ chmod 770 jack //让xh有进入jack的权限 [jack@java01 ~]$ chmod g+w jack.txt //让xh有写jack.txt的权限 [root@java01 ~]# usermod -g police xh
x : 表示可以进入到该目录,比如cd
r : 表示可以ls,将目录显示出来
w : 表示可以在该目录,删除或者增加文件
定时调度
- croud 任务调度
- 第一种 : 执行shell脚本
- 第二种: 直接写代码
- 相关指令
- sevice crond restart 重启任务调度
- 相关指令
定时任务 crontab
-
进行定时任务的设置
-
概述
- 任务调度: 系统在某个时间执行的特定的命令或者程序
- 任务调度分类:
- 1,系统工作: 有些重要的工作必须周而复始的执行 如:病毒扫描
- 2,个别用户工作: 个别用户可能希望执行某些程序,比如对mysql数据库的备份
-
语法
- crontab 选项
-
选项
- -e 编辑crontab定时任务
- -l 查询crontab任务
- -r 删除当前用户所有的crontab任务
-
特殊符号
/ ***** 代表任何时间
*/1 * * * * 每分钟执行一次
/ , 代表不连续的时间
0 8,12,16 * * * 每天的8点0分,12点0分,16点0分 执行一次命令
/ - 代表连续的时间范围
0 5 * *1-6 周一到周六的凌晨5点0分执行命令
/ */n 代表每隔多久执行一次
*/10 * * * * 代表每隔10分钟执行一次命令
快速入门
-
设置任务调度的文件位置
- /etc/crontab
-
设置个人任务调度
- crontab -e 命令 直接执行这个命令
-
输入任务到调度文件
- 如: */1 * * * * ls -l /etc/ > /tmp/to/txt
- 每小时的每分钟执行ls -l /etc/ > /tmp/to.txt命令
-
参数说明
-
第一个 * : 一个小时的第几分钟 0-59
-
第二个 * : 一天当中的第几小时 0-23
-
第三个 * : 一个月中的第几天 1-31
-
第四个 * : 一年中的第几个月 1-12
-
第五个 * : 一周的第几个星期 0-7(0和7 都代表着星期日)
-
一次性定时任务 at
-
介绍
- 1,at命令是一次性的定时计划,at的守护进程atd会进入后台模式运行,检查作业队列来运行
- 2,默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果事件与当前时间匹配,则运行此作业
- 3,at命令是一次性定时计划任务,执行完一个任务后不再执行任务了
- 4,在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
- ps -ef 所有的进程
- ps -ef | grep atd 搜索atd进程
- ps -ef 所有的进程
- atq
- 查看系统中没有执行的工作任务
- atrm 编号
- 删除已经设置的任务
- atrm 4 表示将工作队列为4的编号定时任务删除
-
at 命令格式
- at 选项 时间
- Ctrl + D 结束at的输入 两次
-
选项
-
-m 当指定的任务完成之后,将给用户发送邮件,即使没有标准输出
-
-I atq的别名
-
-d atrm 的别名
-
-v 显示任务将被执行的时间
-
-c 打印任务的内容到标准输出
-
-V 显示版本信息
-
-q<队列> 使用指定的队列
-
-f<文件> 从指定的文件读入任务而不是从标准输入读入
-
-t<时间参数> 以时间参数的形式提交要运行的任务
-
-
at 时间的定义
- 1,接受当天的hh:mm式的时间指定
- 2,使用midnight(深夜),noon(中午),teatime(下午4点)
- 3,采用12小时计时制,在时间的后面加入AM(上午),PM(下午)
- 4,指定命令执行的具体时间,
- dd.mm.yy
- mm/dd/yy
- 指定的日期必须跟在指定的时间后面 例如: 04:00 2021-03-1
- 5,使用相对计时法
- 格式: now + count time-units
- now是当前时间,time-units是时间单位
- minutes(分钟) hours(小时) days(天) weeks(星期) count是时间的数量
- now是当前时间,time-units是时间单位
- 例如:now + 5 minutes
- 格式: now + count time-units
- 6,直接使用today tomorrow 指定完成命令的时间
-
演示
-
1,两天后下午5点
- at 5pm + 2 days
2,明天17点钟,输出时间到指定文件内 /root/date100.log at 5pm tomorrow at> date > /root/date100.log atq 3,删除已经设置的任务 atrm 编号 atrm 5
-
磁盘管理
- ext4
- swap
- Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中
- mount
- mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。 mount已经不仅仅局限于Linux了。在Windows系统下的应用也越来越广了,多用在虚拟光驱类软件上,比如[Clone CD](https://baike.baidu.com/item/Clone CD/3169425),Daemon tool,WinMount等。
- 命令
- mount 设备名称 挂载目录 挂载
- 演示
- mount /dev/sdb1 /newdisk
- 演示
- unmount 设备名称 或者 挂载目录 卸载
- unmount /dev/sdb1 或者 unmount /newdisk
- mount 设备名称 挂载目录 挂载
linux分区 SCSI
-
linux只有一个根目录
- 一个独立且唯一的文件结构
-
linux采用[载入]的处理方法
-
整个文件系统包含一整套的文件和目录,且将一个分区和一个目录联系起来
这时要载入的一个分区将使它的存储空间在一个目录获得
-
-
硬盘说明
-
linux硬盘分IDE硬盘和SCSI硬盘 死噶死
- 目前基本上是SCSI硬盘
-
对于IDE硬盘,驱动器标识符为"hdx~"
-
"hd"表明分区所在的设备类型
-
"x"为盘号
- a为基本盘
- b为基本从属盘
- c为辅助主盘
- d为辅助从属盘
-
"~"代表分区
- 前四个分区用数字1到4表示 是主分区或扩展分区
- 从5开始是逻辑分区
-
演示
- hda3
- 第一个IDE硬盘上的第三个主分区或者扩展分区
- hdb2
- 第二个IDE硬盘上的第二个主分区或者扩展分区
- hda3
-
-
对于SCSI硬盘标识为"sdx~"
-
sd是SCSI硬盘
-
其他和以上一样
-
-
-
查看所有设备的挂载情况
- 命令
- lsblk
-
- lsblk -f
-
- lsblk
- 命令
linux挂载 mount
- 演示
- 1,在虚拟机上新增一个SCSI硬盘 ,重启系统
- 2,分区命令
- fdisk /dev/硬盘名称(sdb)
- m 显示命令列表
- p 显示磁盘分区 同fdisk -f
- n 新增分区
- 扩展内容: d 删除分区
- 1 一个分区
- w 写入
- 3,格式化磁盘 UUID
- mkfs -t ext4 /dev/硬盘名称(sdb1)
- 4,新建目录并挂载
- mkdir newdisk
- mount /dev/sdb1 /newdisk
- 用命令挂载,只是临时生效
- 5,永久挂载
- 修改etc/fstab实现挂载
- /dev/sdb1 /newdisk 00 简化
- mount -a 立刻生效
- 修改etc/fstab实现挂载
磁盘情况查询 df
-
查询磁盘整体使用情况
- 语法
- df -h
-
- 语法
-
查询指定目录占用的磁盘情况
- 语法
- du -h /目录
- 选项
- -s 指定目录占用大小汇总
- -h 带计量单位
- -a 含有文件
- -c 列出明细的同时,增加汇总值
- --max-depth=1 子目录深度
-
- 语法
磁盘情况-工作实用指令
-
1,统计/opt文件夹的个数
-
ls -l /opt |grep "^-" |wc -l
- "^-" 正则表达式 只要以 - 开头的
- wc 统计数据
-
-
2,统计opt文件夹下的目录的个数
-
ls -l /opt |grep "^d" |wc -l
-
d 只要以 d 开头的
-
-
3,统计opt文件夹下文件的个数,包含子文件夹里的
-
ls -lR /opt |grep "^-" |wc -l
-
R 如果是目录,则递归
-
-
4,统计opt文件夹下目录的个数,包含子文件夹里的
-
ls -lR /opt |grep "^d" |wc -l
-
-
5,以树状显示目录结构
-
如果没有tree ,则使用yum install tree 安装
-
网络管理
- 配置网络
ifconfig
-
查看虚拟网络编辑器和修改IP地址
- ipconfig
- 查看windows环境下的vmnet8的网络设置
- ifconfig
- 查看windows环境下的vmnet8的网络设置
- ipconfig
-
ping 指令
- ping 目的主机
- ping 192.168.169.129
- 测试当前服务器是否可以连接目的主机
- ctrl + c
- 终止
- ping 目的主机
-
ip设置
-
第一种方式:
- 自动获取
- 登录时自动获取ip
- 每次自动获取的ip可能不一样
-
第二种方式:
- 指定ip
- 直接修改配置文件指定ip ,并可以连接到外网
- vi /etc/sysconfig/network-scripts/ifcfg-ens33
- 将ip地址配置为静态的
- ONBOOT=yes
BOOTPROTO=staticip地址
IPADDR=192.168.200.130网关
GATEWAY=192.200.169.2域名解析器
DNS1=192.168.200.2
- ONBOOT=yes
- 将ip地址配置为静态的
- 重启网络服务或者重启系统生效
- service network restart
- reboot
- 指定ip
-
主机和hosts映射 hostname
-
设置主机名
-
方便记忆
- 查看主机名
- hostname
- 查看主机名
-
修改主机名
- 修改文件在etc/hostname 指定
- 修改后,重启立即成效
- [root@java01 ~]# vim etc/hostname
[root@java01 ~]# vim /etc/hostname
[root@java01 ~]# hostname
- [root@java01 ~]# vim etc/hostname
-
-
设置hosts映射
-
windows中
- C:\Windows\System32\drivers\etc\hosts 文件指定即可
- 主机名 gangwan-zhang
-
linux中
-
在/etc/hosts 文件指定
-
[root@java ~]# vim /etc/hosts
[root@java ~]# ping gangwan-zhang
-
-
-
-
hosts
- 文本文件,记录ip和hostname的映射关系
-
DNS
-
DNS Domain Name System的缩写 域名系统
-
互联网上作为域名和ip地址相互映射的一个分布式数据库
-
ipcofig/displaydns //显示dns域名解析缓存
-
ipconfig/flushdns //手动清理dns缓存
-
进程管理 (重要)
- 在linux中,每一个执行的程序都称为一个进程,每一个进程都分配一个id号(pid,进程号)
- 每一个进程都可能以两种方式存在,前台和后台
- 前台
- 用户目前的屏幕上可以进行操作的
- 后台
- 后台在操作
- 前台
- 一般系统的服务都是以后台进程的方式存在的,而且都会常驻在系统中,直到关机才结束
显示系统执行的进程 ps
-
ps 命令用来查看目前系统中的进程
-
选项
- -a 显示当前终端的所有进程信息
- -u 以用户的格式显示进程信息
- -x 显示后台进程运行的参数
-
ps 显示的信息选项
- PID 进程识别号
- TTY 终端机号
- TIME 此进程所消耗的CPU时间
- CMD 正在执行的命令或进程名
-
演示
- ps -aux | more
-
演示
-
以全格式显示当前所有的进程 ,查看sshd 的父进程 PPID 父进程的id
-
-e 显示所有的进程
-
-f 全格式
-
ps -ef | grep sshd
-
-
终止进程 kill 和 killall
- 终止进程
- kill 选项 进程号
- killall 进程名称 所有的子进程同时被杀死 ( 支持通配符)
- 选项
- -9 强制进程立即停止
- 重启服务
- /bin/systemctl start 服务
- /bin/systemctl start sshd.service
- /bin/systemctl start 服务
查看进程树 pstree
- pstree 选项
- 选项
- -p 显示进程的PID
- -u 显示进程的所属用户
- 演示
- pstree -pu
动态监控进程 top
-
top 指令
- 与ps相似,显示正在执行的进程
- top在执行一段时间可以更新正在运行的进程
-
语法
- top 选项
-
选项
-
-d 秒数 每个秒数更新进程 默认3秒
-
-i 使top不显示任何闲置或者僵死的进程
-
-p 通过指定监控进程ID来仅仅监控某个进程的状态
-
-
交互操作说明
- p 以cpu使用率排名 默认是此项
- M 以内存的使用率排名
- N 以pid排序
- q 退出top
-
演示
- 监控用户的进程
- top 回车
- u 用户名
- 终止指定的进程
- top
- k 进程id号
- 监控用户的进程
监控网络状态 netstat
-
查看系统网络请情况netstat
-
语法
- netstat 选项
-
选项
-
-an 按一定的顺序排列输出
-
-p 显示哪个进程在调用
-
-
演示
-
查看服务为sshd的服务的信息
-
netstat -anp |grep sshd
-
-
服务管理
-
服务本质上就是进程
- 运行在后台
- 监听某个端口
- 又称为守护进程
-
指令
- service 服务名称 |stop |restart | reload |status
-
查看服务位置
- /etc/init.d
-
查看所有的系统服务
- setup
- 系统服务
- ' * ' 随着linux自动启动
服务的运行级别 systectl
- 常用的3和5
- 3 : 多用户状态有网络服务 常用
- 5 : 图形界面 常用
- 开机的流程
- 开机
- BIOS
- /boot
- system进程1
- 运行级别
- 运行级别对应的服务
chkconfig
- 给服务的各个运行级别设置自启动/关闭
- 语法
- 查看服务
- chkconfig --list
- 过滤某个服务
- chkconfig --list [|grep xxx]
- chkconfig --list
- chkconfig 服务名 --list 也可以
- chkconfig --level 5 服务名 on/off
- 查看服务
- 注意:
- chkconfig重新设置服务自启动或关闭,需要重启reboot才生效
systemctl (重要)
-
语法
- systemctl [start | stop |restart | status] 服务名
-
位置
- /usr/lib/systemd/system
-
查看当前服务的名称
-
ls -l /usr/lib/systemd/system |grep fire
- -rw-r--r--. 1 root root 657 10月 1 2020 firewalld.service
-
-
systemctl设置服务的自启动状态
- 查看服务的启动状态
- systemctl list-unit-files
- 查看防火墙
- systemctl list-unit-files | grep firewalld
- firewalld.service enabled
- 查看防火墙
- systemctl list-unit-files
- 设置服务开机启动
- systemctl enable 服务名
- 关闭服务开机启动
- systemctl disable 服务名
- 查询某个服务是否是自启动的
- systemctl is-enabled 服务名
- 查看sshd是否自启动
- [root@java ~]# systemctl is-enabled sshd
enabled
- [root@java ~]# systemctl is-enabled sshd
- 查看sshd是否自启动
- systemctl is-enabled 服务名
- 查看服务的启动状态
-
注意
- 1,关闭或者启动防火墙,立即生效
- 2,systemctl [start | stop |restart | status] 服务名
- 这种方式只是临时生效,重启系统后,还是回归到之前的设置
- 3,如果希望设置某个服务永久生效,使用systemctl [enable | disable] 服务名
打开或关闭指定端口 firewall
-
firewall 指令
- 打开端口
- firewall-cmd --permanent --add-port=端口号/协议
- 如: 8080/tcp
- firewall-cmd --permanent --add-port=端口号/协议
- 关闭端口
- firewall-cmd --permanent --remove-port=端口号/协议
- 重新加载才能生效
- firewall-cmd --reload
- 查询端口是否开放
- firewall-cmd --query-port=端口/协议
- 查询111端口
- [root@java ~]# firewall-cmd --query-port=111/tcp
no
- [root@java ~]# firewall-cmd --query-port=111/tcp
- 查询111端口
- firewall-cmd --query-port=端口/协议
- 打开端口
-
#更新防火墙 [root@java webmin]# firewall-cmd --reload success #查看端口号 [root@java webmin]# firewall-cmd --zone=public --list-ports 8080/tcp 10001/tcp
软件包管理
- rpm 和 yum
rpm包的管理 rpm
- 简介
- rpm用于互联网下载包的打包和安装工具,它包含在某些linux分发版中
- 生成具有.RPM扩展名的文件
- 是RedHat Package Manager(RedHat软件包的管理工具)的缩写
rpm包名格式
-
firefox-68.10.0-1.el7.centos.x86_64
- 名称 firefox
- 版本号 68.10.0-1
- 操作系统 el7.centos.x86_64
-
rpm包的简单查询指令
- 查询已安装的rpm列表
- rpm -qa | grep xx
- 查看firefox
- [root@java ~]# rpm -qa | grep firefox
firefox-68.10.0-1.el7.centos.x86_64
- rpm -qa | grep xx
- 查询已安装的rpm列表
-
其他查询指令
-
rpm -qa
- 查询所安装的所有rpm包
-
rpm -q 软件包名
- 查询软件是否安装
-
rpm -qi 软件包名
- 查询软件信息
-
rpm -qf 文件全路径名
-
查询文件所属的软件包
-
rpm -qf /etc/passwd
-
-
-
-
安装rpm包
- 语法
- rpm -ivh rpm包的全路径名称
- i 安装 install
- v 提示 verbose
- h 进度条 hash
- 演示
- 演示安装firefox
- rpm -ivh /opt/firefox-68.10.0-1.el7.centos.x86_64
- 演示安装firefox
- 语法
-
卸载rpm包
-
语法
- rpm -e rpm包的名称
-
注意
- 如果其他软件包依赖与要删除的软件包,则提示错误信息
- 添加 --nodeps
- rpm -e --nodeps firefox
-
演示
- 演示卸载firefox
- rpm -e firefox
- 演示卸载firefox
-
yum包的管理 yum
-
简介
-
yum是一个shell前端软件包的管理器 基于rpm包管理
-
能够从指定的服务器自动下载rpm包并且安装
-
可以自动处理rpm包的依赖性关系,并且一次性安装所有依赖的软件包
-
-
yum简单的查询指令
-
查询yum服务器是否有需要安装的软件
-
yum list | grep xx软件列表
-
-
-
安装指定的yum包
- 下载安装
- yum install xx
- 下载安装
-
扩展
-
检测内核版本
- yum info kernel -q
-
查看当前内核的版本
- uname -a
-
升级内核
- yum update kernel
-
查看已经安装的内核
- yum list kernel -q
-
三, javaEE定制篇
如果需要进行javaEE开发,需要安装如下的软件
安装JDK
-
安装步骤
-
1 , mkdir /opt/jdk
-
2 , 通过xftp6 上传到/opt/jdk下
-
3 , cd /opt/jdk
-
4 , 解压 tar -zxvf jdk1.8.0_33
-
5 , mkdir /usr/local/java
-
6 , mv /opt/jdk/jdk1.8.0_333 /usr/local/java
-
7 , 配置环境变量的配置文件
- vim /etc/profile
-
8 , export JAVA_HOME=/usr/local/java/jdk1.8.0_33
-
9 , export PATH=$JAVA_HOME/bin:$PATH
- $PATH 表示追加原来的path
-
10 , 让文件生效
- source /etc/profile
-
测试
-
编写hello.java
- 输出hello.world
-
-
安装tomcat
-
步骤
- 1 , mkdir /opt/tomcat
- 2 , 通过xftp6 上传到/opt/tomcat下
- 3 , cd /opt/tomcat
- 4 , 解压 tar -zxvf tomcat9.0.64
- 5 , mkdir /usr/local/tomcat
- 6 , mv /opt/jdk/tomcat9.0.64 /usr/local/tomcat
- 2,进入解压目录/bin,启动tomcat ./startup.sh
- 3,开放端口8080
- firewall-cmd --permanent --add-port=8080/tcp
测试
- 在linux下访问http://linuxip:8080
安装idea
-
下载idea
-
步骤
- 1 , mkdir /opt/idea
- 2 , 通过xftp6 上传到/opt/idea下
- 3 , cd /opt/idea
- 4 , 解压 tar -zxvf idea
- 2,进入解压目录/bin,启动idea-IU-221.5921.22 ./idea.sh
测试
- hello.java
安装mysql
- 下载mysql
- wget http://dev.mysql.com/get/mysql-8.0.29-1.el7.x86_64.rpm-bundle.tar
- mysql-8.0.29-1.el7.x86_64.rpm-bundle.tar
注意:centos7会自带的类,mysql数据库是mariadb ,会和mysql冲突,要先删除
-
步骤
-
1 , mkdir /opt/mysql
-
2 , 通过xftp6 上传到/opt/mysql下
- mysql-8.0.29-1.el7.x86_64.rpm-bundle.tar
-
3 , cd /opt/mysql
-
4 , 解压tar -xvf mysql-8.0.29-1.el7.x86_64.rpm-bundle.tar
-
5 , 运行rpm -qa | grep mariadb 查询mariadb相关包
- 卸载
- rpm -e --nodeps mariadb-libs
- rpm -e --nodeps marisa
- 卸载
-
6 , 正式安装
-
rpm -ivh mysql-community-common-8.0.29-1.el7.x86_64.rpm
-
rpm -ivh mysql-community-client-plugins-8.0.29-1.el7.x86_64.rpm
-
rpm -ivh mysql-community-libs-8.0.29-1.el7.x86_64.rpm
-
rpm -ivh mysql-community-client-8.0.29-1.el7.x86_64.rpm
-
rpm -ivh mysql-community-icu-data-files-8.0.29-1.el7.x86_64.rpm
-
rpm -ivh mysql-community-server-8.0.29-1.el7.x86_64.rpm
-
-
7 , 运行systemctl start mysqld.service 启动musql
-
8 , 设置root用户密码
- mysql会自动设置随机密码
- 查看随机密码
- grep 'password' /var/log/mysqld.log
- PnAphslVy9.W 这是密码
- grep 'password' /var/log/mysqld.log
- 查看随机密码
- mysql会自动设置随机密码
-
9 , 运行mysql -u root -p
- 用root登录
-
10 , 设置root密码
-
查看密码策略
-
SHOW VARIABLES LIKE 'validate_password%';
-
-
生产环境设置复杂的密码
- alter user user() identified by 'Zzhang123@'
- set global validate_password.policy=0; 提示密码策略 强度系统默认是1
- set global validate_password.lenth=4; 长度
-
-
11 , alter user 'root'@'localhost' identified by 'proot';
-
12 , 运行flush privileges; 使密码立即生效
测试
-
show datebases;
-
数据库备份 mysqldump
一、mysqldump 简介
mysqldump 是 MySQL 自带的逻辑备份工具。
它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。
二、备份命令
2.1 命令格式
mysqldump [选项] 数据库名 [表名] > 脚本名
或
mysqldump [选项] --数据库名 [选项 表名] > 脚本名
或
mysqldump [选项] --all-databases [选项] > 脚本名
2.2 选项说明
| 参数名 | 缩写 | 含义 |
|---|---|---|
| --host | -h | 服务器IP地址 |
| --port | -P | 服务器端口号 |
| --user | -u | MySQL 用户名 |
| --pasword | -p | MySQL 密码 |
| --databases | 指定要备份的数据库 | |
| --all-databases | 备份mysql服务器上的所有数据库 | |
| --compact | 压缩模式,产生更少的输出 | |
| --comments | 添加注释信息 | |
| --complete-insert | 输出完成的插入语句 | |
| --lock-tables | 备份前,锁定所有数据库表 | |
| --no-create-db/--no-create-info | 禁止生成创建数据库语句 | |
| --force | 当出现错误时仍然继续备份操作 | |
| --default-character-set | 指定默认字符集 | |
| --add-locks | 备份数据库表时锁定数据库表 |
2.3 实例
备份所有数据库:
mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db
备份指定数据库:
mysqldump -uroot -p test > /backup/mysqldump/test.db
备份指定数据库指定表(多个表以空格间隔)
mysqldump -uroot -p mysql db event > /backup/mysqldump/2table.db
备份指定数据库排除某些表
mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db
三、还原命令
3.1 系统行命令
mysqladmin -uroot -p create db_name
mysql -uroot -p db_name < /backup/mysqldump/db_name.db
注:在导入备份数据库前,db_name如果没有,是需要创建的; 而且与db_name.db中数据库名是一样的才可以导入。
3.2 soure 方法
mysql > use db_name
mysql > source /backup/mysqldump/db_name.db
四, 大数据定制篇
-
学习shell编程
- 1,进行服务器集群管理的时候,需要shell程序
- 2,编写shell程序,维护服务器
-
shell
- shell是一个命令解释器
- 为用户提供了向linux内核发送请求以便运行程序的界面系统级程序
- 用户可以用shell来启动,挂起,停止甚至是编写一些程序
-
shell脚本的执行方式
-
脚本格式要求
- 脚本以#!/bin/bash开头
- 脚本有执行权限
-
编写第一个shell脚本
- 需求
- 创建一个shell脚本,输出hello world
-
演示
- 需求
-
脚本的执行方式
-
方式1
- 输入脚本的绝对路径或相对路径
- 注意; 首先要赋予hello.sh 脚本+权限 再执行脚本
- ./hello.sh
- 输入脚本的绝对路径或相对路径
-
方式2
-
sh + 脚本
-
注意: 不用赋予权限, 直接执行即可
sh hello.sh
-
-
-
shell变量 set
-
linux Shell 中的变量
-
系统变量
- $HOME $PWD $SHELL 等等
- 比如: echo
- $HOME $PWD $SHELL 等等
-
用户自定义变量
-
语法
-
定义变量
-
变量名=变量值
注意:变量值可以是路径 BACKUP=/data/backup/db
-
-
撤销变量
- unset 变量
-
声明静态变量
-
readonly便令
注意: 不能unset
-
-
-
-
-
显示当前shell中所有变量
- set
-
演示
-
定义变量
-
撤销变量
-
声明静态的变量B=2,不能unset
-
将变量提升为全局环境变量,可供其他shell程序使用
-
-
shell变量的定义规则
-
字母 数字 下划线 组成
- 不能以数字开头
-
变量等号两边不能有空格
-
变量名称一般为大写
-
-
将命令的返回值赋值给变量
-
A='date' 反引号
- 运行里面的命令,并把结果返回给变量C
-
A=$(date)
-
等价于反引号
-
-
设置环境变量 export
- 语法
- 将shell变量输出为环境变量
- export 变量名=变量值
- 让修改后的配置信息立即生效
- source 配置文件
- 如 ; source /etc/profile
- source 配置文件
- 查询环境变量的值
- echo $变量名
- 将shell变量输出为环境变量
注意: 在输出TOMCAT_HOME 环境变量前,需要让其生效
source /etc/profile
-
shell脚本的注释
-
单行注释
-
多行注释
-
:<<!
内容
!
-
-
位置参数变量 $n
-
当执行脚本时,如果希望获取命令行的参数信息,可以使用位置参数变量
-
语法
- $n
- n 为数字
- $0 代表命令本身
- $1-$9 代表的是第一个到第九个参数
- $
- $*
- 代表的是命令行所有的参数
- $@
- 代表的是命令行所有的参数
- 把每个参数区分对待
- $#
- 代表的是所有变量的个数
- $n
-
演示
预定义变量 $?
-
shell设计者事先定义好的变量,可以直接在shell脚本使用
-
语法
-
当前进程的进程号(PID)
- $$ -
-
后台运行的最后一个进程的进程号(PID)
- $!
-
最后一次执行的命令返回状态
-
$?
注意:如果值为0 ,表示命令正常执行
非0,命令执行不正确
-
-
-
演示
echo ========= echo 当前执行的进程PID=$$ #以后台的方式运行脚本,并获取进程号 /root/shcode/var.sh $ echo 最后一个后台方式进行的pid=$! echo 执行的结果?=$? 结果 ========= 当前执行的进程PID=11026 A=100 A=100 A= B=200 C=2022年 07月 08日 星期五 19:22:16 CST 最后一个后台方式进行的pid= 执行的结果?=0
运算符 $[]
- 语法
- $(运算式) 或者$[运算式] 或者expr m + n expression的简写
- 注意: expr 运算符要有空格
- 如: expr m - n
- 如果希望将exprssion的结果赋予变量 ,需要 '' 单引号
- 如: expr m - n
- 注意: expr 运算符要有空格
- expr \ * / %
- 乘 除 取余
- $(运算式) 或者$[运算式] 或者expr m + n expression的简写
条件判断 if
-
语法
- [ condition ] 注意: condition 前后都有空格 condition里面的是判断语句
- 非空返回true
- 空值返回flase
- 可用$?验证
- [ condition ] 注意: condition 前后都有空格 condition里面的是判断语句
-
演示
-
[ condition ] && echo ok || echo notok
- && 条件满足,执行后面的语句
# if判断语句 if [ 23 -ge 22 ] then echo 大于 fi #then 是if正确后的执行语句 #fi 是判断语句的结束
-
-
判断语句
- 字符串比较
- =
- 整数的比较 l=less e=equal t=than g=greater
- -lt 小于
- -le 小于等于
- -eq 等于
- -gt 大于
- -ge 大于等于
- -ne 不等于
- 按照文本权限进行判断
- -r 读的权限
- -w 写的权限
- -x 执行的权限
- 按照文本类型进行判断
- -f 文件存在并且是一个常规文件
- -e 文件存在
- -d 文件存在并且是一个目录
- 字符串比较
-
案例
-
1,ok 是否等于ok
[ condition ] ok=ok
-
2,23是否大于等于22
-ge
-
/home/shcode/condition.txt目录中的文件是否存在
-f
#!/bin/bash if [ "ok" = "ok" ] then echo equal fi if [ 23 -ge 22 ] then echo 大于 fi if [ -f /home/shcode/aaa.txt ] then echo 文件存在 fi
-
流程控制 if cash
-
if判断
-
语法
if [ 条件判断式 ] then 代码 fi -
或者 多分支
if [ 条件判断式 ] then elif [ 条件判断式 ] then fi
注意 [ ] 里面必须有空格
-
-
cash语句
-
语法
-
case $变量名 in 值1)
如果变量的值等于值1 ,则执行程序1
;;
值2)
...省略其他分支...
*)
如果都不是以上的值,执行次程序
;;
esac
#!/bin/bash case $1 in "1") echo "周一" ;; "2") echo "周二" ;; *) echo "other" ;; esac -
-
流程控制 for 循环
-
for循环
-
语法1
-
for 变量 in 值1 值2 值3
do
程序
done
-
演示
-
打印命令行输入的参数
#!/bin/bash 第一种方式 for i in "$*" do echo "num is $i" done echo ================== for a in "$@" do echo "num is $i" done $* 将参数当做整体对待 $@ 将参数分开对待
-
-
-
语法2
-
for((初始值;循环控制条件;变量变化))
do
程序
done
-
演示
-
从1加到100的值输出显示
#!/bin/bash #定义一个变量 SUM=0 for((i=1;i<=100;i++)) do #写上业务处理 SUM=$[$SUM+i] done echo 综合SUM=$SUM
-
-
-
流程控制 while 循环
-
while循环
-
语法
-
while [ 条件判断式]
do
程勋
done
-
-
演示
- 从命令行输入一个数n,统计从1+...+n的值是多少?
#!/bin/bash SUM=0 i=0 while [ $i -le $1 ] do SUM=$[$SUM+$i] i=$[$i+1] done echo "执行结果=$SUM"
-
读取控制台的输入 read
-
语法
- read 选项 参数
-
选项
- -p 指定读取值的提示符
- -t 指定读取值时等待的时间(秒),如果没有再指定的时间内输入,则不再等待
-
参数
- 变量 指定读取值的变量名
-
演示
-
读取控制台输入的NUM1
-
读取控制台输入的一个NUM2的值,在10秒内等待
#!/bin/bash read -p "请输入一个数NUM1=" NUM1 echo "你输入的NUM1=$NUM1" #!/bin/bash read -t 10 -p "请输入NUM2=" NUM2 echo "你输入的NUM2=#NUM2"
-
函数 basename 和 dirname
-
shell编程同样有
- 系统函数
- 自定义函数
-
系统函数
-
第一个 basename
-
返回完整的路径最后的/的部分,常用语获取文件名
-
语法
- basename [pathname] [suffix]
- basename [string] [suffix]
- basename命令会删掉所有的前缀报货最后的一个"/" 然后将字符串显示出来
-
演示
请返回/home/shcode/read.sh 的 文件部分
[root@java shcode]# basename /home/shcode/read.sh read.sh [root@java shcode]# basename /home/shcode/read.sh .sh read
-
-
第二个 dirname
-
返回完整路径最后/的前面的部分 常用语返回路径部分
-
语法
- dirname 文件绝对路径
-
演示
请返回/home/shcode/read.sh 的 路径部分
[root@java shcode]# dirname /home/shcode/read.sh /home/shcode
-
-
自定义函数
-
语法
-
function function名(0){
Action;
return int;
}
-
-
调用直接写函数名
funname [值]
-
演示
计算输入两个参数的和 getSun
#!/bin/bash #定义函数 getSum function getSum(){ SUM=$[$n1+$n2] echo "和是=$SUM" } #输入两个参数 read -p "请输入一个数n1=" n1 read -p "请输入一个数n2=" n2 #调用 getSum $n1 $n2
Shell 编程的综合案例
-
需求分析
- 1,每天凌晨2:30 备份数据库 zgwDB 到/databack/db
- 2,备份开始和备份结束能够给出相应的提示信息
- 3,备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式
- 4,备份的同时,检查是否有10天前的备份数据库文件,如果有就删除
-
演示
放到/usr/bin 目录下 vim mysql_db_backup.sh
#!/bin/bash #备份目录定下来 BACKUP=/data/backup/db #获取当前的时间 DATETIME=$(date +%Y-%M-%d_%H%M%S) #数据库的地址 HOST=localhost #数据库的用户名 DB_USER=root #数据库的密码 DB_PASSWORD=proot #备份的数据库 DATABASE=hspedu #给出提示信息 echo "开始备份数据库${DATABASE}" #创建备份目录,如果不存在则创建 [ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" #备份数据库使用自带的mysaldump mysqldump -u${DB_USER} -P${DB_PASSWORD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}.sql.gz #将文件处理为tar.gz cd ${BACKUP} tar -zcvf ${DATETIME}.tar.gz #删除对应的备份目录 rm -rf ${BACKUP}/${DATETIME} #删除10天前的备份文件 find ${BACKUP} -atime 10 -name "*.tar.gz" -exec rm -rf {} \; echo "备份数据库${DATABASE}成功"将脚本当到crond中
[root@java shcode]# crontab -e #进入到vim编辑器了 30 2 * * * /usr/sbin/mysql_db_backup.sh
浙公网安备 33010602011771号