第二天,咱们的 Linux 学习正式进入“动手”环节。昨天装好系统、配好网络之后,你今天打开终端,大概率会看到一个末尾带着$或#的光标在闪。这个界面就是绝大多数 Linux 初学者和命令行提示符第一次正式碰面的地方,也是后面所有操作的主战场。
很多人觉得提示符只是“等你输入命令”的摆设,其实不是。提示符里藏了当前用户、主机名、当前目录、权限级别这些关键信息。读不懂提示符,你会在服务器上敲错命令、删错目录而不自知;读懂了,每一行命令都有上下文的“地图”。这篇笔记把提示符的每个字符拆开讲清楚,再把 Linux 使用频率最高的一批基础命令按“看位置、看文件、增删改、查记忆”几个场景串一遍。适合刚装完 Linux、准备从零开始打命令基础的人看,也适合准备突击复习、或者面试前想快速把 Linux 基础命令捡起来的同学找手感。
1. 命令提示符是怎么工作的:看到的一切都不是摆设
1.1 一个典型提示符的组成拆解
在终端里最常见的提示符长这样:
root@localhost:~#或者这样:
zhangsan@ubuntu:~$拆开看,每一段都有意义。
- 第一段
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 -ltr
ls -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 dir,bash 会把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参数特别重要。复制目录时不加-r,cp 会明确提示“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_NAME="Ubuntu 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 键是命令行里最被低估的按钮。输入路径或命令时,按一次 Tab,bash 会尝试自动补全;如果有多个候选,按两次 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 | 清屏,相当于clear |
Ctrl + 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中,那你直接敲命令名就找不到。
排查命令位置用which:
which 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里重复出现的命令改成别名,这些听上去笨拙的小事,才是后面学管道、学脚本、学权限体系时最扎实的底子。