文件系统
基本概念¶
- 整个系统都在根目录/下
- 一切皆是目录,硬件设备,系统信息(
\proc
进程信息也通过目录进行展示) - 与 windows 不同的是,windows 中磁盘是最高级,每个磁盘有自己的目录;但是 linux 中所有磁盘也都挂在一个目录里面
- 一切皆是目录,硬件设备,系统信息(
-
/dev
包含了所有的设备文件,包含字符设备和块设备,系统像访问文件那样与硬件设备交互,对于这里面的硬盘只是设备的抽象,不顾纳新是否被挂载以及如何使用/mnt
临时挂在文件系统的地方,用于访问点上的文件系统
-
linux 中层级用/表示,windows 用\(//)
- 此外开头一定会有一个/ 表示根目录
-
之后的/表示层级关系
-
文件结构
/bin
- 基本命令二进制文件/sbin
- 基本的系统二进制文件,通常是 root 运行的/dev
- 设备文件,通常是硬件设备接口文件/etc
- 主机特定的系统配置文件/home
- 系统用户的主目录/lib
- 系统软件通用库/opt
- 可选的应用软件/sys
- 包含系统的信息和配置/tmp
- 临时文件 (/var/tmp
) 通常重启时删除/usr/
只读的用户数据/usr/bin
- 非必须的命令二进制文件/usr/sbin
- 非必须的系统二进制文件,通常是由 root 运行的/usr/local/bin
- 用户编译程序的二进制文件/var
-变量文件像日志或缓存
-
路径
- 绝对路径:以根目录为起点
- 相对路径:以当前路径为起点
- 特殊路径符
- . 表示当前目录 cd ./Desktop 等价于 cd Desktop
- .. 表示上一级目录 cd .. 返回上一级目录 cd../.. 上两级
- ~ HOME 目录
基本命令¶
ls [-a -l -h] [linux 路径] - 选项 - -a 列出全部的文件(包含隐藏的文件和文件夹) - -l 以列表的形式展现详细内容 - -h 与 l 一起用,-hl 以 kb/mb 等显示文件大小
- cd 切换工作目录
-
pwd 输出当前工作目录(查看当前所处的位置)
-
mkdir [-p] linux 路径新建文件夹
- -p 自动创建不存在的父目录,即连续创建多级目录
-
创建文件需要修改权限,HOME 文件夹外无法成功
-
touch linux 路径创建路径/文件
- cat linux 路径 查看文件内容
- more linux 路径翻页查看
- 空格下一页
-
q 退出查看
-
cp [-r] 路径 1 路径 2 复制文件(夹)
- -r 用于复制文件夹
-
从路径 1 复制到路径 2
-
mv 路径 1 路径 2 移动文件(夹)
-
可用于重命名 mv test 01. txt test 02. txt
-
rm [-r -f] 路径 1 路径 2 ... 删除
- -r 用于删除文件夹
- -f 强制删除,不弹出提示(管理员用户)
-
一次可以删除多个
-
grep [-n] 关键字文件路径,通过关键字过滤文件行
- -n 在结果中显示匹配的行号
-v
反向匹配-E
参数用于启用扩展正则表达式匹配模式。- 关键字,表示过滤的关键字,包含空格等特殊符号时用“”包住
- 文件路径,要过滤内容的文件,可作为内容输入端口 (可以由管道符输入)
-C
:获取查找结果的上下文(Context);grep -C 5
会输出匹配结果前后五行。当需要搜索大量文件的时候,使用-R
会递归地进入子目录并搜索所有的文本文件。-
rg 更好用
-
wc [-c -m -l -w] 文件路径,统计文件信息
- -c 统计 bytes 数目
- -m 统计字符数目
- -l 统计行数
- -w 统计单词数目
- 默认输出行数+单词数+字节数
-
文件路径,要统计内容的文件,可作为内容输入端口
-
which 要查找的命令(用于查找环境变量下的命令)
- 命令如 ls 本质上是一个个程序
-
which 用于查看 which 的程序文件在哪里
-
通配符
- * 匹配任意内容
- test* 以 test 开头
- *test 以 test 结尾
-
*test* 包含 test
-
find 起始路径 -name (查找方式) “名称”(用于查找文件)
- 可以结合,通配符使用
- find 起始路径 -size +(-) n[单位] ,按照文件的大小查找
- +-表示大于和小于
- n 表示数字
- 单位:k 表示 kb,M 表示 MB,G 表示 GB
- 如 find / -size-10 k
# 查找所有名称为src的文件夹(.表示从当前目录开始查找)
find . -name src -type d
# 查找所有文件夹路径中包含test的python文件
find . -path '*/test/*.py' -type f
# 查找前一天修改的所有文件
find . -mtime -1
# 查找所有大小在500k至10M的tar.gz文件
find . -size +500k -size -10M -name '*.tar.gz'
# 删除全部扩展名为.tmp 的文件
find . -name '*.tmp' -exec rm {} \;
# 查找全部的 PNG 文件并将其转换为 JPG
find . -name '*.png' -exec convert {} {}.jpg \;
.
表示表示从当前路径开始搜索
- fd
就是一个更简单、更快速、更友好的程序,它可以用来作为 find
的替代品。
- echo 内容(可以用双引号包含)
- 用于在命令行内输出内容
- 用反引号 `包含的内容会被作为命令执行
-
如 echo `ls`
-
重定向符
- >将左侧命令结果覆盖写入右侧指定文件
- >>将左侧命令追加写入右侧文件中
- 如 echo "xxx" > text. txt
- >和|都是重定向前一项的输出作为后一项的输入,但是>仍使用前一项作为命令的输出,而|则会使用后一项
- xargs 将来自管道的输入作为参数传递给指定的命令。
rustup toolchain list | grep nightly | grep -vE "nightly-x86" | sed 's/-x86.*//' | xargs rustup toolchain uninstall
-
更好的阅读模式
| less
less ssh.log
。
-
tail [-f -num] Linux 路径,查看文件尾部内容,跟踪文件最新更改
- -f 表示持续跟踪
- 会实时显示文件内容的更改(当此文件在其它终端中被修改时)
- -num 表示查看尾部多少行,默认为 10
ls -l / | tail -n1
文件权限¶
磁盘管理¶
df
查看磁盘容量- 通常来说
/dev/sdx
表示物理磁盘
- 通常来说
du
查看目录的容量- 限制查询深度:
du -h -d 0 ~
只查看一级目录 -h
更易读的单位-a
显示所有文件的大小-s
仅显示总计
- 限制查询深度:
-
dd
命令用于复制文件,但是可以直接与硬件设备进行交互,处理二进制数据流,如直接对硬盘分区进行读写dd if=输入文件 of=输出文件 [选项]
- 从标准输入读取并输出到标准输出
dd if=/dev/stdin of=/dev/stdout bs=10 count=1
- bs 指定块的大小,count 指定块的数目
- 还可以对输入的数据进行一些简单处理,如转化为大写
dd if=/dev/stdin of=test bs=10 count=1 conv=ucase
-
挂载硬盘
- (可选)创建虚拟镜像
dd if=/dev/zero of=virtual.img bs=1M count=256
- 格式化磁盘:
sudo mkfs.ex4 virtual.img
- 挂载磁盘:
mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]
mount -o loop -t ext4 virtual.img /mnt
- 只读挂载
mount -o loop --ro virtual.img /mnt
- 卸载挂载
sudo umount /mnt
- (可选)创建虚拟镜像
-
磁盘分区
- 查看分区信息
sudo fdisk -l
- 为磁盘进行分区
sudo fdisk virtual.img
- 输入
n
新建分区,之后设置种类大小 id 等信息 - 输入
p
查看 w
执行并退出
- 查看分区信息
- MBR 分区
- 主分区是可以包含操作系统的(MBR 分区方案中一块硬盘最多四个主分区),可以被操作系统用于启动
- 扩展分区不直接存储文件,可以包含一个或多个逻辑分区,硬盘上可以有一个扩展分区
- 逻辑分区可以用作文件系统
- GPT 分区:较新,不区分主分区,支持多大 128 个分区,不需要扩展分区以及逻辑分区