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 命令帮助系统
帮助方式 |
示例 |
适用场景 |
---|---|---|
|
|
快速查看选项说明 |
|
|
查看完整文档 |
|
|
GNU项目详细指南 |
8.4.3 执行流程
输入命令并回车
Shell解析指令
查找可执行文件(通过
$PATH
)加载程序到内存执行
返回退出状态码(
$?
变量)
8.4.4 核心功能
自动补全:按
Tab
键补全命令/路径历史记录:
↑
/↓
键浏览,history
查看快捷操作:
Ctrl + C
终止进程Ctrl + D
退出ShellCtrl + 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 注意事项
删除危险操作:
rm -rf /
会清空系统!操作前务必检查命令权限问题:遇到
Permission denied
时,先确认权限再考虑sudo
取消执行:误操作时立即按
Ctrl + C
终止当前命令路径补全:输入部分路径后按
Tab
自动补全历史命令:按
↑
键可快速调出最近使用的命令
8.5.5 总结建议
建议新手在虚拟机或测试环境中练习这些命令,掌握后可以尝试:
创建目录结构:
mkdir -p work/{src,doc,backup}
批量创建测试文件:
touch file{1..5}.txt
编写简单脚本自动完成重复任务
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 注意事项与最佳实践
防覆盖保护:
set -o noclobber # 禁止>覆盖已有文件 >| file.txt # 强制覆盖(需手动解锁后)
快速清空文件:
: > large.log # 比rm + touch更快
实时监控输出:
tail -f access.log | grep "404"
跨主机传输:
# 将本地文件传至远程服务器 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
通过掌握这些技巧,您可以将单条命令的输出转化为复杂数据处理流程,大幅提升运维效率。建议在以下场景重点练习:
日志文件分析过滤
批量文件处理
自动化脚本中的输入输出控制
多主机间的数据流传输
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内存 |
操作精度 |
精确到字节 |
依赖界面控件 |
自动化能力 |
支持脚本批量执行 |
需额外自动化工具 |
学习曲线 |
陡峭 |
平缓 |
学习建议
掌握
man
和--help
的灵活使用熟练使用管道符(
|
)和重定向(>
/>>
)通过
apropos
查找相关命令定期练习编写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 福州牛新牛科技有限公司. 保留所有权利。