众力资讯网

每天一个 Linux 知识:touch 和 mkdir命令

touch命令touch命令的核心功能是“修改文件的时间戳”,但在实际使用中,它最常用的场景是创建空文件——当目标文件不

touch命令

touch命令的核心功能是“修改文件的时间戳”,但在实际使用中,它最常用的场景是创建空文件——当目标文件不存在时,touch会自动生成一个空文件;若文件已存在,则仅更新其访问时间(atime)、修改时间(mtime)和状态改变时间(ctime),而不改变文件内容。

touch命令的基本格式为:

touch [选项] 文件名/路径

其中,“文件名/路径”既可以是当前目录下的文件名(如file.txt),也可以是包含路径的完整名称(如/tmp/logs/2024.txt)。若路径中包含不存在的目录,touch会报错(需先通过mkdir创建目录)。

touch命令的选项不多,但每个选项都有明确的实用场景。

(1)创建单个空文件(无选项)

这是touch最基础的用法,直接指定文件名即可创建空文件。例如,在当前目录创建note.txt:

touch note.txt

执行后,可通过ls -l note.txt查看文件信息,会发现文件大小为0(空文件),且时间戳为当前系统时间。

(2)批量创建多个空文件

若需一次性创建多个文件,无需重复执行touch,只需在命令后依次列出文件名(用空格分隔)。例如,创建3个不同格式的文件:

touch report.pdf data.csv image.png

该操作会在当前目录同时生成report.pdf、data.csv和image.png三个空文件,大幅提升操作效率。

(3)更新文件时间戳(-a/-m选项)

当文件已存在时,touch默认更新所有时间戳(atime、mtime、ctime)。若需仅更新部分时间戳,可使用以下选项:

-a:仅更新文件的访问时间(atime,即文件最后被读取的时间);-m:仅更新文件的修改时间(mtime,即文件内容最后被修改的时间)。

例如,仅更新note.txt的访问时间:

touch -a note.txt

执行后用ls -lu note.txt(-u选项显示atime)查看,会发现访问时间已更新为当前时间,而修改时间保持不变。

(4)自定义文件时间戳(-d选项)

默认情况下,touch使用当前系统时间作为时间戳,但通过-d选项可自定义任意时间(需符合Linux时间格式,如YYYY-MM-DD、HH:MM:SS)。例如,创建一个时间戳为“2024年5月20日14:30”的文件schedule.txt:

touch -d "2024-05-20 14:30" schedule.txt

该功能在模拟历史文件、测试时间相关脚本时非常实用。若文件已存在,此命令会将其时间戳修改为指定时间。

(5)避免创建新文件(-c选项)

默认情况下,若指定的文件不存在,touch会自动创建空文件。若需“仅更新已有文件的时间戳,不创建新文件”,可使用-c选项(c即“create”的否定)。例如:

touch -c non_exist.txt

执行后,由于non_exist.txt不存在,touch不会创建该文件,也不会报错(若不加-c则会创建空文件)。

mkdir命令

mkdir(即“make directory”)是Linux中专门用于创建目录的命令。与touch不同,mkdir仅针对目录操作,无法创建文件;同时,它支持一次性创建多级目录,这是其最核心的实用功能。

mkdir命令的基本格式为:

mkdir [选项] 目录名/路径

若仅指定目录名(如docs),则在当前目录创建该目录;若指定完整路径(如/home/user/docs),则在对应路径下创建目录(需确保父目录存在,或使用-p选项)。

mkdir的选项虽少,但-p和-m是提升操作效率的关键。

(1)创建单个目录(无选项)

这是mkdir的基础用法,直接指定目录名即可。例如,在当前目录创建photos目录:

mkdir photos

执行后,通过ls -d photos可查看目录是否创建成功(-d选项仅显示目录,不展开内容)。

(2)创建多级目录(-p选项)

若需创建“父目录不存在”的目录结构(如/a/b/c,且/a和/a/b均不存在),直接执行mkdir /a/b/c会报错。此时需使用-p选项(p即“parent”,表示创建父目录):

mkdir -p /a/b/c

-p选项会自动检测并创建所有不存在的父目录,无需手动逐级创建。例如,在当前目录创建project/src/main/java结构:

mkdir -p project/src/main/java

该命令会一次性创建project、project/src、project/src/main和project/src/main/java四级目录,是项目初始化的常用操作。

(3)自定义目录权限(-m选项)

Linux中,目录和文件的默认权限由umask值决定(通常为022,即目录默认权限755,文件默认权限644)。若需创建目录时直接指定权限(无需后续通过chmod修改),可使用-m选项(m即“mode”,表示权限模式)。

例如,创建权限为“rwxr-x---”(数字表示为750)的private目录:

mkdir -m 750 private

执行后用ls -l查看,会发现private的权限为drwxr-x---,而非默认的755。该功能在创建需要限制访问的目录(如个人隐私文件目录)时非常实用。

(4)创建多个同级目录

与touch类似,mkdir也支持一次性创建多个同级目录,只需在命令后依次列出目录名(用空格分隔)。例如,在当前目录创建docs、tests、examples三个目录:

mkdir docs tests examples

若需同时创建多个多级目录,可结合-p选项。例如:

mkdir -p project/{src,docs,tests}

该命令会创建project/src、project/docs、project/tests三个目录({}为Shell通配符,表示枚举内容),进一步提升批量操作效率。