ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux less 命令查找关键字:从原理到实战的完整指南

Linux less 命令查找关键字:从原理到实战的完整指南 1. 为什么在服务器上查日志我最后都回到了 less刚入行那会儿查线上日志我用的是一套组合拳cat出来管道给grep再管道给head或tail。命令敲得飞快看起来挺唬人但真到了排查问题的节骨眼上这套打法经常掉链子。最典型的一次一个几百兆的 Nginx 访问日志我cat了一下终端直接卡死滚屏滚了半分钟才停下来想找的那行关键字早就被冲得没影了。后来同事看不下去了甩给我一句你试试less再按/。从那以后只要是在 Linux 上翻文件、找关键字我基本就离不开less了。less这个工具名字本身就带着点冷幽默——它是more的进化版取了个less is more的反义梗。但它的能力确实配得上这个名字按需加载、不一次性把文件读进内存、支持前后翻页、支持正则搜索、支持实时跟踪文件变化。这些特性叠加起来让它在查找文件中的关键字这个场景里几乎是无敌的存在。尤其是当你面对的是几个 G 的日志文件、配置文件或者代码文件时less的体验和cat | grep完全不在一个量级。这篇文章我想聊的不是那种命令手册式的罗列而是把我这些年用less查关键字踩过的坑、总结出来的技巧以及一些容易被忽略的细节系统地讲一遍。不管你是刚接触 Linux 的新手还是已经用了几年但一直停留在只会按/搜索阶段的老手应该都能从里面挖到点有用的东西。核心关键词就三个Linux、less 命令、查找关键字。我会围绕这三个词把less在关键字查找上的完整用法、原理、避坑点和进阶技巧全部展开。先说清楚适用人群如果你日常需要在 Linux 服务器上翻日志、看配置、读代码或者你正在学 Linux 常用命令想找一个比cat和grep更顺手的查关键字方案那这篇内容就是写给你的。如果你只是想背命令应付考试那可能收获有限因为我更想讲的是为什么这么用和什么时候别这么用。2. less 查关键字的核心机制它到底比 grep 强在哪2.1 按需加载less 不把整个文件读进内存要理解less为什么适合查关键字得先搞明白它和cat、grep在文件读取方式上的根本区别。cat的逻辑是全量输出——它把文件从头到尾读一遍全部吐到标准输出。文件小的时候无所谓文件一大终端缓冲区直接被撑爆你看到的就是疯狂滚屏而且滚完之后终端里只保留了最后几屏的内容前面的全丢了。想找关键字只能重新cat一遍再管道给grep等于把文件又读了一遍。grep的逻辑是全量扫描 过滤输出——它确实能精准找到含关键字的行但它默认是把所有匹配行一次性打印出来。如果匹配行有几千条你同样面临滚屏问题。而且grep是一次性的你没法在结果里再翻页、再二次搜索、再往回看上下文。less的逻辑完全不同它只在需要显示的时候才从文件里读取对应的那一块数据。你打开一个 5G 的日志文件less几乎是瞬间就显示出来了因为它只读了开头那几 KB。你往下翻它才继续往后读你往上翻它再去读前面的内容。这种惰性加载的机制让less在打开大文件时的速度远超cat和vimvim虽然也是按需加载但它会尝试建立一些索引结构大文件下依然会慢。这个机制对查关键字意味着什么意味着你可以先打开文件再在文件内部做搜索而不是先搜索再决定看哪一段。这个顺序的调换在排查问题时特别关键——因为你往往不知道关键字具体长什么样需要边看边调整搜索词。2.2 交互式搜索搜索是一个可以反复调整的过程grep的搜索是一次性的你给一个模式它给你一批结果结束。想换个词再搜重新敲一遍命令。想看看匹配行的上下文得加-A、-B、-C参数重新跑。想在结果里再筛一层再管道一次。less的搜索是交互式的你按/输入关键字回车它跳到第一个匹配处按n跳到下一个按N跳回上一个想换关键字再按/重新输入就行想看上下文匹配行就在文件里你直接上下翻页就能看到前后几十行。整个过程是连续的、可逆的、可调整的。我举个实际场景你就明白了。假设线上接口报错日志里有一堆ERROR但你不确定具体是哪个模块的问题。用grep的话你得先grep ERROR看看有多少条发现太多再加模块名过滤发现还是多再加时间范围……每加一个条件就要重跑一次命令。用less的话你直接less app.log按/ERROR跳过去看一眼上下文发现是数据库相关的再按/搜database在 ERROR 的匹配结果里继续找 database几秒钟就能定位到问题行。提示less的搜索是从当前位置往下找所以如果你已经翻到了文件中间按/搜索只会从当前位置往后找。想从头找先按g回到文件开头再按/。2.3 正则支持less 的搜索不是简单的字符串匹配很多人以为less的/搜索就是简单的字符串包含判断其实它默认走的是正则表达式具体是 POSIX 基本正则取决于编译时的配置。这意味着你可以用^、$、.、*、[]这些元字符来做更精确的匹配。比如你想找以ERROR开头的行可以搜/^ERROR想找行尾是timeout的行可以搜/timeout$想找user_id后面跟数字的行可以搜/user_id[0-9]。这些用法在grep里需要加-E或者转义在less里直接就能用。不过这里有个坑less默认的正则方言和grep不完全一样。grep默认是基本正则BRE加-E变成扩展正则EREless默认也是基本正则但不同发行版编译时的选项可能不同有些版本对、?、|这些扩展元字符的支持不一致。我的经验是在less里搜索尽量用最基础的正则语法避免依赖扩展元字符。如果确实需要复杂正则宁可在grep里搜好了再less打开也别在less里跟正则方言较劲。3. 从打开文件到定位关键字一套完整的操作链路3.1 打开文件的几种姿势以及什么时候该用哪种less打开文件的基本语法是less 文件名但实际使用中有几种变体各有适用场景。最常用的是直接打开less app.log。适合你已经知道要看的文件是哪个直接进去翻。第二种是先过滤再打开grep ERROR app.log | less。这个用法看起来有点绕——既然less自己能搜为什么还要先grep原因是当匹配行特别多、而你只想在这些匹配行之间跳转时先grep可以把不相关的行全部剔除让less里的内容更聚焦。比如一个日志文件里 99% 是 INFO只有 1% 是 ERROR你先grep ERROR再less翻页时就不会被大量 INFO 干扰。缺点是丢失了上下文——你看到的只有 ERROR 行看不到 ERROR 前后的 INFO 在说什么。第三种是打开多个文件less app.log.1 app.log.2。less会依次打开这些文件用:n切换到下一个:p切换到上一个。查滚动日志的时候特别有用因为日志往往会切割成多个文件问题可能跨文件。第四种是打开命令的输出less (some_command)。这是进程替换的用法把命令的输出当成文件给less读。比如less (dmesg)可以翻看内核日志。不过这个用法依赖 shell 支持进程替换bash、zsh 都支持而且因为是管道less没法往回翻已经流过的数据只能往后看。打开方式适用场景能否回翻是否保留上下文less file已知文件需要完整上下文能完整保留grep xxx file | less匹配行少只想看匹配行能丢失上下文less file1 file2多文件滚动日志能完整保留less (cmd)查看命令输出不能完整保留3.2 搜索关键字的完整按键流程打开文件之后查关键字的核心操作就是几个按键但每个按键的细节值得说清楚。按/进入搜索模式光标会跳到底部出现一个/提示符。这时候输入你要找的关键字按回车less就会从当前位置往后找第一个匹配项并把匹配项高亮显示同时把视图滚动到匹配行附近。找到第一个匹配后按nnext跳到下一个匹配按Nshiftn跳回上一个匹配。这两个键是查关键字时按得最多的建议形成肌肉记忆。如果想换一个关键字重新搜再按/输入新词就行。less会记住你上次搜的词按/之后直接按回车会重复上一次的搜索。这个特性在反复确认某个关键字时很方便。如果搜错了想取消按Esc或者CtrlC退出搜索模式不会跳转。还有一个容易被忽略的键。按也是搜索但它和/的区别是——只显示匹配的行不匹配的行会被过滤掉。这相当于在less内部做了一个grep。比如你按ERRORless就只显示含 ERROR 的行其他行全部隐藏。想恢复显示全部内容再按一次然后直接回车空模式即可。这个功能在我想在 less 里临时过滤一下的场景下非常好用省得退出重开。3.3 大小写敏感一个经常被忽略但很关键的开关less的搜索默认是大小写敏感的。也就是说搜error不会匹配ERROR搜Error也不会匹配error。这在查日志时经常坑人因为日志里的大小写往往不统一。有两种方式处理大小写问题。第一种是搜索时用正则的字符类搜/[Ee][Rr][Rr][Oo][Rr]这样能匹配任意大小写组合。但这么写太啰嗦实际没人这么干。第二种是临时切换大小写敏感模式按-i先按-再按iless会进入忽略大小写模式之后所有搜索都不区分大小写。再按一次-i可以切回来。这个开关是全局的切换后对所有后续搜索生效。第三种是在启动时就指定less -i app.log这样一打开就是忽略大小写模式。我的习惯是查日志时默认用less -i打开因为日志里的大小写太乱了忽略大小写能省很多事。只有在明确需要区分大小写时比如查某个特定格式的 ID才切回敏感模式。注意-i模式下如果搜索词里包含大写字母less会自动切换回大小写敏感。这是less的一个智能行为——它认为你既然输入了大写就是想要精确匹配。如果你不希望这个行为可以用-I大写 i强制忽略大小写无论搜索词里有没有大写。4. 查关键字时最容易被绊倒的几个坑4.1 搜索方向搞反为什么按了/却找不到明明存在的关键字这是新手最常遇到的问题明明文件里有这个关键字按/搜了却提示 Pattern not found。原因通常是搜索方向。less的/是向下搜索?是向上搜索。如果你当前已经翻到了文件末尾附近再按/往下搜自然什么都找不到。这时候要么按g回到文件开头再搜要么用?往上搜。还有一种情况你之前用过滤过内容less当前只显示匹配行其他行被隐藏了。这时候按/搜索只会在已显示的行里找被隐藏的行里的关键字自然找不到。解决办法是按然后直接回车恢复显示全部内容再搜。4.2 大文件搜索卡顿为什么搜一个词要等好几秒less搜索大文件时如果关键字很罕见它需要从当前位置一直往后扫描直到找到匹配或者扫到文件末尾。对于几个 G 的文件这个扫描过程可能要好几秒甚至更久期间less看起来像卡住了。这不是 bug是less的工作方式决定的——它必须逐块读取文件内容来做匹配。缓解办法有几个一是先用grep定位大致位置。比如grep -n 关键字 app.log | head先看看关键字大概在第几行然后用less 行号 app.log直接跳到那一行附近再在附近搜索。less 1000 app.log表示从第 1000 行开始显示。二是缩小搜索范围。如果知道关键字大概在文件后半段先按G跳到文件末尾再用?往上搜这样搜索范围就小很多。三是用过滤代替/搜索。过滤虽然也要扫描全文但它是一次性的扫完之后结果就固定了后续翻页不再重复扫描。而/搜索每次按n都要重新扫描。4.3 高亮消失搜到了但看不清在哪less默认会把匹配项高亮显示但有些环境下高亮可能不明显或者你翻了几页之后高亮就消失了其实是匹配行滚出了当前视图。如果高亮颜色太淡可以通过环境变量调整。less使用LESS_TERMCAP_so和LESS_TERMCAP_se来控制搜索高亮的起始和结束转义序列。比如在.bashrc里加export LESS_TERMCAP_so$\E[1;33;44m # 黄色前景蓝色背景 export LESS_TERMCAP_se$\E[0m # 重置这样搜索匹配项会以黄字蓝底显示非常醒目。另外按-g先按-再按g可以切换只高亮当前匹配项和高亮所有匹配项。默认是只高亮当前项按-g后所有匹配项都会高亮方便你一眼看到全文有多少处匹配。4.4 中文关键字搜索乱码或搜不到在 Linux 上查含中文的文件时less可能会因为编码问题搜不到中文关键字或者显示乱码。这通常是因为less没有正确识别文件的字符编码。解决办法是设置LESSCHARSET环境变量export LESSCHARSETutf-8或者在打开文件时指定less -f app.log-f强制以二进制方式打开不做编码转换。不过更稳妥的做法是确保终端和文件的编码一致都是 UTF-8。如果文件是 GBK 编码而终端是 UTF-8那中文关键字基本搜不到。这时候要么用iconv转码后再看要么在支持 GBK 的终端里操作。我的经验是服务器上的日志和配置文件尽量统一用 UTF-8能避免 90% 的编码问题。5. 把 less 用出花几个提升查关键字效率的进阶技巧5.1 用标记mark在多个关键字位置之间跳转查关键字时经常需要在几个位置之间来回跳比如先看了错误 A 的位置又去看了错误 B 的位置然后想回到 A 再看看。如果只靠n和N在匹配项很多的时候会跳得很累。less的标记功能可以解决这个问题。按m再按一个字母比如a就在当前位置打了一个标记a。之后按单引号再按a就能瞬间跳回标记a的位置。可以打多个标记用不同字母区分。这个功能在对比多个错误位置时特别有用。比如你搜ERROR找到了三处可疑的地方分别打上标记a、b、c然后就可以在三个位置之间快速切换对比它们的上下文。5.2 结合-p参数直接定位到关键字如果启动less时就已经知道要搜什么可以用-p参数直接定位less -p ERROR app.log这样less一打开就会跳到第一个ERROR的位置省去了手动按/的步骤。-p后面的模式支持正则所以less -p ^ERROR app.log可以定位到以 ERROR 开头的行。还有一个类似的参数用法是less /ERROR app.log效果和-p差不多。区别是后面跟的是完整的less命令可以跟多个命令比如less G app.log表示打开后直接跳到文件末尾。5.3 实时跟踪用F键看日志的直播查日志时经常需要盯着看——等某个错误出现或者看某个请求的处理过程。这时候可以用less的F键。按Fshiftfless会进入跟踪模式行为类似tail -f文件有新内容追加时less会自动显示出来。想退出跟踪模式按CtrlC。这个功能比tail -f强的地方在于跟踪的同时还能搜索和翻页。比如你按F跟踪日志看到一行可疑的按CtrlC退出跟踪按/搜索相关关键字看完再按F继续跟踪。整个流程不用退出less非常顺滑。提示F跟踪模式下如果文件被切割比如日志轮转less会提示文件已变化按r可以重新加载。如果文件被删除less会保持显示已加载的内容但不再更新。5.4 用-S处理超长行避免关键字被截断有些日志的单行特别长比如包含完整 JSON 的请求日志默认情况下less会折行显示一行变成好几行看起来非常乱而且搜索时关键字可能被折行截断导致搜不到。用-S参数可以禁止折行超长行会横向滚动显示less -S app.log这样每行日志就是一行不会折行搜索时也不会因为折行导致匹配失败。想横向滚动看被截断的部分按→方向键或者Esc然后按)。-S模式下按-S可以临时切换折行/不折行方便你在两种模式间切换。5.5 搜索历史重复利用之前搜过的关键字less会记录你本次会话中搜过的所有关键字。按/进入搜索模式后按↑和↓方向键可以在历史搜索词之间切换不用重新输入。这个功能在反复调整搜索词时特别省事。比如你先搜了ERROR又搜了timeout现在想回到ERROR再确认一下按/然后按↑就能找到ERROR回车即可。6. 和其他工具配合什么时候该用 less什么时候该用别的6.1 less vs grep不是替代关系是配合关系经常有人问既然less能搜关键字那还要grep干嘛我的回答是两者不是替代关系是配合关系。grep的优势在于批量处理和非交互场景。比如你要统计某个关键字出现了多少次grep -c一行命令搞定要把匹配行导出到文件grep result.txt直接重定向要在多个文件里同时搜grep -r递归搜索。这些场景less做不了也不该做。less的优势在于交互式探索和上下文查看。当你不知道要找什么、需要边看边调整、需要看匹配行的前后文时less的体验远好于grep。实际工作中我常用的组合是先用grep快速定位再用less深入查看。比如grep -n ERROR app.log | head -20先看看 ERROR 大概出现在哪些行然后less 1000 app.log直接跳到第 1000 行附近再用/在附近搜索。这样既利用了grep的快速定位又利用了less的上下文查看能力。6.2 less vs vim查关键字用哪个vim也能查关键字按/搜索的体验和less类似。那什么时候用vim什么时候用less我的判断标准很简单只读场景用less需要编辑用vim。查日志、看配置、读代码这些都是只读场景用less更轻量、更快、更安全不会误改文件。只有当你需要修改文件内容时才用vim打开。另外vim打开大文件时会尝试建立一些内部结构速度比less慢。对于几百兆以上的文件less的打开速度明显更快。6.3 less vs tail/head定位场景不同tail和head适合看开头/看结尾的场景比如tail -100 app.log看最后 100 行head -50 app.log看前 50 行。它们不适合在文件中搜索关键字的场景因为没法交互式搜索。不过tail -f和less的F键功能重叠。我的选择是如果只是单纯盯着日志看用tail -f如果盯着看的同时还需要搜索和翻页用less然后按F。工具最适合的场景不适合的场景less交互式搜索、看上下文、大文件浏览批量统计、非交互处理grep批量过滤、统计、递归搜索交互式探索、看上下文vim需要编辑文件只读浏览太重tail -f单纯跟踪日志尾部需要搜索和翻页cat小文件快速查看大文件会滚屏7. 几个真实场景下的 less 查关键字实战7.1 场景一在 Nginx 访问日志里找某个 IP 的请求假设线上有个接口被刷了你想看看某个 IP 都请求了什么。日志文件是access.log格式是标准的 Nginx combined 格式。第一步先确认这个 IP 在日志里出现了多少次grep -c 192.168.1.100 access.log如果数量不多几十条直接grep出来看就行。如果数量很多几千条用less打开less access.log按/192.168.1.100搜索按n逐个查看。因为要看这个 IP 请求了哪些 URL所以重点看每行末尾的请求路径。如果日志行很长用-S模式避免折行less -S access.log这样每行一条记录横向滚动可以看到完整的请求路径和 User-Agent。7.2 场景二在应用日志里追踪一次请求的完整链路微服务架构下一次请求会经过多个服务每个服务都会打日志靠一个 trace ID 串联。假设 trace ID 是abc123def456你想看这次请求的完整处理过程。如果日志分散在多个文件里先用grep找出哪些文件包含这个 trace IDgrep -l abc123def456 *.log然后逐个文件用less打开查看less -p abc123def456 service-a.log-p参数让less一打开就定位到 trace ID 的位置直接看上下文。看完一个文件按:n切换到下一个文件如果启动时打开了多个文件。7.3 场景三在配置文件里找某个参数被设置在哪里Linux 的配置文件往往有大量的注释和示例真正生效的配置可能藏在某个角落。比如你想找nginx.conf里worker_connections被设置成了多少。直接less /etc/nginx/nginx.conf按/worker_connections搜索。注意配置文件里可能有注释掉的示例比如# worker_connections 1024;这种不是真正生效的。搜到之后要看行首有没有#。如果搜到的第一处是注释按n继续找下一处直到找到没有注释的那一行。这个场景下less的逐个跳转比grep更方便因为你能直接看到上下文判断这行配置属于哪个 block。7.4 场景四在内核日志里找硬件错误dmesg的输出可以用less翻看dmesg | less按/error或/fail搜索错误信息。内核日志里的大小写不统一建议用less -i忽略大小写dmesg | less -i如果dmesg输出被 ring buffer 截断了可以看看/var/log/dmesg或/var/log/kern.log取决于发行版。这些文件通常不大用less直接打开搜索即可。8. 把 less 查关键字变成肌肉记忆我的个人配置和习惯8.1 环境变量配置让 less 默认就好用我在.bashrc里会设置几个less相关的环境变量让默认行为更符合查关键字的习惯export LESS-i -S -R export LESSCHARSETutf-8 export LESSHISTSIZE100-i忽略大小写-S不折行-R正确显示颜色转义序列看带颜色的日志时很重要。LESSCHARSET设为 utf-8 避免中文乱码。LESSHISTSIZE设大一点保留更多搜索历史。设置LESS环境变量后每次运行less都会自动带上这些参数不用每次手动敲。8.2 别名给常用操作加速我还会定义几个别名alias lless alias lgless -pl代替less少敲几个字母。lg用于打开并直接搜索比如lg ERROR app.log等价于less -p ERROR app.log。不过别名不要定义太多否则换一台机器就不习惯了。我的原则是只给最高频的操作定义别名且别名要直观。8.3 搜索习惯先粗后细逐步缩小范围查关键字时我的习惯是先粗后细。先用一个宽泛的关键字搜看看匹配多不多、大概在什么位置然后根据看到的内容逐步加限定条件缩小搜索范围。比如排查接口超时先搜/timeout看看有多少处如果太多再搜/timeout.*api或者先跳到某个时间段附近再搜。这种逐步逼近的方式比一上来就构造一个精确的正则要高效得多因为你对问题的理解是在查看过程中逐步建立的。8.4 退出习惯q 键和 CtrlC 的区别最后说个细节退出less用q键。但如果你在搜索模式或者跟踪模式下q可能不会直接退出而是先退出当前模式。这时候多按几次q就行。CtrlC在less里是中断当前操作比如中断搜索、中断跟踪但不会退出less。想彻底退出还是得按q。这个区别在紧急情况下比如less卡住了很重要先按CtrlC中断当前操作再按q退出。9. 关于 less 查关键字我踩过的那些坑9.1 搜索词里带特殊字符结果搜了个寂寞less的搜索走正则所以搜索词里的.、*、[、]、^、$这些字符都有特殊含义。如果你想搜的是字面量比如搜 IP 地址192.168.1.1直接搜/192.168.1.1是没问题的因为.匹配任意字符也能匹配.本身。但如果你想精确匹配最好转义/192\.168\.1\.1。更麻烦的是搜含/的关键字比如文件路径/var/log/app.log。因为/是搜索命令的起始符直接搜会被解析成命令。解决办法是用\转义/\/var\/log\/app\.log。或者用?向上搜索?后面跟的模式里/不需要转义。我的经验是搜索词里如果有正则元字符先想想是不是需要转义。不确定的话先搜一个不含元字符的子串定位到大致位置再在附近细看。9.2 在管道里用 less结果回翻不了command | less这种用法less读的是管道数据不是文件。管道数据是流式的less没法往回读已经流过的部分。所以如果你在管道里用less按b往回翻页可能会失败或者显示不全。解决办法是用进程替换less (command)。这样less把命令输出当成一个临时文件来读可以正常回翻。不过进程替换依赖 shell 支持且临时文件在命令结束后会被清理。如果命令输出不大也可以先重定向到临时文件再lesscommand /tmp/output.txt less /tmp/output.txt这样最稳妥回翻、搜索都没问题。9.3 搜索时终端卡住其实是 less 在扫描大文件前面提过less搜索大文件时可能会卡住几秒。这时候不要狂按CtrlC因为中断搜索后你还得重新搜。耐心等几秒或者按CtrlC中断后换个策略比如先用grep定位。如果经常遇到这种情况考虑用ripgreprg代替grep做初步定位rg的搜索速度比grep快很多尤其在大文件上。定位到行号后再用less 行号打开。9.4 忘了自己在哪个文件里:n和:p切乱了用less打开多个文件时按:n切下一个:p切上一个。但切了几次之后容易忘了当前在哪个文件。按或者:f可以显示当前文件名和行号信息。如果文件多建议启动时就用less file1 file2 file3的方式打开然后用:n顺序切换不要频繁来回切。或者干脆分多个终端窗口每个窗口看一个文件。10. 最后聊几句实在的less这个工具刚接触的时候觉得按键多、记不住但用熟了之后会发现它的设计非常符合查东西的直觉。尤其是查关键字这个场景/搜索、n跳转、过滤、F跟踪这四个操作覆盖了 90% 的需求。剩下的那些参数和技巧都是在特定场景下的补充。我自己的体会是不要把less当成一个要背命令的工具而是当成一个要练手感的工具。命令可以查手册但手感只能靠反复用。刚开始可以刻意练习每次查日志都强迫自己用less而不是cat | grep用上一两周肌肉记忆自然就形成了。另外工具是死的场景是活的。less再好用也有它不擅长的场景比如批量统计、递归搜索。知道什么时候该用less、什么时候该换grep或rg比单纯把less用熟更重要。我见过一些同事明明grep -c一行就能统计出结果非要在less里按n数匹配项这就属于工具用反了。如果你平时主要是在 Windows 上工作偶尔连 Linux 服务器那less的这几个核心操作/、n、N、、F、q值得花十分钟记一下关键时刻能省不少事。如果你本身就是 Linux 运维或开发那less应该是你工具箱里的常备工具和grep、awk、sed一样属于不用想就能敲出来的那一类。查关键字这件事说到底就是快速定位到你关心的那几行并且能看到它们的上下文。less把这两件事都做得很好剩下的就是熟练度问题了。
返回列表