鸟哥的Linux私房菜

发布时间 2023-05-30 19:14:29作者: SanFranciscoo

ch2 主机规划与磁盘分区

  1. MBR(MS-DOS) 与 GPT 磁盘分区表 p70
  2. 主要分区、扩展分区、逻辑分区 p72
  3. BIOS 与 UEFI;BIOS与启动引导程序的关系 p76

ch4 首次登陆与在线求助

  1. man 命令 p135
  2. nano 简单的文本编辑器命令 p142

ch5 Linux 文件权限与目录配置

  1. 用户和用户组概念 p150
  2. chgrp 修改文件所属于的用户组, chown 修改文件拥有者, chmod 修改文件权限 p151,p156
  3. 文件与目录的 rwx 权限意义 p159

ch6 Linux 文件与目录管理

  1. mkdir, rmdir p177
  2. 环境变量 PATH p179
  3. cp(-a 和 -p 参数), rm, mv p183
  4. cat p187
  5. touch, mtime, ctime, atime p192
  6. 文件默认权限 umask p195
  7. 文件特殊权限 SUID, SGID, SBIT p198
  8. 文件查找 whereis, locate, find p202

ch7 Linux 磁盘与文件系统管理

  1. 文件系统,文件的 inode 与数据区块,目录的 inode 与数据区块 p211,p217
  2. df, du p225
  3. 硬链接与符号链接(本质:建立链接文件) p227
  4. 当系统里新增一块物理磁盘时,需要: p231
    1. 对磁盘进行划分,以建立可用的硬盘分区
    2. 对该硬盘分区进行格式化,以建立可用的文件系统
    3. 可以对刚建立好的文件系统进行检验
    4. 在 Linux 系统上,需要建立挂载点(即目录),将它挂载到文件系统上。
  5. lsblk, blkid, parted 观察磁盘分区状态 gdisk,fdisk 操作磁盘分区 p232
  6. mount p243
  7. 设置启动挂载,/etc/fstab 文件 p248
  8. 特殊设备 loop 挂载,挂载镜像 iso 文件,制作 loop 设备文件挂载 p251
  9. parted 命令 p256

ch8 文件与文件系统的压缩

  1. tar 打包命令 p266
  2. mkisofs 建立镜像文件 p277
  3. dd, cpio p282

ch9 vim 程序编辑器


ch10 bash

  1. shell、bash p311
  2. 变量的使用与设置 echo、变量设置规则、unset p318
  3. env 观察环境变量 set 观察所有变量 p323
  4. $$ 查看本 shell 的 PID,¥?查看上个执行命令的返回值
  5. export 将自定义变量转变为环境变量,供子进程使用 p325
  6. read 读取来自键盘输入的变量 declare,typeset 声明变量的类型 p328
  7. 变量内容的删除、取代与替换 330
  8. alias unalias 命令别名 history 历史命令 p334
  9. 通配符与特殊符号 * ? [] [-] [^] p344
  10. 数据流重定向 > >> < << p346
  11. 命令执行 ;、|| 与 && p348
  12. 管道命令 | p350
  13. 选取命令 cut grep p351
    • cut 用来将一行的数据切分,让一行的某部分数据出现
    • grep 用来解析每行信息,如果该行存在想要的关键字,则将改行取出
  14. 排序命令 sort wc uniq p353
  15. tee 同时将数据流分送到文件与屏幕 p354
  16. tr:删除一段信息当中的文字,或文字替换 col:将 tab 换成对等的空格键 join:将两个文件中有相同数据的行加在一起显示 paste:将两行粘贴在一起,以 tab 隔开 expand:将 tab 转换为空格键 p355
  17. split 将大文件以行数或文件大小进行划分 p357
  18. xargs 可以读入 stdin 的数据,并以空格符或换行符作为识别符,将 stdin 的数据分割成为参数 p358
  19. 关于 - 号:可以替代命令前的 stdin 或 stdout p359

ch11 正则表达式与文件格式化处理

  1. 行首与行尾字符 ^, $,空白行 ^$ p368
  2. grep 参数 -v 选中不匹配的行 p369
  3. 小数点 . 代表 一定有一个任意字符 的意思;* 代表 重复前一个字符 0 到无穷多次 的意思。 .* 代表零个或任意多个字符 p370
  4. 基础正则表达式字符集合 p372
  5. sed 本身是一个管道命令,可以分析标准输入,也可以直接将操作写入文件内。 sed 可以将数据进行 替换、删除、新增、选取特定行 等功能 p373
  6. 扩展正则表达式 egrep (grep -E) + ? | () ()+ p376
  7. 格式化打印 printf p377
  8. awk 主要处理每一行的字段内的数据,默认的字段分隔符为 “空格键” 或[Tab] 键; awk 可以处理后续接的文件,也可以处理前一个命令的标准输出 p379
  9. 在 awk 中,每一行的每个字段用 $1, $2 表示,$0 表示所有数据 p379
  10. 文件对比工具 diff 通常比较同一个文件新旧版本差异,通常以行来比对 p382
  11. cmp 利用字节为单位来比对数据 p382

ch12 shell 脚本

  1. /bin/sh 默认链接到 dash, 而不是 bash p390
  2. 脚本文件的返回值 exit 0 p391
  3. :- 用来设置变量的默认值,如 filename=${x:-"filename"},如果 x 不为空就将 x 赋给 filename,否则就将 "filename" 赋给 filename p393
  4. $((计算式)) 用来进行数值计算 p393
  5. bc 显示小数点 p393
  6. source,sh script 和 ./script 执行脚本的区别(source 在父进程的 bash 中执行脚本,其他两种在子进程的 bash 中执行脚本)p394
  7. test 测试文件类型、文件权限、两文件之间的比较、整数之间的比较、字符串之间的比较 p395
  8. 在 bash 中使用 [] 作为判断符号(中括号两端要有空格符来分隔);中括号内每个组件都要有空格分隔;中括号内的变量最好以双引号括起来;中括号内的常数最好以单引号或双引号括起来。 p397-398
  9. 脚本的默认变量($0(脚本文件名), $1, $2, $3...), $#(参数个数), $@(代表【"$1""$2""$3"】), $*(代表【"$1c$2c$3c$4"】,其中 c 为分隔符,默认为空格) p399
  10. shift 参数变量偏移 p400
  11. if...then 判断式;多个条件的判断 [] && [] 或 [] || [] p401
if [ condition1 ] && [ condition2 ]; then
	内容
fi

多重判断:

if [ condition1 ]; then
	内容
elif [ condition2 ];then
	内容
else
	内容
fi
  1. netstat -tuln p403
  2. 网络端口的 Local Address:127.0.0.1 代表对本机开放,0.0.0.0 或 :: 代表对所有网络开放 p403
  3. case...esac 判断式 p405
case ${variable1} in
	"string1")
		...
		;;
	"string2")
		...
		;;
	*) ## 注意这里不是 "*",该条件代表剩下的所有情况进入该段落
		...
		;;
esac
  1. 脚本中的 function(脚本中的 function 要定义在程序的最前面),function 中的内置变量 $1, $2, ... p406-407
function fname()
{

}
  1. while do done, until do done 不定循环 p408
while [ condition ]
do
	内容
done
until [ condition ]
do
	内容
done
  1. for...do...done 固定循环 p409
for tempvar in string1 string2 string3
do
	内容
done
for tempvar in ${var1}
do
	内容
done
  1. 1 到 100 的数字表示:seq 1 100 和 [1..100] p410
for tempvar in ${seq 1 100}
do
	内容
done
  1. for...do...done 的数值处理
for (( 初始值;限制值;赋值运算))
do
	程序段
done
  1. 随机数 ${RANDOM} 产生 0-32767 之间的随机数
  2. shell 脚本的跟踪与调试

ch13 Linux账号管理与ACL权限设置

  1. UID:用户ID,GID:用户组ID p418
  2. /etc/passwd 文件:管理用户,包含:账号名称、密码、UID、GID、家目录、默认使用的 shell 等 p419
  3. /etc/shadow 文件:管理用户的密码,包含:账号名称、密码、等内容 p421
  4. root 密码忘记,需进入单人维护模式改正 p423
  5. /etc/group 管理用户组,包含:组名、用户组密码、GID(用户组ID,即 /etc/passwd 第四个字段使用的GID对应的用户组名就是由这里对应)、此用户组支持的账号名称。 p423
  6. 初始用户组与有效用户组:/etc/passwd 第四栏的 GID 即初始用户组,当用户一登录系统,立刻就会拥有这个用户组的相关权限。有效用户组的作用通常是用在新建文件的拥有者上。 p424
  7. groups 有效与支持用户组的视察 p425
  8. newgrp 对用户的有效用户组的切换,想要切换的用户组必须是用户已经支持的用户组。(chgrp 是修改文件所属于的用户组)需要注意的是,这个命令是以另外一个 shell 来提供此功能,即输入 newgrp命令后,会进入新的 shell,使用完后需要退出。 p425
  9. useradd 新增用户 p426
  10. useradd 私有用户组机制(系统会建立一个与账号一样的用户组作为用户的初始用户组)、公共用户组机制(以 GROUP=100 作为新建账号的初始用户组,即每个账号都属于 users 这个用户组) p428
  11. passwd 设置账号密码 p430
  12. usermod \[-gGalsuL] username 对用户账号数组微调。 -g 后面接初始用户组,修改 /etc/passwd 的第一栏;-G 后面接次要用户组,修改这个使用者能够支持的用户组,修改的是 /etc/group;-a 与 -G 合用,可以 增加次要用户组的支持 而非 设置次要用户组。 p433
  13. userdel 删除用户账户 p434
  14. id 查询某人或自己相关的 UID/GID 等信息 p434
  15. finger 查看用户信息 p434
  16. chfn 修改一些用户信息 p435 chsh 修改用户 shell p436 这两个命令都让用户修改 /etc/passwd 文件。
  17. groupadd 新建一个用户组 p437
  18. groupmod 用户组相关参数的修改,如用户组名字,用户组的 GID 等 p437
  19. groupdel 删除用户组 p437
  20. ACL 权限设置:可以针对单一用户、单一文件或目录进行 rwx 权限设置 p440
  21. getfacl setfacl 用于ACL 权限设置 p441
  22. su 用户身份切换 注意 - 参数涉及可登录 shell 和 非登录 shell 的变量读取方法;一般切换到 root 用户:su - ,若要完整的切换到新用户环境,使用:su - usernamesu -l username ;若仅执行一次 root 命令,使用 su - -c "命令串" p446
  23. sudo 命令 p446
  24. 特殊的 shell:/sbin/nologin 该 shell 无法登录主机获取交互的 shell,但仍可以使用系统资源 p451
  25. PAM 模块:一套应用程序编程接口,提供一连串的认证机制。 p451
  26. 查询用户命令:w who last lastlog p457
  27. 用户对谈:write mesg wall p458
  28. mail 用户邮箱命令 p459
  29. pwck 检查 /etc/passwd 这个账号配置文件内等信息 pwconv 将 /etc/passwd 内的账号与密码移动到 /etc/shadow 中 p460

ch14 磁盘配额(Quota)与高级文件系统管理

  1. 磁盘配额(Quota):限制某一用户组、用户、目录的最大磁盘配额 p466
  2. 软件磁盘阵列(software RAID) p475
  3. 软件磁盘阵列 mdadm p479
  4. 逻辑卷管理器 LVM(物理卷 PV,卷组 PE,物理扩展块 VG,逻辑卷 LV) p485

ch15 计划任务

  1. at 仅执行一次的计划任务
  2. crontab 循环执行的计划任务

ch16 进程管理与 SELinux 初探

  1. 进程与程序的区别 PID p516
  2. 程序被触发后,执行者的权限与属性、程序的代码与所需数据都会被加载到内存中,操作系统给与这个内存中的单元一个标识符(PID),可以说进程就是一个正在运行中的程序。 p517
  3. fork and exec:程序调用的流程 Linux 的程序调用通常称为 fork-and-exec 的流程;进程都会借由父进程以复制(fork)的方式产生一个一摸一样的子进程,然后被复制出来的子进程以 exec 的方式来执行实际要执行的进程,最终就成为一个子进程。 p517
  4. Linux 中的服务包含:系统本身所需要的服务和负责网络连接的服务(例如 apache,named,vsftpd 等)。网络服务进程被执行后,会启动一个可以负责网络监听的端口,以提供外部客户端的连接请求。 p518
  5. & 用来将命令放置于(终端的)后台中执行,即执行这个命令时,在该终端界面仍然可以做其他任务。注意,当退出终端时,命令执行也终端,因为并不是将命令放在系统后台中执行,而是放在终端后台中执行。 p519
  6. 任务管理:用 & 将命令丢到后台中时,bash 会给予该命令一个【任务号码】,任务号码只与该 bash 环境有关。 p521
  7. 将目前的任务丢到后台中暂停:[ctrl]+z p521
  8. jobs 查看目前后台任务状态命令 p521
  9. fg %jobnumber 将后台任务拿到前台来处理 p522
  10. bg %jobnumber 让任务在后台下的状态变成运行中 p522
  11. kill 命令 -1,-9,-15 参数;注意,kill 后面接的数字默认会是 PID,如果要管理 bash 的任务,需要使用 %+jobnumber p522
  12. nohup & 可以在脱机或注销系统后,还能够让任务继续执行。 p523
  13. ps 查看进程 ps aux ps -lA 查看所有系统运行的进程 ps -l 查看自己 bash 中的进程 p525
  14. ps axjf pstree 列出类似进程树的进程显示 p526
  15. 僵尸(zombie)进程:一个进程应该已经执行完毕,或应该要终止了,但是该进程的父进程无法完整地将该进程结束掉,造成该进程一直在内存中 p527
  16. top 动态查看进程地变化 p527
  17. 所有的进程都是依附在 systemd 这个进程下面,systemd 的 PID 是一号。 p530
  18. killall -signal 命令名称 将系统中所有以某个命令名称启动的进程全部删除
  19. 关于进程的执行顺序 Priority 与 Nice 值 nice 新执行的命令给予新的 nice 值 renice 已存在进程的 nice 重新调整 p523
  20. free 查看内存使用情况 p534
  21. uname 查看系统与内核相关信息 p534
  22. netstat 追踪网络或 socket 文件 netstat -tulnp 目前系统上已在监听的网络连接及其 PID p535
  23. demsg 分析内核产生的信息 p536
  24. vmstat 检测系统资源变化 p536
  25. 具有 SUID/SGID 权限的命令执行状态:SUID 权限,执行者可以具有程序拥有者的权限就是在该程序变成进程的时候。 p538
  26. 目前主机上各个进程的 PID 都以目录的形式存在于 /proc 中。其中的一些文件:cmdline:这个进程被启动的命令串 environ:这个进程的环境变量内容 p539
  27. fuser 借由文件(或文件系统)找出正在使用该文件的进程 p540
  28. SELinux p543

ch17 系统服务

  1. 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
  1. systemd 启动服务管理机制:仅有一个 systemd 服务搭配 systemctl 命令来处理 p566
  2. systemctl 服务类型 .service .socket .target .mount .automount p567
  3. systemctl list-unitssystemctl list-units-file 通过 systemctl 查看系统上的所有服务 p571
  4. 通过 systemctl 管理不同的操作环境(target unit) graphical.target 图形界面 multi-user.target 纯命令行模式 rescue.target emergency.target p573
  5. systemctl list-dependencies [unit] [--reverse] 通过 systemctl 分析各服务之间的依赖性 574
  6. 查看网络服务端口 netstat -tulnp p577

ch18 认识与分析日志文件

  1. rsyslog.service 系统提供的统一管理日志文件的服务 p596
  2. logrotate 日志文件轮询工具,自动化处理日志文件容量与更新 p596
  3. 日志文件服务器的设置 p604

ch19 启动流程、模块管理与 Loader

  1. boot loader 是 启动引导程序,存储在 MBR(主引导记录)中,启动引导程序用阿里加载内核文件 p620,p76
  2. 内核模块与依赖性 p630
  3. 内核模块的加载与删除 modprobe insmod rmmod p632
  4. grub2 (一种 boot loader)介绍 p634

ch20 基础系统设置与备份策略

  1. nmcli 设置网络参数 p657
  2. hostnamectl 修改主机名 p658
  3. dmidecode 查看硬件设备 p663
  4. 备份策略 dd 命令 cpio xfsdump/xfsrestore p673

ch21 软件安装:源代码与 Tarball

  1. 函数库:动态函数库(libxxx.so)与静态函数库(libxxx.a) p683 p700
  2. make 与 configure:make 会查找当前目录下的 Makefile 文件,Makefile 文件记录了源代码如何编译的详细信息;configure 检测用户的操作环境,建立 Makefile 文件 p683
  3. gcc 编译器编译过程 gcc 相关命令 p686 p689
  4. Traball 用 make 编译的基本步骤 p694 p696
  5. 利用 patch 更新源码

ch22 软件安装RPM、SRPM与YUM