尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

文件与目录命令详解:路径、权限、查找与高频踩坑

文件与目录命令详解:路径、权限、查找与高频踩坑 说起文件和目录类命令很多人觉得这是命令行里最简单的部分但我在实际运维和带新人时发现翻车现场反而大多发生在这几个基础命令上。不是命令本身难记而是没把“文件、目录、路径”这三层关系想清楚。这篇文章不打算按命令手册从头到尾背一遍而是按实际操作逻辑重新梳理一遍从一个文件的生命周期来看你会先后遇到“它在哪、怎么进目录、怎么创建、怎么复制改名、怎么查看内容、怎么设置权限、最后怎么删掉、删错了怎么办”这一整串问题。每一段我都会把 Linux 和 Windows 两边的高频用法放在一起讲因为现在很多人的日常是 Windows 做桌面、Linux 做服务器两边命令混着用最怕的就是概念混淆。适合谁看刚接触命令行的新手能把命令用明白而不是背下来写脚本的开发者可以查漏补缺运维同行如果愿意也能从“踩坑清单”那一章里看到一些熟悉的场景。全文按实操逻辑展开不是字典不追求参数齐全但每个命令都会说清楚“为什么在这个场景里用它”。1. 别把文件命令当背单词先搞懂命令背后的三种对象1.1 文件、目录、路径一切命令的操作基础文件在计算机里的本质是一段有名字的数据目录则是一张“文件名到数据位置的映射表”。这句话看起来像课本但它能解释绝大多数命令行为。比如你执行rm /data/log/app.log系统做的事情是先去/data/log/这个目录的映射表里找到app.log这一项然后释放它指向的数据块。如果目录本身损坏文件还在磁盘上但系统找不到入口表现出来就是“文件消失”这正是很多数据恢复工具能找回文件的原因。目录本身也是一个文件只不过内容是“名字加索引号”的列表。所以 Linux 里一切皆文件目录、设备、管道、套接字本质上都是文件。理解了这一点你对rm -rf为什么能删目录、ls -l为什么能显示各种类型就不会觉得奇怪了。路径则是你从树根或当前位置到达某个文件的走法绝对路径从根开始写Linux 是/Windows 是盘符加反斜杠例如C:\Users\zhang\file.txt。相对路径从当前目录开始写例如./logs/app.log或../backup/data.zip。~和-~表示当前用户主目录-表示上一次所在的目录cd -在两边切目录时极其好用。1.2 命令的通用结构命令 参数 操作对象几乎所有文件目录命令都长一个样命令 [选项] [操作对象]。例如ls -lah /data里ls是命令-l -a -h是选项/data是对象。命令决定“做什么”选项决定“怎么做”对象决定“对谁做”。搞清这个结构你看到陌生命令就不会慌先用man或--help查选项再套这个公式去试。选项有两种写法短选项-r可以多个合并成-rf长选项--recursive可读性更好适合写进脚本。在 Linux 下命令和文件名区分大小写File和file是两个东西Windows 的 cmd 不区分大小写但 PowerShell 的命令虽然不区分参数名有时是区分大小写的这个后面会提到。1.3 为什么同样的命令在 Linux 和 Windows 里长得不一样Linux 的命令大多来自 GNU 工具集像ls、cp、mv、rm风格是“单个动词加短横线参数”。Windows 的 cmd 继承自 DOS保留了dir、copy、del、ren、md、rd这套老命令参数用的是斜杠比如dir /s。PowerShell 则完全是另一套思路命令采用“动词-名词”结构例如Get-ChildItem、Copy-Item、Remove-Item输出的是对象而不是纯文本。这套设计功能更强但对刚接触的人来说最难的是放弃“背命令”的习惯改成“猜动词加名词”。一个很现实的问题是如果你在 Windows 上装了 Git Bash 或 WSL那日常使用ls、cp这类命令会顺手很多。我不建议在 Windows 上硬背一大堆 cmd 命令来维护 Linux 服务器两边语法和正则支持都不一样来回切换容易出低级错误。最省心的组合是Windows 桌面用 PowerShell 做自动化服务器 Linux 用 bash两者之间的脚本逻辑各自独立维护。2. 目录操作从“我在哪”到“去哪、看什么”的完整链路2.1 确定当前位置pwd 与 cd 的隐藏细节pwd是 print working directory 的缩写终端上随时敲一下确认自己到底在哪个目录。很多事故的起点就是“我以为自己在/home/prod其实在/”一个rm -rf *下去后果完全不同。Windows cmd 里没有pwd但执行cd不带参数会输出当前目录。PowerShell 里Get-Location也可以不过pwd作为别名依然可用。这里有一个容易混的点在 cmd 里cd不带参数是“显示当前目录”在 Linux bash 里cd不带参数是“回到主目录”。刚切换环境的人经常在这里犯迷糊。cd的使用经验是cd ..回到上一级目录cd ../..回上两级。cd -回到上一次所在的目录在两条深路径之间来回切换时比手敲长路径快得多。cd ~/logs无论当前在哪直接进当前用户主目录下的 logs。在 Windows 下跨盘符时不能直接cd D:\data要先输入盘符D:再cd这是 cmd 的老规矩。PowerShell 里可以直接切因为它本质上会处理驱动器切换。2.2 列出目录内容ls 的常用参数与输出解读ls是使用频率最高的命令但大多数人只用ls和ls -l这远远不够。我常用的组合是ls -lah-l长格式显示权限、硬链接数、属主、属组、大小、时间。-a显示隐藏文件。Linux 下以点开头的文件默认不显示很多配置文件都是隐藏的排查问题时不加-a等于瞎找。-h人类可读的大小比如 4.0K 而不是 4096。-t按修改时间排序看哪个文件最新改动。-r倒序配合-t可以快速找到最旧或最新的文件。Windows 的dir对应参数是/a显示隐藏文件、/s递归子目录、/o排序但没有 Linux 那么灵活。PowerShell 的Get-ChildItem -Force -Recurse功能更强输出会给出文件对象属性方便进一步管道处理。ls输出里最容易被忽略的是第一列的“文件类型加权限”比如drwxr-xr-x。第一个字符d表示目录-是普通文件l是符号链接b/c是设备文件。后面的九个字符是权限这个到第五章专门讲。2.3 创建和删除目录mkdir/rmdir 与 Windows 的 md/rd创建目录的命令是mkdir最关键参数是-p。例如要一次性创建project/src/utils这三级目录mkdir -p project/src/utils-p还有一层含义是“如果目录已存在不报错直接忽略”。写脚本时这个参数能让命令具备幂等性反复执行不会炸。热词里有一条“phpmkdir多级目录”指的就是 PHP 的mkdir($path, 0777, true)中第三个参数recursive它和mkdir -p是同一个思想。不少新手以为只能一级一级建目录其实多级递归创建在任何语言里都是标配能力。删除目录相比之下要小心得多rmdir只能删空目录目录里有任何文件都会报错。删非空目录Linux 用rm -rf dirWindows cmd 用rd /s /q dir。我个人的习惯是能不用rm -rf就不用尤其不要用带通配符的形式。写删除命令前先ls看一遍匹配范围再执行。2.4 目录树展示tree 命令的实际用途tree不是所有系统默认安装的但它是查看目录结构最直观的工具。新接手一个项目我先跑tree -L 2限制只显示两层大概花十秒就能看清整个项目的骨架比逐个ls强太多。在 Windows 下cmd 自带tree /f可以显示文件但输出是纯文本样式不好看。PowerShell 可以用tree /F或安装第三方模块。如果想在博客或文档里展示目录结构tree生成的内容可以直接放进代码块格式清晰比截图更专业。热词里提到的“如何删除虚拟机目录”“keil5 左侧目录怎么显示”本质上也是目录树可视化和目录定位的问题。虚拟机删除建议在虚拟化软件里操作而不是直接删文件夹Keil 的工程目录则要看项目文件路径是否被正确加载这都属于先学会看目录树再决定怎么动手。3. 文件操作复制、移动、删除、查找的取舍逻辑3.1 创建空文件与更新时间戳touchtouch file.txt有两个作用文件不存在时创建一个空文件文件已存在时把它的访问时间和修改时间更新为当前时间。实际排错中第二个作用很有用。比如程序依赖一个配置文件你改了内容但忘了重启服务服务加载的还是旧配置这时候执行touch conf.ini可以触发一些守护进程重新读取配置文件。当然这不是通用做法但排查“明明改了配置却不生效”时值得试一下。Windows 下没有直接对应的touch命令PowerShell 常用New-Item -ItemType File -Path file.txt或者用Set-ItemProperty改时间属性。Git Bash 里则直接用touch。3.2 复制文件cp 的递归、保留属性、覆盖策略cp最常用的是这三种组合cp file.txt /backup/file.txt cp -r project/ /backup/project/ cp -a project/ /backup/project/区别在于-r递归复制目录但默认不保留文件的权限和时间戳等属性-a是归档模式保留权限、属主、时间戳软链接也会按链接复制而不是把链接指向的内容复制过去。备份目录时我几乎总是用-a这样恢复之后权限不会乱。覆盖策略上Linux 默认直接覆盖不会提示。想安全一点就用-i交互式提示、-n不覆盖已存在文件。我写备份脚本时一定会加-n或先把文件复制到带时间戳的新目录避免把旧备份悄悄冲掉。Windows 的copy功能很弱覆盖时只会问一句而且没有递归复制目录的概念复制目录要用xcopy或robocopy。robocopy才是 Windows 下复制目录的正解参数/E复制所有子目录包括空的/MIR做镜像同步/R:3 /W:1控制重试次数和等待时间。跨服务器同步大目录robocopy比手动拖拽稳得多。3.3 移动与重命名mv 其实是一家人mv同时承担“移动”和“重命名”两个任务因为从文件系统角度看重命名就是把目录里的名字改掉本质是把文件从目录树的这个节点挪到另一个节点。有一个容易出错的细节mv dir1 dir2时如果dir2不存在结果是把dir1改名为dir2如果dir2已存在且是目录结果是把dir1移动到dir2里面。同样一条命令目标状态不同结局完全不同。我见过有人想重命名目录结果把整个目录移动到了另一个目录下面找半天才发现位置不对。Windows 的重命名命令是ren移动是move两个分开。PowerShell 统一用Move-Item但行为也有类似规则。无论哪个系统执行前先确认目标目录是否已存在。3.4 删除文件rm 的“没有后悔药”rm是最需要敬畏的命令。Linux 下没有回收站rm删除就是直接释放数据块除非有专业恢复工具否则基本找不回来。安全删除的几个建议用rm -i让系统逐个确认适合删少量文件。删目录用rm -r删只读文件可能需要-f强制但-f也会忽略不存在的文件不报错批量脚本里-f反而有用。绝对不要在生产环境执行rm -rf /或者rm -rf ~加上通配符的组合。以前出过不少事故是变量没赋值最终命令变成了rm -rf /。防止误删的最好办法是设置别名。在.bashrc里写alias rmrm -i先提示再删除给自己留一个反应的时间。虽然有时候觉得烦但大多数时候是在保护你。3.5 查找文件find 与 where/whereis/which 的适用边界find是查找文件的万能工具也是最值得系统学习的命令之一。常用场景find /data -name *.log # 按名字找 find /data -type d -name backup # 找目录 find /data -size 100M # 找大于100MB的文件 find /data -mtime 30 # 找30天前修改的文件 find /data -name *.tmp -delete # 删除匹配的临时文件find的精髓在于两个点一是-exec或管道配合xargs做批量操作比如把所有.log文件压缩到一个包二是-name支持通配符但要用引号包起来避免 shell 提前展开。与find容易混淆的是which和whereis。which用来找“可执行命令的位置”比如which pythonwhereis还能找源码和 man 手册Windows 下where对应这个功能。当终端报“命令找不到”时第一步不是重新安装而是先which一下看命令是否在 PATH 里这个在第六章专门讲。4. 查看文件内容与编码cat、less、tail 与乱码的真相4.1 从头看到尾cat 与 taccat是 concatenate 的缩写本意是连接文件但日常用得最多的是把整个文件内容打印到终端。适合用cat的是小配置文件比如cat ~/.ssh/config。文件一长终端刷屏就不好用了。cat还能把多个文件拼成一个cat a.txt b.txt c.txt这个操作在合并日志片段时很实用。tac是反向输出按行从最后一行打印到第一行看日志时偶尔有用。cat -n显示行号看配置文件时能快速定位到第几行出问题。相比之下nl命令也能加行号但cat -n更常被记住。4.2 大文件翻页less 与 more文件几千行甚至几万行时less比cat好用得多。less进入后不会把整个文件打到屏幕上而是分页显示按空格翻页、按g跳到开头、按G跳到结尾、按/搜索关键字、按q退出。less的好处是处理大文件不卡而且支持前后翻页more只能往后翻。我习惯把所有需要查看的内容都用less包括命令输出长的时候也可以command | less管道进来慢慢看。Windows 下type对应cat但没有很好用的分页工具。more可以分页但交互体验差。PowerShell 里Get-Content的-Tail参数可以看文件尾部。如果你在 Windows 上装了 Git Bash直接用less就行。4.3 只看尾巴tail -f 看日志排查线上问题时tail -f是我用最多的命令。-f是 follow 的意思文件有新内容写入时终端会实时追加显示。tail -f /var/log/app.log tail -n 200 /var/log/app.log # 看最后200行-F大写比小写-f更稳区别是-F会处理日志轮转。日志文件被切割成app.log.1并新建app.log时-f会跟丢-F会自动重新打开新文件。写运维脚本和排查问题时我优先用tail -F。热词里提到的“文件指针”在 C 语言中是指FILE*这类句柄在命令行场景下可以理解为 tail 记录当前读到文件哪个位置从而实现增量读取。理解这个思想你就明白为什么tail -f能持续输出而不是重复从头读。4.4 编码与乱码file、iconv 与解压文件名乱码乱码问题在中文环境里太常见了。排查时先搞清楚文件到底是什么编码不要瞎猜file log.txt输出会告诉你文本类型、编码、换行符等。如果是 UTF-8 文件被用 GBK 方式打开中文就会出现乱码。转换编码用iconviconv -f GBK -t UTF-8 log.txt log_utf8.txt热词里“linux 解压文件乱码”几乎都是同一个原因压缩包在 Windows 下用 GBK 编码的文件名打包Linux 下用 UTF-8 解压文件名就成乱码了。解决方法unzip -O GBK archive.zip如果unzip版本不支持-O参数可以用 7z 指定编码7z x archive.zip -mcpGBKtar 打包的文件如果出现类似问题可以用convmv批量转换文件名编码convmv -f gbk -t utf-8 --notest -r .这些命令平时用不到但遇到一次乱码就知道“条条大路通罗马”是假的文件编码错了就是打不开解法必须对症。5. 权限、链接与磁盘占用ls -l 之外必会的三把尺子5.1 权限位到底怎么读rwx 的真相ls -l输出的第一列比如-rw-r--r--是理解 Linux 权限的入口。共十个字符第一个是文件类型后九个分成三组每组三个字符属主权限、属组权限、其他用户权限。r读w写x执行对目录来说是“可进入”所以-rw-r--r--的语义是这是普通文件属主可读写属组只读其他人只读。drwxr-xr-x是目录属主可读可写可进入属组可读可进入但不可写。特殊权限位也需要知道存在setuid属主的执行位变成 s、setgid属组的执行位变成 s、sticky bit其他人的执行位变成 t典型例子是/tmp文件只能被属主删除。这四个字符里的异常值往往是排查“为什么能删别人的文件”“为什么执行程序提权了”的线索。5.2 修改权限与归属chmod、chown、chgrp修改权限用chmod常见两种写法数字法chmod 755 script.sh。755是三个八进制数属主7rwx、属组5r-x、其他人5r-x。每个数字是 r4、w2、x1 加出来的这个规则记住就行。符号法chmod ux script.sh给属主加执行权限。语义更清晰适合只改一个权限位的场景。修改属主和属组chown user:group file chown -R user:group dir-R递归处理目录下的所有文件。需要知道chown不是随便用的普通用户只能改自己的文件的属组只有 root 才能改属主。热词里“执行服务权限失败”这类问题十有八九是服务运行用户对目录没有权限排查思路就是先用ls -l看属主属组再用ps看进程以哪个用户运行最后用chown或chmod把权限对齐。5.3 统计文件大小du、df 与 Windows 侧对应df -h看磁盘整体空间和剩余du看目录实际占用。最常用的组合df -h du -sh /data du -sh * | sort -rh | head -20第三行的意思是查看当前目录下每个条目的大小从大到小排序只显示前 20 个。磁盘满时这个命令 5 秒内就能定位到占空间最大的目录。du的单位默认是块加上-h会显示成 GB/MB 可读格式。Windows 下查看目录大小没有特别顺手的原生命令PowerShell 可以写一段脚本遍历Get-ChildItem -Recurse | Measure-Object -Property Length -Sum性能很一般。我自己在 Windows 上更习惯用 WizTree 这类工具直接可视化扫描定位大文件快得多。5.4 链接文件ln 的软硬之别ln命令不常用但懂它的人看目录结构会多一层理解。硬链接相当于给同一个文件数据起了一个新名字链接数和原文件一样删除其中一个不影响另一个。但硬链接不能跨文件系统也不能给目录做硬链接。软链接符号链接才是我们日常说的“快捷方式”ln -s /data/release/current /app/current/app/current只是一个指向真实目录的链接程序从固定路径访问而真实文件在另一个位置这样上线时切换current指向即可实现零停机发布。区分文件是不是软链接看ls -l第一列是不是l以及有没有-箭头。Windows 下对应的是mklink在 cmd 里执行mklink /D link target创建目录符号链接经常用来把软件安装目录重定向到其他盘解决 C 盘空间不足的问题。热词里“win10 更改用户名后 users 下目录名字没改”本质上也是系统用户目录路径与显示名不一致的问题用符号链接可以把旧路径指到新路径省去一堆软件配置的麻烦。6. 热搜词里的高频坑命令找不到、目录删不掉、文件打不开6.1 命令不存在PATH 与 PowerShell 执行策略搜索引擎里“xxx 命令无法识别”“npm 无法加载文件”这类问题常年霸榜。它们的根因通常不是软件没装而是系统找不到命令入口。先讲 PATH。Windows 和 Linux 都有一个环境变量 PATH里面是一串目录路径。你敲命令时系统按顺序去这些目录里找对应的可执行文件。找不到就报“command not found”或“无法将 xxx 项识别为 cmdlet、函数、脚本文件或可运行程序的名称”。排查步骤# Linux / Git Bash which xxx echo $PATH # Windows PowerShell where.exe xxx $env:PATH如果找到路径但命令还是不能用最常见的两个原因一是安装完软件后没重开终端PATH 没有刷新二是安装时没有勾选“加入 PATH”选项需要手动添加环境变量。热词里“claude: 无法将‘claude’项识别为 cmdlet、函数、脚本文件或可运行程序的名称”这一类报错就是典型的 PATH 找不到。解决办法就是把对应命令行工具的安装目录加到系统 PATH或者重新安装时勾选自动添加。另一个高频问题是 PowerShell 执行策略导致的报错长这样npm: 无法加载文件 C:\Program Files\nodejs\npm.ps1因为在此系统上禁止运行脚本。这是因为 PowerShell 默认禁止执行.ps1脚本而 npm 的入口就是一个脚本。解决办法Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserRemoteSigned表示本地脚本可以运行从网上下载的脚本需要有签名。这是折中方案比直接Unrestricted安全也比完全禁止好用。执行完重开终端即可。6.2 Windows 下特殊文件处理msi、控制台命令与 C 盘清理热词里“msi 文件怎么安装”“msi 文件用什么打开”答案是 msi 是 Windows 安装包双击就会启动安装向导不需要额外指定打开方式。如果双击没反应可以在 cmd 里手动执行msiexec /i setup.msimsiexec是 Windows 安装服务的主命令也可以用它做静默安装msiexec /i setup.msi /qn。批量部署软件时静默安装参数比手工点击可靠得多。“gpedit.msc 命令打不开”也是类似逻辑。gpedit.msc是组策略编辑器只有专业版及以上系统才有家庭版默认不含。所以命令打不开时先确认系统版本而不是反复敲命令。同理telnet命令在 Windows 新版本里默认没装要在“启用或关闭 Windows 功能”里勾选 Telnet 客户端。C 盘清理的文章常年有人搜命令行侧真正有效的操作有两个清理临时文件和清理 Windows 更新缓存。cleanmgr /sagerun:1 del /q /f /s %TEMP%\*cleanmgr打开磁盘清理工具能用图形界面把能清的空间清掉。%TEMP%目录通常堆了大量临时文件可以手动删除。系统更新缓存位置是C:\Windows\SoftwareDistribution\Download但清理它之前最好先停止 Windows Update 服务否则下次开机又会重新下载。这类操作建议谨慎不要指望命令行能替代专业清理软件但定位到具体目录后用命令删除速度远快于右键删除。6.3 特定软件的目录与文件虚拟机、CAD、GIS 与容器很多热词看着彼此无关但本质都指向同一个问题怎么理解某个软件的目录结构和文件类型。“如何删除虚拟机目录”的正确做法是先在 VMware Workstation 或 VirtualBox 里移除虚拟机再手动删除磁盘文件和配置目录。直接删文件夹注册信息还在虚拟机列表里会留下一个无法打开的条目。“cad2020 许可文件”“dwg 文件导入”“dem 文件”“shp 文件下载”这些搜索词说明文件后缀不认识时人会本能地搜索“怎么打开”。这类问题的通用解法是先用file命令或在线工具识别真实文件类型很多时候后缀是错的再找对应软件导入。DWG 是 AutoCAD 原生格式DEM 和 SHP 是地理信息格式它们都需要对应专业软件或转换工具。命令行层面能帮忙的是批量查看文件类型和校验文件完整性md5sum或Get-FileHash避免花了半天导入失败才发现文件下载不完整。“containerd 命令”“conda 命令”“sqlmap 命令”这类搜索词的共同问题是命令体系太大官方文档厚得像书。我的建议是先掌握--help和version两个参数先确认工具可用再按“查看列表、查看详情、创建、删除”这个通用四步去摸索绝大多数命令工具都遵循这个规律。6.4 隐藏目录与安全细节.git 泄露、users 目录改名“git 目录泄露如何下载”这个热词需要认真对待。.git目录里保存着完整的版本历史包括曾经提交过的所有文件内容。如果把一个带着.git目录的项目直接发布到公网服务器攻击者可以通过读取.git下的对象文件来还原整个代码库。正确做法是确认.git目录没有被部署到公开访问的目录下使用git archive或 CI 产物来发布代码而不是把整个仓库原样复制上服务器部署后可以用curl探测一下/.git/HEAD是否能访问。这是一个安全风险提示不是教你如何下载别人的代码做授权测试时用这条思路自查是很有价值的。说到隐藏目录你还会遇到一种情况Windows 更改用户名后C:\Users\下的目录名没变。系统不会因为你在设置里改了用户名就自动重命名用户配置文件目录。改名用户目录会导致一堆软件找不到路径最后只能新建用户重新配置环境。正确处理是改用户名前把原用户目录完整备份到新用户名目录并更新注册表里的 ProfileList 路径。实际操作远比重命名麻烦所以我的建议是日常使用和管理员权限关联不太大的场景保留系统已生成的用户目录名并不丢人改显示的“用户昵称”更安全。6.5 批量操作与自动化备份一行命令解决重复劳动文件命令的进阶玩法是组合和批量。把当前目录下所有.log压缩到脚本目录find . -name *.log -mtime 7 -exec gzip {} \;按日期批量重命名文件for f in report-*.txt; do mv $f ${f/report/2025-report}; done文件自动备份最稳定的是rsyncrsync -av --delete /data/project/ /backup/project/--delete的含义是源目录删了文件备份目录也删保证两边完全一致。如果不希望误删就不要加这个参数改成按日期建目录rsync -av /data/project/ /backup/project-$(date %Y%m%d)/Windows 下的对应方案是robocopy配合计划任务或者 PowerShell 的Copy-Item加Register-ScheduledTask。日常备份建议“分目录、加时间戳、保留最近 N 份”而不是每次都覆盖到同一个目录否则恢复时找不到历史版本等于没备份。crontab定时执行时需要注意环境变量与手动执行时不同脚本里最好写绝对路径避免出现“手动能跑定时任务跑不了”的问题。我自己保留的一个习惯是凡是涉及删除、覆盖、批量修改的命令先在命令前加echo打印一遍将要执行的操作确认无误后再去掉echo真正执行。像find ... -delete这种危险的组合我会先用find ... -name *.tmp不带-delete看一遍匹配结果。命令行的效率来自组合风险也来自组合多花五秒确认省下的可能是几天恢复数据的时间。这套文件和目录命令说到底不是背出来的而是在一次次实际处理问题中练出来的手感。
返回列表