一、基于VirtualBox虚拟机安装Ubuntu
这是我首次安装虚拟机,也是首次接触Linux系统。对于下学期要运用的这个操作系统,以及如何在自己的电脑上安装虚拟机,我还是有些期待和好奇的。
我一直跟着娄老师的教程走,总体而言还是比较顺利的。尽管遇到了不少问题,但通过在网上搜寻解决方法与不断地动手操作实践,所有的困难都得以解决,也收获不少。因此,我很赞同娄老师在教程里说的:
在此强烈建议把教程走完,出错了也会有不一样的收获。
我遇到的第一个问题是新建虚拟电脑,操作系统选择Linux,版本选择Ubuntu。在这里我看到教程里Ubuntu是64位,但我在选择Ubuntu时并没有64位,而只有32位。当时我没有太在意这个问题,进而选择了32位,并继续Next。
一路较为顺利,虚拟机创建完成:
接下来要做的是安装Ubuntu系统软件,在官网下载桌面版:Ubuntu 16.04 LTS。在双击启动创建好的虚拟机并选择启动盘之后,却没有出现应有的安装界面,Virtualbox提示“FATAL:No bootable medium found!System halted.”
通过在网上查询资料得知:
类型 | 原因 | 解决措施 |
---|---|---|
已安装系统的情况 | 引导设备设置错误导致 | 首先,在出现错误的虚拟机上右键选择“设置”。在设备中点击“系统”,启动顺序只勾选”硬盘“即可。此时再启动系统便可以正常引导。 |
未安装系统的情况 | 没有设置好光盘镜像 | 首先,选中出错的虚拟机,点击“设置”按钮。在“设置”中选择“存储”——“没有盘片”,右侧点击光盘的图标,选择要加载的系统ISO镜像即可。择好镜像后,点击“启动”,此时再看虚拟机能否正常引导。 |
——应用自百度经验《virtualbox提示no bootable medium found怎么办》
很明显我的遇到的情况属于第一种类型。但是在根据步骤进行操作后,问题并没有得到解决。此时Virtualbox提示“This kernel requires an X86-64 CPU,but only detected an i686 CPU.(当前系统内核需要64位的cpu,可是只检测到32位的) 这我想起了之前遇到的问题:Ubuntu无法选择64位,于是我选择了32位。经过查询资料得知:
VirtualBox安装64位的系统需要满足以下条件:
1. 64位的cpu
2. 安装的系统必须为64位
3. cpu允许硬件虚拟化
我的环境前两项都符合,所以应该是第三个条件没有被满足。
第3项需要在bios中开启这个选项,将Virtualization状态改为enabled。
——应用自《VirtualBox 安装 Linux时 报错This kernel requires an X86-64 CPU,but only detected an i686 CPU错误的解决办法》
1. BIOS中的虚拟化技术
本文介绍了如何在主板BIOS中启用虚拟化技术(VT)。要运行一些操作系统,虚拟化软件和虚拟机,硬件虚拟化就需要启用。大多数情况下,不需要虚拟化技术的操作系统可以正常运行在启用了虚拟化技术的系统,但有些需要这种技术的操作系统,必须启用虚拟化技术才能运行。
所有最新的处理器和主板都支持虚拟化技术,检查一下你的主板厂商是否支持并且要知道如何启用或禁用BIOS中的VT。当在主板上启用虚拟化技术后,操作系统能立即检测到。
2. 在哪里能找到在BIOS中的虚拟化技术(VT)?
首先开机进入BIOS,一般机器是按F2,我的T420是按F1,然后进入Security,Virtualization,选择Enable即可。不同的主板可能选项会有所不同,请自行参考主板厂商的帮助。
在你更改设置后,禁用或启用虚拟化,建议关闭计算机最小10秒,然后重新启动机器(冷启动),确保正常开启虚拟化技术。如果你的主板是最新的,它在冷启动后能够检测到配置变化。每当我改变我的主板上的VT设置,它都会自动推迟下次重新启动生效。
一般来说,用virtualBox安装64bit的虚拟机:
- 64位的cpu(带硬件虚拟化支持)和64位的操作系统
- 必须运行64位的VirtualBox,才可以装32位或64位的虚拟机;32位的VirtualBox只能装32位的虚拟机,而不论硬件是否支持64位
- 你必须允许硬件虚拟化;软件虚拟化是不支持64位虚拟机
——应用自《VirtualBox没有64位选项,无法安装64位的解决方法》
通过查阅资料,我也了解到更多关于BIOS的知识。其中这篇百度经验介绍得较为具体:《如何进入BIOS之联想笔记本BIOS的基本设置图解》。通过查阅资料并动手操作,我进入电脑的BIOS更改了VT设置,成功地解决了问题。
接下来就是按照教程里的步骤安装操作系统,一路都较为顺利,没有遇到多少问题。
操作系统安装成功。接下来是安装增强功能:
好啦,初始工作算是完成咯。
二、学习内容
接下来我要面对的是从未接触过的内容:与平时惯用的 Window 风格相差甚大的操作系统、内容冗杂又庞大的 Linux 命令,这些都很令我头疼。想必我从现在的小白一只,到入门学习,再到较为熟练地操作 Linux 系统,还有很长的路要走。路途漫漫,脚踏实地、一点一滴地努力和进步吧。
第一节 Linux系统简介
Linux 主要是系统调用和内核那两层。当然直观地看,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器、浏览器、电子邮件等。
这一节介绍了 Linux 的历史,Linux 与 Windows 的区别,以及如何学习 Linux。通过了解到 Linux 的特点:
- 收费:Linux 免费或少许费用。
- 软件与支持:Linux 平台大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;由全球所有的 Linux 开发者和自由软件社区提供支持。
- 安全性:Linux 平台比 Windows 平台要更加安全。
- 使用习惯:Linux 兼具图形界面操作(需要使用带有桌面环境的发行版)和完全的命令行操作,可以只用键盘完成一切操作,新手入门较困难,需要一些学习和指导,一旦熟练之后效率极高。
- 可定制性:想怎么做就怎么做,Windows 能做到得它都能,Windows 做不到的,它也能。
- 应用范畴:可以说世界上大部分软件和服务都是运行在 Linux 之上的。
- 其所不具备的:特定的支持厂商,足够的游戏娱乐支持度,足够的专业软件支持度。
课程中给出了如何学习 Linux 的建议:首先要摆正学习心态。
- 明确目的:你是要用 Linux 来干什么,搭建服务器、做程序开发、日常办公,还是娱乐游戏;
- 面对现实:Linux 大都在命令行下操作,能否接受不用或少用图形界面;
- 是学习Linux操作系统本身还是某一个 Linux 发行版。
其中:
Linux大都在命令行下操作,能否接受不用或少用图形界面。
这句话直截了当地指出了 Linux 的特点: 与我们平时惯用的 Windnows 有所不同,用户将不能依赖图形界面,而是在命令行下操作。这种转变对于我们初学者而言可能较为困难,但是对于程序员来说在操作上会更加方便。我想这也是 Linux 同样受欢迎而且被广泛使用的原因之一吧。
课程强调要注重基础,从头开始。提供的学习路径如下:
第二节 基本概念及操作
1. 桌面环境
Linux 本身是没有图形界面的,我们通常在 UNIX/Linux 发行版上看到的图形界面实际都只是运行在 Linux 系统之上的一套软件。如果只有服务器也是不能实现一个完整的桌面环境的,当然还需要一个客户端,我们称为 X Client,几个最流行的实现了客户端功能的桌面环境分别是 KDE,GNOME,XFCE,LXDE 。
实验楼之前使用的桌面环境是 LXDE ,目前使用的是 XFCE 。
2. 终端
终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登陆就是通过不同的 /dev/tty 设备完成的。
比较常见的终端模拟器有: gnome-terminal,Konsole,xterm,rxvt,kvt,nxterm 和 eterm 。实验楼的实验中的终端程序是 xfce 桌面环境自带的 xfce-terminal 。
切换纯命令行界面的“terminal”:[Ctrl]+[Alt]+[F1]~[F6]。
切换到其中一个终端后切换回图形界面:[Ctrl]+[Alt]+[F7]
3. Shell
UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。
在 UNIX/Linux 中比较流行的常见的 Shell 有 bash、zsh、ksh、csh 等等。
Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME),实验楼的环境中使用的分别是 zsh 和 xfce。
4. 命令行操作
- 输入和输出
输入:打开终端,按键盘输入,然后按回车
touch file 创建一个名为file的文件
cd /etc/ 进入一个目录
pwd 查看当前所在目录
输出:输出会返回你想要的结果,比如你要看什么文件,就会返回文件的内容。如果只是执行,执行失败会告诉你哪里错了,如果施行成功那么会没有输出,因为linux的哲学就是:没有结果就是最好的结果。
- 快捷键
Tab:使用Tab键来进行命令补全,当你忘记某个命令的全称时可以只输入它的开头的一部分,然后按下Tab键就可以得到提示或者帮助完成。不止补全命令,补全目录、补全命令参数都是没问题的。
Ctrl+c:强行终止当前程序(你可以放心它并不会使终端退出)。
其他一些常用快捷键如下:
按键 | 作用 |
---|---|
Ctrl+d | 键盘输入结束或退出终端 |
Ctrl+s | 暂停当前程序,暂停后按下任意键恢复运行 |
Ctrl+z | 将当前程序放到后台运行,恢复到前台为命令fg |
Ctrl+a | 将光标移至输入行头,相当于Home键 |
Ctrl+e | 将光标移至输入行末,相当于End键 |
Ctrl+k | 删除从光标所在位置到行末 |
Alt+Backspace | 向前删除一个单词 |
Shift+PgUp | 将终端显示向上滚动 |
Shift+PgDn | 将终端显示向下滚动 |
- 历史输入命令
使用键盘上的方向上键↑,恢复之前输入过的命令。
- 通配符
通配符是一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名、参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正字符。
Shell 常用通配符:
字符 | 含义 |
---|---|
* | 匹配 0 或多个字符 |
? | 匹配任意一个字符 |
[list] | 匹配 list 中的任意单一字符 |
[!list] | 匹配 除list 中的任意单一字符以外的字符 |
[c1-c2] | 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] |
{string1,string2,...} | 匹配 string1 或 string2 (或更多)其一字符串 |
{c1..c2} | 匹配 c1-c2 中全部字符 如{1..10} |
- man命令
在 Linux 环境中,如果遇到困难,可以使用man命令,它是Manual pages的缩写。用户可以通过执行man命令调用手册页。要查看相应区段的内容,就在 man 后面加上相应区段的数字即可。
$ man <command_name>:获得某个命令的说明和使用方式的详细介绍。
man man:查看 man 命令本身的使用方式。
$ man 1 ls:显示第一区段中的ls命令 man 页面。
- help参数
$ ls --help:快速查看一些一个命令的某个具体参数的作用。
第三节 用户及文件权限管理
1. 查看用户
打开终端,输入命令:
$ who am i 或者 $ who mom likes
使用 whoami(去掉空格)可查看当前登录用户的用户名, pts/0 中 pts 表示伪终端。所谓伪是相对于 /dev/tty 设备而言的。伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端, pts/0 后面那个数字就表示打开的伪终端序号,后面则表示当前伪终端的启动时间。
who 命令其它常用参数:
参数 | 说明 |
---|---|
-a | 打印能打印的全部 |
-d | 打印死掉的进程 |
-m | 同am i,mom likes |
-q | 打印当前登录用户数及用户名 |
-u | 打印当前登录用户登录信息 |
-r | 打印运行等级 |
2. 创建用户
在 Linux 系统里, root 账户拥有整个系统至高无上的权利,比如 新建/添加 用户。
创建用户需要 root 权限,要用到 sudo 这个命令。使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。
- 添加账户:$ sudo adduser 用户名
- 切换登录用户:$ su -l 用户名
注意:Linux 下密码输入是不显示任何内容的,可以盲打密码。退出当前用户跟退出终端一样可以使用 exit 命令或者使用快捷键 Ctrl+d。
3. 用户组
- 在 Linux 里面如何知道自己属于哪些用户组?
使用groups命令:$ groups 用户名
其中冒号之前表示用户,后面表示该用户所属的用户组。这里可以看到 shiyanlou 用户属于 shiyanlou 用户组,每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组。
- 将其它用户加入 sudo 用户组
默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组。用在sudo用户组的用户执行 sudo 命令可以将用户添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限。
$ su 在sudo用户组的用户名 $ groups 需要添加到sudo用户组的用户名 $ sudo usermod -G sudo 需要添加到sudo用户组的用户名 $ groups 需要添加到sudo用户组的用户名
- 删除用户
$ sudo deluser 需要删除的用户名 --remove-home
4. 查看文件权限
- 在不带任何参数的情况下,用 ls 命令来列出并显示当前目录下的文件。
$ ls -l
5. 变更文件所有者
假设目前是 lilei 用户登录,新建一个文件,命名为 “ iphone6 ”: $ touch iphone6
可见文件所有者是 lilei。现在,换回到 shiyanlou 用户身份,使用以下命令变更文件所有者为shiyanlou :
$ cd /home/lilei $ ls iphone6 $ sudo chown shiyanlou iphone6
现在查看,发现文件所有者成功修改为 shiyanlou 。
6. 修改文件权限
如果你有一个自己的文件不想被其他用户读、写、执行,那么就需要对文件的权限做修改,有两种方式。
- 方式一:二进制数字表示
每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)就对应这一个 "rwx",也就是一个 '7' ,所以如果我要将文件“iphone6”的权限改为只有我自己可以用那么就这样:
$ chmod 700 iphone6
现在,其他用户已经不能读这个“ iphone6 ”文件了:
- 方式二:加减赋值操作
完成上述相同的效果,可以通过以下命令:
$ chmod go-rw iphone6
g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。
第四节 Linux 目录结构及文件基本操作
1. Linux 目录结构
- FHS 标准
FHS(文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范:
第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。
(图片)
- 目录路径
使用 cd 命令可以切换目录
使用 . 表示当前目录
.. 表示上一级目录(以 . 开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a 命令查看隐藏文件)
- 表示上一次所在目录
~ 通常表示当前用户的 home 目录。 使用 pwd 命令可以获取当前所在路径(绝对路径)
- 绝对路径与相对路径
以home目录为起点,分别以绝对路径和相对路径的方式进入 /usr/local/bin 目录:
绝对路径:$ cd /usr/local/bin
相对路径:$ cd ../../usr/local/bin
注:在进行目录切换的过程中请多使用 Tab 键自动补全,可避免输入错误,连续按两次 Tab 可以显示全部候选结果。
2. Linux 文件的基本操作
- 新建空白文件
创建名为 test 的空白文件,因为在其它目录没有权限,所以需要先 cd ~ 切换回用户的 /home/shiyanlou 目录:
$ cd ~
$ touch test
- 新建目录
使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性。
创建名为“ mydir ”的空目录:
$ mkdir mydir
使用 -p 参数,可同时创建一个多级目录:
$ mkdir -p father/son/grandson
- 复制文件
使用 cp(copy)命令复制一个文件到指定目录。将之前创建的“ test ”文件复制到“ /home/shiyanlou/father/son/grandson ”目录中:
$ cp test father/son/grandson
- 复制目录
如果直接使用 cp 命令复制一个目录的话,会出现错误。要成功复制目录需要加上 -r 或者 -R 参数,表示递归复制:
$ cp -r father family
- 删除文件
使用 rm(remove files or directories)命令删除一个文件:
$ rm test
忽略提示,直接删除文件,可以使用 -f 参数强制删除:
$ rm -f test
- 删除目录
跟复制目录一样,要删除一个目录,也需要加上 -r 或 -R 参数:
$ rm -r family
3. 移动文件与文件重命名
- 移动文件
使用 mv(move or rename files)命令移动文件(剪切)。将文件“ file1 ”移动到 Documents 目录:
$ mkdir Documents
$ mv file1 Documents
- 重命名文件
将文件“ file1 ”重命名为“ myfile ”:
$ mv file1 myfile
- 批量重命名
要实现批量重命名可以使用一个看起来更专业的命令 rename 来实现。它要用 perl 正则表达式来作为参数。
使用通配符批量创建 5 个文件:$ touch file{1..5}.txt
批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件:$ rename 's/.txt/.c/' *.txt
批量将这 5 个文件,文件名改为大写:$ rename 'y/a-z/A-Z/' *.c
- 使用 cat,tac 和 nl 命令查看文件
前两个命令都是用来打印文件内容到标准输出(终端),其中 cat 为正序显示,tac 为倒序显示。
查看之前从 /etc 目录下拷贝来的 passwd 文件,加上 -n 参数显示行号:
$ cat -n passwd
nl 命令,添加行号并打印,是个比 cat -n 更专业的行号打印命令。
- 使用 more 和 less 命令分页查看文件
使用 more 命令打开 passwd 文件:
$ more passwd
- 使用 head 和 tail 命令查看文件
$ tail /etc/passwd
只看一行, 加上 -n 参数,后面紧跟行数:
$ tail -n 1 /etc/passwd
- 查看文件类型
在 Linux 中文件的类型不是根据文件后缀来判断的,通常使用 file 命令查看文件的类型:
$ file /bin/ls
- 编辑文件
在 Linux 下面编辑文件通常我们会直接使用专门的命令行编辑器比如(emacs,vim,nano)
$ vimtutor
4. 更多
召唤一双眼睛
$ xeyes
使用如下命令将它放到后台运行:
$ nohup xeyes &