大数据学习 - Linux系统操作入门

Linux学习目录

    • DAY01
      • 1 VMware安装LinuxCentOS操作系统
      • 2 配置网卡
      • 3 学习基本指令
    • DAY02
      • 1 用户的管理
        • 1.1 操作指令
          • useradd
          • usermod (与useradd基本相同)
          • userdel
      • 2 用户组管理
        • 2.1 操作指令
          • groupadd
          • groupmod
          • groupdel
      • 3 用户组的身份切换
        • 3.1 操作指令
          • newgrp:
      • 4 用户的密码
        • 4.1 操作指令
          • passwd :
      • 5 用户的身份切换
        • 5.1 操作指令
          • su:
      • 6 权限
        • 6.1 逻辑权限
          • 6.1.1 操作指令
            • chmod:
            • chown:
        • 6.2 物理权限
          • 6.2.1 设置权限
            • chattr:
          • 6.2.2 查看权限
            • lsattr:
        • 6.3 超级权限
            • sudo
      • 7 挂载
        • 7.1 概念
        • 7.2 命令
          • 7.2.1 挂载
            • mount:
          • 7.2.2 卸载
            • umount:
      • 8 网络
        • 8.1 网络基本知识
          • 8.1.1 OSI七层和TCP/IP四层的关系
        • 8.2 路由&交换
          • 8.2.1 交换机
          • 8.2.2 路由器
        • 8.3 网络地址
          • 8.3.1 私有地址
          • 8.3.2 ip地址
          • 8.3.3 子网掩码
          • 8.3.4 网关
          • 8.3.5 DNS
    • DAY03
        • 8.4 虚拟机的连接方式
        • 8.5 远程管理
          • 8.5.1 远程拷贝
          • 8.5.2 远程登录
      • 9 免密登录 (*)
        • 9.1 非对称加密算法-rsa
        • 9.2 使用证书进行注册(加密)
        • 9.3 关于私钥证书的加密
      • 10 wget
      • 1 进程
      • 1 进程
        • 1.1 查看进程
          • 1.1.1 静态
            • ps
            • pstree (进程树)
          • 1.1.2 动态
            • top
        • 1.2 进程的管理
          • 1.2.1 单进程管理
            • kill
          • 1.2.2 多进程管理
            • killall
          • 1.2.3 知识拓展
      • 2 系统自带监控
        • 2.1 netstat 网络监控 (*)
      • 3 任务管理
        • 3.1 概念
        • 3.2 如何将前台任务放置后台
        • 3.3 查看后台的任务
        • 3.4 将后台任务调到前台
          • fg
        • 3.5 改变后台任务的运行状态
          • bg
    • DAY04
      • 4 vim命令
        • 4.1 介绍
      • 5 压缩和打包
        • 5.1 压缩和打包的概念
          • 5.1.1 压缩
          • 5.1.2 打包
          • 5.1.3 Linux常见的压缩文件后缀名
        • 5.2 压缩命令
          • 5.2.1 gzip(了解)
          • 5.2.2 bzip2(了解)
          • 5.2.3 查看压缩文件中的内容
        • 5.3 打包、解包命令
          • 5.3.1 tar
      • 6 软件管理-RPM
        • 6.1 优点
        • 6.2 缺点
        • 6.3 默认路径
      • 7 软件管理-YUM
        • 7.1 yum的查询
      • 8 防火墙
        • 8.1 临时
        • 8.2 永久
      • 9 Shell基础
        • 9.1 概念
        • 9.2 shell中的变量
        • 9.3 读取变量
        • 9.4 将普通变量设置为系统环境变量
        • 9.5 变量的设置规则
      • 10 变量的赋值 (重点)
        • 10.1 变量的值由命令提供
        • 10.2 变量增加额外内容
        • 10.3 把命令的结果赋值给变量的两种形式
      • 11 数据重定向
        • 11.1 概念
      • 12 命令执行判断
        • 12.1 $?命令回传值
    • DAY05
      • 1 Shell基础命令
        • 1.1 grep - 管道符
        • 1.2 find - 查找命令
        • 1.3 sed
        • 1.3 grep
        • 1.4 tail
        • 1.5 sort
        • 1.6 cut
        • 1.7 histroy - 历史命令
      • 2 Shell高级 - shell脚本
        • 2.1 交互式数值计算脚本
        • 2.2 test判断
        • 2.3 [] 判断符号
        • 2.4 shell脚本参数
        • 2.5 if - 条件判断
          • 2.5.1 if的基本语法:
          • 2.5.2 文件/文件夹(目录)判断
          • 2.5.3 字符串判断
          • 2.5.4 数值判断
          • 2.5.5 复杂逻辑判断
          • 2.5.6 案例
      • 3 函数
        • 3.1 命令
      • 4 shell脚本的检查
      • 5 循环语句
        • 5.1 for
        • 5.2 while
      • 6 自动部署,无人值守

DAY01

1 VMware安装LinuxCentOS操作系统

2 配置网卡

eth0之类的配置,静态ip配置 setup

3 学习基本指令

如:ls, cd, rm, mv

特别的:

su:切换用户

​ 命令:# bash

​ su - tom

DAY02

1 用户的管理

对一个用户的修改其实就是对3个文件的内容进行修改:

​ passwd、shadow、group

1.1 操作指令

增加:

useradd
  • 刚刚创建的账户,默认是锁定状态,不能登录

  • 语法:useradd [选项] {UserName}

  • 选项:

    命令 解释
    -c comment 对一个账户进行描述,也可以当作备注
    -d 目录 指定用户主目录,如果目录不存在,则同时使用-m选项,可以创建主目录
    -g 用户组 指定用户所属的用户组。
    -G 用户组,用户组 指定用户所属的附加组。
    -s Shell文件 指定用户的登录Shell,nologin的shell程序是不允许登录。
    -u 用户号 指定用户的用户号

    所属用户组:通常情况下,指的是一个用户的主组(主工作组)。

    所属附加组:一般指的是,一个账户已有一个主组,又给账户增加了一个或多个的组,这些就被称之为附加组。

    创建一个账户的时候,如果没有指定他的主组信息,那么系统将默认为其创建一个同名的用户组,该账户的主组就是同名的用户组。

  • 案例:

      1. 创建一个普通用户

      命令:# bash

      ​ useradd tom

      大数据学习 - Linux系统操作入门_第1张图片

    • 2.创建一个用户,并指定它的家目录

      • 1)先创建父目录文件夹

      • 2)命令:# bash

        ​ useradd -d /big1908/lwchang -m lwchang

      大数据学习 - Linux系统操作入门_第2张图片

    • 3.创建一个账户,为其指定主组tom

    命令:# bash

    ​ useradd -g tom piao

    -g 命令是为用户指定一个用户组,-g 主用户组,用户组 多出来的用户组为附加组,一般是已有用户组的用户才添加附加组,此时tom为主用户组,piao为附加组

大数据学习 - Linux系统操作入门_第3张图片
查看用户组,附加组piao不会加入group中

image-20210115180317543

image-20210115180430762

  • 4.创建一个账户,为其指定附加组是tom、jerry

命令:# bash

​ useradd -G tom,jerry cao

大数据学习 - Linux系统操作入门_第4张图片

查看group中,创建了cao用户组

大数据学习 - Linux系统操作入门_第5张图片

2021-01-15_181356

  • 5.修改用户的shell文件,使其不能登录系统。

命令:# bash

​ useradd -s /sbin/nologin tom1

大数据学习 - Linux系统操作入门_第6张图片

  • 6.在创建用户的设置用户的UID

命令:# bash

​ useradd -u 10000 alex

大数据学习 - Linux系统操作入门_第7张图片

修改:

usermod (与useradd基本相同)
  • 语法:usermod[选项]{UserName}

  • 选项:

    命令 解释
    -c comment 对一个账户进行描述,也可以当作备注
    -d 目录 指定用户主目录,如果目录不存在,则同时使用-m选项,可以创建主目录
    -g 用户组 指定用户所属的用户组。
    -G 用户组,用户组 指定用户所属的附加组。
    -s Shell文件 指定用户的登录Shell,nologin的shell程序是不允许登录。
    -u 用户号 指定用户的用户号
  • 案例:

    • 1.创建用户,并使用usermod修改

    命令:# bash

    ​ usermod -d /jack -m -g root -G tom,jerry -s /bin/sh -u 506 jack

    解释:

    命令 注释
    usermod 修改
    -d /jack-m 指定用户的家目录 由于/jack目录不存在,所以-m
    -g root 用户的主组信息(主要工作部门)
    -G tom,jerry 两个附加组
    -s /bin/sh 用户的shell程序。登录系统之后,系统为其分配的程序。
    -u 506 指定账户的UID
    jack 指明哪个账户被执行修改

删除:

userdel
  • 语法:userdel [选项]{userName}
  • 选项:
选项 注释
-r 删除账户的同时,一并删除账户的所有资料信息

2 用户组管理

2.1 操作指令

增加:

groupadd
  • 语法:groupadd [选项] {GroupName}

  • 选项:

选项 注释
-g 指定GID
-o 允许新建组的ID与系统中已存在的组的GID相同
  • 案例:

    • 1.创建A,B用户组,并添加a1,b1用户

    大数据学习 - Linux系统操作入门_第8张图片

修改:

groupmod
  • 语法:groupmod [选项] {GroupName}
  • 选项:
选项 注释
-g 指定GID
-o 允许新建组的ID与系统中已存在的组的GID相同
-n 用来修改groupName

删除:

groupdel
  • 语法:groupdel [选项] {GroupName}

3 用户组的身份切换

3.1 操作指令

newgrp:
  • 语法:newgrp {GroupName}

  • 作用:newgrp命令用来将一个账户中的组身份进行切换。切换组身份的前提就是,该账户必须是对应组的成员。

  • 示例:大数据学习 - Linux系统操作入门_第9张图片

4 用户的密码

4.1 操作指令

passwd :
  • 语法:passwd [选项] {UserName}
  • 选项:
选项 注释
-l 锁定
-u 解锁
-d 删除密码
  • 在Linux系统中。
  • 除了管理员意外,账户只能修改自己的密码。
  • 普通账户修改密码时,需要满足高强度密码的要求。
  • 管理员修改密码时,密码可以时任意字符,不用满足高强度密码的要求。
  • 高强度密码,通常指的是,密码长度满足8位(含8位)以上,密码中包含 大小写字母,数字,特殊字符。 如:as12AS!@
  • 案例:
    • 1.修改用户密码

大数据学习 - Linux系统操作入门_第10张图片

5 用户的身份切换

5.1 操作指令

su:
指令 注释
su {UserName} 依然使用当前账户的环境变量
su - {UserName} 标识切换用户之后,使用对应的账户的环境变量
su - 命令可以直接切换到root账户,需要输入root的密码

6 权限

6.1 逻辑权限

在Linux系统中,把所有的内容都当作文件处理,文件夹被当作是目录文件。硬盘被当作时块设备文件。

所有文件都固定有三组权限,

第一组永远是用户的权限,

第二组永远是组的权限,

第三组永远是其他人的权限。

每一个文件都有10个标识位,第一个标识位用来标识该文件的类型,例如,普通文件或目录文件。

权限标识符的位置,永远都不会发生变化

标识位 注释
d 表示目录文件
- 表示普通文件

解释:
除了第一个以外,剩余的9个标识位,每三个为一组(对应上面的第一、二、三组)。

每一组中的三个标识分别是:

​ 第一个:读

​ 第二个:写

​ 第三个:执行

读、写、执行分别又对应了字符、数字的权限表示方法:

字符 权限 数字
r 4
w 2
x 执行 1

大数据学习 - Linux系统操作入门_第11张图片

6.1.1 操作指令

修改权限的命令是:

chmod:
  • chmod [选项] file | dir
  • 选项:
选项 注释
-r 一般用作目录时是使用
  • 注意:
    • 如果修改文件时的权限过于复杂,使用数字权限比较便捷
    • 如果修改文件时的权限三组相同,使用字符权限比较便捷

修改文件属主和属组的命令:

chown:
  • 属主:指的是文件的拥有者
  • 属组:指的是文件所属的用户组
  • 语法:chown User.Group file | dir

6.2 物理权限

如果被物理权限修饰的文件,即使是root账户也无权进行删除、修改的操作。

6.2.1 设置权限
chattr:
  • 命令可以用来锁定某个文件不能被修改。系统内核2.6以上的版本支持。

  • 可以通过命令来修改文件的物理属性从而提高系统的安全性。

  • 但不能改保护 /、/dev、/tmp、 /var目录

  • 命令用法:

    • chattr [-RVf] [-v version] [mode] files
  • 选项:

选项 解释
-a 让文件或目录仅供附加用途(通常用于日志文件的修饰)
-i 不得任意更改文件或目录(通常用于配置文件的修饰)
-s 保密性删除文件或目录(直接删除硬盘上的数据)
-S 即时更新文件或目录(直接存入硬盘计算机工作原理其中之一是写入缓存,在写入硬盘)
-u 预防意外删除(数据依然存在硬盘上,用于数据恢复)
-R 递归处理,将指令目录下的所有文件及子目录一并处理
-v<版本编号> 设置文件或目录版本
-V 显示指令执行过程
+<属性> 开启文件或目录的该项属性(表示开启权限)
-<属性> 关闭文件或目录的该项属性(表示关闭权限)
=<属性> 指定文件或目录的该项属性
  • 案例:

    • #bash

      ​ touch hadoop.conf

      ​ chattr +i hadoop.conf

    以上命令执行完成之后,无论是删除还是修改,或者追加的操作都不允许。

    • #bash

      ​ touch hadoopRun.log

      ​ chattr +a hadoopRun.log

    以上命令执行完成之后,除了追加的操作之外,都不允许进行操作

    ​ echo “123” >> hadoopRun.log

6.2.2 查看权限
lsattr:
  • 语法:lsattr [-Rad] [files…]
  • 选项:
选项 解释
-R 递归显示目录下所有子目录和文件的属性
-a 显示所有文件的属性信息,包括以 . 开头的文件
-d 显示目录的属性,而不是目录下的文件的属性
  • 案例:
    • 查看test目录下文件的属性
      • lsattr -R test/
    • 查看test目录的属性
      • lsattr -d test

6.3 超级权限

通常来说,普通账户不具备的权限太多,在工作时非常的不方便,但又不能让太多程序员知道root账号的密码,所以有了普通用户的超级权限——sudo

sudo
大数据学习 - Linux系统操作入门_第12张图片

7 挂载

7.1 概念

为什么要挂载,因为文件系统不能够被用户直接使用。需要有一个特定的入口,Windows中的入口被称为盘符,Linux系统中的入口被称为目录

将文件系统和目录(盘符)结合的动作,叫做挂载。

挂载的意义就是为读取文件系统中的内容。

7.2 命令

7.2.1 挂载
mount:
  • 语法:mount [文件系统] [目录]

  • 案例:

    • #bash

      ​ #注意,cd-rom这个目录时手动创建的,不一定要这个名字

      ​ mount /dev/cdrom /cd-rom

7.2.2 卸载
umount:
  • 语法:umount [目录]

    • 卸载命令后面所跟的目录时已经被文件系统使用的目录。
    • 卸载时,如果提示下列错误,则表示该内容正在被使用。

    大数据学习 - Linux系统操作入门_第13张图片

8 网络

8.1 网络基本知识

8.1.1 OSI七层和TCP/IP四层的关系

七层结构记忆方法:应、表、会、传、网、数、物

OSI七层网络模型 TCP/IP四层概念模型 对应网络协议
应用层(Application) 应用层 HTTP、TFTP、FTP、NFS、WAIS
表示层(Presentation) 应用层 Telnet、Rlogin、SNMP、Gopher
会话层(Session) 应用层 SMTPDNS
传输层(Transport) 传输层 TCP、UDP
网络层(Network) 网络层 IP、ICMP、ARP、RARP、AKP、UUCP
数据链路层(Data Link) 数据链路层 FDDI、Ethernet、Arpanet、PDN、SLIP、PPP
物理层(Physical) 数据链路层 IEEE 802.1A、IEEE 802.2 到 IEEE 802.11

8.2 路由&交换

交换机负责内容,路由器负责外网。

8.2.1 交换机

交换机的作用是为了取代HUB设备(HUB设备因为数据广播的特性,基本被淘汰了),为电脑组件了局域网。

8.2.2 路由器

负责代替PC拨号,接替PC与光猫的通信。负责将内网(局域网)的数据与公网上的服务器或其他PC进行数据的通信。

8.3 网络地址

8.3.1 私有地址

​ a类:10.x.x.x

​ b类:172.16.x.x - 172.31.x.x

​ c类:192.168.x.x

8.3.2 ip地址

ip地址的作用,就是为了让PC或其他设备在网络中有一个通信地址。

IP地址中分为网络位和主机位。(想要搞清楚一个IP地址中的网络位和主机位,就必须要结合子网掩码来验证)

  • 网络位:
  • 主机位:
8.3.3 子网掩码
  • 作用:就是用来划分一个ip地址中的网络位和主机位。
  • 用法:将IP地址和子网掩码都换算成二进制,做与的运算。子网掩码不能单独存在,必须配合IP地址使用。
  • 类型:
    • 255.0.0.0 -> 8位子网
    • 255.255.0.0 -> 16位子网
    • 255.255.255.0 -> 24位子网
  • 案例:
    • 192.168.1.100 => 11000000 10101000 00000001 01100100
    • 255.255.255.0 => 11111111 11111111 11111111 00000000
    • 192.168.1.0 => 11000000 10101000 00000001 00000000
    • 算出的结果是192.168.1.0,其中192.168.1是网络位,0是主机位
8.3.4 网关

一个网络的关口,内网中数据想要发送到公众网络中去,就必须经过这个网络关口,由于历史中担任网络关口的设别叫做路由器,所以现在基本上提到网关,就是指路由器。

8.3.5 DNS

dns服务器的作用就是为了帮助所有的电脑主动解析域名的IP地址。

DAY03

8.4 虚拟机的连接方式

连接方式 解释 优点 缺点
VMnet8 网络地址转换模式,可以使虚拟机不必参照宿主主机的网络环境。因为虚拟机的网络地址是由VMNet8网卡提供的。 不依靠宿主主机网络,在任何地方都可以提供一个稳定可靠的ip地址 除宿主主机外的其他主机想要访问虚拟机的比较麻烦。
桥接模式 在此环境下,因为虚拟机使用的是和宿主主机相同的网络环境,每当宿主主机变更了网络环境时,那么,虚拟机也必然需要换IP地址。 与宿主主机相同网络的任意主机,只要拥有账户和密码,都能直接访问到它。 虚拟机的网络完全依靠宿主主机,宿主主机没有网络时,虚拟主机也没有网络。

8.5 远程管理

8.5.1 远程拷贝

从本地拷贝数据到远程的服务器:

  • 语法:scp [-r] {path}/file | dir {UserName}@Host_ip:/{path}

  • 案例:

    • 拷贝文件到远程的服务器

      • 命令:

        ​ # bash

        ​ scp file1 root@cloud:/home

        ​ # cloud是主机名,在本机的hosts文件中已配置好地址

    • 拷贝目录到远程的服务器。

      • 命令:

        ​ # bash

        ​ scp -r /root/ root@cloud:/home

    • 示例图:

    大数据学习 - Linux系统操作入门_第14张图片

    2021-01-18_112922

8.5.2 远程登录

登录命令:

​ ssh {UserName}@Host_IP

​ 示例:ssh [email protected]

9 免密登录 (*)

在公司里面,绝大部分都在使用Linux操作系统。

9.1 非对称加密算法-rsa

​ 在生成的时候,会产生两个证书 - 密钥对。

密钥对 暗号 rsa 作用
公钥 天王盖地虎 id_rsa.pub 负责加密内容
密钥 上山打老虎 id_rsa 负责解密内容
文件 解释
known_hosts 用来记录本机曾访问过的主机地址。
authorized_keys 文件内容记录了来访服务器的公钥证书文件内容

生成证书的命令:

​ ssh-keygen

​ 第一次回车,进入证书生成程序。

2021-01-18_115018

​ 第二次回车,确认证书的存放位置

2021-01-18_115250

​ 第三次回车,要求对私钥证书文件设置密码(若不输入则为空密码)

2021-01-18_115451

​ 第四次回车,确认密码。

大数据学习 - Linux系统操作入门_第15张图片

​ 注:证书生成之后,配对的公、私钥是唯一的,如果其中一个丢失,不可能在找回。

9.2 使用证书进行注册(加密)

语法:ssh-copy-id {UserName} @Host_IP

解释:注册的过程是将本机中的公钥证书文件内容发送到远程服务器,远程的服务器接收证书内容后,会将内容记录在authorized_keys文件中,此后任意一台具有配对生成时的私钥证书文件者,都可以免密登录该服务器。

9.3 关于私钥证书的加密

加密证书的方式,通常时为了用证书通过xshell类型的工具管理服务器。

不加密证书的方式,通常是为了集群之间进行免密登录的。

10 wget

Linux系统自带的一个下载工具。功能较强 – 具备端点下载,也支持批量下载,后台下载,限速下载等功能。

网络下载:
大数据学习 - Linux系统操作入门_第16张图片

大数据学习 - Linux系统操作入门_第17张图片

1 进程

1 进程

概念:进程是程序执行过程,也是具体的实现。

在Windows中可以通过任务管理器来结束某一个进程。

当操作系统开始启动时就已经产生了进程。

不同的操作系统的进程也会有差异。

如Linux,启动的第一个进程就是init。

当系统启动完毕之后,在系统中任意操作都会启动一个进程。只不过有些进程在执行完成后立即结束。

进程分为两种:

进程类型 解释
临时进程 部分程序执行之后立即结束,如ls
持久进程 vi编辑器,此类程序,需要认为的关闭才会停止。

在Linux系统中,并没有像Windows系统中的任务管理器那么方便。所以需要在Linux系统查询进程时,需要学习一下的命令。

1.1 查看进程

1.1.1 静态
ps
  • 语法:ps [选项]
  • 选项:
选项 解释
aux 当前系统所有的进程(非常常用)
ef 把进程之间的关系显示出来
axjf 显示全部进程以及他们间的关系
  • 执行命令:ps aux ,结果如图

大数据学习 - Linux系统操作入门_第18张图片

进程相关的名词解释:

选项 含义
USER 该process属于哪个使用者
PID 该process的程序标识符(进程ID)
%CPU 该process使用掉的CPU资源百分比
%MEM 该process所占用的物理内存百分比
VSZ 该process使用掉的虚拟内存量(Kbytes)
RSS 该process占用的物理的内存量(Kbytes)
TTY 该process时在哪个终端机上面运作,若与终端机无关则显示 ?,另外,tty1-tty6是本机上面的登入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序。(pts表示虚拟终端,例如pts/1 pts/2等)
STAT 该进程目前的状态,状态显示与 ps -l 的 S 旗标相同(R/S/D/T/Z)(详细见下表)
START 该process被触发启动的时间
TIME 该process实际使用CPU运作的时间
COMMAND 该程序的实际命令是什么或理解为该进程是哪一个程序/命令启动的
  • Linux进程状态:
状态 解释
D 不可中断 Uninterruptible (usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换 (从内核2.6开始无效)
X 死掉的进程
l 多进程
< 高优先级
N 低优先级
s 包含子进程
+ 位于后台的进程组
pstree (进程树)
  • 语法:pstree [选项]
  • 选项:
选项 含义
Uup UTF8(推荐使用)
Aup ASCII
1.1.2 动态
top
  • 概念:以动态的方式来观察服务器的进程状态
  • 语法:top [选项]
  • 选项:
选项 含义
-d 数字 表示每多少秒更新一次画面
-b 表示已批次的方式运行
-n 数字 通常结合-b来一起使用,将画面按照n次的方式输出
-p pid 可以使top按照某一个pid来持续进行观察
  • 案例:

    • 命令:top -d 1 -p 1 -b -n 5 > top.log

    大数据学习 - Linux系统操作入门_第19张图片

  • 退出top方式,ctrl + C 或 q

  • 可以在top执行过程当中使用的按键指令:

按键指令 含义
显示在top当中可以输入的按键指令
P 以CPU的使用资源排序显示
M 以Memory的使用资源排序显示
N 以PID来排序
T 由该Process使用的CPU时间累计(TIME+)排序
k 给予某个PID后kill该进程(内核2.6后失效)
q 离开top软件的按键

1.2 进程的管理

1.2.1 单进程管理
kill
  • 概念:kill命令可以将某个进程结束掉
  • 语法:kill [信号量] PID
  • 信号量:
信号量 含义
1 终止进程,如果是守护进程,则重新读取进程的参数配置
2 类似于键盘Ctrl+C的组合键
9 强制结束某个进程。
15(缺省值) 以正常方式关闭进程。
1.2.2 多进程管理
killall
  • 概念:killall命令可以用来结束以某个程序运行的相关进程。
  • 语法:killall [信号量] PID
  • 信号量:
信号量 含义
1 终止进程,如果是守护进程,则重新读取进程的参数配置
2 类似于键盘Ctrl+C的组合键
9 强制结束某个进程。
15(缺省值) 以正常方式关闭进程。
1.2.3 知识拓展

sshd是一个守护进程,默认使用过的端口号是22,可以通过修改 /etc/ssh/sshd_config 配置文件来达到端口的修改。

修改过端口之后,需要重启一次sshd服务,重启命令 ,否则新端口不生效。

2 系统自带监控

free:观察内存(memory)使用情况

uname:查阅系统与核心相关信息

uptime:观察系统启动时间与工作负载

2.1 netstat 网络监控 (*)

  • 语法:nestat [选项 ]

  • 选项:

选项 含义
-a 将目前系统上的所有的已经连接、监听、Socket数据都列出来
-t 列出tcp网络包的信息
-u 列出udp网络包的信息
-n 以端口(port number)方式来显示(不以程序的服务名称)
-l 列出目前正在监听(listen)的服务
-p 列出该网络服务的进程id(PID)

常用组合:lntp、antp、lnt、aunp

3 任务管理

3.1 概念

  • 前台任务:与用户进行交互的任务,不能独立运行的任务就称之为前台任务,例如:

vi。

  • 后台任务:脱离了用户的操作,能够在系统中产生独立的进程,并且持续的运行。例如,sshd

3.2 如何将前台任务放置后台

  • 暂停:Linux系统中,如果想将一个前台任务放置后台,可以通过Ctrl+Z的组合键将任务放置,但状态为暂停。
  • 运行:Linux系统中,如果想将一个任务放置否太并运行,可以通过在命令的结尾处加上一个&(符号)。

3.3 查看后台的任务

  • 查看后台运行的:jobs -r
  • 查看后台暂停的:jobs -s
  • 查看后台任务:jobs
  • 查看后台任务,并查看PID:jobs -l

3.4 将后台任务调到前台

fg
  • 概念:fg命令可以将后台的任务调至前台
  • 语法:fg + %jobnumber
  • 注意:
    • 当fg命令运行时,并没有加任务ID的话,那么默认调用的就是后台具有+号的任务。
    • 带有+号的表示优先级
    • 最后一次放置后台的任务就是具有+号的任务。

3.5 改变后台任务的运行状态

bg
  • 概念:bg命令可以将后台暂停的任务状态修改为运行状态。
  • 语法:bg + %jobnumber
  • 注意:
    • 当bg命令运行时,并没有加任务ID的话,那么默认调用的就是后台具有+号的任务。带有+号的表示优先级。
    • bg虽然能够改变后台任务的状态,但是不能修改交互式程序状态为运行,例如vi命令。

DAY04

4 vim命令

4.1 介绍

vim是vi文本编辑器的高级版。

具备更多的功能,例如:给内容加上颜色,便于区分,加强编程能力。

大数据学习 - Linux系统操作入门_第20张图片

三种模式:

  • 一般模式(默认模式)
    • 在一般模式下,可以对文件内容进行快速的修改,但不能做到精准的内容修改。
    • 一般模式的快捷键(略)
  • 编辑模式
快捷键 功能
i 从光标所在处插入(***)
I 从所在行第一个非空白字符处插入(**)
a 从光标所在下一个字符处插入
A 从光标所在行最后一个字符处插入(**)
o 在光标所在处下一行插入新的一行(**)
O 在光标所在处上一行插入新的一行(**)
  • 替换模式
快捷键 功能
r 替换光标所在处字符一次
R 一直替换光标所在处文字直到按下Esc(***)
  • 命令模式
命令 功能
:w [filename] 另存为filename
:r [filename] 读取filename指定文件中的内容到光标所在的行
:n1,n2 w [filename] 将n1到n2行另存为filename
:! command 临时切换到命令行模式下执行command命令
:wq 保存后离开
:q 不保存离开(未改可以离开,如果修改了需要 q! 强制离开)
:q! 不保存离开
:set nu 显示行号
:set nonu 取消显示行号
: s/word1/word2/g 在当前行将word1替换成word2(**)
:%s/word1/word2/g 在当前文件将word1替换成word2(**)
:n1,n2s/word1/word2/g 在n1到n2行查找word1替换成word2(n1、n2为数字)
:1.$ s/word1/word2/g 从第一行到最后一行查找word1替换成word2
:%s/word1/word2/go 同上,在替换前确认是否替换。(***) 只能单行确认,需要逐行确认。

:%s/word1/word2/go 的示例:

​ 替换为 b (y / n / a / q / l / ^E / ^Y)

​ y表示yes,n表示no,a表示all(限光标当前到最后一行),q表示quit,l表示替换后移动光标到行首,^E (Ctrl+E) 表示向下翻,^y (Ctrl+Y) 表示向上翻。

5 压缩和打包

5.1 压缩和打包的概念

5.1.1 压缩

指通过某些算法,将文件尺寸进行相应的缩小,同时不损失文件的内容。

5.1.2 打包

指将多个文件(或目录)合并成一个文件,方便传递或部署。

在Linux系统中,文件的后缀名不重要,但是针对于压缩文件的后缀名是必须的,因为可以让其他的程序员根据文件的后缀名使用对应的算法进行解压。

5.1.3 Linux常见的压缩文件后缀名
后缀 含义
*.gz gzip程序压缩的文件
*.bz2 bzip2程序压缩的文件
*.Z compress(旧的加密算法,目前基本不用)程序压缩的文件
*.tar tar命令打包的数据,并没有压缩过
*.tar.gz tar程序打包的文件,并且经过gzip的压缩
*.tar.bz2 tar程序打包的文件,并且经过bzip2的压缩

5.2 压缩命令

5.2.1 gzip(了解)
5.2.2 bzip2(了解)

总结:

gzip拥有更快的压缩性能。

bzip2拥有更高的压缩比。

单纯从压缩比方面来说,那么bzip2 > gzip > compress

5.2.3 查看压缩文件中的内容
  • cat:可以用来查看文本文件中的内容
  • zcat:可以用来查看gzip算法压缩的压缩文件内容
  • bzcat:可以用来查看bzip2算法压缩的压缩文件内容

5.3 打包、解包命令

5.3.1 tar
  • 概念:可以将一个文件/夹打包成一个文件。可以结合gzip、bzip2的算法对包文件进行相应的压缩和解压。
  • 语法:
    • 压缩:tar [选项] newFileName.tar.gz sourceFileName
    • 解压:tar [选项] fileName.tar.gz [-C /path]
  • 选项:
选项 含义
-c 建立打包文件
-t 查看打包文件的内容含有哪些文件
-x 解打包或解压缩的功能,可以搭配-C(大写)在指定目录解开
-j 通过bzip2的支持进行压缩/解压缩:此时文件最好为*.tar.bz2
-z 通过gzip的支持进行压缩/解压缩:此时文件最好为*.tar.gz
-v 在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename: -f 后面跟处理后文件的全名称(路径+文件名+后缀名)
-C 目录: 这个选项在解压的时候,若要在特定目录解压,可以使用这个选项

注:使用命令进行打包、压缩的时候,使用了什么算法,文件后缀名就一定要与其对应。

  • 案例:

大数据学习 - Linux系统操作入门_第21张图片

6 软件管理-RPM

rpm最早是由Redhat Package Manager,由于该机制非常好用,被很多的发行版本当作自己的软件管理。

6.1 优点

  1. 自带编译后的文件,免除用户对软件编译的过程
  2. 可以自动检测文件系统(硬盘)的容量、系统的版本。避免软件被错误的安装。
  3. 自带软件的版本信息、帮助文档、用途说明等信息。
  4. 使用数据库记录rpm的文件信息,便于安装、升级、查询、卸载。

6.2 缺点

  1. 无论安装还是卸载,RPM都有一个恶心人的依赖关系
  2. 安装的软件需要依赖,那么优先安装依赖。
  3. 卸载的软件存在依赖,那么优先卸载依赖。

6.3 默认路径

路径 说明
/etc 一些配置文件放置的目录,例如/etc/crontab
/usr/bin 一些可执行文件
/usr/lib 一些程序使用的动态链接库
/usr/share/doc 一些基本的软件使用手册与说明文件
/usr/share/man 一些man page(Linux命令的随机帮助说明)文件

7 软件管理-YUM

yum的由来,是因为rpm的缺点所导致,因为rpm无论安装还是卸载都需要解决依赖关系,并且比较繁琐,所以诞生yum的技术

yum通过分析rpm的信息来进行软件的安装、升级、卸载。

  • 优点:可以意见解决rpm的依赖关系
  • 缺点:
    • yum的所有执行操作全部都需要repo文件(YUM源)
    • 使用yum安装软件,中招几率高达90%

所有的yum源都存放在/etc/yum.repos.d/目录下

工作环境中,一般都会屏蔽系统自带的yum源,二选择权威机构的yum源

7.1 yum的查询

命令 说明
search 查询某个软件名称或者是描述的关键字
list 列出目前yum所管理的所有的软件名称与版本,有点类似 rpm -qa
info 同上,格式不太一样,不过有点类似 rpm -qai 的执行结果

7.2 yum的安装、卸载、更新

命令 说明
yum install package_Name 安装
yum remove package_Name 卸载
yum update package_Name 更新

注:yum update 需要注意是会进行全系统更新

yum安装、卸载、更新的过程中出现的y/N,可以通过在命令的结尾处 -y,表示全程执行yes操作。

8 防火墙

8.1 临时

操作 命令
开启 service ip tables start / etc/init.d/iptables.start
关闭 service ip tables stop / etc/init.d/iptables.stop
重启 service ip tables restart / etc/init.d/iptables.restart
查看 service ip tables status / etc/init.d/iptables.status

8.2 永久

注:需要重启服务器才能生效(内核级的操作需要重启)

操作 命令
开启 chkconfig iptables on
关闭 chkconfig iptables off

不重启服务器永久关闭防火墙:

​ # bash

​ service iptables stop

​ chkconfig iptables off

9 Shell基础

9.1 概念

简单的说就是用户和内核之间进行通信/沟通的翻译官

系统提供多种shell程序:

大数据学习 - Linux系统操作入门_第22张图片

所以课上学习的和现在工作中所经常使用的shell程序是:/bin/bash

9.2 shell中的变量

变量的概念源于数学,在计算机中能存储计算结果,或表示值。

在shell语言中,不想java语言可以定义变量的类型。

9.3 读取变量

echo $variable

读取变量,有两种方式:

  1. echo $HOME
  2. echo ${HOME} # 大括号的作用是为了保护变量不受其他字符的影响。

9.4 将普通变量设置为系统环境变量

系统的环境变量文件:

​ /etc/profile

​ 编辑完成此文件后,需要让文件生效,命令为:

​ source /etc/profile

JAVA_HOME=[path]

如何将上面的变量设置为系统环境变量:

​ 通过export关键字,可以有效的将普通变量设置为环境变量。

环境变量的两种设置形式:

​ # bash

​ export JAVA_HOME=[path]

​ export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH

​ # bash

​ JAVA_HOME=[path]

​ PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH

​ export $JAVA_HOME $PATH

9.5 变量的设置规则

  1. 变量与变量值需要用一个 “=” 连接。

  2. “=”两边不允许使用空格,因为Linux系统特性,命令与选项、参数之间以空格隔开。如果设置变量时“=”两边使用了空格,那么变量名会被当作是命令来执行。

  3. 变量名只能是英文字母、数字、下划线、但开头不能是数字。

  4. 如果变量值中有空格,需要使用引号来包起来。

    1. 单引号中的内容会被当作普通字符串(java的String) 来处理。

      ​ 案例:

      ​ # bash

      ​ x=’$LANG’

      ​ echo $x

      ​ # $LANG

    2. 双引号中的内容会按照其原本的属性进行输出

      ​ 案例:

      ​ # bash

      ​ x="$LANG"

      ​ echo $x

      ​ # zh_CN.UTF-8

  5. 可以用转义字符 “\” 将特殊符号(如:$、\、!等)变为一般字符

10 变量的赋值 (重点)

10.1 变量的值由命令提供

version=$(uname)

10.2 变量增加额外内容

version= v e r s i o n − {version}- version(uname -p)

​ 注:${version},加上大括号,为了保护变量的内容不受其他字符串的影响

案例:

​ 使用主机名和时间当作文件名称来打包(要求自动实现日期自动增长)

​ # bash

​ tarName= h o s t n a m e − {hostname}- hostname(date +%F)

​ tar -zcvf $(tarName)_etc.gar.gz /etc # 此处的变量使用大括号抱起来 原因是因为-, 如果不使用大括号,那么变量的值会受到外界的字符影响,导致丢失。

​ 例如:

​ tar -zcvf $tarName_etc.tar.gz /etc

​ 结果会得到一个隐藏的tar.gz文件。

10.3 把命令的结果赋值给变量的两种形式

大数据学习 - Linux系统操作入门_第23张图片

变量的小总结:

  1. 全局变量:一般全大写,如环境变量
  2. 局部变量的作用范围取决于大括号{}
  3. 把一个命令定义成一个变量 $(命令) 或 `命令`
  4. ${WEEK}day若变量和其他字符组成新的变量就必须给变量加上大括号,否则容易出错

11 数据重定向

11.1 概念

数据重定向就是将某个命令执行后应该要出现在屏幕上的数据,给他传输到其他的地方,例如传输到文件或是其他命令。

输出类型 编号 操作
标准输入(stdin) 0 使用<或<<
标准输出(stdout) 1 使用>或>>
标准错误输出(stderr) 2 使用>或>>

查看命令执行结果:echo $?

1>:以覆盖的方法,将正确的数据输出到文件

1>>:以累加的方法,将正确的数据输出到文件

2>:以覆盖的方法,将错误输出的数据输出到文件

2>>:以累加的方法,将错误输出的数据输出到文件

案例:

大数据学习 - Linux系统操作入门_第24张图片

12 命令执行判断

12.1 $?命令回传值

命令回传值$?有两种:与&& 或||

大数据学习 - Linux系统操作入门_第25张图片

举例:

大数据学习 - Linux系统操作入门_第26张图片

DAY05

1 Shell基础命令

1.1 grep - 管道符

将前面的命令执行结果导入到后面命令当作输入。也就是管道符左边命令的结果是右边命令的输入。

案例:

​ netstat -lntp | grep 22

1.2 find - 查找命令

由于Linux系统大部分都是应用与服务器上,所以查询数据的时候并没有图形化界面查找数据的便捷性。

语法:

​ find [path] [选项] 参数

选项:

选项 说明
-name 按文件名查询
-perm 按文件权限查询
-size 按文件的大小查找
-user 按用户(属主)查询
-group 按用户组查询
-nogroup 查没有用户组的
-mtime 按文件的修改时间来查询
-type 按文件的类型查询
b - 块设备文件。
d - 目录
c - 字符设备文件。
n - 管道文件
l - 符号链接文件。
f - 普通文件

案例:

​ 查找jdk安装目录。

​ # bash

​ find / -name java

​ 查找当前系统中所有的.java后缀名的文件

​ # bash

​ find / -name “*.java”

​ 查找系统中/home目录下的非普通文件

​ # bash

​ find /home ! -type f

1.3 sed

  • 介绍:

非交互式文本处理工具,通常情况下解决脚本(解决机械性能和复杂功能)中不能使用VIM的操作。

sed本身是一个逐行处理工具,默认情况下会逐行处理到文件的结束。默认情况下不修改源文件,因为sed是将源文件内容逐行copy到一个临时缓冲区(模拟空间),对其进行编辑,行处理结束后,将其输出到屏幕上,也可以通过数据重定向将结果导入到新的文件中去。

sed本身提供修改源文件的选项。但是如果修改源文件时,结果内容不会发送到屏幕上。

  • 语法:

    ​ sed [选项] “[操作]” [fileName]

    • 选项:

      选项 说明
      e 允许对输入数据应用多条sed命令进行编辑
      i 表示直接操作源文件
    • 操作:

      操作 说明
      s: 字符串匹配/查找
      i: 插入
      a: 追加
      d: 删除
      c: 替换
      p: 打印指定的输出行 # 可以不要

      **!注意:**选项和动作的字母i不是同样的功能

  • 案例:

    • 源文件内容:

      ​ hello teduhadoop

      ​ hello hadoop

      ​ hello hdfs, hi sed

    • 1.修改全文的第一个h和第二个h 为大写

      # bash

      ​ sed “s/h/H/1;s/h/H/1” demo

    • 2.修改全文的所有h和第一个l 为大写

      # bash

      ​ sed -e “s/h/H/g” -e “s/l/L/1” demo

      ​ or

      ​ sed -e “s/h/H/g;s/l/L1” demo

  • 课件案例:

大数据学习 - Linux系统操作入门_第27张图片

大数据学习 - Linux系统操作入门_第28张图片

大数据学习 - Linux系统操作入门_第29张图片

2021-01-20_124139

知识扩展:

​ 如何快速清除文件内容

# bash

	> [fileName]

1.3 grep

这是一款强大文本搜索工具,它支持正则表达式

选项:

选项 说明
-number 同时显示匹配行上下的n行
-b, --byte-offset 打印匹配行前面打印该行所在的块号码
-c, --count 只打印匹配的行数,不显示匹配的内容
-f File, --file=File 从文件中提取模板,空文件中包含0个模板,所以什么都不匹配
-h, --no-filename 当搜索多个文件时,不显示匹配文件名前缀
-i, --ignore-case 忽略大小写差别
-q, --quiet 取消显示,只返回退出状态。0则表示找到了匹配的行
–color 将匹配内容上色区分
-n, --line-number 在匹配的行前面打印行号
-v, --revert-match 反检索,只显示不匹配的行

1.4 tail

文本监控,通常情况下用于监视文件的增长

场景:

​ 大数据环境中,很多软件在启动时,不会将真正的启动/过程日志打印在屏幕上,因为内容繁多,会影响程序员观察启动过程中,哪个进程没有启动。像此种场景,我们就可以利用tail工具用来监视该软件启动日志文件的实际内容。

语法:

​ tail [选项] fileName (默认显示最后10行)

选项:

选项 说明
-F 用于监控文件的增长
-n 从指定的行出进行监控文件的内容

案例:

​ 不显示最前面的5行

​ tail -n +5 filename

1.5 sort

sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,一次按ASCII码值进行比较。

选项:

选项 说明
-u 不出现重复的行
-t 指定分段的符号
-k 指定的第几个段进行排序
-r 逆向配许(反向排序)

注意:

sort会受系统的环境变量的影响,Linux系统中很多软件都会在部署自己的环境时修改系统的环境变量,此时会导致sort的配许不会按照ASCII码进行,解决方法就是执行下面的两条命令:

​ # bash

​ LC_ALL=C

​ export LC_ALL

但是,此命令之后会影响vim中编码集,恢复编码集的命令为:

​ # bash

​ LC_ALL

​ export LC_ALL

执行完即可,两次命令执行后会恢复sort的排序方式,并且vim的编码集也会恢复

1.6 cut

cut命令在文件中负责剪切数据用的

选项:

选项 说明
-b 字节
-c 字符
-f 提取第几列
-d 按指定分隔符分割列

案例:

​ 源文件内容:

​ 192.168.1.1

​ 192.168.1.3

​ 192.168.1.5

​ 192.168.1.4

​ 截取第11个字节:

​ # bash

​ cut -b 11 demo

​ 截取第7-9的字节

​ # bash

​ cut -b 7-9 demo

​ 截取最后一个字节进行排序

​ # bash

​ cut -b 11 demo | sort

​ or

​ sort demo | cut -b 11

​ 以点为 分隔符 获取第二个字段

​ # bash

​ cut -d ‘.’ -f 2 demo

拓展:

​ 获取字符串最后一位

​ # bash

​ grep -o .$

1.7 histroy - 历史命令

history

​ 该命令可以用来查看Linux系统中曾经执行过的命令(默认1000条)

用法:

命令 用法
!! 运行上一条命令
!88 运行第88条命令
!88 /test 运行第88条命令并在命令后面加上/test
!ls 运行上一个ls命令
!ls:s/CF/l 运行上一个ls命令,其中把CF替换成l
fc 编辑并运行上一个历史命令
fc 66 编辑并运行第66个历史命令
histroy -c 表示清除历史命令 # 学习阶段不要使用此命令,会清空历史命令

2 Shell高级 - shell脚本

概念:

大数据学习 - Linux系统操作入门_第30张图片

shell脚本如何执行:

大数据学习 - Linux系统操作入门_第31张图片

脚本中的内容:

大数据学习 - Linux系统操作入门_第32张图片

2.1 交互式数值计算脚本

数值的运算格式

大数据学习 - Linux系统操作入门_第33张图片

大数据学习 - Linux系统操作入门_第34张图片

2.2 test判断

使用范例:test [选项] fileName

选项:

文件类型判断
选 项 作 用
-b filename 判断文件是否存在,并且是否为块设备文件。
-c filename 判断文件是否存在,并且是否为字符设备文件。
-d filename 判断文件是否存在,并且是否为目录文件。
-e filename 判断文件是否存在。
-f filename 判断文件是否存在,井且是否为普通文件。
-L filename 判断文件是否存在,并且是否为符号链接文件。
-p filename 判断文件是否存在,并且是否为管道文件。
-s filename 判断文件是否存在,并且是否为非空。
-S filename 判断该文件是否存在,并且是否为套接字文件。
文件权限判断
选 项 作 用
-r filename 判断文件是否存在,并且是否拥有读权限。
-w filename 判断文件是否存在,并且是否拥有写权限。
-x filename 判断文件是否存在,并且是否拥有执行权限。
-u filename 判断文件是否存在,并且是否拥有 SUID 权限。
-g filename 判断文件是否存在,并且是否拥有 SGID 权限。
-k filename 判断该文件是否存在,并且是否拥有 SBIT 权限。
-z string 判断字符串是否为空?若string为空字符串,则为true
-n string 判断字符串是否为空?若string为空字符串,则为false
str1 = str2 或 == 判断str1是否等于str2,若相等,则返回true
str1 != str2 判断str1是否不等于str2,若相等,则返回false
文件比较
选 项 作 用
filename1 -nt filename2 判断 filename1 的修改时间是否比 filename2 的新。
filename -ot filename2 判断 filename1 的修改时间是否比 filename2 的旧。
filename1 -ef filename2 判断 filename1 是否和 filename2 的 inode 号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法

2.3 [] 判断符号

[] 用于判断,类似与test的功能

  • 注意:该符号中的左右两边必须和内容保持一个空格,否则会报错。
  • == 和 != 用于比较字符串
  • 整数比较只能使用-eq, -gt, -ge, -lt, -le, -ne 这种形式
  • [] 中的逻辑与和逻辑或使用 -a 和 -o 表示
  • &&、||、<和> 操作符如果出现在 [] 结构中的话,会报错。

案例:

​ 判断用户输入的是y还是n,为y返回yes,为n返回no

大数据学习 - Linux系统操作入门_第35张图片

2.4 shell脚本参数

什么是脚本的参数?

比如,ls -al install.log 其中-al就是这个ls的shell脚本参数,那么我们自己写的脚本参数该如何使用呢。

/path/to/scriptname arg1 arg2 arg3 arg4

​ $0 $1 $2 $3 $4

参数 说明
$0 代表脚本程序本身
$1,$2,… 代表后面第一个参数,第二个参数,等等
$# 代表后接的参数个数,以上边为例,这里显示为4
$@ 代表"$1" “$2” “$3” “$4”,每个变量是独立的(用双括号括起来)
$* 代表"$1 $2 $3 $4"

2.5 if - 条件判断

2.5.1 if的基本语法:
  • 单分支结构:

    ​ if [ 条件 ];then

      	符合该条件执行的语句
    

    ​ else

       符合该条件执行的语句
    

    ​ fi

  • 多分支结构:

    ​ if [ 条件 ];then

    ​ 符合该条件执行的语句

    ​ elif [ 条件 ];then

    ​ 符合该条件执行的语句

    ​ else

      符合该条件执行的语句
    

    ​ fi

2.5.2 文件/文件夹(目录)判断
条件 说明
-b FILE 如果 FILE 存在且是一个块特殊文件则为真。
-c FILE 如果 FILE 存在且是一个字特殊文件则为真。
-d DIR 如果 FILE 存在且是一个目录则为真。
-e FILE 如果 FILE 存在则为真。
-f FILE 如果 FILE 存在且是一个普通文件则为真。
-g FILE 如果 FILE 存在且已经设置了SGID则为真。
-k FILE 如果 FILE 存在且已经设置了粘制位则为真。
-p FILE 如果 FILE 存在且是一个名字管道(F如果O)则为真。
-r FILE 如果 FILE 存在且是可读的则为真。
-s FILE 如果 FILE 存在且大小不为0则为真。
-t FD 如果文件描述符 FD 打开且指向一个终端则为真。
-u FILE 如果 FILE 存在且设置了SUID (set user ID)则为真。
-w FILE 如果 FILE存在且是可写的则为真。
-x FILE 如果 FILE 存在且是可执行的则为真。
-O FILE 如果 FILE 存在且属有效用户ID则为真。
-G FILE 如果 FILE 存在且属有效用户组则为真。
-L FILE 如果 FILE 存在且是一个符号连接则为真。
-N FILE 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
-S FILE 如果 FILE 存在且是一个套接字则为真。
FILE1 -nt FILE2 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。
FILE1 -ot FILE2 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
FILE1 -ef FILE2 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
2.5.3 字符串判断
条件 说明
-z 字符串 如果字符串的长度为零则为真 ,即判断是否为空,空即是真;
-n 字符串 如果字符串的长度非零则为真 ,即判断是否为非空,非空即是真;
字符串1 = 字符串2 如果两个字符串相同则为真 ;
字符串1 != 字符串2 如果字符串不相同则为真 ;
字符串1 如果字符串不为空则为真,与-n类似
2.5.4 数值判断
条件 说明
INT1 -eq INT2 INT1和INT2两数相等为真 ,=
INT1 -ne INT2 INT1和INT2两数不等为真 ,<>
INT1 -gt INT2 INT1大于INT1为真 ,>
INT1 -ge INT2 INT1大于等于INT2为真,>=
INT1 -lt INT2 INT1小于INT2为真 ,<
INT1 -le INT2 INT1小于等于INT2为真,<=
2.5.5 复杂逻辑判断
逻辑符 说明
-a
-o
!
2.5.6 案例

注意:if利用read传参判断

  • 查看分数
#!/bin/bash

#echo -n "请输入你的分数:"

#read score

#echo "input score is $ score "

read -p 请输入你的分数:" score

echo -e "你输入的成绩为: [$score], 正在查询中……"

if [ "$score" -ge "0" ]&&[ "$score" -lt "60" ];then

	echo "对不起,你的成绩不合格!"

elif [ "$score" -ge "60" ]&&[ "$score" -lt "85" ];then

	echo "你的成绩评定为良好"

elif [ "$score" -le "100" ]&&[ "$score" -ge "85" ];then

	echo "你的成绩评定为优秀"

else

	echo "输入有误,请输入0-100以内的整数!"

fi

3 函数

3.1 命令

function name() {

​ 命令xxx

}

或者

(function) name() {

​ 命令xxx

}

两种语法格式,推荐使用第一种

函数的使用方式就是在sh脚本中,重新调用一次自定义的“函数名”

例如:

function print() {
     
	echo "Hello world"
}

*********
print # 此处执行时一次print就会打印一次"Hello world"

4 shell脚本的检查

  • 语法:sh [-nvx] scripts.sh

  • 选项与参数:

    选项 说明
    -n 不执行script,仅查询语法的问题!!
    -v  在执行script前,先将scripts的内容输出到屏幕上
    -x  将使用到的script内容显示到屏幕上,这是很有用的参数!!!

5 循环语句

5.1 for

  • 语法:for…do…done循环

    for 变量名 in 变量取值列表
    do
    	命令
    done
    

    提示:在次结构中,”in 变量取值列表“可省略,省略时相当于使用for i in ”$@“

  • 案例

    • 将本地的文件分发到其他的服务器,前提,所有的服务器地址已经使用主机名,并且存放在host.txt文件中。
    #!/bin/bash
    for ip in `cat host.txt`
    do
    	scp ${path}/software.tar.gz UserName@${ip}:/${path}/
    done
    

5.2 while

  • 语法:

    while [ condition ]; do
    
    	命令xxx
    
    done
    

    或者:

    while [ condition ]
    do
    	命令
    done
    
  • 案例

    • 通过while循环实现每隔1秒打印一次系统的负载情况
    #!/bin/bash
    while true
    do
    	uptime
    	sleep 1
    done
    
    • 通过while循环实现1到100之间的数字相加的和
    #!/bin/bash
    sum=0
    i=1
    while [ $i -le 100 ] # while 和 [ 之间要加一个空格 true则执行
    do
    	sum=$(($sum + $i))
    	i=$(($i + 1)) #运算结果为变量赋值可以使用$((...))
    done
    echo "the result of '1+2+3+...+100' is $sum"
    

6 自动部署,无人值守

有兴趣的伙伴请在下方评论区留言。

你可能感兴趣的:(学习整理,linux)