好的,我们回到第一周,补上这份详细的命令行生存练习。把 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列

drwx------

文件类型和权限(d开头=目录,-开头=普通文件)

第2列

4

硬链接数,不用管

第3列

xtc

文件所有者

第4列

xtc

文件所属组

第5列

4.0K

文件大小(-h 让它变成了人类可读的 K/M/G)

第6-8列

Apr 28 10:00

最后修改时间

第9列

.bashrc

文件名(. 开头的是隐藏文件)

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 安全守则

      1. 永远不在生产环境用 rm -rf /(或者在 / 后有空格的任何变体)。

      2. 删之前先用 ls 确认一遍路径。

      3. 不确定时,先 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


              本周能力自检

              不查笔记,独立完成以下动作即过关:

              1. cd 在三个目录间穿梭,用 cd - 来回切。

              2. 创建一个三层的目录结构,在里面建文件、写内容、追加内容。

              3. cp 备份文件,mv 改名,rm 删除备份。

              4. find 搜文件名,grep 搜文件内容,grep -E 一次搜多个词。

              5. ps aux | grep 找进程,systemctl status 看服务。

              6. tail -f 盯日志,另一个窗口重启服务观察日志输出。

              7. man 命令 查看帮助。

                你第一周所有的练习,都是在为后续的脚本自动化、服务排错、生产故障响应打地基。把这些命令敲成肌肉记忆,第二周的用户权限和磁盘管理会轻松很多。有任何一步报错,截屏发我。

                Logo

                AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

                更多推荐