当前位置:   article > 正文

Linux课程复习笔记总结(华南农业大学)_华南农业大学linux

华南农业大学linux

第一讲

Linux 的起源、历史、特点、定义

起源

1991 年 Linus Torvalds 仿造 Minix 开发了与 UNIX 兼容的 Linux 操作系统内核。

历史

1991 年 10 月发布linux0.02 版本

1993 年发布linux0.99 版本

1994 年 3 月发布linux1.0 版本,遵循GPL 协议

1994 年加入GNU 组织

当前最新稳定内核版本为:6.3.4

https://www.kernel.org

特点

  • 开放性(遵循标准)

  • 多用户

  • 多任务

  • 良好的用户界面

  • 设备独立性(把外部设备当作文件处理)

  • 丰富的网络功能

  • 可靠的系统安全

  • 良好的可移植性

定义

什么是 linux?

是一个类 UNIX 内核的可以自由发布的实现版本,是一个操作系统的底层核心(内核)

Linux => 内核

Linux 系统 => 内核 + 工具 + 配套软件

GNU GPL

GNU GPL 全称是 GNU General Public License(自由文件许可)

GPL核心思想:

保证任何人有共享、修改、发布自由软件的自由

自由软件的衍生作品必须以 GPL 为重新发布的许可证

允许公司销售自由软件(硬件/服务),提供源代码

常见的发行版本

Linux 类型

  • Linux 系统:内核 + 实用工具(专家才会用)
  • Linux 发行版:内核 + 配套软件(普通用户也能使用)

常见的发行版本有:Centos、Ubuntu、Debian

软件提供方式

  • 自由软件

    • 源码公开
    • 任何人都可以自由传播、下载、使用、改写、重新发布
    • 自由软件不一定免费
    • 举例:gcc、make
  • 免费软件

    • 免费
    • 不一定公开源码。
    • 举例:QQ、WeChat
  • 商业软件

    • 由开发者出售并提供技术服务
    • 用户只有使用权
    • 不提供源代码
    • 举例:Photoshop
  • 共享(试用)软件

    • 用户在试用该程序拷贝一段时间之后,必须向开发者交纳使用费用,否则不能继续使用
    • 不提供源代码
    • 举例:VMware

第二讲

Linux 的安装方式、安装过程、远程连接方式

安装方式

  • 虚拟机安装
  • 云主机

虚拟机安装方式

  • 好处
    • 独立于原系统,可随时增删
    • 与宿主之间文件共享
    • 快照,随时恢复
    • 共享网络
    • 解决驱动问题
  • 不足
    • 对宿主机硬件设备要求较高

云主机安装方式

  • 好处
    • 动态扩容
    • 有网就能访问
  • 不足
    • 付费
    • 受限于网速

远程连接方式

  • SSH 客户端

Linux 内核版本号

  • 稳定版

    内核的特性已经固定,代码运行稳定可靠,不再增加新的特性,要改进也只是修改代码中的错误。

  • 2.6 及以下版本(x.y.zz)

    • 版本号=偶数 => 稳定版本
    • 版本号=奇数 => 测试版本
  • 3.0 开始

    次版本号不再表示一个内核是稳定版本还是测试版本,所有发布出来的正式版本都是稳定版本

目录结构

Windows 下一般分了 C、D、E、F 盘等

Linux 下没有分磁盘,在根路径下存在许多系统文件,它们都有特定的用途:

  • bin:常用系统程序目录
  • boot:开机设定目录,也是摆放核心 vmlinuz 的地方
  • dev:系统设备装置文件目录
  • etc:系统配置文件
  • etc/rc.d/init.d:系统开机时载入服务的 scripts 的摆放地点
  • home:系统使用者的目录
  • lib:Linux 执行或编译程序函数库目录
  • mnt:软驱与光驱接入挂载的地方
  • proc:系统核心与执行程序的一些信息
  • root:系统管理员目录
  • usr/bin./bin:一般执行文件摆放的地方
  • usr/sbin./sbin:系统管理员常用指令集
  • var:系统日志文件
  • lost+fount:系统不正常产生错误时遗失的片段

系统结构、主要组件构成

系统结构图:

在这里插入图片描述

主要组件:

在这里插入图片描述

关机/重启命令

命令选项含义常用命令例子
shutdown-h关闭系统并停止电源shutdown -h now 关闭系统并立即停止电源
作用:关机-r关闭系统并重新启动shutdown -r +5 关闭系统并在 5 分钟后重新启动
-c取消之前的关机计划shutdown -c 取消之前的关机计划
-k发送警告信息而不进行关机操作shutdown -k +10 发送警告信息并在 10 分钟后进行关机操作
init0关闭系统并停止电源init 0 关闭系统并停止电源
作用:切换运行模式6关闭系统并重新启动init 6 关闭系统并重新启动
3进入多用户模式,允许多个用户登录使用init 3 进入多用户模式,允许多个用户登录使用
5进入图形化界面模式,允许用户登录使用图形化界面init 5 进入图形化界面模式,允许用户登录使用图形化界面
halt-p关闭系统并停止电源halt -p 关闭系统并停止电源
作用:关机-d不要在wtmp中记录halt -d 关闭系统,但不留下日记记录
reboot-f强制重启,不进行正常的系统关机操作reboot -f 强制重启,不进行正常的系统关机操作
作用:重新启动-d不要在wtmp中记录reboot -d 重启系统,但不留下日记记录

系统说明文档查询

命令:man xxx(xxx为命令名)

  • 回车 下一行
  • 空格 下一页
  • q 退出

例如:man ls

安装 man 命令:yum install -y man man-pages

第三讲

Linux交互方式

  • shell
  • 操作系统
  • 图形界面

Shell的作用、种类

Shell 是一个作为实现虚拟终端的一种程序,它允许用户向操作系统输入需要执行的命令,返回执行结果。

种类

  • ash

    贝尔实验室开发的Shell,bsh是对ash的符号链接

  • bash(GNU Linux操作系统上默认的 Shell)

    是GNU的Bourne Again Shell。sh以及bash2都是对它的符号链接

  • tcsh

    是Berkeley UNIX C Shell。csh是对它的符号链接

  • ksh

    Korn Shell的语法与Bourne Shell相同,同时具备了C Shell的易用特点

  • zsh

    Korn Shell 的一个增强版本,具备bash Shell的许多特点

Shell的功能

  • Shell提示符(# $)
  • 命令自动补全(tab键)
  • 历史记录查看(键盘上下键)
  • 输入输出重定向(> >> <)
  • 管道(|)

常用快捷键:

  • ctrl + r

    反向搜索命令历史记录

  • ctrl + a

    ahead 移动光标到行首

  • ctrl + e

    end 移动光标到行尾

  • ctrl + d

    delete 删除光标所在字符

  • ctrl + u

    光标所在位置剪切到行首

  • ctrl + k

    光标所在位置剪切到行尾

  • ctrl + y

    粘贴剪切板内容

重定向

  • 输出重定向

    文件不存在则创建,文件存在则覆盖

    echo abc > list.txt

  • 追加重定向

​ 文件不存在则创建,文件存在则在末尾追加内容

​ echo abc >> list.txt


高级重定向

文件描述符有以下三种

  • 0 标准输入
  • 1 标准输出
  • 2 错误输出
# 默认情况,将正常输出和错误输出都输出到屏幕
ls /usr/abc

# 通过重定向,改变标准输出的位置
ls /usr/abc > ok.txt

# 文件描述符 1 即为标准输出
ls /usr/abc 1> ok.txt

# 指定文件描述符 2 改变标准错误输出的位置
ls /usr/abc 2> err.txt

# 同时改变标准输出和标准错误输出的位置
ls /usr/abc 1> ok.txt 2> err.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

管道

将第一个命令的输出传递给第二个命令

文件类型

  • 普通文件(regular file):[-]

    纯文字文件(ascii)或二进制文件(binary)

  • 目录(directory):[d]

  • 链接文件(link):[I]

  • 设备文件(device):

    • 块(block)设备文件:[b]
    • 字符(character)设备文件:[c]
  • 管道文件(Pipe):[p]

  • Socket文件(Socket):[s]

路径

相对路径

指从用户工作目录开始的路径

绝对路径

指从 根 开始的路径,也称为完全路径

~ 当前用户主目录

/ 根路径

目录

工作目录

用户某一时刻处在的目录,也成为当前目录

用户主目录

每个用户都有自己的目录。root用户在/root下,普通用户一般在/home下。

用户主目录可以用符号 ~ 表示

特殊目录

  • . 代表该目录自己
  • … 代表该目录的父目录
  • 对于根目录,. 和 … 都代表其自己

常用命令

echo

作用:打印内容

格式:echo [-n] 字符串

-n 表示输出字符串的最后不换行

clear

作用:清空屏幕

格式:clear

ls

作用:显示指定工作目录下的内容

格式:ls [选项] <路径>

选项作用
-aall,列出所有文件,包含隐藏文件
-llong,长格式打印
-iinode,列出 inode 节点的值
-ttime,按时间排序
-Ssize,按文件大小排序
-ddirectory,如果是目录,则只显示目录,不显示目录下的内容
-Rrecursive,递归显示目录及子目录的内容

pwd

作用:显示当前路径

格式:pwd

cd

作用:切换路径

格式:cd <路径>

mkdir

作用:创建目录

格式:mkdir [选项] <目录>

-p 自动创建不存在的中间目录

例子:

# 自动创建中间不存在的目录
mkdir -p dir4/dir5
  • 1
  • 2

rmdir

作用:删除目录。(只能删除空目录)

格式:rmdir [选项] <目录>

-p 删除路径中的空目录

rm

作用:删除文件或目录

格式:rm [选项] <路径>

-r 递归删除子目录的内容

-f 强制删除不进行提示

touch

作用:用于改变文件的时间记录/创建一个空文件

格式:touch [选项] <文件>

-a 改变档案的读取时间记录

-m 改变档案的修改时间记录

-r 使用参考档的时间记录

-d 设定时间与日期,可以使用各种不同的格式

cat

作用:连接文件并打印到标准输出设备上

格式:cat [选项] <文件>

-n 给每行编号

-b 除了空白行,给每行编号

more

作用:分页显示文件内容

格式:more [选项] <文件>

+n 从第 n 行开始显示

-S 把连续的多行空行显示为一行

基本操作:
q:退出

空格:下一页

回车:下一行

less

作用:分页显示文件内容

格式:less [选项] <文件>

-e 当文件显示结束后,自动退出

-f 强迫打开特殊文件

-i 忽略搜索时的大小写

-N 显示每行的行号

-S 显示连续空行为一行

基本操作:
q:退出

空格:下一页

回车:下一行

上下移动键:上下移动

命令区别
less支持向前和向后翻页,可以搜索文本,支持多种操作和快捷键。
less 按需加载,速度会比 more 快一些
more只支持向前翻页,无法向后翻页,只能使用空格键翻页,不能搜索文本。

head

作用:显示文件的开头的内容。默认情况下显示文件的前 10 行内容。

格式:head [选项] <文件>

-q 隐藏文件名

-v 显示文件名

-c<数目> 显示的字节数

-n<行数> 显示的行数

例子:

# 显示前 5 行内容
head -5 file
head -n 5 file

# 显示前 20 个字符的内容
head -c 20 file
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

tail

作用:显示文件的结尾的内容。默认情况下显示文件的最后 10 行内容。

格式:tail [选项] <文件>

-f 当文件发生变化时,输出文件新增内容

-c<数目> 显示的字符数

-n<行数> 显示的行数

-v 显示详细的处理信息

例子:

# 显示最后 5 行内容
tail -5 file
tail -n 5 file

# 显示最后 20 个字符的内容
tail -c 20 file

# 实时监控文件的内容
tail -f file
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

cp

作用:文件或目录的复制

格式:cp [选项] 原路径 目标路径

-a 复制目录时,保留连接、文件属性,并复制目录下的所有内容

-f 覆盖已存在的目标文件而不进行提示

-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中

-r 递归复制目录中的所有内容,包括子目录

mv

作用:移动文件或目录(重命名)

格式:mv [选项] 原路径 目标路径

-i 目标路径如果同名,先询问是否覆盖

-f 覆盖已经存在的目标文件而不提示

-n 不要覆盖任何已存在的文件或目录

第四讲

用户类型

超级用户

uid 为 0

root,有最高权限,可以对 Linux 做任何操作

普通用户

uid 范围为 1001以后

权限受限,用户之间私人的资源是相互隔离的

系统用户

uid 范围为 1-1000

与系统和程序服务相关的用户,默认情况下,这些特殊用户无法登录。

用户信息文件

用户信息文件存储在 /etc/passwd

  • 每一行存储一个用户的账号信息
  • 存储格式为:用户名:加密密码:用户ID:用户组ID:用户主目录:登录Shell

口令文件

口令文件存储在 /etc/shadow

  • 每一行存储一个用户的登录密码信息,加密
  • 只有 root 用户才能读取这个文件

组信息文件

组信息文件存储在 /etc/group

  • 每一行记录系统中的用户组信息
  • 组名:密码字段:用户组ID:用户名列表

常用命令

useradd

作用:新增用户

格式:useradd [选项] 用户名

-d dirName 指定用户主目录。默认在 /home 下新建一个与用户名相同的用户主目录

-s shellName 指定用户登录时使用的 Shell。默认为 /bin/bash

-g groupName 指定用户所属的组名。创建用户时默认创建一个与用户同名的组

-G groupList 一个用户可以属于多个组。用户创建时属于的组成为主组,其他的叫附属组

-u uid 指定新用户的 UID。新用户默认 UID 为当前最高 UID + 1

权限:需要 root 权限

passwd

作用:修改密码

格式:passwd [用户名]

权限:普通用户只能修改自己密码。root 可以修改其他人密码。

usermod

作用:修改用户属性

格式:usermod [选项] 用户名

-d dirName 指定用户主目录。默认在 /home 下新建一个与用户名相同的用户主目录

-s shellName 指定用户登录时使用的 Shell。默认为 /bin/bash

-g groupName 指定用户所属的组名。创建用户时默认创建一个与用户同名的组

-G groupList 一个用户可以属于多个组。用户创建时属于的组成为主组,其他的叫附属组

-u uid 指定新用户的 UID。新用户默认 UID 为当前最高 UID + 1

权限:需要 root 权限

userdel

作用:删除用户

格式:userdel [-r] 用户名

权限:需要 root 权限

groupadd

作用:增加用户组

格式:groupadd [-g n] 组名

-g n 指定组的 ID 为 n

权限:需要 root 权限

groupdel

作用:删除用户组

格式:groupdel 组名

权限:需要 root 权限

chmod

作用:改变指定目录或文件的权限

格式:chmod [-R] 权限模式 路径

在这里插入图片描述

  • u 表示文件拥有者

  • g 表示同组用户

  • o 表示其他以外的人

  • a 表示这三者皆是

  • +表示增加权限

  • -表示取消权限

  • =表示设置特定的权限

  • r 表示可读取

  • w 表示可写入

  • x 表示可执行

例子:

chmod a=rx,u+w,g-x,o-rx a.txt

chmod 640 a.txt

# 递归设置
chmod -R 765 dir
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

chown

作用:改变指定目录或文件的所属用户、所属组

格式:chown [-R] 用户名[:组名] 路径

权限:需要 root 权限

例子:

# 只修改用户名
chown wilson a.txt

# 同时修改用户名和组名
chown wilson:wilson a.txt

# 递归处理
chown -R wilson dir
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

chgrp

作用:改变指定目录或文件的所属组

格式:chgrp [-R] 组名 路径

权限:需要 root 权限

ln

作用:创建文件的快捷方式

格式:ln [-s] 源路径 目标路径(需要指定绝对路径,否则链接失效)

加 -s 就是创建软链接

tar

作用:备份文件

格式:tar [选项] 压缩文件名 路径

-c 创建备份

-C path 切换到指定目录

-f 指定备份文件

-t 测试备份文件

-v 显示指令执行过程

-x 从备份中还原文件

-z 通过 gzip 指令处理备份文件

例子:

# 对 dir 的内容打包(没有压缩,只是打包)
tar cvf dir.tar dir

# 默认解包到当前目录下
tar xvf dir.tar

# 指定解包到 /tmp 目录下
tar xvf dir.tar -C /tmp

# 打包压缩
tar zcvf dir.tar.gz dir
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

gzip

作用:用于压缩文件(只对文件有效)

格式:gzip [选项] 文件

-d 解开压缩文件

-l 列出压缩文件的相关信息

-r 递归处理指定目录

-v 显示指令执行过程

-t 测试压缩文件是否有误

unzip

作用:用于解压缩 zip 文件

格式:unzip [选项] 路径

-n 解压时不要覆盖原有文件

-l 列出压缩文件的相关信息

-d dir 指定解压时存放的目录

-v 显示指令执行过程

-t 测试压缩文件是否有误

例子:

# 默认解压到当前目录
unzip a.txt.zip

# 通过 -d 指定解压目录
unzip -d /tmp a.txt.zip
  • 1
  • 2
  • 3
  • 4
  • 5

awk

作用:强大的文本数据处理工具

格式:awk [选项] ‘脚本命令’ 文件名

-F fs 指定分隔符fs,fs可以是字符串或正则表达式

-v 复制一个用户定义变量

-f scriptfile 从脚本文件中读取 awk 命令

例子:

# $1,$5 是定位符,表示取哪一列
cat /ect/passwd | awk -F: '{print $1,$5}'
awk -F: '{print $1,$5}' /etc/passwd

# -va=1 表示设置一个值为1的局部变量 a,可以在后面使用
cat /etc/passwd | awk -va=1 -F: '{print $1,$4+a}'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

sed

作用:自动编辑一个或多个文件,简化对文件的反复操作、编写转化程序等

格式:sed [选项] 处理文件路径

a 在指定行号之后插入

c 整行替换

s 匹配替换

i 在指定行号位置插入

d 删除

例子:

# 在第一行后插入内容
sed '1a Hello Unix' test.txt

# 替换第二行的内容
sed '2c Hello Unix' test.txt

# 全局替换内容
sed 's/b/B/' test.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意:以上操作不会修改源文件,如果想要修改源文件,需要加上 -i 选项

cut

作用:从指定文件中过滤或提取特定内容,并显示在当前屏幕上。

格式:cut [选项] 路径

-b 以字节为单位进行分割

-c 以字符为单位进行分割

-d 自定义分隔符,默认为制表符

-f 与 -d 一起使用,指定显示哪些列

例子:

cut -d: -f1,3,5 /etc/passwd

cut -c2-5 /etc/passwd
cut -c2,5,7 /etc/passwd
  • 1
  • 2
  • 3
  • 4

tr

作用:用于转换或删除文件中的字符

格式:tr [-d] 字符串1 字符串2

例子:

# 小写转大写
cat /etc/passwd | tr 'a-z' 'A-Z'

# 删除所有 a/b/c 字符
tr -d 'a-c' < test.txt
  • 1
  • 2
  • 3
  • 4
  • 5

find

作用:查找文件或者目录

格式:find 路径 [选项] 表达式

-amin n 过去n分钟内被读取过的文件

-atime n 过去n天内被读取过的文件

-cmin n 过去n分钟内被修改过的文件

-ctime n 过去n天内被修改过的文件

-type c 文件类型是c的文件

-perm p 文件权限为p的文件

-name n 文件名为n的文件

例子:

# 查找当前目录下所有以 .conf 结尾的文件(含目录)
find . -name "*.conf"

# 查找根目录下权限为765,以 .txt 结尾的文件(含目录)
find / -perm 765 -name "*.txt"

# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

grep

作用:查找文件中符合条件的字符串

格式:grep [选项] pattern [文件]

-i 忽略字符大小写的差别

-v 显示不包含匹配文本的所有行

-n 显示匹配行及行号

例子:

# 打印包含 root 的行
grep 'root' /etc/passwd
cat /etc/passwd | grep 'root'

# 打印不包含 root 的行
cat /etc/passwd | grep -v 'root'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

软链接/硬链接

硬链接

给文件一个副本(别名),同时建立两者之间的连接关系。

  • 修改其中一个,与其连接的文件同时被修改
  • 删除其中一个,其余文件不受影响
  • 硬链接与源文件存在于同一个文件系统中

软链接

产生一个特殊的文件,该文件的内容是指向另一个文件的位置。

  • 软链接文件是一个快捷方式
  • 删除了源文件,软链接文件就没用了
  • 软链接可以跨越不同的文件系统
特性软链接硬链接
适用场景跨文件系统的链接、可跨越不同的机器和网络仅适用于同一文件系统内的链接
inode节点不与原文件共享inode节点,有自己独立的inode节点与原文件共享inode节点,与原文件的inode节点相同
链接数链接数为 1,即使创建多个软链接,也只会计算为 1链接数大于等于 2,每创建一个硬链接,链接数加 1
文件的属性拥有自己的文件属性,如权限、时间戳等与原文件共享相同的文件属性
对链接进行操作(修改、删除)对原文件的影响不会影响原文件,只会影响软链接本身修改任意一个文件都会影响其他文件。
对原文件进行操作(修改、删除)对链接的影响原文件被删除或移动后,软链接会失效原文件被删除或移动后,硬链接仍然有效

注:软链接也称为符号链接。

课后作业

# 以长格式的形式打印/tmp目录下的所有文件,包括隐藏文件
ls -la /tmp
# 把/tmp/a.txt文件的权限修改为rwxr-xr--
chmod 754 /tmp/a.txt
# 把/tmp/b.txt文件的文件拥有者修改为mail,同组用户修改为games
chown mail:games /tmp/b.txt
# 把/tmp/c.txt重命名为/tmp/c.txt.bak
mv /tmp/c.txt /tmp/c.txt.bak
# 把当前时间追加到当前用户主目录下的d.txt文件
date >> d.txt
# 把系统当前用户的个数追加到当前用户主目录下的d.txt文件
wc -l /etc/passwd >> ~/d.txt
# 创建当前用户主目录下d.txt的软链接,链接到/tmp/e.txt
ln -s ~/d.txt /tmp/e.txt
# 利用tar打包/tmp目录,生成 tmp.tar压缩包,并保存在当前目录下
tar -zcvf ./tmp.tar /tmp 
# 查看进程名为vsftpd 的进程信息
ps -ef | grep vsftpd
# 查找/usr目录下以xml结尾的所有文件
find /usr -name "*.xml"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

第五讲

常用命令

cal

作用:打印日期

格式:cal

-3 显示最近三个月的日历

-s 将星期天作为月的第一天

-m 将星期一作为月的第一天

-y 显示当年日历

date

作用:显示或设定系统的日期与时间

格式:date [选项] 时间格式

%H 小时(00-23)

%M 分钟(00-59)

%S 秒(00-60)

%Y 完整年份(0000-9999)

%m 月份(01-12)

%d 日(01-31)

命令作用
date显示当前的日期和时间
date -s 设置系统时间为指定的时间
date +%按照指定的格式显示当前的日期和时间
date -d 显示指定字符串所表示的日期和时间

例子:

date "+%Y-%m-%d %H:%M:%S"
  • 1

wc

作用:默认统计文件内的行/字和字节数

格式:wc [选项] 文件路径

-c 按字节统计

-l 按行数统计

-m 按字符统计

-w 按单词统计

sort

作用:对内容排序

格式:sort [选项] 文件路径

-f 排序时,将小写字母视为大写字母

-n 按照数值大小排序

-u 去重排序

-o file 将排序后的结果存入指定的文件

-r 以相反的顺序来排序

cat a.txt
# a
# c
# b
# c

sort a.txt
# a
# b
# c
# c
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

which

作用:查找文件

格式:which | whereis 命令

例子:

which useradd
whereis useradd
  • 1
  • 2

su

作用:变更为其他使用者的身份。除 root 外,需要键入该使用者的密码。

格式:su [选项] [用户名]

例子:

su -c "whoami" wilson
  • 1

vi的使用

三种模式

在这里插入图片描述

末行模式
# 保存&退出
:q	# 正常退出
:q! # 强制退出
:w	# 写入文件
:w filename	# 另存为
:wq	# 写入后退出
:wq!	# 写入后强制退出
:x	# 与:wq一样

# 临时显示行号
:set nu | :set number	# 显示所有行号
:nu | :number	# 显示光标所在行号
:set nonu | :set nonumber	# 取消行号显示
# 长期显示行号
vi ~/.vimrc # 修改当前用户的vim配置文件

# 搜索
/<pattern>	# 从光标所在文件往下搜索
?<pattern>	# 从光标所在位置往上搜索
# n -> 向下搜索下一个匹配项 N -> 向上搜索上一个匹配项

# 替换
:s/x/y	# 把光标所在行第一个匹配的 x 替换为 y
:n,m s/x/y	# 把第n行到m行每行中第一个匹配的x替换为y
:% s/x/y	# 把当前文件中所有行的第一个匹配的x替换为y
g # 全局匹配  :s/x/y/g

# 删除
:n,m d # 删除第n行到m行之间的内容
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
命令模式
  • h左 j下 k上 l后,也可以使用键盘上下左右键

  • $ 移动到行末

  • 0,^ 定位到行首

  • gg 定位到第一行行首

  • G 定位到末行行首

  • nG 定位到第n行行首

  • n+ 向下移动n行

  • n- 向上移动n行

  • w | nw (word) 移动到下一/n个字首

  • e | ne (end) 移动到下一/n个字尾

  • b | nb (back) 移动到上一/n个字首

  • ( 上一句

  • ) 下一句

  • { 上一段

  • } 下一段

  • ctrl + b 上翻一页

  • ctrl + f 下翻一页

  • ctrl + u 上翻半页

  • ctrl + d 下翻半页

  • x | nx 删除一/n个字符

  • dd | ndd 删除一/n行

  • dG 删除所有内容

  • d[w|e|b|$|^|G|gg…] 删除光标移动范围内的内容

  • u 撤销上一步操作

  • U 撤销对当前行的所有操作

  • yy | nyy 复制一/n行

  • d[w|e|b|$|^|G|gg…] 复制光标移动范围内的内容

  • p 粘贴到光标所在位置下一个字符位置

vi下的删除操作,删除的内容会缓存到粘贴板上,可以通过p来重新粘贴

  • r | nr 替换光标所在字符(相同字符)

  • R 进入替换模式,替换光标所在字符,直到按下ESC

  • s #删除光标所在字符后插入

  • i #在光标左侧插入

  • I #在光标所在行首插入

  • a #在光标右侧插入

  • A #在光标所在行尾插入

  • o #在光标所在行的下一行插入

  • O #在光标所在行的上一行插入

  • S #删除光标所在行

  • ZZ 与末行模式 :wq 效果一样

单文件打开
# 默认定位第一行
vi /path/to/file

# 打开文件后把光标置于第n行
vi +n filename

# 打开文件后把光标置于最后一行
vi + filename
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
多文件打开
vi filename1 filename2 filename3
# 末行模式下进行切换
# :e filename2
  • 1
  • 2
  • 3

vi和Shell交互

在末行模式下,用 ! 符号来访问 Linux 的 Shell

:!cat /etc/passwd | more

vi文件冲突

每次打开文件会创建一个 *.swp 的临时文件

当多界面编辑、vi异常退出时会导致异常

删除 *.swp 即可

文本格式转换

Window 换行结束符号有两个控制字符,一个是归位字符^M,另一个是换行字符^J

Linux 中只使用一个换行字符 \n

使用工具进行格式转换

yum install -y dos2unix unix2dos
  • 1

使用

unix2dos | dos2unix filename 格式转换后覆盖更新原文件

unix2dos | dos2unix -n newFilename filename 格式转换后存为新文件

课后作业

#	执行 man ls > out.txt ,生成out.txt文件
man ls > out.txt
#	使用 vi 打开 out.txt
vi out.txt
#	显示所有行号
:set number
#	光标移动到100行,向右移动10个字符
100G 10l(或10键盘右方向键)
#	移动到第一行,往下搜索“1024”,定位到第二个匹配项
gg /1024 n(向下查找第二个)
#	将50行到100行之间的小写“o”改写为大写"O
:50,100 s/o/O/g
#	修改完了,突然反悔,如何恢复修改前?
多次执行u
#	复制65到73行之间这9行的内容,粘贴到最后一行
65gg 9yy G p
#	删除21到42行之间的所有内容
20G 22dd
#	把当前文档另存为 out.txt.bak
:w out.txt.bak
#	定位到28行,删除3个单词
28G d3w
#	在第一行新增一行,输入"I am a Student!"
gg O I am a Student!
#	保存退出
:wq
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

第六讲

禁用/激活网络接口

ifconfig ens33 up / ifup ens33

ifconfig ens33 down / ifdown ens33

网络配置相关文件

文件作用
/etc/sysconfig/network最基本的网络信息,系统启动时读取该文件
/etc/sysconfig/network-scripts/ **此目录下的文件是系统启动时用来初始化网络的一些信息。
/etc/host.conf域名解析的配置文件
/etc/resolv/conf域名服务器配置文件
/etc/protocols定义使用的网络互联协议及协议号
/etc/services设定主机的不同端口的网络服务

开启自启动

/etc/rc.d/rc.local

  1. 赋予脚本可执行权限

    chmod +x /opt/script/autostart.sh

  2. 在 /etc/rc.d/rc.local 末尾增加想要执行的脚本内容

    echo “/opt/script/autostart.sh” >> /etc/rc.d/rc.local

  3. 给 /etc/rc.d/rc.local 赋予可执行权限

    chmod +x /etc/rc.d/rc.local

chkconfig

  1. 将脚本移动到 /etc/rc.d/init.d 目录下

    mv /opt/script/autostart.sh /etc/rc.d/init.d

  2. 赋予脚本可执行权限

    chmod +x /etc/rc.d/init.d/autostart.sh

  3. 添加脚本到开机自启动项目中

    cd /etc/rc.d/init.d

    chkconfig -add autostart.sh

    chkconfig autostart.sh on

systemctl

以 mysql 为例

systemctl enable mtsql.service

systemctl start mysql

常用命令

ping

命令作用
ping 向指定主机发送 ICMP 回显请求
ping -c 向指定主机发送指定数量的 ICMP 回显请求
ping -i 指定发送 ICMP 回显请求的时间间隔
ping -s 指定 ICMP 回显请求的数据包大小
ping -t 指定 ICMP 回显请求的生存时间
ping -v 显示 ICMP 回显请求和回应的详细信息

其中 <host> 是要测试的目标主机的 IP 地址或域名。

第七讲

网络服务模型

Linux系统中的网络服务模型有两种:

  1. 独立的守护进程工作模式(stand-alone)

    守护进程的工作就是打开一个端口,并且等待(Listen)进入连接

    如果客户端发起一个连接请求,守护进程就创建(Fork)一个子进程响应这个连接,而主进程继续监听其他的服务请求

在这里插入图片描述

  1. 基于 xinetd 的工作模式(Internet Super Server)

    xinetd能够同时监听多个指定的端口,在接受用户请求时,它能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求

    可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给哪个程序处理,然后就启动相应的守护进程

    在这里插入图片描述

工作模式优点缺点
独立的守护进程工作模式- 不需要安装 xinetd 服务
- 相对简单,易于管理和维护
- 可以独立地控制每个服务的访问权限
- 每个服务都需要独立地监听端口,占用系统资源
- 容易受到网络攻击
- 无法限制并发连接数
基于 xinetd 的工作模式- 可以集中管理所有服务的访问权限
- 可以限制并发连接数,防止 DoS 攻击
- 可以根据需要启动和停止服务,减少系统资源占用
- 需要安装 xinetd 服务,增加系统复杂性
- 需要编写 xinetd 配置文件,增加配置难度
- xinetd 进程本身可能成为系统安全漏洞

FTP的两种工作模式

主动模式PORT(服务器主动连接客户端)

在这里插入图片描述

主动指的是FTP服务器“主动”去连接客户端的数据端口来传输数

  1. 客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口(即tcp 21端口)

  2. 客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器

  3. 服务器会从它自己的数据端口(20)“主动”连接到客户端指定的数据端口(N+1)

  4. 客户端就可以和ftp服务器建立数据传输通道了

被动模式PASV(服务器被动等待客户端连接)

在这里插入图片描述

被动:指的是FTP服务器“被动”等待客户端来连接自己的数据端口

  1. 客户端打开两个任意的非特权本地端口(N >1024和N+1)

  2. 第一个端口连接服务器的21端口,提交PASV命令

  3. 服务器会开启一个任意的非特权端口(P > 1024),并发送给客户端

  4. 客户端发起从本地端口N+1到服务器的端口的连接用来传送数据。(注意此模式下的FTP服务器不需要开启tcp 20端口了)

第八讲

Shell编程的特点

  • shell程序可以认为是将shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行

  • 不同的shell解释器使用不同的shell命令语法

  • shell程序解释执行,不生成可以执行的二进制文件

  • 可以帮助用户完成特定的任务,提高使用、维护系统的效率

  • 了解shell程序可以更好的配置和使用Linux,实现自动化运维

变量的声明和使用

变量的特点:

  • 弱类型,不用声明类型
  • 可以存储不同的内容
  • 大小写区分

格式:变量=值(等号两边不能有空格)

使用:

  • $变量名(变量名为一个字符时使用)
  • ${变量名}(变量名多于一个字符时使用)

注意:

  1. 如果字符串里包含空格,则必须使用引号括起来
  2. 等号两边不能有空格
  3. 默认情况下,所有输入的内容都是字符串

获取输入

使用 read 可以将用户的输入赋值给变量

# 将输入赋值给x(单个输入)
read x

# 将输入转换成数组赋值给arr(多个输入)
read -a arr
  • 1
  • 2
  • 3
  • 4
  • 5

read可以接收选项,例如:

  • -a,表示将输入转换成数组(read 命令默认会以空格、制表符和换行符作为分隔符)

  • -r,不将输入中的 \ 视作转义字符

  • -p,指定一段提示语,如:read -p "提示..." x

单引号、双引号和反引号

双引号

  • 字符串通常放在双引号中
  • 如果在参数中包含一个或多个空白字符,必须给参数加双引号
  • 如果把一个带有$字符的变量放在双引号中,程序执行到该行时会把变量替换为它的值
  • 可用 \ 字符取消 $ 的特殊含义

单引号

  • 单引号内的字符都作为普通字符出现

反引号

  • 反引号内的字符串被 Shell 解释为命令行,在执行时 Shell 会先执行该命令行,并以它的标准输出结果取代整个反引号内容

位置变量

bash在解释用户命令时,会把所输入的命令后面的参数使用位置变量传递给bash脚本程序

  • $0,代表脚本的名字

  • $1、 2 … 2… 2n,分别代表参数1、参数2…参数n

  • $*,包括参数的列表(字符串)

  • $@,包括参数的列表(数组)

  • $#,包括参数的个数

环境变量

环境变量说明
$HOME用户的主目录
$IFS内部的域分隔符,一般为空格符、制表符或换行符
$PATH寻找命令或可执行文件的搜索路径列表,路径以冒号分隔
$$Shell脚本的进程号
$?紧邻的前驱命令的返回值 0=成功 1=失败
$TERM使用的终端类型
$SHELL查看当前用户所使用的的shell

常用的运算符

整数的算术运算符:

+、-、*、/、%;

赋值运算符:

=、+=、-=、*=、/=、%=

位运算符:

<<、>>、&、|、~、^;

位运算赋值运算符:

<<=、>>=、&=、|=、~=、^=;

逻辑运算符:

&&,||,!,>,>=,<,<=,!=,==

数学表达式

计算表达式的值有三种方法:

  1. expr 命令

    格式:expr arg

    例:

    • s=expr 2 + 3
    • s=expr $s \* 4

    注意:

    1. 运算符和参数之间要有空格隔开
    2. 通配符号(*)作为乘法运算符时要用 \ 转义
  2. let 命令

    例:

    • let s=(2+3)*4

    注意:

    1. 运算符和参数之间不能有空格
    2. 当运算符中有<、>、&、|等符号时,同样需要用引号(单引号、双引号)或者斜杠来修饰运算符
  3. $((数学表达式))

    例:echo $((2*3+4))

条件判断

常见的条件:

  • 变量属性
  • 文件属性
  • 命令执行的结果
  • 多种条件的逻辑组合

判断结果:

  • 真:0
  • 假:1

格式:

  • test condition
  • [ condition ] (condition左右两边需要有空格)

测试文件属性

常用的文件属性条件判断
-f fn如果fn存在且fn为普通文件则返回真,否则返回假。 file
-b fn如果fn存在且fn为块设备则返回真,否则返回假。 block
-e fn如果fn存在则返回真,否则返回假。 exist
-d fn如果fn 存在且fn为目录则返回真,否则返回假。 directory
-r fn如果fn存在且fn可读则返回真,否则返回假。 read
-w fn如果fn存在且fn可写则返回真,否则返回假。 write
-x fn如果fn存在且fn可执行则返回真,否则返回假。 execute
-O fn如果fn存在且被当前用户拥有则返回真,否则返回假。
-L fn如果fn存在且fn为符号链接则返回真,否则返回假。

测试字符串属性

常用字符串属性条件判断
string_1 = string_2如果string_1和string_2两个字符串相等则返回真,否则返回假;
string_1 != string_2如果string_1和string_2两个字符串不相等则返回真,否则返回假;
-z string如果字符串string的长度为0则返回真,否则返回假; zero
-n string如果字符串string长度不为0则返回真,否则返回假;
string同-n string,如果字符串string长度不为0返回真,否则返回假。

测试整数关系

常用的整数关系条件判断
mum_1 –eq num_2如果num_1和num_2相等则返回真,否则返回假;
mum_1 –ne num_2如果num_1不等于num_2则返回真,否则返回假;
mum_1 –gt num_2如果num_1大于num_2则返回真,否则返回假;
mum_1 –lt num_2如果num_1小于num_2则返回真,否则返回假;
mum_1 –le num_2如果num_1小于等于num_2则返回真,否则返回假;
mum_1 –ge num_2如果num_1大于等于num_2则返回真,否则返回假;

逻辑运算

逻辑与-a:condition1 -a condition2,如果两个条件都为真,则结果为真

逻辑或-o:condition1 -o condition2,如果两个条件有一个为真,则结果为真

逻辑非!:! condition,结果与condition相反

控制结构

控制结构可以分为分支和循环两种:

常见的分支结构:

  • if
  • case

常见的循环结构:

  • for
  • while
  • until

例子

输入:1 2 3 4 5 输出:20

#!/bin/bash

while true
do
	echo 'Input a list of number:'
	read -a nums
	if [ ${nums[0]} = 'q' ];
	then
		exit
	fi
	total=0
	for num in ${nums[@]}
	do
		let total=${total}+${num}
	done
	echo "the result is ${total}"
done	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

根据输入执行命令

#!/bin/bash

func()
{
  echo -e
  echo "Use one of the following options:"
  echo "P:To display current directory"
  echo "S:To display the name of running file"
  echo "D:To display today's date and present time"
  echo "L:To see the list of files in your present working directory"
  echo "W:To see who is logged in"
  echo "I:To see the ip address of this local machine"
  echo "Q:To quit this program"
  echo "Enter your option and hit:"
}

while true
do 
	func
	read input
	case ${input} in
		p|P)
			pwd
			;;
		s|S)
			echo $0
			;;
		d|D)
			date "+%Y-%m-%d %H:%M:%S"
			;;
		l|L)
			ls
			;;
		w|W)
			who
			;;
		i|I)
			ifconfig
			;;
		q|Q)
			exit
			;;
		*)
			echo "usage error!"
			;;
	esac
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

根据输入判断成绩

#!/bin/bash

while true
do
	echo 'Please enter your score:'
	read score
	if [ "$score" -lt 0 ];
	then
		exit
	elif [ "$score" -lt 60 ];
	then
		echo 'Failed!'
	elif [ "$score" -ge 60 -a "$score" -lt 70 ];
	then
		echo 'Passed!'
	elif [ "$score" -ge 70 -a "$score" -lt 80 ];
	then
		echo 'Medium!'
	elif [ "$score" -ge 80 -a "$score" -lt 90 ];
	then
		echo 'Good!'
	elif [ "$score" -ge 90 -a "$score" -le 100 ];
	then
		echo 'Excellent!'
	else
		echo 'error score!'
	fi
done

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

第九讲

makefile文件

在这里插入图片描述

在这里插入图片描述

main.o部分的命令应为:gcc -c main.c -o main.o -L f1 -L f2

第十讲

磁盘设备命名规则

前两个字母表示分区所在设备的类型:

  • hd:IDE硬盘
  • sd:SCSI硬盘(U盘,移动硬盘等)

第三个字母表示分区在哪个设备上:

  • hda:第一块IDE硬盘
  • sda:第一块SCSI硬盘
  • sdb:第二块SCSI硬盘

数字表示分区的次序:

  • had1:第一块IDE硬盘第一分区
  • sdb2:第二块SCSI硬盘第二个分区

查看硬盘及分区情况:
fdisk -l

文件系统

常见的文件系统

FAT、NTFS、ExtFAT、ext2、ext3、ext4、xfs、APFS

虚拟文件系统VFS

在这里插入图片描述

VFS是 Linux 内核中的软件层,它在内核中提供了一组标准的、抽象的文件操作,允许不同的文件系统实现共存,并向用户空间程序提供统一的文件系统接口。

VFS并不是一个实际的文件系统,它只存在于内存,系统启动时建立,关闭时消亡。

设备挂载

计算机系统中,所有的存储设备都是以目录树的形式对文件进行管理的

在Linux系统中,所有的文件都是在以“/”目录为根的一棵“大”目录树中进行管理。如果要使用USB存储设备、光盘或软盘等存储设备,必须将这些设备中的“小”目录树像嫁接一样挂载(mount)到Linux系统的“大”目录树中。

挂载点

Linux系统中有一个**/mnt**目录,专门用作挂载点(mount Point)目录

在挂载设备时首先查看挂载点目录是否存在,如果不存在必须首先创建该目录,否则mount命令无法正常执行

进程

Linux系统上所有运行的东西都可以称之为一个进程,如每个用户任务、每个系统管理任务

进程是一个程序的运行

进程与程序的区别:

  • 程序只是一个静态的指令集合,不占系统的运行资源,只占用磁盘空间
  • 进程是一个随时都可能发生变化的、动态的、使用系统运行资源(cpu,内存等)的程序
  • 一个程序可以启动多个进程

进程的类型

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性:

  • 交互进程:有 Shell 启动的进程
  • 批处理进程:这种进程和终端没有联系,是一个进程序列
  • 守护进程:在后台持续运行的进程

进程在启动形态上分为两类:

前台进程

  • 用户键入一个命令,回车执行,就已经启动了一个前台的进程
  • 适合需要实时反馈的操作
  • 前台进程会一直占用终端,直到进程执行结束
  • ctrl+c强制结束进程执行
  • kill杀死进程

后台进程

  • 一般不需要用户交互或者实时的反馈
  • 在命令结尾加上 &

常用操作

  • jobs:查看所有后台进程列表
  • ctrl+z 前台进程->后台进程,并暂停执行
  • fg :将后台进程调至前台执行
  • bg :将一个后台暂停的进程,继续执行
  • kill杀死进程

常用命令

service

作用:启动、停止、重启或查询服务状态

命令作用
service start启动指定服务
service stop停止指定服务
service restart重启指定服务
service status查询指定服务状态

at

作用:指定在将来某个时刻执行某些命令

格式:at [选项] [时间]

执行方式:

  • 交互式
  • 指定文件

注意:

  • at通过atd守护进程来实现,只执行一次
  • 执行结束后会发邮件通知结果

crontab

作用:设定周期性任务。

格式:crontab [-u user] 文件 / crontab [-u user] {-l | -r | -e}

-e 执行文字编辑器来设定时间表

-r 删除目前的时程表

-l 列出目前的时程表

crontab文件编写格式

* * * * * 开头,分别代表分钟、小时、日、月、星期几

# 每天凌晨12点重启app.js
0 0 * * * /usr/local/bin/pm2 restart /root/project/centos/app/app.js
  • 1
  • 2

在这里插入图片描述

ps

作用:显示当前进程的状态

格式:ps [选项]

-A 列出所有的进程

-w 显示较多的资讯

-au 显示较详细的资讯

-aux 显示所有包含其他使用者的进程

-e 显示所有进程

-f 采用全格式显示

kill

作用:删除执行中的程序或工作

格式:kill [-s <信息名称或编号>] [程序] / kill [-l <信息编号>]

1 重新加载进程

9 杀死一个进程

15 正常停止一个进程

注意:kill命令是向进程发送信号,不是杀死的意思,-9表示无条件退出,但由进程自行决定是否退出。这就是为什么kill -9终止不了系统进程和守护进程的原因

free

作用:显示内存状态,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

格式:free [选项]

b以Byte为单位显示内存使用情况
k以KB为单位显示内存使用情况
m以MB为单位显示内存使用情况
h以合适的单位显示内存使用情况,最大为三位数
o不显示缓冲区调节列
s<间隔描述>持续观察内存使用状况
t显示内存总和列

mail

作用:发送邮件

例子:

# 给root用户发送邮件 -s指定主题
echo "这是邮件内容" | mail -s "邮件主题" root
  • 1
  • 2

第十一讲

Docker

Docker 是一个应用打包、分发、部署的工具

Docker与普通虚拟机的区别:

Docker:可理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要。

普通虚拟机:一个完整而庞大的系统,包含各种不管你要不要的软件。

特性普通虚拟机Docker
跨平台通常只能在桌面级系统运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行支持的系统非常多,各类 Windows 和 Linux 都支持
性能性能损耗大,内存占用高,因为把整个完整系统都虚拟出来了性能好,只虚拟软件所需运行环境,最大化减少没用的配置
自动化需要手动安装所有东西一个命令就可以自动部署好所需环境
一致性环境一致性不高,不同系统差异大一致性好,不同系统都一样部署方式

重要概念

仓库

集中存放镜像文件的地方,分为公开仓库和私有仓库两类。最大的公开仓库是DockerHub,用户可以在本地搭建私有仓库。

镜像

一个只读模板,包含一个完整的Linux OS环境和用户所需的应用程序,用以新建Docker容器。类似Java中的类。

容器

基于某个镜像创建的实例。可以想象成一个精简版的Linux OS环境和其下(包括root用户权限和用户空间、进程空间等)运行的应用程序空间。部分高权限内容无法使用。

工作流程

  1. 打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包。

  2. 分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装。

  3. 部署:拿着“安装包”,就可以使用一个命令把应用运行起来,自动模拟出一摸一样的运行环境,且跨平台Windows/Mac/Linux。

常用命令

搜索镜像

docker search 镜像名 [-no-trunc]

-no-trunc 不截断过长的描述

标准输出的结果:

NAME 镜像名

DSECRIPTION 描述

STARS 收藏数

OFFICIAL 是否是官方镜像

AUTOMATED 是否自动构建

拉取镜像

docker pull [选项] [仓库地址[:端口号]/]仓库名[:标签]

缺省仓库地址为 DockerHub

私有仓库地址格式一般为 <域名/IP>[:端口号]

查看镜像

docker images [选项] [REPOSITORY]

标准输出的结果:

REPOSITORY 镜像下载仓库源

TAG 镜像标记

IMAGE_ID 镜像唯一ID号

CREATED 创建时间

SIZE 镜像大小

删除镜像

docker image rm [选项] <镜像1> [<镜像2> …]

<镜像>可以填写镜像短ID / 镜像长ID / 镜像名

-f表示强制删除,一般用于被占用镜像的删除

显示容器

docker ps [选项]

-a 显示所有容器,包括未启动的容器

-f:根据条件过滤显示的内容

-n:列出最近创建的n个容器

-q:静默模式,只显示容器编号

终止容器

docker stop CONTAINER

CONTAINER 可以是 ID 也可以是 NAME

重启容器

docker restart CONTAINER

CONTAINER 可以是 ID 也可以是 NAME

删除容器

docker rm [选项] CONTAINER

-f 强制删除一个运行中的容器

启动容器

启动容器有三种方式:

  1. 基于镜像新建一个容器并启动

    docker run [选项] NAME[:TAG]

    -name=“”:为容器指定一个新名字(唯一,不指定则随机)

    -d:后台运行容器,并返回ID

    -t:为容器分配一个伪输入终端

    -i:以交互模式运行容器(一般与-t一起用,进入后台)

    -p:端口映射,<host端口>:<容器端口>

    -v:目录映射,<host目录>:<容器目录>

    -e:设置环境变量

    例:docker run -it centos:7 /bin/bash

  2. 重新启动

    docker start <容器>

    <容器>可以填写容器ID / 容器名

  3. daemon 守护态运行

进入容器

  1. attach

    docker attach CONTAINER

    连接到容器后台,所有窗口都会同步显示,exit会退出容器

  2. exec

    docker exec [选项] CONTAINER COMMAND [参数]

    在运行的容器中执行命令exit不会退出容器

    -d:后台运行

    -i:保持STDIN 打开

    -t:分配一个伪终端

创建镜像

docker commit [选项] 容器名 [REPOSITORY[:TAG]]

-a:提交的镜像作者

-m:提交时的说明文字

-c:创建文件时使用Dockerfile指令

–docker build [选项] path

path:dockerfile所在目录

-t:镜像的名字及标签,如:REPOSITORY[:TAG]

Dockerfile

用来构建镜像的文本文件,包含所需的指令和说明。

Dockerfile结构:

  • 基础镜像信息(centos ubuntu …… nginx ……)

  • 维护者信息(docker search可查看)

  • 镜像操作指令(tar yum make)

  • 容器启动时执行指令(系统启动时,第一个加载的程序/脚本/命令)

FROM centos:7
MAINTAINER scau
RUN yum install -y vim
CMD ["echo","hello dockerfile"]
  • 1
  • 2
  • 3
  • 4
Dockerfile操作指令
FROM [镜像]指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令,例如centos:7。from有两层含义:①开启一个新的镜像②必须写的一行指令
MAINTAINER [名字]说明新镜像的维护人信息(可写可不写)
RUN命令每一条RUN后面跟一条命令,在所基于的镜像上执行命令,并提交到新的镜像中,RUN必须大写
CMD [“要运行的程序”,“参数1”、“参数2”]指定启动容器时需要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能执行最后一条,“bin/bash”也是一条CMD,并且会覆盖image镜像里面的cmd。
EXPOSE [端口号]指定新镜像加载到Docker时要开启的端口暴露端口,就是这个容器暴露出去的端口号。
ENV [环境变量] [变量值]设置一个环境变量的值,会被后面的RUN使用。容器可以根据自己的需求创建时传入环境变量,镜像不可以。
ADD [源文件/目录] [目标文件/目录]①将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,②或者是一个URL,③若源文件是压缩包则会将其解压缩。
COPY [源文件/目录] [目标文件/目录]将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中,copy只能用于复制,add复制的同时,如果复制的对象是压缩包,ADD还可以解压,copy比add节省资源。
VOLUME [“目录”]在容器中创建一个挂载点,简单来说就是-v,指定镜像的目录挂载到宿主机上(由容器创建和管理)。
USER [用户名/UID]指定运行容器时的用户
WORKDIR [路径]为后续的RUN、CMD、ENTRYPOINT指定工作目录,相当于是一个临时的"CD",否则需要使用绝对路径,例如workdir /opt。移动到opt目录,并在这下面的指令都是在opt下执行。

例子:

在这里插入图片描述

镜像管理

标记镜像

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

例:docker tag ubuntu:20.04 172.26.30.14:5000/myubuntu:v3

上传镜像

docker push [选项] NAME[:TAG]

注意:这是从本地镜像上传到镜像仓库(要先登陆到镜像仓库)

例:docker push scau/mycentos:v1(登录dockerhub,假设ID为scau)

容器管理

导入/导出容器

docker export [选项] CONTAINER

-o:将输出内容写到文件

例:

docker export -o mycentosv1.tar 37cdf85196fc

将id为37cdf85196fc的容器保存为tar文件

docker import [选项] file|URL [REPOSITORY[:TAG]]

-c:应用docker指令创建镜像

-m:提交时的说明文字

例:

docker import mycentosv1.tar mycentos:v2

从镜像归档文件mycentosv1.tar创建镜像,命名为mycentos:v4

第十二讲

X Window

组成

在这里插入图片描述

X Window系统由三个基本元素组成

  • X服务端

    是控制输入及输出设备并维护相关资源的程序,它接收输入设备的信息,并将其传给X Client,而将X Client传来的信息输出到屏幕上(在屏幕上构造方块(窗口),然后画出里面的元素)

  • X客户端

    是应用程序的核心部分,它与硬件无关,每个应用程序就是一个X Client

  • X通信通道

    X通信通道的主体是xlib(X函数库)

    X Client调用xlib,利用相应的通信功能向X Server发出请求

    X Server完成任务之后,同样调用xlib把结果显示到指定的设备上去

更改系统运行级别

  • init n 或 telinit n

    • n 为级别号,需要root权限
    • 例:init 5
  • startx

    • 启动图形化环境(需要安装图形化界面)
    • 例:startx
  • 长期

    • 修改配置文件 /etc/inittab(CentOS6及以前)
    • systemctl set-default *.targer(CentOS7之后)

系统初始化过程

CentOS7之前

在这里插入图片描述

CentOS7及之后

在这里插入图片描述

CentOS7及之后,systemd替代了init进程

与init类似:

  • systemd总是第一个进程(PID=1)
  • systemd进程扮演了终极父进程的角色,失去了父进程的子进程就会以systemd作为它们的父进程
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/454768
推荐阅读
相关标签
  

闽ICP备14008679号