Linux虚拟机操作命令大合集:从入门到精通的实用指南

📅 2026/8/4 4:57:39 👁️ 阅读次数 📝 编程学习
Linux虚拟机操作命令大合集:从入门到精通的实用指南

1. 项目概述:为什么你需要这份命令合集

如果你正在学习Linux,或者日常工作需要在虚拟机里折腾各种Linux发行版,那么这份持续更新的命令合集,就是为你准备的“瑞士军刀”。我见过太多新手,包括几年前的我自己,在安装好一个崭新的Ubuntu或CentOS虚拟机后,面对黑底白字的终端窗口,瞬间陷入茫然。知道要做什么,但不知道用什么命令去做;或者更糟,知道一个命令的名字,却记不清它的参数怎么用,只能一遍遍去搜索。这个过程不仅效率低下,还特别打击学习热情。

这份合集的目的,就是终结这种低效和茫然。它不是一个简单的命令列表,而是我结合多年在开发、运维和教学中的实际使用经验,将那些最高频、最实用、最容易忘记的命令,按照实际工作流进行分类和注解。从你打开虚拟机的那一刻起,到配置网络、安装软件、排查问题、管理文件,几乎所有常规操作,你都能在这里找到对应的命令和“为什么这么用”的解释。无论是刚接触Linux的学生,还是需要在虚拟化环境中测试部署的开发者,这份文档都能帮你节省大量翻查手册的时间,让你把精力集中在真正要解决的问题上。

2. 核心思路:如何构建你的命令知识体系

很多初学者会把Linux命令学习等同于死记硬背,这是一个巨大的误区。命令是工具,而工具是为场景服务的。我的整理思路,正是基于“场景驱动”和“问题驱动”。

2.1 场景驱动的命令分类

我不会按字母顺序罗列命令,那样和查手册没什么区别。我会按照你操作一个Linux虚拟机的自然流程来组织:

  1. 系统启停与状态查看:虚拟机刚启动,你首先得知道它在哪、状态如何。
  2. 文件与目录操作:这是所有操作的基础,就像在Windows里管理文件夹。
  3. 用户与权限管理:理解Linux安全模型的基石,避免“Permission denied”的噩梦。
  4. 软件包管理:给系统安装、卸载软件,不同发行版(如Ubuntu的apt,CentOS的yum)命令不同,必须厘清。
  5. 网络配置与诊断:让虚拟机上网、与宿主机通信、对外提供服务的关键。
  6. 进程与服务管理:查看运行了什么程序,如何启动、停止一个后台服务。
  7. 文本处理与搜索:在日志、配置文件中快速找到你需要的信息,这是运维和开发的日常。
  8. 系统监控与性能:当系统变慢或出现问题时,如何快速定位瓶颈。

这种分类方式的好处是,当你遇到一个具体任务时,你能直接定位到相关章节,找到一组命令,而不是单个命令。例如,你要部署一个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 rm='rm -i',这样每次删除都会询问。

4. 用户、权限与软件管理

Linux是一个多用户系统,权限管理是其安全核心。同时,安装软件是日常必需。

4.1 用户与权限命令

  • whoami:显示当前登录用户名。
  • sudo:以超级用户(root)权限执行命令。普通用户执行需要root权限的操作时使用。
    sudo apt update # 以root权限更新软件包列表

    注意:使用sudo需要当前用户在sudoers配置文件中。首次使用可能需要输入当前用户的密码。

  • chmod:修改文件或目录的权限。 Linux权限分为三组:所有者(u)、所属组(g)、其他人(o)。每组有读(r=4)、写(w=2)、执行(x=1)三种权限。
    chmod 755 script.sh # 所有者可读可写可执行(7),组和其他人可读可执行(5) chmod u+x 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 curl
  • sudo apt remove <package_name>:卸载软件包,但可能保留配置文件。
  • sudo apt purge <package_name>:彻底卸载软件包,同时删除配置文件。
  • apt search <keyword>:搜索软件包。

RHEL/CentOS/Fedora系列 (使用YUM或DNF)

  • sudo yum check-updatesudo dnf check-update:检查可用更新。
  • sudo yum updatesudo dnf upgrade:更新所有软件包。
  • sudo yum install <package_name>sudo dnf install <package_name>:安装软件包。
  • sudo yum remove <package_name>sudo dnf remove <package_name>:卸载软件包。

常见问题:执行apt installyum install时提示“无法定位软件包”或“没有可用软件包”。这通常是因为软件源列表没有更新(先执行apt update/yum check-update),或者软件源配置不正确(需要检查/etc/apt/sources.list/etc/yum.repos.d/下的文件)。在虚拟机中,确保网络连接正常是第一步。

5. 网络配置与连通性诊断

让虚拟机联网是很多任务的前提。这里介绍最常用的网络状态查看和诊断命令。

5.1 网络配置查看与操作

传统的ifconfig命令已逐渐被功能更强大的ip命令取代。

  • ip addr showip a:查看所有网络接口的IP地址、MAC地址等信息。这是查看虚拟机获取到IP地址的首选命令。
  • ip link set <interface> up/down:启用或禁用某个网络接口。
  • ip route showip r:查看系统的路由表,了解数据包如何被转发。

对于使用NetworkManager的现代发行版(如CentOS 7/8, RHEL 8, Ubuntu 18.04+),nmcli是强大的命令行管理工具:

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:追踪数据包从本机到目标主机经过的每一跳路由,用于定位网络故障点。
  • netstatss:查看网络连接、路由表、接口统计等信息。ssnetstat的现代替代品,速度更快。
    ss -tulnp # 查看所有TCP/UDP监听端口及对应的进程,-t: TCP, -u: UDP, -l: 监听, -n: 数字格式, -p: 显示进程 netstat -tulnp # 功能类似,但可能已不预装
    这个命令在排查“端口是否被占用”、“哪个进程在监听某个端口”时极其有用。
  • curlwget:从网络下载文件或测试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:显示没有控制终端的进程(通常是后台服务)。
  • tophtop:动态、交互式地查看进程和系统资源使用情况(CPU、内存等)。htoptop的增强版,界面更友好,支持鼠标操作(需安装:sudo apt install htop)。
    • top界面中,按P按CPU使用率排序,按M按内存使用率排序,按q退出。
  • killkillall:向进程发送信号,通常用于终止进程。
    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 --type=service --state=running # 列出所有正在运行的服务
    systemctl status <service>命令的输出信息极其丰富,包含了服务是否活跃、最近的日志、进程ID等,是排查服务问题的第一入口。

6.3 系统监控与日志查看

  • df:查看磁盘空间使用情况。
    df -h # 以人类可读格式显示所有文件系统的磁盘使用情况
  • du:查看目录或文件的磁盘使用情况。
    du -sh /var/log # 查看/var/log目录的总大小,-s: 总计, -h: 人类可读 du -h --max-depth=1 /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.conf

7.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.gz
  • zip/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服务器,或者从一堆日志中快速定位到问题根源时,这些命令就从冰冷的字符变成了你手中得心应手的工具。记住,遇到问题,第一反应是“该用什么命令解决?”,然后来这里找找看。