第一周详细练习手册:命令行生存指南
好的,我们回到第一周,补上这份详细的命令行生存练习。把 CentOS 9 虚拟机打开,我们开始。
第一周详细练习手册:命令行生存指南
核心目标:脱离鼠标,在纯黑窗口里完成所有文件操作、文本搜索、进程查看。把这些命令练到不用过脑子。
第一天:认识你的工作环境
练习 1:登录后先看一圈
# 1. 看看自己是谁
[xtc@localhost ~]$ whoami
xtc
# 2. 看看自己在哪个目录(pwd = Print Working Directory)
[xtc@localhost ~]$ pwd
/home/xtc
# 3. 看看当前目录下有什么文件(包括隐藏文件)
[xtc@localhost ~]$ ls -lha
total 28K
drwx------. 4 xtc xtc 4.0K Apr 28 10:00 .
drwxr-xr-x. 3 root root 4.0K Apr 27 09:00 ..
-rw-r--r--. 1 xtc xtc 18 Apr 28 09:00 .bash_logout
-rw-r--r--. 1 xtc xtc 141 Apr 28 09:00 .bash_profile
-rw-r--r--. 1 xtc xtc 376 Apr 28 09:00 .bashrc
drwxr-xr-x. 2 xtc xtc 4.0K Apr 28 09:00 .ssh
怎么读这个输出:
|
列 |
示例 |
含义 |
|
第1列 |
|
文件类型和权限(d开头=目录,-开头=普通文件) |
|
第2列 |
|
硬链接数,不用管 |
|
第3列 |
|
文件所有者 |
|
第4列 |
|
文件所属组 |
|
第5列 |
|
文件大小( |
|
第6-8列 |
|
最后修改时间 |
|
第9列 |
|
文件名( |
ls 参数记忆法:
-
-l= long,长格式,看详细信息 -
-h= human,大小变 K/M/G,不用数位数 -
-a= all,包括隐藏文件
练习 2:在目录树里自由移动
# 1. 进入根目录
[xtc@localhost ~]$ cd /
[xtc@localhost /]$ pwd
/
# 2. 看根目录下有什么(你之前截图的画面)
[xtc@localhost /]$ ls -a
. afs boot etc ib media opt root sbin sys usr
.. bin dev home lib64 mnt proc run srv tmp var
# 3. 进入 /etc 目录(配置大本营)
[xtc@localhost /]$ cd /etc
[xtc@localhost etc]$ pwd
/etc
# 4. 返回上一级目录
[xtc@localhost etc]$ cd ..
[xtc@localhost /]$ pwd
/
# 5. 返回上一次所在的目录(像遥控器的"返回"键)
[xtc@localhost /]$ cd -
/etc
[xtc@localhost etc]$ pwd
/etc
# 6. 直接回家(三种方法等价)
[xtc@localhost etc]$ cd ~
[xtc@localhost ~]$ pwd
/home/xtc
[xtc@localhost etc]$ cd
[xtc@localhost ~]$ pwd
/home/xtc
[xtc@localhost etc]$ cd /home/xtc
[xtc@localhost ~]$ pwd
/home/xtc
核心技巧:cd - 是和 cd .. 并列的高频命令。两个目录之间来回切,就靠它。
第二天:文件操作——创建、复制、移动、删除
练习 3:创建目录和文件
# 1. 先回到自己的家目录
[xtc@localhost ~]$ cd ~
[xtc@localhost ~]$ pwd
/home/xtc
# 2. 创建一个练习用的目录
[xtc@localhost ~]$ mkdir week1-practice
# 3. 一次性创建多层目录
[xtc@localhost ~]$ mkdir -p week1-practice/subdir/logs
# -p 是 parent,如果父目录不存在自动创建,没有它且父目录不存在会报错
# 4. 验证目录结构(tree 命令需要 yum install tree,没有就用 ls -R)
[xtc@localhost ~]$ ls -R week1-practice/
week1-practice/:
subdir
week1-practice/subdir:
logs
week1-practice/subdir/logs:
练习 4:创建文件并写入内容
# 1. 进入练习目录
[xtc@localhost ~]$ cd week1-practice
# 2. 用 echo 创建包含一行文字的文件(> 是覆盖写入)
[xtc@localhost week1-practice]$ echo "这是第一周练习文件" > readme.txt
# 3. 查看文件内容(cat = concatenate,连接并打印)
[xtc@localhost week1-practice]$ cat readme.txt
这是第一周练习文件
# 4. 追加内容(>> 是追加,不会覆盖原有内容)
[xtc@localhost week1-practice]$ echo "这是第二行内容" >> readme.txt
[xtc@localhost week1-practice]$ cat readme.txt
这是第一周练习文件
这是第二行内容
# 5. 用 touch 创建空文件(或者更新已有文件的时间戳)
[xtc@localhost week1-practice]$ touch empty.txt
[xtc@localhost week1-practice]$ ls -l
total 2
-rw-r--r--. 1 xtc xtc 0 Apr 28 10:30 empty.txt
-rw-r--r--. 1 xtc xtc 48 Apr 28 10:25 readme.txt
# 注意:空文件大小是 0
练习 5:复制文件(运维命根子功夫)
# 1. 备份!配置前永远先备份!(生产环境铁律)
[xtc@localhost week1-practice]$ cp readme.txt readme.txt.bak
# 2. 验证备份
[xtc@localhost week1-practice]$ ls -l
total 4
-rw-r--r--. 1 xtc xtc 0 Apr 28 10:30 empty.txt
-rw-r--r--. 1 xtc xtc 48 Apr 28 10:25 readme.txt
-rw-r--r--. 1 xtc xtc 48 Apr 28 10:32 readme.txt.bak
# 3. 复制整个目录(用 -r 递归)
[xtc@localhost week1-practice]$ cp -r subdir subdir-backup
[xtc@localhost week1-practice]$ ls -R
.:
empty.txt readme.txt readme.txt.bak subdir subdir-backup
./subdir:
logs
./subdir/logs:
./subdir-backup:
logs
./subdir-backup/logs:
> vs >> 速记:
-
>一个尖头,覆盖。一个尖头把原来的顶没了。 -
>>两个尖头,追加。第二个接着第一个往下写。
练习 6:移动和重命名
# 1. 重命名文件(mv 的原地改名用法)
[xtc@localhost week1-practice]$ mv readme.txt.bak readme-v2.txt
[xtc@localhost week1-practice]$ ls
empty.txt readme.txt readme-v2.txt subdir subdir-backup
# 2. 把文件移动到子目录里
[xtc@localhost week1-practice]$ mv empty.txt subdir/
[xtc@localhost week1-practice]$ ls subdir/
empty.txt logs
# 3. 文件挪个地方并同时改名
[xtc@localhost week1-practice]$ mv readme-v2.txt subdir/logs/doc-v2.txt
[xtc@localhost week1-practice]$ ls subdir/logs/
doc-v2.txt
练习 7:删除——带敬畏之心
# 1. 先看看要删什么(养成习惯)
[xtc@localhost week1-practice]$ ls subdir/logs/
doc-v2.txt
# 2. 删除一个文件
[xtc@localhost week1-practice]$ rm subdir/logs/doc-v2.txt
[xtc@localhost week1-practice]$ ls subdir/logs/
# 空了
# 3. 删除一个非空目录(-r 递归,-f 强制不询问)
[xtc@localhost week1-practice]$ rm -rf subdir-backup
[xtc@localhost week1-practice]$ ls
readme.txt subdir
🚨 rm 安全守则:
-
永远不在生产环境用
rm -rf /(或者在/后有空格的任何变体)。 -
删之前先用
ls确认一遍路径。 -
不确定时,先
mv到一个临时目录放几天,确定没用了再删。
第三天:查找与搜索——运维效率分水岭
练习 8:find——按名字找文件
# 1. 先在 /etc 下找所有以 .conf 结尾的配置文件
[xtc@localhost ~]$ find /etc -name "*.conf"
/etc/asound.conf
/etc/dnf/dnf.conf
/etc/selinux/config
...(会有很多输出)
# 2. 只查找文件,不查目录
[xtc@localhost ~]$ find /etc -type f -name "*.conf"
# 3. 在 /home 下找你自己的文件
[xtc@localhost ~]$ find /home -name "readme*"
/home/xtc/week1-practice/readme.txt
# 4. 查找最近一天修改过的文件(-mtime -1 就是 1 天以内)
[xtc@localhost ~]$ find /home -mtime -1
什么时候用 find:忘了文件放哪了,但记得名字或大概时间。
练习 9:grep——在海量文本中捞针
# 1. 先在 /var/log 里看看有没有认证失败的记录
[xtc@localhost ~]$ grep -i "fail" /var/log/messages
# -i 忽略大小写,FAIL、fail、Fail 全能搜到
# 2. 在 /etc/passwd 里搜你的用户名
[xtc@localhost ~]$ grep "xtc" /etc/passwd
xtc:x:1000:1000:xtc:/home/xtc:/bin/bash
# 3. 一次搜多个关键词(正则:用 | 表示"或")
[xtc@localhost ~]$ grep -E "root|xtc" /etc/passwd
root:x:0:0:root:/root:/bin/bash
xtc:x:1000:1000:xtc:/home/xtc:/bin/bash
# 4. 显示匹配行的行号(方便后续用 vim 直接跳转)
[xtc@localhost ~]$ grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
grep 的三个永恒参数:
-
-i:不管大小写 -
-n:给出行号 -
-r:搜整个目录
第四天:进程查看——系统在忙什么
练习 10:ps——给所有进程拍快照
# 1. 查看当前终端自己的进程
[xtc@localhost ~]$ ps
PID TTY TIME CMD
1234 pts/0 00:00:00 bash
1456 pts/0 00:00:00 ps
# 2. 查看系统所有进程(a=所有用户, u=详细信息, x=不依赖终端)
[xtc@localhost ~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 179876 14388 ? Ss 09:00 0:01 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 09:00 0:00 [kthreadd]
# ... 数百行输出 ...
# 3. 用 grep 过滤,只看 ssh 服务
[xtc@localhost ~]$ ps aux | grep ssh
root 890 0.0 0.1 12108 7436 ? Ss 09:01 0:00 /usr/sbin/sshd -D
xtc 1234 0.0 0.0 6024 1864 ? S 09:02 0:00 sshd: xtc@pts/0
# 4. 排除 grep 自身这条干扰行
[xtc@localhost ~]$ ps aux | grep -v grep | grep ssh
root 890 0.0 0.1 12108 7436 ? Ss 09:01 0:00 /usr/sbin/sshd -D
xtc 1234 0.0 0.0 6024 1864 ? S 09:02 0:00 sshd: xtc@pts/0
ps aux 怎么记:不是英文单词,是三个参数的组合 ps a u x。
关键列解读:
|
列 |
含义 |
什么时候看 |
|
PID |
进程ID |
要杀进程时用的唯一标识 |
|
%CPU |
CPU使用百分比 |
系统卡顿时找谁在吃CPU |
|
%MEM |
内存使用百分比 |
内存报警时找谁在吃内存 |
|
STAT |
进程状态 |
S=睡眠,R=运行,Z=僵尸 |
|
COMMAND |
进程命令行 |
看是什么程序 |
练习 11:top——动态实时监控
# 启动 top(按 q 退出)
[xtc@localhost ~]$ top
你会进入一个每3秒刷新一次的画面:
top - 14:30:15 up 5:30, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 108 total, 1 running, 107 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3708.0 total, 2180.0 free, 512.0 used, 1016.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 2900.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 xtc 20 0 6024 1864 1028 S 0.0 0.1 0:00.15 sshd
top 里的关键指标:
-
load average:三个数字是1分钟/5分钟/15分钟的系统平均负载。单核CPU这个值不应该长期超过1。
-
id(CPU空闲率):99.5,说明系统基本在睡大觉。
-
%MEM:内存占用。这里不用盯着看,系统会把剩余内存做缓存(buff/cache),这是正常操作。
top 内的快捷键:
-
q— 退出 -
1— 展开/折叠每个CPU核心的占用 -
k— 杀进程(输入PID再输入信号,15是温柔提请,9是直接枪毙)
第五天:日志查看——排错的起点
练习 12:systemctl 管理服务(此处需要先安装ssh服务,明天出教程,今天限制了)
# 1. 查看 SSH 服务状态
[xtc@localhost ~]$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
Active: active (running) since Mon 2026-04-28 09:01:00 CST; 5h ago
Docs: man:sshd(8)
Main PID: 890 (sshd)
Tasks: 1 (limit: 4962)
Memory: 2.8M
CPU: 0.015s
CGroup: /system.slice/sshd.service
└─890 /usr/sbin/sshd -D
# 2. 看到 active (running) = 服务正在跑
# 看到 loaded 的 enabled = 开机自启,disabled = 要手动启动
# 3. 查看你的系统里有哪些开机自启的服务
[xtc@localhost ~]$ systemctl list-unit-files --state=enabled | head -15
练习 13:tail 追踪日志——运维的日常形态
# 1. 打开两个终端,左右并排。两个终端都登录好。
# 2. 终端1:实时追踪系统日志
[xtc@localhost ~]$ sudo tail -f /var/log/messages
# 现在它会挂着,等待新日志进来
# 3. 终端2:重启 SSH 服务,制造日志
[xtc@localhost ~]$ sudo systemctl restart sshd
# 切换回终端1,看新刷出来的日志行,大概像这样:
Apr 28 14:45:01 localhost systemd[1]: Stopping OpenSSH server daemon...
Apr 28 14:45:01 localhost systemd[1]: Stopped OpenSSH server daemon.
Apr 28 14:45:01 localhost systemd[1]: Starting OpenSSH server daemon...
Apr 28 14:45:01 localhost sshd[2345]: Server listening on 0.0.0.0 port 22.
Apr 28 14:45:01 localhost systemd[1]: Started OpenSSH server daemon.
# 4. 按 Ctrl+C 退出 tail -f
这就是生产环境的日常:一个窗口改配置,另一个窗口盯着日志看有没有报错。
练习 14:查看磁盘空间
# 1. 查看所有磁盘分区的使用情况
[xtc@localhost ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/mapper/centos-root 17G 2.8G 15G 16% /
/dev/sda1 1014M 185M 830M 19% /boot
tmpfs 1.9G 8.7M 1.9G 1% /run
tmpfs 371M 0 371M 0% /run/user/0
# 2. 重点看 Use%,接近 100% 就该报警了。
# /boot 满了会出大问题(旧内核不清理),/ 满了系统濒死。
第六天:求助系统——学会自己找答案
练习 15:访问内置帮助
# 1. man 就是 manual,命令的使用手册
[xtc@localhost ~]$ man ps
# 按 / 可以搜索,输入 -e 然后回车,会高亮所有 -e
# 按 n 跳下一个匹配,N 跳上一个
# 按 q 退出 man
# 2. 如果 man 太长不想读,用 --help 看精简版
[xtc@localhost ~]$ ps --help
# 列出所有参数和一句话解释
# 3. 某个命令是干什么用的?
[xtc@localhost ~]$ whatis grep
grep (1) - print lines that match patterns
养成习惯:遇到不会的参数,先敲 命令 --help,看不懂再 man 命令,再不懂最后才去搜 CSDN/StackOverflow。第一手资料永远是准确的。
第七天:综合大演练
把这一周学的串起来,不走神地完成一遍:
# 1. 登录,看一圈
whoami
pwd
ls -lha
# 2. 在 /home/xtc 下新建 final-test 目录,在里面建 logs 子目录
mkdir -p ~/final-test/logs
# 3. 进去,建一个文件,写点内容
cd ~/final-test
echo "这是最终测试" > test.txt
echo "追加一行" >> test.txt
cat test.txt
# 4. 备份文件,再改名
cp test.txt test.txt.bak
mv test.txt.bak test-v2.txt
# 5. 在 /var/log 里搜错误
grep -in "error" /var/log/messages | head -10
# 6. 看 SSH 服务状态,查它的进程
systemctl status sshd
ps aux | grep -v grep | grep ssh
# 7. 用 find 在 /etc 下找所有 .conf 文件,只显示前 5 个
find /etc -name "*.conf" 2>/dev/null | head -5
# 注:2>/dev/null 是扔掉权限不足的错误信息,让输出清爽
# 8. 看磁盘空间
df -h
# 9. 看实时负载
top -n 1 -b | head -5
# -n 1 刷新一次就退出,-b 是批处理模式适合脚本
# 10. 清理现场(删除练习文件)
rm -rf ~/week1-practice ~/final-test
本周能力自检
不查笔记,独立完成以下动作即过关:
-
cd在三个目录间穿梭,用cd -来回切。 -
创建一个三层的目录结构,在里面建文件、写内容、追加内容。
-
cp备份文件,mv改名,rm删除备份。 -
find搜文件名,grep搜文件内容,grep -E一次搜多个词。 -
ps aux | grep找进程,systemctl status看服务。 -
tail -f盯日志,另一个窗口重启服务观察日志输出。 -
man 命令查看帮助。
你第一周所有的练习,都是在为后续的脚本自动化、服务排错、生产故障响应打地基。把这些命令敲成肌肉记忆,第二周的用户权限和磁盘管理会轻松很多。有任何一步报错,截屏发我。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)