前言
上一篇文章(醉卧沙场:进入Linux世界大门的第一步——安装系统),我们让一个从没有用过Linux系统的人安装了系统。那么现在你应该已经boot成功,进入了你的Linux系统。相信很多初次使用Linux的用户,最关心的就是怎么在Linux上编程。可能你是刚刚学C语言的小伙伴,也可能是一个有经验的Windows Visual Studio使用者。不过你是什么,来到一个新世界的第一件事让我们从"Hello World"开始。
本文将:
- 讲述基本终端操作,抛砖引玉,为进一步学习做铺垫。
- 讲述如何简单的使用编辑器(编辑、保存、退出)。
- 讲述如何编译执行一个简单的程序。
以下极其简单,仅适用于第一次打开Linux系统后不知所措的人。
打开终端
Linux系统启动后,第一次登录可能会经过一系列初始化设置(选择语言、输入法等),然后展现在你眼前的是一个全新界面:
由于我们上一篇文章是以Fedora为例子讲的,那么下面我们继续以此为源,继续讲。我这里是一个Gnome的桌面(其实我喜欢KDE),你也可能面对的是不同的桌面环境,不过这并不重要。我们首先要做的第一步就是找到一个虚拟终端并打开它。针对我当前的环境,我只需要点击左上角“活动”然后在搜索栏里搜索“term"(不用打全了就能找到):
我们把它拖拽到收藏栏里,以便下次方便直接打开(对于基本的桌面操作,虽然是不同的桌面环境,但是“桌面”的操作都是差不多的,和你在Windows里玩的大同小异。请不要拘泥于形式,要举一反三)。打开终端:
这就是一个虚拟终端。请区别于Windows的命令行,这个比命令行要强大的多,这是从计算机操作系统上古时期Unix诞生的时代,就一直迭代至今的产物,其背后的众多强大工具都遵从Unix思想而设计。初学者尚不能理解其精髓,不过没关系,日后可以慢慢在使用中理解。
我们现在打开了一个虚拟终端,当然你也可以根据自己的喜好安装其它虚拟终端软件。当前的默认的解释器是bash,以后我们的所有操作基本上都在终端上完成,之所以装桌面环境而不用纯终端的原因只是为了:
- 方便多窗口。
- 方便使用浏览器。
- 方便打开pdf等格式文档、图片等。
- 其它你个人需要桌面环境来做的事情。
总之桌面对于个人办公而言是有绝对优势的。
基本介绍和基本操作
Linux系统的路经和Windows的看起来不一样。Windows的路经起点是不同的盘符,而Linux的起点是根,即一个斜杠“/”。这个斜杠就是Linux的第一层目录。然后后面每一层目录用一个斜杠分开。
Linux系统的路径写法有两种,一种是相对路径一种是绝对路径。
- 绝对路径都是以“/”开头的,比如/usr/bin/vi或者/home/test/,代表从根目录"/"开始计算的绝对路径。
- 相对路径都是不以“/”开头的,不如git/linux/或者work/jobs/test.xml,代表从当前所在目录开始计算的相对路径,如果想知道你现在所在的目录是什么可以借助pwd命令查看。
用户刚刚登陆进来后默认是处在当前用户的家目录的,/home目录下一般存放所有普通用户的家目录(并不是所有的用户都有家目录,也不是限定家目录一定要在/home下)。比如我们在安装系统是创建了一个叫test的用户,那么就会存在一个/home/test/的目录,/home/test目录作为test这个用户的家目录,每次登陆test用户就会默认从这个目录开始:
Linux最最常用的两个命令:cd和ls。
ls的意思是list directory contents。用法是:
ls [option].... [file]...
在Linux的文档中中括号代表可选项,没有也可以执行,尖括号代表必选项。命令和后面的选项/参数之间都要有至少一个空格隔开。所以ls命令可以这样用:
- 1、直接执行"ls",代表查看当前所在目录的内容。如:
- 2、查看某个目录下的内容则在ls后面跟上路径名,路径名可以是绝对路径以可以是相对路径,如:
- 3、想看更详细一点的信息则可以用"-l"(注意是小写的L前面有个减号),linux系统下命令的选项一般都有减号跟着。如下图,可以看到除了内容名字外还有访问权限,属主属组,修改日期等信息。以"d"开头的代表是目录,以"-"开头的代表是普通文件。Linux下有几大文件类型,普通文件和目录是其中最常见的两种,其它的请自行去了解。
ls命令还有很多用法,比如-d选项,还有很多别的。具体请运行“man ls”查看,退出查看可按q键。
cd是一个内建命令,它不是一个单独的可执行文件,它是命令行解释器自带的。cd的用法很简单,就是cd后面接路径名,可以是绝对路径也可以是相对路径,代表进入这个路径。进入某个路径其实就是把这个路径作为当前所在路径,也就是相对路径的起点变了。
关于路径还有两个要说的地方,那就是"."和".."。“.”代表当前路径,".."代表当前路径的上一级目录的路径。比如执行“cd ..”就是退到上一级目录,如果是"cd ../.."就是当前路径退两级。"ls ../test"就是查看上一级目录的test的内容。
cd和ls不是任何路径都能进入和查看的,会有访问控制的限制。这个以后再说。
还有几个常用的,touch可用于创建一个普通文件,mkdir可用于创建目录,less可以以只读方式打开一个文件。具体的可参考相应的man文档。
本文并没有太多篇幅来介绍所有基本命令,欲进一步学习,可以此为基础书籍和文档。
编辑器
Linux下有很多编辑器,常用的两个是vi和emacs。不要小看这两大编辑器,它们的功能远远比你一般理解上的编辑器强太多太多倍了。不过本文仅仅讲如何简单使用它们编写代码、修改代码并保存。想了解更多配置和使用这两个编辑器的知识,可自行查阅书籍和网上的公开资料。
vi是Unix的传统编辑器,现在传承到了Linux下。常听到的vim可以理解为vi的升级版,一般你装了vim,那么你执行vi的时候实际上就是执行了vim。
第一步:安装
如果你当前是一个管理员用户(有sudo的权限),那么在终端上执行:
如果网络良好,软件源配置正确,yum会帮你计算安装包依赖然后给你一个需要安装的包列表,你只需要输入“y”回车就行了。如果一切顺利vim就已经安装到系统中了。
如果你当前不是一个管理员用户,你需要先切换到root用户,执行
输入root密码,成功后你就变成root用户了。再执行"yum install vim"即可。安装后按"Ctrl + D"退出root用户,返回到之前的普通用户。
第二步:编辑
在终端执行:
就会进入vi的界面,开始编辑hello-vi-world.c这个文件:
现在还不能编辑,要想进入编辑模式需要按"i"键,按下之后进入插入内容的模式,会看到最下方出现“插入”或"INSERT"的字样:
然后就可以开始编辑了,怎打字就不用多说了吧,比如写一个最简单的C程序:
现在还内容还没有被写到文件里,如果想要保存则按照如下步骤进行:
1、按Esc键退出编辑模式。
2、输入一个":"冒号键,在左下角出现一个冒号。
3、输入一个"w"键,然后回车。你会看到下方提示已经written,说明保存成功了,这个文件也被自动创建。
如果要退出vi编辑器则把第三步的w换成q回车就退出了。
如果第三步想要保存并且退出,冒号后面写"wq"回车就行了,代表保存然后退出。或者直接写"x"回车也代表保存退出。
emacs是另一款常用的编辑器,安装emacs编辑器可以执行:
参考上面安装vim的过程。emacs编辑器是由开源软件的精神领袖Richard Stallman编写的,功能也非常强大。
安装成功后,在终端输入
结尾的“&”并不重要,仅仅是让这个进程不占用终端的前端而已,可以不写。
然后你就会看到emacs启动后的界面:
看到上下两部分,上部分是编辑的地方,下面是一个欢迎界面(可以通过配置默认去掉它)。可以把光标放到上半部分,然后按Ctrl+x,然后松手后再敲击“1”,这样就保留当前光标所在的编辑缓冲区关闭其它的了(注意Ctrl+x是一个常用的前缀组合键)。
现在开始编辑,编辑一个简单的C程序,如下:
现在内容还是在缓冲区中,如果要保存可以使用组合键Ctrl+x然后再输入Ctrl+s(按住Ctrl,依次连续输入x和s即可),保存当前文件。
如果要退出则按:Ctrl+x然后再按Ctrl+c(按住Ctrl,依次连续输入x和c即可)。这样就退出emacs了。
编译执行
Linux下的常用编译器就是gcc系列,C++的是g++。如果你还没安装gcc则需要安装:
安装完后我们尝试对上面两个程序分别进行编译,如果要将hello-vi-world.c编译成可执行二进制文件,则执行:
gcc -o hello-vi-world hello-vi-world.c -Wall
如果没有语法错误就编译好了,我们用ls看一下:
看到一个带"x"权限(可执行权限)的绿色文件(不一定会显示颜色)。下面尝试执行一下试试,执行谁只要在终端上输入要执行的文件的路径名即可,比如输入./hello-vi-world(注意前面一个点),代表执行当前路径下的hello-vi-world文件:
注意这里没有"./"是不行的,点"."代表当前路经,./hello-vi-world代表当前路经下的hello-vi-world文件,如果直接写hello-vi-world,则终端会尝试从默认的一些路经(如/bin, /usr/bin)下查找有没有这个可执行文件,一般情况下找不到当前路经。
现在可以自己尝试编译并执行hello-em-world.c
……
……
……
gcc其实有很多很多功能,比如要想预编译hello-em-world.c文件可以执行
gcc -E -o hello-em-world.i hello-em-world.c
执行成功后就会出现一个hello-em-world.i的文件,可以用less,vi或emacs查看一下它的内容,就是经过预编译后的内容。
如果要进行编译,这里说的编译是纯粹的编译,就是把c代码编译成汇编代码,则可以执行:
gcc -S -o hello-em-world.s hello-em-world.i
把.i文件写为hello-em-world.c也行,就是跳过手动预编译直接完成预编译和编译两个过程。这时会得到一个hello-em-world.s文件,打开看一下,里面是编译好的使用于当前体系结构的汇编代码。
把汇编代码进行汇编可以执行:
gcc -c -o hello-em-world.o hello-em-world.s
把.s文件换成.c也行,就是自动完成预编译、编译和汇编三个过程。现在得到一个hello-em-world.o文件,这一个二进制文件,但不是最后的可执行二进制文件,因为它还缺少最后一步连接处理。
最后对.o文件进行连接,我们这里就一个.o文件所以简单,经常是需要有多个.o文件需要连接。连接执行:
gcc -o hello-em-world hello-em-world.o
如果把最后的.o文件写成.c,那就和最开始我们用hello-vi-world.c编译时示范的那样了。实际上那样是完成了预编译、编译、汇编和连接一连串的过程。
好了,现在执行一个最后的编译结果吧。
gcc可以支持很多平台,刚才示范的是通用PC下的gcc编译,你还可以交叉编译,使用gcc针对ARM或者AVR或者其它平台的版本。这个就自己去研究吧。
想了解更多gcc的只是可以到GNU的网站上去看看其文档。顺带提一下gdb是常用的调式软件,如何使用gdb调式gcc编译出来的程序请自行学习。
结语
本文就到此为止,全在抛砖引玉。想学习就自己去深入了解吧,编辑器不用两个都很熟,选择其中一个用熟了就行了。建议从终端命令的使用开始学习,将Linux的使用方式融会贯通。