# Linux 目录操作命令

URL: https://caijiao.org/linux/commands/directory-operations
Source: docs/linux/commands/directory-operations.md
Description: Linux目录操作命令完全指南，包括目录的创建、切换、查看、删除、复制和移动等操作，以及目录权限管理和导航技巧，提高Linux文件系统的管理效率。

在Linux系统中，目录是文件系统的重要组成部分，用于组织和存储文件。本章节将详细介绍Linux中常用的目录操作命令，包括目录的创建、切换、查看、删除、复制和移动等操作。

## 目录创建命令

### mkdir 命令

`mkdir` 命令用于创建新目录。

```bash
# 创建单个目录
mkdir directory_name

# 创建多个目录
mkdir dir1 dir2 dir3

# 创建嵌套目录（父目录不存在时会自动创建）
mkdir -p parent_dir/child_dir/grandchild_dir

# 创建目录时设置权限
mkdir -m 755 directory_name
```

## 目录切换命令

### cd 命令

`cd` 命令用于切换当前工作目录。

```bash
# 切换到指定目录
cd /path/to/directory

# 切换到用户主目录
cd ~
cd

# 切换到上一级目录
cd ..

# 切换到上一次所在的目录
cd -

# 切换到当前目录的子目录
cd subdirectory
```

## 目录查看命令

### ls 命令

`ls` 命令用于列出目录内容。

```bash
# 列出当前目录内容
ls

# 列出指定目录内容
ls /path/to/directory

# 列出详细信息
ls -l

# 显示所有文件（包括隐藏文件）
ls -a
ls -la  # 组合选项

# 显示文件大小以人类可读的格式
ls -lh

# 按修改时间排序
ls -lt
ls -ltr  # 反向排序

# 按文件大小排序
ls -lhS

# 递归列出目录内容
ls -R
```

### tree 命令

`tree` 命令用于以树状结构显示目录内容。

```bash
# 安装tree命令（如果未安装）
# Debian/Ubuntu
sudo apt install tree
# CentOS/RHEL
sudo yum install tree

# 显示当前目录的树状结构
tree

# 显示指定目录的树状结构
tree /path/to/directory

# 限制显示的层级
tree -L 2  # 只显示2层

# 显示所有文件（包括隐藏文件）
tree -a

# 显示文件大小
tree -h
```

### du 命令

`du` 命令用于显示目录或文件的磁盘使用情况。

```bash
# 显示当前目录的磁盘使用情况
du

# 显示指定目录的磁盘使用情况
du /path/to/directory

# 显示总大小
du -s

# 以人类可读的格式显示
du -h

# 显示目录及其子目录的大小
du -h --max-depth=1

# 显示最大的文件和目录
du -h | sort -hr | head -n 10
```

## 目录删除命令

### rmdir 命令

`rmdir` 命令用于删除空目录。

```bash
# 删除空目录
rmdir empty_directory

# 删除多个空目录
rmdir dir1 dir2 dir3

# 删除嵌套空目录（如果父目录也变为空）
rmdir -p parent_dir/child_dir
```

### rm 命令

`rm` 命令用于删除文件和目录，使用 `-r` 选项可以删除非空目录。

```bash
# 删除非空目录及其内容
rm -r directory

# 强制删除目录，不提示
rm -rf directory

# 交互式删除，删除前提示
rm -ri directory
```

> **警告**：使用 `rm -rf` 命令时要特别小心，因为它会强制删除目录及其所有内容，且不会给出任何提示，这可能导致重要数据丢失。

## 目录复制命令

### cp 命令

`cp` 命令用于复制文件和目录，使用 `-r` 选项可以递归复制目录。

```bash
# 复制目录及其内容
cp -r source_directory destination_directory

# 复制目录并保留文件属性
cp -rp source_directory destination_directory

# 显示复制过程
cp -rv source_directory destination_directory

# 交互式复制，覆盖前提示
cp -ri source_directory destination_directory
```

## 目录移动和重命名命令

### mv 命令

`mv` 命令用于移动或重命名文件和目录。

```bash
# 重命名目录
mv old_directory_name new_directory_name

# 移动目录到另一个位置
mv source_directory /path/to/destination/

# 交互式移动，覆盖前提示
mv -i source_directory destination_directory

# 强制移动，直接覆盖
mv -f source_directory destination_directory
```

## 目录权限命令

### chmod 命令

`chmod` 命令用于修改目录的权限。

```bash
# 使用符号表示法修改权限
chmod u+rwx directory  # 给所有者添加读、写、执行权限
chmod g+rx directory   # 给所属组添加读、执行权限
chmod o+x directory    # 给其他用户添加执行权限

# 使用数字表示法修改权限
chmod 755 directory    # 设置权限为 drwxr-xr-x
chmod 775 directory    # 设置权限为 drwxrwxr-x
chmod 700 directory    # 设置权限为 drwx------

# 递归修改目录及其内容的权限
chmod -R 755 directory
```

### chown 命令

`chown` 命令用于修改目录的所有者和所属组。

```bash
# 修改目录所有者
chown user directory

# 修改目录所有者和所属组
chown user:group directory

# 递归修改目录及其内容的所有者和所属组
chown -R user:group directory
```

## 目录属性命令

### stat 命令

`stat` 命令用于显示目录或文件的详细状态信息。

```bash
stat directory
```

### find 命令

`find` 命令用于在目录树中查找文件和目录。

```bash
# 查找目录
find /path/to/search -type d -name "directory_name"

# 查找最近修改过的目录
find /path/to/search -type d -mtime -7  # 最近7天内修改过的目录

# 查找特定权限的目录
find /path/to/search -type d -perm 755

# 查找并执行操作
find /path/to/search -type d -name "*.dir" -exec ls -ld {} \;
```

## 目录导航技巧

### pwd 命令

`pwd` 命令用于显示当前工作目录的完整路径。

```bash
pwd
```

### pushd 和 popd 命令

`pushd` 和 `popd` 命令用于管理目录栈，可以方便地在多个目录之间切换。

```bash
# 将当前目录压入栈并切换到新目录
pushd /path/to/directory

# 显示目录栈
pushd

# 切换到栈顶目录
pushd +0  # 保持栈不变

# 切换到栈中的其他目录
pushd +1  # 切换到栈中的第二个目录

# 从栈中弹出目录并切换到它
popd

# 从栈中弹出特定目录
popd +1  # 弹出栈中的第二个目录
```

### 别名（Alias）

可以创建别名来简化常用的目录操作命令。

```bash
# 在当前shell会话中创建别名
alias ll='ls -la'
alias ..='cd ..'
alias ...='cd ../..'
alias tree1='tree -L 1'
alias tree2='tree -L 2'

# 永久添加别名到shell配置文件
# 编辑 ~/.bashrc 或 ~/.zshrc 文件，添加上述别名命令
```

## 总结

本章节介绍了Linux系统中常用的目录操作命令，包括目录的创建、切换、查看、删除、复制和移动等操作，以及目录权限管理和导航技巧。掌握这些命令对于有效地管理Linux文件系统至关重要。

目录操作命令是Linux用户日常工作中使用最频繁的命令之一，熟练掌握这些命令可以大大提高工作效率。在实际使用中，这些命令通常会结合使用，以完成更复杂的任务。
