# Linux 文件操作命令

URL: https://caijiao.org/linux/commands/file-operations
Source: docs/linux/commands/file-operations.md
Description: Linux文件操作命令详解，包括创建、复制、移动、删除、重命名文件等基本操作，以及文件权限、属性查看与修改等高级操作，提高Linux文件管理效率。

在Linux系统中，文件操作是最基本也是最常见的任务之一。本章节将详细介绍Linux中常用的文件操作命令，包括创建、复制、移动、删除、重命名文件等操作。

## 文件创建命令

### touch 命令

`touch` 命令用于创建空文件或更新文件的时间戳。

```bash
# 创建一个空文件
touch filename

# 创建多个空文件
touch file1.txt file2.txt file3.txt

# 更新文件的访问和修改时间
touch existing_file
```

### echo 命令

`echo` 命令可以将文本内容写入文件。

```bash
# 将文本写入文件
echo "Hello, World!" > filename.txt

# 将多行文本写入文件
cat > filename.txt << EOF
Line 1
Line 2
Line 3
EOF
```

## 文件查看命令

### cat 命令

`cat` 命令用于查看文件内容，也可以合并文件。

```bash
# 查看文件内容
cat filename.txt

# 查看多个文件内容
cat file1.txt file2.txt

# 将多个文件合并为一个文件
cat file1.txt file2.txt > combined.txt
```

### less 命令

`less` 命令用于分页查看文件内容，适合查看大文件。

```bash
less large_file.txt
```

在 `less` 中可以使用以下按键：
- 空格键：向下翻页
- b 键：向上翻页
- 上下箭头键：上下移动一行
- / 键：搜索
- q 键：退出

### more 命令

`more` 命令类似于 `less`，但功能较少。

```bash
more large_file.txt
```

### head 和 tail 命令

- `head` 命令用于查看文件的前几行（默认前10行）
- `tail` 命令用于查看文件的后几行（默认后10行）

```bash
# 查看文件的前10行
head filename.txt

# 查看文件的前n行
head -n 20 filename.txt

# 查看文件的后10行
tail filename.txt

# 查看文件的后n行
tail -n 20 filename.txt

# 实时查看文件的更新（常用于日志文件）
tail -f logfile.txt
```

## 文件复制命令

### cp 命令

`cp` 命令用于复制文件或目录。

```bash
# 复制文件
cp source_file destination_file

# 复制文件到目录
cp source_file destination_directory/

# 复制多个文件到目录
cp file1.txt file2.txt destination_directory/

# 复制目录及其内容（递归复制）
cp -r source_directory destination_directory/

# 复制时保留文件属性
cp -p source_file destination_file

# 复制时显示进度
cp -v source_file destination_file
```

## 文件移动和重命名命令

### mv 命令

`mv` 命令用于移动文件或目录，也可以用于重命名。

```bash
# 移动文件到目录
mv file.txt directory/

# 重命名文件
mv old_name.txt new_name.txt

# 移动目录到另一个目录
mv source_directory destination_directory/

# 移动多个文件到目录
mv file1.txt file2.txt directory/

# 交互式移动，覆盖前提示
mv -i source destination

# 强制移动，直接覆盖
mv -f source destination
```

## 文件删除命令

### rm 命令

`rm` 命令用于删除文件或目录。

```bash
# 删除文件
rm filename.txt

# 删除多个文件
rm file1.txt file2.txt

# 删除目录及其内容（递归删除）
rm -r directory/

# 强制删除文件或目录，不提示
rm -f filename.txt
rm -rf directory/

# 交互式删除，删除前提示
rm -i filename.txt

# 删除空目录
rmdir empty_directory/
```

> **警告**：Linux系统中的删除操作通常是不可恢复的，请谨慎使用 `rm` 命令，特别是 `rm -rf` 组合。

## 文件内容搜索命令

### grep 命令

`grep` 命令用于在文件中搜索指定的文本模式。

```bash
# 在文件中搜索文本
grep "pattern" filename.txt

# 在多个文件中搜索文本
grep "pattern" file1.txt file2.txt

# 递归搜索目录中的所有文件
grep -r "pattern" directory/

# 忽略大小写
grep -i "pattern" filename.txt

# 显示行号
grep -n "pattern" filename.txt

# 显示不匹配的行
grep -v "pattern" filename.txt

# 显示匹配的行数
grep -c "pattern" filename.txt
```

### find 命令

`find` 命令用于在目录中查找文件。

```bash
# 在当前目录中查找文件
find . -name "filename.txt"

# 在指定目录中查找文件
find /path/to/directory -name "filename.txt"

# 使用通配符查找文件
find . -name "*.txt"

# 忽略大小写查找
find . -iname "*.TXT"

# 查找特定类型的文件
find . -type f -name "*.txt"  # 普通文件
find . -type d -name "*dir*"  # 目录

# 查找特定大小的文件
find . -size +100M  # 大于100MB的文件
find . -size -10k   # 小于10KB的文件

# 查找最近修改过的文件
find . -mtime -7  # 最近7天内修改过的文件

# 查找并执行操作
find . -name "*.txt" -exec rm {} \;  # 删除所有.txt文件
```

## 文件权限命令

### chmod 命令

`chmod` 命令用于修改文件或目录的权限。

```bash
# 使用符号表示法修改权限
chmod u+x filename.txt  # 给文件所有者添加执行权限
chmod g+w filename.txt  # 给所属组添加写权限
chmod o-r filename.txt  # 移除其他用户的读权限
chmod a+r filename.txt  # 给所有用户添加读权限

# 使用数字表示法修改权限
chmod 644 filename.txt  # 设置权限为 -rw-r--r--
chmod 755 filename.txt  # 设置权限为 -rwxr-xr-x
chmod 777 filename.txt  # 设置权限为 -rwxrwxrwx（谨慎使用）

# 递归修改目录及其内容的权限
chmod -R 755 directory/
```

### chown 命令

`chown` 命令用于修改文件或目录的所有者和所属组。

```bash
# 修改文件所有者
chown user filename.txt

# 修改文件所有者和所属组
chown user:group filename.txt

# 递归修改目录及其内容的所有者和所属组
chown -R user:group directory/
```

## 文件属性命令

### ls 命令

`ls` 命令用于列出文件或目录的信息。

```bash
# 列出文件或目录
ls

# 列出详细信息
ls -l

# 显示所有文件（包括隐藏文件）
ls -a

# 显示文件大小以人类可读的格式
ls -lh

# 按修改时间排序
ls -lt

# 递归列出目录内容
ls -R
```

### stat 命令

`stat` 命令用于显示文件或文件系统的详细状态信息。

```bash
stat filename.txt
```

## 文件比较命令

### diff 命令

`diff` 命令用于比较两个文件的差异。

```bash
diff file1.txt file2.txt

# 以并排方式显示差异
diff -y file1.txt file2.txt

# 生成补丁文件
diff -u file1.txt file2.txt > patch.txt
```

### cmp 命令

`cmp` 命令用于逐字节比较两个文件。

```bash
cmp file1.txt file2.txt
```

## 文件压缩和解压命令

### gzip/gunzip 命令

- `gzip` 命令用于压缩文件
- `gunzip` 命令用于解压缩.gz文件

```bash
# 压缩文件
gzip filename.txt  # 生成 filename.txt.gz

# 解压缩文件
gunzip filename.txt.gz  # 解压为 filename.txt
```

### zip/unzip 命令

- `zip` 命令用于创建ZIP压缩文件
- `unzip` 命令用于解压缩ZIP文件

```bash
# 创建ZIP文件
zip archive.zip file1.txt file2.txt

# 压缩目录
zip -r archive.zip directory/

# 解压缩ZIP文件
unzip archive.zip

# 列出ZIP文件内容
unzip -l archive.zip
```

### tar 命令

`tar` 命令用于创建和提取归档文件，常与gzip或bzip2一起使用。

```bash
# 创建tar归档
tar -cvf archive.tar file1.txt file2.txt directory/

# 创建gzip压缩的tar归档
tar -czvf archive.tar.gz file1.txt file2.txt directory/

# 创建bzip2压缩的tar归档
tar -cjvf archive.tar.bz2 file1.txt file2.txt directory/

# 提取tar归档
tar -xvf archive.tar

# 提取gzip压缩的tar归档
tar -xzvf archive.tar.gz

# 提取bzip2压缩的tar归档
tar -xjvf archive.tar.bz2

# 列出归档内容而不提取
tar -tvf archive.tar
```

## 总结

本章节介绍了Linux系统中常用的文件操作命令，包括文件的创建、查看、复制、移动、重命名、删除、搜索、权限修改、属性查看、比较和压缩等操作。掌握这些命令对于有效地管理Linux系统中的文件至关重要。

在实际使用中，这些命令通常会结合使用，以完成更复杂的任务。例如，可以使用 `find` 命令查找特定类型的文件，然后使用 `xargs` 命令结合其他命令对这些文件进行批量处理。
