Linux

本文围绕Linux系统展开,介绍其应用范围、发行版,涵盖虚拟机设置、目录结构、远程登录等内容。还讲解了用户管理、运行级别、文件操作、权限管理等知识,涉及shell编程、日志管理、系统定制、备份恢复等方面,同时列举常用命令和快捷键。

文章目录

1.概述

1.1.Linux的应用范围

image-20221011201343785

Linux适用范围

  • 个人桌面领域的应用
  • 服务器领域:
    • Linux在服务器领域的应用是最强的
    • Linux免费、稳定、高效等特点特别适合
  • 嵌入式领域
    • Linux运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年在嵌入式领域的应用得到非常大的提高
    • 如:机顶盒、数字电视、手机、智能家居、智能硬件等,以后在物联网中应用会更加广泛。

1.2.Linux介绍

Linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目都会部署到Linux

Linux主要的发行版:UbuntuRedHatCentOS、Debain、Fedora、SuSe、OpenSUSE。

2. 虚拟机设置

2.1.网络的三种连接方式

  • 桥接模式
    • 虚拟系统可以和外部系统通讯
    • 虚拟机上的网段会和主机的网段一致,所以容易造成网段冲突
  • NAT模式
    • 网络地址转换模式
    • 虚拟机会随机生成一个网段地址,主机会随之生成一个同网段地址,虚拟机与主机可独立通信,不造成IP冲突
  • 主机模式
    • 独立的系统,不和外部发生联系

image-20221011204719285

安装vmtools后可以设置Windows和Linux的共享文件夹

如果你想要多个相同的虚拟机可以在vmwave中使用克隆功能

在我们学习中,可能经常需要更改虚拟机的设置,但我们不能保证不会出错,在这时可以使用vmwave的快照功能,相当于状态回溯

虚拟机的本质就是文件,所以虚拟机的迁移与删除直接对虚拟机文件进行操作就行了

安装vmtools后可以设置Windows和Linux的共享文件夹

3.Linux目录

在Linux世界里,一切皆是文件

LInux的文件系统采用层级式的树状目录结构,再次结构中的最上层是根目录"/",然后在此目录下创建其他目录

img

  • /bin(/usr/bin,/usr/local/bin)
    • 是Binary的缩写,存放着常用指令
  • usr/local
    • 这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序
  • var
    • 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
  • /sbin(/usr/sbin,/usr/local/sbin)
    • s就是super user的意思,这里存放着系统管理员使用的系统管理程序
  • /home
    • 存放普通用户的主目录,在Linux中每个用户都有一个自己的账户,一般该目录名是以用户的账户命令
  • /root
    • 该目录为系统管理员,也被称为超级权限者的用户主目录
  • /etc
    • 所有的系统管理所需要的配置文件和子目录
  • /usr
    • 这是一个很重要的目录。用户的很多应用程序和文件都放在这个目录下
  • /boot
    • 存放着linux启动的相关文件,包括一些连接文件和镜像文件
  • /dev
    • 类似于windows的设备管理器,把所有的硬件用文件的形式存储
  • /media
    • linux系统会自动识别一些设备,例如U盘、光驱等等,识别后linux会把识别的设备挂载到这个目录下
  • /mnt
    • 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载到/mnt/上,然后进入该目录就可以查看里的内容了
  • /selinux [security-enhanced linux]
    • SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置
  • /opt
    • 这是给主机额外安装软件所摆放的目录
  • /proc
    • 不能动。这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
  • /srv
    • 不能动。是service的缩写。该目录存放着一些服务启动之后需要提取的数据
  • /sys
    • 不能动。该目录下安装了存放着文件系统sysfs=>>
  • /tmp
    • 存放一些临时文件
  • /lib
    • 系统开机所需要最基本的动态连接共享库,几乎所有的应用程序都需要用到这些共享库
  • /lost+found
    • 这个目录一般是空的,当系统非法关机后,这里会存放一些文件

4.Linux远程登录

为什么需要远程登录?

  1. linux服务器时开发小组共享的
  2. 正式上线的项目是运行在公网的

远程登录----xshell ----现在最强大的远程登录到Linux的工具,流程的速度并且完美解决了中文乱码的问题

文件传输----xftp -----是一款基于Windows的强大的SFTP、FTP文件传输软件

5.vi和vim编辑器

Linux系统会内置vi文本编辑器

Vim具有程序编辑功能,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编辑及错误跳转等方便编程的功能特别丰富。

vi和vim常用的三种模式

  • 正常模式
    • 以vim打开一个档案就直接进入一般模式。
  • 插入模式
    • 按下i,I,o,O,a,A,R等任意一个字母之后才回进入编辑模式,按"ESC"退出模式
  • 命令行模式
    • 在正常模式按":"进入。在这个模式中,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等动作

image-20221015124503334

image-20221015130128183

快捷键

img

  • 正常模式
    • 按"q"+“:”:查看历史底线命令
  • 插入模式
    • 字符按键以及Shift组合,输入字符
    • ENTER,回车键,换行
    • BACK SPACE,退格键,删除光标前一个字符
    • DEL,删除键,删除光标后一个字符
    • 方向键,在文本中移动光标
    • HOME/END,移动光标到行首/行尾
    • Page Up/Page Down,上/下翻页
    • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
    • ESC,退出输入模式,切换到命令模式

image-20221015133233993

5.1.配置 vim

  • 动态配置:
    • :set:set all
  • 永久配置
    • ~./vimrc
  • 几个常用的配置项目
    • 行号
      • 显示::set number, 简写为 set nu
      • 取消::set nonumber, 简写为 set nonu
    • 括号匹配
      • 匹配::set sm
      • 取消::set nosm
    • 自动缩进
      • 启用::set autoindent, 简写为 :set ai
      • 禁用::set noautoindent, 简写为 :set noai
    • 高亮搜索
      • 启用::set hlsearch
      • 禁用::set nohlsearch
    • 语法高亮
      • 启用::set syntax on
      • 禁用::set syntax off
    • 忽略字符的大小写
      • 启用::set ignorecase, 简写为 set ic
      • 禁用::set noignorecase, 简写为set noic
    • 设置 缩进字符个数:set tabstop=4
    • 设置自动屏幕换行字符宽度
      • :set textwith=65
  • 运行 :help option-list 来获取完整列表
  • vi/vim 的内建帮助
    • :help
    • :help topic
    • 使用 :q 退出帮助
  • vimtutor 命令

6.关机&重启命令

  • shutdown -h now :立刻进行关机

  • shutdown -h 1 (只输入shutdown一样):一分钟后关机

  • shutdown -r now:现在重启计算机

  • halt:关机

  • reboot :重启

  • sync:把内存的数据同步到磁盘

7.用户管理

登录时尽量少用root账户登录,可以登录普通账户后用’su’命令切换用户。在运行级别3(无界面命令行)下输入logout命令可以注销账户

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

  • useradd 用户名:添加一个用户

添加用户后,会在/home下创建一个同名家目录

useradd -d 指定目录 用户名 :指定生成目录

useradd 用户名 -G 组名:创建时指定附加组列表

  • passwd 用户名:给用户设置密码
  • userdel 用户名:删除用户保留家目录

userdel -r用户名 删除用户和家目录

建议保留家目录,以免出现问题

  • id 用户名:查看用户信息
  • su 用户名:切换用户

从权限高的用户切换权限底的用户不用输入密码,反之需要,这时候返回原账户只能使用exit指令

当需要返回原来账户的时候,使用exit/logout指令

  • who am i:查看第一次登录用户登录信息

7.1.用户组

类似于角色,系统可以对有共性的多个用户进行统一的管理

image-20221018084102587

  • groupadd 组名:新增组

  • groupdel 组名:删除组

  • gpasswd

    • -M 成员 组名:批量设置成员到组
    • -d 成员 组:从组删除成员
  • useradd -g 用户组 用户名:增加用户时加上组

如果新增用户时没有指定组,则会在创建新用户的同时创建一个同名组

  • usermod -g(G) 用户组 用户名:修改用户所在用户组(附加组)
  • usermod -aG 组名 用户:追加附加组到用户
  • usermod -d 目录名 用户名 :改变该用户登录的初始目录,用户需要有进入新目录的权限

7.2.用户和用户组相关文件

image-20221015140015413

8.运行级别

运行级别说明

  1. 关机
  2. 单用户(找回丢失密码)
  3. 多用户状态没有网络服务
  4. 多用户状态有网络服务
  5. 系统未使用保留给用户
  6. 图形界面
  7. 系统重启

常用运行级别是3和5,也可以指定默认运行级别

  • init 运行级别:切换不同运行级别

  • systemctl get-default:查看当前运行级别

  • systemctl set-default 目标级别:设置默认级别

在/etc/inittab查看相关设置

9.帮助指令

  • man 获得帮助信息

    • 语法:man [命令或配置文件]
  • info 获取文档帮助

    • 跟man一样,是man的补充
  • help 获取shell内置命令的帮助信息

    • 基本语法:help 命令
  • –help 获取Linux外部命令的帮助信息

    • 基本语法:命令 --help
  • whatis 打印命令简单描述

    • 基本语法:whatis 命令

10.文件目录

10.1.文件和目录名称

  • 名称可以长达 255 个字符
  • 除了正斜线(/)以外,所有字符都是有效的
    • 使用特殊字符的文件或目录名并不明智
    • 某些字符(如:空格)在引用时应该使用引号来保护
  • 名称区分大小写
    • 例如:MAILMailmailmAiL
    • 可以同时在同级目录中使用,但不明智
  • 以"."开头的文件或目录是隐含的
    • 使用 l. 命令别名显示当前目录下的所有隐含文件
    • 使用 ls -als -A 显示当前目录下的所有文件(包含隐含文件)

10.2.文件的类型

  • 普通文件 ( - ):白色(文本文件,二进制文件,压缩文件,视频文件,音频文件,配置文件,日志文件…)
  • 目录 ( d ):蓝色
  • 符号链接 ( l )
  • 字符设备文件 ( c )
  • 块设备文件 ( b )
  • 套接字 ( s )
  • 命名管道 ( p )

压缩文件:红色

其他文件:灰色

可执行文件:绿色

链接文件:浅蓝色

设备文件:黄色

10.2.1.判断文件类型

  • 文件可以包含许多类型的数据
  • 在打开前检查文件的类型来决定要使用的恰当命令或程序
  • 命令
    • file [选项] <文件名>…
    • stat [选项] <文件名>…

10.3.文件的时间戳

  • GNU/Linux 的文件有3种类型的时间戳:
    • mtime: 最后修改时间 (ls -lt)
    • ctime: 状态改变时间 (ls -lc)
    • atime: 最后访问时间 (ls -lu)
  • 说明
    • ctime 并非文件创建时间。
    • 修改一个文件会改变所有三类时间
    • 改变文件的访问权限或拥有者会改变文件的 ctimeatime
    • 读文件会改变文件的 atime

10.4.文本处理与分析工具

  • 文本数据统计: wc

    • 显示文本行数、单词数、字符数等
    • 常用选项
      • -l 只显示文本的行数
      • -w 只显示文本的单词数
      • -c 只显示文本的字符数
      • -L 只显示文本中最长一行的字符数
  • 文本合并:catpaste

  • 文件比较:diff

  • 文本排序:sort

  • 剔除文本重复行: sort -uuniq

  • 文本随机排列: sort -Rshuf

  • 文本替换和删除: trsed

  • 文本格式化: fmtprcolumnfold

  • 文本编码转换: iconvencaconvmv

  • head tail用于显示文件的开头(尾部)部分内容,默认情况下head显示文件的前(尾)十行内容

  • 语法:head 文件(查看前十行内容)
  • 语法:head -n 5 文件(查看前五行内容)
  • tail -f 文件 (实时追踪该文档的所有更新)
  • cut命令:在文件的每一行中提取片断
  • -d:使用特点符号对文件进行分隔
  • -f:选择第几段文本
  • sort:排序

-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,默认是用 [tab] 键来分隔;
-k :以哪个区间 (field) 来进行排序

默认是以第一个字符升序排序

  • uniq:去重

-i :忽略大小写字符的不同

-c :进行计数

-u :只显示唯一的行

  • tee:同时输出多个文件

从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

一般情况下用重定向实现,需要同时输出多个文件时可以使用该命令。

-a或–append  附加到既有文件的后面,而非覆盖它.

  • join:文件按行连接

将两个文件中指定栏位相同的行连接起来。即按照两个文件中共同拥有的某一列,将对应的行拼接成一行。

注意:在使用join之前所处理的文件要事先经过排序。

-a<1或2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
-e<字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
-i或–igore-case 比较栏位内容时,忽略大小写的差异。
-o<格式> 按照指定的格式来显示结果。
-t<字符> 使用栏位的分隔字符。
-v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
-1<栏位> 连接[文件1]指定的栏位。
-2<栏位> 连接[文件2]指定的栏位。

  • split:文件切割

split命令用于将一个文件分割成数个。

该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。

split [-bl] file prefix

-b: 以大小切割 (字节)

-l:以行数切割

prefix:切割后文件的前缀

-C<字节> : 与参数"-b"相似,但是在切 割时将尽量维持每行的完整性

[输出文件名] : 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号

  • xargs:参数代换

不是所有的命令都支持管道,如ls,对于不支持管道的命令,可以通过xargs让其有管道命令的效果,

xargs 用作替换工具,读取输入数据重新格式化后输出。

-n:多行输出,选定每行几个单词

-d:自定义一个定界符

-I:指定一个替换字符,这个字符会在xargs扩展时被替换掉

>>ls *txt|xargs -n1 -I {} echo {}
1-2linux.txt
a.txt
b.txt
paa.txt
pab.txt
pac.txt

# 选项-n 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。

-0:将 \0 作为定界符

  • pwd 显示当前工作目录的绝对路径

    • 语法:pwd
  • ls

    • 语法:ls [选项] [目录或是文件]
    • 选项
      • -a:显示当前目录所有的文件和目录,包括隐藏的
      • -l:以列表的形式显示信息
      • -h:与-l 一起,以易于阅读的格式输出文件大小
  • cd 切换到指定目录

    • 语法:cd [参数]
  • mkdir 创建目录

    • 语法:mkdir [选项] 要创建的目录
    • 选项
      • -p:创建多级目录
  • rm 删除指令

    • 语法:rm [选项] 文件
    • 选项
      • -r:指示rm将参数中列出的全部目录和子目录均递归地删除。
      • -f:强制删除文件或目录,忽略不存在的文件,不提示确认。
      • -d:删除空目录,rm不带参数只能删除文件
      • -v:显示指令执行过程
  • touch 创建空文件

    • 语法:touch 文件名
  • cp 拷贝文件到指定目录或文件

    • 语法:cp [选项] 目的地
    • 选项
      • -r :递归复制整个文件夹

强制覆盖不提示方法:\cp

  • mv 移动文件与目录或重命名

    • 语法:mv 老文件名 新文件名(重命名)
    • 语法:mv 源文件位置 目的文件位置(移动文件)
  • cat 只读查看文件内容

    • 语法:cat [选项] 要查看的文件
    • 选项
      • -n :显示行号

一般带管道命令|more

cat -n 文件|more #不显示完全,需要翻页才能查看完整文件

image-20221015174718906

image-20221015195417711

  • echo 输出内容到控制台
    • 语法:echo [选项] [输出内容]
  • head tail用于显示文件的开头(尾部)部分内容,默认情况下head显示文件的前(尾)十行内容
    • 语法:head 文件(查看前十行内容)
    • 语法:head -n 5 文件(查看前五行内容)
    • tail -f 文件 (实时追踪该文档的所有更新)
  • ln 给源文件创建一个链接
    • 语法:ln [源文件] [硬链接名]
    • 语法:ln -s [源文件或目录] [软链接名]

软链接也被称为符号链接,类似于Windows里的快捷方式,主要存放了链接其他文件的路径

删除的时候不能在软链接名后带"/",否则会把原目录也删除

硬链接和软链接的比较

  • 硬链接
    • 链接文件和被链接文件必须位于同一个文件系统内
    • 不能建立指向目录的硬链接
  • 软链接
    • 链接文件和被链接文件可以位于不同文件系统
    • 可以建立指向目录的软链接
  • 查看历史命令

    • \1. history:查看所有历史命令

      \2. history n:查看命令历史中最近的n条命令

      \3. history -c:手动清除当前会话缓冲区的命令历史列表

      \4. !!:执行最近一次执行过的命令

      \5. Sudo !!:使用sudo执行最近一次执行的命令

      \6. !15:执行命令历史表中的标号为15的命令

      \7. !-15:执行15个命令之前的那个命令

      \8. !ls:执行最后一次以ls开头的命令

      \9. !?abc:执行最近一次执行过的包含abc的命令

10.5.输出重定向

  • STDOUT 和 STDERR 可以被重定向到文件
    • 命令 操作符 文件名
  • 操作符:(覆盖式)
    • > 把STDOUT重定向到文件
    • 2> 把STDERR重定向到文件
  • 操作符:(追加式)
    • >> 把STDOUT重定向到文件(追加式)
    • 2>> 把STDERR重定向到文件(追加式)

11.时间日期

  • date 显示当前日期

    • 语法:date(显示当前时间)

      ​ date +%Y(显示当前年份)

      ​ data +%m(显示当前月份)

      ​ date +%d(显示当前是哪一天)

      ​ date “+%Y-%m-%d %H:%M:%S”(显示年月日时分秒)

      ​ date -s “设置时间“(设置日期时间)

  • cal 查看日历

    • 语法:cal [选项] (不加选项,显示本月日历)

      ​ cal 年份(打印指定年份日历)

12.搜索查找类

可以在查找的时候使用正则

  • find 从指定目录向下递归地遍历各个子目录,将满足条件的文件或目录显示在终端

    • 语法:find [搜索范围] [选项]
    • 选项
      • -name<查询方式> :按照指定的文件名查找模式查找文件
      • -user<用户名>:查找属于指定用户名的所有文件
      • -size<文件大小>(大小前面加+为大于,-为小于,不写为等于。单位为K,M,G):按照指定的文件大小查找文件
      • -atime<时间>:安装时间来查找文件
      • -exec:exec rm {} ;(如果查到有东西继续执行命令。{}为找到的结果,;为结束)
  • locate 快速定位文件路径

    • 语法:locate [选项] 搜索文件
    • 选项
      • -r 使用正则表达式

locate指令利用事先建立的系统中所有文件名称及路径的locate数据库事先快速定位给定的文件。locate无需遍历整个文件系统,查询速度快。为了保证查询结果的准确度,管理员必须定期更新locate时刻

在第一次执行的时候,必须使用updatedb指令创建locate数据库

  • which 查看指令在哪个目录下

    • 语法:which 指令
  • whereis 服务:查看服务相关文件夹

  • grep 过滤查找

    • 语法:grep [选项] 查找内容 源文件
    • 选项
      • -n 显示匹配行及行号
      • -i:忽略字母大小写
      • -v:反向匹配

13.压缩和解压

  • gzip 压缩文件

    • 语法:gzip 文件
  • gunzip 解压文件

    • 语法:gunzip 文件
  • zip(unzip) 压缩(解压)文件和目录

    • 语法:zip(unzip) [选项] xx.gz 文件/目录
    • zip选项
      • -r :递归压缩
    • unzip选项
      • -d<目录>:指定解压后文件的存放目录
  • tar 既可以压缩也可以解压也可以打包

    • 语法:tar [选项] xx.tar.gz 打包的内容(打包目录,打包后缀为.tar.gz)
    • 选项:
    • -c:建立新的备份文件。
    • -v:显示详细信息
    • -f:指定备份文件。
    • -z:通过gzip或gunzip指令处理备份文件
    • -x:从备份文件中还原文件
    • -C<目的目录>或–directory=<目的目录> 切换到指定的目录。

    image-20221015213829708

14.组管理和权限管理

在Linux中每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其他组的概念

14.1.文件/目录 所有者

一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者

  • ls -alh:查看文件所有者

    image-20221016122357350

    分别为所有者和所在组

  • chown 用户名 文件名:修改文件的所有者

    • -R:递归目录所有子文件或子目录

14.2.文件/目录 所在组

当某个用户创建一个文件后,这个文件的所在组就是该用户所在的组

  • chgrp 组名 文件名:修改所在组
    • -R:递归目录所有子文件或子目录

14.4.其他组

除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

14.5.权限

  • sudo命令:提权以能够执行某些命令
    • 在wheel组中的用户具有提权的能力

image-20221016123813256

image-20221016125603779

0-9位说明

  1. 第0位确定文件类型
    1. l:是链接
    2. d:是目录
    3. -:普通文件
    4. c:是字符设备文件,比如鼠标
    5. b:是块设备,比如硬盘
  2. 第1-3位确定所有者拥有该文件的权限
  3. 第4-6位确定所属组拥有该文件的权限
  4. 第7-9确定其他用户拥有该文件的权限

14.5.1.rwx权限

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

14.5.2.修改权限

通过chmod指令,可以修改文件或者目录的权限

  • 第一种方式:+,-,=

    • u:所有者,g:所有组,o:其他人,a:所有人(前面的总和)

    • chmod u=rwx,g=rx,o=x 文件/目录名

    • chomd o+w 文件/目录名

    • chomd a-x 文件/目录名

  • 第二种方式通过数字变更权限

    • r=4 w=2 x=1
    • chmod 751相当于chmod u=rwx,g=rx,o=x

14.5.3.acl权限

  • 获取具体权限:getfacl file

  • 设置权限:setfacl -m u:用户名:权限 文件名

image-20221027153905429

  • 删除权限:setfacl -x 权限 文件名

  • setfacl -b 文件名:删除全部权限

  • setfacl -Rm 目录名:给目录递归设置权限

  • setfacl -m d:权限 目录名:给目录设置可继承的权限

  • mask权限:获取设置的acl的最高权限代表

    设置mask权限为空,可以使除所有者以外所有权限失效

    再次设置新的acl权限可以恢复失效的权限

  • suid权限

    把x权限替换为s。只在二进制文件中有用,当执行二进制文件时,会切换到二进制文件的所有者进行执行文件

  • sgid权限

    当一个目录所属组有s权限,这个目录所有子文件/目录会继承所属组

  • sticky权限

15.crond 任务调度

15.1.crontab

crontab进行定时任务的设置

概述

任务调度:是指系统在某个时间执行的特定的命令或程序

任务调度分类:1.系统工作:有些重要的工作必须周而复始的执行,如扫描病毒等

2.个别用户工作:个别用户可能希望执行某些程序。比如对mysql数据库的备份

  • 基本语法:crontab [选项]
  • service crond restart:重启任务调度
  • 选项
    • -e:编辑crontab定时任务
    • -l:查询crontab任务
    • -r:删除当前用户所有的crontab任务
  • 特殊符号
    • *:代表任何时间,比如第一个*就代表一小时中每分钟都执行一次的意思
    • ,:代表不连续的时间,比如"0 8,12,16***",就代表在媒体的8点0分,12点0分,16点0分都执行一次命令
    • -:代表范围,比如“0 5 * * 1-6”,代表周一到周六的5点0分执行命令
    • */n:代表每隔多久执行一次,比如“*/10****”,代表每隔10分钟就执行一次

image-20221016155400289

image-20221016160245397

15.2.at

介绍

  1. at命令试一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行

  2. 默认情况下,atd守护进程每60s检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配则运行此作业

  3. at命令是一次性定时计划任务,执行完一个任务后就不再执行此任务了

  4. 在使用at命令时,一定要保证atd进程的启动,可以使用相关指令来查看

    1. ps -ef|grep atd

      image-20221016162601943

  • at命令格式

    • at [选项] [时间]

      image-20221016162802345

    • at指定时间的方法

      1. 接受当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就烦在第二天执行。例如:04:00
      2. 使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午四点)等比较模糊的词语来指定时间
      3. 采用12小时计时制,即在时间后面假如AM或PM来说明上午还是下午
      4. 指定目录执行的具体日期,指定格式为month day 或mm/dd/yy或dd.mm.yy,指定的日期必须跟在指定时间之后,例如04:00 2021-03-1
      5. 使用相对计时法,指定格式为:now+count time-units,now为当前时间,time-units是时间单位,这里能够使minutes、hours、days、week。count是时间的数量,例如 now + 5minutes
      6. 直接使用today,tomorrow来指定命令时间
    • Ctrl+D结束at命令的输入

  • atq :查看作业队列

  • atrm 任务队列号 :删除任务队列的指定任务

16.磁盘

16.1.分区

原理介绍

  1. Linux无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分

  2. Linux采用了一种叫做“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得

  3. 原理图

    image-20221016171020624

硬盘说明

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

    • lsblk 或者lsblk -f
  • 磁盘情况查询

    • df -h

      image-20221016190118594

      当已用超过80%就要想办法清理空间了

  • du -h

    • 查询指定目录的磁盘占用情况,默认当前目录

    • 选项

      • -s:指定目录占用大小汇总
      • -h:带计量单位
      • -a:含文件
      • –max-depth=1:子目录深度
      • -c:列出明细,增加汇总值
  • 常用命令

    image-20221016191126607

    使用yum install tree安装命令

16.2.增加硬盘

下面我来以增加一块硬盘为例来熟悉磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念

  • 如何增加一块硬盘

    1. 虚拟机添加硬盘

      image-20221016172824618

    2. 分区

      • fdisk /dev/sdb

      • sdb开始分区

        m:显示命令列表

        p:显示磁盘分区同fdisk -l

        n:新增分区

        d:删除分区

        w:写入并退出

      开始分区后输入n,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区保存并退出,q直接退出

    3. 格式化

      • 格式化命令:mkfs -t 分区类型 /dev/sdb1
    4. 挂载:将一个分区和一个目录联系起来

      • 命令:mount 设备名称 挂载目录
      • 例如:mount /dev/sdb1 /newdisk
      • 命令:umount 设备名称或者挂载目录
      • ps:命令行挂载重启后会失效
    5. 设置可以自动挂载

image-20221016182734566

image-20221016192043617

17.网络配置

image-20221016193432166

这里的子网IP指定了虚拟机IP的网段

NAT设置查看网关

DHCP设置查看ip范围

  • ifconfig:查看虚拟机ip

  • ping 域名或ip地址:测试网络连通

  • 第一种方法(自动获取)

    • 登录后,自动获取ip,但每次获取的ip可能不一样
  • 第二种方法(指定ip)

    • 直接修改配置文件来指定ip
    • vim /etc/sysconfig/network-scripts/ifcfg-ens33

image-20221016194648695

修改完成后service network restart重启网络服务生效

17.1.设置主机名和hosts映射

  • 设置主机名
    • hostname:查看主机名
    • hostname 主机名:修改主机名
    • 修改主机名在/etc/hostname指定
    • 修改后重启生效

image-20221016200310079

主机名解析过程分析(Hosts、DNS)

  • Hosts:一个文本文件,用来记录IP和Host那么(主机名的映射关系)
  • DNS:就是Domain Name System的缩写,就是域名系统。是互联网上作为域名和IP地址相互映射的一个分布式数据库

18.进程管理

在Linux中,每个执行的程序都叫做一个进程,每一个进程都会分配一个PID(进程号)

每个进程都可能以两种方式存在。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行

一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,知道关机才结束

18.1.ps命令

ps命令时用来查看目前系统中,有哪些正在执行,以及它们执行的状况。

  • 语法:ps [选项]

  • 显示信息:

    • USER:该进程执行用户
    • %CPU:占用CPU百分比
    • %MEM:占用物理内存百分比
    • VSZ:占用虚拟内存(KB)
    • RSS:占用物理内存(KB)
    • STAT:运行状态(S:正在休眠。s:表示该进程是会话的先导进程。R:正在运行)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-86UiWHN1-1667045720854)(C:/Users/joker/AppData/Roaming/Typora/typora-user-images/image-20221017204316149.png)]

    • PID:进程识别号
    • TTY:终端号机
    • START:开始时间
    • TIME:此进程所消耗CPU时间
    • CMD:正在执行的命令或进程名
  • 选项

    • -a:显示当前终端的所有进程信息
    • -u:以用户的格式显示进程信息
    • -x:显示后台进程运行参数
  • ps -ef:以全格式显示当前的所有进程,查看进程的父进程

image-20221017204504594

18.2.终止进程

当某一个进程执行一半需要停止时,或是已消耗了很大的系统资源时,可以考虑停止该进程。使用kill命令来完成该任务

  • 语法:kill [选项] 进程号 通过进程号杀死进程
  • 语法:killall 进程名称 通过进程名称杀死进程,该进程的子进程也会被杀掉,支持通配符
  • 选项
    • -9:表示强迫进程立即停止

18.3.查看进程树

  • pstree [选项] 可以更加直观的来看进程信息

    • -p:显示进程PID
    • -u:显示进程的所属用户

    需要安装:yum install psmisc -y

19.服务管理

服务本质就是进程,但是运行在后台的,通常会监听某个端口,等待其他程序的请求,比如(mysql,sshd,防火墙等),因此我们又称为守护线程

  • service管理指令
  1. service [start|stop|restart|reload|status] 服务名

  2. 在centos7以后很多服务不在使用service而是systemctl

  3. service指令管理的服务在/etc/init.d/查看

    image-20221020193150403

  4. systemctl指令管理的服务在/usr/lib/systemd/system查看

  • 查看服务名
  1. 使用setup就可以查看全部服务,tab退出
  2. ll /etc/init.d/ 查看部分命令

19.1.服务运行级别

  1. 系统停机状态
  2. 但用户工作状态,root权限,用于系统维护,禁止远程登录
  3. 多用户状态(没有NFC),不支持网络
  4. 完全的多用户状态(有NFC),登录后进入控制台命令模式
  5. 系统未使用,保留
  6. x11控制台,登录后进入图像GUI
  7. 系统正常关闭重启

系统默认级别不能设为0和6,否则系统不能正常启动

image-20221020194708063

19.2.服务自启

  • chkconfig指令(service)
  1. 通过chkconfig指令可以给服务的各个运行级别设置自启动/关闭
  2. chkconfig指令管理的服务在/etc/init.d查看
  • 基本语法

    • 查看服务:chkconfig --list
    • chkconfig 服务名 --list
    • chkconfig --level 5 服务名 on/off
  • systemctl设置自启

  1. systemctl list-unit-files : 查看服务开机启动状态,grep可以进行过滤
  2. systemctl enable 服务名(设置开机自启动)
  3. systemctl disable 服务名(设置开机不启动)
  4. systemctl is-enabled 服务名(查询某个服务是否自启动)

19.3.防火墙服务

在真正的生产环境中,往往需要将防火墙打开,但是打开防火墙后,外部请求数据包就不能跟服务器监听端口通讯,这就需要打开指定的端口

  • firewall指令
    • netstat -anp:查看端口和协议
    • 打开端口:firewall-cmd --permanent --add-port=端口号/协议
    • 关闭端口:firewall-cmd --permanent --removed-port=端口号/协议
    • 重新载入才能生效:firewall-cmd --reload
    • 查询端口是否开放:firewall-cmd --query-port=端口/协议

20.动态监控进程

top命令与ps命令很相似,它们都用来显示正在执行的进程。Top与Ps最大的不同之处与top在执行一段时间可以更新正在运行的进程

  • 语法:
    • top [选项]
  • 选项

image-20221020204110065

  • 交互操作

    image-20221020210531911

image-20221020204933560

​ 当前时间 系统运行时间 用户数量 负载均衡(三个值加起来除以三在0.7以下系统负载还行)

image-20221020205151858 系统任务数量 运行与休眠数量 停止与僵死进程数

image-20221020205335117

cpu占比 用户占用cpu 系统 空闲

image-20221020205454635

​ 内存占用 占用

image-20221020205545898

​ 分区内存 可获取

20.1.监控网络状态

  • 查看网络情况netstat
  • 语法
    • netstat [选项]
  • 选项
    • -an:按一定顺序排序输出
    • -p:显示那个进程在调用

Proto:协议

Local Address:本地地址

Foreign address:外部地址

21.Linux包管理

21.1.rpm包管理

rpm用于互联网下载包的打包及安装根据,它包含在某些Linux分布版中。它生成具有.RPM扩展名的文件。RPM是Redhat Package Manager(RedHat软件包管理工具)的缩写,类似于Windows的setup.exe,虽然这一文件格式打上了RedHat的标志,但理念是通用的

  • 查询已安装的rpm列表:rpm -qa
image-20221020213504167
  • 查询软件包是否安装:rpm -q 软件包名

  • 查询软件包信息:rpm -qi 软件包名

  • 查询软件包中的文件:rpm -ql 软件包名

  • 查询文件所属的软件包:rpm -qf 文件全路径名

  • 卸载rpm包:rpm -e rpm包名

    • 可以加–nodeps参数强制删除,但可能会破坏软件之间的依赖关系
  • 安装rpm包:rpm -ivh rpm包全路径名称

    • -i:安装
    • -v:verbose 提示
    • -h:hash 进度条

21.2.yum包管理

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

  • 查询yum服务器可安装的软件:yum list
  • 安装指定一个或多个yum包:yum install 包名
    • -y:安装时全部选项选yes
    • erase 软件包:删除一个或多个软件包

22.shell编程

shell是什么?

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

脚本基础

  1. 脚本格式
    • 脚本以#!/bin/bash开头
    • 脚本需要有可执行权限
    • 约定脚本文件以sh为后缀名
  2. 脚本执行方式
    • 有执行权限的时候,直接输入脚本的绝对路径或相对路径
    • 没有执行权限时,直接sh+脚本运行

22.1.变量

shell变量分为系统变量用户自定义变量

系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER等

显示当前shell中所有变量:set

shell变量定义

  1. 定义变量:变量=值
  2. 撤销变量:unset 变量
  3. 声明静态变量:readonly 变量,注意:不能unset
  • 定义变量规则
    1. 定义变量名称可以由字母、数字和下划线组成,但是不能以数字开头
    2. 等号两侧不能有空格
    3. 变量名称一般习惯为大写

A=`date`反引号,运行里面的命令

A=$(date)等价

22.2.设置环境变量

语法

  1. 将shell变量输出为环境变量/全局变量:export 变量名=变量值
  2. 让修改后的配置立即生效:source 配置文件
  3. 查询环境变量的值:echo $变量名

image-20221022104318168

22.3.位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:./myshell.sh 100 200,这个就是执行shell的命令行,可以在myshell脚本中获取到参数信息

语法

  • $n:n为数字,$0代表命令本身,$1- 9 代表第一到第九个参数,十以上的参数需要用大括号包含: 9代表第一到第九个参数,十以上的参数需要用大括号包含: 9代表第一到第九个参数,十以上的参数需要用大括号包含:{10}

  • $*:这个变量代表命令行中所有的参数,把所有参数看做一个整体

  • $@:这个变量代表命令行中所有的参数,把每个参数区别对待

  • $#:这个变量代表命令行中所有参数的个数

22.4.预定义变量

就是shell设计者已经定义好的变量,可以直接在shell脚本中使用

语法

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

22.5.运算符

语法

  1. $((运算式)) 或 $[运算式] 或 expr m+n
  2. 注意expr运算符要有空格
  3. expr *,/,% 乘,除,取余

22.6.条件判断

if语法

  • [ condition ] :注意condition前后要有空格
  • 非空返回true,可使用$?验证0位true,>1为false
#!/bin/bash
if [ a = 2 ] # 判断
then
        echo 2  # 相等输出2
else
        echo 3 #不相等输出3
fi

image-20221022121113730 image-20221022122717673

case分支

case $1 in
20) # 判断等于几
echo 20 # 判断相等则输出20
;;  # 第一个分支结束
23)
echo 23
;;
*)  # 如果都不相等
echo !! 
;;
esac #整个case结束

image-20221022123042487

22.7.流程控制

for基本语法1

for 变量 in 值1 值2...
do
程序
done # 后面也能跟程序

#!/bin/bash
for i in "$*" #加引号则看做一个整体,输出时只输出一句话。不加则输出参数个数句话
do
        echo "num is $i"
done

for基本语法2

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

#!/bin/bash
for ((i=1;i<=$1;i+=2)) #跟c一样
do
        echo "num is $i"
done  

while语法

while [ 条件判断 ]
do
程序
done

22.8.获取控制台输入

语法

  • read(选项)(参数)
  • 选项
    • -p:指定读取值时的提示符
    • -t:指定读取值时等待的时间(s),如果没有在指定的时间内输入,就不在等待
  • 参数
    • 变量:指定读取值的变量名
read -p "请输入一个数=" NUM
echo "输入的数为:"$NUM

22.9.函数

系统函数

  • basename函数

    • 返回完整路径最后/的部分,常用于获取文件名:basename [pathname] [suffix]

    • 选项

      • suffix为后缀,如果被指定了,basename会将pathname或string中的suffix部分去掉
  • dirname

    • 返回完整路径最后/的前面部分,常用来返回路径部分:dirname 文件绝对路径

自定义函数

[ function ] funname[()]
{
	Action;
	[return int;]
}
调用:funname []


function getSum() {
        SUM=$[$n1+$n2] # 使用变量参数,如果写的是$1则是传参的第一个数
        echo "和是一个$SUM"
}
getSum $1 $2

23.日志管理

日志是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等

日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者收到攻击时攻击者留下的痕迹

日志是记录重大事件的工具,绝大多数日志文件在/var/log/

系统常用日志

image-20221022200152419

23.1.日志管理服务

centos7的日志服务是rsyslogd

  • 查询Linux中的rsyslogd服务是否启动:ps aux|grep rsyslogd|grep -v grep
  • 查询rsyslogd是否自启:systemctl list-unit-files|grep rsyslogd

日志服务配置文件:/etc/rsyslogd.conf

编辑文件时的格式为:*.* 存放日志文件

日志类型

类型说明
authpam产生的日志
authprivssh、ftp等登录信息的验证消息
corn时间任务相关
kern内核
lpr打印
mail邮件
mark(syslog)-rsyslog服务内部的信息,时间标识
news新闻组
user用户程序产生的相关信息
uucpunix to nuix copy主机之间相关的通信
local 1-7自定义的日志设备

日志级别

日志级别说明
debug有调试信息的,日志通信最多的
info一般信息日志,最常用
notice最具有重要性的普通条件的信息
warning警告级别
err错误级别,阻止某个功能或者模块不能正常工作的信息
crit严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert需要立刻修改的信息
emerg内核崩溃等重要信息
none什么都不记录
从上到下,级别从底到高,记录的信息越来越少

由日志服务rsyslogd记录的日志文件,文件的格式包含以下四列:

  1. 事件产生的时间
  2. 产生事件的服务器的主机名
  3. 产生事件的服务名或程序名
  4. 事件的具体信息

23.2.日志轮替

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除

  • centos7使用logrotate进行日志轮替管理,想要改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中“dateext”参数
  • 如果配置文件中有“dateext”参数,那么日志会用日志来作为日志文件的后缀,例如:secure-20201010。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数。删除多余的日志文件即可
  • 如果没有“dateext”参数,日志文件就需要进行改名了。**当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。**当第二次进行日志轮替时,“secure.1”会改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也新建“secure”日志,用来保存新的日志,以此类推

image-20221023165649718

也可以把日志的轮替规则写到/etc/logrotate.d文件夹中

image-20221023170125701

日志轮替机制原理

日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中石油logrotate文件,logrotate通过这个文件依赖定时任务执行的

image-20221023170847213

23.3.查看内存日志

  • journalctl:查看内存日志

journalctl:查看全部

journalctl -n 3:查看最新三条

journalctl --since 19:00 --until 19:10:10:查看起始时间到结束时间的日志可加日期

journalctl -p err:报错日志

journalctl -o verbose:日志详细内容

journalctl _PID=111 _COMM=sshd:查看包含这些参数的日志

24.定制自己的Linux系统

Linux启动流程

  1. 首先Linux要通过自检,检查硬件设备有没有故障
  2. 如果有多块启动盘的话,需要在BIOS中选择启动磁盘
  3. 启动MBR中的bootloader引导程序
  4. 加载内核文件
  5. 直接所有进程的父进程systemd
  6. 欢迎界面

在linux的启动流程中,加载内核文件时关键文件

  1. kernel文件:vmlinuz-3.10.0-957.el7.x86_64
  2. initrd文件:initramfs-3.10.0-957.el7.x86_64.img

制作Linux思路分析

image-20221023192907698

25.备份与恢复

实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失,所以我们可以使用备份和恢复技术

linux的备份和恢复很简单,有两种方式:

  1. 把需要的文件或者分区用TAR打包就行,下次恢复的时候再解压就行
  2. 使用dump和restore命令

如果linux中没有dump和restore命令,需要先安转

yum -y install dump

yum -y install restore

25.1.使用dump命令完成备份

dump支持分卷和增量备份(所谓增量备份是指备份上次备份后修改/增加过的文件,也称差异备份)

dump语法

  • dump [-cu] [-123456789] [-f <备份文件名>] [-T <日期>] [目录或文件系统]

image-20221024193517355

查看备份时间文件:cat /etc/dumpdates

重要的备份文件,比如数据区,建议将文件上传到其他服务器保存

25.2.使用restore完成恢复

restore可以从dump生成的备份文件中恢复文件

语法

  • restore [模式选项] [选项]
image-20221024195413963

常用命令或快捷键

  • wc 统计数量
    • -l:统计行数

    • wc 文件:统计输出文件中的行数、单词数、字节数

      2.快捷键
      ^表示ctrl键
      ^c 命令终止
      ^d 退出 相当于 exit
      ^l 清屏(把命令放到上面去)clear 清空内容
      ^a 让光标定位到当前行的最前面
      ^e 让光标定位到最后面
      ^u 把光标前面的内容删除
      ^k 把光标后面的内容清空
      ^r 历史命令的搜索,通过输入的字符,可以快速的定位到之前的命令中

      向上和向下 - 可以翻阅之前写的命令

      alt+. 可以快速的使用上一个命令的参数
      !$ 引用上一个命令的参数
      esc+. 可以快速的使用上一个命令的参数
      !str !用来调用历史信息的 !str查找历史命令中具体当前最近的一个

命令行补全

  • 使用方法
    • 直接补全:<Tab>
    • 显示与输入开头的内容匹配的列表: <Tab><Tab>
  • 可以补全
    • 命令名
    • 路径与文件名
    • 用户: ~<TAB><TAB>
    • 变量: $<TAB><TAB>

命令别名

  • 创建使用命令的快捷方式

    alias dir='ls -laF'
    
  • 显示所有已设置的所有别名的值

    alias
    
  • 显示指定别名的值

    alias dir 
    
  • 取消别名的定义

    unalias dir
    
  • 同时存在命令和同名的别名时,若要执行原命令 可使用 \COMMAND 形式,如 \ls

命令列表(在一个命令行上执行多个命令)

  • 顺序执行

    cal ; date; whoami
    
  • 用逻辑运算组合多个命令

    • && : 只有左面的命令执行正确才执行右侧的命令(短路作用)
    • || : 只有左面的命令执行错误才执行右侧的命令(短路作用)
    • ! : 对命令的执行状态按逻辑取反
  • 举例

    ping -c1 8.8.8.8 &> /dev/null && echo Ping-Pong 
    grep -q '^myname:' /etc/passwd || echo myname not exist. 
    ! ping -c1 8.8.8.8 &> /dev/null || echo Ping-Pong 
    ! grep -q '^myname:' /etc/passwd && echo myname not exist. 
    grep -q '^myname:' /etc/passwd && echo "myname exist." || useradd myname
    

&&(与)

  • CMD1

    &&

    CMD2

    • 成功 && 成功 = 成功
    • 成功 && 失败 = 失败
    • 失败 && 成功 = 失败 (短路)
    • 失败 && 失败 = 失败 (短路)

||(或)

  • CMD1 || CMD2
    • 成功 || 成功 = 成功 (短路)
    • 成功 || 失败 = 成功 (短路)
    • 失败 || 成功 = 成功
    • 失败 || 失败 = 失败
      20221024195413963" style=“zoom:200%;” />

常用命令或快捷键

  • wc 统计数量
    • -l:统计行数

    • wc 文件:统计输出文件中的行数、单词数、字节数

      2.快捷键
      ^表示ctrl键
      ^c 命令终止
      ^d 退出 相当于 exit
      ^l 清屏(把命令放到上面去)clear 清空内容
      ^a 让光标定位到当前行的最前面
      ^e 让光标定位到最后面
      ^u 把光标前面的内容删除
      ^k 把光标后面的内容清空
      ^r 历史命令的搜索,通过输入的字符,可以快速的定位到之前的命令中

      向上和向下 - 可以翻阅之前写的命令

      alt+. 可以快速的使用上一个命令的参数
      !$ 引用上一个命令的参数
      esc+. 可以快速的使用上一个命令的参数
      !str !用来调用历史信息的 !str查找历史命令中具体当前最近的一个

命令行补全

  • 使用方法
    • 直接补全:<Tab>
    • 显示与输入开头的内容匹配的列表: <Tab><Tab>
  • 可以补全
    • 命令名
    • 路径与文件名
    • 用户: ~<TAB><TAB>
    • 变量: $<TAB><TAB>

命令别名

  • 创建使用命令的快捷方式

    alias dir='ls -laF'
    
  • 显示所有已设置的所有别名的值

    alias
    
  • 显示指定别名的值

    alias dir 
    
  • 取消别名的定义

    unalias dir
    
  • 同时存在命令和同名的别名时,若要执行原命令 可使用 \COMMAND 形式,如 \ls

命令列表(在一个命令行上执行多个命令)

  • 顺序执行

    cal ; date; whoami
    
  • 用逻辑运算组合多个命令

    • && : 只有左面的命令执行正确才执行右侧的命令(短路作用)
    • || : 只有左面的命令执行错误才执行右侧的命令(短路作用)
    • ! : 对命令的执行状态按逻辑取反
  • 举例

    ping -c1 8.8.8.8 &> /dev/null && echo Ping-Pong 
    grep -q '^myname:' /etc/passwd || echo myname not exist. 
    ! ping -c1 8.8.8.8 &> /dev/null || echo Ping-Pong 
    ! grep -q '^myname:' /etc/passwd && echo myname not exist. 
    grep -q '^myname:' /etc/passwd && echo "myname exist." || useradd myname
    

&&(与)

  • CMD1

    &&

    CMD2

    • 成功 && 成功 = 成功
    • 成功 && 失败 = 失败
    • 失败 && 成功 = 失败 (短路)
    • 失败 && 失败 = 失败 (短路)

||(或)

  • CMD1 || CMD2
    • 成功 || 成功 = 成功 (短路)
    • 成功 || 失败 = 成功 (短路)
    • 失败 || 成功 = 成功
    • 失败 || 失败 = 失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值