鸟哥的Linux私房菜
ch2 主机规划与磁盘分区
- MBR(MS-DOS) 与 GPT 磁盘分区表 p70
- 主要分区、扩展分区、逻辑分区 p72
- BIOS 与 UEFI;BIOS与启动引导程序的关系 p76
ch4 首次登陆与在线求助
- man 命令 p135
- nano 简单的文本编辑器命令 p142
ch5 Linux 文件权限与目录配置
- 用户和用户组概念 p150
- chgrp 修改文件所属于的用户组, chown 修改文件拥有者, chmod 修改文件权限 p151,p156
- 文件与目录的 rwx 权限意义 p159
ch6 Linux 文件与目录管理
- mkdir, rmdir p177
- 环境变量 PATH p179
- cp(-a 和 -p 参数), rm, mv p183
- cat p187
- touch, mtime, ctime, atime p192
- 文件默认权限 umask p195
- 文件特殊权限 SUID, SGID, SBIT p198
- 文件查找 whereis, locate, find p202
ch7 Linux 磁盘与文件系统管理
- 文件系统,文件的 inode 与数据区块,目录的 inode 与数据区块 p211,p217
- df, du p225
- 硬链接与符号链接(本质:建立链接文件) p227
- 当系统里新增一块物理磁盘时,需要: p231
- 对磁盘进行划分,以建立可用的硬盘分区
- 对该硬盘分区进行格式化,以建立可用的文件系统
- 可以对刚建立好的文件系统进行检验
- 在 Linux 系统上,需要建立挂载点(即目录),将它挂载到文件系统上。
- lsblk, blkid, parted 观察磁盘分区状态 gdisk,fdisk 操作磁盘分区 p232
- mount p243
- 设置启动挂载,/etc/fstab 文件 p248
- 特殊设备 loop 挂载,挂载镜像 iso 文件,制作 loop 设备文件挂载 p251
- parted 命令 p256
ch8 文件与文件系统的压缩
- tar 打包命令 p266
- mkisofs 建立镜像文件 p277
- dd, cpio p282
ch9 vim 程序编辑器
ch10 bash
- shell、bash p311
- 变量的使用与设置 echo、变量设置规则、unset p318
- env 观察环境变量 set 观察所有变量 p323
- $$ 查看本 shell 的 PID,¥?查看上个执行命令的返回值
- export 将自定义变量转变为环境变量,供子进程使用 p325
- read 读取来自键盘输入的变量 declare,typeset 声明变量的类型 p328
- 变量内容的删除、取代与替换 330
- alias unalias 命令别名 history 历史命令 p334
- 通配符与特殊符号 * ? [] [-] [^] p344
- 数据流重定向 > >> < << p346
- 命令执行 ;、|| 与 && p348
- 管道命令 | p350
- 选取命令 cut grep p351
- cut 用来将一行的数据切分,让一行的某部分数据出现
- grep 用来解析每行信息,如果该行存在想要的关键字,则将改行取出
- 排序命令 sort wc uniq p353
- tee 同时将数据流分送到文件与屏幕 p354
- tr:删除一段信息当中的文字,或文字替换 col:将 tab 换成对等的空格键 join:将两个文件中有相同数据的行加在一起显示 paste:将两行粘贴在一起,以 tab 隔开 expand:将 tab 转换为空格键 p355
- split 将大文件以行数或文件大小进行划分 p357
- xargs 可以读入 stdin 的数据,并以空格符或换行符作为识别符,将 stdin 的数据分割成为参数 p358
- 关于 - 号:可以替代命令前的 stdin 或 stdout p359
ch11 正则表达式与文件格式化处理
- 行首与行尾字符 ^, $,空白行 ^$ p368
- grep 参数 -v 选中不匹配的行 p369
- 小数点 . 代表 一定有一个任意字符 的意思;* 代表 重复前一个字符 0 到无穷多次 的意思。 .* 代表零个或任意多个字符 p370
- 基础正则表达式字符集合 p372
- sed 本身是一个管道命令,可以分析标准输入,也可以直接将操作写入文件内。 sed 可以将数据进行 替换、删除、新增、选取特定行 等功能 p373
- 扩展正则表达式 egrep (grep -E) + ? | () ()+ p376
- 格式化打印 printf p377
- awk 主要处理每一行的字段内的数据,默认的字段分隔符为 “空格键” 或[Tab] 键; awk 可以处理后续接的文件,也可以处理前一个命令的标准输出 p379
- 在 awk 中,每一行的每个字段用 $1, $2 表示,$0 表示所有数据 p379
- 文件对比工具 diff 通常比较同一个文件新旧版本差异,通常以行来比对 p382
- cmp 利用字节为单位来比对数据 p382
ch12 shell 脚本
- /bin/sh 默认链接到 dash, 而不是 bash p390
- 脚本文件的返回值 exit 0 p391
- :- 用来设置变量的默认值,如 filename=${x:-"filename"},如果 x 不为空就将 x 赋给 filename,否则就将 "filename" 赋给 filename p393
- $((计算式)) 用来进行数值计算 p393
- bc 显示小数点 p393
- source,sh script 和 ./script 执行脚本的区别(source 在父进程的 bash 中执行脚本,其他两种在子进程的 bash 中执行脚本)p394
- test 测试文件类型、文件权限、两文件之间的比较、整数之间的比较、字符串之间的比较 p395
- 在 bash 中使用 [] 作为判断符号(中括号两端要有空格符来分隔);中括号内每个组件都要有空格分隔;中括号内的变量最好以双引号括起来;中括号内的常数最好以单引号或双引号括起来。 p397-398
- 脚本的默认变量($0(脚本文件名), $1, $2, $3...), $#(参数个数), $@(代表【"$1""$2""$3"】), $*(代表【"$1c$2c$3c$4"】,其中 c 为分隔符,默认为空格) p399
- shift 参数变量偏移 p400
- if...then 判断式;多个条件的判断 [] && [] 或 [] || [] p401
if [ condition1 ] && [ condition2 ]; then
内容
fi
多重判断:
if [ condition1 ]; then
内容
elif [ condition2 ];then
内容
else
内容
fi
- netstat -tuln p403
- 网络端口的 Local Address:127.0.0.1 代表对本机开放,0.0.0.0 或 :: 代表对所有网络开放 p403
- case...esac 判断式 p405
case ${variable1} in
"string1")
...
;;
"string2")
...
;;
*) ## 注意这里不是 "*",该条件代表剩下的所有情况进入该段落
...
;;
esac
- 脚本中的 function(脚本中的 function 要定义在程序的最前面),function 中的内置变量 $1, $2, ... p406-407
function fname()
{
}
- while do done, until do done 不定循环 p408
while [ condition ]
do
内容
done
until [ condition ]
do
内容
done
- for...do...done 固定循环 p409
for tempvar in string1 string2 string3
do
内容
done
for tempvar in ${var1}
do
内容
done
- 1 到 100 的数字表示:seq 1 100 和 [1..100] p410
for tempvar in ${seq 1 100}
do
内容
done
- for...do...done 的数值处理
for (( 初始值;限制值;赋值运算))
do
程序段
done
- 随机数 ${RANDOM} 产生 0-32767 之间的随机数
- shell 脚本的跟踪与调试
ch13 Linux账号管理与ACL权限设置
- UID:用户ID,GID:用户组ID p418
- /etc/passwd 文件:管理用户,包含:账号名称、密码、UID、GID、家目录、默认使用的 shell 等 p419
- /etc/shadow 文件:管理用户的密码,包含:账号名称、密码、等内容 p421
- root 密码忘记,需进入单人维护模式改正 p423
- /etc/group 管理用户组,包含:组名、用户组密码、GID(用户组ID,即 /etc/passwd 第四个字段使用的GID对应的用户组名就是由这里对应)、此用户组支持的账号名称。 p423
- 初始用户组与有效用户组:/etc/passwd 第四栏的 GID 即初始用户组,当用户一登录系统,立刻就会拥有这个用户组的相关权限。有效用户组的作用通常是用在新建文件的拥有者上。 p424
- groups 有效与支持用户组的视察 p425
- newgrp 对用户的有效用户组的切换,想要切换的用户组必须是用户已经支持的用户组。(chgrp 是修改文件所属于的用户组)需要注意的是,这个命令是以另外一个 shell 来提供此功能,即输入 newgrp命令后,会进入新的 shell,使用完后需要退出。 p425
- useradd 新增用户 p426
- useradd 私有用户组机制(系统会建立一个与账号一样的用户组作为用户的初始用户组)、公共用户组机制(以 GROUP=100 作为新建账号的初始用户组,即每个账号都属于 users 这个用户组) p428
- passwd 设置账号密码 p430
usermod \[-gGalsuL] username
对用户账号数组微调。 -g 后面接初始用户组,修改 /etc/passwd 的第一栏;-G 后面接次要用户组,修改这个使用者能够支持的用户组,修改的是 /etc/group;-a 与 -G 合用,可以 增加次要用户组的支持 而非 设置次要用户组。 p433- userdel 删除用户账户 p434
- id 查询某人或自己相关的 UID/GID 等信息 p434
- finger 查看用户信息 p434
- chfn 修改一些用户信息 p435 chsh 修改用户 shell p436 这两个命令都让用户修改 /etc/passwd 文件。
- groupadd 新建一个用户组 p437
- groupmod 用户组相关参数的修改,如用户组名字,用户组的 GID 等 p437
- groupdel 删除用户组 p437
- ACL 权限设置:可以针对单一用户、单一文件或目录进行 rwx 权限设置 p440
- getfacl setfacl 用于ACL 权限设置 p441
- su 用户身份切换 注意 - 参数涉及可登录 shell 和 非登录 shell 的变量读取方法;一般切换到 root 用户:
su -
,若要完整的切换到新用户环境,使用:su - username
或su -l username
;若仅执行一次 root 命令,使用su - -c "命令串"
p446 - sudo 命令 p446
- 特殊的 shell:/sbin/nologin 该 shell 无法登录主机获取交互的 shell,但仍可以使用系统资源 p451
- PAM 模块:一套应用程序编程接口,提供一连串的认证机制。 p451
- 查询用户命令:w who last lastlog p457
- 用户对谈:write mesg wall p458
- mail 用户邮箱命令 p459
- pwck 检查 /etc/passwd 这个账号配置文件内等信息 pwconv 将 /etc/passwd 内的账号与密码移动到 /etc/shadow 中 p460
ch14 磁盘配额(Quota)与高级文件系统管理
- 磁盘配额(Quota):限制某一用户组、用户、目录的最大磁盘配额 p466
- 软件磁盘阵列(software RAID) p475
- 软件磁盘阵列 mdadm p479
- 逻辑卷管理器 LVM(物理卷 PV,卷组 PE,物理扩展块 VG,逻辑卷 LV) p485
ch15 计划任务
- at 仅执行一次的计划任务
- crontab 循环执行的计划任务
ch16 进程管理与 SELinux 初探
- 进程与程序的区别 PID p516
- 程序被触发后,执行者的权限与属性、程序的代码与所需数据都会被加载到内存中,操作系统给与这个内存中的单元一个标识符(PID),可以说进程就是一个正在运行中的程序。 p517
- fork and exec:程序调用的流程 Linux 的程序调用通常称为 fork-and-exec 的流程;进程都会借由父进程以复制(fork)的方式产生一个一摸一样的子进程,然后被复制出来的子进程以 exec 的方式来执行实际要执行的进程,最终就成为一个子进程。 p517
- Linux 中的服务包含:系统本身所需要的服务和负责网络连接的服务(例如 apache,named,vsftpd 等)。网络服务进程被执行后,会启动一个可以负责网络监听的端口,以提供外部客户端的连接请求。 p518
- & 用来将命令放置于(终端的)后台中执行,即执行这个命令时,在该终端界面仍然可以做其他任务。注意,当退出终端时,命令执行也终端,因为并不是将命令放在系统后台中执行,而是放在终端后台中执行。 p519
- 任务管理:用 & 将命令丢到后台中时,bash 会给予该命令一个【任务号码】,任务号码只与该 bash 环境有关。 p521
- 将目前的任务丢到后台中暂停:[ctrl]+z p521
- jobs 查看目前后台任务状态命令 p521
fg %jobnumber
将后台任务拿到前台来处理 p522bg %jobnumber
让任务在后台下的状态变成运行中 p522- kill 命令 -1,-9,-15 参数;注意,kill 后面接的数字默认会是 PID,如果要管理 bash 的任务,需要使用 %+jobnumber p522
- nohup & 可以在脱机或注销系统后,还能够让任务继续执行。 p523
- ps 查看进程
ps aux
ps -lA
查看所有系统运行的进程ps -l
查看自己 bash 中的进程 p525 ps axjf
pstree
列出类似进程树的进程显示 p526- 僵尸(zombie)进程:一个进程应该已经执行完毕,或应该要终止了,但是该进程的父进程无法完整地将该进程结束掉,造成该进程一直在内存中 p527
- top 动态查看进程地变化 p527
- 所有的进程都是依附在 systemd 这个进程下面,systemd 的 PID 是一号。 p530
killall -signal 命令名称
将系统中所有以某个命令名称启动的进程全部删除- 关于进程的执行顺序 Priority 与 Nice 值
nice
新执行的命令给予新的 nice 值renice
已存在进程的 nice 重新调整 p523 - free 查看内存使用情况 p534
- uname 查看系统与内核相关信息 p534
- netstat 追踪网络或 socket 文件
netstat -tulnp
目前系统上已在监听的网络连接及其 PID p535 - demsg 分析内核产生的信息 p536
- vmstat 检测系统资源变化 p536
- 具有 SUID/SGID 权限的命令执行状态:SUID 权限,执行者可以具有程序拥有者的权限就是在该程序变成进程的时候。 p538
- 目前主机上各个进程的 PID 都以目录的形式存在于 /proc 中。其中的一些文件:cmdline:这个进程被启动的命令串 environ:这个进程的环境变量内容 p539
- fuser 借由文件(或文件系统)找出正在使用该文件的进程 p540
- SELinux p543
ch17 系统服务
- init 管理服务:所有的服务启动脚本放置于 /etc/init.d/ 目录 p565
%启动
/etc/init.d/daemon start
%关闭
/etc/init.d/daemon stop
%重新启动
/etc/init.d/daemon restart
%查看状态
/etc/init.d/daemon status
- systemd 启动服务管理机制:仅有一个 systemd 服务搭配 systemctl 命令来处理 p566
- systemctl 服务类型 .service .socket .target .mount .automount p567
systemctl list-units
和systemctl list-units-file
通过 systemctl 查看系统上的所有服务 p571- 通过 systemctl 管理不同的操作环境(target unit) graphical.target 图形界面 multi-user.target 纯命令行模式 rescue.target emergency.target p573
systemctl list-dependencies [unit] [--reverse]
通过 systemctl 分析各服务之间的依赖性 574- 查看网络服务端口
netstat -tulnp
p577
ch18 认识与分析日志文件
- rsyslog.service 系统提供的统一管理日志文件的服务 p596
- logrotate 日志文件轮询工具,自动化处理日志文件容量与更新 p596
- 日志文件服务器的设置 p604
ch19 启动流程、模块管理与 Loader
- boot loader 是 启动引导程序,存储在 MBR(主引导记录)中,启动引导程序用阿里加载内核文件 p620,p76
- 内核模块与依赖性 p630
- 内核模块的加载与删除 modprobe insmod rmmod p632
- grub2 (一种 boot loader)介绍 p634
ch20 基础系统设置与备份策略
- nmcli 设置网络参数 p657
- hostnamectl 修改主机名 p658
- dmidecode 查看硬件设备 p663
- 备份策略 dd 命令 cpio xfsdump/xfsrestore p673
ch21 软件安装:源代码与 Tarball
- 函数库:动态函数库(libxxx.so)与静态函数库(libxxx.a) p683 p700
- make 与 configure:make 会查找当前目录下的 Makefile 文件,Makefile 文件记录了源代码如何编译的详细信息;configure 检测用户的操作环境,建立 Makefile 文件 p683
- gcc 编译器编译过程 gcc 相关命令 p686 p689
- Traball 用 make 编译的基本步骤 p694 p696
- 利用 patch 更新源码