Shell 内置history命令行历史记录。例history -c会清空 shell 的历史缓冲区和本次缓冲区退出 shell 时由于本次缓冲区无数据故不会追加到 .bash_history 文件。【工作方式打开一个 shell 时shell 会加载家目录下 .bash_history 目录中的历史记录到历史缓冲区供本次使用。而本 shell 中新增的命令会被记录到本次缓冲区当 shell 关闭时会将本次缓冲区的记录追加到 .bash_history 供下次使用。】alias用于创建一个别名unalias 用于移除一个别名。type查询可执行命令属于 Shell 内建命令还是别名命令、外置命令、函数、关键字等。例type -a cmd输出该 cmd 相关的所有信息。unset将 shell 环境中已定义的变量或函数进行删除以阻止后面去调用。脚本编写中的某些特定情况可能会用到。未定义变量而 echo 时其值为空。let将字符串表示的数字表达式进行数学计算。例let a(12)*3/2 b(14)将计算结果分别赋值给 a、b。expr同 let 一样都是用于计算表达式的值。但是它支持的功能更多关系运算、算数运算、字符串匹配、截取、获取长度等相关运算非 shell 内置命令。例expr match abcd a\(..\)d将输出匹配到的值 bcexpr match abcd a..d将输出匹配到字串的总长度 4。匹配不到则返回 0expr substr abcde 2 3截取字串 bcdexpr length abcd计算字串长度。eval将字符串中的数据当做命令在 bash 中执行。exec用于调用并执行指定的命令。该命令通常用在 shell 脚本程序中用于将脚本标准 IO 流重定向即脚本执行日志记录的功能。如果在当前终端中使用命令则当指定的命令执行完毕后会立即退出终端。【1、当携带指定命令。会将当前 shell 进程替换为指定命令程序程序结束则该 shell 进程也被终结。2、不携带命令。会重定向当前 shell 的所有标准 IO 流到指定位置。】export/declare可将自定义变量转化为环境变量。系统命令uname用于查询系统核心的相关信息。free观察内存使用情况。vmstat侦测系统资源变化。uptime用于观察系统的启动时间以及工作负载的情况。pv显示管道数据传输的进度信息具有进度条、已耗费时间、当前速度等功能。pv 本身具有类似 cat 的功能但其可以监视与其连接的管道进度而无需关注 pv 本身是写入方还是接收方均可监视管道。【例1pv test.txt test2.txt可查看拷贝文件的进度2tcpdump -i eth -w - | pv /dev/null查看网卡的网速3pv test.txt | gzip text.gz查看压缩进度】dmesg可以查询系统核心产生的日志信息。系统在开机的时候核心会去侦测系统的硬件你的某些硬件到底有没有被捉到那就与这个时候的侦测有关。 但是这些侦测的过程要不是没有显示在屏幕上就是很飞快的在屏幕上一闪而逝能不能把核心侦测的讯息捉出来瞧瞧 可以的那就使用 dmesg 吧所有核心侦测的讯息不管是开机时候还是系统运作过程中反正只要是核心产生的讯息都会被记录到内存中的某个保护区段。 dmesg 这个指令就能够将该区段的讯息读出来的因为讯息实在太多了所以执行时可以加入这个管线指令| more来使画面暂停journalctl 查看由 systemd 服务统一管理的所有服务的启动日志但也会包括开机引导 boot 启动过程日志。【1journalctl默认情况下查看的是历史所有日志它会将/var/log/journal/*中的所有存储的历史文件全部解析显示2journalctl -xk查看本次开机之后的所有日志-x 选项表示会对个别日志信息进行解释说明的功能3journalctl --unit ssh.service查看某服务的日志4journalctl -g ssh根据关键字过滤日志信息5journalctl --disk-usage查看日志文件占用空间6journalctl --flush清除日志文件。】locate/updatedb文件搜索器比 whereis 搜索的范围广比 find 搜索的更快速。updatedb 只负责根据配置文件/etc/updatedb.conf中排除的以外查找路径来更新数据库而 locate 只负责根据数据库来查询文件。例1locate */filename根据完整的文件名来查找而不是默认的模式匹配2locate -b pattern只查找末尾匹配查询模式的路径3locate -w pattern也是默认的查找模式匹配即可4locate -r regexpattern正则表达查找which/whereis文件搜索。例which -a cmdwhich 根据环境变量 PATH 中的路径去查找对应 cmd 命令的所有所在路径若无 a 选项则只列出第一个找到的路径whereis -l列出 whereis 特定的查询路径。find文件多条件查找。格式find [path] [expression]其中 expression 是 operators, options, tests, actions: 的组合形式。 例1find . -iname str大小写不敏感查找文件str 必须是完整文件名2find . -regex str正则查找文件3find . -path str根据路径查找文件str 可以是是包含/的字串4find . -name str -exec echo {} \;将查找到的文件用 echo 处理使用 exec 选项时需特别注意匹配到的尽量不要是目录务必配合-type 进行过滤筛选否则影响可能会较大5find -newer str -or -name *test*查找的文件只要符合 -newer 或 -name 的条件便都符合不加 -or 的默认情况下是 -and6find -type f -name str要求符合条件的目标必须是文件类型而不包含目录或其它链接文件*find . -empty -executable -nouser -nogroup -readable -prem xxx -newer xxx -uid xxx -size xxx -depth xxx查找空、可执行、无所属用户及组、可读、权限 xxx、比 xxx 更新、uid 是 xxx、大小是 xxx、遍历目录深度 xxx 的文件。wall/mailLinux 下的通信指令。文件与进程fuserfile user根据文件查看文件正在被哪个进程所使用lsoflist of process列出进程正在占用的文件列表pidofpid of process列出进程的 pid 号。【例lsof -p 123查看进程 pid 是 123 所打开的文件】pwdx查看进程启动时的工作目录。【例pwdx 123查看 pid 为 123 的进程的工作目录】mkfifo创建一个有名字的管道。该管道可以使不同 bash 之间的进程进行数据流的传递而默认的 | 管道只能够在单个 bash 内不同进程之间进行数据流的传递。有名字的管道更像是一个特殊的文本文件它也可以更改所有者以及权限。diff 参考文件 对比文件/patch 可以对文本或目录下的文本进行不同之处的比对以及根据比对生成的 patch 文件使用 patch 命令进行新文档的打补丁处理。该命令似乎只能针对存在的文本文件进行对比分析而对于那些不存在的文本文件/存在的二进制文件它们并不能够很好的工作。logger可以将我们定义的日志信息传给 journald 服务让其记录之后 rsyslog 又会从 journal 中取得该记录并分类。logger 与 journal 之间的传输是通过 unix socket /dev/log 来实现。随机数生成$RANDOM生成随机数字、openssl rand -base64 num(要输出的随机字节数)生成随机字节。script/scriptreplay记录及重新播放终端会话的所有操作。但不是再次重新执行一遍命令相当于命令行录屏。例script -t 2 timingfile typescript将开始录制操作当 exit 退出录制时将产生时间文件 timingfile 和命令记录文件 typescriptscriptreplay -t timingfile -s typescript将开始播放录制内容。这两条命令中所涉及的时间文件很命令记录文件缺一不可帮助文档未说明以为只需时间文件即可。xargs过滤器相当于让不支持管道符的命令再次可以使用管道符功能。xargs 将整个流的所有字符都看做一个较长的字符串包括换行符也被看做一个字符因此不同的-n -d 格式所展现出来的效果会显得难以理解。然后根据它的分割字符将对应的分割段按照一次需要输出的数量几段字符当作一段传输传送给命令xargs 默认的分隔符是空格换行符也被当作一个空格。例cat rename.txt | xargs -n2 mv根据命名文件批量重命名指定文件。date显示时间。例date %B %d显示月份和日期。env显示当前环境变量以及为启动程序提供一个自定义环境变量的干净环境。【例env -i a 10 bash将启动一个新的 bash 环境该环境中没有多余的环境变量只有几个必需的和自定义的变量。】磁盘/文件系统df/du磁盘文件系统容量查看、磁盘文件使用情况查看。例1df -h查看当前系统中存在的文件系统不仅包含了分区文件系统还有其它一些非分区文件系统2du -sh --max-depth num查看当前文件夹总大小3du -ch */*.txt将当前目录中的目录中的所有.txt 的大小列出并将列出大小的总和进行 count 统计。【注df 查看的统计容量通常比 du 统计的容量大这是因为 df 基于磁盘包含了格式化所占用的容量而 du 基于文件只统计文件大小的和。】tree以树的格式列出目录及子目录中的内容。lsblk/blkid查看磁盘这类的块设备。xfs_info/dumpe2fsxfs 及 ext 系列文件系统信息查看。【注ext 格式化时会将整个分区全部格式完成而 xfs 则是先格式一部分不够使用了再继续格式化一部分。故使用 ext 格式化分区时速度较慢xfs 格式速度则较快且 xfs 的 inode 容量较大得以支持更大的单文件容量。】partprobe更新 Linux 核心的分区表信息。gdisk/fdisk/partedGPT 磁盘分区工具、MBR 磁盘分区工具及都两者都支持的分区工具。mkfs分区文件系统格式化。mount/umount临时挂载/卸载文件系统若要开机即挂载则需要编辑/etc/fstab文件挂载信息被记录于/etc/mtab及/proc/mounts。例1mount -o remount, rw path以读写方式重新挂载目录2mount -o loop path挂载光盘镜像文件mkswap/swapon/swapoff内存置换空间初始化及使用。例1mkswap device/file path将分区或大容量文件初始化为 swap 格式2swapon device/file启用这个内存置换空间。dd自由操作字节流的输入输出可拷贝文件及转换内容。例1dd iftest1 oftest2 convucase从 test1 文件克隆到 test2期间将 test1 中的小写字符转换为大写字符并写入 test22dd if/dev/zero oftest2 convucase bs100 count100创建一个 10000 字节的文件【注关于 bs 和 ibs 的区别。bs 限定了同一时间读写的最大量而 ibs 只限定了同一时间读的最大量这些参数的设定通常是为了测试磁盘读写速度或压力测试。】文件权限/属性stat查看文件的状态及其在文件系统中的信息最方便之处在于快速的显示出文件的访问时间、修改时间、状态时间信息。不需要通过ls -l --timeatime test; ls -l --timectime test; ls -l test的方式去查看文件的时间信息。touch修改文件的 mtime、atime 时间戳属性【ctime 时间戳由系统修改并非 touch虽然三者时间戳看起来区别不大。通过 stat 可详细查看】。例1touch -d “2 days ago” file更改文件的 mtime、atime 时间为 2 天后2touch -a -t 202001220101 file更改文件的 atime 时间为指定时间。【注mtimemodification time 内容修改、ctimestatus time 权限及属性修改、atimeaccess time 内容读取】umask文件预设权限。例umask 003拿掉 other 的 rw 权限此时新建的文件为 664 目录为 774。【注这主要取决于系统新建文件不包含目录默认是把 x 权限拿掉的文件 x 权限只能根据需求手动增加。】chattr/lsattr文件隐藏属性更改及查看。例1chattr i file文件不可被更改及删除即便 root 用户2chattr a file文件只能被追加。【注该隐藏属性在 ext 系列文件系统中被完美支持xfs 不完全支持】特殊权限 SUID、SGID、SBIT例1SUID 针对文件使 other 用户在执行程序期间拥有文件所有者的权限2SGID 针对文件使 other 用户在执行程序期间拥有文件所属组的权限SGID 针对目录使进入此目录下的 other 用户在新建文件时文件的所属群组为该目录群组3SBIT 针对目录使 other 用户在该目录下建立的文件只能被自己和 root 删除即便 other 拥有对该目录 w 的权限。【注这些权限会占用 x 位而且要使三者发挥对应的功能文件也必须拥有 ax 权限才行。如果没有 x 权限但又特殊权限此时会出现大写的权限字符】setfacl/getfacl权限细部规划。例setfacl -m u:test1:rw -m u:test2:rwx file设置所属人为 root 的文件 file 让用户 test12 分别拥有不同的权限。【注传统的权限只有 3 种身份 owner、group、other 无法针对单一用户或群组来设定特定的权限需求而 ACL 可以支持单文件针对不同的用户实现不同的权限。】文本处理tail/head打印文本最后的部分。例1tail -n num file查看文件最后 num 行内容2tail -f file动态监视文件追加的内容。cat/tac连接文件并输出。例cat -E -T file显示文件尾部的$符号和 TAB 符号-b 为非空的行添加行号-n 为所有行添加行号。split文件大小切割。tr对从标准输入流中读取到的文本字符进行转换并从标准输出流输出。其中选项 c/d/s/t 分别对字集 1 进行补集/删除/挤压/截断的操作。例tr [:lower:] [:upper:] test.txt。col对从标准输入流中读取到的文本字符进行转换并从标准输出流输出。例1cat test.txt | col -x将 tab 替换为对应的空格2cat test.txt | col -h输出 TAB 替换原来的多空格。wc进行文本文件的字节、字数、行数的统计。join将 2 个具有相同域的纪录给挑选出来再将这些纪录所有的域放到一行。 join 在对两个文件进行连接时两个文件必须都是按照连接域排好序的按其他域排序是无效的。例join test1 test2。paste直接将 2 个文件的内容并排粘贴在一起而不如 join 那样进行分析或将多行内容用一行去输出。例paste test1 test2echo 123\n456 | paste -sd ,sort对文本文件的行进行排序。例sort -r -t : k1 test根据: 对文件进行分域并按照文件的第一个域进行逆序排序sort -h test以人类可读的方式进行排序。uniq文本行去重统计。cut文本列切割。watch定时执行命令实时监测命令输出内容的变化情况。例watch -d -n 3 ls每 3s 执行一次 ls实时高亮显示当前目录中的变化情况。rename支持批量更改文件后缀名。rename .txt .log *.txtod用八进制亦支持十、十六进制去显示文件的内容类似于十六进制查看器 WinHex。例od -A n -t x1 -w1 test.txt用十六进制的格式转换每行输出一个字节地址基数不显示-A n的方式查看 test.txt 文件。若要模拟 WinHex 的输出方式则用od -A x -t x1 -w16 test.txt。用户/组管理useradd/userdel/usermod/passwd用户管理。groupadd/groupdel/groupmod/gpasswd组管理。gpasswd 可以给组添加成员并指定组管理员newgrp在当前 shell 切换用户的有效组。【有效组切换之后新建文件时文件的所属组就变成了有效组。重启该 shell 之后有效群组失效因为有效组切换是新建立一个 shell 环境并给予该环境新的组权限需重新设定若要使更改的有效组永久生效需通过 usermod 更改该用户的初始组。】id/chsh/groups/groupmems查询用户相关信息、更改用户 shell、查询用户加入的组、查询组成员。例groupmems -g test -l列出组成员。w/who/last/lastlogw 查看哪些用户已登录且正在做什么who 查看哪些用户已登录last 查看最近登录系统的登录记录通常是很多的 root 登录记录lastlog 查看所有用户最近一次登录的时间展示所有用户。sudo -u user cmd使用指定用户去执行命令使进程的所有者为指定用户进程权限为指定用户权限。whoami查询当前 shell 的用户是谁。任务管理jobs/fg/bg后台任务管理。例1jobs 查看后台任务状态及对应任务的 job_num2fg job_num将后台运行任务切换至前台3bg job_num让后台停止的任务继续在后台运行4CTRZ 将前台正在运行任务隐藏至后台并停止运行5CMD 让任务在后台运行。kill杀掉进程或后台 jobs。例1kill -9 %jobs_num根据 jobs 号杀掉进程2kill -9 pid根据 pid 杀掉进程。nohub让程序以忽略挂起信号的方式运行被运行程序将输出信息追加到 nohub.out 文件中而不会显示到终端。例nohub cmd [cmd-arg] []。ps、top 均为进程观察指令pstree 可以很方便的查找进程之间的联系。管理进程时可以使用 kill以 PID/jobs 号识别进程以及 killall以进程的 CMD 名称来识别进程来对进程发送 signall 信号。【例1pstree -ps pid可清晰查看指定进程的整个继承关系2ps -eo pid,lstart,etime,cmd | grep 1234查询 pid 为 1234 的进程的启动时间和运行时长等信息】top进程动态查看支持交互与不交互模式其功能更类似于 windows 下的任务管理器。例1top -b以非交互模式运行此时的输出默认仍是以 3 秒刷新一次2top -u str输出指定进程所属人相关的所有进程3top -p num输出指定 id 的进程不断动态刷新【注top 交互模式视图下的常用命令h 帮助菜单f 管理输出进程字段z/b/x/y 颜色/加粗/运行行/排序列 之间的切换这些命令相互配合显示会更直观L 关键字查找k 终止指定进程1 显示 cpu 内核数量d 设置刷新间隔时长W 将以上执行的命令设置保存下次使用 top 关于颜色、刷新间隔时间、显示列这些依旧生效。】at/batch/atq/atrm执行一次排程。例1at time指定时间执行任务2batch当系统负载小于 0.8 时运行3atq查看任务列表4atrm num删除指定任务5at -c num列出该项任务的实际指令内容。【注at 任务执行完成之后的输出结果会通过 mail 邮件发送。】crontab循环执行排程。例1crontab -e -u test编辑指定用户的 crontabcrontab -l列出任务内容2crontab -r移除所有任务内容【注通过-e 编辑的用户排程对应于/var/spool/cron/user系统相关排程直接编辑/etc/crontab 或/etc/cron.d/*。】anacron检查停机期间未能如期运行的排程并执行。例1anacron -s依据时间记录文件开始检查有没有未如期运行的排程2anacron -f不检查时间记录文件立即执行其监督范围中的所有排程。【注anacron 是一个程序而非一个服务其由 crontab 排程循环执行每次执行将对停机期间未如期运行的排程进行检查检查完毕若正常则进行停止。/etc/anacron 配置文件包含 anacron 应该监督排程文件范围】杂项update-alternatives用于处理 Linux 系统中软件版本的切换使其多版本共存。使用上也是基于 link 软链接进行但是功能比 ln 强大。例update-alternatives --install /usr/bin/java java /usr/bin/java1、update-alternatives --install /usr/bin/java java /usr/bin/java2将给 /usr/bin/java 指定了 2 个待选版本。lspci查看系统已加载的硬件设备类型及型号等信息。通过cat /proc/cpuinfo也可查看 CPU 类型及内核处理器数量特殊指令集合1、rpm 用法rpm -ivh --replacefile/--replacepkgs *.rpm似乎并不能够覆盖安装包因为原来的更改的配置文件依旧未变。可通过将原配置文件重命名然后再进行覆盖安装即可。查询包依赖rpm -qpR pkg.rpm直接列出。查询依赖包rpm -e --test pkg.rpm或rpm -q --whatrequires pkg测试删除如果有依赖关系会阻止删除。根据已知文件查询所属包名称rpm -q --whatprovides /filepath/列出安装包时所释出的所有文件rpm -ql pkg安装到指定位置rpm -ivh --prefix dir将已安装程序的旧位置移动新位置rpm -ivh --relocate old new2、yum 用法yum --downloadonly --downloaddir . install pkgname下载需要安装的包及依赖的 rpm 文件到指定目录但不安装;yumdownload pkgname仅下载需要安装的包到当前目录但不下载依赖包。yum updateinfo更新仓库列表名单yum whatprovides */libphp*.so在线查询哪些安装包带有 libphp 模块与rpm -q --whatprovides的查询方式一样区别只在于离线与否yum groupinstall ‘Group Tool’批量安装工具组中的所有包。3、dpkg 用法dpkg-query -L pkg列出已安装包所包含的所有文件dpkg-deb -c pkg列出未安装包所包含的所有文件dpkg-query -s pkg报告已安装包依赖及详细描述dpkg-deb -I pkg报告未安装包依赖及详细描述dpkg-query -S file根据指定文件的路径来查询该文件所属的安装包dpkg -l列出所有已安装包的版本信息及平台dpkg-reconfigure pkg重新配置软件包第一次安装之后的配置参数。例dpkg-reconfigure tzdata重新更改时区。4、apt-get/apt 用法apt update更新仓库列表名单以及可以进行升级的包信息。apt upgrade根据列表名单中可以升级的包信息对相应的包进行安装/升级操作。【apt-get install --only-upgrade cmd-name只升级指定的软件】apt full-upgrade根据列表名单中可以升级的包信息对相应的包进行卸载/安装/升级操作。apt list --installed列出已安装的软件包。apt search在列表名单中的描述信息搜索包关键字。apt-get remove删除 B 的同时将删除 A(很好理解A 依赖于 BB 被删了A 也就无法正常运行了)。apt-get remove C将删除 C, 同时提示你用 apt-get autoremove 去清除 B, D apt-get autoremove C 将删除 B, C, D aptitude remove C 将删除 B, C, D。【该操作较危险不清楚完整的依赖关系最好别试】apt-get purge的行为卸载并清除软件包的配置即/etc/..很容易理解但不会删除家目录下的配置文件【注remove 不删除配置文件、purge 删除 etc 下的配置、autoremove 删除软件包相关的各种依赖软件】。apt-cache search php- | less在 apt 缓存中搜索 php 模块相关的包。apt-cache show php-gd查询包的详细信息apt-file list pkg列出包所包含的文件补充apt 在搜索 mysql-server 时结果中会存在 2 个主要相关包 mysql-server、mysql-server-8.0实际上两者都属于同一个包只不过 mysql-server 包总是指向当前系统中最新的 mysql-server*版本此处即是 mysql-server-8.0。5、SELinux 相关的查询及管理命令getenforce 获取当前模式。setenforce 设置模式。sestatus 获取当前政策及模式。getsebool 获取政策下的规则。setsebool 设置政策下的规则。seinfo 查询规则内的信息规则限制了什么东西。sesearch 查询规则内信息。chcon 修改文件的 content 的属性。restorecon 根据 SELinux 预设的值对文件进行 content 属性的修改。semanage 就是用来查询/增加/修改/删除预设的 SELinux type 。restorecon 可以【恢复】原本的 SELinux type 那是因为有个地方专门在纪录每个文件/目录的 SELinux 默认类型。6、Qemu 用法qemu-img.exe create -f qcow2 .\kylin-v4-arm64.qcow2 50G在当前目录下创建 50G 的硬盘镜像qcow2 格式的磁盘镜像支持动态分配磁盘空间以及快照功能、raw 格式的磁盘镜像则是创建即占用指定空间大小。qemu-img create -f qcow2 /root/test/diff.img -b /root/test/base.img创建差异盘镜像文件差异盘 diff.img 被使用之后读取的已有内容都来自 base.img而进行的改动都写入了 diff.img 而不影响 base.img 的内容。当然也可以通过qemu-img commit diff.img将差异盘 diff.img 中的改动的内容写入基础盘 base.img 中。qemu-img.exe resize .\kylin-v4-arm64.qcow2 1G扩展已创建的磁盘镜像。注意磁盘镜像被扩展之后系统中的分区表还是扩展之前的数据此时需要通过 parted 或 gparted 进行 GPT 分区表修复之后才能对新增的磁盘空间进行分配。qemu-img snapshot -c/a/l snap1 test.qcow2创建/使用/列出虚拟机快照。这些命令需在虚拟机关机的状态下使用否则会损坏磁盘镜像。这种快照管理方式很像 VMware 这些虚拟机的快照管理方式tapctl.exe create --name tap0创建 tap 网络。--以下例子是基于 aarch64 处理器架构的虚拟机--qemu-system-aarch64.exe -m 2048 -M virt -cpu cortex-a53 -smp 4, cores 4, threads 1, sockets 1 -bios D:\qemu\QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd .\kylin-v4-arm64.qcow2启动一个图形界面虚拟机的必备要素内存、cpu 型号及构造、机器类型-M 和 cpu 型号相关联、BIOS 固件efi 固件并非支持所有类型的 iso 操作系统、VGA 显示器、鼠标、键盘。此处假设 qcow2 磁盘已完成系统安装初始化qemu-system-aarch64.exe 必备要素之外 -hd [abcd] .\test.img -cdrom D:\qemu\kylin\Kylin-4.0.2-server-sp4-20070420.J1-arm64.iso 0 -boot d .\kylin-v4-arm64.qcow2初次对一个磁盘镜像进行初始化系统安装时需添加一个光盘 iso 镜像使其开机从光盘启动。参数-boot d 告知虚拟机启动时从光盘处加载系统这个参数在 windows 下似乎并不生效从磁盘镜像启动还是通过进入 BIOS 选择进行的参数-hd [abcd] 将会添加几个额外的磁盘设备hd [abcd]磁盘文件在命令行中的先后顺序将决定它的 hdx 中/dev/hdabc 的先后顺序qemu-system-aarch64.exe 必备要素之外 -net nic, model virtio -net tap, ifname tap0 .\kylin-v4-arm64.qcow2若要与外界主机网络连接则需模拟一个指定的 virtio 网络卡设备并将其与外部 tap 网络进行连接。网络卡设备的选择需要慎重因为操作系统可能没有对应的网卡驱动。在不建立 tap 网络连接的默认情况下虚拟机终端的 ip 在 10.0.2.0/24 这个网段之内此时虚拟机可以通过 10.0.2.2 这个 ip 对宿主机上开放的服务进行连接访问。这种特殊行为属于内置端口映射qemu-system-aarch64.exe 必备要素之外 **-monitor stdio -snapshot** .\kylin-v4-arm64.qcow2启用只读虚拟机的监视器及快照模式在这个模式下可以对启动的虚拟机进行快照管理不过这些创建的快照在虚拟机重启之后就会丢失只有在控制台通过 commit 才能将这些快照写入到磁盘镜像中savevm 创建快照、loadvm 应用快照、delvm 删除快照、info snapshots 列出创建的快照。监视器的控制台有 3 种方式进行访问stdio 启动虚拟机的命令行处即是控制台启动处访问、unix socket本地访问、telnet远程访问、tcp远程访问。qemu-system-x86_64.exe -M pc -machine pc-i440fx-4.0 -machine accel hax -m 2048 -smp 4, cores 4, threads 1, sockets 1 -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd -cdrom E:\CentOS-7-x86_64-DVD-2009.iso -boot d通过安装加速器haxm 使得模拟 x86 处理器的虚拟机时速度得到显著提升该加速器仅对 x86 和 x86_64 虚拟机有加速效果。