mkdir 命令(Make Directory)是Linux和Unix系统中用于创建新目录的基本命令。它是文件系统管理中最常用和最基础的命令之一,允许用户创建单个目录或多级目录结构。
mkdir 目录名mkdir 目录名 或 md 目录名mkdir [选项] 目录名 [目录名2 ...]
可以同时创建多个目录,目录名之间用空格分隔。
| 选项 | 说明 |
|---|---|
-p 或 --parents |
递归创建目录,如果父目录不存在则一并创建 |
-m 或 --mode=MODE |
设置目录的权限模式(类似chmod) |
-v 或 --verbose |
显示每个创建的目录信息 |
--help |
显示帮助信息 |
--version |
显示版本信息 |
-Z |
设置安全上下文(SELinux系统) |
# 在当前目录创建名为"documents"的目录
mkdir documents
# 创建带空格的目录名(使用引号)
mkdir "my documents"
# 在指定路径创建目录
mkdir /home/user/downloads
# 创建多个目录
mkdir dir1 dir2 dir3
# 创建多级目录(如果父目录不存在会报错)
mkdir /home/user/projects/2024/java
# 使用-p选项递归创建(推荐)
mkdir -p /home/user/projects/2024/java
# 创建复杂的目录结构
mkdir -p project/{src,test,docs,lib}
使用花括号扩展创建多个子目录:
project/
├── src/
├── test/
├── docs/
└── lib/
# 创建目录并设置权限为755(rwxr-xr-x)
mkdir -m 755 public_dir
# 创建目录并设置权限为700(仅所有者可读写执行)
mkdir -m 700 private_dir
# 创建目录并设置权限为777(所有人可读写执行)
mkdir -m 777 shared_dir
# 创建目录并设置粘滞位(只有所有者可以删除文件)
mkdir -m 1777 tmp_dir
权限说明:
# 显示每个创建的目录信息
mkdir -v new_directory
# 输出: mkdir: 已创建目录 'new_directory'
# 递归创建并显示信息
mkdir -pv /home/user/projects/{src,test,lib}
# 输出:
# mkdir: 已创建目录 '/home/user/projects/src'
# mkdir: 已创建目录 '/home/user/projects/test'
# mkdir: 已创建目录 '/home/user/projects/lib'
# 使用变量创建目录
username="john"
mkdir "/home/${username}/documents"
# 使用日期创建目录
mkdir "backup_$(date +%Y%m%d)"
# 创建序列目录
mkdir dir{1..10}
# 创建带前缀的序列目录
mkdir section_{A..D}
# 创建数字补零的序列目录
mkdir image_{001..005}
#!/bin/bash
# safe_mkdir.sh - 安全创建目录的脚本
DIR_PATH="/var/www/myapp/logs"
# 检查目录是否已存在
if [ -d "$DIR_PATH" ]; then
echo "错误: 目录 '$DIR_PATH' 已存在"
exit 1
fi
# 尝试创建目录
mkdir -p "$DIR_PATH"
# 检查是否创建成功
if [ $? -eq 0 ]; then
echo "目录创建成功: $DIR_PATH"
# 设置适当的权限
chmod 755 "$DIR_PATH"
echo "权限设置为755"
else
echo "目录创建失败"
exit 1
fi
# 创建以点开头的隐藏目录
mkdir .config
mkdir .ssh
# 创建带连字符的目录
mkdir my-project
# 创建带下划线的目录
mkdir my_project
# 创建带特殊字符的目录(需要转义)
mkdir test\&temp
mkdir 'test&temp'
mkdir "test&temp"
# 创建带空格的目录(三种方法)
mkdir my\ documents
mkdir 'my documents'
mkdir "my documents"
# 创建标准的Web项目目录结构
mkdir -p my_website/{css,js,images,docs,backup}
# 创建Java项目目录结构
mkdir -p java_project/{src/{main,test}/{java,resources},lib,dist,doc}
# 创建Python项目目录结构
mkdir -p python_project/{src,tests,docs,data,logs}
#!/bin/bash
# create_user_dirs.sh - 批量创建用户目录
USERS="alice bob charlie david eve"
for user in $USERS; do
# 创建用户主目录结构
mkdir -p "/home/$user"/{documents,downloads,music,pictures,public_html}
# 设置权限
chmod 755 "/home/$user"
chmod 700 "/home/$user"/{documents,downloads,music,pictures}
chmod 755 "/home/$user/public_html"
echo "已创建用户 $user 的目录结构"
done
# 创建带日期的日志目录
mkdir -p /var/log/myapp/$(date +%Y)/$(date +%m)/$(date +%d)
# 创建带时间戳的备份目录
mkdir -p "/backup/$(date +%Y%m%d_%H%M%S)"
# 创建轮转的日志目录
for i in {0..6}; do
mkdir -p "/var/log/myapp/$(date -d "$i days ago" +%Y%m%d)"
done
| 权限值 | 八进制 | 符号表示 | 说明 |
|---|---|---|---|
| 完全私有 | 700 |
rwx------ |
仅所有者可读、写、执行 |
| 标准目录 | 755 |
rwxr-xr-x |
所有者可读写执行,其他人只读执行(最常用) |
| 组共享 | 775 |
rwxrwxr-x |
所有者和组成员可读写执行,其他人只读执行 |
| 完全共享 | 777 |
rwxrwxrwx |
所有人都可读写执行(需谨慎使用) |
| 只读目录 | 555 |
r-xr-xr-x |
所有人都只能读取和执行,不能修改 |
| 粘滞位目录 | 1777 |
rwxrwxrwt |
如/tmp目录,用户只能删除自己的文件 |
除了基本的读写执行权限外,Linux目录还有几个特殊权限位:
/tmp)mkdir -m 2775 shared_dir(设置SetGID)&、;、|)时需要转义# 1. "权限被拒绝"错误
# 检查当前目录权限
ls -ld .
# 使用sudo或以正确用户身份运行
sudo mkdir /usr/local/myapp
# 2. "文件已存在"错误
# 检查是否已存在同名文件或目录
ls -l 目录名
# 如果存在文件而非目录,需要先删除文件
rm 文件名
# 或者创建不同名称的目录
# 3. 无法创建多级目录
# 使用-p选项
mkdir -p /path/to/multi/level/directory
# 4. 创建后权限不正确
# 使用-m选项指定权限
mkdir -m 755 mydir
# 或者创建后使用chmod修改
chmod 755 mydir
# 5. 目录名包含特殊字符
# 使用引号或转义字符
mkdir "my dir"
mkdir my\ dir
mkdir 'test&temp'
# 6. 磁盘空间不足
# 检查磁盘空间
df -h
# 清理空间后重试
# 7. 达到inode限制
# 检查inode使用情况
df -i
# 某些文件系统可能达到inode限制
# 1. UMASK - 控制默认权限
# 查看当前umask值
umask
# 设置umask(如022,则新建目录权限为755)
umask 022
# 2. TMPDIR - 临时目录位置
# 查看临时目录
echo $TMPDIR
# 在指定临时目录创建文件
mkdir $TMPDIR/my_temp_dir
# 3. HOME - 用户主目录
# 在主目录创建目录
mkdir $HOME/my_dir
# 4. PWD - 当前工作目录
# 在当前目录创建子目录
mkdir $PWD/new_dir
-p选项,避免目录不存在错误-m选项明确设置目录权限,而不是依赖umask-v选项或在脚本中添加日志记录