本文基于在 windows 系统环境下(笔者已经在 windows 7 和 windows 10 下都操作过多次)通过 VMware Workstation 12 Player 安装并使用 Ubuntu 16.04 的经验,描述一些比较典型的问题和详细的应对方法。
和主机的交互增强
通过 ubuntu 官网的镜像文件成功安装 16.04 版本之后,可以在主机和虚拟机之间复制黏贴一些文字了,鼠标的进入和离开也很自然,但这很显然还不足够。
既然玩的是虚拟机,而不是把主机整个改成 Linux 环境,那么就有必要利用主机的资源,使用 VMware 本身提供的 VMware-Tools 可以很轻易的增强虚拟机和主机之间的交互。
VMware-Tools 的重新安装
- 进入虚拟机系统,然后点击 VMware 软件上的 Player 按钮,依次选择”管理“-”更新 VMware-Tools“或者”重新安装 VMware-Tools”。
- 随后,等待系统的响应。会在下方出现选项,复制其中的 VMware-Tools 压缩包,黏贴到你喜欢的文件夹下,比如也可以,然后右键解压他。
- 进入解压后的文件夹,运行命令
sudo ./vmware-install.pl
(文件名字可能有偏差,总之,是这个解压出来的文件夹下的 .pl 文件)。 - 安装过程中会出现很多操作问询,大可一路回车确认下去。
共享文件夹
- 重新安装好 VMware-Tools 后,关闭虚拟机,重启 VMware,在左侧列表选中虚拟机之后,进入虚拟机设置,在“选项”列表里,找到“共享文件夹”选项,通过“添加”来选择主机内你想要共享给虚拟机的文件夹。之后的操作都很简单,不赘述。
- 上一步的选项都弄好后,启动虚拟机,我们将可以在目录
/mnt/hgfs
下看到主机共享过来的文件夹。 - 需要注意的是:不要在共享文件夹里去放项目。因为实际上,这个共享文件夹还是存在于 Windows 系统里的。所以如果在虚拟机里部署开发环境,而在共享文件夹里去试图开发工程,会发现遇到各种奇怪的编码问题,比如一些字符显示不正常,比如一些依赖安装失败等。共享文件夹尽量只用于从主机里往虚拟机里导入一些简单的文件,千万不要以为这个文件夹能在两个系统里都工作正常!
浏览器共享主机SS代理
- 本机设置好代理后,其实不需要在虚拟机里再安装SS,原理是:虚拟机相当于一台注册于本地局域网内的客户机,所以可以通过设置系统代理,直接找主机的SS。在本机里通过
ipconfig/all
命令可以轻易地看到主机作为虚拟机所在局域网的主机的 ip,比如可能是 192.168.199.1(注意,以下是以此为例) - 进入虚拟机,在“网络设置”中的“Network proxy”选项中,选择
Manual
,这里 4 个代理都可以直接设置为主机的IP地址,一般这个地址是192.168.199.1
。(在主机中先查看确认一下) - 以上代理的端口设为主机代理程序的端口,SS默认端口号是1080(你可以在SS的服务器配置里去改成别的,保持一致即可)。
- 虚拟机内需要代理的各浏览器,选择“使用系统代理”、或者下载一些好用的插件(比如Chrome可以用Proxy SwitchyOmega,幸运的是,目前下载相关插件并不需要科学上网)。
- 如果你主机上使用的是 SS,还需要在SS上勾选“允许来自局域网的连接。
- 注意,由于 SS 使用 socks5 协议,而终端很多工具目前只支持 http 和 https 等协议——比如,你是 ping 不通 google 的,因为 ping 不涉及 http/https 等协议,除非你使用 vpn 实现系统级代理,否则以上例子只能让你通过浏览器科学爱国。其他应用程序,比如 npm 需要额外做设置,执行
npm config set proxy=http://192.168.199.1:1080
才能让它使用主机的代理。 - SS 仅在这里作为例子来描述。
- 如果不需要科学上网,或者VPS暂时被封了,虚拟机的“网络设置”的“Network proxy”选项中,选择
Disabled
就好。
服务器端ss安装
防爆,略。只简单提示下新手容易卡住的地方:客户端连接不了可能原因有多种,比如服务端自己的服务没有启动、软件没有开通用户访问权限、服务器端口被防火墙封掉等。
虚拟机使用增强
Chrome 的安装
Chrome应该成为唯一的浏览器rua!rua!rua!- 先通过命令
sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/
将下载源加入到系统的源列表。如果返回“地址解析错误”等信息,可以百度搜索其他提供 Chrome 下载的源,用其地址替换掉命令中的地址。 - 再通过命令
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
导入谷歌软件的公钥,用于下面步骤中对下载软件进行验证。 - 如果顺利的话,命令将返回“OK”
sudo apt-get update
没什么好说的,对当前系统的可用更新列表进行更新。这是许多 Linux 发行版经常需要执行的操作,目的是随时获得最新的软件版本信息。- 现在我们可以安装 chrome 稳定版本了
sudo apt-get install google-chrome-stable
- 通过命令
/usr/bin/google-chrome-stable
运行 chrome,顺手将它锁定到图形界面上吧,以后开启就方便了。至此安装结束。
拼音输入法
ubuntu16.04 并没有自带中文输入法,所以需要额外手动安装。这里和网上许多教程有出路,我实践后发现需要的操作是:
先安装语言支持
- 进入“系统设置” -> “语言支持(Language Support)-> “键盘输入法”从 ibus 改成 fcitx(支持搜狗输入法的输入法系统)。
- 同一界面里,找到“添加或删除语言…”,进去找到“Chinese(Simple)”打钩。
- 注销,重新登陆系统。
搜狗拼音输入法
- 先去搜狗拼音官方网站下载搜狗拼音的 deb 安装包(注意是 32 位还是 64 位的)。
- 进入安装包所在目录,执行
sudo dpkg -i 搜狗拼音deb包名字
等待系统报错误提示。 - 执行
sudo apt-get -f install
强制安装所需依赖。 - 重新安装 deb 包
sudo dpkg -i 搜狗拼音deb包名字
。 - 重新进入系统后,在输入法按钮处进入 ConfigureFcitx 设置,点击在左下角的+号,去掉“only”的 √ 号,并找到搜狗拼音,将其加入。重启系统。之后,你将可以在你的 ubuntu16.04 虚拟机里使用搜狗拼音输入中文。
- sublime 中如果需要使用中文输入法,还需要做一些额外的配置,比如使用 github 上的 sublime-text-imfix 项目,具体的操作对应的 readme 里写清楚了。
谷歌拼音输入法
sudo apt install fcitx fcitx-googlepinyin im-config
im-config
去指定一下 fcitx 模式- 另外,谷歌拼音切简/繁体很方便,在拼音输入模式下:
ctrl+shift+f
。但这也是一个坑:毕竟这也是 VSCode 默认开启全局搜索的快捷键…所以建议改一下。 - 要修改快捷键可能会有迷惑,其实是在Input Configure里,进入addon选项,则可以找到简繁体切换的功能,点进去,发现可以设置快捷键,可以修改成不容易冲突的,甚至是直接通过esc取消这个快捷键。
修改字体
Unity Tweak Tool
- 一个非常方便的Linux的主题管理/桌面自定制工具,对于Unix的桌面用户是非常有用的
- 可以通过桌面上的应用管理直接安装,也可以通过命令安装
sudo add-apt-repository ppa:freyja-dev/unity-tweak-tool-daily
sudo apt-get update
sudo apt-get install unity-tweak-tool
- 如果出现关于
com.canonical.unity.webapps
的报错“The following schema is misssing”,就安装sudo apt-get install unity-webapps-service
苹果字体
- 毕竟日常工作是Mac电脑的话,修改为苹果的字体也会更加习惯吧。
wget http://drive.noobslab.com/data/Mac/macfonts.zip -O mac-fonts.zip
sudo unzip mac-fonts.zip -d /usr/share/fonts
sudo fc-cache -f -v
- 之后就可以通过 Unity Tweak Tool 来修改字体显示了。
程序的删除
- 先通过命令
dpkg --get-selections | grep <应用程序的部分或者全部名称>
获取程序全名。 - 调用命令
sudo apt-get remove --purge <应用程序名称>
来删除相应的程序。 - 如果想要手动删除一些配置文件,可以通过命令
locate -ir <软件关键字(可以有正则表达式)
来定位应用程序相关的文件位置。 - 接下来可以执行一些自动的清理工作,比如:
sudo apt-get autoremove
删除为了满足应用程序的而安装过,现在不需要了的程序(配置会被保留)。sudo apt-get autoclean
APT 的底层包是 dpkg, 而 dpkg 安装 Package 时, 会将 *.deb 放在 /var/cache/apt/archives/中,该命令会删除 /var/cache/apt/archives/ 已经过期的 deb。sudo apt-get clean
会将 /var/cache/apt/archives/ 的 所有 deb 删掉,可以理解为rm /var/cache/apt/archives/*.deb
这样的命令。
文件权限知识
文件权限除了 r、w、x 外还有 s、t、i、a 权限
s:文件属主和组设置 SUID 和 GUID,文件在被设置了 s 权限后将以 root 身份执行。在设置 s 权限时文件属主、属组必须先设置相应的 x 权限,否则 s 权限并不能正真生效(
chomod
命令不进行必要的完整性检查,即使不设置 x 权限就设置 s 权限,chmod 也不会报错,当我们ls -l
时看到 rwS,大写 S 说明 s 权限未生效)。Linux 修改密码的 passwd 便是个设置了 SUID 的程序,普通用户无读写/etc/shadow 文件的权限确可以修改自己的密码。1
2ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 32988 2008-12-08 17:17 /usr/bin/passwd可以通过字符模式设置 s 权限:chmod a+s filename,也可以使用绝对模式进行设置,如:chmod 4764 filename //设置 SUID
- 设置 suid:将相应的权限位之前的那一位设置为 4;
- 设置 guid:将相应的权限位之前的那一位设置为 2;
- 两者都置位:将相应的权限位之前的那一位设置为 4+2=6。
- t :设置粘着位,一个文件可读写的用户并一定相让他有删除此文件的权限,如果文件设置了 t 权限则只用属主和 root 有删除文件的权限,通过 chmod +t filename 来设置 t 权限。
- i:不可修改权限 例:chattr u+i filename 则 filename 文件就不可修改,无论任何人,如果需要修改需要先删除 i 权限,用 chattr -i filename 就可以了。查看文件是否设置了 i 权限用 lsattr filename。
- a:只追加权限, 对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。可以使用 chattr +a 设置追加权限。
安全上下文
- 注意到
ls -l
显示文件时,权限列后面有个点。如:-rw-rw-r--. 1 user group 13767 12月 25 2014 index.html
- 这是开启了 SELinux 功能的 Linux 系统才会有这个点,那个点表示文件带有“SELinux 的安全上下文”。
- 对于 CentOS 7 默认是开启 SELinux 的,所以会有这个点,如果关闭 SELinux,然后再创建文件,新创建的文件就不会再有这个点了,但是以前创建的文件本来有这个点的还会显示这个点(虽然 SELinux 不起作用了)。
一些方便的命令和快捷键
nautilus 路径
:可以从终端打开对应路径的文件目录的图形化界面- win 按键就是 Linux 系统的
Super
键,非常的有用,可以直接按,也可以组合按键:比如配合方向键来摆放窗口、配合按键 d 来显示桌面等等 ctrl + alt + t
可以直接打开一个 termial
虚拟机系统需要注意的一些细节
- 断行字符。
- DOS 和 Linux 的断行字符不一样。所以,在不通的系统之间复制一些纯文本文件的时候,有必要转换断行格式。
- 通过命令
cat -A 以DOS(Windows系统)建立的文件(理所当然,这里的文件格式相对Linux是特殊的)
可以发现在 DOS 中使用的断行字符为^M$
,我们称之为 CR 与 LF 两个符号;而在 Linux 下,仅有LF($)
这个断行符号。 - Linux 中的命令在执行的时候,判断依据是
Enter
,DOS 的是 CRLF,多了一个^M 的符号出来,在这样的情况下,如果是一个 shell script 的程序文件,可能发生无法正常执行的状态——会误判程序所执行的命令内容。 - 转换方式:k 参数表示保留原本的 mtime 时间格式(不更新文件上次内容被修订的时间)n 参数表示保留旧文件。
dos2UNIX [-kn] file [newfile]
UNIX2dos [-kn] file [newfile]
- 语系编码转换。
iconv --list
列出 iconv 支持的语系数据iconv -f 原本编码 -t 新编码 filename [-o newfilename]
f 就是 from,t 就是 to,
- 如果有人通过
sudo rm -rf /
误操作了,可以尝试 iso 引导进入 rescue 模式,然后查看.bash_history,90%概率能找出是谁干的。
虚拟机安装/使用过程的一些问题
某天网络连接突然断开
- 如果设置了代理,那么检查代理有没有开、主机ip是否变化。如果都ok,进入下一步。
- 在主机里看vmware相关进程是否正常
- windows电脑为例,计算机(右键)——管理——服务,找到vmware有关的进程——DHCP和NAT。
- 手动选择“启动”。一般都能解决了。
无法更新软件源
- 表现是
sudo apt-get update
的时候报错,提示被锁定了。 - 直接到那个目录下去删掉
lock
文件即可。
vi 编辑器出现故障
- 表现是进入输入模式后,方向键不能正常地在文档里移动,而是出现了 ABCD 等字符,backspace 按键也不能正常地删除字符
- 解决的方式有很多,最简单的就是
cp /etc/vim/vimrc ~/.vimrc
- 这个对于在Windows系统下,使用x-shell的时候遇到一样表现的问题的时候也是可以的。
chrome花屏死机
- 2019.7发现chrome开多了窗口后,有不确定出现的花屏,会导致chrome假死,虚拟机也无法操作。
- 不久后发现VSCode的console用的久了后也会黑屏,需要Kill掉重新开,虽然不算很糟糕,但是还是很烦
- 所以尝试将虚拟机vmware的:管理-虚拟机设置-显示器-加速3d图形 里的主机内存提供到2G
- 发现VSCode的console还是会黑屏,决定关闭硬件加速看看问题是否复现
- 还会复现,so…慢慢找办法吧TODO: