Linux虚拟机操作命令大合集:从入门到精通的实用指南
1. 项目概述为什么你需要这份命令合集如果你正在学习Linux或者日常工作需要在虚拟机里折腾各种Linux发行版那么这份持续更新的命令合集就是为你准备的“瑞士军刀”。我见过太多新手包括几年前的我自己在安装好一个崭新的Ubuntu或CentOS虚拟机后面对黑底白字的终端窗口瞬间陷入茫然。知道要做什么但不知道用什么命令去做或者更糟知道一个命令的名字却记不清它的参数怎么用只能一遍遍去搜索。这个过程不仅效率低下还特别打击学习热情。这份合集的目的就是终结这种低效和茫然。它不是一个简单的命令列表而是我结合多年在开发、运维和教学中的实际使用经验将那些最高频、最实用、最容易忘记的命令按照实际工作流进行分类和注解。从你打开虚拟机的那一刻起到配置网络、安装软件、排查问题、管理文件几乎所有常规操作你都能在这里找到对应的命令和“为什么这么用”的解释。无论是刚接触Linux的学生还是需要在虚拟化环境中测试部署的开发者这份文档都能帮你节省大量翻查手册的时间让你把精力集中在真正要解决的问题上。2. 核心思路如何构建你的命令知识体系很多初学者会把Linux命令学习等同于死记硬背这是一个巨大的误区。命令是工具而工具是为场景服务的。我的整理思路正是基于“场景驱动”和“问题驱动”。2.1 场景驱动的命令分类我不会按字母顺序罗列命令那样和查手册没什么区别。我会按照你操作一个Linux虚拟机的自然流程来组织系统启停与状态查看虚拟机刚启动你首先得知道它在哪、状态如何。文件与目录操作这是所有操作的基础就像在Windows里管理文件夹。用户与权限管理理解Linux安全模型的基石避免“Permission denied”的噩梦。软件包管理给系统安装、卸载软件不同发行版如Ubuntu的aptCentOS的yum命令不同必须厘清。网络配置与诊断让虚拟机上网、与宿主机通信、对外提供服务的关键。进程与服务管理查看运行了什么程序如何启动、停止一个后台服务。文本处理与搜索在日志、配置文件中快速找到你需要的信息这是运维和开发的日常。系统监控与性能当系统变慢或出现问题时如何快速定位瓶颈。这种分类方式的好处是当你遇到一个具体任务时你能直接定位到相关章节找到一组命令而不是单个命令。例如你要部署一个Web应用你会依次用到网络配置、软件安装、服务管理、日志查看等多个章节的命令。2.2 命令学习的“最小可用集”原则Linux命令成千上万但日常使用的核心命令可能不超过50个。这份合集优先收录这些“最小可用集”命令并重点讲解它们最常用的2-3个参数组合。记住一个命令的80%使用场景远比模糊地知道它100%的选项更有用。例如ls命令我会重点讲-l详情、-a显示隐藏文件、-h人类可读大小这几个参数的组合使用而不是罗列所有参数。2.3 虚拟机环境下的特殊考量在虚拟机中使用Linux有几个特殊点需要关注命令的使用也会略有侧重文件共享如何在宿主机如Windows和虚拟机之间方便地传递文件除了网络共享scp命令在虚拟网络内传输文件非常高效。快照与克隆这是虚拟机的核心优势。虽然这通常是VMware或VirtualBox图形界面的操作但了解其背后的磁盘文件管理概念有助于你理解系统状态。网络模式NAT、桥接、仅主机模式。不同的模式决定了虚拟机如何联网对应的网络配置命令如ip addr,nmcli的用法也会不同。我会结合这些模式讲解命令。资源分配CPU、内存、磁盘I/O。在虚拟机中监控这些资源的使用情况使用top,vmstat,iostat命令尤为重要因为过度分配会影响宿主机性能。3. 基础生存命令从开机到不迷路当你第一次登录进一个Linux虚拟机一个闪烁的光标在等待你。别慌我们先掌握几个让你“不迷路”的命令。3.1 系统信息与目录导航首先你得知道自己在哪里系统是什么情况。pwd打印当前工作目录。这是你的“GPS”随时告诉你身在何处。ls列出目录内容。这是你最常用的命令之一。ls -la /home-l以长格式显示包含权限、所有者、大小、修改时间。-a显示所有文件包括以.开头的隐藏文件如.bashrc。-h与-l一起使用将文件大小转换为K、M、G等易读格式。cd切换目录。cd /etc # 切换到绝对路径 /etc cd .. # 切换到上级目录 cd ~ # 切换到当前用户的家目录 cd - # 切换回上一个所在的目录非常实用uname -a查看系统内核信息。可以快速知道系统架构、内核版本。cat /etc/os-release查看操作系统发行版详细信息如Ubuntu, CentOS, Debian等。注意Linux的目录路径是大小写敏感的。/home和/Home是两个不同的目录。在输入路径和文件名时务必注意。3.2 文件与目录操作基础知道位置后就要开始操作了。mkdir创建目录。mkdir my_project # 创建单个目录 mkdir -p project/{src,doc,test} # 一次性创建多级嵌套目录-p参数确保父目录不存在时一并创建touch创建一个空文件或更新已有文件的时间戳。touch readme.txt # 如果readme.txt不存在则创建存在则更新其访问和修改时间cp复制文件或目录。cp file1.txt file2.txt # 复制文件 cp -r dir1/ dir2/ # 递归复制整个目录-r参数是关键 cp -v *.log /backup/ # 复制所有.log文件到/backup/-v显示详细过程mv移动或重命名文件/目录。mv oldname.txt newname.txt # 重命名 mv file.txt /target/dir/ # 移动文件rm删除文件或目录。使用需极其谨慎rm file.txt # 删除文件系统会询问取决于别名设置 rm -f file.txt # 强制删除不询问 rm -rf somedir/ # **危险** 递归强制删除目录及其下所有内容。执行前务必再三确认路径cat查看文件内容适合小文件。less/more分页查看文件内容适合大文件如日志。less功能更强大支持前后翻页、搜索。实操心得对于rm -rf命令我养成了一个习惯先执行pwd确认当前位置再执行ls查看要删除的目录内容最后再输入删除命令。或者可以先使用rm -rf somedir/的“模拟”版——rm -rf somedir/ --dry-run如果命令支持来查看哪些文件会被删除。更安全的做法是将rm命令别名设置为rm -i交互式在~/.bashrc中添加alias rmrm -i这样每次删除都会询问。4. 用户、权限与软件管理Linux是一个多用户系统权限管理是其安全核心。同时安装软件是日常必需。4.1 用户与权限命令whoami显示当前登录用户名。sudo以超级用户root权限执行命令。普通用户执行需要root权限的操作时使用。sudo apt update # 以root权限更新软件包列表注意使用sudo需要当前用户在sudoers配置文件中。首次使用可能需要输入当前用户的密码。chmod修改文件或目录的权限。 Linux权限分为三组所有者(u)、所属组(g)、其他人(o)。每组有读(r4)、写(w2)、执行(x1)三种权限。chmod 755 script.sh # 所有者可读可写可执行(7)组和其他人可读可执行(5) chmod ux script.sh # 给所有者增加执行权限符号模式 chmod a-w file.txt # 取消所有人的写权限chown修改文件或目录的所有者和所属组。chown user:group file.txt # 将file.txt的所有者改为user所属组改为group sudo chown -R www-data:www-data /var/www/html # 递归修改目录下所有文件的所有权常用于Web服务器目录4.2 软件包管理命令这是不同Linux发行版差异最大的地方。主要分为两大阵营Debian/Ubuntu系列 (使用APT)sudo apt update从软件源服务器更新本地软件包索引列表。这不更新已安装的软件只是刷新可用软件的清单。安装新软件前应先执行此命令。sudo apt upgrade根据update得到的列表升级所有已安装的软件包到最新版本。sudo apt install package_name安装指定的软件包。sudo apt install vim net-tools curlsudo apt remove package_name卸载软件包但可能保留配置文件。sudo apt purge package_name彻底卸载软件包同时删除配置文件。apt search keyword搜索软件包。RHEL/CentOS/Fedora系列 (使用YUM或DNF)sudo yum check-update或sudo dnf check-update检查可用更新。sudo yum update或sudo dnf upgrade更新所有软件包。sudo yum install package_name或sudo dnf install package_name安装软件包。sudo yum remove package_name或sudo dnf remove package_name卸载软件包。常见问题执行apt install或yum install时提示“无法定位软件包”或“没有可用软件包”。这通常是因为软件源列表没有更新先执行apt update/yum check-update或者软件源配置不正确需要检查/etc/apt/sources.list或/etc/yum.repos.d/下的文件。在虚拟机中确保网络连接正常是第一步。5. 网络配置与连通性诊断让虚拟机联网是很多任务的前提。这里介绍最常用的网络状态查看和诊断命令。5.1 网络配置查看与操作传统的ifconfig命令已逐渐被功能更强大的ip命令取代。ip addr show或ip a查看所有网络接口的IP地址、MAC地址等信息。这是查看虚拟机获取到IP地址的首选命令。ip link set interface up/down启用或禁用某个网络接口。ip route show或ip r查看系统的路由表了解数据包如何被转发。对于使用NetworkManager的现代发行版如CentOS 7/8, RHEL 8, Ubuntu 18.04nmcli是强大的命令行管理工具nmcli connection show # 显示所有网络连接配置 nmcli device status # 显示所有网络设备状态 nmcli connection up “Wired connection 1” # 激活一个连接5.2 网络连通性诊断命令ping hostname/IP测试到目标主机的网络连通性。是最基本的诊断工具。ping -c 4 8.8.8.8 # 向Google DNS发送4个ICMP包测试连通性注意有些服务器禁用了ICMP回应ping不通不代表网络完全不通。traceroute hostname/IP或tracepath追踪数据包从本机到目标主机经过的每一跳路由用于定位网络故障点。netstat或ss查看网络连接、路由表、接口统计等信息。ss是netstat的现代替代品速度更快。ss -tulnp # 查看所有TCP/UDP监听端口及对应的进程-t: TCP, -u: UDP, -l: 监听, -n: 数字格式, -p: 显示进程 netstat -tulnp # 功能类似但可能已不预装这个命令在排查“端口是否被占用”、“哪个进程在监听某个端口”时极其有用。curl或wget从网络下载文件或测试Web服务。curl -I http://example.com # 获取HTTP响应头常用于检查Web服务器状态 wget http://example.com/file.tar.gz # 下载文件 curl -o localfile.zip http://example.com/remote.zip # 下载文件并重命名5.3 虚拟机与宿主机文件传输虽然可以用图形化的拖拽或共享文件夹但命令行传输更灵活高效。SCP (基于SSH)在宿主机和虚拟机之间安全地复制文件。前提是虚拟机开启了SSH服务sudo apt install openssh-server。从宿主机Windows/Mac/Linux复制到虚拟机# 在宿主机终端执行 scp ./local_file.txt username虚拟机IP地址:/home/username/从虚拟机复制到宿主机# 在宿主机终端执行 scp username虚拟机IP地址:/path/to/remote/file ./SFTP同样是基于SSH的交互式文件传输协议可以像FTP一样操作。sftp username虚拟机IP地址 sftp put local_file # 上传 sftp get remote_file # 下载 sftp ls # 列出远程目录 sftp lls # 列出本地目录6. 进程、服务与系统监控Linux是一个多任务系统理解如何管理运行中的程序进程和后台服务至关重要。6.1 进程管理命令ps查看当前进程快照。ps aux # 查看系统所有进程的详细信息常用组合 ps -ef | grep nginx # 查找与“nginx”相关的进程a显示所有用户的进程。u显示进程的详细信息如用户、CPU、内存占用。x显示没有控制终端的进程通常是后台服务。top或htop动态、交互式地查看进程和系统资源使用情况CPU、内存等。htop是top的增强版界面更友好支持鼠标操作需安装sudo apt install htop。在top界面中按P按CPU使用率排序按M按内存使用率排序按q退出。kill与killall向进程发送信号通常用于终止进程。kill PID # 发送默认的TERM信号15请求进程终止 kill -9 PID # 发送KILL信号9强制立即终止进程慎用可能导致数据丢失 killall nginx # 终止所有名为“nginx”的进程注意kill -9是最后的手段。应先尝试kill PID或kill -15 PID给进程一个清理资源、正常退出的机会。强制杀死可能导致文件损坏或状态不一致。6.2 服务管理命令 (Systemd)现代Linux发行版普遍使用systemd作为初始化系统和服务管理器。systemctl管理系统服务的核心命令。sudo systemctl start nginx # 启动nginx服务 sudo systemctl stop nginx # 停止nginx服务 sudo systemctl restart nginx # 重启nginx服务先停后启 sudo systemctl reload nginx # 重载服务配置不中断服务适合更新配置 sudo systemctl enable nginx # 设置服务开机自启 sudo systemctl disable nginx # 禁止服务开机自启 sudo systemctl status nginx # 查看服务状态最常用 systemctl list-units --typeservice --staterunning # 列出所有正在运行的服务systemctl status service命令的输出信息极其丰富包含了服务是否活跃、最近的日志、进程ID等是排查服务问题的第一入口。6.3 系统监控与日志查看df查看磁盘空间使用情况。df -h # 以人类可读格式显示所有文件系统的磁盘使用情况du查看目录或文件的磁盘使用情况。du -sh /var/log # 查看/var/log目录的总大小-s: 总计 -h: 人类可读 du -h --max-depth1 /home # 查看/home下第一级子目录的大小free查看内存使用情况。free -h # 以人类可读格式显示内存和交换空间使用情况journalctl查看systemd管理的系统日志。这是查看服务、内核、系统消息的中央日志工具。sudo journalctl -u nginx.service -f # 查看nginx服务的日志并持续跟踪输出-f类似tail -f sudo journalctl --since 2023-10-01 --until 2023-10-02 # 查看指定时间段的日志 sudo journalctl -p err -b # 查看本次启动以来的所有错误级别日志tail查看文件末尾内容尤其适合实时查看日志。tail -f /var/log/syslog # 实时跟踪syslog文件的更新 tail -n 100 /var/log/nginx/access.log # 查看该日志文件最后100行7. 文本处理与搜索神器在Linux中一切皆文件而配置文件、日志文件大多是文本。因此高效处理文本是核心技能。7.1 文本查看与过滤grep强大的文本搜索工具使用正则表达式。grep “error” /var/log/syslog # 在文件中搜索包含“error”的行 grep -r “TODO” ~/my_project/ # 递归搜索目录下所有文件中的“TODO” grep -i “warning” file.log # 忽略大小写搜索“warning” grep -v “^#” /etc/nginx/nginx.conf # 显示所有不以#开头的行即过滤掉注释 ps aux | grep python # 结合管道在进程列表中搜索python进程awk强大的文本分析工具擅长处理结构化文本如CSV、空格分隔的日志。awk ‘{print $1}’ access.log # 打印文件每行的第一列默认以空格分隔 awk -F‘,’ ‘{print $2}’ data.csv # 指定逗号为分隔符打印第二列 ps aux | awk ‘$3 50 {print $0}’ # 打印CPU使用率超过50%的进程行sed流编辑器用于对文本进行过滤和转换。sed ‘s/foo/bar/g’ file.txt # 将文件中所有的foo替换为bar sed -i.bak ‘s/old/new/’ config.conf # 直接修改文件并创建备份config.conf.bak sed ‘/^$/d’ file.txt # 删除文件中的所有空行7.2 文件查找命令find在目录树中查找文件功能极其强大。find /home -name “*.txt” # 在/home下查找所有.txt文件 find /var/log -type f -size 10M # 在/var/log下查找大于10MB的普通文件 find . -type f -mtime -7 # 在当前目录查找7天内修改过的文件 find /tmp -name “*.log” -exec rm {} \; # 找到/tmp下的.log文件并删除危险先去掉-exec部分测试locate基于数据库快速查找文件速度比find快得多但数据库需要定期更新sudo updatedb。locate nginx.conf7.3 输出重定向与管道这是Shell编程的精华让命令可以协同工作。将命令的标准输出重定向到文件覆盖。ls -la filelist.txt # 将ls的输出写入filelist.txt覆盖原内容将命令的标准输出追加到文件。echo “New log entry” app.log|管道将一个命令的输出作为另一个命令的输入。ps aux | grep nginx # 将ps的输出交给grep过滤 cat access.log | awk ‘{print $1}’ | sort | uniq -c | sort -nr # 经典组合统计日志中访问IP的频次并排序上面这个组合管道是日志分析的常见操作先提取第一列IP排序去重并计数最后按计数反向排序立刻得到访问最频繁的IP。8. 压缩、归档与磁盘管理备份、传输文件时压缩和归档是必备技能。8.1 压缩与解压Linux下常见的压缩格式有.tar.gz,.tar.bz2,.zip等。tar归档工具常与压缩工具结合使用。# 创建压缩归档打包并压缩 tar -czvf archive.tar.gz /path/to/dir/ # -c: 创建 -z: 用gzip压缩 -v: 显示过程 -f: 指定文件名 tar -cjvf archive.tar.bz2 /path/to/dir/ # -j: 用bzip2压缩压缩率更高速度稍慢 # 解压归档 tar -xzvf archive.tar.gz # -x: 解压 tar -xjvf archive.tar.bz2 # 仅查看归档内容不解压 tar -tzvf archive.tar.gzzip/unzip处理.zip格式文件与Windows兼容性好。zip -r archive.zip /path/to/dir/ # -r: 递归压缩目录 unzip archive.zip # 解压到当前目录 unzip archive.zip -d /target/path # 解压到指定目录8.2 磁盘与文件系统操作在虚拟机中我们有时需要扩展磁盘空间或检查磁盘健康。lsblk以树状图列出所有块设备磁盘、分区。非常直观是查看磁盘布局的首选命令。fdisk/parted磁盘分区工具。fdisk适用于传统MBR分区parted更强大支持GPT分区。警告对正在使用的磁盘进行分区操作极其危险可能导致数据丢失。务必在虚拟机快照保护下操作并百分百确认操作对象。mkfs在分区上创建文件系统格式化。sudo mkfs.ext4 /dev/sdb1 # 将/dev/sdb1分区格式化为ext4文件系统mount/umount挂载和卸载文件系统。sudo mount /dev/sdb1 /mnt/data # 将分区挂载到/mnt/data目录 sudo umount /mnt/data # 卸载为了让挂载在重启后生效需要将挂载信息写入/etc/fstab文件。9. 环境变量、Shell与快捷键提高命令行效率的最后一块拼图。9.1 环境变量管理环境变量是影响Shell和程序运行的全局设置。echo $PATH查看最重要的PATH变量它定义了系统查找命令的目录。export设置环境变量对当前Shell及其子进程有效。export MY_VAR“hello” export PATH$PATH:/home/user/my_tools # 将自定义工具目录加入PATH永久生效需要将export命令添加到Shell的配置文件中如~/.bashrc或~/.bash_profile然后执行source ~/.bashrc使其立即生效。9.2 Shell实用技巧与快捷键Tab键补全输入命令、路径、文件名时按Tab键可以自动补全。按两次Tab可以列出所有可能的选项。这是提高效率最重要的习惯。历史命令history查看命令历史记录。!!执行上一条命令。!$代表上一条命令的最后一个参数。Ctrl R反向搜索历史命令输入关键词即可查找。进程控制Ctrl C强制终止当前正在前台运行的命令。Ctrl Z将当前前台命令挂起到后台并暂停执行。bg将最近一个挂起的作业在后台继续运行。fg将后台作业调至前台运行。jobs查看当前Shell的后台作业列表。命令行编辑Ctrl A光标移动到行首。Ctrl E光标移动到行尾。Ctrl U删除光标到行首的所有内容。Ctrl K删除光标到行尾的所有内容。Ctrl W删除光标前的一个单词。这份“Linux虚拟机操作命令大合集”是一个活的文档它会随着我的实践和大家的反馈持续更新。学习命令的关键不在于背而在于用。我的建议是为你的虚拟机创建一个专门用于练习的目录把这里提到的命令一个个敲进去观察输出故意制造一些错误看看系统如何反应。当你成功地在虚拟机里配置好一个Web服务器或者从一堆日志中快速定位到问题根源时这些命令就从冰冷的字符变成了你手中得心应手的工具。记住遇到问题第一反应是“该用什么命令解决”然后来这里找找看。