1、提纲,UNIX的发展历史 GNU组织及Linux的历史 Linux基本管理和常用命令 Linux shell编程,UNIX的历史,UNIX最早产生在美国的Bell实验室 AT&T 1969 Ken Thompson, Dennis Ritchie在AT&T写出第一个UNIX在AT&T公布了第一版的源代码后,被许多厂家和科研机构修改,各自都有自己的名字。 如:IBM 公司的AIX,HP公司的HP/UX,SUN公司的Solaris等。,POSIX标准,各种UNIX操作系统为了保持相互之间的兼容性,即保证程序的可移植性,共同遵守一个标准:POSIX标准。 POSIX标准:指的是一套基本的应用程序接口
2、,如果你写的程序遵循POSIX标准,可以运行在不同的UNIX平台上。,两大流派,但不同的操作系统为了保持各自的优势,在习惯上还是有很大区别的。 主要有两大流派: System V5 BSD(美国加州大学伯克利分校发布版) 优点:很多(略) 缺点:价格昂贵,GNU组织,1984年,由Richard Stallman组织成立了GNU组织。 GNU工程:自由软件工程项目 最终的目标是创建一个类UNIX操作系统,取代昂贵的商用UNIX操作系统。 但直到1990年,才完成了基本的用户程序,如GCC编译器,emacs编辑器等,但内核一直不能发布。 GNU组织开发软件所需要的资金全部由自由软件基金会(FSF
3、)提供。FSF由各种商业公司赞助提供资金。,GPL(General Public License),为了保证GNU的软件可以自由使用和拷贝,GNU组织制订了一个新的法律许可协议:GPL协议。 该协议的主要特点: 允许软件被自由地拷贝 允许软件被自由地修改 允许软件被修改后自由地传播,但必须提供源代码。很多软件制作者都遵循GPL协议,无数的软件开发人员和软件爱好者将自己的软件通过GPL分布,公布在互联网上,从而形成了一个庞大的GNU社区。,Linux的历史,Linux 发展的重要里程碑1990, 芬兰的大学生Linus Torvalds 首次接触 MINIX1991 中, Linus Torva
4、lds 开始在 MINIX 上编写各种驱动程序等操作系统内核组件1991 底, Linus Torvalds 公开了 Linux 内核这个LINUX内核后来加入了GNU项目,采用GPL协议发布。LINUX 内核的加入,大大加速了GNU组织的发展。,内核版本知识,内核版本号=主版本号.次版本号.修正次数 例如:2.6.5 2.7.2 次版本号为偶数为稳定版,奇数为开发版本。,GNU/Linux 的历史,有了Linux的GNU组织就完善了。 各种自由应用软件由GNU组织提供 Linus维护最新内核的开发 XFree86组织提供开放的XWindow图形应用系统,用来驱动显卡、显示器。 Knome和K
5、DE组织提供图形桌面。 无数的爱好者提供测试和技术支持。,Linux发布版本,由商业公司将LINUX内核和各种应用程序打包,编译成二进制代码,提供给用户安装。 1994, Linux 的第一个商业发行版 Slackware 问世 1996, 美国国家标准技术局的计算机系统实验室确认Linux 版本 1.2.13(由 Open Linux 公司打包)符合 POSIX 标准。 1999, Linux 的简体中文发行版相继问世。 流行的分布版本: Slackware ,Red hat ,Fedora 由自由社区维护的版本debian,Linux环境,内核,SHELL,图形用户界面,用户,硬件,内核:
6、内存、进程和设备的管理,调度和执行所有命令,容纳控制系统的驱动程序等。 SHELL层:接收用户命令并启动进程执行命令。SHELL还允许将进程放到后台运行以及运行SHELL程序。 图形用户界面:例如GNOME和KDE图形用户界面系统,Linux的基本管理和常用命令,用户管理Linux下的用户可以分为三类:超级用户、系统用户和普通用户。超级用户用户名:root, 具有一切权限。一般只有在进行系统维护(如创建用户)和其它必要的情况下才使用超级用户身份登录,以避免系统出现安全问题。系统用户:是Linux系统正常工作所必须的内建的用户,主要是满足相应的系统进程对文件属主的要求而建立的,系统用户不能用来登
7、录。普通用户:大多数用户属于此类。,用户UID,每个用户都有一个数值与之对应,称为UID。 超级用户UID:0 系统用户UID:1-499 普通用户UID:500-60000关于用户的信息,Linux放在文件/etc/passwd中 可以用cat命令查看该文件的内容。cat /etc/passwd,组的管理,Linux的组有私有组、系统组、标准组。 私有组:建立用户帐号时,若没有指定帐号所属的组,系统会建立一个组名和帐号名相同的组,称为私有组。该组只容纳一个用户。 标准组可容纳多个用户。 系统组是Linux系统正常运行所必须的,安装系统或添加新的软件包会自动建立系统组。 Linux关于组的信息
8、放在文件/etc/group中 可以用cat命令查看group文件的内容:cat /etc/group,其它命令,改变用户身份 su,练习,添加一个新组:groupadd 命令 组属性的修改:groupmod 命令 显示/etc/group文件的内容,解释每一行每一列的含义 创建新的用户 useradd 修改用户密码passwd 修改用户的shell设置 改变用户的属性 usermod 显示/etc/passwd文件,解释每一行每一列的含义 注:这些命令都可以通过查看联机帮助学习 man 命令,实验要求,自己设计实验用例,将以上命令掌握,并完成实验报告。,文件系统的安全和存取权限,Ls l命令
9、显示的文件列表中 -rw-rr 如何改变文件的存取权限? 改变文件存取权限的用户只能是root用户或文件主用户 命令:chmod who operator pemission filename(符号模式)或chmod mode filename(绝对模式) who (u ,g, o,a) Operator(+,-,=) Pemission(r,w,x,s,t) 例如:chmod u=rwx,g+w,o+r myfile Chmod u+s,g+x,o+x myfile 组用户和其它用户执行这个文件myfile时,在运行中具有用户主权限。,改变文件所属用户和组,chown:改变文件或目录的拥有者
10、或所属组 例如: chown root testdir,将testdir 的拥有者改为root用户chgrp -R group filename改变文件或目录的所属组 chgrp root testdir,将testdir 的所属组改为root组,改变文件缺省权限,当文件新创建时,有一个缺省的权限,如何改变缺省权限? umask 直接运行umask命令,得到当前缺省的权限,例如022 有一张表,可以查umask的值和文件和目录的对应权限。 改变默认权限:例如umask 000,问题,创建了一个脚本文件test.sh,但是不能运行? 为什么?怎么处理? test.sh的内容 #!/bin/bas
11、h printchar=“hello world” echo $printchar 运行该脚本文件 ./test.sh 显示无法运行,why?,关于文件和目录的命令,文件的复制、删除和移动cp(复制),rm(文件和目录的删除),mv(文件和目录的移动)目录的浏览、创建与删除ls,cd,pwdmkdir,rmdir定义命令别名alias 例如:alias ll=ls lllunalias ll,实验要求,自己设计实验用例,掌握有关文件和目录的基本命令,文件的打包和压缩,从internet上下载文件时,很多文件都是打包或压缩文件,例如:wb.txt.gz, longkey.tar.gz 相关命令:
12、zip ,gzip, tar 上网找一些打包压缩文件,试着用tar解压释放。 将自己的若干文件打包压缩成tar.gz文件。,举例,把/home/longkey目录下的所有文件和子目录备份到longkey.tar文件中。tar cvf longkey.tar /home/longkey从longkey.tar文档中恢复数据,放在当前目录下。tar xzf longkey.tar.gz 把/home/longkey目录下的所有文件和子目录以gzip压缩文件的形式备份到longkey.tar.gz文件中。tar czvf longkey.tar.gz /home/longkey 从longkey.t
13、ar.gz文档中恢复数据,放在当前目录下。tar xzf longkey.tar.gz 注意:在释放文件时,若要指定目录,可加-C 目录名选项,Linux常用命令,cat命令 用来将文本文件的内容显示在屏幕上。 如:cat /etc/passwd 在linux系统中,执行一个终端命令行时,通常会自动打开三个文件:标准输入文件(stdin,通常对应键盘)、标准输出文件(stdout)和标准错误输出文件(stderr),后两个文件通常对应屏幕。 cat命令通常会从命令行给定的文件中读取内容显示在屏幕上,但当命令行没有给出文件时,它将从标准输入文件,即键盘输入中读取信息显示在屏幕上。 如:cat,输
14、入输出重定向和管道,输入重定向:就是把命令的标准输入重新定向为指定的文件。 例如wc 命令统计指定文件包含的行数、单词数和字符数。wc /etc/passwd 若仅在命令行上键入 wc,wc将等待用户输入信息,且键盘输入的信息出现在屏幕上,直到用户按下ctrl+d,wc才将统计结果显示在屏幕上。 另一种将指定文件传给wc的方式是使用重定向。 如wc /etc/passwd 由于大多数命令都以参数的形式在命令行上指定输入文件的文件名,所以输入重定向并不经常使用。 但要使用一个不接收文件名作输入参数的命令,而需要的输入内容又存在于一个文件中,这时就可以使用输入重定向。,输出重定向:就是把命令的标准
15、输出重新定向到指定的文件中。 例如 ls d.out或ls d.out 管道 |:将一个程序或命令的输出作为另一个程序或命令的输入。 例如:cat sample.txt|grep “High”|wc l 管道将cat的输出送给grep命令,该命令在输入中查找包含单词“High”的行,这个输出又送给WC命令,该命令统计输入中的行数。,Linux 文件系统,文件类型 文本文件 数据文件 源程序文件 可执行文件 Shell程序文件 设备文件 链接文件:指向文件存储位置的指针file 文件名:该命令可列出指定文件的文件类型,ls l 命令可以长格式列出文件列表,用不同的字符表示不同的文件类型。 -:表
16、示常规文件 d:表示目录 b:表示块特殊设备 p:表示有名管道 s:表示信号灯 m:表示共享存储器,Linux文件系统布局,统一的多级目录结构,Vi 编辑器,是unix系统一种功能强大、界面友好的编辑器。 Vi的两种工作模式:编辑模式和指令模式,两种模式可相互切换 指令模式:运行vi后,首先进入指令模式,用来编辑、存盘和退出文件的模式,按下insert键可切换到编辑模式 编辑模式:用来输入和编辑文本的模式,按下Esc键可切换到指令模式。 状态行:屏幕底部一行,用来反馈编辑操作结果。,退出vi 在指令模式下键入:wq 保存并退出:q! 不保存退出,环境变量,命令env:查看系统的环境变量设置 查
17、看某个指定的环境变量的值 echo $环境变量名 如:echo $PATH或echo $HOME 改变环境变量的值 export 环境变量名=value 例如:export PATH=“$PATH:/home/dyb:.”,Linux常用命令,编程工具gcc,gdb 例如:将test.c文件编译成可执行文件test gcc o test test.c 运行可执行文件test ./test,Linux shell编程,Shell是什么 Shell本身是一个程序,而不是内核的一部分 Shell是一种特殊的命令解释器,还是一种编程语言 常见shell bsh, csh, bash,Linux shell编程,Shell脚本类似dos批处理文件,但是功能强大的多。可以有变量,可以有条件语句,循环语句等。,Linux shell编程,简单例子: If test $1 Then Cal $1 Else Echo error fi #end,