Linux

Linux

Linux的应用领域

  1. linux在服务器领域的应用是最强的.
  2. linux免费、稳定、高效等特点在这里得到很好的体现.
  3. 在嵌入式领域的应用得到了飞速的提高,例如机顶盒、数字电视等.

Linux的基本介绍

  1. linux是一款操作系统,免费,开源,安全,高效,稳定,处理高并发非常强悍,很多企业级的项目基本都是部署在linux服务器中运行.
  2. 常见的两款发行版本:优班图与centOS

安装vm和centOS

  1. 去BIOS修改设置开启虚拟化设备支持
  2. 安装虚拟机软件vm

linux的目录结构

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

  1. bin 是Binary的缩写,这个目录存放着最经常使用的命令.
  2. sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序.
  3. home 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命令的.
  4. root 该目录为系统管理员,也称作超级权限者的用户主目录.
  5. lib 系统开机所需要最基本的动态链接共享库,其作用类似于windows的dll文件,几乎所有的应用程序都需要用到这些共享库
  6. lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
  7. etc 所有的系统管理所需要的配置文件和子目录
  8. usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录.
  9. boot 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  10. proc 这个目录是一个虚拟的目录,是系统内存的映射,访问这个目录来获取系统信息
  11. srv service缩写,该目录存放一些服务启动之后需要提取的数据
  12. sys 这是linux2.6内核的一个很大的变化,该目录安装了2.6内核中新出现的一个文件系统sysfs
  13. tmp 这个目录是用来存放一些临时文件
  14. dev 类似于windows的设备管理器,把所有的硬件用文件的形式存储
  15. media linux系统会自动识别一些设备,u盘、光驱等,当识别后,linux会把识别的设备挂载到这个目录下
  16. mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了.
  17. opt 这是给主机额外安装软件所摆放的目录,如安装ORACLE数据库就可以放到该目录下,默认为空
  18. usr 这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序
    1. /usr/bin 存放应用程序
    2. /usr/share 存放共享数据
    3. /usr/lib 存放不能直接运行的,却是许多程序运行所必须的一些函数库文件
    4. /usr/local 存放软件升级包
    5. /usr/share/doc 系统说明文件存放目录
    6. usr/share/man 程序说明文件存放目录
  19. var 这个目录中存放着不断扩充的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
    1. /var/log 随时更改的日志文件
    2. /var/spool/mail 邮件存放的目录
    3. /var/run 程序或服务启动后,其PID存放在该目录下
  20. /selinux selinux是一种安全子系统,能控制程序只能访问特定文件.

远程登录上传及下载

  1. 远程登录 xshell5与putty(在连接之前需要linux开启sshd服务,该服务会监听22号端口)
  2. 远程上传及下载 filezilla与xftp5

起步操作

  1. 查看ip地址
    1. vi /etc/sysconfig/network-scripts/ifcfg-ens33(此以下修改虚拟机网络配置)
    2. i进入insert模式修改onboot改为yes
    3. 退出insert模式
    4. :wq!
    5. 重启网络服务 systemctl restart network
    6. 查看网络服务 systemctl status network
    7. 修改网络适配器 NAT改为桥接
    8. 重启网络服务 systemctl restart network
    9. :ip addr
  2. 防火墙启用、关闭、禁用
    1. systemctl stop firewalld 关闭防火墙
    2. systemctl disable firewalld 禁用防火墙
    3. ps -ef | grep firewalld 查看防火墙进程
    4. systemctl start firewalld 开启防火墙
    5. systemctl status firewalld 查看防火墙状态

vi和vm编辑器

所有的linux系统都会内建vi文本编辑器,vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计.代码补完、编译及错误跳转等方便变成的功能特别丰富,在程序员中被广泛使用.
具体相关指令操作

  1. yy拷贝当前行;5yy拷贝当前行向下的5行(p粘贴)
  2. dd删除当前行;5dd删除当前行向下5行
  3. /关键字表示在文件中查找某个单词,回车查找,输入n查找下一个
  4. 设置文件的行号:set nu;取消文件的行号:set nonu(注意有冒号,冒号不能省略)
  5. 使用快捷键到文档的尾行G;到文档的开头gg
  6. 输入一段文字后,进行撤销当前的操作u
  7. 将光标移动到指定行数
    1. 先输入命令 :set nu
    2. 在输入项指定的行数12
    3. 快捷键shift+g,跳到指定的行数

关机重启与注销

  1. 基本命令
    1. shutdown -h now 立即进行关机
    2. shutdown -h 1 1分钟后会关机
    3. shutdown -r now 现在重启计算机
    4. reboot 现在重启计算机
    5. sync 把内存的数据同步到磁盘
  2. 细节
    1. 当我们关机或者重启时,都应该先执行以下sync指令,把内存的数据写入磁盘,防止数据丢失.
    2. 登录时尽量少用root账号登录,避免操作失误.可以先利用普通用户登录,登录后在用"su-用户名"命名来切换成系统管理员身份
    3. 在提示符下输入logout即可注销用户

创建用户指定密码

linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.

  1. 基本命令
    1. useradd wupeng 创建一个用户名为wupeng的账户
    2. passwd wupeng 指定用户修改密码
    3. usermod -l wupeng12 wupeng 将原来的wupeng账户名修改为wupeng12
  2. 细节
    1. 当创建用户成功后,会自动创建和用户同名的家目录
    2. 也可以通过useradd -d /name wupeng1,给新创建的用户指定家目录
    3. 无法对正在启用的用户名进行修改

删除用户

  1. 基本命令
    1. userdel wupeng 删除用户(保留家目录)
    2. userdel -r wupeng 删除用户(不保留家目录)
  2. 细节
    1. 删除用户以及用户主目录需要加-r
    2. 在删除用户时,一般不会将家目录删除.

查询切换用户

  1. 基本命令
    1. id wupeng 查询吴鹏用户
    2. su - root 切换到root用户
  2. 细节
    1. 当查询的用户不存在,返回无此用户
    2. 在操作linux中,如果当前用户的权限不够,可以通过su -指令,切换到高权限用户,比如root
    3. 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要.
    4. 当需要返回原来用户时,使用exit指令

组的管理

  1. 基本指令
    1. whoami/who am i 查看当期那用户/登录用户
    2. groupadd test 添加组
    3. groupdel test 删除组
    4. useradd -g test wupeng 创建一个组为test用户名为wupeng的用户
    5. usermod -g test1 wupeng 修改wupeng用户原来的组名为test改为test1
  2. 文件/目录所有者
    一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者.
    1. 查看文件所有者 ls -ahl
    2. 修改文件所有者 chown wupeng name.txt 将原先name.txt的用户改成wupeng用户
    3. 修改文件所在组 chgrp wupenggroup name.txt 将原先name.txt所在的组改成wupenggroup组
    4. 修改用户所在组 usermod -g usergroup username 将username的所在组改成usergroup组
    5. 修改用户登录的初始目录 usermod -d dir username 改变username用户的初始登录的目录
    6. 修改用户下的文件所有者与所在组 chown wupeng:wupenggroup name.txt 改变name.txt文件下的所有者和所有组
    7. 修改用户的目录所有者与所在组 chown -R wujuan:wujuangroup wupengdir 改变wupengdir目录下的所有者和所有组
    8. 修改目录下的所有文件所在组 chgrp -R wupenggroup wupengdir 将原先wupengdir目录所在的组改成wupenggroup组
  3. 细节 在创建一个用户附带组的时候,如果组不存在,则该用户创建失败
  4. 用户和组的相关文件
    1. /etc/passwd文件 用户的配置文件,记录用户的各种信息,每行的含义→用户名:口令:标识号:组标识号:注释性描述:主目录:登录shell
    2. /etc/shadow文件 口令的配置文件,每行的含义→登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
    3. /etc/group文件 组的配置文件,记录linux包含的组的信息,每行含义→组名:口令:组标识号:组内用户列表
  5. 运行级别 常用运行级别是3和5,要修改默认的运行级别可改文件 /etc/inittab的id:5:initdefault:这一行的数字,命令:init+数字
    1. 0表示关机
    2. 1表示单用户[找回丢失密码]
    3. 2表示多用户状态没有网络服务
    4. 3表示多用户状态有网络服务
    5. 4表示系统未使用保留给用户
    6. 5表示图形界面
    7. 6表示系统重启
  6. 文件目录类操作指令
    1. pwd 显示当期那工作目录的绝对路径
    2. ls
      1. -a 显示当前目录所有的文件和目录,包括隐藏的
      2. -l 以列表的方式显示信息
    3. cd
      1. cd ~或cd: 回到自己的家目录
      2. cd .. 回到当前目录的上一级目录
    4. mkdir
      1. mkdir dir 创建单级目录
      2. mkdir -p dir/dir 创建多级目录
    5. rmdir
      1. rmdir dir 删除空目录
      2. rm -rf dir 如果dir是非空目录,那么就需要使用rm -rf删除目录
    6. touch touch hello.txt
    7. cp
      1. cp hello.txt hellodir 拷贝hello文件到hellodir文件夹
      2. cp -r hellodir hellodir2 拷贝hellodir整个文件夹到hellodir2文件夹
    8. rm(常规使用rm -rf,慎用)
      1. rm -r 递归删除整个文件夹
      2. rm -f 强制删除不提示
    9. mv
      1. mv hello1.txt hello2.txt 修改文件
      2. mv hellodir/hello1.txt hello2.txt 将hellodir文件夹下的hello1.txt修改为hello2.txt并移动到当前目录下
    10. cat
      1. cat hello.txt 查看文件
      2. cat -n hello.txt 查看待行号的文件
      3. cat只能浏览文件,而不能修改文件,未来了浏览方便,一般会带上管道命令|more
    11. more
      1. more指令是一个基于vi编辑器的文本过滤器,以全屏的方式按页显示文本文件的内容,more指令中内置了若干快捷键
      2. more hello.txt,内置快捷键如下:
        1. space键 代表下翻一页
        2. Enter键 代表向下翻一行
        3. q键 代表立即离开more,不在显示读文件内容
        4. ctrl+F 向下滚动一屏
        5. ctrl+B 返回上一屏
        6. = 输出当前行的行号
        7. :f 输出文件名和当前行的行号
    12. less指令
      1. 用来分屏查看文件内容,功能与more指令类似,但是比more指令更加强大,支持各种显示终端.less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据现实需要加载内容,对于显示大型文件具有较高的效率
      2. less hello.txt,内置快捷键如下:
        1. space键 向下翻动一页
        2. 上下键 向上下翻动一页
      3. /字符串 向下搜寻字符串的功能,n向下查找,N向上查找
      4. ?字符串 向上搜寻字符串的功能,n向下查找,N向上查找
      5. q 离开less
    13. >和>>
      1. ls -l>文件 列表的内容写入文件hello.txt中(覆盖写)
      2. ls -al>>文件 列表的内容追加到文件hello.txt中的末尾
      3. cat hello.txt>hello1.txt 将hello.txt的内容覆盖到hello1.txt文件中
      4. echo "内容">>文件 写入指定内容到文件中
    14. echo
      1. scho输出内容到控制台
      2. 一般结合>>与>使用效果会更佳
    15. head
      1. head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
      2. head hello.txt
      3. head -n 5 hello.txt 查看文件头5行内容
    16. tail
      1. tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容
      2. tail -n 5 hello.txt 查看文件后5行内容
      3. tail -f hello.txt 实时追踪该文档的所有更新
    17. ln
      1. 软链接也叫符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
      2. ln -s 源文件或目录 软链接名 (功能是给源文件创建一个软链接)
      3. 给目录添加软链接后,可以通过cd 软链名,进入到该目录,同样对于文件,也可以通过vi 软链名,编辑该文件
    18. history
      1. history 查看所有的历史命令
      2. history 10 查看最近使用的10个命令
      3. !3 执行历史编号为3的命令
    19. sed
      1. 查看文件下的具体行数(第一种方法) sed -n '2p' filename 表示获取file文件中的第2行
      2. 查看文件下的具体行数(第二种方法) awk 'NR==1' filename filename 表示获取file文件中的第1行

时间日期类

  1. date
    1. date 显示当前时间
    2. date +%Y 显示当前年份
    3. date +%m 显示当前月份
    4. date +%d 显示当前哪一天
    5. date "+%Y-%m-%d %H:%M:%S"
  2. cal
    1. cal 查看当前日历
    2. cal 2018 显示2018年的日历

搜索查找类

  1. find
    1. find指令将从指定目录向下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端
    2. find /root -name hello.txt 查找root目录下名称为hello.txt的文件
    3. find /root -user root 查找root目录下用户名为root的文件
    4. find /root -size +20M 查找root目录下查找大于20M的文件(+n大于,-n小于,n等于)
    5. find+路径+ -mtime+ -n 表示查询更改文件n天以内的 find / -mtime -5
    6. find+路径+ -mtime+ +n 表示查询更改文件n天以外的 find / -mtime +5
    7. find / -name *.txt -exec rm -rf {} \ 表示查找根目录下后缀名为.txt的文件,并删除
  2. locate
    1. locate指令可以快速定位文件路径.locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件.locate指令无需遍历整个文件系统.查询速度较快,为了保证查询结果的准确度,管理员必须定期更新locate时刻.
    2. 由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
    3. updatedb命令不存在,需要使用yum进行安装 yum install mlocate
    4. 第一步:updatedb;第二步:locate name.txt
  3. grep和|
    1. grep过滤查找,管道符|表示将前一个命令的处理结果输出传递给后面的命令处理
      1. grep hello test.txt 在某个文件中查找包含hello的内容,只要一行中有hello会把整行显示
      2. grep -niv hello test.txt n显示查找到的内容的行号,i查找时不区分大小写,v反向查找,查找不包含hello的行,c表示匹配的计数
      3. grep -n hello /home/admin -r 查找整个目录中所有文件中包含hello的内容
      4. grep+"正则表达式"+文件名 grep -v "^$" 表示查找不包括空行
        1. ^[a-zA-Z0-9] 表示以任意字母数字开头 grep '^[g]' a.txt 在a.txt中查找以字母g开头的所有行
        2. [a-zA-Z0-9]$ 表示以任意字母数字结尾 grep '[g]$' a.txt 在a.txt中查找以字母g结尾的所有行
        3. [^a-zA-Z0-9] 表示不以任意字母数字 grep "[^g]" a.txt 在a.txt中查找不以g开头的所有行
        4. grep+"正则表达式"+文件名+|+grep+"正则表达式" 使用管道|进行连接查找,可以结合-c或-n或-i或-v使用
        5. grep+-r+test+/root/* 表示从root下查找单词为test的文件
        6. grep+"o*"+文件名 表示会显示所有文件文本(着重会显示≥1个带有o的文本)
        7. grep+"oo*"+文件名 表示会显示带有≥一个o的文件文本
        8. grep+"..o"+文件名 表示会着重显示o前面有两个字符的文件文本
        9. grep+"o\ {2 \ }"+文件名 表示出现2个o的文件文本
        10. grep+"o\ {2,\ }"+文件名 表示出现≥2个o的文件文本
        11. grep+"o\ {2,3\ }"+文件名 表示出现≥2个o≤3个o的文件文本
      5. grep -v grep 为了去除包含grep的进程行,避免影响最终数据的准确性
    2. less name.txt|grep -ni hello 查看name.txt文件找出字符串为hello(-i表示忽略大小写,-n显示行号)

压缩和解压类

  1. gzip与gumzip
    1. gzip name.txt 压缩文件,只能将文件压缩为*.gz文件
    2. gunzip name.txt.gz 解压缩文件命令
  2. zip与unzip
    1. zip -r mydir.zip namedir 将当前目录下的namedir目录压缩成mydir.zip文件
    2. unzip -d /opt/tmp/ mydir.zip 将mydir.zip解压到opt下的tmp目录
  3. tar
    1. tar指令是打包指令,最后打包后的文件是tar.gz的文件
    2. tar -zcvf myfile.tar.gz name.txt name1.txt 将name与name1的文件压缩成myfile.tar.gz包
    3. tar -zcvf mydir.tar.gz namedir/ 将namedir的整个目录下的内容打包成mydir.tar.gz包
    4. tar -zxvf mydir.tar.gz 解压到当前目录下
    5. tar -zxvf mydir.tar.gz -C mydir2/ 解压到指定目录下

文本分析工具

awk的基本介绍

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,就显得非常强大.简单那的来说awk就是把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分在进行各种分析处理.

awk的用法

用法一

# awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

# 基本文件
# 2 this is a test
# 3 Are you like awk
# This's a test
# 10 There are orange,apple,mongo

# 实例
# 每行按空格或TAB分割,输出文本中的1、4项(如果第4项不存在就截掉)
 $ awk '{print $1,$4}' log.txt
 ---------------------------------------------
 2 a
 3 like
 This's
 10 orange,apple,mongo

# 格式化输出
 $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
%-8s表示显示最小长度为8-10个字符串,不足补空格
 ---------------------------------------------
 2        a
 3        like
 This's
 10       orange,apple,mongo

用法二

# 基本语法
awk -F  #-F相当于内置变量FS, 指定分割字符

# 基本实例
# 使用","分割
 $  awk -F, '{print $1,$2}'   log.txt
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple
 # 或者使用内建变量
 $ awk 'BEGIN{FS=","} {print $1,$2}'     log.txt
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple
 # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
 $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
 ---------------------------------------------
 2 this test
 3 Are awk
 This's a
 10 There apple

用法三

# 基本语法
awk -v  # 设置变量
# 基本实例
 $ awk -va=1 '{print $1,$1+a}' log.txt (如果变量a是数字,且$1也是数字,那么会进行运算,如果不是数字,那么$1+a就会直接为a的值)
 ---------------------------------------------
 2 3
 3 4
 This's 1
 10 11
 $ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt (如果变量b不是数字,不管$1是数字还是字母,都作为拼串处理)
 ---------------------------------------------
 2 3 2s
 3 4 3s
 This's 1 This'ss
 10 11 10s

综合案例

# 过滤第一列大于2的行
$ awk '$1>2' log.txt    #命令
#输出
3 Are you like awk
This's a test
10 There are orange,apple,mongo

# 过滤第一列等于2的行
$ awk '$1==2 {print $1,$3}' log.txt    #命令
#输出
2 is

# 过滤第一列大于2并且第二列等于'Are'的行
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt    #命令
#输出
3 Are you

# 输出第二列包含 "th",并打印第二列与第四列
$ awk '$2 ~ /th/ {print $2,$4}' log.txt
---------------------------------------------
this a

# 输出包含 "re" 的行
$ awk '/re/ ' log.txt
---------------------------------------------
3 Are you like awk
10 There are orange,apple,mongo

# 忽略大小写
$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt
---------------------------------------------
2 this is a test
This's a test

# 模式取反
$ awk '$2 !~ /th/ {print $2,$4}' log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo
$ awk '!/th/ {print $2,$4}' log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo

权限类

  1. ll中显示的内容 drwxr-xr-x. 4 root root 52 9月 30 10:48 sitespeed-result 0-9位解释如下:
    1. 第0位确定文件类型(-,d,l,c,b)
    2. 第1-3位确定所有者拥有该文件的权限. ---User
    3. 第4-6位确定所属组拥有该文件的权限. ---Group
    4. 第7-9位确定其他用户拥有该文件的权限. ---Other
  2. rwx作用到文件(可用数字表示:r=4,w=2,x=1)
    1. r代表可读:可以读取,查看
    2. w代表可写:可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
    3. x代表可执行:可以被执行
  3. rwx作用到目录(可用数字表示:r=4,w=2,x=1)
    1. r代表可读:可读取,ls查看目录内容
    2. w代表可写:可以修改,目录内创建+删除+重命名目录
    3. x代表可执行:可以进入该目录
  4. chmod
    1. 通过chmod指令,可以修改文件或者目录的权限
    2. 通过+、-、=给u、g、o、a变更权限(u表示所有者、g表示所有组、o表示其他人、a表示所有人,也就是ugo的总和)
    3. 另一种方式通过数字变更权限 chmod u=rwx,g=rw,o=x mydir等同于chmod 751 mydir

crondtab

crontab进行定时任务的设置

概述

  1. 任务调度:是指系统在某个时间执行的特定的命令或程序
  2. 任务调度分类
    1. 系统工作:有些重要的工作必须周而复始的执行,如病毒扫描等
    2. 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份.
  3. 基本语法 crontab [选项],相关选项如下:
    1. -e 编辑crontab定时任务
    2. -l 查询crontab任务
    3. -r 删除当前用户所有的crontab任务

crond任务调度

  1. 快速入门
    1. 设置任务调度文件 /etc/crontab
    2. 设置个人任务调度
      1. 执行命令 crontab -e
      2. 输入任务到调度文件 */1 * * * * ls -l /etc/>/tmp/to.txt
  2. 参数细节说明
    1. 第一个*表示一小时当中的第几分钟,范围0~59
    2. 第二个*表示一天当中的第几个小时,范围0~23
    3. 第三个*表示一个月当中的第几天,范围1~31
    4. 第四个*表示一年当中的第几个月,范围1~12
    5. 第五个*表示一周当中的星期几,范围0~7(0和7都代表星期日)
  3. 特殊符号的说明
    1. * 代表任何时间,比如第一个*就代表一小时中每分钟都执行一次的意思
    2. , 代表不连续的时间.比如0 8,12,16 * * *这条命令就代表在每天的8点0分,12点0分,16点0分都执行一次命令
    3. - 代表连续的时间范围.比如0 5 * * 1-6这条命令就表示周一至周六的凌晨5点0分执行命令
    4. */n 代表每个多久执行一次命令,比如*/10 * * * *代表每隔10分钟就执行一遍命令
  4. 特定时间执行任务案例
    1. 45 22 * * * 在22点45分执行命令
    2. 0 17 * * 1 每周1的17点0分执行命令
    3. 0 5 1,15 * * 每月1号和15号的凌晨5点0分执行命令
    4. 40 4 * * 1-5 每周一至周五的凌晨4点40分执行命令
    5. */10 4 * * * 每天的凌晨4点,每隔10分钟执行一次命令
    6. 0 0 1,15 * 1 每月1号和15号,每周1的0点0分都会执行命令.注意:星期几和几号最好不要同时出现,因为他们定义的都是天,非常容易让管理员混乱
  5. crond任务调度应用实例
    1. 每隔一分钟,就将当前的日期信息,追加到/tmp/mydate文件中
      1. 先写一个myshell.sh脚本 date >> /tmp/mydate
      2. 添加执行权限 chmod 744 /home/myshell.sh
      3. 定时任务执行 */1 * * * /home/myshell.sh
    2. 每隔1分钟,将当前日期和日历都追加到/home/mycal文件中
      1. 先写一个myshell2.sh脚本 date >> /tmp/mydate2 cal >> /tmp/mydate2
      2. 添加执行权限 chmod 744 /home/myshell2.sh
      3. 定时任务执行 */1 * * * /home/myshell2.sh
    3. 每天凌晨2:00将mysql数据库testdb备份到文件中mydb.bak
      1. 先写一个mysql.sh脚本 /usr/local/mysql/bin/mysqldump -u root -p 123456 testdb > /tmp/mydb.bak
      2. 添加执行权限 chmod 744 /home/mysql.sh
      3. 定时任务执行 0 2 * * * /home/mysql.sh
  6. crond相关指令
    1. crontab -r 终止任务调度
    2. crontab -l 列出当前有哪些任务调度
    3. service crond restart[重启任务调度]

Linux磁盘分区、挂载

分区的方式

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

分区原理介绍

  1. linux来说无论有几个分区,分给哪一个目录使用,归根结底就只有一个根目录,一个独立且唯一的文件结构,linux中每个分区都是用来组成整个文件系统的一部分.
  2. 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硬盘的表示方法一样.

挂载

  1. 查看所有设备挂载情况 lsblk或lsblk -f
  2. 挂载的经典案例 增加一块硬盘为例来熟悉磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念,具体如何增加一块硬盘,操作如下
    1. 虚拟机添加硬盘 虚拟机→设置→硬盘→添加→SCSI→创建新虚拟磁盘→分配内存
    2. 分区 fdisk /dev/sdb→m→n(增加一个新的分区)→p(划一个主分区)→1→默认→默认→w(分区信息写入硬盘并退出)
    3. 格式化 mkfs -t ext4 /dev/sdb1
    4. 挂载 先创建一个目录(mkdir /home/newdisk),其次进行挂载 mount /dev/sdb1 /home/newdisk
    5. 设置可以自动挂载 首先打开文件 vim /etc/fstab,其次复制一份并进行修改 /dev/sdb1 /home/newdisk ext4 defaults 0 0,保存退出后生效命令mount -a(卸载命令 umount /home/newdisk)

磁盘情况查询

  1. 查询系统整体磁盘使用情况 df -lh
  2. 查询指定目录的磁盘占用情况 fu -h /目录,不加目录,默认是当前目录,其他参数如下
    1. -s 指定目录占用大小汇总
    2. -h 带计量单位
    3. -a 含文件
    4. --max-depth=1 子目录深度
    5. -c 列出明细的同时,增加汇总值
  3. 应用实例
    1. 查询/opt目录的磁盘占用情况 du -cah --max-depth=1 /opt
    2. 统计/home文件夹下文件的个数 ls -l /home | grep "^-" | wc -l
    3. 统计/home文件夹下目录的个数 ls -l /home | grep "^d" | wc -l
    4. 统计/home文件夹下文件的个数,包括子文件夹 ls -lR /home | grep "^-" | wc -l
    5. 统计文件夹下目录的个数,包括子文件夹 ls -lR /home | grep "^d" | wc -l
    6. 以树状显示目录结构 tree /

网络通信

  1. ifconfig 查看网卡地址(需要先安装net-tools工具)
  2. hostname 查看主机名称
  3. ping+ip地址 虚拟机与本机通信连接情况(虚拟机命令下+本机ip地址,本机命令下+虚拟机ip地址)
  4. 启动网卡 ifconfig eth0 up
  5. 禁用网卡 ifconfig eth0 down

系统资源查看

  1. top 查看系统CPU、内存使用情况等
  2. top & 后台运行top
  3. ps 查看系统进程
    1. ps -ef | more 分页显示进程信息
    2. ps -ef | grep 1190 显示进程信息并查看进程号为1190
    3. kill -9 进程号 结束进程
  4. free 查看内存情况
  5. netstart an|grep 8080 查看端口号为8080

磁盘管理

  1. df 查看磁盘使用情况
  2. du 查看文件已有容量

系统信息查询

  1. whoami 查看自己是谁
  2. who am i 查看自己账户及登录信息
  3. who 查看当前系统在线用户
  4. last 查看这个月的用户登录信息
  5. hostname 查看主机名
  6. uname [-a] 列出系统信息,加上-a表示列出所有系统信息
  7. id 查看自己以及所属组的信息
  8. groups 查看自己属于哪些组
  9. history 查看历史
    1. history [数字n] 查看最后的n条数据
    2. history | tail -10 显示最后10行历史

网络配置

查看网络ip和网关

  1. 修改ip 点击虚拟网络编辑器
  2. 修改网关 点击NAT设置

linux网络环境配置

  1. 自动获取ip linux启动后会自动获取ip,缺点是每次自动获取的ip地址可能不一样.
  2. 指定固定ip 直接修改配置文件来指定ip,并可以连接到外网
    1. 打开文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0
    2. 修改文件中BOOTPROTO=static
    3. 修改IPADDR=192.168.3.34
    4. 填好网关GATEWAY
    5. 填好域名解析器DNS1

进程管理

基本介绍

  1. 在linux中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号
  2. 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程,例如www服务器
  3. 每个进程都可能以两种方式存在,前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的,后台级才能拿则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行
  4. 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,知道关机才结束.

显示系统执行的进程

ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况,可以不加任何参数.

  1. ps显示的信息选项
    1. PID 进程识别号
    2. TTY 终端机号
    3. TIME 此进程消耗的CPU时间
    4. CMD 正在执行的命令或进程名
  2. ps相关命令
    1. ps -a 显示当前终端的所有进程信息
    2. ps -u 以用户的格式显示进程信息
    3. ps -x 显示后台进程运行的参数
    4. ps -aux 显示的信息比较全面的展示
  3. ps -aux详解
    1. 指令:ps -aux | grep xxx
    2. 指令说明
      1. USER: 用户名称
      2. PID: 进程号
      3. %CPU: 进程占用cpu的百分比
      4. %MEM: 进程占用物理内存的百分比
      5. VSZ: 进程占用的虚拟内存大小(单位:KB)
      6. RSS: 进程占用的无理内存大小(单位:KB)
      7. TT: 终端名称缩写
      8. STAT: 进程状态,其中S-睡眠,s-表示该级才能拿是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
      9. STARTED: 进程的启动时间
      10. TIME:CPU时间,即进程使用CPU的总时间
      11. COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
  4. ps -ef详解
    1. 指令 ps -ef | grep xxx
    2. 指令说明
      1. UID: 用户ID
      2. PID: 进程ID
      3. PPID: 父进程ID
      4. C: cpu用于就散执行优先级的因子,数值越大,表明进程是cpu密集型运算,执行优先级会降低,数值越小,表明进程是I/O密集型运算,执行优先级会提高
      5. STIME: 进程启动时间
      6. TTY: 完整的终端名称
      7. TIME: cpu时间
      8. CMD: 启动进程所用的命令和参数

终止进程

  1. 介绍:若是某个进程执行一般需要停止时,或是已经消了很大的系统资源时,此时可以考虑停止该进程,使用kill命令来完成此项任务.
  2. 基本语法:
    1. kill [选项] 进程号(功能描绘苏:通过进程号杀死进程)
    2. killall 进程名称(功能描绘苏:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时会很有用)
  3. 常用选项 -9 表示强迫进程立即停止

查看进程树

  1. 基本语法 pstree [选项] 可以更加直观的来看进程信息
  2. 常用选项
    1. -p 显示进程的PID
    2. -u 显示进程的所属用户

服务管理

  1. 介绍 服务本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如mysql与sshd防火墙等,因此我们又称为守护进程,是linux中非常重要的知识点
  2. service管理指令
    1. service 服务名 start|stop|restart|reload|status
    2. systemctl(在centos7 不在使用service服务,而是systemctl)
  3. 细节
    1. 关闭或者启用防火墙后,立即生效
    2. 这种方式只是临时生效,当重启系统后,还是会回归到以前对服务的设置
    3. 如果希望设置某个服务自启动或关闭永久生效,要使用chkconfig指令.
  4. chkconfig指令
    1. 介绍 通过chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭
    2. 查看服务 chkconfig --list|grep xxx
    3. 查看指定服务 chkconfig 服务名 --list(等价于chkconfig --list|grep 服务名)
    4. 将network服务在运行级别为5的情况下,不要自启动 chkconfig --level 5 network off
  5. 动态监控进程
    1. 介绍 top与ps命令很相似,都是用来显示正在执行的进程.最大的区别就是在于top在执行一段时间可以更新正在运行的进程.
    2. 基本语法 top [选项]
      1. -d 秒数 指定top命令每隔几秒更新,默认是3秒在top命令的交互模式当中可以执行的命令
      2. -i 使top不显示任何闲置或者僵死进程
      3. -p 通过指定监控进程ID来查看监控某个进程的状态
    3. 交互操作说明
      1. P 以cpu使用率排序,默认就是此项
      2. M 以内存的使用率排序
      3. N 以PIO排序
      4. q 退出top
  6. 监控网络状态
    1. 基本语法 netstat [选项]
      1. -an 按一定顺序排列输出
      2. -p 显示哪个进程在调用
    2. 检测主机连接命令 ping 地址

RPM包管理

  1. 介绍 一种用户互联网下载包的打包及安装工具,它包含在某些Linux分发版中,生成具有.RPM扩展名的文件.RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat标志,但是理念是通用的,Linux的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准了.
  2. rpm包的简单那查询指令 rpm -qa | grep xx
  3. rpm包名基本格式 firefox-45.0.1-1.el6.centos.x86_64.rpm
    1. 名称: firefox
    2. 版本号: 45.0.1-1
    3. 适用操作系统: el6.centos.x86_64
  4. rpm包其他查询指令
    1. rpm -qa: 查询所安装的所有rpm软件包
    2. rpm -qa | more
    3. rpm -q firefox: 查询谷歌包是否安装
    4. rpm -qi firefox: 查询谷歌包信息
    5. rpm -ql firefox: 查询谷歌包中的文件
    6. rpm -qf /etc/passwd: 查询文件所属的软件包
  5. rpm包的卸载
    1. 基本语法 rpm -e rpm包的名称
    2. 如果其他软件包依赖于卸载的软件包,卸载时会产生错误信息
    3. 如果就是要删除指定的rpm包,可以增加参数-nodeps就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行.
  6. rpm包的安装
    1. 基本语法 rpm -ivh rpm包全路径名称
    2. 参数说明
      1. i=install 安装
      2. v=verbose 提示
      3. h=hash 进度条

yum管理

  1. 介绍 yum是一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包.
  2. yum的基本指令
    1. 查询yum服务器是否有需要安装的软件 yum list | grep xx
    2. 安装指定的yum包 yum install xxx 下载安装
    3. 写在指定的yum包 yum uninstall xxx

shell入门

  1. 通过编写shell脚本可以进行程序或者是服务器的维护.
  2. 对于测试人员来讲,需要编写shell程序,通过定时任务来实施对服务器进行监控.
  3. shell是一个命令行解释器,为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序.

shell脚本的执行方式

  1. 脚本格式要求
    1. 脚本以#!/bin/bash开头
    2. 脚本需要有可执行文件
  2. 执行shell脚本(root下myshell.sh脚本)
    1. 第一种: 先赋予权限,chmod 777 myshell.sh,在执行shell ./myshell.sh
    2. 第二种:没有权限的情况下(但是不推荐) sh ./myshell.sh

shell输出的两种方式

  1. echo
  2. printf(优点:printf的脚本比使用echo移植性好)

基本介绍printf

  1. printf 命令模仿 C 程序库(library)里的 printf() 程序。
  2. printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
  3. printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。

基本实例

# 常规实例
echo "Hello, Shell"
printf "Hello, Shell\n"

# 特殊实例
#!/bin/bash

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

`%s`、`%c`、`%d`、`%f`都是格式替代符,`%s`输出一个字符串,`%d`整型输出,`%c`输出一个字符,`%f`输出实数,以小数形式输出.
`%-10s`指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来
`%-4.2f`指格式化为小数,其中.2只保留2位小数.

shell变量

shell变量的介绍

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

shell变量的定义

  1. 定义变量: 变量=值
  2. 撤销变量: unset 变量
  3. 声明静态变量: readonly 变量,注意不能unset

定义变量的规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
  2. 等号两侧不能有空格
  3. 变量名称一般习惯为大写

将命令的返回值赋给变量

  1. A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A
  2. A=$(ls -la) 等价于反引号

设置环境变量

  1. 基本语法
    1. export 变量名=变量值(功能描述:将shell变量输出为环境变量)
    2. source 配置文件(功能描述:让修改后的配置信息立即生效)
    3. echo $变量名(功能描述:查询环境变量的值)
  2. 快速入门
    1. 在/etc/profile文件中定义TOMCAT_HOME环境变量
    2. 查看环境变量TOMCAT_HOME的值
    3. 在另外一个shell程序中使用TOMCAT_HOME
    4. 在输出JAVA_HOME环境变量前,需要让其生效 source /etc/profile

shell位置参数变量

  1. 介绍 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:./myshell 100 200,这就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息.
  2. 基本语法
    1. $n(功能描述:n为数字,$0代表命令本身,$1-$9代表第1到第9个参数,10以上的参数需要用大括号包含,如${10})
    2. $*(功能描述:这个变量也代表命令行中所有的参数,$*把所有的参数看成一个整体)
    3. $@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
    4. $#(功能描述:这个变量代表命令行中所有参数的个数)
  3. 应用实例 编写一个shell脚本myshell.sh,在脚本中获取到命令行的各个参数信息
# 注意的是`$0`打印出来的是命令行,不作为参数.执行shell需要加上参数 ./myshell 10 20 30
#!/bin/bash
echo "$0 $1 $2 $3"
echo "$*"
echo "$@"
echo "参数个数=$#"

shell预定义变量

  1. 基本介绍 就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用.
  2. 基本语法
    1. $$(功能描述:当前进程的进程号)
    2. $!(功能描述:后台运行的最后一个进程的进程号)
    3. $?(功能描述:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行,如果这个变量的值为非0(具体是那个数,由命令自己决定),则证明上一个命令不正确)
  3. 应用实例 在一个shell脚本中简单使用预定义变量
#!/bin/bash
echo "当前的进程号:$$"
# 后台的方式运行myshell.sh
./myshell.sh &
echo "最后的进程号:$!"
echo "执行的值是:$?"

shell运算符

  1. 基本语法
    1. "$((运算式))""$[运算式]"
    2. `expr m + n` 需要注意的是expr运算符间要有空格
    3. `expr m - n`
    4. expr \*/% 乘除取余
  2. 应用实例
    1. 计算(2+3)*4的值
    2. 求出命令行的两个参数的和
# 第一种方式计算出(2+3)*4先进行计算,在执行
A="$(((2+3)*4))"
echo "$A"

# 第一种方式计算出(2+3)*4先进行计算,在执行
A="$[(2+3)*4]"
echo "$A"

# 第三种方式计算出(2+3)*4
B=`expr 2 + 3`
result1=`expr $B \* 4`
echo "$result1"

# 求出命令行的两个参数的和,第一步编写脚本,第二步执行命令 ./myshell.sh 10 20
C=$[$1+$2]
echo "$C"

shell中&&和||的用法

  1. &&前面的命令执行成功后会执行&&后面的命令
  2. ||表示的是前面的命令执行不成功,就会执行||后面的命令
# 如果不存在,就创建文件夹
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
# 如果存在,就删除文件夹
[ -d "$BACKUP/$DATETIME" ] && rmdir -p "$BACKUP/$DATETIME"

shell中cut的用法

cut是以每一行为一个处理对象,这种机制与sed是类似的.
cut命令主要是接受三个定位方法,也就是有三个选项:

  1. 字节 -b
  2. 字符 -c
  3. 设置间隔符号 -d(该选项默认间隔符就是制表符,所以当你就是使用制表符的时候,完全可以省略-d选项,如果设定一个空格为间隔符,可以-d ""即可)
  4. 域 -f
# 如果想获取who中每一行的第3个字节
who | cut -b 3
# 如果我想提取第3、4、5和第8个字节
who | cut -b 3-5,8
# 截出获取who中一行中的前三个字节(包括第三个)
who | cut -b -3
# 接触获取who中一行中的第三个字节之后的字节(包括第三个)
who | cut -b 3-
# 在观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。于是有如下的方式
cat /etc/passwd|head -n 5|cut -d : -f 1 表示查看etc/passwd下的前五条信息,并按照间隔符号冒号来截取每个第一个域
# 遇到空格和制表符,如何分辨?
sed -n l tab_space.txt(如果是制表符会显示`\t`,如果是空格,就会原样显示)

shell判断语句

  1. 两个整数比较
    1. =ne不等于
    2. -lt小于
    3. -le小于等于
    4. -eq等于
    5. -gt大于
    6. -ge大于等于
  2. 按照文件权限进行判断
    1. -r有读的权限
    2. -w有写的权限
    3. -x有执行的权限
  3. 按照文件类型进行判断
    1. -f文件存在并且是一个常规的文件
    2. -e文件存在
    3. -d文件存在并是一个目录
    4. -s文件存在且至少有一个字符串
    5. -c如果文件存在且为字符型特殊文件则为真
    6. -b如果文件存在且为块特殊文件则为真
  4. 按照字符串比较
    1. =等于则为真
    2. !=不相等则为真
    3. -z字符串的长度为0,则为真
    4. -n字符串的长度不为0,则为真
  5. 应用实例
# 案例1:"ok"是否等于"ok",注意的是:在[]里面的前后需要加空格,习惯的可以在字符串以及判断符前后都有空格
if [ "ok" = "ok" ]
then
        echo "相等"
fi

# 案例2:判断23是否大于22
if [ 23 -gt 22 ]
then
        echo "确实大于"
fi

# 案例3:判断文件夹下是否有myshell1.sh
if [ -e /root/myshell1.sh ]
then
        echo "是存在的"
fi

shell流程控制语句

流程控制if

# 基本语法 单if
if [ 条件判断式 ]
then
      程序
fi

# if elif
if [ 条件判断式 ]
then
      程序
elif [ 条件判断式 ]
      程序
fi

# 案例:编写一个shell程序,如果输入的参数,大于等于60,则输出"及格",如果小于60,则输出"不及格"
if [ $1 -ge 60 ]
then
        echo "及格了"
elif [ $1 -lt 60 ]
then
        echo "不及格"
fi

流程控制case

# 基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
省略其他分支
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

# 案例:当命令行参数为70的时候,输出需要该值,如果值为60,输出该值无用,如果值为其他的值,输出最终结果
case $1 in
"70")
        echo "需要该值"
;;
"60")
        echo "该值无用"
;;
*)
        echo "最终结果"
;;
esac

流程控制for

# 基本语法1
for 变量 in 值1,值2,值3...
do
      程序
done
# 实例:打印命令行输入的参数(输出结果:10 20 30)
for i in "$*"
do
        echo "结果:$i"
done

# 实例:打印命令行输入的参数(输出结果:10,输出结果:20,输出结果:30)
for i in "$@"
do
        echo "结果:$i"
done

# 基本语法2
for((初始值;循环控制条件;变量变化))
do
      程序
done
# 实例:从1加到100的值输出显示
SUM=0
for((j=1;j<=100;j++))
do
        SUM=$[ $SUM + $j ]
done
        echo "$SUM"

流程控制while

# 基本语法
while [条件表达式]
do
      程序
done

# 实例:从命令行输入一个数n,统计从1+...+n的值是多少
SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[ $SUM + $i ]
        i=$[ $i + 1 ]
done
echo "$SUM"

shell读取控制台输入

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

# 应用实例
1. 读取控制台输入的一个num值
2. 读取控制台输入的一个num值,在10秒内输入

read -p "请输入你要输入的数字:" NUM1
echo "你输入的值是NUM1=$NUM1"

read -t 10 -p "请输入你要输入的数字:" NUM2
echo "你输入的值是NUM2=$NUM2"

shell系统函数

# basename基本语法
功能:返回完整路径最后/的部分,常用于获取文件名(功能描述:basename命令会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来)
basename[pathname][suffix]
basename[string][suffix]
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
# 实例:请返回/root/test.txt的"test.txt"部分
basename /root/test.txt 返回test.txt
basename /root/test.txt .txt 返回test

# dirname基本语法
功能:返回完整路径最后/的前面的部分,常用于返回路径部分(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
dirname 文件绝对路径
实例:请返回/root/test.txt的/root
dirname /root/test.txt

自定义函数

# 基本语法
function funname()
{
      程序
}
实例:计算两个数的和
function getSum(){
        SUM=$[$n1+$n2]
        echo "和为:$SUM"
}
read -p "请输入第一个值:" n1
read -p "请输入第二个值:" n2
getSum $n1 $n2

shell编程综合案例

需求分析

  1. 每天凌晨2:10备份数据库znjt到/root/myshell
  2. 备份开始和备份结束能够给出相应的提示信息
  3. 备份后的文件要求以备份时间为文件名,并打爆成.tar.gz的形式,比如:2018-03-12_230201.tar.gz
  4. 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除.
BACKUP=/root
# 获取当前时间
DATETIME=$(date+%y_%m_%d_%H%M%S)

# 数据库地址、用户名、密码
HOST=localhost
DB_USER=root
DB_PWD=""
DATABASE=myshell
# 创建备份的路径,如果路径存在就是用,不存在就添加
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
# 执行mysql的备份数据库的指令
mysqldump -u $DB_USER -P $DB_PWD --host=$HOST $DATABASE | gzip>$BACKUP/$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 {} \
posted @ 2020-11-11 22:43  SunFree  阅读(200)  评论(0编辑  收藏  举报