作者:feng_ye
第一堂课
单元一:概述
UNIX由贝尔实验室(Bell Labs)发明。UNIX为AT&T的注册商标,所以其他公司开发的UNIX都有自己的名字,例如IBM的AIX,Sun的Solaris等。
UNIX中,任何事物都是文件。基于这个定理,UNIX的配置文件都储存在文本文件中,并可以将多个程序链起来完成复杂的任务。
GNU Project开始于1984年,由自由软件基金(FSF for Free Software Foundation)支持,目的是为了建立免费的UNIX系统。到1990年,建立了一套包括gcc,emac等在内的近乎完备的系统。
GPL=GNU General Public License。GPL鼓励自由软件,所有对遵循GPL的软件进行的改进和修改也都必须遵循GPL。
而Linux起源于1991年有个大学毕业生Linux Torvalds建立了一个叫做"Linux"的操作系统内核。虽然该内核当时只支持gcc和bash两个GNU产品,但它预示着组合Linux内核和GNU应用程序使得建立免费的类UNIX系统成为可能。
Linux具备的特性有:
#Linux是一个类UNIX系统
#支持多任务和多用户
#并有广泛的硬件支持(至少是越来越广泛)
#Red Hat发行版Linux提供了相当多Red Hat推荐的、普遍使用的、有用的程序。
Red Hat Linux是Linux的一个发行版本(distribution)。它具有的特性有:
#最新的系统内核
#常用的实用程序和应用软件
#安装和配置软件
#提供技术支持
Red Hat Linux推荐的硬件配置
#Pentium级以上的CPU
#128M内存
#600M-1.2G的硬盘空间,取决于使用目的。
#可启动的CDROM或者软驱
Linux在图形用户界面(GUI)环境上,提供标准的X Window系统:XFree86。两种桌面环境:KDE和GNOME,分别建立在Qt和GTK+开发包上。
单元二:快速教程
Linux用户环境组件包括:
#内核(Kernel)
#Shell
#终端模拟器(Terminal Emulator)
#X Window系统
#窗口管理器(Window Manager)
#桌面环境(Desktop Environment)
本地登录时,若是在虚拟终端中以文本界面登录,运行级别(runlevel)为3;当在图形界面登录是,运行级别(runlevel)为5。可使用init来切换runlevel,如 init 3 或者 init 5。
ls命令通常用于查看文件系统,Red Hat Linux使用“彩色的”ls来区分不同的文件。命令例如:
$ ls -lh 文件以KB大小列出并列出属性等详细信息
$ ls -a 列出所有文件(显示隐藏的以"."开头的文件)
$ ls -al 列出所有文件及其详细信息
$ ls -R 列出目录下所有子目录及文件
所有的硬件设备都是以文件形式存在的,只不过它们是特殊的文件,并存放在/dev目录下。设备分为块设备(block)和字符设备(character)两种。在用ls -l命令显示时,设备文件的类型会在属性的第一位以"b"或者"c"分别表示。块设备是可随机读写的设备,例如硬盘;字符设备必须是顺序读写的,比如串口。
进程(process)是一个正在执行的程序的实例(程序的一次运行),每个进程都有一个唯一的进程号PID,从1-32768取值。其中PID 1为init进程所保留。线程(thread)可以看作是一个进程内部的“小进程”,和系统中的进程有些相似。
用ps -ef和pstree可以罗列当前的进程列表。top可即时监视当前所有进程,gtop是一个图形界面的进程监视程序。
在命令行Shell中,最常用和最著名的是bash(Bourne Again SHell),也是Linux的缺省shell。bash的全局设置文件为 /etc/profile和 /etc/bashrc。当然还有其他的shell比如csh等。
两个以上的命令/程序的连续执行可使用分号“ ; ”。若需要连续执行命令并保证前一个命令没有返回错误的前提下执行下一个命令的话,可在命令间加上“ && ”。若命令在一行打不下或想人为换行,可在行末尾加“ \ ”然后回车,继续这个命令的后面的部分。
man命令后跟命令名可找到相应的帮助页面,按q 退出。例如man ls 或者ls --help。info 命令后跟section_name 可找到相应部分的帮助。在/usr/share/doc/HOWTO/ 中有编译好的HowTos可供查阅。
env 命令显示环境变量;set命令显示环境变量和本地shell变量。下面是一些通用变量:
PATH - 可执行文件搜索路径
PWD - 当前目录
TERM - 登录终端类型
SHELL - 登录Shell的路径
HOME - 用户的home目录
USER - 用户名
DISPLAY - X显示名
VISUAL - 可视化编辑器名
EDITOR - 缺省编辑器名
root用户拥有对系统的完全控制,用户号(UID)为保留的0。任何非特权用户的UID都大于0。可以用id 命令查看当前用户信息。用passwd 命令改变密码,密码长度应在6-255位之间,并且大小写敏感。passwd [用户名] 用来修改某特定用户的密码。
虚拟终端(virtual console)的设计支持非GUI的多重登录。缺省情况下有6个虚拟终端,可通过CTRL-ALT-F[1-6] 在之间切换。在虚拟终端中可使用Shift+PageUp和Shift+PageDown卷动显示。如果运行了X,则X用CTRL-ALT-F7 来切换。
单元三:文件与Shell基础
命令pwd(Print Working Directory)显示当前所在目录的绝对路径。cd 命令用于改变当前目录,后跟绝对路径或相对路径。绝对路径以“ / ”开始,而相对路径通常以“.”、“..”或者下级目录名开始。例如:
$ cd /tmp/mydir
$ cd ..
$ cd mydir
$ cd - (到前一个所在目录)
$ pwd
/tmp
每个用户都有一个home 目录,一般在/home 目录下。home 目录中包含了用户特定的配置和用户文件。字符“ ~ ”代表当前用户的home 目录。例如,当前用户为feng_ye,则他的home 目录下的某个文件就可以这样写:~/text/example.txt ,即/home/feng_ye/text/example.txt 。如果feng_ye用户可以访问别的用户home 目录,则~kim/text/another.txt 代表了kim用户home 目录下的text/another.txt 文件,即/home/kim/text/another.txt 。
文件名可以长达255个字符,以“ . ”开头的文件为隐藏文件,在ls 时必须加-a 显示才能看到。文件名一般来说避免在其中使用 / , ,
$ ls -l "file name with spaces.txt"
或者
$ ls -l file\ name\ with\ spaces.txt
Red Hat Linux 和大多数Linux 发行版一样,遵循FHS(Filesystem Hierarchy Standard)。系统目录中:
/bin , /sbin , /usr 存放系统编译后的可执行文件、命令;
/var 存放日志文件,PID 文件和电子邮件;
/proc 当前的进程都会在这个目录中出现,可看作是一个通向内核的虚拟窗口;
/etc 存放配置文件;
/lib 存放共享库;
/dev 设备文件;
/boot 内核和启动文件;
/home 用户的home 目录;
/opt 为安装第三方软件包的目录。
df 命令显示磁盘用量,加-h 选项可以以KB、MB、GB等单位输出,加-H 也以KB、MB、GB输出,但是是以1000为K,而非1024。du 命令计算目录下文件占用磁盘的大小,以KB为单位,也加-h 选项。例如du -sh 。
文件操作中,mv 命令用来移动文件或者将文件改名。注意如果mv 命令的第二个参数,也就是移动目的地是一个目录,则源文件移动到该目录下;若不存在第二个参数所指定的目录,则mv 将认为第二个参数是一个文件名,并将源文件改名。cp 命令复制文件。可用-a 选项复制整个目录及其子目录和文件,并保持其修改时间。touch 命令更新文件的最后修改时间,若文件不存在则建立空文件。rm 命令删除文件。可以用-rf 命令删除任何文件或者目录,及其子目录下的文件。如果需要的话可以用-i 选项让rm 命令具有交互功能。
目录操作中,mkdir 命令新建目录,rmdir 用于删除空目录,若需要删除非空目录,使用rm -r 将删除目录及其子目录中所有文件。
file 命令用于获得文件的类型,如ASCII文件或者可执行文件等。
cat 命令用于显示整个文件的内容。-A 选项显示所有字符,包括控制字符和不可打印的字符;-s 选项压缩文件中的多个空行为一个空行;-b 为所有非空行加注行号。
less 命令用于在分屏显示文件,空格向后翻页;b 向前翻页;/text 在文件中向前查找text;?text 在文件中向后查找text;n 重复上一次的查找;N 重复上次查找,但方向相反;q 退出。
less 的选项有 -c 在显示前清屏;-r 显示控制字符;-s 压缩多个空行为一个空行。
tail 和head 命令显示文件最后n 行和最前的n 行。n 缺省为10。
-n 或者 -n n 选项:显示n行(例:-20 或者-n 20)
-c n 选项:显示n个字节
-f 选项为tail 所独有,它用来实时观察文件的末尾增加的行,在观察系统日志时非常有用。
pico 是一个通用文本编辑器,当编辑系统配置时务必加-w 选项以防止自动换行。
文件可以用通配符 * 和 ? ,* 表示0个或者多个字符,? 表示单个字符。[a-z] 表示在范围之内的字符,[^a-z]表示除范围之外的字符。
技巧:echo 命令可以用来测试通配符以避免错误的毁灭性操作,例如rm 。
$ echo ??ee*.txt
bleeding-edge.txt sheeptrix.txt
kill [PID] 用来杀死进程。不易杀死的进程可用kill -9 [PID] 杀死。
单元四:用户、组和系统信息
所有的用户(下称user)都有一个唯一的用户号(unique User ID = uid)。用户名和uid都存储在/etc/passwd 文件中。当user 登录时通常被连接到home 目录和一个Shell程序。user 不能在没有允许的情况下读、写、执行其他user 的文件。
user 都属于一个组(下称group),而group 有唯一的组号(unique Group ID