在Linux和Unix-like操作系统中,Bash(Bourne Again Shell)是最常用的命令行解释器之一,掌握BAT(在Linux中通常指Bash脚本)常用命令对于系统管理、文件操作、自动化任务等至关重要,以下将详细介绍Bash中常用的命令及其应用场景,涵盖文件管理、文本处理、系统监控、进程管理、网络工具等多个方面。

文件和目录管理命令
文件和目录是操作系统中最基本的元素,Bash提供了丰富的命令来操作它们。ls命令用于列出目录内容,ls -l以长格式显示文件详情(如权限、所有者、大小、修改时间),ls -a显示隐藏文件(以开头的文件)。cd命令用于切换目录,cd ..返回上级目录,cd ~切换到当前用户主目录,cd -在最近两次访问的目录间切换。pwd命令打印当前工作目录的完整路径。
创建和删除目录的命令包括mkdir和rmdir。mkdir newdir创建单个目录,mkdir -p parentdir/newdir递归创建多级目录(若父目录不存在则自动创建)。rmdir只能删除空目录,若需删除非空目录及其内容,需使用rm -r dir(递归删除),rm -rf dir强制删除且不提示(需谨慎使用,避免误删重要文件),文件操作中,touch file创建空文件或更新文件时间戳。cp命令用于复制文件或目录,cp sourcefile destfile复制文件,cp -r sourcedir destdir递归复制目录,cp -p sourcefile destfile保留文件权限、时间戳等属性。mv命令用于移动文件或目录,也可重命名文件(mv oldname newname)。rm命令删除文件,rm -f file强制删除(不提示),rm -i file删除前确认(默认在别名中可能已启用)。
文件权限管理通过chmod命令实现,chmod 755 file设置文件所有者可读写执行,组用户和其他用户可读执行(数字权限:r=4, w=2, x=1)。chown命令修改文件所有者,chown user:group file同时修改所有者和所属组。ln命令创建链接,ln -s sourcefile linkfile创建软链接(符号链接),sourcefile linkfile创建硬链接(硬链接与原文件共享同一inode,不能跨文件系统)。
文本处理命令
文本处理是Bash的强项,常用命令包括cat、less、head、tail、grep、sed、awk等。cat file显示文件内容,cat file1 file2 > file3合并多个文件到新文件。less file分页显示文件内容(支持上下翻页、搜索等交互操作)。head -n 10 file显示文件前10行,tail -n 10 file显示文件后10行,tail -f file实时跟踪文件内容变化(常用于查看日志)。

grep命令用于文本搜索,grep "pattern" file在文件中搜索包含模式的行,grep -i "pattern" file忽略大小写,grep -r "pattern" dir递归搜索目录下所有文件。sed(流编辑器)用于文本替换和编辑,sed 's/old/new/g' file将文件中所有"old"替换为"new"(原文件不变,输出到标准输出),sed -i 's/old/new/g' file直接修改原文件。awk用于文本分析和格式化,awk '{print $1}' file打印每行的第一个字段(以空格分隔),awk -F: '{print $1, $7}' /etc/passwd以冒号为分隔符打印/etc/passwd文件的第一和第七列(用户名和默认Shell)。
系统监控和进程管理命令
系统监控命令帮助了解系统运行状态。top动态显示系统进程和资源使用情况(按CPU、内存排序),htop是top的增强版(支持彩色显示、鼠标操作等)。ps命令查看当前进程,ps aux显示所有进程的详细信息(用户、CPU占用、内存占用等),ps -ef以全格式显示进程。kill命令终止进程,kill PID发送SIGTERM信号(正常终止),kill -9 PID强制终止(发送SIGKILL信号)。jobs查看后台任务,bg %jobnumber将暂停的任务放到后台运行,fg %jobnumber将后台任务调到前台。
系统资源监控中,free -h以易读格式显示内存使用情况(-h表示human-readable),df -h显示磁盘空间使用情况,du -sh dir显示目录总大小(-s表示汇总,-h表示易读格式)。uname -a显示系统全部信息(内核版本、主机名等),uptime显示系统运行时间和负载平均值(1分钟、5分钟、15分钟)。
网络相关命令
网络工具用于配置和排查网络问题。ifconfig或ip addr显示网络接口信息,ifconfig eth0 up/down启用或禁用网卡,ip addr add 192.168.1.100/24 dev eth0为网卡配置IP地址。ping测试网络连通性,ping -c 4 example.com发送4个数据包后退出。netstat显示网络连接、路由表、接口统计等,netstat -tuln显示监听的TCP和UDP端口,netstat -an显示所有连接(包括监听和非监听)。ss是netstat的替代工具(更快、信息更全),ss -tuln同样显示监听端口。wget或curl用于下载文件,wget https://example.com/file.zip下载文件,curl -O https://example.com/file.zip同样下载文件并保持原文件名。ssh用于远程登录,ssh user@hostname以用户身份登录远程主机,scp用于安全复制文件,scp file.txt user@hostname:/path/to/dest将本地文件复制到远程主机。

压缩和解压命令
Linux中常用的压缩格式包括.zip、.tar、.tar.gz、.tar.bz2等。zip -r archive.zip dir/将目录压缩为zip文件(-r表示递归),unzip archive.zip解压zip文件。tar命令功能强大,tar -cvf archive.tar file1 file2创建tar包(-c创建,-v显示过程,-f指定文件名),tar -xvf archive.tar解压tar包,tar -czvf archive.tar.gz dir/创建tar.gz包(-z表示gzip压缩),tar -xzvf archive.tar.gz解压tar.gz包,tar -cjvf archive.tar.bz2 dir/创建tar.bz2包(-j表示bzip2压缩),tar -xjvf archive.tar.bz2解压tar.bz2包。
变量和环境变量
Bash中变量用于存储数据,variable=value定义变量(等号两侧无空格),echo $variable或${variable}输出变量值,只读变量通过readonly variable设置,删除变量用unset variable,环境变量对所有子进程可见,export variable=value将变量导出为环境变量,env或printenv显示所有环境变量,$HOME、$PATH、$USER是常用环境变量(分别表示主目录、可执行文件搜索路径、当前用户)。PATH=$PATH:/new/path将新路径添加到PATH变量(临时生效,永久修改需写入配置文件如~/.bashrc)。
条件判断和循环语句
Bash脚本支持条件判断和循环,if [ condition ]; then ... fi是基本条件结构,条件表达式两边需有空格,test condition或[ condition ]返回真(0)或假(非0),常见条件判断:-f file(文件存在且为普通文件),-d dir(目录存在),-eq(等于,用于数字),-ne(不等于),-lt(小于),-gt(大于)。for loop in item1 item2; do ... done遍历列表,for i in {1..5}; do echo $i; done输出1到5。while [ condition ]; do ... done当条件为真时循环,until [ condition ]; do ... done当条件为假时循环。
函数和输入输出
函数用于封装可重用代码,function_name() { commands; }定义函数,function_name调用函数,输入输出重定向中,>覆盖输出(echo "hello" > file),>>追加输出,<输入重定向(sort < file),2>错误输出重定向(command 2> error.log),&>合并标准输出和错误输出(command &> output.log),管道将前一个命令的输出作为后一个命令的输入(ls -l | grep "txt"列出文件并过滤包含"txt"的行)。
相关问答FAQs
Q1:如何查找系统中包含特定关键词的所有文件?
A1:可以使用find命令结合grep实现,在当前目录及其子目录中查找包含"error"关键词的所有.txt文件:find . -type f -name "*.txt" -exec grep -l "error" {} \;。find . -type f -name "*.txt"查找所有.txt文件,-exec grep -l "error" {} \;对每个文件执行grep搜索(-l表示仅输出包含匹配的文件名)。
Q2:如何查看当前系统运行的进程并终止占用CPU最高的进程?
A2:首先使用top或ps命令查看进程及其CPU占用情况,例如top -b -n 1 | head -20(-b批模式,-n 1仅刷新一次)或ps aux --sort=-%cpu | head -10(按CPU占用降序排序,显示前10个进程),找到占用CPU最高的进程PID后,使用kill -9 PID强制终止该进程(如kill -9 12345),注意:终止系统关键进程可能导致异常,建议先确认进程重要性。
