由于本科专业的课程设置非常不合理(存在着地理信息系统、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… 命令参数
- 条件判断
- 函数(放在脚本最前面)
- 循环
|
|
|
|
|
|
|
|
- 用户账号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):避免主体进程误用目标资源