Linux 命令行与 Bash 是 Linux 系统中不可或缺的核心组件,它们为用户提供了强大的系统管理、文件操作和自动化能力,Linux 命令行是用户与操作系统内核进行交互的文本界面,通过输入特定的指令来执行各种任务;而 Bash(Bourne Again Shell)则是 Linux 系统中最常用的命令行解释器,负责解析和执行用户输入的命令,同时提供了丰富的编程功能,使得命令行操作更加灵活和高效。

Linux 命令行基础
Linux 命令行的核心是“命令+选项+参数”的结构。ls -l /home 命令中,ls 是命令,-l 是选项(用于显示详细信息),/home 是参数(指定要查看的目录),命令行的强大之处在于其简洁性和可组合性,用户可以通过管道()、重定向(>、<)等操作符将多个命令连接起来,实现复杂的功能。ps aux | grep "nginx" 可以先列出所有进程,再过滤出包含“nginx”的进程行;而 echo "hello world" > test.txt 则将文本内容写入文件。
常用 Linux 命令
文件和目录操作是命令行最频繁的任务之一。ls 命令用于列出目录内容,-a 选项显示隐藏文件,-h 选项以人类可读格式显示文件大小。cd 命令用于切换目录,cd .. 返回上级目录,cd ~ 进入用户主目录。cp 命令用于复制文件或目录,-r 选项用于递归复制目录;mv 命令用于移动文件或目录,也可用于重命名;rm 命令用于删除文件,-r 选项用于递归删除目录,需谨慎使用。mkdir 命令用于创建目录,-p 选项可创建多级目录;touch 命令用于创建空文件或更新文件时间戳。
文本处理命令同样强大。cat 命令用于查看文件内容,more 或 less 命令支持分页查看。grep 命令用于文本搜索,-i 选项忽略大小写,-n 选项显示行号。sed 命令用于流编辑文本,可实现替换、删除等操作;awk 命令用于文本分析,支持复杂的字段处理。find 命令用于根据文件名、大小、时间等条件查找文件,find / -name "*.log" -type f 查找所有 .log 文件。
系统管理命令中,top 或 htop 命令用于实时查看进程和系统资源占用;ps 命令用于查看当前进程,aux 选项显示所有进程详细信息。kill 命令用于终止进程,需传入进程 ID(PID);df -h 命令用于查看磁盘空间使用情况;du -sh * 命令用于查看当前目录下各文件和目录的大小。tar 命令用于文件打包和解压,-c 选项创建档案,-x 选项解压,-v 选项显示过程,-f 选项指定文件名,tar -czf backup.tar.gz /home 将 /home 目录打包并压缩为 .gz 格式。

Bash 脚本编程基础
Bash 脚本是将多个命令组合在一起的文本文件,以 #!/bin/bash 开头,赋予执行权限后即可运行,变量是脚本的基础,无需声明类型,name="Linux",使用时需加 符号,如 echo $name,数组支持多个值,arr=("apple" "banana" "cherry"),通过 ${arr[0]} 访问元素。
流程控制语句让脚本具备逻辑能力。if 条件语句的语法为 if [ condition ]; then ... elif [ condition ]; then ... else ... fi,条件测试需用 [ ] 包裹,[ $age -gt 18 ] 判断年龄是否大于 18。for 循环用于遍历列表,for i in {1..5}; do echo $i; done 输出 1 到 5;while 循环用于条件循环,while [ $count -lt 10 ]; do ... ((count++)); done。case 语句用于多分支条件,case $var in pattern1) ... ;; pattern2) ... ;; esac。
函数可将代码模块化,定义方式为 function_name() { commands; return value; },调用时直接写函数名,my_func,通过 获取上一条命令的返回值。
高级技巧与最佳实践
命令历史记录功能可通过 history 命令查看,使用 重复执行上一条命令,!n 执行历史中的第 n 条命令,别名(alias)可简化长命令,alias ll='ls -alF',定义后直接输入 ll 即可执行,通配符(、、[])用于文件名匹配,*.txt 匹配所有 .txt 文件。

调试脚本时,可在执行命令后添加 -x 选项(如 bash -x script.sh)或使用 set -x 和 set +x 在脚本中开启调试模式,显示每条命令的执行过程,最佳实践包括:添加注释说明脚本功能;使用 #!/bin/bash 指定解释器;对用户输入进行校验,避免安全风险;合理使用变量作用域(local 关键字定义局部变量)。
相关命令速查表
| 功能类别 | 常用命令 | 示例与说明 |
|---|---|---|
| 文件操作 | ls | ls -l 显示详细信息,ls -a 显示隐藏文件 |
| cp, mv, rm | cp -r dir1 dir2 复制目录,mv old.txt new.txt 重命名,rm -rf dir 删除目录 |
|
| mkdir, touch | mkdir -p dir1/dir2 创建多级目录,touch file.txt 创建空文件 |
|
| 文本处理 | cat, less, more | cat file.txt 查看文件,less file.txt 分页查看 |
| grep, sed, awk | grep "error" log.txt 搜索包含“error”的行,sed 's/old/new/g' file.txt 替换文本 |
|
| 查找与打包 | find, tar | find . -name "*.txt" 查找当前目录下所有 .txt 文件,tar -czf backup.tar.gz dir 打包压缩 |
| 系统监控 | top, htop, ps, df, du | top 实时查看进程,df -h 查看磁盘空间,du -sh * 查看目录大小 |
相关问答 FAQs
Q1: 如何在 Bash 中实现用户输入的交互式读取?
A1: 可以使用 read 命令实现交互式输入,以下脚本会提示用户输入姓名并输出:
#!/bin/bash echo "请输入您的姓名:" read name echo "您好,$name!"
若需设置输入超时(如 5 秒),可使用 read -t 5 name;若隐藏输入内容(如密码),可使用 read -s password。
Q2: 如何在 Bash 中判断文件是否存在且可读?
A2: 使用条件测试语句结合文件操作测试符。
#!/bin/bash
file="/path/to/file.txt"
if [ -f "$file" ] && [ -r "$file" ]; then
echo "文件存在且可读"
else
echo "文件不存在或不可读"
fi
-f 测试是否为普通文件,-r 测试是否可读,变量用双引号包裹可避免空格或特殊字符导致的问题。
