Linux
一 、基础篇
1.1 Linux 入门
Linux和Unix的联系:
1.2 vm和Linux安装
安装VMware 破解版:
在VMware上安装Linux
分区:
- /:根分区
- swap分区
- /boot:boot分区
网络链接的三种模式
1.3 虚拟机的操作
虚拟机克隆:
- (先关闭虚拟机)复制粘贴虚拟机文件夹
虚拟机快照
- 避免操作失误造成系统异常,还原到正常状态。
虚拟机迁移和删除
- 直接copy
- 直接移除,没有删除文件内容
安装VMtools
- 更好管理vm虚拟机
- windows和centos共享文件夹
1.4 Linux目录结构
- 根目录:/
- Linux的树状目录
- 一切皆文件
二、实际操作篇
2.1 远程登陆(XShell、 XFtp)
Linux应用场景
Linux服务器是共享的
通过Linux进行项目的管理或开发
登录客户:
- XShell:安全终端模拟软件,通过XShell控制Linux里面文件,使用命令进行操作文件
- XFtp:上传下载,在Linux和Windows之间进行传输文件
查看IP地址:
- 指令:ifconfig
2.2 vi 和vim 编译器
vim 编译器
语法:
vim 指定的文件 :打开指定的文件
插入模式:
- i :输入
- I :插入行首
- a:插入光标后一个
- A:插入行末
- o:向下新开一行
- O:向上新开一行
命令模式
- 移动光标
- h:左移
- l:右移
- k:上
- j:下
- wq:先按ESC,再输入wq,保存并退出
- q!:强制退出不保存
- q:退出
模式切换
- 按ESC:把当前的模式改成另外的一个模式.
快捷键
- 拷贝(复制):yy,5yy:拷贝当前行向下的5行,并粘贴(输入p)
- 删除:dd,5dd:删除当前行向下的5行
- 查找:先按Esc切换到命令模式下,再输入’ / ‘, 命令行下 / 关键字,回车进行查找,输入n(next)查找下一个,要查找其他的内容,再次输入 ‘/’,清空当前的内容
- 设置文件行数 :(命令模式输入):set nu ,(取消行号)::set nonu
- 光标跳至最后一行:(一般模式)G
- 光标跳至首行:(一般模式)gg
- 撤销动作:(一般模式)u
- 光标移动到20行:(一般模式下)20 shift + g
2.3 开机、重启和用户登录注销
关机、重启命令
- shutdown -h now :立即关机
- shutdown -h 1 :1分钟后关机
- shutdown -r now :立即重启计算机
- halt:关机
- reboot:重启计算机
- sync:把内存的数据同步到磁盘
==关机 / 重启之前运行sync==
用户登录、注销
用户管理
- Linux是多用户多任务的OS
添加用户
基本语法
1 | useradd 用户名 |
默认该用户目录在/home/用户名
指定新用户的位置:
1 | useradd -d 指定位置 用户名 |
指定 / 修改密码
1 | passwd 用户名 |
删除用户
1 | userdel 用户名 |
查看用户信息
1 | id root :查看root的信息 |
切换用户
切换管理员身份:su -用户名
1 | su root 切换到管理员 |
- 高级用户到低级用户,不要输入密码
- 低级 ==》 高级,需输入密码
查看当前用户
1 | who am I |
- 显示第一登录的用户
用户组
对有共性 / 权限的多个用户进行统一的管理
新增组
1 | groupadd 组名 |
删除组
1 | groupdel 组名 |
增加用户时直接加上组
1 | useradd -g 用户组 用户名 |
添加zwj,到wudang组中
1 | useradd -g wudang zwj |
修改用户的组
1 | usermod -g 用户组 用户名 |
- 把用户修改到其他的用户组下
2.4 实际指令
2.4.1 运行级别
- 0:关机
- 1:单用户(可以找回密码)
- 2:多用户没有网络服务
- 3:多用户有网络服务 {工作用得最多的}
- 4:系统未使用保留给用户
- 5:图像界面
- 6:系统重启
init[0,1,2,3,4,5,6]
查看当前的运行级别:
1 | systemctl get-default |
查看指定目标的运行级别
1 | systemctl set-default TARGET.target |
2.4.2 找回root密码
[跟着文档来操作](E:\Linux\take notes\linux找回root密码.pdf)
2.4.3 帮组指令
man:获得帮助信息
1
man[命令或配置文件]
help:获得shell内置命令的帮助信息
1
help
2.4.4 文件目录指令
==查看另一个文档==
- pwd:显示当前所在的目录
2.5 用户管理、组管理和权限管理
2.5.1 文件 / 目录的所有者
创建文件的用户,就是该文件的所有者
查看文件的所有者
1 | ls -ahl |
修改文件的所有者
1 | chown 用户名 文件名 |
- 修改的用户一定要存在
所在组
查看文件 / 目录所在组
1 | ls -ahl |
- 每一个用户属于一个组
1 | groupadd 组名 |
案例:
- 创建一个组master
- 创建一个用户for 放入到master组中
1 | groupadd master |
修改文件所在组
1 | chgrp 组名 文件名 |
其他组
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
改变用户的组
1 | usermod -g 新组名 用户名 |
2.5.2 rwx权限
- d rwx rwx r-x :d 代表文件夹 – 代表文件
- rwx rwx r-x :r 可读 w 可写 x 可执行
- 第一组指文件的==所有者(1 ~ 3 位)的权限==,第二组代表文==所有组的权限(4 ~ 6)==,第三组代表==其他用户权限(7 ~ 9)==
rwx :目录
rwx:文件
数字表示权限:r =4 , w = 2 , x = 1
修改权限- chmod
1. 字母法 + 、-、= 三种赋予权限
u :所有者 g:所有组 o:其他人,a:所有人(u、g、a的总和)
1 | chmod u+r/w/x 指定的文件 添加权限 |
2. 数字加法法
- 0 :- ;
- 1:x (可执行) ;
- 2:w (可写);
- 4:r (可读);
- chmod 000 指定的文件 权限没有
- chmod 666 指定的文件 所有的都是 rw 4+2=6
1 | chmod u=rwx,g=rx,o=rx 文件 |
修改文件所有者 - chown
1 | chown newowner 文件/目录 改变所有者 |
修改文件/目录所在组 - chgrp
1 | chgrp newowner 文件/目录 |
实践案例
用户:
- police , bandit :分组
- jack、jerry:警察
- xh, xq:土匪
创建组
1
2
3groupadd police
groupadd brandit创建用户
1
2
3
4
5
6
7useradd -g police jack
useradd -g police jerry
useradd -g bandit xh
useradd -g bandit xqjack 创建一个文件,自己可以读r写w,本组人可以读r,其它组没人任何权限
1
2
3
4
5jack登录
touch jack.txt
chmod 640 jack.txtjack 修改该文件,让其它组人可以读,本组人可以读写
1
chmod o=r,g=r jack.txt
xh投靠警察,看看是否可以读写
1
usermod -g police xh
2.6 定时任务调度
2.6.1 crontab 定时任务的设置
- 任务调度:系统在某个时间执行的特定的命令或程序
- 完成重复的调度
1 | crontab [选项] |
选项:
- crontab -l :列出当前所有的任务
- contab -r:终止任务
- service crond restart :重启任务调度
每一分钟执行一次
1 | */1 * * * * ls -l /etc/ > /tmp/to.txt |
五个占位符的说明:
特殊符号意思:
特定时间执行任务
案例:
每隔一分钟,将当前的日期信息,追加到/tmp/mydate 文件中
1
*/1 * * * * date >> /tmp/mydate
每隔一分钟,将当前的日期和日历追加到/home/mycal 文件中 (使用脚本来执行)
1
2
3
4
5
6(1) 编写脚本文件
vim /home/my.sh 代码:date >> /home/mycal 、cal >> /home/mycal
(2) 给my.sh增加执行权限,
chmod u+x my.sh
(3) 设置定时
crontab -e 添加内容:*/1 * * * * /home/my.sh每天凌晨 2:00 将mysql 数据库testdb ,备份到文件中。
1
2
3
4(1)设置定时
crontab -e
添加代码内容
0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
2.6.2 at 定时任务
一次性定时计划任务,执行完就不再执行
使用at命令的时候,一定要保证atd进程的启动
查看进程atd是否正在运行
1
ps -ef | grep atd
at 命令格式
1 | at [选项] [时间] |
选项
at 指定时间定义
案例:
2天后的下午5点执行/bin/ls/home
atq命令来查看系统中没有执行的工作任务
明天17点钟,输出时间到指定文件内 比如/root/date100.log
2分钟后,输出时间到指定文件内 比如/root/date200.log
2.7 磁盘分区、挂载
2.7.1 Linux分区
- 只有一个根目录,独立且唯一的文件结构
Linux 的硬盘主要有
IDE硬盘
标识符:hdx~
- hd:分区所在设备类型
- x:盘号
SCSI硬盘
标识符:sdx~
- sd:分区所在的设备类型
查看设备挂载情况
1 | lsblk |
Linux 添加硬盘
虚拟机添加硬盘
分区
1
fdisk /dev/sdb
开始对/sdb分区:依次输入以下
m:显示命令列表
p:显示磁盘分区 同 fdisk -ln:新增分区
d:删除分区w:写入并退出
说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
格式化
1
mkfs -t ext4 /dev/sdb1
挂载
1
2
3
4
5
6mount 设备名称 挂载目录
mount /dev/sdb /newdisk
umount 设备名称/挂载目录
umount /dev/sdb1
umount /nwediskumount :卸载挂载
设置自动挂载
永久挂载:通过修改/etc/fstab实现挂载
vim /etc/fstab
添加完成后执行mount -a即刻生效
磁盘查询情况
1 | df -h |
查询指定目录的占用情况
- 不指定目录,默认为当前目录
1 | du -h |
- -s 指定目录占用大小汇总
- -h 带计量单位
- -a 含文件
- –max-depth = 1 子目录深度
- -c 列出明细的同时,增加汇总值
查看opt目录深度为1
1 | du -hac --max-depth=1 /opt |
实用指令
2.8 进程管理
- 执行的程序称为一个进程,每一个都分配有一个ID号(pid,进程号)
- 进程的两种存在形式:前台(后台运行,表面看不到)与后台(占用屏幕)
2.8.1 ps指令
ps 用来查看系统中执行的程序
1
2ps
ps -aux查看指定的进行。(grep 过滤)
1
ps -aux | grep sshd
2.8.2 子、父进程
全格式显示当前所有的进程,查看进程的父进程
1 | ps -ef :全格式显示当前所有的进程 |
- -e:所有等进行。-f :全格式
2.8.3 终止进程 kill 、killall
基本语法
1 | kill [选项] 进程号 :通过进程号杀死进程 |
选项:
-9:强制杀死进程
杀死sshd之后,再次重启sshd服务
1 | /bin/systemctl start sshd.service |
终止多个gedit
1 | killall gedit |
2.8.4 查看进程树
1 | pstree [选项] |
- -p:显示进程 的PID
- -u:显示进程的所属用户
2.8.5 服务管理
- 服务 == 进程,运行在后台,监听端口,等待其他程序的请求(守护进程)
service管理指令
1 | service 服务名 [start | stop |restrat |reload |status] |
1 | 关闭端口监听;service network stop |
查看服务名
1 | setup |
服务运行级别
7中运行级别
开机流程
1 | graph LR |
2.8.6 chkcomfig 指令
给服务的运行级别设置自 启动/关闭
查看服务
1 | chkconfig --list [|grep xxx] |
- 需要重启,才会生效
2.8.7 systemctl 管理
服务在 ==/usr/lib/systemd/system==查看
1 | systemctl 服务名 [start | stop |restrat |reload |status] |
systemctl设置服务的自启动状态
- systemctl list-unit-files [ l grep 务名 ] (管看服务开机后动状态, grep 可以进行过话)
- systemctl enable 服务名 (设置服务开机启动)
- systemctl disable 服务名 (关闭服务开机启动)
- systemctl is-enabled 服务名 (查询某个服务是否是自启动的)
2.8.8 f irewall
==打开或关闭指定的端口==
- 打开端口:firewali-cmd –permanent –add-port=端口号/协议
- 关闭端口:firewall-cmd –permanent –remove-port=端口号/协议
- 都需重新载入,才能生效:firewall-cmd –reload
- 查询端口是否开放:firewall-cmd –query-port=端口/协议
2.8.9 动态监控
top 和 ps
- top 执行一段时间会更新正运行的进程
1 | top [选项] |
交互操作
在进入top 下:输入
- 监控指定用户:top 回车,在输入u ,输入用户的名称
- 终止进程:top 回车,在输入k ,在输入PID
- 指定系统状态更新时间
查看网络系统状况 netstat
1 | netstat [选项] |
- -an :按一定顺序排序
- -p :显示哪个进程在调用
1 | netstat -anp | more |
查看sshd 的服务信息
1 | netstat -anp | grep sshd |
检测主机链接命令ping
- 检测远程网络链接是否正常
2.9 RPM 和YUM
- rpm 用于下载包和安装包
2.9.1 rpm查询
简单查询:rpm -qa | grep xx
- rpm -qa 查询安装的rpm软件包
- rpm -qi 软件包名 :查询软件包信息
- rpm -ql 软件包名:查询软件包中的文件
- rpm -qf 文件全路径名 查询文件所属的软件包
2.9.2 rpm 卸载
语句
1 | rpm -e RPM包名称 |
2.9.3 安装 rpm包
1 | rpm -ivh RPM包全路径名称 |
- i = install:安装
- v=verbose :提示
- h=hash :进度条
2.9.4 yum
- Shell 前端软件包管理器,自动下载RPM包,一次性安装所有依赖的软件包
基本指令
yum查询服务器是否需要的软件
1
yum list | grep XXX
安装
1
yum install xxx 下载安装
2.10 网络配置
虚拟机链接网络
查看IP地址指令
Windows下
1
ipconfig
Linux 下
1
ifconfig
IP在同一个网关才可以ping通
1 | ping ip地址 |
Linux网络环境配置
自动获取
- Linux启动后会自动获取IP,但是每次获取的IP可能不一样
指定ip
- 直接修改IP文件来指定IP,并链接到外网
1
vim /etc/sysconfig/network-scriipts/ifcfg-ens33
(1)在里面修改成如下
添加的内容:
#IP
IPADDR=192.168.20.132
#网关
GATEWAY=192.168.20.2
#域名服务器
DNS1=192.168.20.2(2):修改虚拟机的子网网关,要与Linux一致
网关就上面设置的网关
(3) 重启网络服务或者重启系统生效
1 | service network restart 、reboot |
从Linux链接Windows时需要关闭网络防火墙
设置主机名
1 | hostname :查看主机名 |
- 修改文件在 /etc/hostname 指定
- 重启生效
设置hosts映射
windows
linux
- 这样设置之后就可以通过 ping 主机名就可以ping通
解析
- Hosts:文本文件,记录IP和Hostname 的映射关系
- DNS:域名系统
三、2021高级篇
3.1 日志管理
- 检测发生错误的原因,或者被攻击留下的痕迹
3.1.1 常用的日志
保存位置
/var/log/ 该目录就是系统常用的日志文件
红色的为重点掌握
3.1.2 日志管理服务 rsyslogd
CentOS7.6日志服务是rsyslogd,CentOS6.x日志服务是syslogd。rsyslogd功能更强大。rsyslogd的使用、日志文件的格式,和syslogd服务兼容的。原理示意图
查询Linux 中的rsyslogd 服务是否启动
1
ps aux | grep "rsyslog" | grep -v "grep"
grep -v :改变匹配的意义,只选择不匹配的行
查询 rsyslogd 服务的==自启动状态==
1
systemctl list-unit-files | grep rsyslog
配置文件:/etc/rsyslog.conf
编辑文件时的格式:
*.*
存放日志文件- 第一个星表示 日志类型,第二个星表示 日志级别
日志类型
日志级别
日志服务 rsyslog 记录日志文件
- 事件产生的时间
- 产生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
查看日志secure
1 | /var/log/secure |
3.1.4 自定义日志服务
在 /etc/log/的rsyslog.log 编写自己想要的日志服务信息
3.1.5 日志轮替
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除
配置文件参数:
把日志文件写入日志轮替
- 第一种方法是直接在/etc/logrotate.conf 配置文件中写入该日志的轮替策略
- 【==推荐==】第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。
日志轮替机制原理
- 依赖系统定时任务,/etc/cron.daily 目录下的logrotate可执行文件
3.1.6 查看内存日志
journalctl可以查看内存日志
journalctl :查看全部
journalctl -n 3 :查看最新3条
journalctl –since 19:00 –until 19:10:10 :查看起始时间到结束时间的日志可加日期
journalctl -p err :报错日志
journalctl -o verbose :日志详细内容
journalctl _PID=1245 _COMM=sshd :查看包含这些参数的日志(在详细日志查看)
~~~
journalctl l grep sshd1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
注意: journalctl查看的是内存日志,重启清空
## 3.2 定制Linux
<img src="http://picgo.kongshier.top/2767/image-20220720193756789.png" alt="image-20220720193756789" style="zoom:80%;" />
在Linux的启动流程中,加载内核文件时关键文件:
- kernel文件:vmlinuz-3.10.0-957.el7.x86_64
- initrd文件: initramfs-3.10.0-957.el7.x86_64.img
【[看文档操作](E:\Linux\take notes\制作自己 mini linux.pdf)】
## 3.3 Linux内核源码& 内核升级
![image-20220720202327800](http://picgo.kongshier.top/2767/image-20220720202327800.png)
### 内核升级
<img src="http://picgo.kongshier.top/2767/image-20220720204300714.png" alt="image-20220720204300714" style="zoom:80%;" />
## 3.4 Linux备份与恢复
1. 将需要的文件用tar打包,恢复时解压并覆盖就可以
2. 使用dump 和restore
- 需先安装好这两个yum -y install dump
yum -y install resrore1
2
3
4
5
6
7
8
9
10
11
12
13
### 3.4.1 dump备份
- dump支持分卷和增量备份(所谓的增量备份就是上次备份后 修改/增加过的文件 ,也是差异备份)
<img src="http://picgo.kongshier.top/2767/image-20220721093920960.png" alt="image-20220721093920960" style="zoom:80%;" />
案例:
- dump应用案例1
将/boot分区所有内容备份到/opt/boot.bak0.bz2文件中,备份层级为“0"dump -0uj -f /opt/boot.bak0.bz2 /boot
1
2
3
4
5
- dump应用案例2
在/boot目录下增加一个文件,备份层级为“1”(只备份上次使用层次“O”备份后发生过改变的数据),注意比较看看这次生成的备份文件boot1.bak有多大dump -1uj -f /opt/boot.bak1.bz2 /boot
1
2
3
4
5
6
7
8
9
==通过dump命令在配合crontab可以实现无人值守备份==
### 3.4.2 dump 其他选项
- dump -W :查看备份的文件,以及最后一次备份的层级
- 查看备份时间文件cat/etc/dumpdates
1
2
3
4
5
6
7
8
9
dump 备份目录或者文件,是不支持增量备份的,只能使用0级别进行备份,将文件上次到其他服务器
### 3.4.3 恢复restore
基本语法restore [模式选项] [选项]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<img src="http://picgo.kongshier.top/2767/image-20220721095315543.png" alt="image-20220721095315543" style="zoom: 67%;" />
~~~~
restore -C -f /opt/boot.bak1.bz2 进行恢复比较,和现在当前的文件进行比较
restore -r -f /opt/boot.bak0.bz2 进行还原恢复
restore -r -f 备份的文件 还原备份的文件/目录
~~~~
## 3.5 Linux可视化管理
### 3.5.1 webmin 工具
下载地址wget http://prdownloads.sourceforge.net/webadmin/webmin-1.997-1.noarch.rpm
1
2
3
4
5
6
7
8
9
10
11
12
<img src="http://picgo.kongshier.top/2767/image-20220721103534765.png" alt="image-20220721103534765" style="zoom:80%;" />
<img src="http://picgo.kongshier.top/2767/image-20220721103708687.png" alt="image-20220721103708687" style="zoom:80%;" />
### 3.5.2 bt工具
- 提升运维效率服务器管理软件
安装指令yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
1
2
3
安装完成==================================================================
Congratulations! Installed successfully!
外网面板地址: http://113.16.28.154:8888/c6d9af34
内网面板地址: http://192.168.20.132:8888/c6d9af34
username: jo4h5ky9
password: 1fd9ba16
If you cannot access the panel,
release the following panel port [8888] in the security group若无法访问面板,请检查防火墙/安全组是否有放行面板[8888]端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Linux入侵检测& 权限划分&系统优化
- 审计指令
- last:这个命令可用于查看我们系统的成功登录、关机、重启等情况;这个命令就是将/var/log/wtmp文件[格式化输出](https://so.csdn.net/so/search?q=格式化输出&spm=1001.2101.3001.7020)。
- lastb:这个命令用于查看登录失败的情况;这个命令就是将/var/log/btmp文件格式化输出。
- lastlog:这个命令用于查看用户上一次的登录情况;这个命令就是将/var/log/lastlog文件格式化输出。
- who:这个命令用户查看当前登录系统的情况;这个命令就是将/var/log/utmp文件格式化输出。
- w:与who命令一致。
- 日志查看
- 用户查看
- 进程查看
- 其他
权限划分
- r
- w
- x
- u g o 三种用户对文件的操作的权限
系统优化
## 3.6 Linux面试题
### 1
分析日志t.log(访问量),将各个ip地址截取,并统计出现次数,并按从大到小排序
http://192.168.200.10/index1.html
http://192.168.200.10/index2.html
http://192.168.200.20/index1.html
http://192.168.200.30/index1.html
http://192.168.200.40/index1.html
http://192.168.200.30/order.html
http://192.168.200.10/order.html
首先把这些网站放入一个文件当中vim interview.txt
cat interview.txt | cut -d ‘/‘ -f 3 |sort | uniq -c | sort -nr
1 |
|
chmod u+x(u用户执行权限、g、o) 文件名
1
2
3
2. sh+脚本
sh hello.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
### 4.2.2 Shell变量
1. 系统变量
`$ HOME`、 `$PWD` 、`$SHELL` 等
显示当前shell中所有变量:set
2. 用户自定义变量
定义变量语法:
变量 = 值
1
2
3
撤销变量
unset 变量
1
2
3
声明静态变量
readonly 变量
1
2
3
4
5
6
7
8
9
10
11
- 不能unset
#### 规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
- 等号两侧不能有空格
- ==变量名称一般大写==
讲命令的结果返回赋值变量
C=date
D=$(cal)
echo “C=$C”
echo “D=$D”
1 |
|
export 变量名=变量值 :讲shell变量输出为环境变量/全局变量
source 文件名 :让修改后的配置信息生效
echo $变量名 :查询环境变量的值
1 |
|
:<<!
代码块
!
1 |
|
./myshell 100 200
1 |
|
# 计算(2+4)*4
#方式一
RES=$(((2+4)*4))
echo "RES1=$RES"
#方式二
RES=$[(2+4)*4]
echo "RES2=$RES"
#方式三
TEMP=`expr 2 + 3`
RES=`expr $TEMP \* 4`
echo "TEMP1=$RES"
# 计算两个参数求和
SUM=$[$1+$2]
echo "sum=$SUM"
./myshell.sh 20 30(传参数)
1 |
|
[ condition ] #前后有空格
1 |
|
if [ “KKK” = “KKK” ]
then
echo “equal”
fi
1 |
|
if [ 12 -ge 15 ]
then
echo “大于了”
fi
1 |
|
if [ -f /usr/a.txt ]
then
echo “存在该文件”
fi
1 |
|
if [ 条件判断式 ]
then
代码块
fi
1
if [ 条件判断式 ]
then
代码块
elif [ 条件 ]
then
代码块
fi
1
2
3
例子
#!/bin/bash
if [ $1 -ge 60 ]
then
echo “及格了”
elif [ $1 -lt 60 ]
then
echo “不及格”
fi
1
2
3
2. case语句
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支.…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
1
2
3
实例:
#!/bin/bash
case $1 in
“1”)
echo “周一”
;;
“2”)
echo “周二”
;;
)
echo “other day …”
;;
esac
1
2
3
4
5
3. for循环
基本语法1
for 变量 in 值1 值2 值n…
do
程序/代码
done
1
2
3
基本语法2
for ((初始值;循环控制条件;变量变化))
do
程序/代码
done
1
2
3
4
5
案例
1. 打印命令行输入的参数 (区分`$*` 、`$@`)
#!/bin/bash
for i in “$“
do
echo “num is $i”
done
#!/bin/bash
for j in “$@”
do
echo “num is $j”
done
1
2
3
4
5
6
- `$*` 是把所有参数看作一个整体
- `$@` 把每一个参数分开
2. 100的累加
#!/bin/bash
SUM=0
for (( i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo “sum= $SUM”
# 指定数字的累加求和
for (( i=1;i<=$1;i++))
do
SUM=$[$SUM+$i]
done
echo "sum= $SUM"
1
2
3
4
5
4. while 循环
基本语法
while [ 条件判断 ] # []里面左右两侧有空格
do
代码
done
1
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo “sum=$SUM”
1
2
3
4
5
### read 读取控制台输入
基本语法
read (选项)(参数)
1 |
|
#!/bin/bash
读取控制台的输入的一个num1值
read -p “请输入一个数num1=” NUM1
echo “您输入 NUM1 =$NUM1”
读取控制台的输入的一个num1值,在10秒内输入
read -t 10 -p “请输入一个数num2=” NUM2
echo “您输入的NUM2=$NUM2”
1 |
|
[ function ] funname[()]
{
Action;
[retuen int;]
}
调用函数名
funname [值]
1 |
|
function getSum(){
SUM=$[$n1+$n2]
echo "和为:$SUM"
}
输入两个数
read -p “请输入一个数n1=” n1
read -p “请输入一个数n2=” n2
#调用自定义函数
getSum $n1 $n2
1 |
|
#!/bin/bash
#备份的目录
BACKUP=/date/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H:%M:%S)
echo “$DATETIME”
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=123456
#备份的数据库名
DATABASE=studydemo
#创建备份目录,如果不存在就创建
[ ! -d “${BACKUP}/${DATETIME}” ] && mkdir -p “${BACKUP}/${DATETIME}”
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} –host=${HOST} -q -R –datebases ${DATABASE} | gzip > “${BACKUP}/${DATETIME}/$DATETIME.tar.gz”
#将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除十天以前的备份文件
find ${BACKUP} -atime +10 -name “*.tar.gz” -exec rm {} ;
echo “成功备份数据库 ${DATABASE}!!”
1 |
|
30 2 * * * /usr/sbin/mysql_db_backup.sh
## Linux之Python
(不走这个方向,没有看视频)
Python专业开发平台 -Ubuntu
Ubuntu下开发Python开发环境
APT软件管理和远程登录