
1. 在终端里新建目录和文件前先想清楚这几件事很多人接触 Linux 终端第一课基本都是ls、cd然后就是新建目录和文件。标题里的 Linux 终端、目录、文件这三件事看起来基础但基础的东西恰恰最值得抠细节。终端新建目录和文件的命令不只是在本地练习时用在服务器部署、容器构建、脚本自动化里几乎天天都在用所以这一课值得认真过一遍。先说清一个底层逻辑Linux 里一切皆文件目录也不例外它本质上是用来存放文件和其他目录的文件。你在终端里执行mkdir或touch做的事情和图形界面里右键新建文件夹、新建文本文档是一样的但终端的好处是它可以组合、批量、递归、走脚本几百个目录可以一条命令建完而且这一套在完全没有图形界面的服务器上同样管用。这就是为什么很多运维和开发宁可敲命令也不开文件管理器。1.1 你要建的目录和文件分别是什么在动手之前先分清两个角色。目录是容器文件是内容。比如你做一个网站项目大体上目录负责分类css放样式、js放脚本、images放图片文件负责承载具体内容index.html、README.md、config.js。日常操作里这两个角色经常要一起出现。你先mkdir搭好骨架再touch或echo往骨架里填文件。如果是创建配置文件、日志文件、代码文件创建之后往往还要编辑内容那就轮到vim或nano上场。所以入门阶段不用急着背几十条命令先把建目录、建文件、写内容这条主线吃透后面自然能延伸开来。1.2 终端工具选哪个自带终端、Tabby 还是终端复用器在本地 Linux 桌面环境下Ctrl Alt T就能打开默认终端如果你在 Windows 上用 VMware、WSL 或者云服务器常见的做法是装一个趁手的终端模拟器。网上讨论比较多的有 Tabby 这类终端工具支持多标签页、主题配色、把连接信息集中管理对经常要开好几个服务器窗口的人来说非常方便。还有一个词叫终端复用意思是让一个 SSH 会话里同时开多个窗口比如tmux或screen。入门阶段可以先不碰但你要知道新建目录和文件的命令在任何终端里都一样换个工具不换语法。也可以找一些免费的在线 Linux 练习环境不装系统直接敲命令对刚起步的人来说门槛更低。总之选一个让你舒服的终端然后把这篇文章里的命令多敲几遍肌肉记忆比看十遍都有用。2. mkdir从创建单个目录到一键搭出整棵目录树mkdir是 make directory 的缩写专门用来建目录。新手只需要记住一条最基础的用法mkdir mydir执行完当前目录下就多了一个叫mydir的目录。这没什么悬念真正有价值的是它后面跟的参数。2.1 最基础的 mkdir 和三个常用参数先看一张常用参数表参数含义典型用法-p递归创建多级目录不存在就自动补全mkdir -p a/b/c-v显示创建过程mkdir -v dir1 dir2-m直接指定权限模式mkdir -m 755 dirmkdir dir1 dir2 dir3可以一次建多个平级目录这个场景很常见。在每条命令之间不需要反复cd直接跟在命令后面mkdir logs static backup一句话就建了三个目录。-v参数会打印mkdir: created directory ...在脚本里比较友好方便确认每个目录都建成功了。-m参数值得说道说道。你新建的目录默认权限通常由umask决定一般用户默认是755也就是 owner 可读可写可执行组和其他人只能读和执行。如果你需要建一个私有目录谁也看不了可以用mkdir -m 700 secret这比建完再chmod 700 secret少敲一条命令。不过要提醒一句权限这东西别乱玩700或750只适合私有目录或需要限制访问的场景面向 Web 服务的目录一般用755比较稳否则别人访问不了网站资源你还找不到原因。2.2 mkdir -p 为什么是后端部署和 PHP 多级目录里的常客如果你曾经在网页搜索过phpmkdir多级目录大概率会看到 PHP 代码里写mkdir($path, 0777, true)这个true表示递归创建。Linux 终端里对应的高频用法就是mkdir -p。mkdir -p /home/user/project/src/views/pages不管中间缺了多少层目录命令都会一级一级把整条路径建出来。如果路径中间的某些目录已经存在它不会报错也不会覆盖只会把缺的补上。这个特性在做目录初始化、项目部署、日志目录预创建时非常实用。比如项目发布脚本里有这么一行mkdir -p /data/logs/app/$(date %Y%m%d)每天执行一次就自动生成按日期命名的日志目录。使用-p之后再配合-v你还能看到它每一步补建了哪些目录排查路径错误时很直观。我自己的习惯是只要创建多级路径一律加-p。单层目录加-p也不会出错还能避免上一级不存在导致创建失败的尴尬。这个习惯帮我省了不少事。3. touch、echo、重定向与 heredoc创建文件的四种常见姿势目录建好了接下来是文件。很多教程喜欢一上来就说touch但实际工作中创建文件的方式远不止一种不同姿势对应不同需求。3.1 touch 的本质无中生有之外还能刷新时间戳touch最常见的用途就是创建空文件touch README.md touch index.html app.js style.css一次也可以创建多个文件适合初始化项目时把空文件占位建好。为什么需要空文件举个例子Git 不追踪空目录你想让项目里的logs、assets目录被仓库记录通常会往里面放一个空的.gitkeep或index.html这就是touch的高频场景。另外touch名字本身的含义其实是触摸也就是修改文件的时间戳。比如你有一个文件old.log想把它的修改时间改成指定时间可以这样touch -t 202501011200 old.log这个用法做日志整理、文件按时间排序时很管用。所以别把touch理解成新建文件专用命令它的底层能力是刷新文件元数据文件不在就顺手创建。我在一些面试题里见过对touch的辨析原因就是这个工具容易被低估。3.2 echo、printf、重定向符和 heredoc 的分工touch只能建空文件真正要往文件里写内容就要用到重定向符。最简单的写法是echo hello world readme.txt这里的意思是把前面的输出写进后面的文件如果文件不存在就创建存在就清空重写。注意这是覆盖写别把重要内容冲掉了。如果只是想追加内容用echo another line readme.txt两条命令执行完readme.txt里就有两行文字了。printf比echo更适合控制格式比如换行和转义printf name: zhangsan\nage: 25\n user.txt新手在这里容易把和搞混我建议你在本地各试一次再cat看看文件内容体验一次印象就深了。如果要生成多行配置逐行echo太累这里有个更优雅的姿势heredoc。比如快速生成一个 Nginx 风格的配置文件片段cat app.conf EOF server_name example.com; listen 80; root /var/www/html; EOFcat配合 EOF后面直到EOF为止的所有行都会写入app.conf。用引号包住EOF可以防止变量被展开适合写带有$符号的内容。这个技巧在写 Dockerfile、初始化脚本、临时配置时经常出现建议熟练掌握。另外还有一个冷门但实用的命令truncate -s 0 file它是把文件调整为指定大小-s 0就是清空文件但保留文件本身比 file在某些场景下更明确。还有cp /dev/null file也可以清空文件知道有这些路子就够了实战按习惯选。4. 新建完不等于结束用 ls、cat、stat、tree 验证结果我见过不少新手建完目录和文件就直接开始下一步结果后面命令报错才发现目录名拼错了、文件建到了别的位置。我的建议是建完立刻用命令验证这一步能帮你挡掉大量低级问题。4.1 ls -l 输出里的每一列是什么意思验证目录和文件最常用的是lsls -l输出大概长这样drwxr-xr-x 2 user user 4096 Jan 22 10:30 docs -rw-r--r-- 1 user user 123 Jan 22 10:31 readme.txt第一列第一个字符表示类型d是目录-是普通文件l是符号链接。后面九个字符是权限分三组所属用户、所属组、其他人。看到rwxr-xr-x就能判断这个目录可读可写可执行但其他人只能读和执行。第二列是硬链接数对普通文件通常是 1对目录取决于子目录数量。第三、四列是 owner 和 group第五列是大小后面是修改时间和文件名。如果你不确定touch创建的文件存不存在一个ls -l就能看出来。想看隐藏文件就加-als -la注意以点开头的是隐藏文件普通ls不会显示必须加-a或-A才能看到。这是新手最常见的一个盲点。4.2 stat 看文件的真实属性tree 看整棵目录结构ls适合快速看但要看更完整的元数据用statstat readme.txt它会显示文件的修改时间、访问时间、inode 编号、文件大小、权限、硬链接数等一堆信息。在做日志归档、排查为什么文件内容没更新时stat比ls -l更能说明问题。目录结构比较深时我更推荐tree命令tree -L 2没有tree的话多数 Linux 发行版可以先用包管理器装一个比如apt install tree或yum install tree。它会把目录树画出来-L 2表示只显示两层。文件少时看不出优势文件一多标准上级、平铺一层、逐层嵌套三种结构差别一眼就能看出来。项目目录规范、文档目录说明里也经常用tree输出结构很多开源项目的 README 里那一棵“目录树”就是这么来的。5. 命名、隐藏文件与路径新手最容易踩的几个坑命令背得再熟文件名一个空格就可能让命令失效。这一节聊聊我在帮人查问题时遇到频率最高的三类坑。5.1 文件名里有空格怎么办touch my file.txt看起来是一条命令实际上它创建了两个文件my和file.txt。因为终端默认按空格分词空格是分隔符。要创建带空格的文件名必须用引号包住或转义touch my file.txt touch my\ file.txt两种写法效果一样。引号方式更好读日常推荐。不光是touch凡是命令里带文件名的操作路径中有空格都要用引号处理。写脚本时尤其注意变量展开后如果包含空格尽量用双引号括起来filenamemy file.txt touch $filename这个坑在复制文件、循环处理文件名时特别容易爆发踩过一次你就长记性了。5.2 以点开头和以横线开头的文件以点开头的文件是隐藏文件比如.gitignore、.env。创建方式和平常一样touch .env但要确认是否创建成功记得用ls -a普通ls下看不到它。很多配置类的文件偏偏就是隐藏文件新手以为自己创建失败实际上只是没加-a。还有更刁钻的文件名以横线开头比如-f。直接执行touch -f会被命令解析成选项参数要么报错要么行为异常。解决办法是使用--告诉命令后面不是选项touch -- -f ls -- -f或者用相对路径指定touch ./-f这个知识点平时用不到但面试、脚本健壮性测试里偶尔会出现。原理就是参数解析顺序理解了就不会慌。5.3 当前目录、上级目录与疑似拼错的路径新建文件后在哪里很多人以为在当前目录其实取决于命令执行时所在的目录。终端里有个当前工作目录的概念可以用pwd查看pwd.代表当前目录..代表上级目录。所以touch view.txt touch ./view.txt这两条命令效果一样。但如果你写了一长串路径mkdir -p /home/user/project/src touch /home/user/project/src/app.js就要多留个心眼绝对路径写错一个字母文件可能就建在了你完全想不到的地方。我的建议是创建文件之前先cd到目标目录再用相对路径操作这样即使出问题也容易发现。路径看起来差不多实际死活找不到文件脑子里先过一遍是不是没cd是不是少了一层目录是不是隐藏文件没加-a九成问题都出在这三个地方。6. 全部串起来一个项目目录骨架的完整实操到这里该动真格了。假设你要从零搭建一个简单的前端项目骨架目录和文件都要建好。下面这套流程我把前面说过的命令全部串起来你可以直接抄作业。6.1 像搭积木一样按步骤创建项目骨架先规划结构项目根目录demo-site下面有docs、src、logs、backup四个一级目录src里再分assets和components。然后写文件根目录放README.md和index.htmldocs放notes.mdsrc/assets放.gitkeep。第一步建目录。利用mkdir -p一次性补全嵌套结构mkdir -p demo-site/{docs,logs,backup} demo-site/src/{assets,components}花括号展开是 Bash 的语法它会自动展开成多个参数等于一次建了 6 个目录。如果你不习惯这种写法拆成两条也行mkdir -p demo-site/docs demo-site/logs demo-site/backup demo-site/src mkdir -p demo-site/src/assets demo-site/src/components第二步建文件并写内容cd demo-site touch README.md echo h1Demo Site/h1 index.html echo project notes docs/notes.md touch src/assets/.gitkeep注意这里先cd demo-site后面的相对路径都以项目根目录为基准逻辑清晰很多。如果你不想改当前目录也可以在每条命令前加demo-site/前缀效果一样只是敲起来累。第三步用tree验证tree -L 3输出应该是一个结构清晰的项目树。如果没有tree用find代替find . -type d | sort看完结构再用ls -l抽查几个文件的权限和大小确认没有建错位置。整套流程下来目录、文件、内容、验证四个环节都齐了。6.2 两件必须养成的习惯备份思考与清理意识第一次实操你可能觉得这些命令太简单不值得这么认真。但我在实际维护服务器时见过太多目录建错导致服务起不来日志因为权限不对写不进去的案例源头往往就是基础操作时没留神。两个习惯供参考。第一创建目录前先想清楚权限。如果这个目录要给别人写比如 Web 上传目录通常要把权限控制在合适的范围而不是无脑mkdir -m 777。权限过宽的目录很容易出安全问题。如果是个人项目默认755就够了需要私密就700。第二做好回收预案。你现在建的目录树将来可能因为结构变化要清理。删除命令是rm -r但这条命令非常危险我强烈建议新手先不要碰练习时如果建错了宁可重新建一个目录也不要急着用rm去删。等你对路径和命令足够熟悉再系统学习rm、find组合删除的安全写法。毕竟建得再快删错了就很难找回。我自己的习惯是每次建完目录文件都会立刻tree看一眼然后把结构记在项目说明里。这个动作本身只要十几秒但排查问题的时候能帮你省十几分钟。Linux 终端入门阶段学到的不只是几条命令更是每一步都有反馈、每种结果都可验证的工作方式。把新建目录和文件这套基本功练稳后面的权限管理、文件查找、脚本自动化都会顺很多。