20155228 基于VirtualBox安装Ubuntu和学习linux命令的学习经历和心得
一.虚拟机VirtualBox的下载安装
虽然娄老师的教程对于VirtualBox的下载安装讲的很简单,可以说是一笔带过,但是我在下载安装的过程中的确遇到意想不到的问题。
- 问题:在官网上下载的VB在安装完成后打不开。点击桌面的快捷方式弹出对话框说“创建COM对象失败”。
- 办法:右键快捷方式-属性-兼容性。百度说选择一个只要不是win7的兼容模式并用管理员身份打开即可。
- 建议:安装VB时不要改动默认安装路径,百度说改动安装路径有可能使得VB打不开。
现在VB已经安装并顺利打开了,然后是配置VB。
二.新建虚拟机和安装操作系统Ubuntu。
新建虚拟机的过程已经在教程里写的非常详细,这里不再赘述,但是有一点值得提一下。
- 问题:这个问题是我在安装Ubuntu之后才发现的,即使已经完成了虚拟机增强,虚拟机还是反应慢卡的很。第一次新建虚拟机的时候考虑到宿主机只有8个G的内存就给虚拟机设置了2个G的内存。
- 办法:新建虚拟机的时候设置虚拟机的内存至少是4个G。
- 建议:其实发现设置有问题时不需要删除原来的虚拟机再新建虚拟机,可以在虚拟机设置里面修改配置。
虚拟机建好后就要给虚拟机装系统了,按照教程继续走。从官网上下载Ubuntu,下载得到一个压缩包,不需要解压。Ubuntu作为一个Linux的发行版,有图形操作界面对我这样的新手来说还是比较方便的。然后是启动虚拟机,安装Ubuntu。
- 问题:启动虚拟机失败。提示:不能为虚拟机打开一个新任务。
- 办法:安装4.3.12或者更早版本的VB。
- 建议:百度上解决这个问题的办法多的不胜枚举,除了常见的重装时关闭杀毒软件,兼容模式打开,还有删除注册表等等,都试过了没什么用,最后还是找个老版本的VB安好解决问题。
安装Ubuntu的过程没什么好说的,教程写的已经非常详细了,安装时耐心等待就好。至于后面的虚拟机增强,也是照着教程做就好。
三.对Ubuntu进行系统升级和安装配置git。
在阅读娄老师的2016-2017-2 《Java程序设计》教学进程时我看到课程基础要求使用开源中国托管代码就简单学习了一下怎么安装使用git。
Git 是用于 Linux内核开发的版本控制工具。它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。——《百度百科》
我对git的直观的理解就是一种可以把电脑里的代码发布(push)到网上的软件。说实话我没怎么看懂娄老师的关于代码托管的博客教程,也许是知识储备不够的原因吧。后来向学姐请教,学姐推荐我去看看卢肖明学长关于在Ubuntu上的安装使用git的博客:Ubuntu下git的安装与使用这篇博客写的非常详细。对比一下在windows系统上使用git,在linux上发布代码要简单一些。
安装、配置、生成SSH公钥都很顺利,但是我打算要把公钥复制到开源中国时遇到了问题。我到问题小组提问没有人回答,那就查百度解决。
- 问题:虚拟机没有联网。
- 办法:关闭虚拟机后右键配置,网络连接设置设置为桥接模式。
检查连接畅通,就可以发布代码到项目了。
四.在实验楼学习Linux 基础入门(新版)
第一节、第二节
-
关于Shell:通常在我们使用 Linux 时,我们并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的。Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 command(命令行)和后来的 cmd.exe。普通意义上的 Shell 就是可以接受用户输入命令的程序。
-
关于Terminal:在图形界面下为了实现让我们在一个窗口中完成接受用户输入和显示输出,Linux 系统提供了一个叫做终端模拟器的程序(Terminal)。
-
关于tab键:使用Tab键来进行命令补全,最大的好处就是当你忘记某个命令的全称时你可以只输入它的开头的一部分然后按下Tab键就可以得到提示或者帮助完成。当然不止补全命令,补全目录,补全命令参数都是没问题的。
-
关于ctrl+c:想要立即停止并恢复到可控的状态,可以使用Ctrl+c键来强行终止当前程序(并不会使终端退出)。虽然这个按着很方便,但不要随便按,因为有时候当终端没有任何反应或提示,也不能接受你的输入,可能只是运行的程序需要耐心的等一下,不要急着Ctrl+c。
其他常见快捷键:
-
Ctrl+d 键盘输入结束或退出终端
-
Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
-
Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
-
Ctrl+a 将光标移至输入行头,相当于Home键
-
Ctrl+e 将光标移至输入行末,相当于End键
-
Ctrl+k 删除从光标所在位置到行末
-
Alt+Backspace 向前删除一个单词
-
Shift+PgUp 将终端显示向上滚动
-
Shift+PgDn 将终端显示向下滚动
-
关于历史输入命令:键盘上的方向上键,恢复之前输入过的命令。
-
关于通配符:主要有星号(*):匹配 0 或多个字符和问号(?):匹配任意一个字符。通配符用来对字符串进行模糊匹配(比如文件名,参数名)。当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。当 Shell 在“参数值”中遇到了通配符时,Shell 会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后由命令进行处理。
-
关于一次性创建多个文件:在创建文件的时候,如果需要一次性创建多个文件,可以直接输入:
$ touch 文件名{1..10}
- 关于获得某个命令的说明和使用方式的详细介绍:
$ man 命令的名字
一般包括以下部分内容:NAME(名称)、SYNOPSIS(概要)、DESCRIPTION(说明)、EXAMPLES(示例)、SEE ALSO(参见)
第三节
- who am i 查看当前伪终端的用户的用户名
pts/0 中 pts 表示伪终端。伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端, pts/0 后面那个数字就表示打开的伪终端序号,后面则表示当前伪终端的启动时间。
- whoami 查看当前登录用户的用户名
- who -a 打印能打印的全部
- who -d 打印死掉的进程
- who -m 同am i,mom likes
- who -q 打印当前登录用户数及用户名
- who -u 打印当前登录用户登录信息
- who -r 打印运行等级
关于创建用户
- 创建用户需要 root 权限,要用到 sudo 这个命令。
使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。 - 添加账户
$ sudo adduser 用户名
- 切换登录用户
注意:Linux 下密码输入是不显示任何内容的。
退出当前用户跟退出终端一样可以使用 exit 命令或者使用快捷键 Ctrl+d。
$ su -l 用户名
关于用户组
- 在 Linux 里面如何知道自己属于哪些用户组?
使用groups命令:
$ groups 用户名
其中冒号之前表示用户,后面表示该用户所属的用户组。这里可以看到 shiyanlou 用户属于 shiyanlou 用户组,每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组。
- 将其它用户加入 sudo 用户组
用在sudo用户组的用户执行 sudo 命令将用户添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限
$ su 在sudo用户组的用户名
$ groups 需要添加到sudo用户组的用户名
$ sudo usermod -G sudo 需要添加到sudo用户组的用户名
$ groups 需要添加到sudo用户组的用户名
- 删除用户
$ sudo deluser 需要删除的用户名 --remove-home
关于查看文件权限
- 用 ls 命令来列出并显示当前目录下的文件,当然这是在不带任何参数的情况下
$ ls -l
关于变更文件所有者
关于修改文件权限
每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)就对应这一个 "rwx",也就是一个 '7' ,所以如果我要将文件“iphone6”的权限改为只有我自己可以用那么就这样:
$ chmod 700 iphone6
第四节
关于Linux 目录结构
-
FHS 标准
FHS(文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范:
第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。 -
目录路径
-
路径
使用 cd 命令可以切换目录。在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录,- 表示上一次所在目录,~ 通常表示当前用户的"home"目录。使用 pwd 命令可以获取当前所在路径。
cd (想要切换到的目录)
-
绝对路径
关于绝对路径,简单地说就是以根"/"目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。 -
相对路径
相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点。比如假设我当前在 /usr/local/bin 目录,我想进入上一级的 local 目录:cd .. cd /usr/local
如果要进入的是 usr 目录:
cd /usr cd ../.. ```
关于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
- 复制目录:要成功复制目录需要加上-r或者-R参数,表示递归复制,就是说有点“株连九族”的意思:
$ cp -r father family
- 删除文件:使用rm(remove files or directories)命令,删除一个文件或目录:(可以使用-f参数强制删除)
$ rm test
$ rm -f test
- 删除目录:跟复制目录一样,要删除一个目录,也需要加上-r或-R参数:
$ rm -r family
- 移动文件:使用mv(move or rename files)命令,移动文件(剪切)。将文件"file1"移动到"Documents"目录mv 源目录文件 目的目录:
$ mkdir Documents
$ mv file1 Documents
- 重命名文件:将文件"file1"重命名为"myfile" mv 旧的文件名 新的文件名:
$ mv file1 myfile
- 使用cat命令查看文件:如我们要查看之前从"/etc"目录下拷贝来的passwd文件:(可以加上-n参数显示行号)
$ cat -n passwd
- 使用more工具打开passwd文件:打开后默认只显示一屏内容,终端底部显示当前阅读的进度(百分比)。可以使用Enter键向下滚动一行,使用Space键向下滚动一屏,按下h显示帮助,q退出。
$ more passwd
- 查看文件类型:使用file命令可以查看文件的类型:
$ file 文件名
- vim 编辑器的使用
- 值得注意的问题
如果处于一个目录下或者其子目录下是不能删除当前子目录的
想要查找某个文件时需要处于文件所处目录下才能查找到
第五节
关于环境变量
- 使用declare命令创建一个变量名为 tmp 的变量:
$ declare tmp
- 使用=号赋值运算符为变量 tmp 赋值为 shiyanlou:
$ tmp=shiyanlou
- 读取变量的值,使用echo命令和$符号($符号用于表示引用一个变量的值):
$ echo $tmp
- 环境变量:可以简单的理解成在当前进程的子进程是否有效,有效则为环境变量,否则不是(有些人也将所有变量统称为环境变量,只是以全局环境变量和局部环境变量进行区分,我们只要理解它们的实质区别即可)。
- 变量修改:
${变量名#匹配字串}
从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串}
从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串}
从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串}
从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串}
将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串
- 变量删除:可以使用unset命令删除一个环境变量:
$ unset temp
关于搜索文件
- whereis简单快速
$whereis who
- locate快而全
$ locate /etc/sh
- which小而精
$ which man
- find精而细:在指定目录下搜索指定文件名的文件
$ find /etc/ -name interfaces
第六节
关于文件打包和解压缩
- 常见常用的压缩包文件格式
- zip压缩打包程序:命令将 shiyanlou 的 home 目录打包成一个文件,并查看了打包后文件的大小和类型。第一行命令中,-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用du命令查看打包后文件的大小
$ zip -r -q -o shiyanlou.zip /home/shiyanlou
$ du -h shiyanlou.zip
$ file shiyanlou.zip
- 设置压缩级别为9和1(9最大,1最小),重新打包:这里添加了一个参数用于设置压缩级别-[1-9],1表示最快压缩但体积大,9表示体积最小但耗时最久。最后那个-x是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用。
$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou -x ~/*.zip
$ zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou -x ~/*.zip
- 创建加密zip包:使用-e参数可以创建加密压缩包:
$ zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou
- 使用unzip命令解压缩zip文件,将shiyanlou.zip解压到当前目录:(安静模式)
$ unzip shiyanlou.zip
$ unzip -q shiyanlou.zip -d ziptest
- rar打包压缩命令
- 安装rar和unrar工具:
$ sudo apt-get update
$ sudo apt-get install rar unrar
- 从指定文件或目录创建压缩包或添加文件到压缩包:
$ rm *.zip
$ rar a shiyanlou.rar .
- 从指定压缩包文件中删除某个文件:
$ rar d shiyanlou.rar .zshrc
- 查看不解压文件:
$ rar l shiyanlou.rar
- 使用unrar解压rar文件:
$ unrar x shiyanlou.rar //全路径解压
$ mkdir tmp //去掉路径解压
$ unrar e shiyanlou.rar tmp/
- tar打包工具
- 创建一个 tar 包:-c表示创建一个 tar 包文件,-f用于指定创建的文件名,注意文件名必须紧跟在-f参数之后,比如不能写成tar -fc shiyanlou.tar,可以写成tar -f shiyanlou.tar -c ~。你还可以加上-v参数以可视的的方式输出打包的文件。上面会自动去掉表示绝对路径的/,你也可以使用-P保留绝对路径符。
```
$ tar -cf shiyanlou.tar ~
```
![](http://images2015.cnblogs.com/blog/1073846/201702/1073846-20170216115310738-2090969905.png)
- 解包一个文件(-x参数)到指定路径的已存在目录(-C参数):
$ mkdir tardir
$ tar -xf shiyanlou.tar -C tardir
- 只查看不解包文件-t参数:
$ tar -tf shiyanlou.tar
- 保留文件属性和跟随链接(符号链接或软链接),有时候我们使用tar备份文件当你在其他主机还原时希望保留文件的属性(-p参数)和备份链接指向的源文件而不是链接本身(-h参数):
$ tar -cphf etc.tar /etc
- 对于创建不同的压缩格式的文件,对于tar来说是相当简单的,需要的只是换一个参数,这里我们就以使用gzip工具创建*.tar.gz文件为例来说明。
我们只需要在创建 tar 文件的基础上添加-z参数,使用gzip来压缩文件。解压*.tar.gz文件:
```
$ tar -czf shiyanlou.tar.gz ~
$ tar -xzf shiyanlou.tar.gz
```
###第七节
关于简单文件系统操作
- 查看磁盘和目录的容量:使用 df 命令查看磁盘的容量
$ df
$ df -h
- 使用 du 命令查看目录的容量
$ du
$ du -h
$ du -h -d 0 ~ //只查看1级目录的信息
$ du -h -d 1 ~ //查看2级
关于简单的磁盘管理
- 创建虚拟磁盘:用dd命令从标准输入读入用户输入到标准输出或者一个文件:
$ dd of=test bs=10 count=1 //输出到文件
$ dd if=/dev/stdin of=/dev/stdout bs=10 count=1 //输出到标准输出
- 将输出的英文字符转换为大写再写入文件:
$ dd if=/dev/stdin of=test bs=10 count=1 conv=ucase
- 使用 dd 命令创建虚拟镜像文件:从/dev/zero设备创建一个容量为 256M 的空文件:
$ dd if=/dev/zero of=virtual.img bs=1M count=256
$ du -h virtual.img
- 使用 mkfs 命令格式化磁盘:使用下面的命令来将我们的虚拟磁盘镜像格式化为ext4文件系统:
$ sudo mkfs.ext4 virtual.img
- 使用 mount 命令挂载磁盘到目录树
- 先来使用mount来查看下主机已经挂载的文件系统:
```
$ sudo mount
```
- mount命令的一般格式如下:
```
mount [options] [source] [directory]
```
- 一些常用操作:
```
mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]
```
- 使用 fdisk 为磁盘分区
$ sudo fdisk -l
- 进入磁盘分区模式
$ sudo fdisk virtual.img
###第八节
关于内建命令与外部命令
- 内建命令与外部命令
![](http://images2015.cnblogs.com/blog/1073846/201702/1073846-20170216122131629-1245108231.png)
- 使用type 命令来区分命令是内建的还是外部的
type (命令的名字)
xxx is a shell builtin //如果结果是这样那么这是内建命令
xxx is /usr/sbin/xxx //如果结果是这样那么这是外建命令
关于帮助命令的使用
- help 命令:zsh 中内置并没有 help 命令,我们可以进入 bash 中,在 bash 中内置有该命令
bash
help ls //用于内建命令
ls --help //用于外建命令
- man 命令:没有内建与外部命令的区分
man ls
- info 命令:info 来自自由软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息
info ls