Linux 笔记

一、基础

1、基础命令

  • tty : 查看当前终端类型
返回值终端类型
/dev/pst/#伪终端
/dev/tty#虚拟终端
/dev/console物理终端
/dev/ttys#串行终端
  • who : 查看登录用户
  • bashname : 查看目录基名
  • dirname : 查看目录名
  • type : 查看命令类型
  • where : 命令在哪(zsh)
  • hash : 查看命令缓存
  • which : 查看命令所在位置
  • man : 查看命令帮助,可为 命令、程序配置文件格式、系统调用、库调用、游戏及其他不便归类的文件提供操作手册,以下为 man 下的快捷键:
    • space : 向下翻屏
    • b : 向上翻屏
    • Enter : 向下翻一行
    • k : 向上翻一行
    • /:keyword : 向下查找文字
    • ?:keyword : 向上查找文字
    • n : 向下循环查找
    • N : 向上循环查找
    • q : 退出
  • man 分段机制,man [num] commond 查看指定章节的帮助手册
    • 1、用户命令
    • 2、系统调用
    • 3、库调用
    • 4、设备文件
    • 5、文件格式
    • 6、游戏
    • 7、杂项
    • 8、管理命令
  • man -k : 查看命令章节信息(模糊查找)
    • whatis : 查看命令章节信息(精确查找)
    • 通过 makewhatis 手动生成数据库信息
  • info : 获取在线文档(/usr/share/doc/ 离线文档)
  • shutdown TIME : 关机
    • -r : 重启
    • -h : 关机
    • -c : 取消重启或关机
  • shutdown 时间格式 :
    • now : 立即关机
    • +# : n 分钟后关机
    • hh:mm : 指定时间关机
  • date : 时间管理
    • date MMDDhhmm[[CC]YY][.ss] : 设置时间
    • date [+FORMAT] : 指定格式显示时间,具体 man 查看格式
  • hwclock : 硬件时间管理
    • -s : 把软件时钟设置为硬件时钟
    • -w : 把硬件时钟设置为软件始终
  • hitory : 查看命令历史
    • -c : 清除命令历史
    • -d # : 删除指定命令
    • -a : 追加当前命令到命令历史
  • ls : 列出目录中内容
    • -a : 显示所有文件,包含隐藏文件
    • -A : 显示所有文件,但不现实 . .. 目录
    • --color : 设置文件颜色配置,默认 –color=always
    • -d : 如果是目录,则显示目录本身属性,并非展示其目录下文件内容
    • -r : 逆序显示
    • -R : 递归现实
    • -h : 格式化文件大小
    • -l : 长格式显示每个文件具体信息
    • -i : 显示 索引节点号
  • file : 查看文件内容格式
  • echo : 回显(打印)内容
    • -e : 支持控制符显示
    • -e "\033[##m文本\033[0m" : 设置文本颜色,## 第一个事前景色,3前景色4背景色,第二个是颜色,1~7,多控制用 ; 分隔
    • -n : 不为显示的内容自动换行
  • cat : 文件连接显示命令
    • -E : 显示结束符 $,在 Linux 下 $ 为换行符,Windows 下为 \n$
    • -v : 显示非打印字符
    • -e : 显示全部非打印符,包括换行符,即全字符显示
    • -n : 显示行号
    • -s : 压缩显示空白行,多个连续空白行将显示为一个空白行
    • cat file1 file2 : 连接并显示两个文件
  • tac : 与 cat 相同,只不过按行逆序显示
  • more : 分页查看文件内容,翻到文件尾部以后则不可以向前翻页,自动退出
  • less : 与 man 相同,支持前后翻页,q 退出
  • head : 查看文件头部内容,默认 10 行
    • -n # : 显示头部 N 行
    • # : 与 -n # 相同
  • tail : 查看文件尾部内容,默认 10行
    • -f : 持续监测并显示文件内容
  • cp : 复制文件
    • -r : 递归复制
    • -i : 交互式
    • -a : 归档模式,相当于 -dr,链接文件不追溯源文件,cp 默认追溯源文件
    • -p : 保持原有属性
    • -f : 强制覆盖
  • touch : 更改时间戳
    • -c : 不创建文件
    • -t : 明确指定时间
    • -a : 改变访问时间
    • -m : 改变修改时间
  • stat : 查看文件状态元数据
  • wc : 文本统计命令
    • -l : 查看文件有多少行
    • -c : 统计文本有多少字节
    • -w : 统计文本有多少单词
  • tr : 从标准输入到标准输出的字符替换,如 cat /etc/passwd | tr 'a-z' 'A-Z'
    • -d : 删除指定字符
  • cut : 切割字符
    • -d'字符' : 指定分段字符
    • -f# : 指定要显示 的列,如 cut -d':' -f1 /etc/passwd
  • tee : 将标准输入内容重定向到标准输出并在此发出标准输出,常用于同时要显示/保存标准输入的内容并且再将其通过管道转发至另一个程序的标准输入
  • sort : 文本排序
    • -f : 忽略大小写
    • -n : 对数值排序
    • -t : 指定分隔符
    • -k : 指定排序字段
    • -u : 重复行只显示一次
  • uniq : 去重统计
    • -c : 显示每行的重复次数
    • -d : 仅显示重复的行(>1)
    • -u : 显示从未重复的行
  • md5sum : 获取 md5 摘要
  • sha1sum : 获取 sha1 加密信息
  • read VARNAME : 从标准输入读取一个输入值并赋值给变量
    • -p : 显示提示信息
    • -t : 设置超时时间
  • watch : 持续运行命令
    • -n # : 每隔 # 秒运行其后面的命令

2、Linux 哲学

  • 一切皆文件
  • 没有返回消息就是最好的消息,不要打扰用户
  • 由众多目的单一的小应用程序组成,每个程序完成单一功能
  • 组合目的单一的小程序完成复杂任务
  • 使用文本保存配置文件
  • 提供机制,而非策略

3、bash 特性

3.1、引用

  • '' : 强引用,不会出现变量替换
  • "" : 弱引用,会产生变量替换
  • `` : 命令引用,用于替换成命令执行结果
  • ${} : 引用变量,同上
    • ${VARNAME:-VALUE} : 如果 VARNAME 不为空,则返回其本身,否则返回 VALUE 的值,常用于设置变量默认值,注意 VARNAME 并未被改变

3.2、命令行展开

  • {} 代表命令行展开,最简单的应用就是创建多层目录,如 mkdir -p a/{b,c},最终将创建 a/ba/c 文件夹。

3.3、命令历史

bash 默认保存以前执行过的命令,使用 history 命令查看,默认保存1000行在 ~/.bash_history 中。

  • !# : 快速执行命令历史中#号命令
  • !! : 快速执行上一条命令
  • !-# : 快速执行命令历史中倒数#号命令
  • !$ : 引用上条命令的参数
  • !str : 快速执行历史中最近的以str 开始的命令

3.4、命令别名

使用 alias 命令可显示系统上所有创建的别名。
在命令前加反斜杠代表使用命令本身,如 \ls
使用 alias 命令别名='原始命令' 定义命令别名。
使用 unalias 命令别名 撤销一个命令的别名。

3.5、globbing 文件名通配符

  • * : 表示任意长度的任意字符
  • ? : 任意单个字符
  • [] : 匹配指定字符范围内的任意单个字符
    • [a-z] : 所有英文字符,不区分大小写
    • [0-9] : 所有数字
    • [[:upper:]] : 所有大写字母
    • [[:lower:]] : 所有小写字母
    • [[:alpha:]] : 所有字母
    • [[:digit:]] : 所有数字
    • [[:alnum:]] : 数字加字母
    • [[:space:]] : 空白符
    • [[:punct:]] : 所有标点符号
  • [^] : 指定范围以外,取反操作

3.6、bash 快捷键

  • Ctrl+a : 跳转到行首
  • Ctrl+e : 跳转到行尾
  • Ctrl+u : 删除光标到行首
  • Ctrl+k : 删除光标到行尾
  • Ctrl+z : 后台当前程序

3.7、bash 补全

  • 命令补全 : tab 执行命令补全,默认从 PATH 变量从左向右补全
  • 路径补全 : tab 执行路径不全

3.8、bash 变量

  • 本地变量 : 只对当前 shell 进程有效,对其子 shell 其他 shell 都无效,使用 [set] var=Value 声明
  • 局部变量 : 只对指定代码块有效,使用 local var=value 声明
  • 环境变量 : 对当前 shell 和其子 shell 有效,使用 export var=value 声明
  • 位置变量 : 用于在脚本中引用传递的参数,如 $1
  • 特殊变量 :
    • $0 : 脚本名称本身
    • $? : 上一条命令执行状态,范围是 0~2550 成功,1~255 失败
    • $$ :
    • $! :
    • $# :
    • $* :

4、FHS 文件目录层级标准

目录功能
/boot系统启动文件以及grub(引导加载器bootloader)、vmlinuz(内核)、initrd(完整的小Linux系统)、ramfs文件
/dev设备文件:块设备(随机访问无顺序)、字符设备(线性访问有顺序)、设备号(主设备号(major)和次设备号(minor))
/etc配置文件
/etc/sysconfig系统级别的软件配置
/etc/init.d系统运行级别脚本
/home普通用户家目录
/lib库文件和内核模块文件(.a 静态库、.so 动态库)
/lost+found存储断电等情况造成的尚未保存的文件
/media挂载移动设备目录
/mnt挂载硬盘等设备目录
/misc杂项
/opt早起安装第三方软件目录
/proc伪文件系统,默认是空,系统启动后则不为空,存放内核映射文件,一般为内核可调参数、内核工作数据;主要用于内核调优
/sys伪文件系统;硬件设备相关属性 映射文件 比如修改磁盘I/O调度
/srv为服务提供数据存储位置
/tmp临时文件 任何人都可以在里面创建文件 但只能删除自己的 drwxrwxrwt
/var可变化文件
/bin二进制可执行文件(任意用户可执行)
/sbin管理员二进制可执行程序
/usrshared read-only 全局共享只读文件
/usr/include头文件,编译安装软件时会使用
/usr/bin全局只读共享二进制程序
/usr/sbin全局只读共享管理员二进制程序
/usr/local第三方软件安装目录
/usr/local/bin第三方软件二进制可执行文件
/usr/local/sbin第三方软件管理员命令
/usr/local/lib第三方软件库文件

5、Linux 文件类型

5.1、Linux 文件类型

  • 普通文件 : -/f 普通存储的文件,Linux 并不根据文件后缀区分文件类型
  • 目录文件 : d 实现路径映射
  • 链接文件 : l 软连接用于映射具体文件;硬链接实际上与源文件的 索引节点号 相同,可视为同源文件一样操作,参考 Linux软连接与硬连接
  • 设备文件 c/b : 鼠标键盘等为 字符设备,有存取顺序,c 标识;硬盘等称之为 块设备,可实现随机存取,b 标识。
  • 管道文件 p : 用于链接两个命令的文件
  • 套接字文件 s : 用于网络传输时进程间通讯

5.2、Linux 时间戳

  • 访问时间: 最近一次访问文件的时间。
  • 修改时间: 修改文件内容的最近时间,即文件真实内容的写时间。
  • 改变时间: 文件元数据改变时间,即文件的实际类型、权限等改变时间,注意修改时间、访问时间也算是文件的元数据,当两者改变时,改变时间同样会更新。

6、用户管理

6.1、用户类别

  • 管理员 : 0
  • 普通用户 : 1-65535
    • 系统用户 : 1-499
    • 登录用户 : 500-65535

6.2、相关配置文件

  • /etc/passwd : 用户主信息存储文件
    • 文件格式 : 用户名:x:UID:GID:finger(备注信息):HOME:SHELL
  • /etc/shadow : 用户密码存储文件
    • 文件格式 : 用户名:加密后的密码:最近一次密码修改时间:最短使用期限:最长使用期限:警告区间:非活动区间:账号过期时间:预留
  • /etc/group : 用户组信息存储文件
  • /etc/gshadow : 用户组密码存储文件

6.3、创建用户及用户组

  • useradd USERNAME : 用于创建用户
    • -u : 指定用户 UID
    • -g : 指定用户的基本组 GID,但是GID必须预先存在
    • -G : 指定用户的额外组 GID,组必须事先存在
    • -d : 设置用户的家目录,不能实现复制
    • -c : 备注信息
    • -s : 指定用户 shell,应使用 /etc/shells 文件中指定的安全 shell,否则可能无法登录系统
    • -r : 指定用户为系统用户,UID 在 1~499 之间,不会给用户创建家目录
    • -p : 直接指定密码
    • -m : 创建用户时自动创建家目录(默认)
    • -M : 创建用户时不创建家目录
    • -D : 为 useradd 命令指定创建用户时的默认值
  • groupadd GRPNAME : 用于创建用户组
    • -g : 创建组并为其指定 GID

6.5、删除用户及用户组

  • userdel USERNAME : 删除指定用户,默认不移除家目录
    • -f, --force : 即使不属于此用户,也强制删除文件
    • -h, --help : 显示此帮助信息并推出
    • -r, --remove : 删除主目录和邮件池
    • -R, --root CHROOT_DIR : chroot 到的目录
    • -Z, --selinux-user : 为用户删除所有的 SELinux 用户映射
  • groupdel GRPNAME : 删除用户组,删除用户基本组,用户未删除时无法操作

6.6、用户修改

  • chsh USERNAME : 改变用户默认 shell
  • chfn USERNAME : 更改用户描述信息
  • usermod USERNAME : 改变用户信息
    • -u : 改变用户 UID
    • -g : 改变用户 GID
    • -G : 改变用户附加组,默认会覆盖原来的附加组,通常和 -a 一起使用
    • -a : 修改附加组时保持追加,不覆盖原有附加组
    • -c : 修改用户注释
    • -d : 修改用户家目录,默认不会迁移用户的家目录,如果要迁移需要配合 -m
    • -m : 修改时家目录时迁移文件
    • -s : 指定新的 shell
    • -l : 更改用户名
    • -L : 锁定用户账号
    • -U : 解锁用户账号
  • chage : 设置密码期限
    • -d : 设置最近密码修改时间
    • -E : 设置密码过期时间
    • -I : 设置密码失效时间
    • -m : 设置密码最短使用期限
    • -M : 设置密码最长使用期限
    • -W : 设置警告时间
  • groupmod GRPNAME : 用户组信息修改
    • -g : 改变组的 GID
    • -n : 改变组名
  • newgrp GRPNAME : 切换用户组

7、管道与重定向

7.1、输入重定向

  • < : 用于输入重定向,比如讲一个文本内容重定向到一个命令,如tr 'a-z' 'A-Z' < /etc/passwd
  • << : 此处文档,常用于生成菜单,同 EOF 结束符一起使用,如下所示 :
1
2
3
4
5
6
cat << EOF
1、test1
2、test2
3、test4
4、test4
EOF

7.2、输出重定向

  • > : 覆盖输出重定向,该重定向会覆盖文件上一次的内容,重新写入新内容。
  • >> : 追加输出重定向,该重定向会将新内容追加到文件末尾,不会覆盖原来的文件内容
  • set -C : 禁止使用覆盖重定向到已存在的文件
  • set +C : 与上面的相反
  • >| : 在 set -C 下强制覆盖重定向
  • 2> : 错误输出覆盖重定向
  • 2>> : 错误输出追加重定向
  • &> : 同时重定向错误输出和标准输出

7.3、管道

  • | : 管道用于将前一个命令的输出重定向为第二个命令的输入,配合 tee 命令可实现 T 形管道

二、bash 编程

  • bash -n FILE : 测试 bash 脚本语法

1、基础语法

1.1、列表生成

  • {startNum..endNum} : 生成数字列表,如 {1..10} 展开为1~10
  • seq : 生成列表命令
    • seq start end : 从一个指定的数值开始,依次生成到另一个数直接薇
    • seq start Steps end : 从第一个数值开始,以指定步长生成列表,如 seq 1 3 10 表示从 1 开始,每次步长为 3 生成列表,到 10 截止。

1.2、for 循环

1
2
3
for varName in arry;do
somrthing
done

1.3、bash 算术运算

  • declare : 指定变量声明类型
    • i : 声明变量为整型
    • x : 声明变量为环境变量,与 export 类似
  • let COMMOND : 将后面的表达式视为算是运算
  • $[COMMOND] : 同 let 相同
  • $((COMMOND)) : 同 let 相同
  • `expr COMMOND` : 同 let 相同

bash 支持常见的算术运算,如 +、-、*、/、++、--、% 等,但是 bash / 运算时进行圆整操作,不会产生小数。

1.4、位置变量

  • $0 : 脚本自身
  • $1 ... : 脚本的第 N 个参数
  • $# : 位置参数的个数
  • $* : 显示所有位置参数
  • $@ : 显示所有位置参数

2、grep 与 正则

grep 用于根据 指定的模式 在文本中搜索内容,其语法如下:

1
grep [选项]... PATTERN [FILE]...
  • v : 反向过滤,显示所有非命中字符的行
  • o : 只显示行当中被模式匹配到的字符,而非整行
  • i : 不区分字符大小写匹配
  • E : 支持扩展正则表达式
  • A # : 显示被模式匹配到的行,极其后面的 # 行
  • B # : 显示被模式匹配到的行,极其前面的 # 行
  • C # : 显示被模式匹配到的行,极其前后的 # 行

2.1、基本正则表达式

默认的 grep 正则工作在贪婪模式下,即尽可能多的匹配更多的字符。

  • 字符匹配
    • . : 匹配任意单个字符
    • [] : 指定范围内的单个字符,如 [a-z]
    • [^] : 指定范围外的单个字符,如 [^A-Z]
  • 常用字符匹配规则
    • [0-9][[:digit:]] : 所有数字
    • [a-z][[:lower:]] : 所有小写字母
    • [A-Z][[:upper:]] : 所有大写字母
    • [a-zA-Z][[:alpha:]] : 所有大小写字母
    • [a-zA-Z0-9][[:alnum:]] : 所有大小写字母加数字
    • [[:space:]] : 所有空白字符
    • [[:punct:]] : 所有标点符号
  • 次数匹配
    • * : 匹配其前面的字符任意次,**.* 代表匹配任意长度任意字符**
    • \? : 匹配其前面的字符0次或1次,\ 代表转义
    • \{m\} : 匹配其前面的字符m次
    • \{m,n\} : 匹配其前面的字符至少每次最多n次
    • \{m,\} : 匹配其前面的字符至少m次
    • \{0,n\} : 匹配其前面的字符最多n次
  • 位置锚定
    • ^ : 锚定行首,必须出现在模式行首
    • $: 锚定行尾,必须写在模式行尾
    • ^$ : 表示空白行
    • \< : 锚定词首
    • \> : 锚定词尾
  • 分组
    • \(\) : 分组,括号内内容当做一个整体对待
  • 引用
    • \1 : 后向引用,引用前面第一个分组模式所匹配的内容,其中数字可根据需要变动,如 \2

2.2、扩展正则表达式

  • 字符匹配

    • . : 任意单个字符
    • [] : 指定范围单个字符
    • [^] : 指定范围外单个字符
  • 次数匹配

    • * : 任意次
    • ? : 0次或1次
    • + : 至少1次
    • {m} : m次
    • {m,n} : 至少m次,最多n次
    • {m,} : 至少m次
    • {0,n} : 最多n次
  • 位置锚定

    • ^ : 锚定行首
    • $ : 锚定行尾
    • \<\b : 锚定词首
    • \>\b : 锚定词尾
  • 分组匹配

    • () : 分组
    • | : 或者

3、bash 条件判断

3.1、bash 测试

bash 中使用如下格式进行测试

1
2
3
test EXPRESSION
[ EXPRESSION ]
[[ EXPREXXION ]]

3.2、bash 判断

bash 一般有以下3种判断

3.2.1、单分支判断
1
2
3
if 条件测试; then
分支语句
fi
3.2.2、双分支判断
1
2
3
4
5
if 条件测试; then
分支语句1
else
分支语句2
fi
3.2.3、多分支判断
1
2
3
4
5
6
7
8
9
10
if 条件测试1; then
分支语句1
elif 条件测试2; then
分支语句2
elif 条件测试3; then
分支语句3
...
else
分支语句n
fi

3.3、整数测试

整数测试为二元表达式,其格式大致为 [ num1 OPRAND num2 ],基本操作如下

  • -gt : 大于
  • -lt : 小于
  • -ge : 大于等于
  • -le : 小于等于
  • eq : 等于

3.4、字符测试

  • > : 大于
  • < : 小于
  • == : 等于,在 bash 中,事实上由于变量赋值时变量不加 $,而等值比较时则会加上 $,所以使用一个 = 也是可以做等值判断的,不过鉴于规范一般不这么写
  • =~ : 左侧是一个字符串,右侧是一个模式,用于判断某个字符串是否满足给定的模式,通常在 [[]] 中使用;模式不要加引号
  • -n : 测试字符串是否为空,不空为真,空为假
  • -z : 测试字符串是否为空,空为真,不空为假

注意,测试时操作符两边要有空格,如 [ "str1" == "str2" ]

3.5、文件测试

-e-a : 测试文件是否存在,如果存在则返回 true
-f : 测试文件是否存在并且为普通文件
-d : 测试文件是否存在并且为目录文件
-b : 测试文件是否存在并且为块设备
-c : 测试文件是否存在并且为字符设备文件
-h-L : 测试文件是否存在并且为符号链接文件
-p : 测试文件是否存在并且为管道文件
-r : 测试文件是否存在并且对当前用户具有读权限
-w : 测试文件是否存在并且对当前用户具有写权限
-x : 测试文件是否存在并且对当前用户具有执行权限
-S : 测试文件是否存在并且为套接字文件
-s : 测试文件是否存在并且文件不为空
file1 -nt file2 : 测试 file1 是否比 file2 更新(最近修改时间)
file1 -ot file2 : 测试 file1 是否比 file2 更老(最近修改时间)
file1 -ef file2 : 测试 file1 和 file2 是否是相同的设备以及 inode 是否相同

3.6、脚本自定义退出

3.6.1、脚本退出状态码

默认 bash 脚本执行完成后,使用 $? 获取脚本执行状态码,其中 0 表示成功,1~255 表示失败。

3.6.2、自定义退出状态码

bash 中使用 exit NUM 命令自定义脚本的退出状态码,如果不指定,那么 bash 默认采用最后一条命令的执行状态作为整个脚本执行状态码;也就是说不论前面的命令执行是否失败,只返回最后一条命令的执行状态码。

3.7、shift

shift : 位置参数轮替

shift 用于动态替换位置参数,如下所示,当该脚本有多个参数是,使用 shift 将自动替换 $1 为后面的参数,类似于 java 的迭代器

1
2
3
4
5
6
7
#!/bin/bash
sum=0
for i in `seq 1 $#`;do
let sum+=$1
shift
done
echo $sum

三、磁盘管理

1、文件系统

  • 按名称存取是文件系统存在的一个主要目的
  • 文件系统是一个软件,对磁盘上存在的二进制进行管理
  • 为了能在一个磁盘上安装多个系统,引入了分区的概念
  • track: 磁道是有厂商划分好的
  • 任意磁盘上的任意扇区,读取的平均时间称为平均寻道时间

2、MBR(Master Boot Record)

MBR(Master Boot Record) 被称为主引导记录,通常存放与磁盘的第0个扇区,其保存着磁盘分区、引导信息。

通常 MBR 为 512 byte,其中 bootloader(引导加载器) 占用 446 byte,剩下的每16个字节引导一个分区,2个字节被填充了2个5A,称之为MBR有效性标记,所以 MBR 分区表状态下的磁盘最多有 4 个主分区。

3、硬盘接口

  • IDE(ATA) : 并口,每个控制器可接两个硬盘,master/slave,133MB/S
  • /dev/hd[a-z]
    • /dev/hda[1-4]
    • /dev/hda[5+] 逻辑分区5开始
  • SCSI : Small Computer System Interface 小型计算机接口,理论速率320mb/s
  • SATA(Serial) : 300Mbps,600Mbps,6Gbps
  • SAS : 6Gbps
  • 从 CentOS6 开始磁盘全部识别为 sda

4、常用命令

  • fdisk : 磁盘分区命令
    • -l : 列出当前系统所有磁盘和分区
    • -d : 删除分区
    • -n : 新建一个分区
    • -p : 列出已有分区
    • -t : 调至分区ID
    • -l : 列出内核支持的分区id
    • -w : 保存退出
    • -q : 不保存退
  • partprobe : 重读系统磁盘信息(CentOS5)
  • partxkpartx : 重读系统磁盘信息(CentOS6)

一般 CentOS6 后两个命令有时不生效,所以规律是按照以下执行可能会生效,实在不行重启…

1
2
3
kpartx -l /dev/sda
kpartx -af /dev/sda
partx -a /dev/sda
  • 显示内核当前读取的硬盘信息 cat /proc/partitions

  • 显示内核当前读取的内存信息 cat /proc/meminfo

  • 显示内核当前已识别的文件系统 cat /proc/filesystem

  • 查看当前系统识别了那些磁盘设备 ls /dev/sda*

  • mkfs DEV : 创建文件系统(格式化)

    • -t FSTYPE DEV : 将指定设备格式化成指定文件系统
  • mke2fs DEV : ext2 文件系统创建的快捷命令,可用于创建其他文件系统,其配置文件位于 /etc/mke2fs,定义了命令默认的创建文件系统行为

    • -t : 指定创建的文件系统,同 mkfs -t
    • -j : 快速创建 ext3 文件系统,同 mkfs -t ext3
    • -L : 指定卷标
    • -b : 指定块大小,一般可选值 1024|2018|4096,默认4k
    • -i : 设置 inode 值(多少字节预留一个 inode),配置文件中有默认值
    • -N : 直接指定预留多少 inode
    • -I : 直接指定 inode 大小
    • -m : 预留管理员空间百分比(用于磁盘沾满时操作数据使用),默认 5%
  • e2label DEV : 查看卷标

  • e2label DEV LABEL_NAME : 设置卷标

  • blkid DEV : 查看磁盘信息,包括全局唯一标示 UUID 和 文件系统类型 TYPE

  • dumpe2fs DEV : 查看磁盘块信息,包括超级块、块组、块位图、inode 位图、inode 表、空闲块、空闲 inode 等

    • -h : 仅显示 超级块信息
    • -o : 指定显示超级块信息
  • tune2fs : 调整磁盘信息,块大小不能调整

    • -l DEV : 显示超级块信息
    • -L LABEL : 设置卷标
    • -m # : 调整预留百分比
    • -j : 调整文件系统,如果原来的文件系统为 ext2,则此选项将无损数据将其转换为 ext3,ext3 转 ext2 直接在挂载时挂载为 ext2 即可
    • -c # : 每挂载 # 次检查文件系统
    • -o [^]mount-options[,...] : 指定默认挂载选项(^代表关闭,不加代表启动),如 acl 文件访问控制列表等
    • -O [^]feature[,...] : 调整其分区特性
  • fsck : 文件系统检测命令

    • -t FSTYPE DEV : 以指定文件系统类型检测磁盘
    • -f DEV : 强行检测
    • -r : 交互式提醒修复错误
    • -a : 自动修复错误
  • e2fsck : 快速检测文件系统(相当于快捷命令,文件系统自动判定)

    • -f : 强制检测
    • -t : 指定执行时间计数
    • -y : 自动回答所有问题,默认全部 yes
  • 交换分区 : 虚拟内存

  • mkswap DEV : 格式化为交换分区

    • -L : 指定卷标
  • swaponswapoff : 启动、禁用交换区

    • -a : 启用所有交换区
    • -p # : 指定优先级(仅 on)
  • hdparm : 读取磁盘硬件信息

    • i : 显示磁盘磁头信息(通过内核)
    • I : 显示磁盘磁头信息(通过硬件)
    • g : 显示磁盘硬件布局信息
    • t : 测试磁盘 buffer cache 信息
    • T : 测试磁盘直接读取写入信息

5、磁盘挂载

  • 挂载:
    • 手动挂载
    • 自动挂载
    • 按需挂载 : 进程访问时挂载,访问结束卸载
  • 挂载点 : 一旦某个目录被作为挂载点,则原目录下所有文件将被暂时隐藏,挂载点空闲时才可被卸载,也可以强制卸载
  • mount [options] [-t fstype] [-o options] DEV DIR : 挂载命令,不带任何选项默认显示当前系统所有已挂在设备,实质是读取了 /proc/mounts,**/etc/mtab 文件存放了所有 mount 命令的挂载点信息**
    • -t : 指定文件系统类型
    • -r : 只读方式挂载
    • -w : 读写挂载
    • -o : 指定额外的 options
    • -L : 根据卷边挂载
    • LABLE='XXXX' : 根据卷标挂载
    • -U : 以 UUID 方式挂载
    • UUID='xxxx' : 以 UUID 方式挂载
    • -a : 自动挂载所有的支持自动挂载的设备(需先在/etc/fstab中定义)
  • mount -o : 设置磁盘硬件属性
    • async : 启用异步 I/O
    • sync : 启用同步 I/O
    • atime : 启用实时更新文件时间戳
    • noatime : 禁用实时更新文件时间戳
    • auto : 启用自动挂载(-a 支持设备)
    • noauto : 禁用自动挂载(-a 支持设备)
    • exec : 开启自动执行
    • noexec : 禁止自动执行
    • group : 此组内用户可挂载该设备
    • _netdev : 禁止网络设备未初始化前挂载,在需要挂载网络硬盘时,如果设置了开机自动挂载,当网络设备未完全初始化前挂载网络硬盘,则可能造成卡死,此选项可确保网络谁被初始化后才被允许挂载
    • remount : 自动重新挂载
    • ro : 挂载为只读
    • rw : 挂载为读写
    • acl : 启用文件访问控制列表
  • umount DEV|MOUNT_POINT : 卸载命令
  • fuser OPTIONS DEV : 查看磁盘访问占用信息
    • -v : 查看哪些用户正在访问目标磁盘
    • -k : 杀死正在访问磁盘进程
    • -m : 指明挂载点(一般km一起使用踢出占用磁盘的用户)
  • df DEV : 查看磁盘占用情况,不加设备显示所有
    • -h : 以以人易读的格式进行显示
    • -i : 显示 inode 信息
  • du : 评估文件占用磁盘空间情况
    • -s : 显示目录大小

6、开机自动挂载

  • /etc/rc.d/rc.sysinit : 系统初始化脚本,包括挂载 /etc/fstab 文件中定义的文件系统挂载点等
  • /etc/fstab : 系统自动挂载配置文件,格式如下 :
待挂载设备挂载点文件系统格式挂载参数转储频率自检顺序
proc/procprocdefaults00
/dev/mapper/vg0-usr/usrext4defaults12
  • 待挂载设备 : 通常为设备文件,也支持卷标 LABEL=xxxx 或 UUID=xxxx 方式
  • 挂载点 : 通常是一个目录,但有些文件系统没有挂载点,如 swap 分区,挂载点即为 swap
  • 挂载选项 : 一般为 defaults,自定义多个的话用逗号隔开
  • 转储频率 : 系统对其进行 dump 频率,0是从不备份,1为每天备份,2为2天备份一次
  • 自检顺序 : 系统开机自检文件系统顺序,1为首先自检,通常是根目录独有,2~9为先后顺序,0为不自检

7、交换分区

交换分区用于在系统内存不够用时将其转储到硬盘,在 /proc/sys/vm/swapiness 文件中有其使用倾向定义;一般当物理内存小于 2G 通常设置为 2*物理内存,2~4G 设置为4G,当大于4G时署名服务器对性能要求很高,基本没有什么要求

  • free : 查看内存使用情况
    • -h : 以人类可读的形式显示
    • -s # : 每隔 # 秒打印一次内存使用情况
    • -c # : 与 -s 配合使用,表示打印 # 次后停止打印
  • dd : 低级复制命令,dd 命令会跨过文件系统直接复制磁盘块,相对于cp属于更低级的复制命令
    • if : input file,源文件
    • of : out file,目标文件
    • bs : 每次复制块大小,可选 [b|kb|m|g]
    • count : 复制块次数
    • oflag=FLAGS : 创建稀疏文件
    • dd if=/dev/sda of=/dev/sdb : 磁盘对拷
    • dd if=/dev/cdrom of=/tmp/linux.iso : iso 镜像提取
    • dd if=/dev/zero of=/dev/sda bs=512 count=1 : 抹掉MBR
    • dd if=/dev/zero of=/swapfile bs=512M count=1 : 创建一个 512M 的本地回环设备文件

8、软链接与硬链接

硬链接 : 硬链接实质上是对同一分区上多个路径指向了同一 inode 的文件,硬链接不可跨分区,目录无法创建硬链接。

软链接 : 软链接实质上与源文件是两个文件,且 inode 不同,但是软连接文件的 inode 中会存储源文件的路径信息,可跨分区,可对目录创建。

  • ln SOURCE_FILE TARGET_FILE : 创建硬链接文件
    • -s : 创建软链接
    • -v : 显示创建过程

9、压缩工具

  • zip : 归档压缩工具,需要指定输出文件,可压缩目录;但是想压缩目录下的文件时必须指定到文件,如 zip tmp.zip /tmp/*
  • gzipgunzip : gzip SRC TARGET 压缩(删除源文件)
    • -d : 同 gunzip 解压缩(删除源文件)
    • -c : 将压缩结果输出到 STDOUT,可使用管道等进行重定向操作
    • -r : 递归压缩指定目录下的所有文件
    • -# : 设置压缩率,默认6,取值1~9,其他压缩命令同样支持
  • zcat : 不解压查看 gzip 压缩包内容
    • -l : 列出压缩包内文件列表
    • -r : 递归列出文件列表
  • bzip2bunzip2 : bzip2 压缩命令
    • -d : 解压文件
    • k : 保留原文件压缩/解压
  • bzcat : 不解压查看 bzip2 压缩包内容
  • xz : xz 压缩命令,更高级的压缩工具,压缩删除源文件
    • -d : 解压文件
  • xzcat : 不解压查看 xz 压缩包内容

10、归档工具

  • tar : 创建归档命令,一般命令格式为 tar [options] -f FILE.tar File1...,其中源文件可以是文件也可以是目录
    • -c : 创建归档
    • -x : 展开归档
    • -t : 不展开查看归档文件列表
    • -z : 调用 gzip 压缩
    • -j : 调用 bzip2 压缩
    • -J : 调用 xz 压缩
    • -v : 展示过程

Linux 笔记
https://mritd.com/2016/06/14/linux-note/
作者
Kovacs
发布于
2016年6月14日
许可协议