《鸟哥的Linux私房菜》 Reading Notes

由于本科专业的课程设置非常不合理(存在着地理信息系统、RFID传感器等看似很重要但老师自己也不懂上得无比水和烂的课,我认为即使是物联网工程专业也应当重视计算机的基础课),无奈只能自己买书来自学,技术的同学不熟悉Linux简直是寸步难行。这里分享一下《鸟哥的Linux私房菜》的读书笔记,内容主要以重要知识点的形式呈现。

  • 计算机五大单元

    • 输入单元
    • 输出单元
    • CPU控制单元
    • CPU运算逻辑单元
    • 内存
  • 服务器的设计目的是稳定不死机

  • 硬盘和速度用十进制

  • 主板

    • 连接各个组件,有芯片组,电池,BIOS
    • Intel:北桥连接CPU、内存、显卡,南桥连接硬盘、USB、网卡
    • 北桥总线为系统总线,南桥总线为输入输出总线
    • AMD:将内存集成进CPU
  • CPU

    • 不同CPU有不同的指令集,代表着不同技能
    • 两种CPU
      • 精简指令集RISC:IBM的ARM系列,用于手机
      • 复杂指令集CISC:Intel、AMD的x86系列,用于PC
    • 主频=外频*倍频
    • CPU位数为每次能够处理的数据量(字组大小)
  • 内存

    • 使用DRAM
    • 双通道设计将两个内存集合在一起
    • SRAM为CPU中的缓存(cache)
  • 显卡(VGA,Video Graphics Array)

    • 颜色占用显存
    • 内嵌GPU进行3D加速
  • 操作系统

    • 内核:驱动硬件,资源分配,进程管理,内存管理,文件管理
    • 系统调用:调用内核
    • 应用程序在操作系统提供的接口上开发
  • 历史

    • Multics
    • Unics
    • Unix(Ken Thompson, Dennis Ritchie from AT&T’s Bell Lab)
    • System V & BSD(Berkeley Software Distribution)
    • Posix Standards
    • Unix收回版权
    • Minix
    • Linux
    • Mac OS X 基于 Free BSD
    • Android 基于 Linux
  • 每一个设备为文件

  • 磁盘每个扇区(非扇形)大小为512B,扇区组成的圆形为磁道,所有盘片的磁道组成柱面,以柱面号来分区
  • 第一个扇区包含:主引导分区MBR(Master Boot Record)和分区表
  • 分区表:主分区+扩展分区(包含逻辑分区),最多4个
  • 开机先启动BIOS,再找到MBR启动引导加载程序(boot loader),启动操作系统
  • 其他分区有引导扇区(boot sector),启动引导加载程序(多重引导)
  • 挂载:目录树和文件系统的关联
  • swap:内存不够,将不常使用的放到硬盘中

  • 文件权限

    • chgrp
    • chown
    • chmod
    • user, group, others, all
    • rwx
  • 目录配置

    • Filesystem Hierarchy Standard:是否可分享,是否可变
    • /:根目录,系统文件
    • /usr:UNIX Software Resource,软件
    • /var:系统运行,数据库
  • which:查找PATH中的执行文件

  • whereis,locate:查找数据库中的文件,快
  • find:查找硬盘中的文件,慢
  • find . -name ‘file’

  • 文件系统

    • Ext2
    • boot sector
    • block group
    • super block:文件系统整体信息
    • inode:文件(文件属性与文件block号,每个文件对应一个inode),目录(目录属性与目录block号)
    • block:文件(内容),目录(文件名和文件inode号)
    • df:查询磁盘使用量
    • du:查询目录的磁盘使用量
    • 分区(fdisk)->格式化,创建文件系统(mkfs)->挂载目录(mount)
    • 硬连接(ln):不同目录block指向同一个文件的inode
    • 符号连接(ln -s):指向目录的inode
  • 压缩和打包

    • gzip: file.gz
    • bzip2: file.bz2
    • 打包压缩: tar -zcvf file.tar.gz(tgz)
    • 解压缩包: tar -zxvf file.tar.gz
    • dump: 备份文件系统或目录
    • restore: 还原备份
  • vim

    • vim是vi的高级版,带有颜色便于编辑程序
    • 一般模式->ioa(插入)r(替换)->编辑模式
    • 一般模式->:,/,?->命令行模式
    • ctrl+f:向下翻页
    • ctrl+b:向上翻页
    • 0:本行开头
    • $:本行末尾
    • G:最后一行
    • nG:第n行
    • gg:第一行
    • dd:删除整行
    • nyy:复制n行
    • p:粘贴
    • u:撤销
    • ctrl+r:重做
    • ctrl+v:块选择
    • /word:向下寻找word,用n向下查找
    • ?word:向上寻找word,用N向上查找
    • :1,$s/word1/word2/g:从开头到末尾用word2替换word1
    • :set nu:显示行号
    • :sp file:多窗口
    • ctrl+w+上/下:多窗口切换
  • shell

    • 操作系统内核给用户的接口
    • bash:Linux的一种标准shell
    • type:判断是否是bash内置命令
    • pwd:当前目录
    • env:查看环境变量
    • cd:直接回到用户主文件夹
    • alias ll=’ls -al –color=auto’
    • 自定义变量不能在子进程中使用,环境变量能在子进程中使用
    • export VAR:使自定义变量VAR成为环境变量
    • /etc/profile:全局环境配置文件
    • ~/.bashrc:用户环境配置文件
    • 变量=$(命令)
    • 变量=$((算式))
    • ctrl+d:结束输入(EOF)
    • ctrl+c:中止命令
    • ctrl+u:删除命令
    • ctrl+a:移到开头
    • ctrl+e:移到末尾
    • 数据流重定向
      • stdin:0,<(由文件代替键盘输入),<<(结束输入符)
      • stdout:1,>(覆盖),>>(累加)
      • stderr:2,>(覆盖),>>(累加)
    • ; 连续命令
    • $? 回转码,上个命令执行成功则为0
    • cmd1 && cmd2:cmd1成功则执行cmd2
    • cmd1 || cmd2:cmd1失败则执行cmd2
    • 管道命令(仅处理stdout)
    • cat file | grep ‘word’
    • grep ‘word’ file:取出整行
    • cut:行内分割
    • sed:行增删改
    • awk:行内字段处理
  • 通配符

    • ? 任意一个字符
    • * 0到无穷个字符
    • [] 字符集合
    • [-] 连续字符
    • [^] 反向选择
  • 正则表达式(Regular Expression, RE, RegEx)

    • 处理字符串的一种标准依据
    • 元字符
    • [:alnum:] 字母+数字
    • [:alpha:] 字母
    • [:upper:] 大写字母
    • [:lower:] 小写字母
    • [:digit:] 数字
    • [] 字符集合表示一个字符
    • () 字符分组表示一组字符
    • [^] 反选
    • ^ 行首
    • $ 行尾
    • . 任意一个字符
    • \w 任意一个字母,数字,下划线,汉字
    • \s 空格
    • \d 数字
    • \b 单词开始或结束
    • 大写为反选
    • c* 0到无穷多个的c
    • c+ 1到无穷多个的c
    • c? 0个或1个c
    • c{5} 5个c
    • c{2,5} 2到5个c
    • | 或
  • shell script
    • #!/bin/bash 声明使用的shell名称
    • #注释
    • sh -n:检查语法
    • sh -x:调试执行过程
    • test 测试命令
    • -e 是否存在
    • -f 是否存在且为文件
    • -d 是否存在且为目录
    • $0 文件名
    • $1, $2… 命令参数
    • 条件判断
    • 函数(放在脚本最前面)
    • 循环
1
2
3
4
if [ condition ]; then
elif [ condition ]; then
else
fi
1
2
3
4
5
6
case $1 in
"" )
;;
* )
;;
esac
1
2
3
function fname () {
直接使用形参$1, $2...
}
1
2
3
4
5
6
while/until [ condition ]
do
done
for var in ...
do
done
  • 用户账号UID /etc/passwd
  • 用户组GID /etc/group
  • 密码 /etc/shadow
  • 访问控制列表(Access Control List):对单个用户或用户组进行权限管理
  • sudo:让/etc/sudoers中的用户仅通过自己的密码进行其他用户的操作
  • 磁盘Quota:公平分配磁盘给用户,soft->gracetime->hard
  • Redundant Arrays of Inexpensive Disks:根据性能和备份有不同等级
  • Logical Volume Manager逻辑卷管理器:弹性调整文件系统容量
  • 日志文件:/var/log

  • 例行性工作

    • at:一次
    • crontab:循环
    • crontab -e
    • 分 时 日 月 周 命令
    • 日月和周不可并存
  • 进程管理

    • 硬盘程序加载到内存中为进程PID
    • 父进程PPID->fork->exec->子进程
    • daemon(守护进程,系统服务):常驻内存的进程
    • standalone+super daemon
  • 单一终端机的工作管理

    • command &:放到后台运行
    • ctrl+z:放到后台暂停
    • jobs:查看后台工作
    • fg:后台工作拿到前台运行
    • bg:让后台工作继续运行
    • kill -1 PID:重启
    • kill -9 PID:强制中止
    • kill -15 PID:正常结束
    • ps -l:自己的进程
    • ps aux:所有系统进程
    • top:动态查看进程变化,P以CPU排序,M以内存排序
    • 进程优先级PRI = PRI +nice
    • netstat:网络状态
    • ifconfig:查询IP
    • whois:域名所有者信息
    • host:DNS服务器
    • nslookup:域名解析
    • SELinux(Security Enhanced Linux):避免主体进程误用目标资源