学习资源
了解 Linux
Linux Kernel
指系统内核,负责完成操作系统最基本功能的程序
Kernel 的主要作用
- 统一管理计算机中的硬件资源
- 提供用户操作界面
- 提供应用程序的执行环境
Linux 发行版本
在 Linux 内核的基础之上,添加各种管理工具和应用软件,而构成的完整的操作系统
RedHat | Fedora | 面向个人,定位于桌面用户,追求绚丽的桌面效果 |
---|---|---|
RedHat Enterpise Linux | 面向企业,功能强大,性能优越,需要付费 | |
CentOS | 在 RHEL 基础上去掉了很多收费服务的二次编译,相当于免费版的 RHEL | |
Debian | Ubuntu | 以桌面应用为主的 Linux 操作系统 |
Kali | 设计用于数字取证操作系统 | |
SUSE | openSUSE | 对个人来说是完全免费的,包括使用和在线更新 |
SUSE Enterpise Linux | 主要是面向企业 |
Linux 哲学思想
- 一切皆文件
- 整个系统由众多的小程序组成
- 尽量避免与用户交互
- 使用纯文本文件保存配置信息
VMware 网络模式
网络设置模式 | 能否与物理主机通信 | 能否与外部计算机通信 | 与物理主机 IP 关系 |
---|---|---|---|
桥接(bridged) | 能 | 能(但可能会造成 IP 冲突) | 需设置在同一网段 |
网络地址转换(NAT) | 能 | 能(单向访问,不会造成 IP 冲突) | 与 VMnet8 相同 |
仅主机(host-only) | 能 | 不能 | 与 VMnet1 相同 |
如果虚拟机要上网,建议设为 NAT 模式
Linux 常用命令
文件内容查看命令
命令 | 作用 | 选项与参数 | 作用 |
---|---|---|---|
cat | 由第一行开始显示文件内容 | -b | 列出行号,不包括空白行 |
-n | 列出行号,包括空白行 | ||
tac | 从最后一行开始显示 | ||
nl | 显示时输出行号 | -b a | 不论是否为空行,也同样列出行号(类似 cat -n) |
-b t | 如果有空行,空的那一行不要列出行号(默认值) | ||
-n ln | 行号在荧幕的最左方显示 | ||
-n rn | 行号在自己栏位的最右方显示,且不加 0 | ||
-n rz | 行号在自己栏位的最右方显示,且加 0 | ||
more | 一页一页的显示文件内容 | 空格键 | 向下翻一页 |
Enter | 代表向下翻一行 | ||
/字串 | 在显示的内容中,向下搜寻『字串』这个关键字 | ||
:f | 立刻显示出档名以及目前显示的行数 | ||
q | 立刻离开 more ,不再显示该文件内容 | ||
b | 往回翻页 | ||
less | 与 more 类似,但可往前翻页 | 空格键 | 向下翻一页 |
/字串 | 向下搜寻『字串』 | ||
q | 退出查看 | ||
head | 只看头几行 | -n | 显示 n 行 |
tail | 只看尾巴几行 | -n | 显示 n 行 |
-f | 持续侦测后面所接的档名 | ||
grep | 在某文件中查找指定字符串的行 (不支持通配符,但可用正则) |
“^字串” | 查找以『字串』开头的行 |
“字串$” | 查找以『字串』结尾的行 | ||
“^$” | 找出所有空白行 | ||
-n | 输出符合查找条件的行以及行号 | ||
-v | 反转查找,输出与查找条件不相符的行 | ||
-i | 忽略关键字的大小写 | ||
-w | 精确匹配单词,而不是字符串 | ||
-r | 在某个目录下递归查找指定字符串 | ||
diff | 文件内容对比 | a | 增加 |
d | 减少 | ||
c | 修改 | ||
wc | 查看文件的信息 | -l | 查看文件有多少行 |
-c | 查看文件有多少字节 | ||
-L | 显示最长行的长度 | ||
-w | 显示文件有多少个单词 |
文件查找命令
locate - 简单快速的文件查找命令
- locate 命令的优缺点
| 优点 | 缺点 |
| :—-: | :—-: |
|
1. 查找速度快
1. 无需指定查找起始路径
|
1. 只能模糊查找
1. 查找结果依赖于事先构建好的索引数据库
|
使用 locate 找出文件 “sshd_config” 的所在路径
[root@localhost ~]# locate sshd_config
/etc/ssh/sshd_config
新建一个文件,使用 locate 命令无法找到
[root@localhost ~]# touch /tmp/hello.txt
[root@localhost ~]# locate hello.txt
[root@localhost ~]#
find - 强大的文件查找命令
find 命令的基本使用格式
find [查找起始路径] [选项] [查找条件] [处理动作]
- 查找起始路径:可以根据需要指定,默认为当前路径,如果指定为“/”,就表示在整个硬盘中进行查找
- 查找条件:指定的查找标准,可以根据文件名、文件大小、文件类型、从属关系、权限等进行设置,默认为找出指定路径下的所有文件
- 处理动作:对符合查找条件的文件做出的操作,例如删除等操作,默认为输出至标准输出
在使用find命令时,最重要的是如何设置查找条件,下面是一些常用的查找条件设置选项: | 选项 | 作用 | | 示例 | | :—-: | :—-: | :—-: | —- | | -name | 按名称查找,允许使用通配符 | | 在 /etc 目录中查找所有名称以 net 开头、以 .conf 结尾的文件:
find /etc -name "net*.conf"
| | -iname | 按名称查找,不区分大小写 | | 在 /etc 目录中查找所有名称中包含字符串 “net” 的文件或目录,不区分大小写:find /etc -iname "*net*"
| | -empty | 查找空文件或目录 | | 查找计算机中所有的空文档或目录:find / -empty
| | -type | 按文件类型查找
- 普通文件:f
- 目录:d
- 符号链接文件:l
- 块设备文件:b
- 字符设备文件:c
| | 在 /boot 目录中查找所有的子目录:find /boot -type d
在 /etc 目录中查找所有的符号链接文件:find /etc -type l
| | -size | 按文件大小查找(k,M,G) | | 在 /etc 目录中查找大小在 1MB 以上的文件:find /etc -size +1M
在 /boot 目录中查找大小在 10KB 以下的文件,并列出详细信息:find /boot -size -10k -ls
| | -not | 取反 | | 在 /boot 目录中查找所有文件类型不是普通文件的文件,并显示其详细信息:find /boot -not -type f -ls
| | -atime |
单位:天 | 按时间戳查找 | 在 /tmp 目录中查找7天内没有被访问过(最后一次访问是在7天之前)的文件:find /tmp -atime +7
| | -mtime | | | 在计算机中查找2天前的当天被修改过的文件:find / -mtime 2
| | -ctime | | | 在 /etc 目录中查找最近1天之内属性被改动过的文件:find /etc -ctime -1
| | -amin | 单位:分钟 | | 在 /tmp 目录中查找2小时内没有被访问过(最后一次访问是在2小时之前)的文件:find /tmp -amin +120
| | -mmin | | | 在 /etc 目录中查找最近1小时内容被改动过的文件:find /etc -mmin -60
| | -cmin | | | 在 /etc 目录中查找最近1小时属性被改动过的文件:find /etc -cmin -60 -type f
| | -exec | 对查找结果进一步处理
使用 {} 表示 find 查找的结果
在最后添加\;
表示命令结束 | | 查找 /boot 目录下的以“init”开头的文件,并将其复制到 /tmp 目录下:find /boot -name "init*" -exec cp {} /tmp \;
| | 同时指定多个查找条件 | | | 在 /boot 目录中查找大小超过 1024KB 而且文件名以 “init” 开头的文件:find /boot -size +1204k -name "init*"
|
目录处理命令
命令 | 作用 | 选项与参数 | 作用 |
---|---|---|---|
ls | 列出目录及文件名 | -a | 列出全部文件,包含以 . 开头的隐藏文件 |
-d | 仅列出目录本身,而不是列出目录内的文件数据 | ||
-l | 长数据串列出,包含文件的属性与权限等 | ||
cd | 切换目录 | cd/cd ~ | 回到用户家目录 |
cd - | 回到之前的目录 | ||
pwd | 显示目前的目录 | -p | 显示出确实的路径,而非使用连结 (link) 路径 |
mkdir | 创建一个新的目录 | -m | 配置文件的权限 |
-p | 将所需要的目录(包含上一级目录)递归创建 | ||
rmdir | 删除一个空的目录 | -p | 连同上一级(空的)目录也一起删除 |
cp | 复制文件或目录 | -f | 为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次 |
-i | 若目标已存在,在覆盖时会先询问动作的进行 | ||
-p | 连同文件的属性一起复制过去 | ||
-r | 递归持续复制 | ||
rm | 移除文件或目录 | -f | 忽略不存在的文件,不会出现警告信息 |
-i | 互动模式,在删除前会询问使用者是否动作 | ||
-r | 递归删除 | ||
rm-rf /* | 强制递归删除根目录下所有文件和文件夹(自杀) | ||
mv | 移动文件与目录, 或修改名称 |
-f | 如果目标文件已经存在,不会询问而直接覆盖 |
-i | 若目标文件已经存在,会询问是否覆盖 | ||
-u | 若目标文件已经存在,且 source 比较新,才会升级 |
可以使用 man [命令]
来查看各个命令的使用文档,如 :man cp
日期与时间命令
date - 系统时钟
命令 | 作用 | 显示结果 |
---|---|---|
date | 显示当前详细时间 | 2020年 08月 02日 星期日 13:35:48 CST |
date +%F | 只显示日期,使用格式符 %F |
2020-08-02 |
date +%T | 只显示时间,使用格式符 %T |
13:39:40 |
date +”%F %T” | 日期和时间一起显示,并在中间用空格分隔 | 2020-08-02 13:42:09 |
date +”%Y-%m-%d %H:%M:%S” | 以“年-月-日 时:分:秒”的格式显示日期和时间 | 2020-08-02 13:43:54 |
注意:使用 date --help
可以查看所有时间格式
- 备份文件时,给文件后缀加上时间
[root@localhost ~]# cp /etc/passwd /tmp/passwd.bak.$(date +%F)
passwd.bak.2020-08-02
hwclock - 硬件时钟
命令 | 作用 |
---|---|
hwclock | 显示硬件时钟 |
hwclock -w | 将系统时钟写入硬件时钟 |
hwclock -s | 将硬件时钟写入系统时钟 |
cal - 显示日历
显示当前月份的日历
[root@localhost ~]# cal
八月 2020
日 一 二 三 四 五 六
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
显示指定月份的日历
[root@localhost ~]# cal 9 2020
九月 2020
日 一 二 三 四 五 六
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
显示指定年的日历
[root@localhost ~]# cal 2020
2020
一月 二月 三月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 4 1 1 2 3 4 5 6 7
5 6 7 8 9 10 11 2 3 4 5 6 7 8 8 9 10 11 12 13 14
12 13 14 15 16 17 18 9 10 11 12 13 14 15 15 16 17 18 19 20 21
19 20 21 22 23 24 25 16 17 18 19 20 21 22 22 23 24 25 26 27 28
26 27 28 29 30 31 23 24 25 26 27 28 29 29 30 31
四月 五月 六月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 28 29 30
31
七月 八月 九月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
30 31
十月 十一月 十二月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31
stat - 查看时间戳
stat 命令用于查看文件的元数据
元数据用于描述文件的属性,主要包括文件大小、存储位置、访问权限以及时间戳等信息
stat命令所查看结果的最后三行称为文件的时间戳,时间戳包括三种:
时间戳类型 | 英文 | 作用 |
---|---|---|
最近访问时间 | access time | 查看、读取文件内容的时间 |
最近更改时间 | modify time | 文件内容改变的时间 |
最近改动时间 | change time | 文件元数据(属性)改变的时间 |
注意:文件更改时间改变,改动时间也会变化,反之则未必
查看 test1.txt 的时间戳:
[root@localhost ~]# stat test1.txt
文件:"test1.txt"
大小:22 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:33575011 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-08-01 20:14:54.344679080 +0800
最近更改:2020-08-01 20:14:52.700679189 +0800
最近改动:2020-08-01 20:14:52.700679189 +0800
创建时间:-
Shell 脚本编程基础
shell 脚本编程属于面向过程编程
**
面向过程编程:以指令为中心,数据服务于指令,一般根据业务逻辑从上到下编写代码
了解Shell 脚本
Shell 脚本语法
一个简单的 Shell 脚本 = 解释器路径 + 可执行命令 + 注释
#!/bin/bash
cat /etc/centos-release
echo 'hello world!' #输出 “hello world!”
注意:在脚本文件的第一行要求顶格写出解释器的路径,用于指明解释执行当前脚本的解释器程序文件
解释器:指系统中的 Shell,CentOS 默认使用的 Shell 是 bash,解释器可以将脚本中的代码转换为二进制,从而方便系统执行
执行 Shell 脚本
首先创建一个 Shell 脚本
[root@localhost ~]# vim hello.sh
#!/bin/bash
cat /etc/centos-release
echo 'hello world!'
通常有两种方式来执行 Shell 脚本:
使用
bash
命令执行 Shell 脚本[root@localhost ~]# bash hello.sh
CentOS Linux release 7.8.2003 (Core)
hello world!
通过
./
执行 Shell 脚本[root@localhost ~]# chmod a+x hello.sh
[root@localhost ~]# ./hello.sh
CentOS Linux release 7.8.2003 (Core)
hello world!
注意:默认创建的文件权限为 644 ,没有执行权限,所以要先为所有用户添加执行权限
调试 Shell 脚本
检查是否有语法错误
[root@localhost ~]# bash -n hello.sh
将执行的命令一起输出,方便检查错误 ```bash [root@localhost ~]# bash -x hello.sh
- cat /etc/centos-release CentOS Linux release 7.8.2003 (Core)
- echo ‘hello world!’ hello world! ```
Shell 变量
Shell 脚本中常见的变量类型
变量类型 | 作用 |
---|---|
用户自定义变量 | 由用户自己定义、修改和使用,作用域仅为当前Shell进程 |
环境变量 | 由系统定义,主要用于设置用户工作环境 |
位置变量 | 通过命令行给脚本程序传递参数 |
预定义变量 | Bash 中内置的有特殊功用的变量,不能直接修改,如变量$?可以返回命令执行后的状态 |