我已经学习了标准的C和C++语言,但是我不知道如何使用系统调用以及如何编写进程等程序。因此,我想学习在Unix/Linux环境下的编程。那么,接下来应该怎么做呢?我应该先学习shell吗?
如果你使用Unix/Linux系统,你应该至少了解一些shell脚本和其工具,只是为了知道你的启动脚本做了什么或快速移动你的系统(例如使用ls、mv、cp等)。除此之外,对于真正的编程内容,你可以使用编程语言(比如Python、Ruby)。许多现代编程语言,如Python,已经提供了系统级API。Python自带一个shell,所以如果你是一个硬核用户,你也可以将其用于日常任务。这个小例子展示了如何在Python shell中进行目录列表。
>>> import os
>>> os.chdir("/tmp")
>>> os.listdir(".")
这与在命令行中键入ls
相同。移动/复制文件怎么样?不要使用shell的mv
和cp
,
>>> import shutil
>>> shutil.copy("file","/destiation")
>>> shutil.move("file1","/destination")
在我看来,如果你计划编写系统/底层程序,那么C/C++可能是你需要的,但对于普通的系统管理或日常操作,像Python/Ruby(或Perl)这样的编程语言更适合你。
如果你要在“传统”的Unix环境中进行编程(即使用文本编辑器并从命令行执行所有操作),你需要对shell非常熟练,并且非常熟练使用你选择的编辑器(你有自由选择,但如果不是emacs,你就会进入一个糟糕的地方...)。
但是,没有必要首先“学习”shell。只需意识到shell提供了强大的工具。然后,每当你发现自己想“一定有更好的方法!”时,去学习什么是更好的方法。
我现在正在学习系统编程,教授正在向我们介绍Unix,包括系统调用和编写现有核心实用程序的简化版本。
我发现一个非常有用的资源是阅读实用程序的完整源代码和系统调用快速参考。教材是《理解UNIX/Linux编程》,我强烈推荐你去看一下。
我们还没有涉及到shell脚本编程,除了使用输入重定向、grep和管道,所以我不知道这对你目前有多大用处。