UNIX是一套计算机操作系统应遵循的特定规范(定义了所有必需的操作系统函数的名称、接口和行为),完全符合该规范的操作系统才允许使用“UNIX”的商标,否则就是“类UNIX操作系统”。
许多类UNIX系统都是商业性质的,如IBM的AIX,HP的HP-UX和Sun的Solaris;也有一些免费的,如FreeBSD和Linux。
Linux是一个可以自由发布的类UNIX内核实现。发展之路:UNIX—>Minix—>Linux。
Linux程序:
Linux应用程序有两种:可执行文件和脚本文件。可执行文件是计算机可以直接运行的程序,相当于Windows中的.exe文件;脚本文件是一组指令的集合,这些指令将由另一个程序(解释器)来执行。Linux并不要求可执行文件或脚本文件具有特殊的文件名或扩展名,文件系统属性将指明一个文件是否为可执行程序。
shell程序(如bash)的原理是:在一组指定的目录路径下(存储于环境变量PATH),按照你给出的程序名搜索与之同名的文件。
为了能够正常执行当前目录中的程序,而不会误执行PATH中某个目录下的同名程序,通常在shell中使用“./程序名”的方式。如果忘记使用-o name搞熟编译器可执行程序的名字,编译器会自动把程序编译为a.out。
对Linux开发人员来说,了解软件工具和开发资源在系统中存放的位置很重要:
1.应用程序:/usr/bin,/usr/local/bin,/opt
2.头文件(提供对常量的定义和对系统函数及库函数调用的声明):/usr/include
3.库文件。库是一组预先编译好的函数的集合,标准系统库文件一般存储在/lib和/usr/lib中。默认情况下,链接器只搜索标准C语言库。若仅把自定义库文件放在标准目录中就希望链接器能够找到它是不够的,库文件必须遵循特定的命名规范并且需要在命令行中明确指定。库文件的名字总是以lib开头,随后的部分指明这是什么库,最后以.a(静态库)或.so(共享库)结尾。
只有编译器和链接器将程序代码和函数库结合在一起才能生成单独的可执行文件,使用gcc编译器时必须用 –l 选项指明除标准C语言运行库外还需要什么库。
获得帮助:man命令,info命令。
UNIX和Linux中的系统调用<---->Windows API,同时二者都可以使用标准I/O库(stdio)。