Linux自学笔记汇总

 shell分为CLI(命令行--BASH界面)与GUI(图形--GNOME界面)两种。shell是kernel的外壳,我们通过shell传递命令给kernel去。

一、Linux入门基础

1、bash的提示符:

  • #:代表当前是root用户 ,root用户是管理员权限,最高权限,操作危险。
  • $:代表当前是普通用户。
  • ~:代表在家目录
  • 格式举例:[root@linuxcast ~]# 代表当前root用户登录Linuxcast主机,当前在家目录下。

2、命令由三个部分组成:

    命令、选项、参数:uname -a和uname --all是一样的。(单横线加缩写,双横线加单词)

3、Tab按键

  • 自动补全命令
  • 自动补全文件名
  • 无法自动补全参数
  • 有输入时,按两下Tab键,显示出所有以他开头的命令
  • 无任何输入,按两下Tab键,可以显示出所有的命令

4、查询历史命令:

        history或上下键

5、通过历史记录简化操作

  • !!  重复执行一次前一个命令(相当于上键+回车)
  • !字符  重复执行前一个以该字符开头的命令
  • !数字  重复执行历史记录中的对应序号的命令
  • !?字符  重复执行之前包含该字符的命令
  • !-n  重复N个命令之前的那个命令

6、搜索命令历史记录

  • Ctrl + r 在历史记录中搜索命令
  • esc.  按esc之后按.键 ,直接调用前一个命令的参数

7、命令行通配符

  • *匹配零个或多个         ?匹配任意一个字符,重点是“一个”
  • [数字范围]  匹配一个数字范围,例如 [0-9]
  • [字符]  匹配列表里的任意字符,例如[abc]
  • [^字符]  匹配列表以外的字符,例如[^abc]

8、切换用户

  • su  切换到root用户,但不切换终端
  • su - 切换到root用户,且使用一个新的运行环境
  • su - 用户名  切换到对应用户
  • sudo+命令  使用管理员用户身份运行命令,让普通用户拥有执行管理员命令的权限
  • id 显示当前用户信息
  • paswd  修改当前用户密码

9、bash的作业管理

  • 命令后+& ,表示后台运行进程
  • Ctrl +z或者发送信号I7,暂停某个程序
  • jobs,查看当前在后台运行的进程,会有编号
  • bg+进程编号,让进程继续运行
  • fg+进程编号,让后台进程回到前台

10、Linux文件系统结构

  • Linux是倒转单根树状结构,根为“/”,严格区分大小写,使用"/"分割(Windows中是"\")。
  • 每一个shell或系统进程都有一个当前工作目录,使用pwd查看。
  • 文件:大小写敏感,最多255字符,除了/都是有效字符,touch创建空白文件或更新已有文件的时间,以“.”开头的是隐藏文件(隐藏文件大多数都是配置文件)
  • 列出目录内容:ls命令。 -a显示所有包括隐藏文件,-l显示文件详细信息,-R递归显示子目录结构,-ld显示目录和链接信息。
  • 绝对路径:以“/”开头的递归每级目录知道目标的路径。不受当前所在工作目录限制。
  • 相对路径:以当前目录为起点,达到目标的路径。受当前所在目录限制。
  • cd命令切换目录:..回到上一级目录,.是当前目录,~到用户家目录(什么都不带直接cd也是到家目录),-表示上一个目录。

11、linux文件基本操作管理

  • cp复制文件或目录:cp 源 目标。-r 递归复制整个目录树,-v显示详细信息
  • mv移动、重命名文件或目录:mv 文件 目标目录。如果指定文件名,可以重命名文件。
  • touch创建空白文件或更新已有文件的时间。
  • rm删除文件或目录:-i交互式(就是每个删之前都会问你),-r递归的删除目录中所有内容,-f强制删除,没有警告提示。
  • mkdir创建目录。rmdir删除空目录。rm -r (-f)删除非空目录。

12、Linux的系统目录,根目录/下有这些文件夹

  • bin:保存常用的可执行二进制文件,即我们用的那些Linux命令。
  • boot:引导目录,操作系统引导启动需要的文件。最主要的是vmlinuz,系统内核文件。
  • dev:保存计算机所有硬件设备,硬盘网卡等。Linux所有硬件设备都抽象为一个文件保存。
  • etc:几乎所有操作系统相关的配置文件。大多数都是以.conf结尾(或.cnf)。
  • home:家目录。每个用户都有自己的一个文件夹,保存用户私有数据。操作系统每多一个用户,home下就多一个与用户名相同的文件夹。只有root的家目录是单独的,就是/root。
  • lib:Linux运行的库文件都在这里,基本都是.so。
  • media:挂载用的。插入光盘U盘等自动挂载在media。
  • mnt:正常的挂载目录。
  • opt:通常用来装大型软件。
  • proc:系统的实时信息。不存在在硬盘上,只存在在内存中,一个虚拟文件夹,显示系统实时信息。每次系统启动都会自动创建一个新的proc。比如cpuinfo、meminfo等记录CPU和内存的当前信息。每一个数字命名的文件夹都代表一个进程。
  • sbin:和bin一样都是保存可执行的二进制文件。bin是所有用户都能执行,sbin下只有root用户才能执行。
  • sys:系统底层的一些信息。通常查找硬盘等信息用到。
  • tmp:临时目录。会自动删除。
  • usr:保存安装的应用软件。
  • var:一些经常变化的信息。比如/var/log保存系统的所有日志。

13、日期时间命令:

  • date:查看当前系统时间。-u查看UTC时间。+%Y--%m--%d自定义输出时间格式。-s设置时间(例如date -s "20:20:20")。
  • hwclock(clock):显示硬件时钟时间。
  • cal查看日历。
  • uptime查看系统运行时间(启动了多久了,多少个用户,负载等信息)。
  • 设置时区:timedatectl set-timezone Asia/Beijing
  • 设置时间:date -s "2022-10-11 15:14:00"

14、输出、查看命令:

  • echo显示输入的内容。(就是我输入什么,在屏幕上就返回显示什么)
  • cat显示文件的内容。
  • head显示文件前几行。-n加数字。(默认10行)
  • tail显示末尾几行。-n加数字。(默认10行)-f追踪显示文件更新,文件有内容更新,屏幕上也会实时变化(一般用于查看日志)。
  • more翻页显示文件内容(只能向下翻页,用空格键下翻)。
  • less翻页显示文件内容(上下翻页都行)。

15、查看硬件信息命令:

  • lspci查看PCI设备,-v查看详细信息。
  • lsusb查看USB设备,-v查看详细信息。
  • lsmod查看加载的模块(驱动)。

16、关机、重启命令:

  • shutdown   -r重启,-h关机。 可以shutdown+时间,例如shutdown -h now立即关机,shutdown -h +10十分钟后关机, shutdown -h 23:30十一点半关机,shutdown -r now立即重启。
  • poweroff立即关机。
  • reboot立即重启计算机。

17、zip压缩命令

  • zip压缩文件。zip xxx.zip 文件名
  • unzip解压文件。unzip xxx.zip
  • gzip压缩文件。 gzip xxx.net

18、tar归档命令

    用来归档压缩文件与逆操作。命令格式:tar [必要参数] [选择参数] [文件]。  .tar文件表示归档后的文件,.tar.gz才是归档并压缩的文件。

  • 解归档:        tar xvf 001.tar        (将001.tar包解归档)
  • 解压解归档: tar zxvf 001.tar.gz (将001.tar.gz包解压归档)
  • 归档:            tar cvf  001.tar  001  (将001文件归档成.tar)
  • 归档后压缩: tar zcvf  001.tar.gz  001(将001文件归档后压缩成.tar.gz)
  • 上述命令中,-z表示支持gzip解压文件(也就是归档之后做压缩操作),-x表示从归档的文件中提取文件,-c表示建立新的归档文件。二者相对,一个归档一个解归档。-v表示显示操作过程,-f表示指定归档文件,-C可以指定目录。
  • 简洁记忆:只要压缩的统一用 tar zcvf  001.tar.gz  001只要解压缩的统一用tar zxvf 001.tar.gz

19、查找命令

  • locate+文件名关键字:查找文件、文件夹。但需要先建立数据库(update命令创建或更新)
  • find 位置 参数:查找文件、文件夹。参数有:
    • -name文件名,
    • -perm文件权限,
    • -user属于某用户的,
    • -group属于某用户组的,
    • -ctime对应修改时间,
    • -type类型,
    • -size大小。
  • 举例:
    • find . -name *xxx*    代表在当前目录下查找名称中带xxx的文件
    • find / -name *.conf   代表在整个系统中查找文件名以.conf结尾的文件
    • find / -perm 777  代表在整个系统中查找权限为777的文件
    • find / -type d   代表在整个系统中查找所有的目录类型文件
    • find . -name "a*" -exec ls -l {} \;  代表查找当前目录下文件名中带a的文件,然后对该文件执行ls -l命令。(-exec xxx {} \; 是固定格式)

20、文本编辑器vi、vim

  • vim比vi强大得多,使用vim就行。(vim打开后有高亮显示,更方便)
  • 使用方法:vim+目标文件。如果目标文件存在,则打开。如果不存在则新建一个并打开该文件。

        共有三种模式:    

  • 一,一般模式(常规模式):vim启动后默认进入的模式。这个模式下可以选择、复制、粘贴、撤销等。
    • 1.一般模式下的其他操作
      • i:光标前插入文本
      • o:当前行下面插入新行
      • yy:复制当前行
      • nyy:复制n行
      • p:粘贴
      • u:撤销上一个操作
      • r:替换当前字符
    • 2.一般模式下的移动
      • 移动到第一行  gg
      • 移动到最后一行  shift+g  或 G
      • 移动到行首  0 或 Home键
      • 移动到行尾  $ 或 End键
      • 向右移动n个字符  n+Space
      • 向下移动n行 n+Enter
      • 上下左右移动    h(←)   j(↓)   k(→)   l(↑) 
    • 3.一般模式下的删除
      • 删除当前行  dd
      • 从当前行开始删除n行  ndd
      • 全部删除  ggdG
      • 删除当前行光标前边内容  d0   或   d+Home
      • 删除当前行光标后边内容  d$   或   d+End
    • 4.一般模式下的查找
      • /xxx + enter 表示从上到下查找‘xxx’,按n键查找下一个,N查找上一个
      • ?xxx +enter 表示从下到上查找‘xxx’, 按n键查找上一个,N查找下一个
  • 二,插入模式(编辑模式):命令模式中按“i”或者insert键进入,在这个模式下可以对文本进行编辑。按esc回到一般模式。
  • 三,ex模式(命令行模式):命令模式中按":"键进入ex模式,光标会移动到底部。这个模式下保存修改或退出vim。按esc回到一般模式。
    •  :w--保存,
    • :q--退出,
    • :q!强制退出,
    • :wq!强制保存退出,
    • :x--保存退出,相当于wq,
    • :set number (:set nu)--显示行号,
    • :!系统命令--执行一个系统命令并显示结果,
    • :sh--切换到命令行,使用ctrl+d切换回vim。
    •  :n1,n2d --删除n1~n2行 
    •  :1,$d --删除全部
    • :save a.txt--保存为a.txt 文件
    • :set encoding=utf8 ---设置编码
    • :set tab=4 ---设置tab键等于4个空格键
    • :diffthis ---比较打开的两个文件的不同
    • :set paste ---粘贴模式,粘贴内容时,如果格式发生变化,可使用
    • :s/this/that   ---将光标所在行的第一个this替换成that
    • :s/this/that/g ---将光标所在行的所有this替换成that
    • :%s/this/that/g ---将整个文档的this替换成that
    • :%s/this/that/gc ---将整个文档的this替换成that,每次替换会提示
    • :3,7s/this/that/g ---将3~7行的所有this替换成that

21、磁盘管理

  • 磁盘结构:柱面、扇区、磁头
  • 磁盘文件在/dev目录下,名称IDE设备一般为hda、hdb等。SATA、SAS、SCSI、USB等一般为sda、sdb......等。
  • 分区:一个磁盘分为几个逻辑区,每个区当独立磁盘。如sda1、sda2等。分区方式有MBR和GPT两种。

使用fdisk进行磁盘管理(基于MBR的工具):

  • fdisk命令只有超级用户(root)权限才能运行
  • fdisk -l列出所有安装磁盘及分区
  • fdisk /dev/sda可以对目标磁盘进行分区操作,分区后使用partprobe让内核更新分区信息,否则需要重启才能识别新分区
  • /proc/partitions文件也可以查看分区

22、Linux文件系统

操作系统文件系统的关系:操作系统通过文件系统管理文件及数据,磁盘或分区需要创建文件系统之后才能为操作系统所使用,创建文件系统的过程又叫格式化

  • 没有文件系统的设备成为裸(raw)设备
  • 常见的文件系统有fat32、HFS、NTFS(Windows的主流)、ext2、ext3和ext4(Linux的主流)等
  • 文件系统之间的区别:日志、支持的分区大小、支持的单个文件大小、性能等

mke2fs命令创建文件系统:

  • 完整命令:mke2fs -t ext4 /dev/sda3
  • -b 数字 --指定文件系统块大小blocksize
  • -c --建立文件系统时检查坏损块(c就是check的意思)
  • -L --指定卷标label (相当于给起个名字)
  • -j --建立文件系统日志 (ext3和4都自带日志,不需要这个参数)

dumpe2fs命令用例查看分区的文件系统信息

  • 命令:dumpe2fs /dev/sda2

journal日志:有些文件系统带日志(如ext3和4)用有较强稳定性,出错后可以恢复。带日志的文件系统使用“两阶段提交”方式进行磁盘操作,好处是事务执行时如果出现意外可以通过查询日志进行恢复操作,缺点是丧失一定性能。“两阶段提交”具体如下:

  • 1),文件系统将准备执行事务的具体内容写入日志;
  • 2),文件系统进行操作;
  • 3),操作成功后将事务具体内容从日志删除

e2label命令给文件系统添加标签:

  • e2label /dev/sda2  --显示sda2的系统标签
  • e2label /dev/sda2 LINUXCAST  --将sda2的系统标签设置为LINUXCAST(一般全大写)

fsck命令检查并修复损坏的文件系统:

  • 完整命令 fsck /dev/sda2
  • 参数-y  --不提示直接修复
  • 参数-t  --指定文件系统类型(默认fsck会自动判断类型,损坏较严重时需要-t指定)
  • 识别为文件的损坏数据(文件系统无记录),fsck会将该文件放入lost+found目录
  • 系统启动时会自动对磁盘进行fsck操作

23、Linux文件系统挂载管理:

磁盘或分区创建好文件系统以后,需要挂载到一个目录才能使用。Windows或mac系统一旦创建好文件系统后会自动进行挂载,也就是C盘、D盘等。但Linux需要手工进行挂载操作或配置系统进行自动挂载。(通常挂载在/mnt目录)

mount命令将格式化好的磁盘或分区挂载到目录上:

  • 命令:mount /dev/sda3 /mnt  (/dev/sda3是要挂载的分区,/mnt是挂载点)
  • mount 不带参数  --显示所有已挂载的文件系统
  • -t  --指定文件系统类型
  • -o --指定挂载选项,多个参数用逗号分开
    • ro,rw  --已只读或读写形式挂载,默认是读写rw
    • sync  --不使用缓存,而是对所有操作直接写入磁盘
    • async  --使用缓存,默认就是async
    • noatime  --每次访问文件时不更新文件的访问时间
    • atime  --每次访问文件时更新文件访问时间
    • remount  --重新挂载文件系统

umount命令卸载已挂载的文件系统,相当于Windows的弹出:

  • 命令格式:umount 文件系统/挂载点。如 umount /dev/sda3  或 umount /mnt
  • 如果出现报错“device is busy”,表示文件系统正在被使用,使用fuser -m /mnt查看使用文件系统的进程,也可以使用 lsof /mnt查看正在被使用的文件。

通过配置/etc/fstab文件来定义需自动挂载的文件系统,每一行代表一个挂载配置:

  • 格式: /dev/sda3            /mnt           ext4            defaults              0 0
  •       (需要挂载的设备)   (挂载点)   (文件系统)    (挂载选项)    (dump、fsck相关选项)
  • 要挂载的设备也可以使用卷标LABEL进行识别,用LABEL=LINUXCAST取代/dev/sda3
  • mount -a命令会挂载所有fstab中定义的自动挂载项

24、获取帮助:

没必要记住Linux系统的所有东西,因为有详细的帮助工具和文档,养成查询帮助文档的习惯可以减少需要记忆的东西并提高效率。

  • 几乎所有命令都可以使用-h或--help参数获取使用方法、参数信息等。例如 ls --help
  • man 对应命令,可获取相应的文档帮助,可“/+关键字”搜索。例如 man ls
  • man -k 关键字,可以查询包含该关键字的文档。例如man -k passwd
  • info同样提供帮助文档,但更为详细,以类似网页形式显示,可“/+关键字”搜索。例如 info ls
  • 很多程序、命令都有详细文档,以txt、html、pdf等方式保存在/usr/share/doc目录下。

25、Linux的用户

我们登录Linux都是以一个用户的身份,一个进程也需要以一个用户的身份运行。用户的作用是限制使用者或进程的权限(如哪些资源能用哪些不能用)组的作用是组织管理用户

  • 每个用户拥有一个UserID,操作系统实际使用的是ID,而非用户名
  • 每个用户属于一个主组,属于一个或多个附属组。
  • 每个组拥有一个GroupID
  • 每个进程以一个用户身份运行,并受该用户可访问的资源限制
  • 每个可登陆用户(系统用户不可登录)拥有一个指定的shell

关于用户:

  • 用户ID为32位,从0开始,为了和老式系统兼容,限制在60000以下
  • ID为0的是root用户,1-499的是系统用户(系统用户没有shell),500及以上的是普通用户
  • 系统中的文件都有一个所属的用户及所属组
  • 使用id命令可以显示当前用户的信息
  • 使用passwd命令可以修改当前用户的密码

用户相关的文件:

  • /etc/passwd -保存用户信息
  • /etc/shadow --保存用户密码(加密的,只有管理员才能查看)
  • /etc/group  --保存组信息

查看登录的用户:

  • whoami显示当前用户
  • who显示有哪些用户已登陆系统
  • w显示有哪些用户已登陆并且在干什么    (可以看到,命令越长,显示的信息越少)

用命令useradd创建一个新用户,命令useradd test_qi,该命令会执行以下操作:

  1. 在/etc/passwd中添加用户信息
  2. 如果使用passwd创建密码,则将密码加密保存在/etc/shadow中
  3. 为用户建立一个家目录 /home/test_qi
  4. 将/etc/skel中的文件复制到用户的家目录中 (所以通常把一些用户文档等放到这里)
  5. 建立一个与用户名相同的组,新建用户默认属于这个同名组

useradd命令的参数有:

  • -d 家目录
  • -s 登陆shell
  • -u userid
  • -g 主组
  • -G 附属组(最多31个,用“,”分割)

usermod命令用来修改用户信息

  • 命令格式:usermod 参数 username
  • -I   --新用户名
  • -u  --新userid
  • -d  --用户家目录位置
  • -g  --用户所属主组
  • -G  --用户所属附属组
  • -L  --锁定用户使其不能登录
  • -U --解除锁定

userdel命令删除指定用户:

  • userdel test_qi  (保留test_qi的家目录)
  • userdel -r test_qi  (同时删除test_qi的家目录)

26、Linux的组

几乎所有操作系统都有组的概念,通过组可以更方便的归类管理用户。一般,我们使用部门、职能或地理区域的分类方式来创建使用组。

  • 每个组有一个组id
  • 组信息保存在/etc/group中
  • 每个用户拥有一个主组,同时还可以拥有最多31个附属组

创建、修改、删除组:

  • groupadd linuxcast  --创建linuxcast这个组
  • groupmod -n newname linuxcast--修改linuxcast这个组名为newname这个新组名
  • groupmod -g newGid linuxcast --修改linuxcast这个组为newGid这个新组id
  • groupdel linuxcast  --删除linuxcast这个组

27、Linux权限机制

权限是操作系统用来限制对资源访问的机制。权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制限制哪些用户、哪些组可以对某文件做什么操作。

每个进程都是以某个用户的身份在运行,所以进程的权限与该用户的权限一样,用户的权限大,进程的权限就大。

  • 读取权限r----文件:可读取文件内容----目录:可列出目录内容
  • 写入权限w----文件:可修改权限内容----目录:可在目录中创删文件
  • 执行权限x----文件:可作为命令执行----目录:可访问目录内容  (目录必须有x权限,否则无法查看其内容)

Linux权限基于UGO模型控制:

  • U代表user,G代表group,O代表other
  • 每个文件权限基于UGO设置
  • 权限三个一组(rwx),对应UGO分别设置,也就是一共9个。
  • 每个文件拥有一个所属用户和所属组,对应UG。不属于该文件所属用户或所属组的使用O权限。
  • 命令ls -l查看当前目录下的文件详情。

举例,使用ls -l命令查到某文件结果如下:drwxr-xr-- 2 test_qi traning 208 Oct 1 13:50 test.net,其中的:

  • drwxr-xr--  代表UGO,第一个是文件类型,后面9个每三个一组代表UGO的权限。d是文件类型,rwx是U表示用户拥有全部权限,r-x是G表示用户组拥有读和执行权限,r--是O表示其他用户拥有读权限
  • 2  代表链接数量
  • test_qi  代表所属用户U
  • tarning  代表所属组G
  • 208  代表文件的大小
  • Oct 1 13:50  代表文件修改时间
  • test.net  代表文件名

命令chown修改目标文件所属的用户,chgrp修改文件所属的组:

  • 格式:chown 用户名 目标文件名 ,参数-R递归的修改目录下所有文件的所属用户。
  • 格式:chgrp 组名 目标文件名 ,参数-R递归的修改目录下所有文件的所属组。

命令chmod修改文件的权限,命令格式为chmod 模式 文件,模式格式如下:

  • u、g、o代表用户、组合其他,a可以代指全部ugo
  • +、-分别代表加入或删除对应权限
  • r、w、x代表读、写、执行三种权限
  • 举例:chmod u+rw test.net表示给test文件所属用户添加读写权限,chmod go+r test.net表示给test权限所属组和其他用户添加读权限,chmod a-x test.net表示给test的所有ugo删除执行权限

命令chmod也可以使用数字方式修改权限,4/2/1分别等于rwx,组合权限就是把数字加起来:

  • 4 = -r (2^2)  ,4表示读
  • 2 = -w (2^1),2表示写
  • 1 = -x (2^0),1表示执行
  • 6 = 4+2 = rw
  • 7 = 4+2+1 = rwx
  • 5 = 4+1 = r-x
  • 举例 chmod 660 test.net 三个数字分别对应ugo,结果就是rw-rw----
  • 举例 chmod 775 test.net 三个数字分别对应ugo,结果就是rwxrwxr-x

28、Linux默认权限和特殊权限

每个系统都有一个umask属性确定新建文件、文件夹的默认权限。使用数字权限方式表示。

  • umask命令不带参数可以查看当前用户umask的值(返回结果的后三位数字)
  • umask 022命令带三位数字可以设置umask的值为022

通常普通用户的默认umask是002,root用户默认umask是022

  • 目录的默认权限是:777-umask ,所以普通用户一般就是777-002=775
  • 文件的默认权限是:666-mask,所以普通用户一般就是666-002=664

除了普通权限外,还有三个特殊权限

权限对文件的影响对目录的影响
suid (4)以文件的所属用户身份执行,而非执行文件的用户
sgid(2)以文件所属组身份执行在该目录中创建的任意新文件的所属组与该目录的所属组相同
sticky(1)对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件

设置特殊权限:

  • 设置suid命令 chmod u+s test.net
  • 设置sgid命令 chmod g+s test.net
  • 设置sticky命令 chmod o+t test.net
  • 用数字设置命令 chmod 4755 test.net  --第一位4代表特殊权限suid,后三位755表示ugo权限

29、Linux网络基础

每一台主机、服务器或其他网络设备都有一个唯一的网络编址,使用最广泛的网络编址是IP编址

  • IP编址是一个双层编址方案,一个IP地址标识一个主机(或一个网卡接口)
  • 现在应用最为广泛的是IPv4编址,现在逐渐向IPv6编址切换
  • IPv4地址32位长,IPv6地址128位长
  • 一个IPv4地址分为两个部分:网络部分主机部分,这两个部分并不是固定长度的,与子网掩码有关
  • 网络部分用来标识所属区域(地址)、主机部分用来标识该区域中的哪个主机(姓名)

IPv4地址:

  • IPv4地址共32位,通常使用点分十进制标识
  • 32位分为四个部分,每部分8位
  • 例如十进制地址   192.168.1.1 
  • (他的四个8位的部分就是   11000000.10101000.00000001.00000001)

子网掩码:

  • IPv4地址的32bit分为网络部分主机部分子网掩码的作用就是确定网络部分位数的
  • 子网掩码一样拥有32位,与IPv4每一位一一对应。通常是前面连续的1,后面连续的0
  • IP地址中对应子网掩码为1的部分是网络部分
  • 举例:假如IP地址192.168.1.1的子网掩码是24(通常写作192.168.1.1/24),意思就是掩码前24位为1,也就是11111111.11111111.11111111.00000000(也就是255.255.255.0),代表了此IP地址的前24位是网络部分,后8位是主机部分。所以同一网络下的其他主机IP地址前24位相同,一定是192.168.1.xxx
  • 显然,子网掩码越大这个网段的主机范围越小,子网掩码越小同网段的主机范围越大

主机间的通信:

同一网络下的主机间需要通过mac地址和ARP协议通信,不同网络的主机通过网关/路由器通信。

  • mac地址:每个网卡固化了一个mac地址,是硬件决定的地址。用来在同一个网络内的主机之间进行通信。
  • 路由:在不同网络间传输数据的功能,一般有多个接口连到不同网络中,并通过路由表进行转发。(路由表的格式就是列出各个接口分别是什么网段、什么子网掩码)
  • 同一个网络主机之间的通信:主机通过ARP协议获取其他主机的mac地址,然后二者就可以通信了。
  • 不同网络之间的通信:主机分布在世界各地,所以绝大多数的主机设备和我们的主机不在同一个网络下,不同网络间通信就需要用到网关/路由器(或具有路由功能的主机),消息发到路由器,由路由器转发(可能是很多路由器互相转发)消息到其他主机进行通信。

域名----因为IP地址不好记,所以常使用域名进行管理,域名一般分为三部分:

  • 类型:标识此域名的类型,比如盈利公司com,网络公司net,免费组织org,教育机构edu,政府机构gov等
  • 域名:域名称,个人自己起的
  • 主机名:该域中的某台主机名称。(主机名可以随便起的,之所以大家都用www是因为约定俗成的www是网页服务)
  • 举例:www.linuxcast.net中,www是主机名,linuxcast是域名,net是类型

每个域名代表一个IP,域名只是方便人类记忆用的,主机间实际互相通信用的还是IP地址。而DNS服务的作用就是用来在IP与域名之间进行转换,也就是域名解析。DNS服务由DNS服务器提供,比如电信等运营商就有自己的DNS服务器保存全世界的域名对应的IP地址。访问www.linuxcast.net的步骤如下:

  1. 首先发送一个dns请求到dns服务器
  2. dns服务器返回信息,告诉你www.linuxcast.net这个域名的IP地址是x.x.x.x
  3. 得到IP地址后再去访问对应的服务器

总结基本网络参数:

  • 配置一个局域网通信的计算机需要:IP地址、子网掩码
  • 配置一个跨网段通信的计算机需要:IP地址、子网掩码、网关
  • 配置一个可上网的计算机需要:IP地址、子网掩码、网关、DNS

30、Linux网络配置

Linux中,以太网接口命名为eth0、eth1等,0、1代表网卡变化

  • lspci 查看网卡硬件信息(usb网卡是lsusb)
  • ifconfig -a 查看所有接口信息
  • ifconfig -eth0 查看指定接口的信息
  • ifup eth0 启用一个接口
  • ifdown eth0 禁用一个接口
  • setup  配置网络信息,通过一个类图形界面。配置完后ifup启用,ifconfig查看信息。

网络相关的配置文件:

  • 网卡配置文件在 /etc/sysconfig/network-scripts/ifcfg-eth0
  • DNS配置文件在  /etc/resolv.conf
  • 主机名配置文件  /etc/sysconfig/network
  • 静态主机名配置文件  /etc/hosts

网络测试命令:

  • ping命令测试网络连通性:  ping ip/域名  (ping域名的话他会先做域名解析再ping)
  • host命令或dig命令测试域名解析: host/dig 域名 (host命令只要有返回值就表示正确,dig命令则会返回较多信息)
  • 显示路由表:ip route
  • traceroute命令追踪到达目标地址的网络路径:traceroute 域名  (就是查到达目标域名经过了哪些路由设备)
  • mtr命令进行网络质量测试:mtr 域名   (mtr结合了traceroute和ping)

修改主机名:

  • 实时修改:hostname 主机名  (重启后就恢复了)
  • 永久修改:/etc/sysconfig/network 文件下修改HOSTNAME的值

网络故障排查,遵循底层--高层,自身--外部的流程:

  • 先查看网络配置信息:IP地址、子网掩码、网关、DNS
  • 查看到达网关是否连通:ping 网关ip地址
  • 查看DNS解析是否正常:host 域名

31、管道和重定向

多命令协作:Linux系统中的大多数命令都很简单,一个命令只实现一个或几个简单功能。我们可以通过将不同功能命令组合在一起使用,达到完成某个复杂功能的目的。几乎所有命令返回数据都是纯文本(因为都是运行在cli下),纯文本又是大多数命令的输入格式,这使得多命令协作成为可能。Linux实现多命令协作的方法就是通过管道和重定向

  • 管道通常用来组合不同的命令,以实现一个复杂的功能。
  • 重定向通常用来保存某命令的输出信息或错误信息,可以用来记录执行结果或保存错误信息到一个指定文件。

命令行数据流有以下定义:命令通过STDIN接收参数或数据,通过STDOUT输出结果或通过STDERR输出错误

名称

说明编号默认
STDIN标准输入0键盘
STDOUT标准输出1终端
STDERR标准错误2终端

通过管道和重定向,我们可以控制CLI的数据流:

分类关键字定义举例
重定向>将STDOUT重定向到文件(覆盖)

echo "test" > outfile

ls > outfile

>>将STDOUT重定向到文件(追加)

echo "test" >> outfile

date > outfile

2>

将STDERR重定向到文件(覆盖)

(很适合用在处理日志的情况)

ls nothere 2> errorout

(nothere表示不存在的文件)

2>&1将STDERR与STDOUT结合,也就是返回结果和报错信息一起重定向ls nothere 2>&1 alloutput
<重定向STDINgrep linxcast < /etc/passwd
管道|将一个命令的STDOUT作为另一个命令的STDIN

ls -l | grep linuxcast

find / -user linuxcast | grep video

32、文本处理

1、文件浏览命令:cat、more、less、head、tail,前面已经介绍过

2、命令grep用于基于关键字搜索文本。参数有:

  • -i  搜索时忽略大小写
  • -n  显示结果坐在行数
  • -v  输出不带关键字的行 (取反,排除)
  • -Ax  在输出的时候包含结果所在行之后的指定行数
  • -Bx  在输出的时候包含结果所在行之前的指定行数
  • 可以搜索指定文本文件,举例:grep 'linuxcast' /etc/passwd
  • 也可以在其他命令的输出信息中搜索,举例:find / -user linuxcast | grep Video

3、命令cut用于基于列处理文本内容。参数有:

  • -d 指定分割字符(默认是TAB)
  • -f  指定输出第几列
  • -c  基于字符进行切割
  • 举例:cut -c2-6 /etc/passwd  表示只返回第2到6个字符
  • 举例2:cut -d: -f3 /etc/passwd   表示将/etc/passwd文件内容以冒号分割,返回第三列内容
  • 举例3:grep linuxcast /etc/passwd | cut -d: -f3

4、命令wc用例统计一个文本文件的相关信息(wordcount的缩写)

  • -l  只统计行数
  • -w  只统计单词
  • -c  只统计字节数  (也就是文件大小)
  • -m  只统计字符数
  • 如果不带参数wc linuxcast ,就会返回这个文件的行数、单词数、字符数

5、命令sort用以对文本内容进行排序

  • -r  进行倒序排序
  • -n  基于数字进行排序
  • -f  忽略大小写
  • -u  删除重复行。sort -u删除重复行,另一个命令uniq只能删除相邻的重复行
  • -t c 使用c作为分隔符分割为列进行排序
  • -k x 当进行基于指定字符分割为列的排序时,指定基于那个列排序

6、命令diff用来做文本比较,diff 文件1 文件2

  • -i  忽略大小写
  • -b  忽略空格数量的改变
  • -u  统一显示比较信息(一般用于生成patch文件),如 diff -u test test-new > final.patch

7、命令aspell显示检查英文拼写

  • aspell check linuxcast
  • aspell list < linuxcast

8、命令tr用来处理文本内容

  • 删除关键字,例如 tr -d 'TMD' < linuxcast 
  • 转换大小写,例如 tr 'a-z' 'A-Z' < linuxcast

9、命令sed用来搜索并替换文本,sed 正则表达式 文件名

  • sed 's/linux/unix/g' linuxcast  ,将文件linuxcast中所有的linux换成unix
  • sed '1,50s/linux/unix/g' linuxcast,将文件linuxcast中1-50行的linux换成unix
  • sed -e 's/linux/unix/g' -e 's/test/testnew/g' linuxcast,将文件中test和linux同时替换成对应词
  • sed -f sededit linuxcast ,将命令保存在文件sededit中,随时去调用

33、系统启动流程

系统启动的流程如下:BIOS  ----  MBR:Boot Code  ----  执行引导程序GRUB  ----  加载内核  ----  执行init  ---- runlevel

1、BIOS,基本输入输出系统。一般保存在主板的BIOS芯片中。计算机启动第一个运行的就是BIOS,它负责检查硬件并查找可启动设备(USB、CDROM、HD等,可在BIOS设置中定义)。

2、MBR,就是引导代码。BIOS找到可启动设备后执行其引导代码,引导代码为MBR的前446字节

3、GRUB引导程序。Grub是Linux现在主流引导程序,可以用来引导几乎所有操作系统,grub相关文件保存在/boot/grub中,配置文件为/boot/grub/grub.conf

4、kernel内核。MBR的引导代码负责找到并加载Linux内核。Linux内核保存在/boot/vmlinuz-xxx.xx,一般还会加载内核模块打包文件/boot/initramfs-xx.xx.xx.img,Linux为了保存kernel的精简将一些不常用的驱动和功能编译为模块,在需要的时候动态加载,而这些模块被打包保存为一个initramfs文件。命令dmesg可以查看本次启动时内核的输出信息。

5、init,他是Linux系统的第一个进程,也是所有其他进程的父进程。调用/etc/rc.d/rc.sysinit负责对系统进行初始化,挂载文件系统,并根据级别启动相应服务

  • Linux运行级别有7个:0--关机,1--单用户模式,2--不带网络的多用户模式,3--多用户模式,4--未使用,5--XII图形化模式,6--重新启动
  • 可以通过/etc/inittab配置文件修改默认运行级别
  • 每个级别对应的启动服务保存在/etc/rc.d/rc[0123456].d
  • 命令runlevel可以显示当前及上一个运行级别
  • 命令init可改变当前运行级别

6、单用户修改root密码

  • 为内核传递参数"1"或"single"可系统进入单用户模式
  • 单用户模式下不启动任何服务
  • 单用户模式直接以root登录,并需要密码
  • 可以用命令passwd修改root密码

通过在grub.conf中的启动配置中加入如下参数可对grub进行加密。password --md5 xxxxxxx(xxxxx代表一个加密后的密码,加密后的密码可通过grub-md5-crypt生成)

34、RPM软件包管理

源代码形式:

  • 绝大多数开源软件都是以源代码形式发布,源代码一般打包成tar.gz的归档压缩文件
  • 程序源代码需要编译成为二进制形式后才能运行使用
  • 源代码基本编译流程: ./configure检查编译环境、相关库文件以及配置参数并生成makefile;make对源代码进行编译生成可执行文件;make install将生成的可执行文件安装到当前计算机
  • 源代码形式软件使用麻烦,但兼容性可控性好
  • 开源软件一般都会大量使用其他开源软件,所以有大量的依赖关系

RPM:因为源代码形式优点是适用所有系统,可定制。但缺点是操作复杂,编译时间长,极易出错。所以开发了RPM。RPM通过将源代码基于特定平台系统编译为可执行文件,并保持依赖关系来简化开源软件的安装管理。使用单一软件包格式文件发布(.rpm文件)

  • RPM包常见的命名规范:linuxcast-1.2.0-30.e16.i686.rpm(linuxcast是名称,1.2.0-30是版本号,e16是系统,i686是平台)
  • 安装命令:rpm -i software.rpm
  • 卸载命令:rpm -e software   (不用带.rpm)
  • 升级形式安装: rpm -U software-new.rpm
  • 支持通过http、ftp协议安装:rpm -ivh http://xxxx/xxx.rpm
  • 参数-v代表显示信息,-h代表显示进度条

RPM会保存软件相关的很多信息,通过以下命令查询:

  • rpm -qa  列出所有已安装的rpm软件
  • rpm -qf filename  查询目标文件属于哪个rpm包
  • rpm -qi packagename  查询指定的已安装rpm软件的信息
  • rpm -ql packagename  查询指定已安装rpm软件包含的信息
  • rpm -qip software.rpm  查询rpm文件的信息
  • rpm -qlp software.rpm  查询rpm文件包含的文件

RPM验证:软件传播过程中可能会被恶意修改,所以为了安全加入了对软件的验证功能,验证一般使用非对称加密算法,所以需要一个密钥:

  • 导入密钥:rpm --import xxx-xxx-xx-x (代表密钥)
  • 验证rpm文件:rpm -K software.rpm
  • 验证已安装的软件:rpm -V software

35、YUM软件管理

rpm软件包形式管理软件虽然方便,但需要手动解决软件包的依赖关系,有时非常复杂。使用YUM可以解决这个问题。YUM是一个RPM的前端程序,用来自动解决RPM的依赖关系问题。特点如下:

  1. 可以对RPM进行分组,并基于组进行安装操作
  2. 引入仓库(repo)概念,支持多个仓库。仓库用来存放所有rpm软件包。仓库可以是本地的,也可以通过http、FTP或NFS形式使用网络仓库。
  3. 自动解决依赖关系,当使用yum安装一个rpm软件的时候,会自动在仓库中查找依赖软件并安装。
  4. 配置简单

yum仓库:

  • 仓库的配置文件保存在/etc/yum.repos.d/目录下
  • 仓库可以使用file、http、ftp、nfs方式
  • yum配置文件必须以.repo结尾
  • 一个配置文件内可以保存多个仓库的配置信息
  • /etc/yum.repos.d/目录下可以存在多个配置文件

yum基本命令:

  • 安装指定软件:yum install software-name
  • 卸载指定软件:yum remove software-name
  • 升级指定软件:yum update software-name
  • 通过关键字搜索:yum search keyword
  • 列出全部的/已安装的/最近的/软件更新的:yum list all/installed/recent/updates
  • 显示指定软件的信息:yum info packagename
  • 查询哪个rpm软件包含目标文件:yum whatprovides filename

创建yum仓库:

  1. 将所有rpm文件拷贝到一个文件夹中
  2. 通过rpm命令手工安装createrepo软件 rpm -ivh createrepo-xxx.xx.rpm
  3. 运行命令createrepo -v /rpm-directory  (/rpm-directory代表rpm文件目录)
  4. 如果有分组信息,则在运行命令时使用-g参数指定分组文件createrepo -g /tmp/*comps.xml /rpm-derectory  (CentOS/RHEL的分组信息保存在光盘repodata/目录下,文件名以comps.xml结尾)
  5. 创建好以后本机可通过file方式直接使用,如果要作为对外的YUM仓库服务器,可以通过http、ftp或nfs协议共享出去

二、Linux其他命令总结

2.1、Linux其他常用基础命令

查看系统信息或操作系统相关的命令:

  • hostname:查看主机名
  • uname:显示系统信息(-r查看内核版本号,-a显示所有信息,-m查看机型)
  • cat /etc/*-release:查看当前系统是什么(欧拉、CentOS或其他)
  • cat /etc/EulerLinux.confcat /etc/euleros-latest :查看欧拉版本
  • cat /etc/centos-release:查看CentOS版本
  • cat /etc/os-release:查看其他系统版本
  • archuname -m:查询架构类型(arm还是x86)
  • TOP命令:显示内存、cpu使用情况
  • netstat命令:显示网络状态,参数p查看对应进程号
  • last reboot命令:相当于last  | grep reboot,查看服务器重启记录
  • shutdown -h now命令:立即下电该节点

查看目录空间:

  • du -sh查看当前目录空间已使用大小,
  • du -sh 文件夹 查看指定文件夹已使用大小,
  • du -h --max-depth=1查看当前文件夹下各个文件和文件夹空间已使用大小,进入占用空间大的目录继续执行此命令,重复多次找。
  • df -h查看挂载的空间情况

后台执行命令nohup,可以将操作放到nohup文件中去执行,即使窗口关掉命令也不会停:

  • 格式:nohup Command [ Arg … ] [ & ]
  • Command:要执行的命令。Arg:一些参数,可以指定输出文件。&:让命令在后台执行,终端退出后命令仍旧执行
  • 看到有以下输出表示运行成功:appending output to nohup.out
  • 举例1:nohup python run.py 900 &     后台启动任务(python run.py 900代表整个任务命令),并记录在nohup.out文件中
  • 举例2:nohup python run.py 900 > runlog.log &   后台启动任务,并记录在runlog.log文件中
  • 举例3:nohup python run.py 900 > runlog.log 2>&1 &  后台启动任务,并记录在runlog.log文件中

linux中nohup和&有什么区别:

  • sh xx.sh &  将任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失
  • nohup sh xx.sh  将任务放到后台,关闭标准输入,前台不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。
  • nohup sh xx.sh &  将任务放到后台,但是依然可以使用标准输入,前台能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。

kill命令:

  • kill -2  中断(同 Ctrl + C)
  • kill -3  退出(同 Ctrl + \)
  • kill -9  强制终止 
  • kill -15 [默认] 终止
  • kill -18 继续(与STOP相反, fg/bg命令)
  • kill -19 暂停(同 Ctrl + Z)
  • pkill 通过程序的名字, 直接杀死所有进程:例如pkill firefox
  • killall 通过程序的名字,来杀死进程:例如killall firefox  。可以使用 -9 参数来强制杀死进程, killall -9 firefox

其他常用命令:

  • ps命令  :process status的缩写(ps aux--显示所有包含其他使用者的线程、ps -ef --显示所有进程和程序间的关系)
  • awk命令:文本分析,逐行读入,默认以空格将每行切片。$0表示整行,$1表示每行第一个字段。-F 指定分割符号,NF代表浏览记录的域的个数,$NF就表示最后一个了

  • xargs命令:给命令传递参数,通常从管道或stdin中读取

    • xargs作用是将标准输入的数据转换成命令行参数,然后传递给其他的命令执行。对于处理由某个命令的输出给另一个命令当参数的情况很有用。
    • 主要用于传递参数给不接受管道传参的命令。
    • 例如mkdir file1 file2 file3可以创建3个文件夹,但是echo "file1 file2 file3" | mkdir会报错,因为mkdir不接受管道传参。所以这个时候就用到xargs了:echo "file1 file2 file3" | xargs mkdir
    • 语法: xargs [-选项] [命令],默认是以空格为分隔符把标准输入分解成一个个参数。
    • 当没有指定命令的时候,默认是echo,也就是把参数打印出来。默认空格分参数,默认echo当命令
    • -d可以指定分隔符。举例 echo "file1,file2,file3" | xagrs -d ',' mkdir可以创建3个文件夹,因为它指定了以逗号为分隔符,所以传了3个参数进来
    • -p打印出要执行的命令,并问用户是否确定执行。
    • -t打印出命令直接执行
    • -L指定每一行分别当参数传给命令执行。-L 2表示每两行当一个参数给命令执行
    • -n指定将多少项作为参数(默认以空格分隔)传给命令执行(意味着命令将执行多次)。举例:
      echo "你好,世界,哈哈,嗷嗷" | tr -d "\n" | xargs -d ',' -n 2 echo
      #他表示换成逗号来分隔,然后每两项当一次参数给命令echo使用。
      #tr -d "\n"作用是去掉末尾的换行
      
      #结果如下:
      你好 世界
      哈哈 嗷嗷 
    • -I指定命令行参数占位符。如果xargs要讲命令行参数传给多个命令,可以用-I
    • --max-procs指定并行进程的数量(0表示不限制进程数)
    • 当输入数据汇总包含空格引号等特殊字符时,直接使用xargs可能会导致参数解析错误,这时就可以使用-0选项与find中的-print0结合,这样就可以通过NULL字符来分隔输入数据。例如find . -name "*.tmp" -print0 | xargs -0 -n 2 rm -rf 这条命令会每次将两个.tmp文件的路径当参数传给rm命令删掉。
  • head/tail/column -t   分别是显示前n行、显示后n行、对齐显示
    • head -n 1 可以简写成 head -1
    • cat file.txt | head -n 10head -n 10 file.txt 是一样的
    • tail有一个head没有的功能----tail -n+10表示从第10行开始输出后面全部内容
    • 例题:显示一个文件的第10行
      #方法1:
      tail -n+10 file.txt | head -n 1
      #或者
      cat file.txt | tail -n+10 | head -n 1
      #但是下面方法是错的:因为当文件不足10行的时候会返回最后一行出来
      cat file.txt | head -n 10 |tail -n 1
      
      #方法2:
      sed -n 10p file.txt
      
      #方法3:
      awk 'FNR == 10 {print }' file.txt
  • 命令uniq:检查及删除重复出现的行或列,常常和sort一起用“sort | uniq”。一起用的原因是uniq只能去重相邻的重复行。uniq -c 可以在每列旁边显示出重复出现的次数
    • 例题:统计一个文件中每个单词出现的频率,按从高到低显示出各个单词和次数
      #下面的tr -s ' ' '\n'作用是把空格变成换行
      cat words.txt | tr -s ' ' '\n' | sort | uniq -c | srot -r |awk '{print $2,$1}'
      #或者
      cat words.txt | xargs -n 1 | sort | uniq -c | srot -nr |awk '{print $2,$1}'

  • sdf 
  •  sdf
  • sdf 
  • sdf 
  • sdf 
  • sdf 

2.2、多命令协作总结

cat命令常和grep、wc等结合使用:

  • 查看文件:cat xxx
  • 查看文件并标上行数:cat -n xxx
  • 查看文件中的关键字:cat xxx | grep ***
  • 查看关键字并统计行数:cat xxx | grep *** | wc -l

多命令协作举例:

  • 多命令协作举例1:ps aux | grep 'python run.py' | grep -v grep | awk '{print $2}' | xargs kill -9   --命令表示查出所有的'python run.py'进程(去掉grep进程本身),然后得到每一行的第二个字段(pid),再传递给kill -9杀掉
  • 多命令协作举例2:netstat -ntlp | awk '{print $4}' |awk -F':' '{print $NF}' |sort -n  --命令表示将netstat -ntlp查出的结果按空格切片后的第四列再按冒号切片后的最后一列,再按顺序显示出来

三、Linux系统服务

3.1、日志

1、日志:

  • 日志是系统用来记录系统运行是一些相关信息的纯文本文件。目的是为了保存相关程序的运行状态、错误信息等,为了对系统进行分析、保存历史记录以及出错时分析错误使用。
  • linux系统一般会保存以下类型日志:内核信息、服务信息、应用程序信息

2、rsyslog

  • CentOS 5和THEL5及更早版本使用的是syslog,现在linux使用的是增强版本rsyslog
  • rsyslog一般默认安装,并被设置为自动启动,通过命令service rsyslog start/stop/restart控制rsyslog服务
  • rsyslog的配置文件为/etc/rsyslog.conf,日志消息一般保存在/var/log目录中
  • 因为日志文件是追加写,所以常用tail命令查看,且常用tail -f logfile实时查看日志变化信息

3、日志分类

rsyslog通过facility概念来定义日志消息来源,以方便对日志进行分类,有以下几种:

  • kern--内核消息
  • user--用户级消息
  • mail--邮件系统消息
  • daemon--系统服务消息
  • auth--认证系统消息
  • syslog--日志系统自身消息
  • lpr--打印系统消息
  • authpriv--权限系统消息
  • corn--定时任务消息
  • news--新闻系统消息
  • uucp--uucp系统消息
  • ftp--ftp服务消息
  • local0~local7

除了日志来源以外,对通来源的日志还进行了优先级划分Priority/Severity Level

  • Emergency  系统已经不可用
  • Alert  必须立即进行处理
  • Critical  严重错误
  • Error  错误
  • Warning  警告
  • Notice  正常信息,较为重要
  • Informational  正常信息
  • Debug  debug信息

4、rsyslog配置

/etc/rsyslog.conf文件中配置日志规则如下:

  • facility.priority     log_location   (表示 “来源.优先级   日志位置”)
  • 例如:mail.*    -/var/log/maillog   表示邮件系统来源的所有日志都保存到后面那个目录,目录前面的减号意义是日志不需要等待,哪怕还在缓存中也直接同步。(一般信息都是先写缓存再写硬盘)。这样可以提高效率,但有丢失风险。一般邮件这种产生大量日志的会使用。

如果需要将日志发送到一个统一的日志服务器,可以如下配置

  • *.*  @192.168.1.1  (使用UDP协议发送)
  • *.*  @@192.168.1.1  (使用TCP协议发送)

3.2、DNS服务

前面有讲过(linux网络基础),IP地址难以记忆,所以用域名来管理。域名和IP地址是一一对应的,DNS的作用就是域名解析,也就是在域名和IP地址之间转换。

1、DNS客户端

我们日常使用的支持网络的计算机一般作为一个DNS客户端使用,应用程序、服务、进程等等通过操作系统底层的功能发起对dns服务器的查询,对指定域名进行解析

  • linux中一般使用系统底层提供的gethostbyname()功能进行域名解析
  • 解析基于三种方式进行:文件(/etc/hosts、/etc/networks)、DNS服务器(/etc/resolv.conf)、NIS
  • 可以通过配置文件/etc/nsswitch.conf控制查询顺序:hosts:files dns

2、DNS专用查询命令

  • 命令host可用于dns查询:host www.xxxx.xxx
  • 命令dig用于dns查询,输出较详细信息:dig www.xxx.xxx
  • 命令host和dig都不会使用/etc/nsswitch.conf的配置,只会通过/etc/resolv.conf进行dns查询

3、DNS查询

其实域名最后还有一个'.',只不过一般不显示,所以域名其实是4个部分。DNS是一个树状结构,从上到下四层分别对应域名从右到左这4个部分:

  • 第一层:.
  • 第二层:类型com、net、org、cn、gov等
  • 第三层:域名
  • 第四层:主机名www、mail、ftp等
  • 举例:www.linuxcast.net.在dns查询时,先查到'.',再查net,再查到域名linuxcast,最后查到www
  • 可以使用dig +trace www.xxx.xx追踪整个域名查询过程

DNS服务器上,NDS信息通过一个叫资源记录(RR)的格式进行保存,RR不仅能保存域名到IP地址的对应信息,还能保存很多其他信息:

  • 常用属性:name、class、type、rdata
  • 其中的type类型分为 A--ipv4地址、AAAA--ipv6地址、MX--邮件记录、CNAME--别名、PTR--指针(逆向解析)、SRV--服务资源
  • 例如: www IN(Internet的意思) A 192.168.1.1  (前面4个部分分别对应name、class、type、rdata)

DNS服务器类型:

  • 主服务器master:保存域的zone配置文件,该域的配置、更改都在该服务器进行
  • 从服务器slave:作为冗余负载使用,从主服务器抓取zone配置文件。从服务器不修改,只同步主服务器。
  • 缓存服务器:没有zone文件,仅依靠缓存提供服务,通常用于负载均衡及加速访问使用

dig命令高级查询:

  • dig -t mx linuxcast.net   查询该域名的邮件服务器
  • dig -x www.linuxcast.net  进行逆向解析(从IP地址到域名)
  • dig -t soa linuxcast.net  查询域名的soa信息 (也就是zone文件)

3.3、FTP服务

ftp是一个互联网协议,提供文件共享功能。拥有一个服务端客户端,使用tcp协议作为底层传输协议,提供了数据传输的可靠性,标准端口为20--数据接口21--指令接口

FTP客户端与服务端的连接有2种模式:

  • 主动模式:客户端一个端口(>1023)向服务端21端口发送连接指令,然后21端口返回一个指令让客户端打开另一个端口(>1023)。服务端的20端口主动向客户端的该端口发起服务连接,然后这两个端口间开始数据传输。
  • 被动模式:所有的连接都由客户端发起。客户端一个端口(>1023)向服务端21端口发送连接指令,服务端打开一个随机端口(>1023)后21端口返回消息告诉客户端这个端口号,然后客户端会打开一个随机端口(>1023)向服务端那个端口发起连接开始数据传输。

linux现在应用最广泛的FTP服务程序叫vsftpd,提供一个快速稳定安全的FTP服务:

  • 安装命令:yum install -y vsftpd
  • 服务启动命令:service vsftpd restart
  • 主配置文件:/etc/vsftpd/vsftpd.conf
  • 黑名单:/etc/vsftpd/ftpusers
  • 控制名单:/etc/vsftpd/user_list
  • ftp共享目录:/var/ftp
  • 相关的日志信息:/var/ftp/xferlog

FTP基本命令:

  • 从ftp服务器下载文件用get命令:登录服务器后,cd到文件位置,get xxx下载
  • 将文件上传到ftp服务器用put命令:登录服务器后,cd到目标位置,put xxx上传

3.4、文件共享

1、NFS文件共享

  • NFS是linux系统之间使用最多的文件共享协议。ftp或http需要将文件下载后使用,而NFS的共享可以直接使用,不用下载。
  • NFS将一个文件夹共享出来,客户端就可以通过网络挂载该共享文件夹后直接使用,就像是本机的文件一样
  • NFS效率比ftp或http高很多,但往往只用于局域网内共享,互联网共享还是多用ftp或http
  • NFS三个主流版本:NFSv2、NFSv3、NFSv4

NFS协议:NFSv2、NFSv3需要使用rpc服务(NFSv4不需要)

  • 启动rpc服务命令service rpcbind start,设置开机自启动chkconfig rpcbind on
  • NFS服务是默认安装的,启动命令service nfs start,设置开机自启动chkconfig nfs on
  • 配置NFS的配置文件是/etc/sysconfig/nfs
  • 共享配置文件是/etc/exports,每一行代表一个共享,格式为“共享目录  允许的客户主机”。配置好共享后使用命令启动共享service nfs startexportfs -f,查看当前共享的命令exportfs -v

客户端挂载NFS共享:

  • 挂载命令:mount -t nfs 192.168.1.100:/linuxcast-nfs /mnt  (其中的ip是nfs服务器,linuxcast-nfs是共享路径,/mnt是挂载目录)
  • 也可以写入/etc/fstab中,启动时自动挂载:192.168.1.100:/linuxcast-nfs   /mnt   nfs   defaults 0 0
  • 使用-o指定挂载选项:ro只读挂载,rw读写挂载,vers=4指定使用NFSv4方式挂载

2、SMB文件共享

SMB协议(又叫CIFS协议)是Windows中使用的文件共享协议,linux系统也可以通过samba服务来实现。

3.5、web服务

web服务是我们日常使用最多的服务,所有网站都是web服务形式呈现的。

  • web服务分为服务端客户端
  • web客户端就是浏览器
  • web服务端就是我们所访问网站的web服务(IIS、Apache、Nginx、Lighttpd等),不同web服务程序针对不同系统平台

web的服务端和客户端之间通过http协议传输数据,http默认使用TCP协议,端口号80。http定义多种方式在客户端与web服务器之间交互,常见的有:

  • GET--从服务器获取一个资源(网页等)
  • POST--向服务器提交数据(可能会创建一个新资源)
  • PUT--向服务器提交数据
  • DELETE--删除指定资源
  • HEAD--只请求网页的头部信息

http通过状态码表示返回信息,常见状态码

  • 200--正常
  • 301--永久移动,一般用于域名重定向
  • 304--未修改,一般用于缓存
  • 401--禁止访问,未授权
  • 403--禁止访问,通常代表已认证通过,但无访问权限
  • 404--未找到资源
  • 500--服务器内部错误

HTML语言:

  • HTML是绝大多数网页使用的语言,几乎所有网页都以HTML作为源代码。
  • HTML拥有固定语法,用来存储网页数据,定义不同元素(文字、标题、段落、图片等)
  • 主流网页设计架构:内容存储HTML、网页架构div、网页样式css
  • 可以在网页右键--查看源代码,查看网页的HTML代码
  • HTML形式的页面称为静态页面
  • 常见的动态语言ASP、asp.net、jsp、php等(新兴的也有python等)。动态语言编写程序在用户访问的时候基于不同条件生成不同HTML代码返回给浏览器,这样就实现网页的动态化。

web服务架构:

  • 因为有静态页面和动态页面之分,所以现代web服务架构也分为web服务器应用服务器
  • 严格意义上的web服务器只通过http协议向外提供http、css等网页资源
  • 应用服务器则通过动态语言进行计算,生成HTML代码,将代码告诉web服务器,web服务器再返回给客户端
  • 完整的web服务架构还包括数据库,用来统一保存动态语言的数据

3.6、邮件服务

Mail_Basic邮件服务原理及架构

Postfix邮件服务基础配置

3.7、系统服务

服务(service)是运行在操作系统后台的一个或多个程序,提供某项特定服务。服务通常不中断运行,随时接收请求提供服务。用的最多的网页服务就是由一个运行在所访问网站的服务器上的http服务程序提供的。

服务器配置最多的是网络服务

  • 比如网页服务:其他用户、计算机通过访问固定IP地址及端口号访问服务器的某项网络服务。
  • 其他网络服务:邮件服务(mail)、文件共享(ftp、smb、http)、网游、域名服务(DNS)等。

system V(罗马数字5)是linux使用的服务管理体系:

  • 运行级别:0-关机,3-多用户模式,5-XII图形化模式,6-重新启动
  • 每个级别下都有对应启动和不启动的服务
  • system V定义init为系统启动的第一个进程,PID为1,init进程去查看/etc/inittab中的默认运行级别启动对应服务

每个服务的启动、结束、重启等操作由一个system V的脚本控制,有固定格式。脚本保存在/etc/rc.d/init.d

  • 命令service可以调用指定服务的sys V脚本并执行指定动作。
  • 命令格式:service 服务名 [start/stop/restart/status]
  • 可以通过chkconfig命令设置某服务在开机启动时自动运行,格式:chkconfig 服务名 [on/off]

除了常驻运行的系统service由system V控制之外,还有部分服务是由xinetd进行控制的:

  • xinetd本身就是一个系统服务,用system V方式进行管理控制
  • xinetd控制那些不会常驻、功能较简单的服务
  • xinetd自身作为一个服务常驻运行在后台,它所控制的服务没有链接需求时不运行,这些服务连接请求都会交由xinetd代理
  • xinetd收到请求后,根据请求的协议及服务启动相应的服务进程,进程处理完请求后就结束
  • xinetd还可以对连接请求进行访问控制
  • 常见的xinetd服务有:telnet、tftp、rsync
  • xinetd服务需要手工安装:yum install xinetd
  • xinetd控制的服务启用禁用通过命令chkconfig进行控制:chkconfig tftp on/off
  • xinetd的配置文件/etc/xinetd.conf,而xinetd控制的服务的配置文件/etc/xinetd.d/下与服务同名的文件

四、Linux高级系统管理

4.1、LVM卷

传统磁盘的问题:当分区大小不够用时无法扩展其大小,只能通过添加硬盘、创建新分区来扩充空间。但是新添加进来的磁盘是作为独立文件系统存在的,并没有扩充原来的文件系统,上层应用很多时候只能访问一个文件系统。所以只能让现有磁盘下线换新磁盘后再把数据导入。为了解决这个问题,就诞生了LVM逻辑卷

1、LVM逻辑卷的概念:

LVM是一种动态磁盘管理机制,大大提高磁盘管理的灵活性。LVM通过将底层物理硬盘抽象封装起来,以逻辑卷形式表现给上层。逻辑卷大小可动态调整且不丢失现有数据,新加的磁盘也不改变现有的逻辑卷。有四个基础概念:

  • PE:物理扩展。是LVM管理的最小单位(默认4M大小)。
  • PV:物理卷。把磁盘格式化成物理卷。一个磁盘变成了一个PV,它由众多PE组成。
  • VG:卷组。可理解成空间池,可以把多个PV加进来,这些PV里的所有PE都被拉通在这同一个池里。创建好卷组后就会多一个目录/dev/vgname(vg的名字)
  • LV:逻辑卷。最终使用的空间。从VG中根据我们的需求取出对应数量的PE组成LV(同一个LV下的PE们可能来自不同的PV,即来自不同的磁盘)。创建好后就会多一个文件/dev/vgname/lvname(lv的名字)。LV就可以挂载后使用了。
  • 简单理解:就是把磁盘划分成很小的一个个PE,然后把不同磁盘的所有PE拉通到一个池里,我需要多大空间的LV就从池里取多少个PE来创建,所以更灵活。LV的扩充缩减也就是增减PE的数量,不丢失原始数据。
  • 新硬盘的加入也一样,格式化成PV,然后把PE放进VG里等待使用。

2、LVM逻辑卷的基本操作

3、LVM逻辑卷的拉伸与缩小

4.2、ACL高级权限

1、ACL概念:

传统的UGO权限模型无法应对复杂的权限设置需求,比如对一个文件只能设置一个组,对该组进行权限控制,如果有多个组都要访问文件都要进行权限限制时,UGO就无法满足了。所以诞生了ACL来解决这个问题。

2、ACL设置命令:

4.3、RAID原理

影响计算机性能的组件一般包括CPU、主板总线IO、内存IO、硬盘IO、网卡IO等。其中硬盘IO往往较低,硬盘成为了绝大多数计算机的性能瓶颈。

硬盘性能极弱,稳定性极差。所以诞生了RAID,它是廉价磁盘冗余阵列技术,通过多次盘并行运行来提高计算机的存储IO性能。RAID级别共7类(0-6),常用的是以下4类:

级别原理介绍空间利用率性能冗余能力
RAID 0最少2块硬盘。读写时将数据分开读写到多块硬盘的方式提高性能。所有硬盘空间之和所有硬盘速度之和
RAID 1最少2块硬盘。写数据时将数据复制写到多块盘。读数据时以提供冗余。同时从多块盘读取提高性能所有盘中最小的那个读性能为所有盘速度之和。写性能有所减弱。只要有一块盘正常就正常
RAID 5最少3块盘。和RAID0类似,读写数据时会读写到所有硬盘上,但写的时候进行奇偶校验运算,将校验信息同时保存到硬盘上,校验信息可以进行数据恢复1-1/n读性能接近RAID 0,写性能比RAID0弱一点。可以接受2块硬盘损坏
RAID 6最少4块盘。与RAID5类似,读写数据时会读写到所有硬盘上并保存奇偶校验信息,但会多保存一份校验信息,所以冗余性有所提升。1-2/n读写性能接近RAID5,读性能比RAID5弱一点可接受2块盘损坏

2、软件RAID配置方法

RAID的实现方式有2种,软件RAID和硬件RAID。创建软件RIAD的配置与查看方法:

4.4、网卡与网口

网卡高级命令有:

  • 查看网卡底层信息:mii-tool eth0
  • 查看网卡物理特性:ethtool eth0
  • 查看网卡驱动信息:ethtool -i eth0
  • 查看网卡状态:ethtool -S eth0

IP别名:linux支持在一个网卡上配置多个IP地址,用来实现类似子接口之类的功能,称为IP别名。

创建IP别名的方法:

添加永久IP别名的方法:

多网卡绑定

  • linux支持多个物理网卡绑定成为一个逻辑网卡,绑定后的逻辑网卡可并行使用这几个物理网卡,用以提高带宽和稳定性。
  • 绑定后IP地址配置在逻辑网卡上,物理网卡不再直接使用。
  • 绑定后的逻辑网卡命名为/dev/bond0、/dev/bond1等等
  • 创建绑定网卡的配置文件:/etc/sysconfig/network-scripts/ifcfg-bond0
  • 网卡绑定模式有:模式0--平衡轮训,模式1--主动备份,模式3--广播

网卡绑定配置方法:

4.5、SELinux基础

  • SElinux是安全增强linux,是一个全新的linux安全策略机制,允许管理员更加灵活的定义安全策略。
  • 是一个内核级的安全机制,2.6内核之后集成在内核中。
  • 主流linux版本都会集成,并默认开启SElinux
  • 因为是内核级的,所以SElinux的修改一般需要重新启动

所有安全机制都是对进程和系统资源(文件、网络套接字、系统调用等)做出限制的,SElinux针对这两个类型定义了两个基本概念:

  • :用来对进程限制。命令ps -Z查看进程的域
  • 上下文:对系统资源进行限制。命令ls -z查看文件的上下文

策略:

  • SElinux通过定义策略来控制哪些域可以访问哪些上下文
  • SElinux有很多预置策略,我们通常不需要自定义策略
  • CentOS/RHEL使用的是预置的目标策略(target)
  • 目标策略(target)定义只有目标进程受到SElinux限制,其他进程运行在非限制模式下

SElinux有三种工作模式:

策略、域、上下文:

4.6、iptables

网络访问控制:linux内核通过netfilter模块实现网络访问控制功能,在用户层我们可以通过iptables程序对netfilter进行控制管理。

iptables配置管理:

4.7、远程管理

与个人计算机不同,服务器一般都运行在IDC机房,我们只能通过各种远程管理方式对服务器进行控制。常见远程管理工具方式:

  • RDP协议。Windows远程桌面管理
  • telnet--CLI界面下的远程管理,几乎所有操作系统都有(内容明文传输)
  • SSH--CLI界面下的远程管理,几乎所有操作系统都有(内容加密传输),类UNIX系统下最主要的远程管理方式。
  • RFB--图形化远程管理协议。VNC使用的协议,主要作为类UNIX系统下的图形化远程管理方式。

SSH:

  • 类UNIX系统下最主要的远程管理方式。使用密钥对数据加密传输,保证了远程管理数据的安全性。
  • SSH2是当前主要版本
  • SSH协议使用TCP协议,端口号22
  • openssh是ssh的一个开源程序,绝大多数linux版本均使用openssh作为SSH程序
  • SSH分为服务端与客户端,SSH服务端默认启动,作为常驻服务运行。查看服务状态命令service sshd status

SSH登录其他主机命令:

  • ssh root@192.168.1.1   (登录后用exit命令退出)
  • ssh root@192.168.1.1 who (登录命令后面加一个其他命令,表示登录后执行该命令,显示该命令的返回结果后直接退出)
  • 第一次在两台主机间建立SSH连接时需要交换公钥用以进行加密
  • ssh信息保存在用户家目录的.ssh/隐藏文件夹下

其他使用SSH的命令:

  • scp命令用ssh命令在两台计算机间进行文件复制(cp命令用法完全一样,只不过是在同一台机器内进行复制,所以用不到ssh)
    • scp 源文件 目标地址
    • 例1:拷贝本端文件到对端  scp /root/xxx.tar.gz root@192.168.1.1:/root/
    • 例2:拷贝对端文件到本端  scp root@192.168.1.1:/root/xxx.tar.gz /root/
    • -r 递归拷贝(也就是拷贝整个文件夹)
    • -p 传输时保留文件权限及时间戳
    • -c 传输时进行数据压缩
  • 命令rsync通过ssh在两台计算机之间同步文件:
    • rsync *.* root@192.168.1.1:/root/
    • rsync命令时一种增量同步方式,只会拷贝变化的文件(修改、新增、删除)

如果可以从A账号通过su切换到root,但是却不能直接用root登录:

  • 使用A登录,修改etc/ssh/sshd_config文件,将PermitRootLogin改为yes,再用systemctl restart sshd重启sshd,然后就可以用root账号登录

VNC

一种linux系统下的图形化远程管理协议,使用RFB协议

4.8、DHCP服务

DHCP:动态主机配置协议,通过dhcpd实施,为dhcpd和bootp ipv4,ipv6客户端提供服务

  • 类型:system V管理的服务
  • 软件名:dhcp
  • 守护进程:/usr/sbin/dhcpd
  • 脚本:/etc/init.d/dhcpd
  • 端口:67(bootps),68(bootpc)
  • 配置文件:/etc/dhcp/dhcpd.conf、/var/lib/dhcpd/dhcpd.leases

DHCP协议工作原理:

配置DHCP服务器:

4.9、TFTP服务

4.10、PXE网络引导

4.11、无人值守安装

五、shell基础

5.1、shell概述

从外层到内层分别是 外层应用程序--linux内核--硬件,但是我们外层应用程序的操作,linux内核是理解不了的,所以在这两层中间多加入一层shell层,它的作用就是把外层应用程序的操作转换成linux内核可以理解的命令。所以:

  • shell就是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
  • 从内到外依次是 硬件--linux内核--shell--外层应用程序
  • shell还是一个功能相当强大的编程语言,易编写易调试,灵活性强

命令cat /etc/shells可以查看shell解释器,常见的有bash、sh、tcsh、csh等。命令echo $SHELL看环境变量可以查看当前系统的默认解释器

5.2、shell脚本基础:

  • 脚本的名称后缀是.sh  (不是.sh也可以,只不过约定俗成)
  • 脚本内容以  #!/bin/bash  开头,作用是指定解析器
  • sh或bash+脚本相对路径执行脚本:[sh/bash] ./xxx.sh
  • sh或bash+脚本的绝对路径执行脚本:[sh/bash] /home/xx/xx.sh
  • 脚本有可执行权限的话,直接用相对路径执行脚本:chmod +x xxx.sh    、  ./xxx.sh
  • 脚本有可执行权限的话,直接用绝对路径执行脚本:chmod +x xxx.sh    、  /home/xxx/xxx.sh
  • 在脚本的路径前加上“.”或者 source执行脚本:. /xxx.sh   (这种方法可以使脚本内容在当前shell里执行,而无需打开子shell。子shell与不开子shell的区别在于,环境变量的继承关系)

5.3、变量

系统预定义变量(大部分是全局变量):

  • 如$HOME(当前家目录)、$PWD(当前工作目录)、$SHELL(当前解释器)、$USER(当前用户)等
  • 命令echo 变量名可查看某个变量,例如echo $HOME等
  • 命令envprintenv查看所有的全局变量
  • 命令set查看当前shell中的所有变量(包括全局、局部)

用户自定义变量:

  • 定义变量或变量重新赋值:变量名=变量值,(注意=号前后不能有空格)
  • 撤销变量:unset 变量名
  • 声明静态变量(也就是只读变量,不能修改):readonly 变量,注意:不能 unset
  • 把变量提升为全局环境变量:export 变量名(不用加$符号)  (全局变量的作用范围是当前shell及他嵌套的子shell,子shell的更改不影响父shell)

变量定义规则:

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
  • 等号两侧不能有空格
  • 在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
  • 变量的值如果有空格,需要使用双引号或单引号括起来。

特殊变量:

  • $n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
  • $# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)
  • $* (功能描述:这个变量代表命令行中所有的参数$*把所有的参数看成一个整体)
  • $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
  • 举例:
#创建一个脚本
touch  test.sh

#修改脚本内容
vim test.sh

#内容如下,意思是显示脚本名和前两个参数($0和$1$2),返回有几个参数($#),返回所有参数($*、$@)
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
echo '==========$n=========='
echo $#
echo '==========$*=========='
echo $*
echo '==========$@=========='
echo $@

#执行脚本,执行的时候传入多个参数
chmod 777 test.sh
./test.sh a b c d e f g

#执行结果如下
a
b
==========$#==========
7
==========$*==========
a b c d e f g
==========$@==========
a b c d e f g
  • $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
  • 举例
#执行脚本
./helloworld.sh
hello world

#查看上一个脚本返回结果
echo $?
0

5.4、运算符

  • 基本语法:“$((运算式))” 或 “$[运算式]
  • 例如定义变量:S=$[(2+3)*4]    ,echo $S查看变量,得到变量值为20

5.5、条件判断

  • 基本语法1:test 条件表达式
  • 举例:test $A = hello   (检查变量A的值是不是hello) echo $?  (查看上一条结果是不是0)
  • 基本语法2:[ 条件表达式 ] (注意 条件表达式 前后要有空格)。如果[  ]中间不是判断式的话,那么只要非空就是true,中间为空的才返回false
  • 举例:[ $A = hello ]   (检查变量A的值是不是hello) echo $?  (查看上一条结果是不是0)

两个整数之间比较:

  • -eq 等于(equal)
  • -ne 不等于(not equal)
  • -lt 小于(less than)
  • -le 小于等于(less equal)
  • -gt 大于(greater than)
  • -ge 大于等于(greater equal)
  • 注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。

按照文件权限进行判断:

  • -r 有读的权限(read)
  • -w 有写的权限(write)
  • -x 有执行的权限(execute)

按照文件类型进行判断:

  • -e 文件存在(existence)
  • -f 文件存在并且是一个常规的文件(file)
  • -d 文件存在并且是一个目录(directory)

多条件判断:

  • && 表示前一条命令执行成功时,才执行后一条命令
  • || 表示上一条命令执行失败后,才执行下一条命令
  • 举例:[ atguigu ] && echo OK || echo notOK    结果返回OK
  • 举例:[ ] && echo OK || echo notOK   结果返回notOK

5.6、流程控制

if判断:

  • if单分支基本语法1:
    if [ 条件判断式 ];then
        程序
    fi
  • if单分支基本语法2:
if [ 条件判断式 ]
then
	程序
fi
  • if多分支基本语法:
if [ 条件判断式 ]
then
	程序
elif [ 条件判断式 ]
then
	程序
else
	程序
fi
  • 注意:

        ①[ 条件判断式 ],中括号和条件判断式之间必须有空格

        ②if 后要有空格

case语句:

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

        (1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
        (2)双分号“;;”表示命令序列结束,相当于 java 中的 break。
        (3)最后的“*)"表示默认模式,相当于 java 中的 default。

for循环基本语法:

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

while循环基本语法:

while [ 条件判断式 ]
do
	程序
done

5.7、读取控制台输入read

  • 语法:read (选项) (参数)
  • 选项:

        -p:指定读取值时的提示符;
        -t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待

  • 参数:

        变量:指定读取值的变量名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值