Linux 基础命令
RHEL 9 日常文件与目录命令:pwd、ls 长格式、cd、touch、mkdir、rm、cat/less/head/tail、cp,附通配符、快捷键与综合练习。
本页目录
连上 Linux 之后,最先要建立的是「在哪个目录、这里有什么、怎么进出、怎么建删拷看」。本篇把 RHEL 9 日常文件与目录命令收成一条可复现路径:先认位置,再增删,再阅读与拷贝,最后用通配符和快捷键把效率拉起来。
系列:从 RHCSA 到 RHCE · 第 2 / 17 篇 上一篇:Linux 目录结构 下一篇:nmcli 配静态 IP 与 SSH 总目录:系列索引
环境说明
- 系统:RHEL 9 / Rocky 9 / AlmaLinux 9
- 身份:实验用 root;生产请改用普通用户 + sudo
- 建议:在
~或/tmp下练习,避免在系统目录随手删改
命令的通用形状
Linux 命令行基本都是三段:
命令 选项 参数
例如:
mkdir -p /tmp/lab/demo
| 段 | 例子 | 含义 |
|---|---|---|
| 命令 | mkdir | 调用哪个程序 |
| 选项 | -p | 程序怎么干(开关、模式) |
| 参数 | /tmp/lab/demo | 对谁干(路径、文件名) |
选项可以多个叠加,如 ls -lha。很多选项有长短两种形式(-a 与 --all),考试与文档里短选项更常见。
多个参数表示「对多个对象执行同一动作」:
touch a.txt b.txt c.txt
cp /etc/hosts /etc/hostname /tmp/
我在哪里:pwd
登录后默认进入自己的家目录:
- root →
/root - 普通用户 tom →
/home/tom
查看当前目录:
pwd
/root
cd 不接参数、或 cd ~,都会回到家目录。~ 是当前用户的家目录;~tom 表示 tom 的家目录(在有权限时)。
这里有什么:ls
ls # 当前目录
ls /boot # 指定目录
ls -l # 长格式
ls -a # 含隐藏文件(以 . 开头)
ls -lh # 长格式 + 人类可读容量(K/M/G)
ls -ld /tmp # 看目录本身而不是目录里的东西
ls -lt # 按修改时间排序(新的在上)
ls -lS # 按大小排序(大的在上)
颜色因终端主题而异,一般规律:
| 颜色(常见) | 含义 |
|---|---|
| 蓝色 | 目录 |
| 白色 / 黑色 | 普通文本文件 |
| 绿色 | 可执行程序 |
| 红色 | 压缩包、软件包或部分媒体文件 |
长格式 ls -l 逐列读
ls -l /etc/hosts
-rw-r--r--. 1 root root 158 Jun 9 10:00 /etc/hosts
| 列 | 本例 | 含义 |
|---|---|---|
| 1 | -rw-r--r--. | 类型 + 权限(末尾 . 与 SELinux 有关) |
| 2 | 1 | 硬链接数 |
| 3 | root | 属主 |
| 4 | root | 属组 |
| 5 | 158 | 字节大小(-h 会显示为 K/M) |
| 6–8 | Jun 9 10:00 | 最后修改时间 |
| 9 | /etc/hosts | 名字 |
类型字符:- 普通文件,d 目录,l 链接。权限九位的含义放在权限专篇,这里先会「看见属主、大小、名字」即可。
考点:
ls -l最后一列是名字;ls -ld用于查看目录自身的属性。
进出目录:cd
cd /boot # 绝对路径:从根开始
cd .. # 上一级
cd . # 仍在当前目录(少见,但合法)
cd - # 回到上一次所在的目录
cd # 回家目录
绝对路径以 / 开头;相对路径从当前位置算起。
路径心智练习
假设当前在 /var/log:
| 你输入 | 实际到了哪里 |
|---|---|
| cd .. | /var |
| cd ../.. | / |
| cd ../tmp | /var/tmp |
| cd /etc | /etc(绝对路径,与当前位置无关) |
| cd - | 回到执行上一条 cd 之前的位置 |
不确定时先 pwd;考试里时间紧,优先写绝对路径,减少相对路径算错。
新建文件:touch
touch qq.txt # 当前目录建空文件
touch a.txt b.txt c.txt # 一次建多个
touch /tmp/cc.txt # 在指定目录建
touch 若文件已存在,则只更新时间戳,不会清空内容。这一点和 Ansible 的 state=touch 思想类似:幂等、不破坏已有数据。
若只想要「有内容的文件」,可以用重定向(覆盖或追加):
echo "hello" > file.txt # 覆盖写入(文件不存在则创建)
echo "world" >> file.txt # 追加一行
新建目录:mkdir
mkdir test # 当前目录下建 test
mkdir /tmp/lab # 指定路径
mkdir -p /tmp/lab/demo # 父目录不存在时一并创建
mkdir -p a/b/c # 一次建多级
不加 -p 时,父目录缺失会直接失败:
mkdir /tmp/not-exist/sub
mkdir: cannot create directory '/tmp/not-exist/sub': No such file or directory
易错:多级路径几乎总要
-p。脚本里漏-p是高频报错点。
删除:rm(务必谨慎)
RHEL 9 上的 GNU rm:对可写的普通文件,默认直接删,不问 y/n。只有加了 -i(或更省事的 -I),或目标写保护且标准输入是终端时,才会交互确认。
rm file.txt # 直接删除(默认无确认)
rm -i file.txt # 每个文件都问一次 y/N
rm -I file.txt # 删多个或递归时,整批问一次
rm -f file.txt # 强制:不提示,文件不存在也不报错
rm -r dirname # 递归删目录(默认同样无确认)
rm -rf dirname # 递归 + 强制,删得最「顺」,也最危险
目录不能像文件那样直接 rm:
rm test
rm: cannot remove 'test': Is a directory
危险:
rm -rf没有回收站。路径写错(尤其是rm -rf /、rm -rf /home/*这类)可能直接毁掉系统。 实验里先ls确认目标;生产上重要数据优先备份或先改名观察,需要确认时用rm -i/rm -I。 考试环境可还原快照,但仍建议慢半拍。
通配符与删除的关系
* 匹配任意长度字符,? 匹配单个字符。先 ls 展开,再决定删不删:
ls lab/day02/*.bak # 先看会删到谁
rm -i lab/day02/*.bak # 再删
不要在未确认目录时执行 rm -rf *。
看文件内容
cat:适合短文本
cat /etc/hostname
cat /etc/passwd
cat -n /etc/hosts # 显示行号
cat 会把全文打到终端,不要用它打开图片、音频、视频或超长日志。
head / tail:只看头尾
head /etc/passwd # 默认前 10 行
head -n 5 /etc/passwd # 前 5 行
tail /var/log/messages # 默认后 10 行
tail -n 20 /var/log/messages
tail -f /var/log/messages # 跟踪追加(排障常用,Ctrl+C 退出)
只想看「文件有没有被改坏」时,head + tail 往往比 cat 更安全。
less:适合长文件
less /etc/services
在 less 里:
| 按键 | 作用 |
|---|---|
| 空格 | 下一页 |
| b | 上一页 |
| 上下方向键 | 逐行 |
| /关键词 | 向下搜索,n 下一个 |
| ?关键词 | 向上搜索 |
| g / G | 文件开头 / 末尾(部分环境 gg) |
| q | 退出 |
分页阅读是排障基本功:配置改完先 less 确认,再 systemctl reload。
拷贝:cp
cp /etc/hosts /tmp/hosts.bak # 文件 → 新路径/新名
cp -r /etc/yum.repos.d /tmp/repos.bak # 递归拷贝目录
cp -p file.bak file # 保留权限、时间等属性
cp -a src dest # 归档模式:近似「原样搬走」
目录不加 -r 会失败:
cp /etc /tmp/etc-copy
cp: -r not specified; omitting directory '/etc'
目标已存在时,默认覆盖且不提示。需要确认或禁止覆盖:
cp -i hosts hosts.bak # 覆盖前问 y/N
cp -n hosts hosts.bak # 目标已存在则跳过,不覆盖
考点:备份配置文件时,习惯用
cp -a或cp -p保留属性;只拷内容用默认cp即可。
拷到目录还是改名?
| 命令 | 若 dest 是已存在的目录 | 结果 |
|---|---|---|
| cp file dest | 是 | 得到 dest/file |
| cp file dest | 否 | 得到名为 dest 的新文件 |
| cp -r dir dest | 是 | 得到 dest/dir |
| cp file1 file2 dest | 必须是目录 | 多个源文件时目标必须是目录 |
关机与重启
poweroff # 关机
reboot # 重启
shutdown -r +1 # 1 分钟后重启(可广播)
虚拟机里更常用平台的关机按钮;命令行关机适用于 SSH 维护窗口。
终端效率:快捷键与通配符
| 快捷键 | 作用 |
|---|---|
| Tab | 补全命令或路径;不唯一时按两次列出候选 |
| Ctrl + C | 中断当前命令 |
| Ctrl + L | 清屏(等价 clear) |
| Ctrl + A / Ctrl + E | 行首 / 行尾 |
| Ctrl + U / Ctrl + K | 清除光标前 / 后内容 |
| Ctrl + R | 反向搜索历史命令 |
| ↑ / ↓ | 翻历史 |
高频路径靠 Tab,不要手打全路径。命令打错时 Ctrl + C 比连按退格更干净。
通配符(shell 展开,不是每个命令自带):
ls *.txt # 当前目录所有 .txt
ls lab/day02/?.txt
ls /etc/*conf # 以 conf 结尾
路径含空格时必须加引号,否则会被拆成多个参数:
touch "my file.txt"
cat "my file.txt"
推荐练习(约 15 分钟)
在虚拟机以 root 执行($HOME 即你的家目录):
cd
pwd
mkdir -p lab/day02/sub
cd lab/day02
touch note.txt a.txt b.txt
echo "hello rhel9" > note.txt
echo "line2" >> note.txt
cat -n note.txt
cp note.txt note.bak
cp -i note.txt note.bak # 应提示是否覆盖,输入 n
ls -l
head -n 1 note.txt
tail -n 1 note.txt
cd sub
touch deep.txt
cd ../
ls -l sub/
cp -r sub sub2
rm -r sub2
ls
cd ~
ls -ld lab/day02
期望结果
lab/day02下有:note.txt、note.bak、a.txt、b.txt、subsub/下有deep.txt- 没有
sub2 note.txt含两行,note.bak内容与第一次cp时一致(cp -i选了n则未覆盖)
速查表
| 目标 | 命令 |
|---|---|
| 当前路径 | pwd |
| 列目录 | ls / ls -l / ls -a / ls -lh |
| 切换目录 | cd path / cd / cd - |
| 建文件 | touch file;echo text > file |
| 建目录 | mkdir -p dir |
| 删文件 | rm file(默认无确认)/ rm -i file |
| 删目录 | rm -r dir;rm -rf dir(慎用) |
| 看短文件 | cat / cat -n |
| 看头尾 | head -n / tail -n / tail -f |
| 看长文件 | less file |
| 拷文件/目录 | cp / cp -r / cp -a / cp -i |
| 补全 | Tab |
| 中断 | Ctrl + C |
考点与易错
考点:
mkdir -p、cp -r、rm -r/-f的选项组合几乎是白给分,但写反(对目录用cp、对多级路径不用-p)会浪费考试时间。 易错:在错误的目录下rm -rf *。删之前pwd+ls。 易错:用cat打开大日志把终端卡住,改用less或head/tail。 易错:路径含空格未加引号,参数被拆开。 易错:cp以为不会覆盖,实际目标同名时静默覆盖——重要文件先cp -i或先备份。 练习环境:课堂若在red虚拟机操作,命令与本文一致,仅主机名和提示符不同。
小结
- 先
pwd/ls确认位置,再动手增删拷;长格式先读属主、大小、名字。 - 多级建目录用
mkdir -p;拷目录用cp -r;删目录用rm -r,rm -rf要多想一秒。 - 短文件
cat,只看头尾head/tail,长文件less;通配符先ls再删。 - 日常靠
Tab和Ctrl + C提效。
下一篇把节点配成固定 IP,并用 SSH 从管理机远程进来——文件命令只有在网络上才有实战意义。
系列导航:总目录 · 上一篇:Linux 目录结构 · 下一篇:nmcli 配静态 IP 与 SSH