Linux 文件基础知识
文件基本概念
在 Linux 系统中,一切皆文件 。无论是文本、图像、设备还是进程间的通信通道,都以文件的形式存在和管理。Linux 文件采用树形目录结构,以根目录 "/" 为起点,所有文件和目录都挂载在这个树形结构中,形成一个完整的文件系统。
文件类型
Linux 文件主要分为以下几种类型,可通过 ls -l 命令查看文件类型,命令输出的第一个字符代表文件类型:
- 普通文件(-) :最常见的文件类型,包括文本文件、二进制文件、脚本文件等。例如,test.txt 是文本文件,a.out 是编译后的二进制文件。
- 目录文件(d) :用于存放其他文件和目录,类似 Windows 中的文件夹。如 /home 目录通常存放用户的个人文件。
- 链接文件(l) :分为硬链接和软链接(符号链接)。软链接类似于 Windows 的快捷方式,指向另一个文件;硬链接则是文件的另一个入口,与原文件共享相同的 inode。
- 设备文件(b/c) :与硬件设备相关,b 表示块设备(如硬盘、U 盘),c 表示字符设备(如键盘、鼠标),通常存放在 /dev 目录下。
- 管道文件(p) :用于进程间通信,是一种临时的文件类型。
- 套接字文件(s) :用于网络通信,支持不同进程之间的数据交互,常见于 /var/run 目录。
bash
ll | grep '^s' #查找当前目录下的套接字文件
Linux 系统目录结构
- /(根目录) :整个文件系统的起点,所有目录和文件都包含在根目录下。
- /bin:存放系统必备的二进制可执行文件,如 ls、cp、mv 等基本命令,普通用户也可执行。
- /sbin:存放系统管理的二进制可执行文件,如 reboot、shutdown 等,通常需要 root 权限才能执行。
- /home:普通用户的主目录存放位置,每个用户在该目录下有一个以用户名命名的子目录,用于存放用户的个人文件和设置。
- /root:root 用户的主目录,与普通用户的主目录不同,它直接位于根目录下。
- /etc:存放系统配置文件,如网络配置文件 network/interfaces、用户配置文件 passwd 等。
- /usr:存放系统应用程序和文件,类似于 Windows 的 Program Files 目录,其中 /usr/bin 存放用户常用命令,/usr/lib 存放程序运行所需的库文件。
- /var:存放经常变化的文件,如日志文件(/var/log)、邮件(/var/mail)、缓存文件等。
- /tmp:存放临时文件,系统重启后该目录下的文件会被清空。
- /dev:存放设备文件,如硬盘 sda、光驱 sr0 等。
- /proc:虚拟文件系统,存放系统进程和内核状态的信息,这些文件并不实际存储在硬盘上,而是由内核动态生成,如 /proc/cpuinfo 包含 CPU 信息。
浏览、切换、目录大小
目录创建
mkdir
命令创建目录 :
bash
mkdir test #创建目录
mkdir -r test/level1/level2 #递归创建目录
浏览
ls (list) 列出目录内容:
bash
ls -l # 长格式显示文件和目录详细信息
ls -a # 显示所有文件(包括隐藏文件)
ls -lh # 以人类可读的方式显示文件大小
ls -lt # 按修改时间排序显示
ls -R # 递归显示子目录内容
tree:以树状结构显示目录
bash
tree # 显示当前目录的树状结构
tree -L 2 # 只显示两级目录结构
tree -a | tail -1 #只显示统计信息
切换
cd:切换目录
bash
cd /path/to/directory # 切换到指定目录
cd .. # 返回上级目录
cd - # 返回上次所在目录
cd # 回到用户主目录
pwd:显示当前工作目录
bash
pwd # 打印当前所在目录的完整路径
查看目录大小
du:估算文件空间使用情况
bash
du -sh /path/to/directory # 显示目录总大小(-s:汇总,-h:人类可读)
du -h --max-depth=1 # 显示当前目录下一级子目录的大小
df:显示文件系统磁盘空间使用情况
bash
df -h # 以人类可读的方式显示所有文件系统的使用情况
df -h / # 显示根目录所在文件系统的使用情况
文件创建、删除、详细信息
文件创建
touch:创建空白文件,还能更新已有文件的时间戳。
bash
touch newfile.txt # 创建一个名为newfile.txt的空白文件
touch file1 file2 # 同时创建多个文件
cat > : 创建文件并输入内容,按 Ctrl + D
结束输入。
特点:若文件已存在,会覆盖原有内容;适合快速写入少量文本。
bash
# 创建file.txt并输入两行内容
cat > file.txt
Hello, Linux!
This is a test file.
^D # 按Ctrl+D保存退出
echo > 或 echo >>: 创建文件并写入单行内容。
echo "内容" > 文件名:覆盖写入(文件不存在则创建)。 echo "内容" >> 文件名:追加写入(文件不存在则创建)。
bash
# 覆盖写入(创建新文件)
echo "Server started at 9:00" > status.log
# 追加写入(文件存在则添加内容)
echo "Error: connection failed" >> status.log
vim 编辑器:创建并编辑文件。通过文本编辑器创建文件,适合编写复杂内容(需先安装编辑器)。
bash
# 用vim创建并编辑file.txt(按i进入编辑模式,Esc+`:wq`保存退出)
vim file.txt
# 用nano创建并编辑note.txt(更简单的编辑器,Ctrl+O保存,Ctrl+X退出)
nano note.txt
文件删除
rm(remove)命令用于删除文件或目录,删除后无法恢复,使用时需格外谨慎。
bash
# 复制文件到目标目录
cp memo.txt ~/backup/ # 把memo.txt复制到backup目录
# 复制文件并重命名(目标是新文件名)
cp data.csv data_backup.csv # 复制data.csv为data_backup.csv
# 复制目录(必须加-r)
cp -r src/ dest/ # 递归复制src目录到dest目录(dest不存在则创建)
# 复制目录时保留属性(如权限、时间)
cp -a project/ project_backup/ # 适合备份目录,保留所有原始属性
# 批量复制文件(通配符)
cp *.jpg ~/images/ # 复制所有.jpg文件到images目录
# 复制前提示覆盖
cp -i old.txt new.txt # 若new.txt已存在,提示"是否覆盖?"
# 显示复制过程
cp -v document.pdf ~/docs/ # 输出:'document.pdf' -> '/home/user/docs/document.pdf'
详细信息
bash
stat filename.log
文件移动、复制
文件移动 ( 剪切 / 重命名 )
mv(move)命令用于移动文件 / 目录,也可实现重命名,是 Linux 中最常用的命令之一。
-i
:若目标文件已存在,移动前提示确认(避免误覆盖)。-f
:强制移动,覆盖目标文件时不提示(慎用)。-v
:显示移动过程的详细信息(verbose)。
bash
# 移动文件到目标目录(目标目录必须存在)
mv document.txt ~/Documents/ # 把document.txt移动到用户的Documents目录
# 重命名文件(源和目标在同一目录)
mv old_name.jpg new_name.jpg
# 移动目录(无需递归参数,mv默认支持目录移动)
mv project/ ~/workspace/ # 把project目录移动到workspace目录
# 批量移动同类型文件(用通配符*)
mv *.txt ~/text_files/ # 把当前目录所有.txt文件移动到text_files目录
# 移动时提示覆盖(安全操作)
mv -i report.pdf ~/backup/ # 若backup目录已有report.pdf,会提示是否覆盖
# 显示移动过程
mv -v image.png photos/ # 输出:'image.png' -> 'photos/image.png'
文件复制
cp(copy)命令用于复制文件或目录,需注意复制目录时的递归参数。
-r
或-R
:递归复制目录(必须加,否则无法复制目录)。-i
:覆盖目标文件前提示确认。-f
:强制复制,覆盖时不提示。-v
:显示复制过程的详细信息。-p
:保留源文件的权限、时间戳等属性。-a
:归档复制(相当于-dR --preserve=all
,保留所有属性,适合备份)。
bash
# 复制文件到目标目录
cp memo.txt ~/backup/ # 把memo.txt复制到backup目录
# 复制文件并重命名(目标是新文件名)
cp data.csv data_backup.csv # 复制data.csv为data_backup.csv
# 复制目录(必须加-r)
cp -r src/ dest/ # 递归复制src目录到dest目录(dest不存在则创建)
# 复制目录时保留属性(如权限、时间)
cp -a project/ project_backup/ # 适合备份目录,保留所有原始属性
# 批量复制文件(通配符)
cp *.jpg ~/images/ # 复制所有.jpg文件到images目录
# 复制前提示覆盖
cp -i old.txt new.txt # 若new.txt已存在,提示"是否覆盖?"
# 显示复制过程
cp -v document.pdf ~/docs/ # 输出:'document.pdf' -> '/home/user/docs/document.pdf'