6 Linux命令行

8.1 前言

8.1.1 核心概念定义

术语

定义

典型应用场景

Shell

用户与操作系统内核交互的命令解释器

执行命令/脚本解释

终端

提供命令行接口的应用程序(Terminal Emulator)

GNOME Terminal/Konsole

控制台

直接连接系统硬件的物理输入输出设备(Console Device)

服务器维护/系统故障恢复

8.1.2 Linux命令行特点

  • 高效性:通过文本指令快速完成复杂操作

  • 可编程性:支持脚本自动化任务

  • 远程管理:通过SSH实现跨网络控制

  • 资源消耗低:仅需文本界面即可运行


8.2 打开终端

8.2.1 桌面环境

  • 快捷键Ctrl + Alt + T

  • 图形菜单:Applications → System Tools → Terminal

8.2.2 串口登录

# 安装串口工具
sudo apt install minicom

# 连接串口设备
sudo minicom -D /dev/ttyUSB0 -b 115200

8.2.3 SSH登录

ssh username@192.168.1.100 -p 22

8.2.4 ADB连接

adb shell  # 进入Android/Linux设备命令行

8.3 命令行提示符

8.3.1 标准格式

[user@hostname current_dir]$ 
  • 用户身份标识

    • $ 普通用户

    • # root用户

  • 动态信息:当前用户名、主机名、工作目录

8.3.2 自定义提示符(修改PS1变量)

export PS1='\[\e[32m\]\u@\h:\w\$ \[\e[0m\]'  # 绿色提示符

8.4 命令行详解

8.4.1 命令格式

command [options] [arguments]
  • 选项-短格式(如-l)或--长格式(如--all

  • 参数:操作对象(文件/目录等)

8.4.2 命令帮助系统

帮助方式

示例

适用场景

--help

ls --help

快速查看选项说明

man手册

man bash

查看完整文档

info文档

info coreutils

GNU项目详细指南

8.4.3 执行流程

  1. 输入命令并回车

  2. Shell解析指令

  3. 查找可执行文件(通过$PATH

  4. 加载程序到内存执行

  5. 返回退出状态码($?变量)

8.4.4 核心功能

  • 自动补全:按Tab键补全命令/路径

  • 历史记录/键浏览,history查看

  • 快捷操作

    • Ctrl + C 终止进程

    • Ctrl + D 退出Shell

    • Ctrl + R 反向搜索历史


8.5 常用命令速查

8.5.1 文件/目录操作基础

命令 常用参数 示例 说明 注意事项
cd .. (上级目录) cd Documents 进入Documents目录 路径区分大小写
~ (用户主目录) cd ~/Downloads 进入当前用户的下载目录 输入cd直接回家目录
- (返回上一目录) cd - 返回上一次所在的目录 结合pwd查看路径
ls -l (详细列表) ls -l 显示文件权限、大小等详细信息 推荐用ls -lah组合
-a (显示隐藏文件) ls -a 包含以.开头的隐藏文件 慎删隐藏文件
-h (人性化大小) ls -lh 文件大小显示为KB/MB
pwd pwd 显示当前所在目录的绝对路径 路径中不要有空格
mkdir -p (递归创建) mkdir -p dir1/dir2 同时创建多级目录 目录名避免特殊字符
rmdir rmdir empty_dir 删除空目录 非空目录用rm -r
touch touch newfile.txt 创建空白文件/更新文件时间戳 不能创建目录
rm -r (递归删除) rm -r old_dir 删除目录及内容 危险操作!先用ls确认
-f (强制删除) rm -f *.log 强制删除所有.log文件 数据不可恢复!
mv mv file.txt ../backup/ 移动文件到上级backup目录 可跨磁盘分区
mv old.txt new.txt 重命名文件 会覆盖已有文件
cp -r (复制目录) cp -r src_dir dest_dir 递归复制整个目录 目标目录不存在会自动创建
-v (显示进度) cp -v file*.txt ~/backup 复制时显示文件名
cat -n (显示行号) cat -n config.conf 查看文件内容并显示行号 大文件用less更安全
> (重定向) cat file1.txt > file2.txt 将file1内容覆盖到file2 谨慎使用重定向

8.5.2 文本编辑基础(vi)

操作 快捷键 说明 注意事项
进入编辑模式 i 在光标前插入文字 底部显示-- INSERT --
保存并退出 :wq 保存修改并退出 需要先按Esc退出编辑模式
强制退出不保存 :q! 放弃所有修改退出 慎防误操作
搜索文本 /keyword 向下搜索关键字 n跳转下一个
显示行号 :set nu 显示行号便于调试

8.5.3 组合使用技巧

# 创建并进入目录
mkdir -p project/docs && cd project

# 安全删除旧日志(先查看再删除)
ls *.log && rm *.log

# 备份重要文件
cp -v /etc/*.conf ~/backup/

# 快速查看最后10行日志
tail -n 10 /var/log/syslog

8.5.4 注意事项

  1. 删除危险操作rm -rf / 会清空系统!操作前务必检查命令

  2. 权限问题:遇到Permission denied时,先确认权限再考虑sudo

  3. 取消执行:误操作时立即按 Ctrl + C 终止当前命令

  4. 路径补全:输入部分路径后按 Tab 自动补全

  5. 历史命令:按 键可快速调出最近使用的命令

8.5.5 总结建议

建议新手在虚拟机或测试环境中练习这些命令,掌握后可以尝试:

  1. 创建目录结构:mkdir -p work/{src,doc,backup}

  2. 批量创建测试文件:touch file{1..5}.txt

  3. 编写简单脚本自动完成重复任务


8.6 管道符(|)和重定向(>/>>

以下是对Linux管道符(|)和重定向(>/>>)的详细解析:

8.6.1 核心概念解析

符号 名称 作用 典型场景
| 管道符 将前命令的输出作为后命令的输入 日志分析/数据过滤
> 输出重定向 覆盖写入文件(清空原内容) 保存命令结果
>> 追加重定向 在文件末尾追加内容 记录日志/累积数据
2> 错误重定向 重定向错误信息到文件 分离正常输出与错误信息

8.6.2 使用场景与示例

1. 管道符(|)—— 数据流水线

作用:串联多个命令,形成处理链

# 查找特定进程并统计数量
ps aux | grep nginx | wc -l

# 分析日志中的高频错误
cat /var/log/syslog | grep "ERROR" | sort | uniq -c | sort -nr

2. 重定向(>/>>)—— 输入输出控制

覆盖写入(>
# 保存当前目录列表到文件
ls -l > filelist.txt

# 生成空文件(清空已有内容)
> empty.file
追加写入(>>
# 记录系统启动时间到日志
date >> boot_history.log
echo "系统重启完成" >> boot_history.log
错误重定向(2>
# 将错误日志单独保存
find / -name "*.conf" 2> errors.log
合并输出(&>
# 同时保存正常输出和错误信息
ls /root/ &> output.log

8.6.3 组合使用技巧

1. 多级处理管道

# 统计代码行数(过滤空行和注释)
cat *.py | grep -v "^#" | grep -v "^$" | wc -l

2. 输入重定向(<

# 从文件读取输入数据
sort < unsorted.txt > sorted.txt

3. 重定向到标准错误

# 自定义错误提示
echo "紧急:磁盘空间不足!" 1>&2

8.6.4 注意事项与最佳实践

  1. 防覆盖保护

    set -o noclobber  # 禁止>覆盖已有文件
    >| file.txt       # 强制覆盖(需手动解锁后)
    
  2. 快速清空文件

    : > large.log     # 比rm + touch更快
    
  3. 实时监控输出

    tail -f access.log | grep "404"
    
  4. 跨主机传输

    # 将本地文件传至远程服务器
    cat backup.tar.gz | ssh user@host "cat > /backup/remote.tar.gz"
    

8.6.5 综合应用案例

日志分析脚本

#!/bin/bash
LOG_FILE="/var/log/nginx/access.log"

# 统计不同状态码数量
cat $LOG_FILE | awk '{print $9}' | sort | uniq -c > status_codes.log

# 提取访问量TOP10的IP
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr | head -10 >> report.log

# 记录脚本执行时间
echo "分析完成于: $(date)" >> report.log

通过掌握这些技巧,您可以将单条命令的输出转化为复杂数据处理流程,大幅提升运维效率。建议在以下场景重点练习:

  1. 日志文件分析过滤

  2. 批量文件处理

  3. 自动化脚本中的输入输出控制

  4. 多主机间的数据流传输


8.7 脚本编程基础

创建脚本文件

#!/bin/bash           # Shebang声明解释器
echo "Hello World"    # 输出文本
date                  # 显示当前时间

执行脚本

chmod +x script.sh   # 添加执行权限
./script.sh           # 运行脚本

基础语法要素

  • 变量name="Linux"(等号无空格)

  • 条件判断

    if [ -f "/path/file" ]; then
        echo "File exists"
    fi
    
  • 循环结构

    for i in {1..5}; do
        echo "Count: $i"
    done
    

8.8 总结

命令行优势对比

维度

命令行(CLI)

图形界面(GUI)

资源占用

<100MB内存

>1GB内存

操作精度

精确到字节

依赖界面控件

自动化能力

支持脚本批量执行

需额外自动化工具

学习曲线

陡峭

平缓

学习建议

  1. 掌握man--help的灵活使用

  2. 熟练使用管道符(|)和重定向(>/>>

  3. 通过apropos查找相关命令

  4. 定期练习编写Shell脚本

附:推荐学习资源

  • 在线教程:LinuxCommand.org

  • 书籍:《The Linux Command Line》

  • 交互练习:OverTheWire Bandit游戏

# 测试学习效果
time (find / -name "*.conf" 2>/dev/null | wc -l)

文档版本控制
Rev 1.0.0 | 最后更新:2025-02-26 | 适用硬件版本:RK平台系列产品

版权声明
© 2025 福州牛新牛科技有限公司. 保留所有权利。