Appearance
Linux 学习笔记
1. 硬件
1.1. 各硬件在 Linux 中的文件名
| 装置 | 装置在 Linux 内的文件名 |
|---|---|
| SCSI/SATA/USB 硬盘 | /dev/sd[a-p] |
| USB | /dev/sd[a-p] |
| Virt I/O | /dev/vd[a-p] |
| 软盘驱动器 | /dev/fd[0-7] |
| 打印机 | /dev/lp[0-2](25 针打印机) |
| 打印机 | /dev/usb/lp[0-15](USB) |
| 鼠标 | /dev/input/mouse[0-15](通用) |
| 鼠标 | /dev/psaux(PS/2) |
| 鼠标 | /dev/mouse(当前鼠标) |
| CDROM/DVDROM | /dev/scd[0-1](通用) |
| CDROM/DVDROM | /dev/sr[0-1](通用,CentOS 较常见) |
| CDROM/DVDROM | /dev/cdrom(当前 CDROM) |
| 磁带 | /dev/ht0(IDE 界面) |
| 磁带 | /dev/st0(SATA/SCSI 界面) |
| 磁带 | /dev/tape(当前磁带) |
| IDE 硬盘机 | /dev/hd[a-d](旧式系统才有) |
1.2. CentOS 7 下载地址
阿里云镜像:http://mirrors.aliyun.com/centos/7/isos/x86_64/
1.3. 文件系统
| 文件系统 | 说明 |
|---|---|
| ext2/ext3/ext4 | Linux 早期适用的文件系统类型。由于 ext3/ext4 文件系统多了日志的记录,对于系统的复原比较快速。不过由于磁盘容量越来越大,ext 家族似乎有点挡不住了,所以除非你有特殊的设定需求,否则近来比较少用 ext4 项目了 |
| swap | 就是磁盘仿真成为内存,由于 swap 并不会使用到目录树的挂载,所以用 swap 就不需要指定挂载点了 |
| BIOS Boot | 就是 GPT 分区表可能会使用到的项目,若你使用 MBR 分区,那就不需要这个项目了 |
| xfs | 这个是目前 CentOS 预设的文件系统,最早是由大型服务器所开发出来的。他对大容量的磁盘管理非常好,而且格式化的时候速度相当快,很适合当今动不动就是好几个 TB 的磁盘环境 |
| vfat | 同时被 Linux 与 Windows 所支持的文件系统类型。如果你的主机磁盘内同时存在 Windows 与 Linux 操作系统,为了数据的交换,确实可以建置一个 vfat 的文件系统 |
1.4. 标准分区与 LVM 分区
| 分区 | 说明 |
|---|---|
| 标准分区 | 就是分区槽,类似 /dev/vda1 |
| LVM | 这是一种可以弹性增加或削减的文件系统容量的装置设定 |
| LVM 紧张供应 | 这个其实是 LVM 的进阶版,与传统 LVM 直接分配固定的容量不同,这个 “LVM 紧张供应” 可以让你在使用多少容量时只分配多少容量给你 |
关于 Linux 分区的介绍还可以参考这篇文章:Linux 分区指南。
2. Linux 安装
2.1. 强制使用 GPT 分区表
- 将光标移动到 “Install CentOS 7”
- 按下 “Tab” 键
- 输入 “inst.gpt”

2.2. 设置键盘布局切换选项


2.3. 选择安装 GUI


2.4. 硬盘分区
2.4.1. 设置手动配置分区


2.4.2. 添加 BIOS Boot 分区


2.4.3. 添加 /boot 分区

2.4.4. 添加 / 分区


2.4.5. 设置 Volume Group
LVM 预设会取一个名为 centos 的 LVM 装置,此项可以不用修改。但是在这里我们将其修改为固定容量大小(30G)。



2.4.6. 添加 /home 分区


2.4.7. 添加 swap 分区

swap 是当物理内存容量不够用时,系统可以拿这个部分来存放内存中较少被使用的程序项目。以前都建议 swap 需要内存的 2 倍容量。不过现在内存都足够大了,虽然最好还是要有 swap 分区,不过也不需要太大了,大约 1~2 G 就行了。实际上,如果当你的系统都用到 swap 分区了,说明你物理内存还是太少了。

2.4.8. 完成硬盘分区
最后点击左上角的 “完成” 按钮,系统会弹出一个 “更改摘要” 的确认页面,点击 “接受更改” 即可。
2.5. 配置网络



2.6. 设置 ROOT 密码 & 创建默认用户
一般不建议直接使用 ROOT 账户,所以还是需要建一个日常登入系统的管理员账号(允许使用这个账号的密码来切换身份为 root,而不用知道 root 的密码)。

3. 首次登录 Linux 系统
3.1. X window 与文本模式的切换
Linux 预设的情况下会提供 Terminal 来让使用者登入,切换的方式为:Ctrl + Alt + F1~F6 组合键。F1~F6 的对应的终端命名分别对应 tty1~tty6。
如果系统默认是启动图形界面的,那么这个 X 窗口将会出现在 tty1 界面中。如果你的 Linux 预设使用纯文本界面,那么 tty1~tty6 就会被文字界面占用。
Note:当开机完成后,默认系统只会提供给你一个 tty 而已,因此无论是文字界面还是图形界面,都是会出现在 tty1。tty2~tty6 其实一开始是不存在的,当你要切换时,系统才会产生出额外的 tty2, tty3……
若在纯文本环境中启动 X 窗口,那么图形界面就会出现在当时的那个 tty 上面。举例来说,你在 tty3 登入系统,然后输入 startx 启动个人的图形界面,那么这个图形界面就会产生在 tty3 上面。
不过 startx 这个指令并非万灵丹,你要让 startx 生效至少需要底下这几个事情的配合:
- 并没有其他的 X window 被启用;
- 你必须要已经安装了 X Window system,并且 X server 是能够顺利启动的;
- 你最好要有窗口管理员,例如 GNOME/KDE 或者是阳春的 TWM 等;
3.2. 终端界面
在终端界面显示的 ~ 符号代表的是 “用户的家目录”,是一个变量。例如,root 的家目录在 /root,所以 ~ 就代表 /root,而 manager 的家目录是 /home/manager。

另外对于提示字符,在 Linux 中,默认 root 的提示字符是 #,而一般身份用户的提示字符为 $。

注销 Linux(离开系统)的命令:exit。
Note
- 在 Linux 系统中,英文大小写字母是不一样的。举例来说,
cd与CD并不同;- 终端界面(tty)默认在默认情况下是不支持中文编码输出的,所以中文显示乱码的问题属于正常现象;
- 通过
su -指令切换到 root 账户,或者通过sudo指令来以管理员身份执行某个指令;clear清空当前屏幕;
3.2.1. Shell
Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器)。
Shell 的主要版本有:

我们常用(默认)的就是 bash(bourne again shell)。
使用 ps 命令观察正在执行的 shell。

3.2.2. Shell 环境变量
在 Windows 下有用户的环境变量,系统的环境变量。在 Linux 一样也是有的。
Shell 变量大致可以分为三类:
- 内部变量:由系统提供,用户只能使用不能修改。
- ?
- GROUPS
- 环境变量:这些变量决定了用户工作的环境,它们不需要用户去定义,可以直接在 shell 中使用,其中某些变量用户可以修改。
- 用户变量:由用户建立和修改,在 shell 脚本编写中会经常用到。
- 变量赋值(定义变量)
varName=Valueexport varName=Value
- 引用变量
$varName
- 变量赋值(定义变量)
Shell 变量的作用域:
- 局部变量的作用范围仅仅限制在其命令行所在的 Shell 或 Shell 脚本文件中;
- 全局变量的作用范围则包括本 Shell 进程及其所有子进程;
局部变量与全局变量互换:
- 可以使用
export内置命令将局部变量设置为全局变量; - 可以使用
export内置命令将全局变量设置为局部变量;
export 命令:
- 显示当前 Shell 可见的全局变量:
export [-p] - 定义变量值的同时声明为全局变量:
export <变量名1=值1> [<变量名2=值2> ...] - 声明已经赋值的某个(些)局部变量为全局变量:
export <变量名1> [<变量名2> ...] - 声明已经赋值的某个(些)全局变量为局部变量:
export -n <变量名1> [<变量名2> ...]
Shell 环境变量:
- 环境变量定义 Shell 的运行环境,保证 Shell 命令的正确执行;
- Shell 用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名等;
- 所有环境变量都是全局变量(即可以传递给 Shell 的子进程),并可以由用户重新设置;

Shell 变量:查询、显示和取消:
- 显示当前已经定义的所有变量
- 所有环境变量:
env - 所有变量和函数(包括环境变量):
set
- 所有环境变量:
- 显示某(些)个变量的值:
echo $NAME1 [$NAME2 ……] - 取消变量的声明或赋值:
unset <NAME>
3.2.3. 快捷键
| 快捷键 | 说明 |
|---|---|
Ctrl + Alt + F1~F6 | 在 tty1~tty6 几个终端之间切换 |
Tab | 命令补全、文件补齐、参数补齐;连按两次则列出所有可能补齐的候选项 |
Ctrl + C | 中断目前正在运行的程序 |
Ctrl + D | 通常代表着 “键盘输入结束(EndOfFile、EOF 或 End Of Input)” 的意思,在命令行输入状态下相当于直接输入 exit |
Shift + PageUp、Shift + PageDown | 往前/后翻页 |
3.2.4. 通配符
*:匹配任何字符和任何数目的字符?:匹配单一数目的任何字符[ ]:匹配[ ]之内的任意一个字符[! ]:匹配除了[! ]之外的任意一个字符,!表示非的意思
3.3. VI 编辑器
相信没有用过 Linux 的同学在看一些段子的时候都会看到过两个编辑器:
- vim
- emacs
下面我们学习如何简单使用 vi。vi 是 “Visual interface” 的简称,它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。
- vi 可以看做成我们 Windows 下的记事本
- vim 即 Vi IMproved,vi 克隆版本之一
使用 Vi 来编辑文件:

Vi 有三种模式:

3.3.1. 普通模式
G用于直接跳转到文件尾ZZ用于存盘退出 ViZQ用于不存盘退出 Vi/和?用于查找字符串n继续查找下一个yy复制一行p粘帖在下一行,P粘贴在前一行dd删除一行文本x删除光标所在的字符u取消上一次编辑操作(undo)
3.3.2. 插入模式
在 Normal 模式下输入插入命令 i、a、o 进入 insert 模式。用户输入的任何字符都被 vim 当做文件内容保存起来,并将其显示在屏幕上。
在文本输入过程中,若想回到 Normal 模式下,按 Esc 键即可。
3.3.3. 命令行模式
Normal 模式下,用户按冒号 : 即可进入 Command 模式,此时 vim 会在显示窗口的最后一行 (屏幕的最后一行) 显示一个 : 作为 Command 模式的提示符,等待输入命令。
:w保存当前编辑文件,但并不退出:wnewfile 存为另外一个名为 “newfile” 的文件:wq用于存盘退出 Vi:q!用于不存盘退出 Vi:q用于直接退出 Vi(未做修改)
设置 Vi 环境:
:set autoindent缩进,e常用于程序的编写:set noautoindent取消缩进:set number在编辑文件时显示行号:set nonumber不显示行号:set tabstop=value 设置显示制表符的空格字符个数:set显示设置的所有选项:set all显示所有可以设置的选项
3.3.4. Vi 练习
在用户主目录下,执行 vi 程序,编辑文件
install.log,移动光标到第 10 行,第五个字符,按大写字母 G,达到文件末尾,不存盘退出;

在用户主目录下,执行 vi 程序,编辑文件
install.log,用/命令查找字符串 sudo,复制包含字符串 sudo 的行;
在用户主目录下,执行 vi 程序,编辑文件
install.log,进入命令模式,设置显示行号,用?命令查找字符串 openssh,用命令 n 查找下一个

3.4. man page 与 info page
3.4.1. --help 指令参数
通过 --help 就可以很快速的取得你所需要的选项、参数说明。
3.4.2. man page
例如 “man date”。

Note:进入
man指令后,可以按空格键往下翻页,或者可以按[Q]键来离开 man 的环境。
以 man date 为例。在输入内容的第一行,你可以看到 DATE(1),DATE 是我们知道的指令名称,那么 (1) 代表什么呢。它代表的是 “一般用户可使用的指令”。常见几个数字的意义是:
| 代号 | 代表内容 |
|---|---|
| 1 | 用户在 shell 环境中可以操作的指令或可执行文件 |
| 2 | 系统核心可呼叫的函数与工具等 |
| 3 | 一些常用的函数(function)与函数库(library),大部分为 C 的函数库(libc) |
| 4 | 装置文件的说明,通常在 /dev 下的文件 |
| 5 | 配置文件或者是某些文件的格式 |
| 6 | 游戏(games) |
| 7 | 惯例与协议等,例如 Linux 文件系统、网络协议、ASCII code 等等的说明 |
| 8 | 系统管理员可用的管理指令 |
| 9 | 跟 kernel 有关的文件 |
Note:上述表格内容可以使用
man man来取得更详细的说明。
基本上 man page 的内容大致分成底下几个部分:
| 代号 | 内容说明 |
|---|---|
| NAME | 简短的指令、数据说明 |
| SYNOPSIS | 简短的指令下达语法(syntax)简介 |
| DESCRIPTION | 较为完整的说明,这部分内容最好仔细看看 |
| OPTIONS | 针对 SYNOPSIS 部分中,有列举的所有可用的选项说明 |
| COMMANDS | 当这个程序(软件)在执行的时候,可以在此程序(软件)中下达的指令 |
| FILES | 这个程序或数据所使用或参考或连结到的某些文件 |
| SEE ALSO | 可以参考的,跟这个指令或数据有关的其它说明 |
| EXAMPLE | 一些可以参考的范例 |
一些在 man page 里面比较常用的按键:
| 按键 | 说明 |
|---|---|
| [Space] | 向下翻页 |
| [Page Down] | 向下翻页 |
| [Page Up] | 向上翻页 |
| [Home] | 转到第一页 |
| [End] | 转到最后一页 |
| /text | 向下搜索 “text” 这个字符串 |
| ?text | 向上搜索 “text” 这个字符串 |
| n, N | 利用 / 或 ? 来搜索字符串时,可以用 n 来继续下一个搜索(不论是 / 或者 ?),可以利用 N 来进行反向搜索 |
| q | 结束这次的 man page |
那么 man page 相关的文件放在哪里呢,不同的 distribution 通常可能有点差异性,不过,通常是放在 /usr/share/man 这个目录里头,然而,我们可以通过修改它的 man page 搜寻路径来改善这个目录的问题。修改 /etc/man_db.conf(有的版本为 man.conf 或 manpath.conf 或 man.config 等)就行了。更多关于 man 的信息可以使用 man man 来查询。
3.4.3. 查看特定指令/文件的 man page
有时候你想查某个指令的 man page,但是你只记得部分关键词,这时候可以通过 man 命令的 “-f” 或 “-k” 参数(在使用这个两个参数之前需要先执行过 mandb 命令,在旧版 linux 里面对应的是 makewhatis 命令,建立过 whatis 数据库才行)来查询所有与该关键字有关的说明文件。例如:man -f man、man -k man(-f 参数只查询以该关键字开头的指令/文件,-k 参数则查询所有内容里面有包含该关键字的指令/文件。man -f 等同于 whatis,man -k 等同于 apropos)
3.4.4. info page
| 按键 | 说明 |
|---|---|
| [Spacebar] / [Page Down] | 向下翻页 |
| [Page Up] | 向上翻页 |
| [Tab] | 在链接之间移动,有链接的地方,通常会以 * 显示 |
| [Enter] | 当光标在链接上面时,按下 Enter 可以进入该链接 |
| b | 移动光标到当前 node 的起始处 |
| n | 在当前文档,切换到下一个 node |
| p | 在当前文档,切换到上一个 node |
| [ | 在当前层级,切换到上一个 node |
| ] | 在当前层级,切换到下一个 node |
| u | 移动到上一层 node |
| t | 切换到当前文档的顶层 node |
| s, / | 在 info page 当中进行搜寻 |
| h, ? | 显示求助选单 |
| q | 结束这次的 info page |
不过,如果查询的指令要支持 info page 功能的话,那么必须得用 info page 的格式来写在线求助文档才行。支持 info 指令的文件默认存放在 /usr/share/info 目录,所以非以 info page 格式写成的说明文件(也就是 man page),虽然也能够使用 info 来显示,不过其结果将会跟 man 相同。
3.4.5. 其它说明文档(documents)
一般指令或软件的说明文档的存放在 /usr/share/doc 下面。另外很多原版软件释出的时候,都会有一些安装须知、预计工作事项、未来工作规划还有包括可安装的程序等,这些文件也都放置在 /usr/share/doc 当中。并且 /usr/share/doc 这个目录下面的数据主要是以套件(packages)为主的。
3.5. 关机的正确方法
- 观察主机的使用状态
- 通过
who指令查看目前都有谁在使用系统 netstat -a指令查看网络的联机状态ps -aux查看目前正在运行应用程序
- 通过
- 通知其它用户系统即将关机
shutdown关机reboot,halt,poweroff重启
4. Linux 目录与文件
4.1. 基本目录结构
Linux 基本的目录结构:

Linux 文件系统是一个目录树的结构,文件系统结构从一个根目录开始,根目录下可以有任意多个文件和子目录,子目录中又可以有任意多个文件和子目录。
bin:存放二进制可执行文件(ls、cat、mkdir 等);boot:存放用于系统引导时使用的各种文件;dev:用于存放设备文件;etc:存放系统配置文件;home:存放所有用户文件的根目录;lib:存放跟文件系统中的程序运行所需要的共享库及内核模块;mnt:系统管理员安装临时文件系统的安装点;opt:额外安装的可选应用程序包所放置的位置;proc:虚拟文件系统,存放当前内存的映射;root:超级用户目录;sbin:存放二进制可执行文件,只有 root 才能访问;tmp:用于存放各种临时文件;usr:用于存放系统应用程序,比较重要的目录/usr/local本地管理员软件安装目录;var:用于存放运行时需要改变数据的文件;
Note:默认情况下,所有系统上的账号与一般身份使用者(包括 root 账户)的相关信息都是记录在
/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。所有的组名都记录在/etc/group文件内。
4.1.1. 用户主目录
Linux 是多用户的网络系统。所以,我们可以在 Linux 下创建多个用户,每个用户都会有自己专属的空间。
所以,在创建用户时,系统管理员会给每个用户建立一个主目录,通常在 /home 目录下
- 比如:用户 osmond 的主目录为:
/home/osmond - 用户对自己主目录的文件拥有所有权,可以在自己的主目录下进行相关操作
4.2. 文件属性
以 ls -al 为例说明:


- 第一列代表这个文件的类型与权限
- 第一个字符代表这个文件的文件类型 -【d】:目录 -【-】:文件 -【l】:连结档(link file) -【b】:可供存储的接口设备 -【c】:串行端口设备,例如:键盘、鼠标 -【s】:套接字 -【p】:命名管道
- 除以上文件类型外,还有硬链接、软连接:
- 硬链接:与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块;
- 软链接:保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径(简单地理解为 Windows 中常见的快捷方式);
- 第二列表示有多少档名连结到此节点(i-node)
- 第三列表示这个文件/目录的拥有者
- 第四列表示这个文件的所属群组
- 第五列表示这个文件的容量大小,默认单位为 bytes
- 第六列表示这个文件的建档日期或者是最近的修改日期
- 第七列为这个文件的名称
Note:如果某个文件的名称之前多了一个 “.”,那么代表这个文件为隐藏文件。
4.3. 修改文件属性与权限
几个常用的命令:
- chgrp:改变文件所属群组
- chown:改变文件拥有者
- chmod:改变文件的权限,SUID,SGID,SBIT 等特性
4.3.1. chmod
权限设定的方法有两种,分别可以使用数字或者是符号来进行权限的变更。
使用数字类型改变文件权限
r、w、x 对应的数值分别是 4、2、1,以 “-rwxrwx---” 权限为例: owner = rwx = 4 + 2 + 1 = 7 group = rwx = 4 + 2 + 1 = 7 others = rwx = 0 + 0 + 0 = 0 所以 “-rwxrwx---” 对应的数字类型权限就是 “770” 啦。
使用符号类型改变文件权限
u、g、o 分别代表三种身份 user、group、others,a 代表 all 即所有人。 +、-、= 分别表示添加、去除、设定。 下面以 “-rwxr-xr-x” 为例: user = rwx group = r-x others = r-x 所以 “-rwxr-xr-x” 对应的指令就是
chmod u=rwx,go=rx TAR_FILENAME。
4.4. 目录与文件的权限意义
4.4.1. 文件权限的含义
对于文件的 r、w、x 权限来说,主要都是针对文件的内容而言。
- r(read):可读取此文件的实际内容,如读取文本文件的文字内容等
- w(write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件)
- x(execute):该文件具有可以被系统执行的权限
其中需要注意的是 x 的权限,因为在 Windows 系统下面判断一个文件是否可以执行是由文件扩展名(例如:.exe、.bat、.com)来决定的。但是在 Linux 系统下面,文件是否能被执行,是由 x 权限来决定的,跟文件的名称没有绝对关系。
4.4.2. 目录权限的含义
目录主要的内容在于记录文件名列表。
- r(read contents in directory):表示具有查看目录结构列表的权限
- w(modify contents of directory):表示具有异动该目录结构列表的权限
- 建立新的文件与目录
- 删除已经存在的文件与目录(不论该文件的权限为何)
- 将已存在的文件或目录进行更名
- 搬移该目录内的文件、目录位置
- x(access directory):表示用户能否进入该目录成为工作目录,所谓的工作目录(work directory)就是你目前所在的目录。比如,当你登入 Linux 时,你所在的家目录就是你当下的工作目录
这里举个例子进一步对目录的 r 和 x 权限进行说明:
乍看之下好像只需要具有 r 权限就表示可以进入该目录,但其实这是错误的。能不能进入某一个目录,只与该目录的 x 权限有关。另外如果只具有 x 权限但是没有 r 权限,那么该用户实际上依旧是可以进入该目录的,但是无法通过 Tab 自动补齐文件名,只能通过自己输入完整的文件名称对该文件进行操作。