Keywords: 了解linux内核   了解文件系统   linux发行版 shell 是什么
            特殊的shell字符
 
一 、什么是linux—— linux的4个主要部分:
      1、linux内核
     2、GNU使用程序
     3、图形桌面环境
     4、应用软件
   1、了解linux内核——kernel控制计算机系统上的所有硬件和软件
         linux kernel的四大功能
                                  1)系统内存管理
                                  2)软件程序管理
                                  3)硬件管理
                                  4)文件系统管理
     1)系统内存管理:kernel不仅可以管理服务器上的物理内存,还可以创建和管理虚
拟内存,内存管理必须使用硬盘空间,该空间称为交换空间(swap space)大小一般设
置为物理内存的2倍。
什么是虚拟内存?
           Linux支持虚拟内存(virtual memory),虚拟内存是指使用磁盘当作RAM的扩展,这样可
用的内存的大小就相应地增大了。内核会将暂时不用的内存块的内容写到硬盘上,这样一来,这
块内存就可用于其它目的。当需要用到原始的内容时,它们被重新读入内存。这些操作对用户来
说是完全透明的;Linux下运行的程序只是看到有大量的内存可供使用而并没有注意到时不时它
们的一部分是驻留在硬盘上的。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),所
以程序就不会象一直在内存中运行的那样快。用作虚拟内存的硬盘部分被称为交换空间。
         将内存位置分组为多个数据块称为分页,默认情况下,在linux系统上运行的每个进
程都有自己专用的内存分页,内核跟踪使用的内存分页,并自动将一段时间内没有访问
的内存分页复制到交换空间。
          查看内存使用情况:cat /proc/meminfo
         查看系统当前使用的共享内存分页:ipcs -m
 2)软件程序管理
       linux将正在运行的程序称为进程。
3)硬件管理
linux系统需要在内核中插入与之通信的设备的驱动程序代码,使内核能像设备传输数据。在
linux内核中插入设备驱动程序代码有两种方法:
                在内核中编译驱动程序;
                想内核添加驱动程序模块
 linux将硬件设备标识为特殊文件,即设备文件,设备文件可以分为3类:
            字符,例如大部分调制解调器、终端类型
               ,例如磁盘驱动器
            网络 。例如网卡
4)文件系统管理
   什么是文件系统(filesystem)呢?
       当前的操作系统大多数是从硬盘读数据的,每个操作系统使用的硬盘在x86架构上的都一
样,都是同样的硬盘。但是,每种操作系统都有其独特的读取文件的方法,也就是说,每种
操作系统对硬盘读取的方法不同,就造就了不同的文件系统。
Linux的核心如何管理这些文件系统呢?
     整个Linux系统都通过虚拟文件系统交换(Virtual Filesystem Switch)的核心功能去读
取文件系统。也就是说,整个Linux认识的文件系统其实都是VFS在管理,系统管理员编译内
核以支持系统将使用的文件系统,VFS与每个文件系统进行连接,为内核与其他文件系统类型
的通信提供一个标准接口。
                  linux系统支持的文件系统

 文件系统
描述
ext
linux扩展文件系统——原始linux文件系统
ext2
第二代扩展文件系统,提供比ext更高级得功能
ext3
第三代扩展文件系统,支持日志功能
hpfs
OS/2高性能文件系统
jfs
IBM的日志文件系统
iso9660
ISO9660 文件系统(CD-ROM)
minix
MINIX文件系统
msdos
microsoft FTA16
ncp
netware文件系统
nfs
网络文件系统
ntfs
支持microsoft NT文件系统
proc
访问系统信息
ReliserFS
高级linux文件系统,性能更加而且支持磁盘恢复
smb
samba 文件系统,支持网络访问
sysv
旧式UNIX文件系统
ufs
BSD文件系统
umsdos
类似unix的文件系统,寄存在MSDOS上
vfat
windows 95文件系统,(FAT32)
XFS
高性能64位日志文件系统

 
二、GNU实用程序
           除了使用内核控制硬件设备外,计算机操作系统需要实用程序执行标准功能,如控制文件
和程序,尽管Linus创建了linux内核,但他没有系统实用程序去运行它, 与此同时,Internet 上
有一群人在尝试开发一套标准的计算机系统实用程序,用于模拟流行的Unix系统。GNU组织(
GNU is not Unix)为了给大家提供一个类似Unix的环境,开发了一个完整的Unix实用程序集,
而且是开源的,但是没有操作系统去运行它们。
      于是,Linus的linux内核与GNU操作系统使用程序结合诞生了一个完整、强大的免费操作系统。
         GNU提供给linux系统的核心实用程序包称为coreutils软件包。
          GNU coreutils软件包由三部分组成:
                                    1) 处理文件的实用程序
                                    2)操作文本的实用程序
                                    3)管理进程的使用程序
 
三、linux发行版
各种linux发行版可分为三个类型:
        1、完整核心发行版
        2、特定发行版
         3、LiveCD发行版
       核心linux发行版包括内核、一个或多个图形桌面环境,以及几乎所有的linux应用程序,它针
对内核进行了预编译,只需该发行版即可完整安装linux。如red hat ,fedora,opensuse,debian
       特定发行版通常以一个主要的发行版为基础,但只包含对特定领域有用的应用程序子集,如
Ubuntu是供学校和家庭使用的免费发行版。
      liveCD,无须在硬盘上安装即可从CD启动PC,并运行linux发行版。
 
 
四、shell 是什么
     linux中的shell——命令解析器、程序语言,系统管理的重要工具。
    shell的种类:ash、bash、korn、csh、tcsh、zsh
          ash :简单的轻量级shell,运行于低内存环境,但与bash shell 完全兼容。
          korn:与bourne shell兼容的编程shell,但支持高级编程功能,如关联数组和浮点算法
         tcsh: 在shell脚本中吸收了c编程语言元素的shell
        zsh :吸收了bash、tcsh、korn等shell功能的高级shell,还提供高级编程功能、共享历史
文件和主题提示符。
 GNU/linux系统中标准的shell——bash shell
         大部分linux发行版包含多个shell
    查看shell的类型:
              默认使用的shell
               [root@localhost ~]# echo $SHELL
                     /bin/bash
             支持的shell
                 [root@localhost ~]# cat /etc/shells
                  /bin/sh
                 /bin/bash
                /sbin/nologin
               /bin/tcsh
                /bin/csh
              /bin/ksh
      查看bash shell的版本:
              [root@localhost ~]# echo $BASH_VERSION
                 3.2.25(1)-release
 
编译安装最新版的bash
http://ftp.gnu.org/gnu/bash     原始下载点
tar -xvzf   bash-…….
cd bash-……
./configure         默认安装到/usr/local/bin中,--prefix=     指定安装到某个目录下
make                       编译
make tests            测试
./bash
echo $BASH_VERSION
make install          安装
 
切换使用新版的bash shell——chsh (change shell)
[root@localhost ~]# echo /usr/local/bin/bash >> /etc/shells                 
把bash的安装路径加入/etc/shells文件中
[root@localhost ~]# chsh
通配符和转义字符
    通配符:
    * :代表任意字符串
   ?:代表一个字符,但不可为空
例:
       ls /usr/bin/* 列出指定目录下的所有文件
       ls /usr/bin/???   列出指定目录下文件名长度为3的文件
        ls *zip*
        ls py??o??
 
转义字符:
   \     :使后接的字符恢复其原来作为单纯字符的用途,即出去特殊字符的作用
[root@localhost ~]# echo 9*9 = 81
echo: No match.
[root@localhost ~]# echo 9\*9=81
9*9=81
[root@localhost ~]# echo '9*9 = 81'        
 使用单引号也行,但单引号内不能出现单引号就算有转义字符也不行
9*9 = 81
[root@localhost ~]# echo 'this is jack/s cat'
this is jack/s cat
[root@localhost ~]# echo 'this is jack\'s cat'
Unmatched '.
[root@localhost ~]# echo this is jack\'s cat                     正确的用法应该是以下三种
this is jack's cat
[root@localhost ~]# echo "this is jack's cat"
this is jack's cat
[root@localhost ~]# echo 'this is jack'\''s cat'
this is jack's cat
转义字符还可以作续行符号使用:
[root@localhost ~]# echo this is line 1 \
? line 1 too~
this is line 1 line 1 too~
 
反引号:
`` : 允许将shell命令的输出赋值给变量
[root@localhost ~]# test=`date`
[root@localhost ~]# test
[root@localhost ~]# echo $test
2011年 05月 29日 星期日 09:03:10 EDT
[root@localhost ~]# today=`date +%y%m%d`
[root@localhost ~]# echo $today
110529
[root@localhost ~]# cat /var/log/messages > messages.$today     
每天运行这个命令的时候生成一个后缀为当天日期的messges日志文件
[root@localhost ~]# ls messages.110529
messages.110529
 
双引号 ""
         除了$、``(后引号)和转义字符\外,双引号内的所有字符将保持字符本身的含义而不被
bash解释。$和``在双引号内,如果不被转义字符(\)转义,将无条件的 保持bash下的特殊含
义,而转义字符(\)是有条件的。转义字符只有后跟$、``、双引号、\和换行符五种特殊字符
时才具有bash下的特殊含义:转义,换句话说,双引号中只有以上五种字符可以被转义。
例:
[root@localhost ~]# cat test1
#!/bin/bash
Var1=123
Var2=456
echo "this is $Var1,and this is \$Var2"
echo "today is `date`, i want to go shopping"
[root@localhost ~]# ./test1
this is 123,and this is $Var2
today is 2011年 07月 24日 星期日 04:50:51 EDT, i want to go shopping
[root@localhost ~]#
 
 
单引号 ''
单引号内的所有字符都保持它本身字符的意思,而不会被bash进行解释
例:
[root@localhost ~]# cat test2
#!/bin/bash
Var1=123
Var2=456
echo 'this is $Var1,and this is \$Var2'
echo 'today is `date`, i want to go shopping'
[root@localhost ~]# ./test2
this is $Var1,and this is \$Var2
today is `date`, i want to go shopping
[root@localhost ~]#
 
字符集合:[]
表示集合里面所列的字符范围中的某一个
-    代表字符范围,如果是集合的元素,则要放在开头或结尾
   代表非,但要放在集合的第一个位置,否则只是一个叹号
 例:
[1-9_-] 数字1到9、下划线和-
[a-z] 所有小写字母中的一个
[!1-8] 0或9
[\!abcd]     !、a、b、c、d中的一个
 
括号扩展:{}
组合字符串
例:
[root@localhost ~]# ls /usr/bin/{g,nc,s}ftp
ls: /usr/bin/gftp: 没有那个文件或目录
ls: /usr/bin/ncftp: 没有那个文件或目录
/usr/bin/sftp
[root@localhost ~]# echo {can,win}dy
candy windy
 
重定向与管道
 >  : 覆盖
>>   追加
<     <<
|
前后台工作:&
 利用系统的分时架构,把工作丢到后台处理,管理者仍然用后键盘的控制权。
    ./mywork.sh     &