Linux系统文件管理

文件管理
挂载光盘 :/misc/cd
systemctl status autofs
如果运行:
yum -y installs autofs
systemctl start autofs
systemctl enable autofs
systemctl enable --now autofs (前两个命令同时进行)

文件系统目录结构:
文件系统从根目录下开始,用“/”表示
文件或目录被组织成一个单根倒置树结构
以.开头为隐藏文件
路径分隔/
文件名最长255字节
路径在内文件名称最长4095字节
蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 灰色-->其他文件
每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容

文件系统的目录功能:
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
b: block device,随机访问
c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: universal shared, read-only data
bin: 保证系统拥有完整功能而提供的应用程序
sbin:
lib:32位使用
lib64:只存在64位系统
include: C程序的头文件(header files)
share:结构化独立的数据,例如doc, man等
local:第三方应用程序的安装位置
bin, sbin, lib, lib64, etc, share
/var: variable data files
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt下的应用程序存储可变数据
run: 运行中的进程相关数据,通常用于存储进程pid文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置

Linux文件类型:
ll 显示文件
开头有: -为一般文件
c为字符设备
b为块设备
d为目录
l链接文件link
p管道文件pipe
s套接字文件socket
hexdump -c 二进制工具(查看文件字节二进制)
dd if=/dev/zero input of=f2.txt 从文件里读数据

文件操作命令:
pwd 查看当前路径(特殊场景下,相对于某目录的路径)
pwd -P 显示真实路径
环境变量:
OLDPWD 上一次目录路径
PWD 当前目录路径
绝对路径和相对路径:
绝对路径:以正斜杠/ 即根目录开始
完整的文件的位置路径,可用于任何想指定一个文件名的时候
相对路径:不以斜线开始
一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置
可以作为一个简短的形式指定一个文件名
dirname 只取路径,不要文件名
basename 只取文件名,不要路径

cd 切换目录
cd -p 切换物理路径,非软链接路径
cd.. 切换至父目录
cd 切换至用户主目录
cd - 切换至上次工作目录

ls 外部命令 列出当前目录内容或指定内容
ls -a 查看包括隐藏文件
ls -R 表示目录递归
ls -l 查看文件下内容
ls -dl 查看目录本身内容和符号链接信息
ls -1 文件分行显示
ls -S 按从小到大排序
ls -t 按Mtime排序
ls -u 配合-t使用,显示按atime从新到旧排序
ls -U 按目录存放顺序显示
ls -X 按文件后缀排序

变量:
/etc/DIR_COLORS
@LS_COLORS 定义不同后缀文件颜色

.当前目录
../上级目录 ../..上级目录的上级目录

modify time 文件修改时间
change time 文件的属性更改时间ll --time=ctime 文件(anaconda-ks.cfg)
accesst time 文件内容更改时间
stat 文件 查看文件所有时间(可查看节点编号)
Inode 唯一编号
chown 更改文件所有者 chown liu 文件
magic number

file 查看文件类型
file -f 读取文件内容对内容批量分析
file -b 列出文件辨识结果时,不显示文件名称
file -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
file -L 查看对应软链接对应文件的文件类型
file --help 显示命令在线帮助

ELF 二进制文件(cat 只能看文本文件)
hexdump -C 二进制工具
mv /bin/ls /bin/ls.txt 修改文件名称

Linux和windows区别:
在Linux中回车和换行用一个字节表示,windows中回车和换行分别用两个表示
更改文本格式:
dos2unix (window转化linux)
unix2dos (Linux转化windows)
sz 将文件从Linux系统传到windows系统
lrzsz (yum -y instell lrzsz 安装之后windows文件可拖至Linux中)
iconv -l 查看全球编码
转换文件字符集编码:
iconv -f gb2312 windows.txt -o windows1.txt (gb2312转换为utf8)
iconv -f utf8 -t gb2312 windows1.txt -o windows11.txt(utf8转换为gb2312)

文件通配符:
可以用来匹配符合条件的多个文件,方便管理文件
* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+和. 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 字母
[A-Z] 字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符

在Linux系统中预定义的字符类:
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z
[:upper:]: 任意大写字母,表示 A-Z
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
例:
ls file[a-c].txt 会列出a.txt ,A.txt,b.txt,B.txt,c.txt(小大小大格式排列)
ls file[[:lower:]].txt 列出所有小写字母开头的txt
* 表示任意字符串(匹配不了隐藏文件)
rm -f * 删除本目录下所有文件(删不了隐藏文件)
ls -A 显示目录下所有文件 (不包括. ..)
ls -d.* 显示隐藏文件和目录列表
ls -d.*/ 显示隐藏文件目录

touch 不存在的文件 ,创建文件(通配符不识别,通配符用于搜索文件,过滤现有文件)
存在的文件,只会刷新时间
-a 仅改变 atime和ctime
-m 仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
-c 如果文件不存在,则不予创建

复制文件
cp 实现文字或目录的复制(复制内容不变,属性会变化)
cp /etc/issue /data/issue.bak
cp -p 保留属性复制
cp -r,-R 递归(复制文件夹里所有文件)
cp -a 保留所有属性(用来备份的命令)
cp -av 显示复制过程
cp -i 如果目标存在,覆盖前提示是否覆盖
cp -n 不覆盖,注意两者顺序
cp -d --no-dereference --preserv=links 不复制原文件,只复制链接名
cp -b 目标存在,覆盖前先备份,形式为filename~,只保留最近的一个版本
cp --backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留多
个版本

mv 移动和重命名文件
同一分区移动数据,速度很快:数据位置没有变化
不同分区移动数据,速度相对慢:数据位置发生了变化
. 当前目录(可以直接复制.)
..上级目录
-i 交互式
-f 强制
-b 目标存在,覆盖前先备份

rename 批量修改文件名
rename cof cof.bak *
rename .bak ‘ ‘ *

rm 删除文件 (命令危险,用mv代替rm)
rm -i 交互式
rm -f 强制删除
rm -r 递归
--no-preserve-root 删除/
rm -rf .【^.】* 删除当前目录下的隐藏文件
rm -rf * .[^.] * 删除当前目录下隐藏和非隐藏文件
rm -rf /* 删除根目录
rm -- -f 如果删除的文件“-f”带有“-”,可以用--
shred(安全删除文件)
-z 最后一次覆盖添加0,以隐藏覆盖操作
-v 能够显示操作进度
-u 覆盖后截断并删除文件
-n # 指定覆盖文件内容的次数(默认值是3次)

目录操作
tree 显示目录树
tree -d 只列文件夹,不列文件
tree -L level: 指定显示的层级数目
tree -P pattern: 只显示由指定wild-card pattern匹配到的路径
显示目录结构(需要安装 dnf -y install tree)

创建目录
mkdir dir1 建立文件夹
mkdir -p dir1/dir2/dir3 (上级文件夹空直接创建)
mkdir -pv 能看到创建过程
删除空目录
rmdir dir1 删除文件夹(空文件夹)
rmdir -p dir1/dir2/dir3

文件元数据和节点表
块文件单位:4k
直接指针和间接指针(低于48k用直接,高于用间接)
双重间接
节点编号(可复用,有使用范围)
不同分区中可以有两个不同的文件使用相同的节点编号,不能一个文件有多个节点编号。
节点表(目录不放在节点表)
一个文件移动到新目录,没有移动到新分区,节点编号不改变,如果跨分区,节点编号会改变。
df -i 可查看分区允许的节点标号
1问:提示空间no space left on device ,但df可以看到空间很多,为什么?
答:节点编号用完了,没有空余的节点编号。
2问:通过df -h查看到boot空间还有很多,却运行占用过大,怎么回事并如何解决?
dd if=/dev/zero of=/boot/bigfile bs=1M count=700(创建大文件)[实验:创建一个大文件在boot下]
boot下运行占用过大,释放运行空间:
lsof |grep delete 查看正在运行的空间
如果删除的文件正在运行,不会立即释放空间,释放运行文件空间即可:
cat /dev/null > /boot/big 清除释放大文件(不删除文件,只释放内容)
> /boot/bigfile (这个方法不是所有shell都支持)

链接
硬链接(hard)
实现一个文件拥有多个文件名
ln =link 创建硬链接文件
ln f1.txt dir1/f1.txt
ll -i !*(查看文件)(用户前的数字为链接数)
只要有一个文件名文件都可以访问,删除几个少几个文件名
注意:不可以跨分区创建硬链接,不可以用文件夹创建硬链接
drop table message=rm -f /data/mysql/message.idb(大文件)
ln /data/mysql/message.idb /data/backup/message.idb link

软链接(soft)符号链接
相当于win里的快捷方式
ln -s f1.txt f1.txt.link
软链接文件依赖于原始文件
ln -s ../f1.txt dir1/f1.txt.link2
注意:软链接支持跨分区,也支持文件夹
相对路径:原始文件相对于软链接的相对目录
软链接指向内容想改变的话,可以先把软链接删掉,在创建新的软链接指向新的文件内容。(例软件升级,软件回滚)
rm -rf mysql 删除软链接,源文件存在
rm -rf mysql/ 删除源文件
面试:软链接和硬链接的区别:

文件夹的链接数至少都是2个 ll -i dir1/ -a
软链接:/dev/null /dev/null1 (不支持跨区创建)

Linux系统文件管理

上一篇:C# 自定义控件入门


下一篇:Matlab 矩阵【Mark】