一、Linux 概述与环境搭建
1.1 Linux 内核与系统组成
Linux 系统由两部分组成:
- Linux 系统内核:提供系统最核心的功能,如调度 CPU、调度内存、调度文件系统、调度网络通讯、调度 IO 等。
- 系统级应用程序:出厂自带程序,可供用户快速上手操作系统,如文件管理器、任务管理器、图片查看、音乐播放等。
Linux 内核是免费开源的,任何人都可以下载内核源码并查看且修改。
可以通载 Linux 内核。
Linux 系统架构图(示意):
- 应用程序
- ↓
- Shell(命令解释器)
- ↓
- 操作系统内核
- ↓
- 硬件
复制代码
用户 → 使用 → 第三方程序 → 调用 → 内核 → 调度 → 硬件
用户 → 使用 → 系统程序 → 调用 → 内核 → 调度 → 硬件
1.2 Linux 发行版
任何人都可以封装 Linux,目前市面上有非常多的 Linux 发行版,常用的如下:
| 发行版 | 说明 |
|---|
| Linux Mint | 基于 Ubuntu,界面友好 |
| Ubuntu | 最流行的桌面 Linux |
| Arch Linux | 滚动更新,高度可定制 |
| CentOS | 企业级,RedHat 免费版 |
| RedHat | 商业企业级 |
| Debian | 稳定,Ubuntu 的上游 |
| Fedora | RedHat 的社区版 |
| openSUSE | 德国出品 |
| deepin | 国产,界面美观 |
| 中标麒麟 / 红旗 Linux | 国产政府用 |
1.3 VMware 虚拟机与快照
VMware 虚拟机(Workstation 和 Fusion)支持为虚拟机制作快照。
通过快照将当前虚拟机的状态保存下来,在以后可以通过快照恢复虚拟机到保存的状态。
类似于游戏存档,死亡后回档即可,故在进行任何测试之前拍摄快照很有必要,平时在系统稳定运行时拍摄快照也是很重要的。
快照时间线示意图:
- 快照1 快照3
- ↑ ↑
- ──●──●──●──●──●──→ 时间线
- ↓
- 当前状态
- ↓
- 快照2
复制代码
Windows 快速查看 VMware 网络连接: 使用 ncpa.cpl 指令快速查看 VMware 网络连接情况。
二、Linux 目录结构
Linux 的文件系统是一个独立且唯一的树形结构,以根目录 / 为起点。
2.1 常用目录说明
| 目录 | 重要性 | 说明 |
|---|
| /bin | 常用 | Binary 的缩写,存放最经常使用的命令(也在 /usr/bin、/usr/local/bin) |
| /sbin | | Super User 的意思,存放系统管理员使用的系统管理程序(也在 /usr/sbin、/usr/local/sbin) |
| /home | 常用 | 存放普通用户的主目录,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名 |
| /root | 常用 | 该目录为系统管理员(超级权限者)的用户主目录 |
| /lib | | 系统开机所需要最基本的动态连接共享库,作用类似于 Windows 里的 DLL 文件 |
| /lost+found | | 一般情况下是空的,当系统非法关机后,就存放了一些文件 |
| /etc | 常用 | 所有的系统管理所需要的配置文件和子目录,比如安装 mysql 数据库的 my.conf |
| /usr | 常用 | 用户的很多应用程序和文件都放在这个目录下,类似于 Windows 下的 program files |
| /boot | 常用 | 存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件 |
| /proc | 不能动 | 虚拟目录,是系统内存的映射,访问这个目录来获取系统信息 |
| /srv | 不能动 | service 缩写,该目录存放一些服务启动之后需要提取的数据 |
| /sys | 不能动 | Linux 2.6 内核的一个很大的变化,该目录下安装了 2.6 内核中新出现的文件系统 sysfs |
| /tmp | | 存放一些临时文件的目录 |
| /dev | | 类似于 Windows 的设备管理器,把所有的硬件用文件的形式存储 |
| /media | 常用 | Linux 系统会自动识别一些设备,如 U 盘、光驱等,识别后 Linux 会把识别的设备挂载到这个目录下 |
| /mnt | 常用 | 系统提供该目录是为了让用户临时挂载别的文件系统的,可以将外部的存储挂载在 /mnt/ 上 |
| /opt | | 给主机额外安装软件所存放的目录,如安装 ORACLE 数据库就可放到该目录下,默认为空 |
| /usr/local | 常用 | 给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序 |
| /var | 常用 | 存放着不断扩充的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件 |
| /selinux | | SELinux 是一种安全子系统,能控制程序只能访问特定文件,有三种工作模式,可以自行设置 |
三、基础命令
3.1 命令通用格式
无论是什么命令,在 Linux 中,命令有其通用的格式:
- command [-options] [parameter]
复制代码
- command:命令本身
- -options:[可选,非必填] 命令的一些选项,可以通过选项控制命令的行为细节
- parameter:[可选,非必填] 命令的参数,多数用于命令的指向目标等
3.2 帮助命令
man 命令
获取帮助信息。
- man [命令或配置文件] # 功能:获得帮助信息
- # 案例:查看 ls 命令的帮助信息
- man ls
复制代码
help 命令
- help 命令 # 功能:获得 shell 内置命令的帮助信息
复制代码
3.3 ls 命令
ls 命令格式:ls [-a -l -h] [Linux路径](选项加 R 代表递归,将子目录中的文件都罗列出来)
示例说明:
- ls -l /home/itheima:以列表的形式,显示 /home/itheima 目录内的内容
- cp -r test1 test2:cp 是命令本身,-r 是选项,test1 和 test2 是参数,意思是复制文件夹 test1 成为 test2
ls 选项说明:
| 选项 | 说明 |
|---|
| 无选项 | 以平铺形式,列出当前工作目录下的内容 |
| -a | all 的意思,即列出全部文件(包含隐藏的文件/文件夹)。以 . 开头的,表示是 Linux 系统的隐藏文件/文件夹(只要以 . 开头,就能自动隐藏),只有通过 -a 选项,才能看到这些隐藏的文件/文件夹 |
| -l | 以列表(竖向排列)的形式展示内容,并展示更多细节 |
| -h | 以易于阅读的形式,列出文件大小,如 K、M、G。-h 选项必须要搭配 -l 一起使用 |
参数作用: 可以指定要查看的文件夹(目录)的内容,如果不给定参数,就查看当前工作目录的内容。
命令选项组合使用: 命令的选项是可以组合使用的,比如 ls -lah,等同于 ls -a -l -h。
3.4 cd 命令 / pwd 命令
cd 命令
cd 来自英文:Change Directory
- 没有选项,只有参数,表示目标路径
- 使用参数,切换到指定路径
- 不使用参数,切换工作目录到当前用户的 HOME
特殊路径符:
| 符号 | 含义 |
|---|
| . | 表示当前目录,如 cd ./Desktop 表示切换到当前目录下的 Desktop 目录内,和 cd Desktop 效果一致 |
| .. | 表示上一级目录,如 cd .. 即可切换到上一级目录,cd ../.. 切换到上二级的目录 |
| ~ | 表示 HOME 目录,如 cd ~ 即可切换到 HOME 目录或 cd ~/Desktop,切换到 HOME 内的 Desktop 目录 |
pwd 命令
pwd 来自英文:Print Work Directory
- 无选项,无参数,直接输入 pwd 即可
- 作用是:输出当前所在的工作目录
3.5 绝对路径和相对路径
- 绝对路径:以根目录为起点,描述路径的一种写法,路径描述以 / 开头
- 相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以 / 开头
3.6 HOME 目录
Linux 系统的命令行终端,在启动的时候,默认会加载:
- 当前登录用户的 HOME 目录作为当前工作目录,所以 ls 命令列出的是 HOME 目录的内容
- HOME 目录:每个 Linux 操作用户在 Linux 系统的个人账户目录,路径在:/home/用户名
3.7 less 命令
less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
less 操作键:
| 操作 | 功能说明 |
|---|
| 空白键 | 向下翻动一页 |
| [pagedown] | 向下翻动一页 |
| [pageup] | 向上翻动一页 |
| /字串 | 向下搜寻「字串」的功能;n:向下查找;N:向上查找 |
| ?字串 | 向上搜寻「字串」的功能;n:向下查找;N:向上查找 |
| q | 离开 less 这个程序 |
3.8 mkdir 命令
通过 mkdir 命令可以创建新的目录(文件夹)。mkdir 来自英文:Make Directory
- 参数必填,表示 Linux 路径,即要创建的文件夹的路径,相对路径或绝对路径均可
- -p 选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录
示例:
- # 错误示例:会报错,因为上级目录 itcast 和 good 并不存在
- mkdir itcast/good/666
- # 正确示例:使用 -p 选项,将一整个链条都创建完成
- mkdir -p itcast/good/666
- cd itcast/good/666
- pwd
- # 输出:/home/itheima/itcast/good/666
复制代码
3.9 rmdir 命令
5. rmdir:删除空目录
- rmdir [OPTION]... DIRECTORY...
复制代码
rmdir 只能用于删除空目录。如果目录非空,使用该命令会提示错误。
3.10 touch 命令
6. touch:创建空文件
- touch [OPTION]... FILE...
复制代码
touch 命令用于创建一个或多个空文件。touch test.txt 会在当前目录下创建一个名为 test.txt 的空文件。
3.11 cat 命令
- cat 同样没有选项,只有必填参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用
示例:
- [itheima@bogon ~]$ cat test.txt
- itheima is a brand of itcast.
复制代码
3.12 more 命令
more 命令同样可以查看文件内容,同 cat 不同的是:
- cat 是直接将内容全部显示出来
- more 支持翻页,如果文件内容过多,可以一页一页的展示
- 同样没有选项,只有必填参数,参数表示:被查看的文件路径
- 按 q 退出
3.13 cp 命令
cp 命令可以用于复制文件\文件夹,cp 命令来自英文单词:copy
- -r 选项,可选,用于复制文件夹使用,表示递归
- 参数1,Linux 路径,表示被复制的文件或文件夹
- 参数2,Linux 路径,表示要复制去的地方
3.14 mv 命令
mv 命令可以用于移动文件\文件夹,mv 命令来自英文单词:move
- 参数1,Linux 路径,表示被移动的文件或文件夹
- 参数2,Linux 路径,表示要移动去的地方,如果目标不存在,则进行改名,确保目标存在
3.15 rm 命令
rm 命令可用于删除文件、文件夹,rm 命令来自英文单词:remove
- rm [-r -f] 参数1 参数2 ...... 参数N
复制代码
- 同 cp 命令一样,-r 选项用于删除文件夹
- -f 表示 force,强制删除(不会弹出提示确认信息)
- 普通用户删除内容不会弹出提示,只有 root 管理员用户删除内容会有提示
- 所以一般普通用户用不到 -f 选项
- 参数1、参数2、……、参数N 表示要删除的文件或文件夹路径,按照空格隔开
rm 通配符: rm 命令支持通配符 *,用来做模糊匹配:
- test*,表示匹配任何以 test 开头的内容
- *test,表示匹配任何以 test 结尾的内容
- *test*,表示匹配任何包含 test 的内容
注意: su root 命令进入管理员模式,exit 命令退回普通用户模式。
3.16 which 命令 / find 命令 / locate 命令
which 命令
通过 which 命令,查看所使用的一系列命令的程序文件存放在哪里。
find 命令
在 Linux 系统中,可以通过 find 命令去搜索指定的文件。
按文件名查找:
- find 起始路径 -name "被查找文件名"
- # 被查找文件名,支持使用通配符 * 来做模糊查询
复制代码
按文件大小查找:
- find 起始路径 -size +|-n[kMG]
- # +、- 表示大于和小于
- # n 表示大小数字
- # kMG 表示大小单位,k(小写字母)表示 kb,M 表示 MB,G 表示 GB
复制代码
示例:
- find / -size -10k # 查找小于 10KB 的文件
- find / -size +100M # 查找大于 100MB 的文件
- find / -size +1G # 查找大于 1GB 的文件
复制代码
find 常用参数说明:
| 参数 | 说明 |
|---|
| -name pattern | 按文件名查找,支持通配符 * 和 ? |
| -type type | 按文件类型查找,f(普通文件)、d(目录)、l(符号链接)等 |
| -size [+-]size[cwbkMG] | 按文件大小查找 |
| -mtime days | 按修改时间查找,支持 + 或 - |
| -user username | 按文件所有者查找 |
| -group groupname | 按文件所属组查找 |
| -amin n | 查找在 n 分钟内被访问过的文件 |
| -atime n | 查找在 n×24 小时内被访问过的文件 |
| -mmin n | 查找在 n 分钟内被修改过的文件 |
| -mtime n | 查找在 n×24 小时内被修改过的文件 |
locate 命令
locate 指令可以快速定位文件路径。locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。locate 指令无需遍历整个文件系统,查询速度较快。
特别说明: 由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。
3.17 grep 命令
可以通过 grep 命令,从文件中通过关键字过滤文件行。
- 选项 -n,可选,表示在结果中显示匹配的行的行号
- 参数,关键字,必填,表示过滤的关键字,带有空格或其它特殊符号,建议使用 " " 将关键字包围起来
- 参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口
3.18 wc 命令
可以通过 wc 命令统计文件的行数、单词数量等。
| 选项 | 说明 |
|---|
| -c | 统计 bytes 数量 |
| -m | 统计字符数量 |
| -l | 统计行数 |
| -w | 统计单词数量 |
3.19 管道符 |
管道符的含义是:将管道符左边命令的结果,作为右边命令的输入。
- cat test.txt | grep "关键字"
- ps -ef | grep tail
复制代码
3.20 echo 命令
可以使用 echo 命令在命令行内输出指定内容。
- 无需选项,只有一个参数,表示要输出的内容,复杂内容可以用 " " 包围
3.21 head 命令
(4) head:从文件头开始查看内容
- head [OPTION]... [FILE]...
复制代码
head 命令从文件头开始查看内容,使用 -n 行数 可以指定查看的行数。
3.22 tail 命令
使用 tail 命令,可以查看文件尾部内容,跟踪文件的最新更改:
- 参数,Linux 路径,表示被跟踪的文件路径
- 选项,-f,表示持续跟踪
- 选项,-num,表示,查看尾部多少行,不填默认 10 行
3.23 反引号与重定向符号
反引号 `
通过将命令用反引号(通常也称之为飘号)包围,被包围的内容,会被作为命令执行,而非普通字符。
- [itheima@bogon ~]$ echo `pwd`
- /home/itheima
复制代码
重定向符号
- >,将左侧命令的结果,覆盖写入到符号右侧指定的文件中
- >>,将左侧命令的结果,追加写入到符号右侧指定的文件中
- echo "hello" > test.txt # 覆盖写入
- echo "world" >> test.txt # 追加写入
复制代码
3.24 test 命令
- test EXPRESSION
- # 或
- [ EXPRESSION ] # 注意方括号内必须有空格
复制代码
文件测试操作:
| 操作符 | 描述 | 示例 |
|---|
| -e | 文件是否存在 | [ -e file.txt ] |
| -f | 是普通文件 | [ -f /path/to/file ] |
| -d | 是目录 | [ -d /path/to/dir ] |
| -r | 可读 | [ -r file.txt ] |
| -w | 可写 | [ -w file.txt ] |
| -x | 可执行 | [ -x script.sh ] |
| -s | 文件大小 > 0 | [ -s logfile ] |
| -L | 是符号链接 | [ -L symlink ] |
3.25 sed 命令
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
- sed [-hnV][-e<script>][-f<script文件>][文本文件]
复制代码
参数说明: