linux韩顺平2018

linux

Linux基础篇 入门

目录意义
/bin是Binary的缩写,这个目录存放着最经常使用的命令
/sbins就是Super User的意思,这里存放的是系统管理员使用的系统管理程序
/home存放普通用户的主目录,在linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
/root该目录为系统管理员,也称作超级权限者的用户主目录
/lib系统开机所需要最基本的动态连接共享库,其作用类似于windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库
/lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
/etc所有的系统管理所需要的配置文件和子目录my.conf
/usr这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录
/boot存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/proc这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
/srvservice缩写,该目录存放一些服务启动之后需要提取的数据
/sys这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统
/tmp这个目录是用来存放一些临时文件的
/dev类似于windows的设备管理器,把所有的硬件用文件的形式存储
/medialinux系统会自动识别一些设备,例如U盘,光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
/mnt系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。D://Share
/opt这是给主机额外安装软件所摆放的目录,如安装ORACLE数据库就可放在该目录下
/usr/local这是另一个给主机额外安装软件所安装的目录,一般是用过编译源码方式安装的程序
/var这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
/selinuxSELINUX是一种安全子系统,它能控制程序只能访问特定文件

Linux实操篇

Vi Vim

模式名可完成的指令
正常模式可使用快捷键,如上下左右,复制粘贴
插入模式按下i,I,o,O,a,A,r,R进入,一般来说按i即可
命令行模式提供相关指令,完成读取、存盘、替换、离开、Vim、显示行号等操作

vim快捷键功能用法及操作
拷贝当前行yy完成拷贝,p粘贴(拷贝当前行向下的5行 5yy)
删除当前行dd,删除当前行向下的5行 5dd
查找单词命令行下 /关键字,回车则查找,输入n则继续查找下一个
设置/区校行号命令行:set nu和:set nonu
回到文档首行和尾行正常模式下,最末行 G,最首行 gg
撤销正常模式下输入u
光标移动到指定行1.显示行号:set nu 2.输入行号 3.输入shift+g

关机&重启命令

shutdown用法意义
shutdown -h now表示立即关机
showdown -h 1表示一分钟后
shutdown -r now立即重启
halt直接使用,效果等价于关机
reboot立即重启
sync把内存的数据同步到磁盘
logoout注销用户(图形界面无效),在运行级别3有效

用户管理

用户操作方法
添加用户useradd [选项] 用户名,当创建用户成功后,会自动创建和用户同名的家目录,也可以通过useradd -d 指定目录 新的用户名,给新创建的用户指定家目录
指定/修改密码passwd 用户名
删除用户(保留家目录)userdel 用户名(一般保留家目录)
删除用户(删除家目录)userdel -r 用户名
查询用户信息id 用户名
切换用户su - 用户名(exit回退到原来用户)从权限高的用户切换到权限低的用户不需要输入密码,反之需要
查看当前用户/登陆用户whoami/who am i
增加组groupadd 组名
删除组groupdel 组名
创建用户时直接加上组useradd -g 用户组 用户名
修改用户组usermod -g 用户组 用户名

用户和组的相关文件

文件意义每行含义
/etc/passwd用户(user)的配置文件,记录用户的各种信息用户名:口令:用户标识号:组标识号:注释性描述:主目录:登陆shell
/etc/shadow口令的配置文件登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group组(group)的配置文件,记录linux包含的组的信息组名:口令:组标识号:组内用户列表

实用指令

指定运行级别

级别意义
0关机
1单用户(找回丢失密码)
2多用户无网络服务
3多用户有网络服务(使用最多)
4保留
5图形界面
6重启
系统的运行级别配置文件/etc/inittab
切换到指定运行级别的指令:init[0123456]

    面试题:如何找回root密码?
思路:进入到单用户模式,然后修改密码。因为进入单用户模式,root不需要密码就可以登陆。
  在引导时输入enter;输入e;(选中kernel)输入e;在此行最后输入 空格 1;再输入enter;再输入b进入单用户模式;使用passwd root修改密码

帮助指令

当我们对某个指令不熟悉时,可以使用帮助指令来了解这个指令的具体用法

指令格式及描述
man获得帮助信息man [命令或配置文件](功能描述:获得帮助信息)
help指令help 命令(功能描述:获得shell内置命令的帮助信息)
googlewww.google.com

文件目录类

指令基本语法功能描述
pwdpwd显示当前工作目录的绝对路径
lsls [选项] [目录或是文件]常用选项:-a:显示当前目录所有的文件和目录,包括隐藏的;-l:以列表的方式显示信息 可以搭配使用
cdcd [参数]切换到指定目录 常用参数:绝对路径和相对路径 cd ~或cd 回到自己的家目录;cd … 回到当前目录的上一级目录
mkdirmkdir [选项] 要创建的目录make directory常用选项:-p 创建多级目录
rmdirrmdir [选项] 要删除的空目录rmdir删除的是空目录,如果目录下有内容时无法删除,提示:如果需要删除非空目录,需要使用rm -rf 要删除的目录
touchtouch 文件名称创建空文件,可以一次性创建多个文件
cpcp [选项] source dest拷贝文件至指定目录,常用选项:-r 递归复制整个文件夹,强制覆盖不提示的方法:\cp
rmrm [选项] 要删除的文件或目录移除文件或目录,常用选项:-r:递归删除整个文件夹;-f:强制删除不提示
mvmv oldNameFile newNameFile重命名
mv 文件名 要移动到的目录移动文件
catcat [选项] 要查看的文件查看文件内容,以只读的方式打开,常用选项:-n 显示行号,为了浏览方便,一般会带上管道命令
moremore 要查看的文件more指令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容,more指令中内置了若干快捷键,空格按页,enter按行
lessless 要查看的文件less指令用来分屏查看文件内容,但是比more指令更强大,支持各种终端显示。less指令在显示文件内容时,并不是一次将整个文件加载之后显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率
>ls -l >文件输出重定向,将列表的内容写入文件中,覆盖写
cat 文件1>文件2将文件1的内容覆盖到文件2
>>ls -al >>文件追加,将列表内容追加到文件的末尾
echo “内容”>>文件
echoecho [选项] [输出内容]输出内容到控制台
headhead [选项] 文件用于显示文件的开头部分内容,默认情况下head指令显示文件的前十行内容,head -n 5 文件 :查看文件头5行内容,5可以是任意数
tailtail [选项] 文件用于输出文件中尾部的内容,默认情况下显示文件的后10行内容,tail -n 5 文件 :查看后5行内容;tail -f 文件 :实时追踪该文档的所有更新
lnln -s [原文件或目录] [软链接名]给原文件创建一个软链接。软链接也叫符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径。当我们使用pwd查看目录时,仍然看到的是软链接所在目录
historyhistory查看已经执行过历史命令,也可以执行历史指令,histroy 50:查看近50条命令,!100:执行第100条指令

时间日期类

指令基本语法功能描述
datedate显示当前日期
date +%Y显示当前年份
date +%m显示当前月份
date +%d显示当前是哪一天
date “+%Y-%m-%d %H:%M:%S”显示年月日时分秒
date -s 字符串时间设置时间
calcal [选项]不加选项,显示本月日历

搜索查找类

指令基本语法功能描述
findfind [搜索范围] [选项]从指定目录向下递归地遍历其各个子目录,将满足条件地文件或目录显示在终端,选项说明:-name<查询方式> 按照指定的文件名查找模式查找文件 ;-user<用户名> 查找属于指定用户名所有文件 ;-size<文件大小> 按照指定的文件大小查找文件
locatelocate 搜索文件locate指令可以快速定位文件路径。locate指令利用事先建立的系统中的所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。特别说明:由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
grep和管道符号|grep [选项] 查找内容 源文件过滤查找,管道符表示将前一个命令的处理结果输出传递给后面的命令处理。常用选项: -n 显示匹配行及行号;-i 忽略字母大小写

压缩和解压缩类

压缩指令基本语法功能描述解压指令基本语法功能描述
gzipgzip 文件压缩文件,只能将文件压缩为*.gz文件,当我们使用gzip对文件压缩后,不会保留原来的文件gunzipgunzip 文件.gz解压缩文件命令,当我们使用gunzip对文件解压缩后,同样不会保留原来的文件
zipzip [选项] XXX.zip 将要压缩的内容压缩文件和目录,常用选项:-r 递归压缩,即压缩目录uzipuzip [选项] XXX.zip解压缩文件,常用选项:-d<目录> 指定解压后文件的存放目录
tar指令是打包指令,最后打包的文件是.tar.gz的文件
tar [选项] XXX.tar.gz 打包的内容 (打包目录)
-c:产生.tar打包文件
-v:显示详细信息
-f:指定压缩后的文件名
-z:打包同时压缩
-x:解包.tar文件
tar -zcvf a.tar.gz a1.txt a2.txt
tar -zcvf myhome.tar.gz /home/
tar -zxvf a.tar.gz
压缩到的目录必须存在,否则会报错

组管理和权限管理

指令意义
ls -ahl查看文件所有者
chown 用户名 文件名修改文件所有者
chgrp 组名 文件名修改文件所在组
usermod -g 组名 用户名改变用户所在组
usermod -d 目录名 用户名改变该用户登陆的初始目录

-rw-r–r-- 1 root root 103 Jun 10 16:45 Hello.java
0-9位说明(可用数字表示:r=4,w=2,x=1)

  • 第0位确定文件类型
    • -:普通文件
    • d:目录
    • l:软链接
    • c:字符设备[键盘,鼠标]
    • b:块文件,硬盘
  • 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 --User
  • 第4-6位确定所属者(同用户组的)拥有该文件的权限。 --Group
  • 第7-9位确定其他用户拥有该文件的权限。 --Other

第10位说明 文件:硬链接数或目录:子目录数

rwx作用详解

文件目录
r可读read可以读取,查看可以读取,ls查看目录内容
w可写write可以修改,但是不代表可以删除文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件可以修改,目录内创建+删除+重命名目录
x可执行execute可以被执行可以进入该目录

修改权限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 文件目录名


修改文件所有者chown

chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
-R 如果是目录,则使其下所有子文件或目录递归生效


修改文件所在组chgrp

chgrp newgroup file 改变文件的所有组


任务调度crond

任务调度是指系统在某个时间执行的特定的命令或程序
基本语法:crontab [选项]
常用选项:

  • -e 编辑crontab定时任务;
  • -l 查询crontab任务;
  • -r 删除当前用户所有的crontab任务
  • service crond restart 重启任务调度

参数说明
5个占位符的说明

项目含义范围
第一个*一小时当中的第几分钟0-59
第二个*一天当中的第几小时0-23
第三个*一个月当中的第几天1-31
第四个*一年当中的第几月1-12
第五个*一周当中的星期几0-7(0和7都代表星期日)

特殊符号的说明

特殊符号含义
*代表任何时间。比如第一个“*”代表一小时中每分钟都执行一次的意思
代表不连续的时间。比如“0 8,12,16 * * *”代表在每天的8:00,12:00,16:00都执行一次命令
-代表连续的时间范围。比如“0 5 * * 1-6”代表在周一到周六的凌晨5:00执行命令
*/n代表每隔多久执行一次。比如“/10 * * * *”代表每隔10分钟就执行一次

案例:每隔一分钟将当前日期信息,追加到/tmp/mydate文件中

  1. 先编写一个文件 /home/mytask.sh
    date >> /tmp/mydate
  2. 给mytask.sh一个可执行权限
    chmod 744 /home/mytask.sh
  3. crontab -e
  4. */1 * * * * /home/mytask.sh
  5. 成功

磁盘分区、挂载

分区方式mbrgpt
1.最多支持四个主分区
2.系统只能安装在主分区
3.扩展分区要占一个主分区
4.MBR最大只支持2TB,但拥有最好的兼容性
1.支持无限多个主分区(但操作系统可能限制,比如windows下最多128个分区)
2.最大支持18EB的大容量(1EB=1024PB,1PB=1024TB)
3.windows7 64位以后支持gpt

linux分区

硬盘说明

  1. linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
  2. 对于IDE硬盘,驱动器标识符位“hdx”,其中hd表明分区所在设备的类型,这里是指IDE硬盘了,x为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),代表分区,其四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区
  3. 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用sd来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样
    使用lsblk或lsblk -f指令查看当前系统的分区情况

挂载

如何增加一块硬盘?

  1. 虚拟机添加硬盘
  2. 分区 分区命令 fdisk /dev/sdb 开始对/sdb分区
  • m 显示命令列表
  • p 显示磁盘分区 同fdisk -l
  • n 新增分区
  • d 删除分区
  • w 写入并退出
    说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q
  1. 格式化 分区命令:mkfs -t ext4 /dev/sdb1 其中ext4是分区类型
  2. 挂载 将一个分区与一个目录联系起来
  • mount 设备名称 挂载目录 例如:mount /dev/sdb1 /newdisk
  • umount 设备名称或者挂载目录 例如:umount /dev/sdb1或者umount /newdisk
  1. 设置可以自动挂载 通过修改/etc/fstab实现挂载 添加完成后 执行mount -a 即可生效

磁盘情况查询

  • 查询系统整体磁盘使用情况df -l,df -h,df -lh
  • 查询指定目录的磁盘占用情况du -h /目录
    • 查询指定目录的磁盘占用情况,默认为当前目录
    • -s:指定目录占用大小汇总
    • -h:带计量单位
    • -a:含文件
    • -max-depth=1:子目录深度
    • -c:列出明细的同时,增加汇总值
  • 工作实用指令
    • 统计/home文件夹下文件的个数 ls -l /home | grep “^-” | wc -l
    • 统计/home文件夹下目录的个数 ls -l /home | grep “^d” | wc -l
    • 统计/home文件夹下文件的个数,包括子文件夹里面的 ls -lR /home | grep “^-” | wc -l
    • 统计/home文件夹下目录的个数,包括子文件夹里面的 ls -lR /home | grep “^d” | wc -l
    • 以树状显示目录结构 yum install tree ; tree 目录

网络配置

指定固定的ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart


进程管理

显示系统执行的进程

ps

命令功能
ps -a显示当前终端的所有进程信息
ps -u以用户的格式显示进程信息
ps -x显示后台进程运行的参数
ps -aux | grep xxx
ps -ef | grep xxx以全格式(-f)显示当前所有的进程(-e),查看进程的父进程

终止进程

kill [选项] 进程号:通过进程号杀死进程
killall 进程名称:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
常用选项:-9 表示强迫进程立即停止

  1. 踢掉非法用户
    1. ps -aux | grep sshd
    2. kill xxx(user)
  2. 终止远程登录服务sshd,在适当时候再次重启sshd服务
    1. kill xxx(sshd)
  3. 终止多个gedit编辑器
    1. killall xxx(进程名称)
  4. 强制杀掉一个终端
    1. ps -aux | grep sshd
    2. kill -9 xxx(/bin/bash)

查看进程树

pstree [选项]
常用选项:
-p:显示进程的pid
-u:显示进程的所属用户


服务(service)管理

服务本质就是进程,但是是运行在后台的,通常会监听某个端口,等待其他程序的请求,比如mysql,sshd,防火墙等,因此我们又称为守护进程,是linux中非常重要的知识点
service 服务名 [start | stop | restart | reload | status]
在Centos7.0后不再使用service,而是systemctl

ls -l /etc/init.d/:列出系统有哪些服务

开机的流程:开机 -> BIOS -> /boot -> init进程 -> 运行级别 -> 运行级对应的服务

chkconfig
通过chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭
基本语法:

  • 查看服务 chkconfig --list | grep xxx
  • chkconfig 服务名 --list
  • chkconfig --level 5 服务名 on/off 修改某个服务在某个级别下是否自启动
  • chkconfig 重新设置服务后自启动或关闭,需要重启机器reboot才能生效

动态监控进程

top与ps命令很相似,它们都用来显示正在执行的进程。top与ps最大的不同之处在于top在执行一段时间可以更新正在运行的进程。
基本语法:top [选项]
选项说明

选项功能
-d 秒数指定top命令每隔几秒更新,默认是3秒,在top命令的交互模式当中可以执行的命令
-i使top不显示任何闲置或者僵死进程
-p通过指定监控进程ID来仅仅监控某个进程的状态

交互操作说明

操作功能
P以CPU使用率排序,默认就是此项
M以内存的使用率排序
N以PID排序
q退出top

案例1.监视特定用户
top:输入此命令,按回车键,查看执行的进程
u:输入“u”回车,再输入用户名,即可

案例2.终止特定进程
top:输入此命令,按回车键,查看执行的进程
k:输入“k”回车,再输入要结束的进程ID号


监控网络状态

查看系统网络情况 netstat
基本语法 netstat [选项]
查看所有netstat -anp | more
查看特定服务netstat -anp | grep xxx
选项说明:
-an:按一定顺序排列输出
-p:显示哪个进程在调用


RPM和YUM

RPM

RPM:一种用于互联网下载包的打包及安装工具,它包含在某些linux分发版中,它生成距有.RPM扩展名的文件。类似于windows的setup.exe

指令功能
rpm -qa查询所安装的所有rpm软件包
rpm -qa | more
rpm -qa | grep xxx
rpm -q 软件包名查询软件包是否安装
rpm -qi 软件包名查询软件包信息
rpm -ql 软件包名查询软件包中的文件
rpm -qf 文件全路径名查询文件所属的软件包
rpm -e RPM包的名称卸载RPM包
rpm -e --nodeps RPM包的名称卸载RPM包,强制删除
rpm -ivh RPM包全路径名安装RPM包,参数说明:i=install安装,v=verbose提示,h=hash进度条

YUM

YUM:Yum是一个Shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包

指令功能
yum list | grep xx软件列表,查询yum服务器是否有需要安装的软件
yum install xxx下载安装,安装指定的yum包

JavaEE定制篇

jdk
tar -zxvf jdk-8u211-linux-x64.tar.gz 
cd /opt/jdk1.8.0_211/bin
vim /etc/profile
JAVA_HOME=/opt/jdk1.8.0_211
PATH=/opt/jdk1.8.0_211/bin:$PATH
export JAVA_HOME PATH
source /etc/profile或logout注销  

tomact
tar -zxvf apache-tomcat-9.0.21.tar.gz
cd /opt/apache-tomcat-9.0.21/bin进入到bin目录或配环境变量
./startup.sh
http://localhost:8080
systemctl status iptables
yum install iptables-services
service iptables status
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT(yy p复制)(开放8080端口)
服务器需设置安全组规则,开放8080端口

eclipse
tar -zxvf eclipse-jee-2019-03-R-linux-gtk-x86_64.tar.gz
cd eclipse
./eclipse或创建一个快捷方式

mysql
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
tar -zxvf mysql-8.0.16.tar.gz
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

-DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc
-DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306
-DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENHINE=1
-DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci


Shell编程

硬件 -> 内核 -> Shell命令解释器 -> 应用程序
Shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序

 编写一个Shell
 vim myShell.sh
    #!/bin/bash
    echo "hello,world!"
脚本的常用执行方式:
1. 赋予权限,输入脚本的相对路径或绝对路径
 chmod 755 myShell.sh
 ./myShell.sh或/root/shell/myShell.sh
2. sh+脚本,不用赋予权限(不推荐)
 sh ./myShell.sh或sh /root/shell/myShell.sh

Shell变量

介绍
  1. Linux Shell中的变量分为系统变量和用户自定义变量。
  2. 系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME(输出系统变量)等等
  3. 显示当前shell中所有变量:set

定义
  1. 定义变量:变量=值

  2. 撤销变量:unset 变量

  3. 声明静态变量:readonly 变量,注意:不能unset

     A=100
     echo "A=$A"
     unset A
     echo "A=$A"
     readonly A=99
    
     echo "A=$A"
     unset A
     (./myShell.sh: line 14: unset: A: cannot unset: readonly variable)
     echo "A=$A"
    
  4. 定义变量的规则

    • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
    • 等号两侧不能有空格
    • 变量名称一般习惯为大写
  5. 将命令的返回值赋给变量

    1. 反引号
      RESULT=`ls -l /home`
      echo $RESULT

    2. 等价于反引号
      MY_DATE= ( d a t e ) e c h o &quot; d a t e = (date) echo &quot;date= (date)echo"date=MY_DATE"


设置环境变量
  1. 基本语法
    1. export 变量名=变量值(将shell变量输出为环境变量)
    2. source 配置文件(让修改后的配置信息立即生效)
    3. echo $变量名(查询环境变量的值)

位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
基本语法:

  • $n:n位数字,$0代表命令本身,$1-$9代表第一到九个参数,十以上的参数需要用大括号包含${10}
  • $*:代表命令行中所有的参数,$*把所有的参数看成一个整体
  • $@:也代表命令行中所有的参数,不过$@把每个参数区分对待
  • $#:代表命令行中所有参数的个数

预定义变量

shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法:

  • $$:当前进程的进程号PID
  • $!:后台运行的最后一个进程的进程号PID
  • $?:最后一次执行的命令的返回状态。如果这个变量的值为0.证明上一个命令正确执行;如果非0,则执行不正确

运算符
  1. “$((运算式))“或”$[运算式]”

  2. expr m + n(注意expr运算符间要有空格)

  3. expr m - n

  4. expr \*,/,%

     RESULT1=$(((2+3)*4))
     echo "result1=$RESULT1"
    
     RESULT2=$[(2+3)*4]
     echo "result2=$RESULT2"
    
     TEMP=`expr 2 + 3`
     RESULT3=`expr $TEMP \* 4`
     echo "result3=$RESULT3"
    
     SUM=$[$1+$2]
     echo "SUM=$SUM"
    

条件判断
基本语法

[ condition ](注意condition前后要有空格)
非空返回true,可使用$?验证

常用判断条件
  1. 两个整数的比较
    • =字符串比较
    • -lt小于
    • -le小于等于
    • -eq等于
    • -gt大于
    • -ge大于等于
    • -ne不等于
  2. 按照文件权限进行判断
    • -r有读的权限
    • -w有写的权限
    • -x有执行的权限
  3. 按照文件类型进行判断
    • -f文件存在并且是一个常规文件

    • -e文件存在

    • -d文件存在并且是一个目录

        if [ "ok" = "ok" ]
        then
                echo "equal"
        fi
      
        if [ 23 -gt 22 ]
        then
                echo "大于"
        fi
      
        if [ -e /root/shell/myShell.sh ]
        then
                echo "存在"
        fi
      

流程控制
if判断
    if [ 条件判断式 ]
    then
        程序
    fi

    或

    if[ 条件判断式 ]
    then
        程序
        elif[ 条件判断式 ]
        then
            程序
    fi
case语句
    case $变量名 in
    "值1")
        如果变量的值等于值1,则执行程序1
    ;;
    "值2")
        如果变量的值等于值2,则执行程序2
    ;;
    ...省略其他分支...
    *)
        如果变量的值都不是以上的值,则执行此程序
    ;;
    esac

实例:

    case $1 in
    "1")
        echo "周一"
    ;;
    "2")
        echo "周二"
    ;;
    *)
        echo "other"
    ;;
    esac
for循环
基本语法1
for 变量 in 值1 值2 值3
do
    程序
done

基本语法2
for((初始值;循环控制条件;变量变化))
do
    程序
done

实例:
打印命令行输入的参数

    使用 $*
    for i in "$*"
    do
            echo "the num is $i"
    done

    使用$@
    for j in "$@"
    do
            echo "the num is $j"
    done

    the num is 10 20 30
    the num is 10
    the num is 20
    the num is 30


    从1加到100的值输出显示
    
    SUM=0;
    for((i=1;i<=100;i++))
    do
            SUM=$[$SUM+$i]
    done
    echo "sum=$SUM"
while循环
基本语法1
while [ 条件判断式 ]
do
    程序
done

实例:

从命令行输入一个数n,从1加到n的值为?
SUM=0;
i=0;
while [ $i -le $1 ]
do
        SUM=$[ $SUM+$i ]
        i=$[ $i+1 ]
done
echo "sum=$SUM"

输入输出
read读取控制台输入
基本语法
read (选项)(参数)
选项:
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数
变量:指定读取值的变量名

实例:

读取控制台输入一个num值
read -p "请输入一个数num1=" NUM1
echo "你输入的值是num1=$NUM1"

读取控制台输入一个num值,在10秒内输入
read -t 10 -p "请输入一个数num2=" NUM2
echo "你输入的值是num2=$NUM2"

系统函数
basename基本语法
功能:返回完整路径最后/的部分,常用于获取文件名
basename [pathname][suffix]
basename [string][suffix]
basename命令会删掉所有的前缀包括最后一个"/"字符,然后将字符串显示出来
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
basename /root/shell/myShell.sh         myShell.sh
basename /root/shell/myShell.sh .sh     myShell

dirname基本语法
功能:返回完成路径最后"/"的前面的部分,常用于返回路径部分
dirname 文件绝对路径
dirname /root/shell/myShell.sh          /root/shell

自定义函数
[function] funname[()]
{
    Action;
    [return int;]
}
调用直接写函数名:funname[值]

实例:

function getSum(){
        SUM=$[$n1+$n2]
        echo "和是$SUM"
}
read -p "请输入一个数num1=" n1
read -p "请输入二个数num2=" n2

getSum $n1 $n2

综合案例

每天凌晨2:10备份数据库atguiguDB到/data/backup/db
备份开始和备份结束都能够给出相应的提示信息
备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2019_06_12_145646.tar.gz
在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除



#! /bin/bash
#完成数据库的定时备份
#备份的路径
BACKUP=/data/backup/db
#当前时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
echo ${DATETIME}

echo "=========开始备份=========="
echo "=========备份的路径是 $BACKUP/$DATETIME.tat.gz"

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "==========备份成功==========="



crontab -e 
10 2 * * * /mysql_db_backup.sh
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值