虽然学习使用 Docker 的读者应该都具备了这些基础知识,但是为了教程的完整性,我还是希望添加这部分内容。如果你熟悉这些命令,可以跳过本文阅读后面的内容。如果你真的是小白,那么这就是为你准备的!
如果你是 Linux 新手,我推荐先使用 Linux 虚拟机来熟悉 Linux 系统。
使用 VMware 安装 Ubuntu 系统的教程参考这里,或者你也可以自行搜索安装步骤。
如果你只是为了学习 Docker,不想在自己的电脑上安装虚拟机或者双系统,可以先跳过本文,待后面用到相关指令的时候再来查询。
安装好之后打开虚拟机,使用“Alt+Ctrl+T”按键打开终端模拟器。
打开终端后,提示符形式如下:
zsc@Berry:~$
其中 zsc 是用户名,Berry 是主机名,~代表用户 home 目录,含义是“/home/zsc/”,表示我们现在在此目录下工作。
ls 的作用是列出当前目录下的文件。在终端模拟器输入 ls,会得到如下输出(你得到的结果和我的结果会有所不同):
zsc@Berry:~$ ls
berry.pem Music tensorflow workspace
ls 命令有好多参数,常用的参数是 -a(同时列出隐含文件),-l(输出一个比较完整的格式,除每个文件名外,增加显示文件类型、权限、硬链接数、所有者名、组名、大小(byte)、及时间信息)。
zsc@Berry:~$ ls -a . .gnupg .python_history .. .graphlab .remarkable .adobe .gvfs .ros .android .ICEauthority s3637077
zsc@Berry:~$ ls -l total 72 -r-------- 1 zsc zsc 1692 Mar 1 20:29 berry.pem -rw-rw-r-- 1 zsc zsc 1692 Mar 8 19:52 berry_s3637077.pem drwxr-xr-x 2 zsc zsc 4096 Jun 7 18:00 Desktop drwxr-xr-x 9 zsc zsc 4096 May 19 10:34 Documents drwxr-xr-x 12 zsc zsc 4096 Jun 24 13:27 Downloads drwx------ 8 zsc zsc 4096 Jun 21 23:00 我的坚果云
例子:mkdir test 命令会在当前目录下建立一个名为“test”的新目录。
例子:在 test 目录下创建 readme.txt文件:
zsc@Berry:~$ touch test/readme.txt
例子:由之前的 ls 命令的输出,可以看到我的目录下有 workspace 这个目录,执行“cd workspace”可以切换到这个目录:
zsc@Berry:~$ cd workspace/ zsc@Berry:~/workspace$
你会发现切换目录后提示符已经变成了“~/workspace”而不是原来的“~”。
例子:由于之前执行了“cd workspace”命令,因此现在我们处在 workspace 目录下。
zsc@Berry:~/workspace$ pwd /home/zsc/workspace
格式:mv source destination
比如我想把当前目录 /home/zsc 下的 s3637077 文件移动到 workspace 目录下:
zsc@Berry:~$ mv s3637077 workspace/
mv 命令除了可以移动文件还可以给文件重命名,比如我想把 s3637077 文件重命名为 test:
zsc@Berry:~$ mv s3637077 test
格式:cp source destination
例子:比如我想把 s3637077 复制到 workspace 文件夹下(由于之前使用过 mv 命令把 s3637077 移动到了 workspace 文件夹下,所以现在当前目录是没有 s3637077 这个文件了,为了演示命令效果,我又新建了一个 s3637077 同名文件,这用到了“touch s3637077”命令):
zsc@Berry:~$ cp -i s3637077 workspace/ cp: overwrite 'workspace/s3637077'?
注意,这里的 -i 参数表示在执行命令的时候询问是否覆盖文件(我们之前用 mv 命令已经在 workspace 目录下放置了一个同名文件,因此会提示),建议养成使用 -i 参数的好习惯(包括 mv 命令也支持 -i 参数)。输入 y 则覆盖。
同时,cp 命令支持递归复制,使用 -r 参数复制一个目录及其子目录到目标位置:
"cp -ir test/ workspace"(递归复制 test 目录到 workpace 目录下并在覆盖时提示。)
格式:rm file
例子:删除 test 目录下的 readme.txt 文件:
zsc@Berry:~$ rm -i test/reamde.txt
支持 -r 参数递归删除目录及其子目录:
zsc@Berry:~$ rm -ir test/
(注意使用 i 参数进行确认提示,因为使用 rm 命令删除后是不可恢复的,因此删除文件需要特别小心。)
Tips:对于初学者,使用命令行很容易输错命令、目录名或者文件名,实际上,在目录名和文件名很长的情况下打字错误发生的概率还是很高的。因此,Linux 为我们准备了自动补全功能,使用 Tab 键实现,比如,我们想切换到 workspace 目录,输入:
zsc@Berry:~$ cd wor
然后按下 Tab 键就会自动补全为 cd workspace/ 如果我们还有一个 workspace2 目录,那么按下两次 Tab 键后会给出可选的操作:
zsc@Berry:~$ cd workspace workspace/ workspace2/
然后我们可以继续输入想要的进入的目录。
压缩数据
Linux 有多种文件压缩工具,这听上去可能不错,但是初学者常常感觉有些混乱。下表是 Linux 常见的文件压缩工具(表格翻译自 Linux Command Line and Shell Scripting Bible, 3E, Richard Blum):
工具 | 文件扩展名 | 描述 |
---|---|---|
bzip2 | .bz2 | 采用Burrows-Wheeler块排序文本压缩算法和霍夫曼编码 |
compress | .Z | 最初的Unix压缩工具,现在已经很少使用 |
gzip | .gz | GNU压缩工具 |
zip | .zip | Windows的压缩算法的Linux实现 |
这里主要介绍一下 ZIP 工具。
zip target.zip filename
zip -r target.zip dir -r 参数表示递归压缩子目录
unzip target.zip
归档数据
压缩和解压缩并不是标准的 Linux 归档工具,目前,Linux 和 Unix 上使用最广泛的归档工具是 tar 命令。
格式:tar function [options] object1 object2
具体参数请参考命令手册(在本文最后有命令手册的使用介绍)。由于本文是补充内容,因此无法面面俱到,这里我仅仅介绍最常用的方法:
比如我们下载了一个文件叫做 test.tar。
使用命令:tar -xvf test.tar 就可以把归档文件里的内容提取到当前文件夹。其中,-x 参数表示从已有的归档文件提取文件,-v 参数表示在处理文件时显示文件,-f 表示输出结果到文件。
zsc@Berry:~$ ping www.google.com PING www.google.com (216.58.199.36) 56(84) bytes of data. 64 bytes from www.google.com (216.58.199.36): icmp_seq=1 ttl=56 time=19.8 ms 64 bytes from www.google.com (216.58.199.36): icmp_seq=2 ttl=56 time=16.9 ms 64 bytes from www.google.com (216.58.199.36): icmp_seq=3 ttl=56 time=16.5 ms 64 bytes from www.google.com (216.58.199.36): icmp_seq=4 ttl=56 time=16.8 ms 64 bytes from www.google.com (216.58.199.36): icmp_seq=5 ttl=56 time=17.9 ms ^C --- www.google.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 16.504/17.625/19.891/1.237 ms zsc@Berry:~$
zsc@Berry:~$ ifconfig
br-67f29ac07de2 Link encap:Ethernet HWaddr 02:42:a2:41:20:63
inet addr:172.18.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
docker0 Link encap:Ethernet HWaddr 02:42:5c:9b:03:82
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
enp3s0 Link encap:Ethernet HWaddr 3c:97:0e:d9:83:85
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:19
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:36995 errors:0 dropped:0 overruns:0 frame:0
TX packets:36995 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:1989010 (1.9 MB) TX bytes:1989010 (1.9 MB)
wlp2s0 Link encap:Ethernet HWaddr 40:f0:2f:43:87:dc
inet addr:192.168.1.102 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::1870:2281:a509:aea6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:50860 errors:0 dropped:0 overruns:0 frame:0
TX packets:46602 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:31656934 (31.6 MB) TX bytes:24497523 (24.4 MB)
zsc@Berry:~$
“wget url”下载文件到当前目录。
Bash Shell(Ubuntu 系统的启动 shell 默认是 Dash shell,但是交互式 shell 也就是你使用终端模拟器的时候默认是 Bash shell)。使用一个叫做环境变量的特性来存储有关 shell 会话和工作环境的信息。环境变量分为局部变量和全局变量。
本文对环境变量不做过多介绍。在后续教程用到的地方会详细说明。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install zip
sudo apt-get install unzip
或者写在一起:
sudo apt-get install zip unzip
sudo apt-get remove zip unzip
有时候安装软件会出现依赖项不满足的情况,此时使用
sudo apt-get install -f
可以修复依赖项。一般情况下此命令可以有效修复依赖性,如果不行的话,需要对照错误信息手动修复。
如果 apt-get 无法找到对应的软件,则需要下载对应的“.deb”安装包来进行安装,比如下载了“test.deb”,使用 dpkg 安装,-i 参数表示 install,-r 参数表示卸载移除。
sudo dpkg -i test.deb
Gedit 图形编辑器
Gedit 和 Windows 的记事本差不多,可以点击屏幕左上角图标,搜索 Gedit 打开,或者在终端模拟器输入 Gedit 回车打开。由于图形化的操作和 Windows 很相似,所以不再详细介绍。
vim
vi 是 Unix 系统最初的编辑器,之后 GNU 项目将 vi 移植到了开源世界,在此过程中,GNU 对最初的 vi 做了一些改进,于是就有了 vim(vi improved),vim 可能是现在最繁琐也最强大的编辑器。本节介绍一些基本用法,以便我们可以在 vim 里活下来。
首先,使用“sudo apt-get install vim”安装 vim。
安装好之后就可以使用了。当前目录有一个 test.cpp 文件,我们对这个文件使用 vim 进行编辑。
vim test.cpp
vim 有两种模式,一种是普通模式,另一种是插入模式。执行上述命令以后进入普通模式。按下字母键“i”进入插入模式,使用方向键移动光标到需要插入的位置,然后输入想要插入的内容。编辑完成后按键“Esc”退出回到普通模式。
在普通模式下输入冒号“:”,然后输入 w 回车,保存更改。接着输入“:q”退出。也可以直接输入“:wq”保存并退出(注意 w 一定要在 q 之前,先保存再退出)。
其它基本命令
查找:在普通模式下输入“/stringToFind”,回车,即可定位到第一个匹配项。接着按下字母键“n”可以查找下一个。
撤销:普通模式下输入“:u”并回车,实现撤销。
以上就是一些最基本的命令,了解了基本命令可以让我们不至于排斥这个编辑器,慢慢探索 vim 更多的功能。因为如果你使用远程服务器编辑文本的话是没有办法得到图形界面的,在这种情况下,vim 是一个很好的选择。
其它编辑器
Linux 上的编辑器有很多,无论是图形界面的还是命令行形式的,你可以找到自己喜欢的编辑器。图形界面的编辑器除了自带的 Gedit,更推荐 sublime 或者 atom,有兴趣的可以搜一下。命令行形式的编辑器还是推荐 vim。
本文仅仅是介绍了一些 Linux 的入门用法,掌握这些命令之后,Linux 新手用户基本可以在 Linux 环境下生存下来。如果想要学习更多的相关知识,比如权限管理,文件系统管理……可以买一些书或者一些网络教程,比如http://www.runoob.com/linux/linux-system-contents.html 就是一个是不错的教程。
同时,学会使用 Bash 手册也有助于你学习 Linux 命令。Bash 手册默认是英文的(即使你安装系统的时候选择中文语言),如果你阅读英文不是很流利,可以参照以下步骤把手册变为中文:
首先,下载中文包:
sudo apt-get install manpages-zh
之后,编辑 man 配置文件:
sudo vim /etc/manpath.config
将此文件里所有的 /usr/share/man 替换为 /usr/share/man/zh_CN
完成之后来看一下效果,输入“man mv”: