
第二天咱们的 Linux 学习正式进入“动手”环节。昨天装好系统、配好网络之后你今天打开终端大概率会看到一个末尾带着$或#的光标在闪。这个界面就是绝大多数 Linux 初学者和命令行提示符第一次正式碰面的地方也是后面所有操作的主战场。很多人觉得提示符只是“等你输入命令”的摆设其实不是。提示符里藏了当前用户、主机名、当前目录、权限级别这些关键信息。读不懂提示符你会在服务器上敲错命令、删错目录而不自知读懂了每一行命令都有上下文的“地图”。这篇笔记把提示符的每个字符拆开讲清楚再把 Linux 使用频率最高的一批基础命令按“看位置、看文件、增删改、查记忆”几个场景串一遍。适合刚装完 Linux、准备从零开始打命令基础的人看也适合准备突击复习、或者面试前想快速把 Linux 基础命令捡起来的同学找手感。1. 命令提示符是怎么工作的看到的一切都不是摆设1.1 一个典型提示符的组成拆解在终端里最常见的提示符长这样rootlocalhost:~#或者这样zhangsanubuntu:~$拆开看每一段都有意义。第一段root或zhangsan是当前登录用户名。你可以用whoami验证。中间的只是分隔符念作“at”表示“这个用户在哪台机器上”。接着的localhost或ubuntu是主机名用hostname命令可以查看。冒号后面的~是当前工作目录。~代表当前用户的家目录比如 root 家目录通常是/root普通用户通常是/home/zhangsan。最后的$或#表示当前用户的权限层级。普通用户是$root 用户是#。#这个符号特别提醒一下看到它说明你现在拥有最高权限可以删系统文件、改所有配置、重启服务。很多初学者在 root 下会犯“随手清理”比如冷不丁来一条rm -rf结果把所有东西都删了。所以我的习惯是测试环境随便玩生产机器上尽量不用 root 登录就算登录了也先确认提示符别上来就敲命令。1.2 提示符是可以改的PS1 环境变量提示符不是“出厂设置”它由环境变量PS1控制。在 bash 里输入echo $PS1你会看到一串类似[\u\h \W]\$的内容。这就是 bash 解释提示符的“模板语法”\u用户名\h主机名短格式\w完整当前路径\W只显示路径的最后一级目录\$普通用户显示$root 用户显示#如果你想把提示符改成自己看着舒服的风格可以临时执行export PS1[\u\h \W]\$ 这个改动只在当前 shell 会话里生效。想永久生效把这一行追加到~/.bashrc末尾然后source ~/.bashrc。不过我不建议新手一开始就过度折腾 PS1。改乱了会看到奇怪的提示符甚至输入内容后光标位置错位排查起来很费时间。先用默认风格等对命令足够熟、能分清\w和\W的区别之后再按自己的审美调。1.3 提示符异常还没输入命令就进入了“续行模式”有时候你会看到提示符变成了这样并且光标停在第二行闪烁$ echo hello 这不是系统卡了而是 bash 认为你上一行命令还没写完。最常见的触发原因有两个一是引号没有闭合比如上面这个例子少写了一个二是用了反斜杠续行输入完\回车后 shell 会默认你还要继续输入。遇到这种提示符别愣着直接按Ctrl C取消当前输入回到正常提示符再重新敲。这也是我在命令行里用得最多的“后悔药”。2. 七个出场率最高的目录命令先练出手感2.1 站在哪别猜先用 pwd 确认当前目录pwd全称是 print working directory作用只有一个输出当前工作目录的绝对路径。$ pwd /home/zhangsan为什么先学它因为目录概念是 Linux 命令行的地基。提示符里显示的~只是家目录的缩写但你实际操作时经常会在/var/log、/etc、/opt这些目录之间切换只靠提示符的\W只显示最后一段很容易分不清自己到底在哪里。所以刚开始练命令时我建议你每到一个新目录就先pwd一次把实际路径和大脑里的预期对齐。等习惯了再依赖提示符里的完整路径。2.2 ls 的常用参数这几组我每天都在用ls是最基本的列目录命令但参数很丰富。新手记住下面几组就够了ls列出当前目录内容ls -l以详细列表显示包含权限、属主、大小、修改时间ls -a显示隐藏文件包括以.开头的文件ls -h配合-l使用让文件大小显示为 K、M、G 这种易读格式ls -t按修改时间排序最新的在最上面ls -r反向排序常和-t组合成ls -ltrls -ltr是我在运维场景里最常用的一条按时间倒排最新的文件永远在最后。查日志时我想看最新写入的内容直接ls -ltr /var/log/一目了然。ls -l的输出第一列是类似-rw-r--r--的权限串新手看不懂很正常。简单记忆法第一个字符表示文件类型-是普通文件d是目录l是软链接后面九个字符按三位一组分别对应属主、属组、其他人的读/写/执行权限。2.3 cd 的几种跳法以及我踩过的“跳错目录”的坑cd是 change directory切换目录。最基本的用法cd /etc # 进入绝对路径 cd ../.. # 向上退两级 cd ~ # 回家 cd /home/zhangsan # 进入指定用户的家目录有几个细节值得刻意记一下。第一cd -可以回到上一次所在的目录。这个命令在“两个目录之间来回切换”时特别有用。比如我先在/etc看配置又切到/var/log看日志想回到/etc一条cd -就搞定不用重新敲长路径。第二命令和路径都是区分大小写的。cd /ETC和cd /etc完全不同。这在从 Windows 过来的人身上几乎必踩因为 Windows 路径不区分大小写。我早期就因为在 Nginx 配置目录里写错了大小写导致明明文件存在却总是报错找不到。第三文件名带空格时必须用引号包起来或者用反斜杠转义。假设有个目录叫my dir如果你直接输cd my dirbash 会把my和dir当成两个参数报错。正确做法是cd my\ dir或者cd my dir。3. 文件的增删改查组合拳3.1 用 mkdir 创建目录递归创建要记牢mkdir创建目录最基础的是mkdir test。但实际工作中更常用的是-p参数mkdir -p /home/zhangsan/lab/day02-p的作用是“递归创建所有父目录”。比如你要创建/a/b/c这种多级目录没有-p时 bash 会提示“没有那个文件或目录”因为/a/b不存在有-p就直接一路建到底。另一个好处是如果目录已经存在-p不会报错这在脚本里用特别舒服。新手可能更关心验证。创建完之后最直接的验证方式是ls -l看目录类型或者直接cd进去。3.2 touch 的小细节创建空文件也会有副作用touch最常见的用途是“创建一个空文件”touch config.txt但它真正的原始作用是“更新时间戳”。如果一个文件已经存在执行touch后会把它的修改时间改成当前时间内容不会变。这个特性在一些编译场景里有实际用途源码修改后如果make认为目标文件比源文件新就不重新编译。有时你只想强制目标重新生成就可以touch一下源文件。日常学习中我常用touch加上后面的命令来验证某个目录是否可写先创建一个临时文件再rm删掉能成功就说明当前用户对该目录有写权限。3.3 cp 和 mv复制与移动别把文件弄丢复制的命令是cp基本语法是“源”和“目标”cp file.txt file_backup.txt # 复制文件并改名 cp file.txt /home/zhangsan/docs/ # 复制到目录 cp -r docs /home/zhangsan/backup/ # 复制目录必须加 -r-r参数特别重要。复制目录时不加-rcp 会明确提示“omitting directory”省略目录文件不会被复制。想保留权限、时间戳这些属性可以用cp -a它在复制目录和保留属性方面都比-r更全面。mv是移动也可以用来重命名mv old.txt new.txt # 重命名 mv file.txt /home/zhangsan/docs/ # 移动到目录同一个文件系统内mv 是“改个路径”速度非常快跨文件系统时mv 会变成“复制一份到新位置再删掉原来的”速度取决于文件大小。初学者不用深究这个底层原理但要知道mv 执行后原来的路径就不存在了。很多发行版为了让新手更安全会把cp、mv、rm设置成带-i的别名也就是每次覆盖前都会问你一句。如果你发现操作前多了一个rm: remove regular file xxx?的确认这不是出错了而是别名在发挥作用。3.4 rm 的危险删除之前先“看一眼”删除命令rm几乎人人都会用但真正理解它风险的人不多。最基本的用法rm file.txt # 删除文件 rm -r dir # 递归删除目录 rm -f file.txt # 强制删除不询问问题出在组合使用上。rm -rf是网上最常见的“神命令”但新手最好把它当成一个危险信号而不是默认操作。删除前先做一件事用ls或者通配符确认要删除的到底是谁。比如你想删除所有.log文件可以先执行ls -l *.log确认列表里只有你打算删的文件再执行rm *.log我亲眼见过同事在 root 目录下想清理临时文件夹结果rm -rf /var /log中间多了一个空格写成了删除/var和/log两个目录差点把系统弄崩。Linux 里没有回收站删了就基本找不回来。所以给新手的建议是能不玩-rf就先别玩等对路径敏感度足够高了再在确实需要时使用。4. 查看文件内容的三件套和系统帮助4.1 cat 适合小文件不适合日志滚屏cat会把文件内容直接输出到终端。看短文件很方便cat /etc/os-release这条命令在 Linux 上几乎是我每次登录新机器都会敲的就为了确认系统发行版和版本号。输入后你能看到类似PRETTY_NAMEUbuntu 22.04.3 LTS的内容。但 cat 有个明显的坑如果文件大它会把全部内容“轰”到屏幕上终端快速滚动你根本看不清内容还会误以为系统卡了。遇到这种情况别慌按Ctrl C中断即可。想看大文件用下面的 less。4.2 less 更适合阅读tail 适合看日志尾巴less是 Linux 上的分页阅读器适合查看长文件less /var/log/syslog进入 less 后可以用方向键上下滚动按空格翻下一页按g跳到文件开头按G跳到末尾按/输入关键词搜索按n跳转到下一个匹配项按q退出。另一个高频率命令是tail默认显示文件最后 10 行。它的-f参数是“follow”的意思表示实时跟随文件增长。我在排查日志时几乎离不开它tail -f /var/log/nginx/access.log执行后终端会持续显示新增的日志行直到你按Ctrl C退出。这是 Web 运维里确认请求是否正常进来的最直观方式。初学者练的时候可以开一个终端tail -f在另一个终端往文件里追加内容观察实时变化。4.3 man 和 --help系统自带的“说明书”很多命令背不住参数这不怪你因为没人需要全背。Linux 自带帮助系统最常用的是man lsman 会打开命令的完整手册内部同样用q退出。手册里最重要的部分是 SYNOPSIS语法摘要方括号里的内容都是可选参数。另一个快速查看方式是ls --help大部分 GNU 工具支持--help会输出一套更简短的使用提示。日常用--help查参数遇到特别正式或复杂的问题再翻 man效率和深度都会更好。5. 记忆和补全命令行效率的核心秘密5.1 用 history 找回你敲过的命令bash 会把当前用户的命令历史保存在内存中并定期写入家目录下的.bash_history文件。查看方式就是history你会看到带序号的历史命令清单。想重新执行某一条不用把它完整再敲一遍用!序号就行!1024还有一个高频操作是Ctrl R进入反向搜索。输入几个关键词bash 会匹配最近的包含关键词的命令继续按Ctrl R可以跳到更早的匹配项按回车直接执行。我不建议刚学的时候硬背命令表。更有效的做法是“故意犯错”想不起来了就history | grep 关键词看看之前是怎么敲的。这个过程本身就在帮你建立肌肉记忆。5.2 Tab 补全和通配符省力气也在防错Tab 键是命令行里最被低估的按钮。输入路径或命令时按一次 Tabbash 会尝试自动补全如果有多个候选按两次 Tab 会列出所有可能。比如你想进入/etc/nginx/conf.d不需要一个个敲全输入/etc/ngin然后按 Tab 补全再输con按 Tab一路补全进去。这个习惯一旦养成你打错路径的概率会大大下降因为补全不出来往往就代表路径不对。通配符则是批量操作的好帮手*匹配任意长度的字符例如*.log匹配所有以.log结尾的文件?匹配单个字符例如file?.txt可以匹配file1.txt但不匹配file10.txt[abc]匹配括号中的任意一个字符例如file[12].txt匹配file1.txt和file2.txt通配符在ls、rm、cp这些命令里都能用。前提是你知道它展开后会变成什么样子最好先用ls看一遍再执行真正的操作。5.3 几个最重要的 Ctrl 组合键命令行是“击键操作”记住几个快捷键能让你少按很多次方向键快捷键作用Ctrl C中断当前正在运行的命令Ctrl Z挂起当前命令放到后台Ctrl A光标移动到行首Ctrl E光标移动到行尾Ctrl U删掉光标左侧所有字符Ctrl K删掉光标右侧所有字符Ctrl W删除光标前一个单词Ctrl L清屏相当于clearCtrl D退出当前 shell相当于输入exit这里重点说Ctrl Z。挂起不是终止进程还在后台占着。比如你在编辑文件时按了Ctrl Z重新回到终端看似正常但实际上文件编辑器进程还在运行。如果你继续操作同一个端口或文件可能会提示资源占用。想恢复它用jobs查看挂起任务再用fg调回前台。6. 命令找不到、没权限、卡住不动的排查思路6.1 command not found 不一定是命令不存在新手最常遇到的报错是bash: mycommand: command not found第一反应是检查拼写。排除拼写问题后再想想这个命令是不是安装在你系统的PATH环境变量里输入echo $PATH可以看到一串目录bash 会按顺序在那些目录里查找可执行文件。如果命令装在了/opt/bin而/opt/bin不在$PATH中那你直接敲命令名就找不到。排查命令位置用whichwhich python3如果输出了类似/usr/bin/python3的路径说明命令存在也可以知道它被安装在哪。还有一种情况你自己写了一个脚本my.sh放在当前目录直接敲my.sh大概率会报“command not found”因为当前目录不在 PATH 中。正确执行方式是给脚本加上执行权限后用./my.sh运行这里的./明确告诉 bash“就在当前目录找”。6.2 Permission denied不是拒绝而是缺执行权限如果文件存在但执行时报Permission denied通常是因为文件没有“可执行”权限。用ls -l看权限位-rw-r--r-- 1 zhangsan zhangsan 0 Jan 1 00:00 myscript.sh权限串前三位的rw-表示你只有读写权限没有x执行权限。给文件加上执行权限chmod x myscript.sh再执行./myscript.sh就正常了。这里补一句不要为了图省事把所有脚本都拿 root 权限去执行更要避免把当前目录.加到 PATH 里。因为那样的话如果有人在你当前目录放了一个恶意命令bash 可能会优先执行它这个风险在生产环境尤其不能忽视。6.3 常见问题速查表现象可能原因常用处理提示符变成命令不执行引号未闭合、反斜杠续行Ctrl C取消当前输入command not found拼写错误、命令未安装、路径不在 PATH用which排查确认安装Permission denied无执行权限ls -l查看权限chmod x添加执行权限文件名带空格无法操作未加引号或未转义使用my file或my\ file命令一直不返回前台命令长时间运行Ctrl C中断或后台运行刚启动终端没有正常提示符可能进入了其他 shell 或环境变量被改乱检查~/.bashrc必要时恢复默认配置这六类问题基本覆盖了命令行新手头两周会碰到的绝大部分故障。以后你遇到更诡异的报错思路也是一样先确认“命令是否存在”“路径是否正确”“权限是否足够”再往系统日志方向查。写到这儿第二天的内容其实已经覆盖了提示符、目录命令、文件基础操作、文件查看、历史记录、权限排查这些主线。我个人在带新人时最看重的不是让他们背下所有参数而是培养一种“对话感”每次敲错、每次 command not found都在帮你更精确地理解系统正在做什么。所以接下来几天不用急着往下学把ls -l的输出反复看几遍把cd的路径跳转玩熟把history里重复出现的命令改成别名这些听上去笨拙的小事才是后面学管道、学脚本、学权限体系时最扎实的底子。