type
status
date
slug
summary
tags
category
icon
password

一、Linux基础

1.简介

  • Linux是多用户、多任务、抢占式操作系统,原著者Linus,是开源操作系统
  • 基本组成:Kernel内核、Shell命令行、System Applications
    • 用户输入命令—–shell翻译—–kernel
    • Linux Kernel Linux操作系统的核心程序
      • 管理程序的运行,为程序分配资源,并且处理程序之间的通信。
      • 管理对文件系统的读写,把对文件系统的操作映射成对磁盘或其它块设备的操作。
      • 管理存储器,为程序分配内存,并且管理虚拟内存。
      • 管理输入、输出,将设备映射成设备文件。
      • 管理网络。
    • Linux Shell
      • 是一个命令解释器,是内核和用户之间的接口。
      • 是一个编程语言。(Shell script)
      系统的启动过程:
      init -> login -> passwd -> shell
    • Linux应用程序
      • 标准的Linux系统都具有一整套称为应用程序的程序集,包括文本编辑器、Xwindow、办公套件、Internet工具和数据库等。
  • shell提供内核的保护层
    • 对用户屏蔽内核的复杂性
    • 保护内核以免用户操作造成伤害
  • 系统各层次关系:
    • 硬件是实体工作者
    • 内核能够控制硬件工作
    • shell是用户与内核沟通的桥梁,是中间站
      • notion image
       

2.基本命令

Linux命令是大小写敏感的,不同于Windows
  • 登录 退出
  • exit退出命令窗口
  • 中断当前的通信或从文件中退出。
  • 中断当前的命令并返回Shell
  • date 查看当前日期和时间
    • CST:China Standard Time 中国标准时间
      PST :Pitcairn Standard Time 太平洋标准时间
  • date -s设置日期/时间
    • cal 查看日历(默认当前年份 月份的月历)
      • cal 年份 查看当年12个月日历
      • cal 月份 年份 查看该年该月日历
    • cal 仅显示当前月份日历
    若只有一个数字,则被认为是年,并显示相应年的12个月的日历。
    • clear 清屏
    • echo 在标准输出上显示字符串 \换行符
    • who 查看当前用户及登陆时间
    • whoami 查看当前用户
    • ping 检测主机。使用 ICMP 传输协议,发出要求回应的信息
    • mail
      • mail <username> 发送E-mail
      • mail 接收 E-mail
      • 一旦邮件被打开,其将被放 $HOME/mbox目录中,若想再看这些信息则用:
        mail -f
    • wall 将在系统中的所有在线用户的终端上显示信息,主要用于广播系统管理信息。
    • write 发送信息 write <username> 用结束对话
    • mesg 信息接收与否的开关命令
      • mesg n拒绝消息 mesg y允许接收消息
    • man+命令 查看具体命令的说明 (press q to quit)
    超级用户root,Shell默认提示符:#
    普通用户,Shell默认提示符:$
    • # useradd rainnn
      • 添加用户rainnn
    • #deluser rainnn
      • 删除用户rainnn

    3.知识点

    1. > 表示覆盖原文件内容(文件的日期也会自动更新)
    >> 表示追加内容(会另起一行,文件的日期也会自动更新)
    1. tty 终端机代号
    (3)常见目录说明
    • /bin 存放二进制可执行文件(ls,cat,mkdir 等),常用命令一般都在这里。
    • /etc 存放系统管理和配置文件
      • /etc/shadow 存放用户口令的加密信息
    • /home 存放所有用户文件的根目录,是用户主目录的基点。
      • 比如用户 user 的主目录就是/home/user,可以用~user 表示。
    • /usr 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员 软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用 程序和文件几乎都在这个目录。
      • /usr/x11r6 存放 x window 的目录
        /usr/bin 众多的应用程序
        /usr/sbin 超级用户的一些管理程序
        /usr/doc linux 文档
        /usr/include linux 下开发和编译应用程序所需要的头文件
        /usr/lib 常用的动态链接库和软件包的配置文件
        /usr/man 帮助文档
        /usr/src 源代码,linux 内核的源代码就放在/usr/src/linux
        /usr/local/bin 本地增加的命令
        /usr/local/lib 本地增加的库
    • /dev 存放设备文件
    • /mnt 系统管理员安装临时文件的安装点。
      • 系统提供这个目录是让用户临时挂载其他的文件系统。
    • /tmp 存放各种临时文件,是公用的临时文件存储点。
    • /var 存放运行时需要改变数据的文件,也是某些大文件的溢出区, 比方说各种服务的日志文件(系统启动日志等。)等。
    • /opt 额外安装的可选应用程序包所放置的位置。
      • 一般情况下,我们可以把 tomcat 等都安装到这里。
    • /boot 存放用于系统引导时使用的各种文件
    • /proc 虚拟文件系统目录,是系统内存的映射。
      • 可直接访问这个目录来获取系统信息。
    • /root 超级用户的目录

    二、文件系统

    文件系统:文件系统实现数据存储的物理(介质)独立性
    文件:是Linux用来存储信息的基本结构,它是被命名(称为文件名)的、存储在某种媒介(如磁盘、光盘和磁带等)上的一组信息的集合。

    1.文件名

    (1)文件名通常由字母、数字、“.”(点号)、“_”(下划线)或“-”(减号)组成,文件名中不能含有“/”符号。
    (2)隐藏文件一般是以“.”符号开头
    (3)在文件名中的空格或制表符,在引用文件时必须用引号将其括起来;
    (4)大小写敏感
    (5)避免使用具有特别意义的字符: ?,*,@, #,$,&,(,),,|,;,‘,“,`,<,>,[,]等
    (6)避免使用 ‘+’和‘-‘符号作为文件名的第一个字符

    2.文件类型

    (1)普通文件(regular file)

    • 二进制文件
    • 文本文件

    (2)目录文件(directory) 包含文件的容器,用于存放目录中文件列表信息

    存储一组相关文件的位置、大小等与文件有关的信息,但它不包含具体的文件内容,因而和常规文件相比占用的磁盘空间很小。
    每一项(entry) 主要表示的是一个文件名(或子目录名)以及文件的索引节点号(i-node number ) 。
    索引节点号:指向该文件内容所在的数据块的位置,记录了该文件的属性
    通过 i-node表与文件之间建立对应关系,目录文件是存放文件名唯一的地方,但文件名不放在 i-node表中。

    (3)设备文件(device file) 在linux中,设备被当作文件来处理

    Everything is a file!

    3.目录组织

    • 访问一个文件或子目录时,首先访问他所在的目录,找到该文件的i-node值,然后再查找i-node表找出相应的i-node项,从而找到了相应的数据。
      • notion image

    4.※操作命令

    • touch 创建文件
    • cp 复制 cp [-options] 源文件或目录 目的文件或目录
      • i:在覆盖文件之前提示用户,由用户确认.
      • R或-r:递归复制目录,即复制相应的目录及其所有子目录
    • mv 移动或改名
      • mv 原文件名 新文件名 (改名) mv 文件名 路径名 (移动) mv 文件名 路径/新文件名 (移动并改名)
      • f 强制执行。直接覆盖已存在的目的文件,不显示覆盖前的询问讯息。
      • i 交互执行。当已存在同名的目标文件名时,在覆盖之前给出提示,由用户确认后才予以覆盖。
    • rm 删除文件
      • rm file1 file2(删除多个文件用空格隔开文件名) rm directory (删除目录)
      • f 强制执行
      • i 交互执行,在执行删除前提示确认
      • R或-r 递归的删除目录
    • mkdir 创建目录(对其父目录必须有写权限)
      • p 递归创建,即使路径上的文件夹本来不存在
        • m 指定权限
        • rmdir 删除目录 (对该目录的父目录必须有写权限,且该目录为空目录)
        • whereis 显示文件目录
          • whereis 找不到某个文件的部分原因可能是这个文件没有存在于任何 whereis 命令搜索的子目录中。whereis 命令检索的子目录是固定编写 在它的程序中的。
        • locate 与 find -name 相同
          • mount 挂接文件系统
            • Linux 通过挂接(mount)一个文件系统将该新文件系统加入它的文件系统树中。所有的文件系统, 不管是什么类型,都挂接在文件系统树的一个目录上并且该文件系统之上的文件将掩盖掉这个挂接目录中原来存在的内容。这个目录称为挂接目录或挂接点。当文件系统被卸掉之后,挂接目录中原来的文件才再次可见。
          • ls
            • ls -a 显示全部文件(包括文件名以“.”开头的隐藏文件)
            • ls 显示文件
            • ls -l 显示长目录(文件的详细信息:文件的类型、操作权限、链接数、属主名、属组名、字节数、最近修改时间、文件名)
              • 每行的第一个字符表明文件的类型:
                • d 目录
                • f 普通文件
                • l 符号链接文件
                • b 块设备文件
                • c 字符设备文件
            • ls -d 显示目录名而不显示其中的文件。
            • ls -R 递归列出子目录(显示文件+目录下文件)
            • ls -r 以逆序显示文件名列表
            • ls -x 显示时以字母顺序
              • (注:正常的显示顺序为按ASCII排序方式。)
            • ls -color 用不同颜色区分文件类型
            • 颜色含义为:
              绿色—>可执行文件
              蓝色—>目录
              红色—>压缩文件
              浅蓝色->连结文件
              灰色—>一般文件(没有定义的文件)
              (颜色自定义可修改/etc/DIR_COLORS
          • cd 切换路径
          • cat 将文件的文本内容一次全部显示在屏幕上
            • cat -n filename 打印行号
            • cat -b filename 打印行号,空行不编号
            • cat filename打印文本内容(不包括行号)
            • 文件的合并、建立、覆盖和添加内容等
              • cat file1 file2 >file 将file1和file2合并到file
              • cat file1 >>file2 将file1追加到file2的末尾
          • more 分屏显示文件内容。
            • 你可以随心所欲地在文本上上下移动。
              当more命令调用一个文件时,显示第一屏的文本。常用按键:
            • f键或: 进入下一页。
            • b键: 前一页
            • : 向下移动一行
            • q键或<Ctrl+C>:退出。
          • less
            • less 工具也是对文件或其它输出进行分页显示的工具,应该说是 linux 正 统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹 性。 在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使 用了 less 时,就可以使用 [pageup] [pagedown] 等按 键的功能来往前 往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头 可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
          • wc 统计文件中的字符数、单词数和行数 按以下顺序输出:
            • 行数 单词数 字符数 文件名
              wc [ -options] [ filename ]
            • c:显示字符数。
            • l:显示行数。
            • w:显示单词数。(单词是指由空格或 tabs 分开的最大字串。)
            • (wc 等价于 wc -lwc)
          • alias 别名 alias 简称='代码'
            • id 显示用户 id 以及群组 id
            • df (disk free) 显示目前在 Linux 系统 上的文件系统磁盘使用情况统计。

            5.基本概念

            (1)目录

            • pwd 当前目录即当前工作目录 (print working directory)
            • 用户主目录:/home/rainnn (~) root用户:/root
              • cd 回到主目录
            • 绝对路径:指出从根目录到此文件的路径,一般来说由/符号开始。
            • 相对路径:指明从当前目录到此文件的路径
              • .表示当前目录 ..表示当前目录的父目录
            • $HOME 主目录
              • echo $HOME查看自己的主目录

            (2)链接

            链接文件:目录中每一对文件名称和索引节点号称为一个链接(考)
            • 符号链接(软链接) 可跨文件系统 可以链接目录
              • 以路径的形式存在,类似于windows操作系统中的快捷方式
              • 可以对一个不存在的文件名进行链接
              • 如果删除符号链接文件的源文件,符号链接文件将无法找到原有资料。
            • 硬链接 不可跨文件系统
              • 以文件副本的形式存在,但不占用实际空间(ln 用于对一个已经存在的文件再创建一个新的链接,而不复制文件的内容。)
              • 原文件名和链接文件名都指向相同的物理位址。 (i-node number)
              • 不允许普通用户给目录创建硬链接
              • 如果删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了原有的内容
              • ln 后的链接文件名与物理文件具有相同的权限
            • ln 命令
              • ln -s abc linkabc(为abc文件创建软链接linkabc,若abc丢失,linkabc会失效)
              • ln abc linkabc(为abc创建硬链接linkabc,abc与linkabc各项属性相同)

            6.权限控制

            多用户、多任务(此操作系统决定了常常会有多人同时使用这部主机工作),系统必须进行权限控制
            确定用户(或者说代表用户执行的程序)对某资源有或无某种操作的权力。

            (1)用户类别

            • 文件所有者 u
            能够设定同组用户和其他用户对该文件的访问权限。一般来说是文件的创建者。
            保证每个人的隐私权
            • 同组用户 g
            具有相同性质的所有用户,被系统管理员分在同一组。文件所有者或系统管理员可将文件的权限赋予组内的其它用户。
            Linux中每个用户至少属于一个用户组,以保证对一个用户组中的所有用户进行集中管理
            • 其他用户 o
            文件所有者或系统管理员还可以将文件的访问权赋予系统中所有其它的用户。这样,系统中每一位用户可能都能访问你的某一文件或目录。
            • 所有用户 a

            (2)三种权限

            • 读 r: 4
            • 写 w: 2
            • 执行 x: 1
            • : 0
              • notion image

            (3)权限判断

            notion image
            ls -lR 查看目录内一文件的权限 (ls -lR 相当于 ls -l + ls -R 长列表显示文件+目录下文件)
            • 移动:文件所在目录具有w权限(移动文件其实不改变文件,是改变的目录)
            • 在目录下增删文件、子目录(touch rm mkdir rmdir):要有目录的w权限
            • 用ls列目录:要有目录的r权限
            • 进入目录或将该目录作路径分量时(cd):要有该文件路径上所有目录的x权限
            • 修改:文件有w权限,文件路径上所有目录有x权限
            • 拷贝:文件有r权限,文件路径上所有目录有x权限

            (4)权限操作命令

            • chmod
              • chmod a+r 文件名(给所有用户加r权限)
              • chmod u-r 文件名(给文件所有者减r权限)
              • chmod -R a+r *(将目录下所有文件与子目录皆设为任何人可读)
              • chmod 771 file(与chmod ug=rwx,o=x file 效果相同)
            • chown 设置文件所有者和文件关联组
              • chown [-options] user[:group] filelist
            • user表示将要改变的所有者用户名或用户id
            • group表示将要改变的所属用户组名或组id
              • chown test test.txt 把test.txt的所有者改为用户test
            • R:递归改变目录及其内容的所属用户或用户组
            • chown -R root:test testfloder1 把testfolder1目录及目录下所有文件的所有者改为root,所属用户组名改为test
            • su + 用户名 切换用户
            • sudo 以系统管理员的身份执行指令

            7.进程管理

            (1)概念

            • 程序是静态的,是保存在磁盘上的可执行代码和数据的集合
            • 进程(进程是程序执行的过程,是执行的程序)是动态的,是Linux系统的基本调度单位
            • 操作系统通过进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行哪个程序、运行多久。
            • Linux重要特点:可以同时启动多个进程

            (2)Init进程

            • 内核启动后的第一个进程,其PID=1
              • (PID:进程号 一个PID唯一的标识一个进程)
            • init进程永远不会被终止,扮演终结父进程的角色,所有进程追溯其祖先最终都会落到init进程身上。如果某个进程在它衍生出来的全部子进程结束之前被终止,此时那些失去了父进程的子进程就都会以init作为它们的父进程。

            (3)操作命令

            • ps 显示当前进程的状态
              • 可以用它来确定有哪些进程正在运行以及运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。 它显示的进程列表是一个静态列表,这个列表是在我们启动这个命令时正在运行的进程的快照。
                USER
                PID
                %CPU
                %MEM
                VSZ
                RSS
                TTY
                STAT
                START
                TIME
                COMMAND
                进程所有者
                进程号
                对cpu的占用率
                对内存的占用率
                占用的虚拟内存大小
                占用的内存大小
                进程相关的终端设备
                进程状态R:运行S:中断T:停止D:不可中断Z:僵死
                进程开始时间
                进程使用的总cpu时间
                被执行的命令行
            • top 动态地持续监听进程地运行状态
              • d 设置刷新进程的时间间隔,你会被提示输入一个数(秒)
              • q 退出 top 命令。
              • k 杀死某进程。你会被提示输入进程 ID 以及要发 送给它的信号。
              • h 显示帮助屏幕
              • n 显示的进程数量。你会被提示输入数量。
              • u 选择用户。
              • M 按内存用量排序。
              • P 按 CPU 用量排序。
            • kill 删除执行中的程序或工作 终止和挂起后台进程
            • pgrep 查找进程的信息,默认只显示PID(通常会和kill命令来连用,在指定条件下kill问题进程)
              • kill PID (PID可通过ps查看)或者kill %jobID (jobID通过jobs查看)
              • f 匹配进程名
            • jobs 用于显示和控制后台正在执行的和被挂起的任务序列。
            • fg %jobID 用于将后台运行的或 挂起 的任务(或作业)切换到前台运行
            • bg %jobID 使后台的任务继续运行
            • nohup (no hang up)(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行 nohup{command|script} {a|b}:a b中必选一项
            • 前台进程:跟用户交互的
            • 后台进程 :由后台启动的进程
              • 启动方法:$command & 终止和挂起后台进程:kill
            • dmesg 显示开机信息

            三、vi编辑器

            并不是一个排版程序,只是一个文本编辑程序。

            1.命令模式(Command mode)

            (1)进入命令模式

            • 在任何模式下,按
              • 键即可回到命令模式

            (2)移动光标

            • 最简单的方式是按键盘的上、下、左、右方向键 nG 跳到第n行 G 跳到最后一行 0 跳到行首 $ 跳到行尾 ctrl+b 前移一页 ctrl+f 后移一页

            (3)字符串搜索

            /str1 正向搜索字符串 str1 ?str2 反向搜索字符串 str2 n 继续搜索,找出 str1 字符串下次出现的位置 N 反方向搜索

            2.输入模式(Insert mode)

            (1)进入输入模式

            在命令模式下:
            • 在当前光标位置插入
            • 光标后一个位置插入
            • 光标下一行插入新的行

            (2)输入模式下命令

            • 删除光标所在处单个字符
            • 删除当前光标所在行

            3.底行模式(Last Line Mode)

            (1)进入底行模式

            • 在命令模式下,按下< : >键

            (2)移动光标

            :n 将光标移到第n行
            :+n 将光标移动到当前行往下的第n行
            . – 光标所在行的行号
            $ – 正文最后一行的行号

            (3)字符串替换

            [n1, n2]s/str1/str2/[g][c] 在第 n1 行到 n2 行的范围内将字符串 str1 用 str2 代替
            • c 每次替换都由用户确认
            • g 对行中搜索字符串的每次出现进行替换。
            • 不加 g 只对行中搜索字符串的首次出现进行替换

            (4) 保存

            • 将编辑内容保存到原始文件
            • 将编辑内容写入file文件

            (5)退出

            • 在未作修改的情况下退出
            • 放弃所有修改,强制退出
            • 将编辑的内容写入原始文件并退出编辑程序
            notion image

            (6)在vi内使用Shell

            :! command

            4.Vim和gvim

            • Vim 代表 Vi IMproved,如同其名称所暗示的那样,Vim 作为标准 UNIX 系统 vi 编辑器的提高版而存在。 Vim 除提供和 vi 编辑器一样强大的功能外,还提供有多级恢复、命令行历史以及命令及文件名补全等功能。
            • gvim 是 vi 的 X Window 版本,该版本支持鼠标选中,一些高级的光标移动功能,并且带有菜单和工具按钮。

            四、shell

            shell是一个命令行解释器,是内核与用户的接口
            也是一种程序设计语言(shell script)
            在用户登录后 shell启动

            (一)shell基础

            1.启动指定类型子shell

            2.退出子shell

            3.查看当前系统默认shell

            输出:/bin/bash

            4.变量

            变量名只能是字母、数字、下划线的组合,不能以数字开头
            通常:
            大写字母为系统预设的变量
            小写字母用于用户自定义的变量

            (1)赋值

            • 变量名= 值 或 {变量名= 值} (无空格)
            • 若赋空值:
            • 等号两边不能直接接单独的空格符
            • 如果变量所取的值中包含空格,必须使用引号将变量取值括起来

            (2)显示变量

            (3)显示所有Shell环境变量

            (4)清除变量

            清除后变量的值为空

            (5)从标准输入读入变量值read

            (6)全局环境变量

            传统上,所有全局环境变量均为大写
            可用于所有子进程
            Shell 中有一些预留的环境变量名,他们各有其用途,且不能用 作他用,称为嵌入 Shell 变量。
            • HOME 变量:
            • 保存用户主目录的完全路径名
              • $echo $HOME
            • LOGNAME 变量:
              • 保存登陆用户名
              • $echo $LOGNAME
            • PS1 变量:
              • 保存主提示符
              • 基本提示符包含 Shell 提示符,缺省(系统默认状态的 意思)对超级用户为#,其他为$。可以使用任何符号作 提示符
                • $ PS1=“HH->”
            • PATH 变量:
              • 保存进行命令或脚本查找的目录顺序,不同的目录路径 名之间用冒号分隔开。PATH=/bin:usr/bin:/etc:/home/team01/bin:.
              • 正确排列这个次序很重要,可以在执行命令时节省时间。
              • 加入新的查找路径: $PATH=$PATH:filelist $export PATH

            (7)特殊字符

            • 单引号
              • 括起来的所有字符都作为普通字符出现
              • 特殊字符用单引号括起来后,也会失去原有意义,而只作为普通字符解释。
            • 双引号
              • 由双引号括起来的字符,除($ 引号)几种符号具有其特殊功能外,其余字符都作为普通字符对待
            • 反引号
              • 反引号括起来的内容被Shell解释为命令行
              • 执行时,Shell首先执行该命令行,并用它的标准输出结果取代整个反引号(包括反引号括起来的部分)
              • 反引号可以与其它引号结合使用。
            • 反斜线
              • 如果下一个字符有特殊含义,反斜线屏蔽其特殊含义。
                • 下述字符包含有特殊意义: & * + ^ $ ` " | ?。

            (8)进程间变量的关系

            • 变量是进程运行环境的一个组成部分
            • 本地变量在各进程间是不能相互访问和修改的
            • 子进程不会自动地继承父进程中本地的变量
              • export命令:将变量的设置导出,使之能够传递给子进程
                环境变量的值只能传递给子进程,而不能传递给它所在的父进程

            (9) profile

            /etc/profile:存放系统管理员设置的环境变量

            5.注释

            在 Shell 程序中以字符 # 开头的正文行表示注释行。

            (二)shell进阶

            1.通配符

            用户可以在作为命令参数的文件名中包含这些元字符(通配符) 构成一个模式串。
            这样就可以按照所要求的模式来匹配文件名、路径名、字符串等。
            • 通配符
              • 匹配文件名中的任何字符串
                • 在使用cd命令切换路径时,使用星号还可以省去输入整个路径名的麻烦
                • ? 通配符
                  • 可以匹配文件名中的任何单个字符
                  • […] 通配符
                    • 匹配方括号[ ]中指定范围内的字符
                      • 可以使用横杠-来连接两个字母或数字,以表示范围
                        例:[a-z]
                    • [!…]
                      • 匹配不在指定范围内的任何字符。
                        例:[!a-z]

                  2.标准文件和文件描述符

                  在 Shell 中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件 描述符来引用这些文件。

                  (1)文件描述符

                  • 输入文件 — 标准输入 – stdin 0 缺省是键盘,也可以是文件或其他命令的输出
                  • 输出文件 — 标准输出 – stdout 1 缺省是屏幕,也可以是文件
                  • 错误输出文件 —标准错误输出 – stderr 2 缺省是屏幕,也可以是文件

                  (2)输入输出重定向

                  若要指定命令的标准输入、输出或错误输出,而不是使用缺省值,就需要使用文件重定向机制。
                  Command operator file 将输入、输出或错误重定向到某个文件中
                  • 输入重定向 <
                  • 输出重定向 > 追加>>
                    • 错误重定向 2> 将命令或程序执行的错误信息放到文件中

                      (3)重定向的结合应用

                      3.管道

                      • 把一个命令在屏幕上的输出传递给另一个命令作为输入。用竖杠|表示。(把信息从一端传送到另外一端)
                      例:ls | wc -w set | more

                      4.过滤和正则表达式

                      当从一个文件或命令输出中抽取或过滤文本时,可以使用正则表达式
                      以行为单位,来进行字符串的处理行为
                      • ^d 行首是d的行
                      • z$ 行尾字符为z
                      • . 只匹配任意单字符
                      • 前面的字符重复0到多次 代表任意多个字符
                      • [aA] a or A
                      • [a-f] a 到 f
                      • [^0-9] 非数字
                      • \ 屏蔽其后的特殊字符的特殊含义
                      • \. 包含字符.的行
                      • \{n\} 前导的正则表达式重复n次
                      • [0-9]\{3\} 包含3个数字的行
                      • \{min,max\} 前导的正则表达式重复min~max次
                      注意:有些元字符虽然与 Shell 的通配符一样,但意义有所不同

                      5.grep命令

                      允许对文本文件的内容进行模式查找。如果找到匹配模式,grep显示包含该模式的所有行。
                      若指定了多个文件名,结果中会在每一行的前面显示文件名。
                      grep [-option] pattern files
                      • c 只输出匹配行的计数。
                      • n 显示匹配行及行号。
                      • v 显示不包含匹配文本的所有行。
                      • w 只显示全字符合的列
                      在grep命令中输入字符串参数时,最好将其用双引号括起来。
                      在调用模式匹配时,应使用单引号。
                      • 可以与管道一起结合使用

                      6.find命令

                      find path expression [-exec -ok] [command] {} \
                      • path:所查找的目录路径,对目录的搜索是递归的。 .表示当前目录 /表示系统根目录。
                      • expression项:希望查询的文件的匹配标准或说明
                        • name file 寻找名为file的文件,要找的文件名包括在引号中,可以使用通配符。
                          • $find . -name "*.txt" 在当前目录及子目录中查找所有的 .txt文件
                        • user name 按照文件属主来查找文件
                          • $find /etc -user uucp 在/etc目录下查找文件属主为uucp的文件
                        • group name 按照文件所属的组来查找文件
                        • type type 查找某一类型的文件(b、c、d、f、l)
                          • d:目录文件 f:普通文件
                        • size n[c] 查找文件长度为n块(block)的文件,带有c时表示文件长度以字节计。
                          • mtime n 按照文件的更改时间来查找文件
                            • n 最后的更改时间在n天以内。 n , +n 更改时间距现在n天以上。
                          • perm 权限
                        • exec find命令对匹配的文件执行该参数所给出的Shell命令command。
                        • ok 和-exec的作用相同,只是在执行每一个命令之前,都会给出提示,让用户来确定是否执行。如果用户不回应 ‘y’ 或 ‘Y’,command 将不予以执行,并回应 false。

                        7.sort 命令

                        将以默认的方式将文本文件的第一列以 ASCII 码的次序排列,并将结果输出到标准输出。

                        8. 命令组 命令换行

                        • 多个命令在一行输入时,用 “;”作为命令间分隔符。
                          • 可通过加 的方式来进行换行拆分。

                            9.&&和||

                            • 命令1 && 命令2
                              • 只有命令1为真(即成功被执行,返回0),命令2才能够被执行
                                $ ls s* && rm s*
                            • 命令1 || 命令2 如果命令1执行失败,那么就执行命令2。
                              • $cd /dir1 || echo cannot change to /dir1
                            • $test expression && 命令1 || 命令2 若expression为真,则执行命令1,否则执行命令2

                            10.算术

                            (1)shell的算数扩展

                            $((expression))

                            (2)expr命令

                            用于进行整数运算
                            • 表达式由操作数和运算符组成。操作数一般是整数,也可以是字符串
                            • 表达式的各部分(操作数和运算符之间)必须以空格分隔!!!
                            • 表达式中某些对shell有特殊意义的字符必须转义
                            +加法
                            • 减法
                            \*乘法
                            /整除
                            %求模(余数)
                            =相等
                            • 可以使用反引号改变计算次序
                              • 注意,expr 中括号是不可用的。请用``(反括号)
                                expr 3 * (2 + 1)
                                bash: syntax error near unexpected token `(’
                            • expr命令还可用于字符串测试。

                              11.test命令

                              用于测试一种或几种条件

                              (1)格式

                              • test expression
                              • [ expression ]
                              使用方括号时,要注意在条件两边加上空格。涉及到变量值($variable)的比较时最好把变量取值用双引号括起来,以免Shell误解变量值。

                              (2)输出

                              测试结果反映在退出状态中,而不是直接显示输出
                              $echo $?
                              • 条件为真:退出状态为0
                              • 条件为假:退出状态非0

                              (3)操作符

                              ①字符串操作符
                              • str1 = str2 字符串相等
                              • str1 != str2 字符串不相等
                              • str 字符串非空
                              ②整数操作符
                              • int1 -eq int2 数值相等
                              • int1 -ne int2 数值不等
                              • int1 -lt int2 int1<int2
                              • int1 -gt int2 int1>int2
                              • int1 -le int2 int1<=int2
                              • int1 -ge int2 int1>=int2
                              例:
                              ③文件操作符:测试文件状态
                              • e file 文件file存在
                              • d file 文件file是一个目录
                              • f file 文件file是一个普通文件
                              • s file 文件file大小不为0
                              • r file 可读(对文件所有者的权限)
                              • w file 可写(对文件所有者的权限)
                              • x file 可执行(对文件所有者的权限)
                              ④逻辑操作符:测试多个条件的与或组合
                              • a 逻辑与
                              • o 逻辑或
                              • ! 逻辑非

                              (三)shell脚本

                              1.编写方法

                              (1)创建文件

                              (2)编辑内容

                              (3)运行shell脚本

                              • bash.
                              • 用户对该文件具有x和r权限

                              2.流程控制

                              (1)IF

                              (2)case

                              (3)for

                              也支持java类似的循环方式

                              (4)while

                              (5)until

                              如果条件不成立,则进入循环,执行循环体中语句直到条件成立,结束循环

                              3.执行时传递参数

                              (1)位置变量参数
                              • $0 执行的文件名(包含文件路径) (指命令对应的可执行名)
                              • $1 第一个参数 $2 第二个参数 $3 第三个参数 …
                                • 其中 1-9 是真正的参数名(变量名),“$”符只是用来标识变量的替换。 第九个以后的参数都不会被访问。
                              (2)特定变量参数
                              • $# 传递到脚本的参数个数
                              • $$ 脚本运行的当前shell的PID
                              • $? 最后一个程序或命令的执行状态,用数字表示:0表示执行没有错误,其他任何值表明有错误。(保存最后程序的退出状态值,检验退出状态命令 `$echo $?` )
                              • $* 传递的参数作为一个字符串显示
                              • $@
                              * @区别:
                              只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。
                              传参方法:
                              notion image
                               

                              4.读入参数

                              5.sleep

                              将目前动作延迟一段时间。
                              sleep 60s 停60s
                              sleep 5m 停5min
                              s 为秒,m 为 分钟,h 为小时,d 为日数

                              五、例题

                              (一)shell编程

                              1.计算两个正整数的最大公约数

                              2.给出输入的一系列整数(输入0停止输入)的最大数、第二最大数

                              3.写一个shell脚本,每隔10秒,检查当前系统中有没有进程名字为“firefox”的进程,如果有的话显示“firefox 进程出现了!”并退出,返回码设置为等待的秒数。

                              4.写一个脚本,持续监视用户stu是否登录,如果登录了,就每隔1分钟把你的用户名和QQ号码发给他,重复发送3次为止。

                              5.

                              Java 笔记使用Hexo+Github搭建个人博客
                              Loading...
                              Rainnn
                              Rainnn
                              bling bling ⭐
                              公告
                              wakuwaku!
                              你竟然发现了这里!!
                              想要获取加🔒文章密码/试读文章,请微信扫码关注公众号 Code & Cookies
                              notion image