老师在讲shell中穿插讲了硬盘分区和格式化 
   磁盘的分区格式化
    分区:  fdisk    -l 列出分区表
            fdisk   磁盘而不是某分区  (/dev/had)
      command  :p 看分区
                  n 新建分区
                  d 删除分区
                  q 不保存退出
                  w 保存退出
生成文件系统(格式化)
      mkfs  (make file system)
      mkfs  -t  ext2  /dev/hda5
      mkfs  -t  ext2 –j /dev/hda5       :格式化成ext3格式
挂接:mount /dev/hda5
shell  脚本本身就是程序,是用shell命令构成的,小规模、结构化、模块化、程序设计。
命令:  echo   输出信息用
        read   输入信息     read+ 变量名
        sleep   休眠        sleep+ 秒数
在终端上算数表达式写法: echo $ ((1x2x3))这是整数运算不能带小数点。
/  :除
% :余
shell脚本格式:
第一行必须是     #!/bin/sh
有三种结构  顺序结构   分支结构   循环结构
  顺序结构
   wait 命令 保证进程同步 等待一个子进程结束 多个并发就用多个wait
例如:    #!/bin/sh
           echo “1”
           sleep 5&
           echo “3”
           echo “4”
           wait
           echo”5”
 分支结构
          if 判断  ;  then 
                  T块
                Else
                  F块
                fi 
判断        test语句   test 表达式 =  [表达式]
表达式进行文件判断   -f  文件名(检测该文件是否存在且为普通文件
                     -d 目录名
                     -r  可读
                     -w 可写
                     -x 可执行
这些例子由于年久失修(笔记上标注不完备,过后有忘了的地方)错误之处请多多包涵
例如:
        #!/bin/sh
        echo “file”
        read  FileName
        if  [-f $FileName]; then
             echo “yes”
          else
         echo “no”
  fi
字符串比较   相等    串A =串B
             不等    串A!=串B
             -z   判断字符串是否为零 空为真 非空为假
 数值比较: 大于 等于 小于  不等于
       a > b       $A –gt $B
       a≥b       $A –ge $B
       a≤b       $A –lt $B
       a=b        $A –le $B
       a≠b       $A –ne $B
 逻辑比较: 条件A –a  条件B(与)
            条件A-o 条件B  (或)
           !条件            (非)
例如:
        #!/bin/sh
        read MARK  <  /proc/sys/net/ipv4/ip_forward
        echo  $MARK
         if  [ $MARK = “0” ]; then
           else  echo “host”
                echo “GATEWAY”
         fi
‘ ‘ 反单引号: 如果反单引号后面有语句则将里面的语句运行完后将结果替换此处
      例如:
       #!/bin/sh
       u=id –u 
        if  [$u = ‘0’] ; then
                echo “hello”
         else 
                echo “permission denied”
        fi
再例如:
      #!/bin/sh
      echo  “username”
      read  userNAME
     MARK = ‘cat /etc/passwd | grep ‘$userNAME:’
      积极if  [ -z $ MARE] ; then
                echo “NO”
             else
                echo “YES”
           fi
多分支结构
           case  字符串   in
串1) 块1
       ;;
串2) 块2
       ;;
.
.
.
*)
      esac
例如:
    #!/bin/sh
        echo  “command”
          read  CMD
         case $CMD  in
       start)
                 /etc/rc.d/init.d/named  start
                ;;
       stop)
                /etc/rc.d/init.d/named  stop
                ;;
       estart)
               /etc/rc.d/init.d/named stop
               /etc/rc.d/init.d/named start
                ;;
               *)
                echo  “usage : $0 {start|stop|restart}
                ;;
            esac
*知识点:  . 脚本  让shell不打开子进程,在当前shell进程中运行脚本
     看脚本切忌一行一行的看,要一层一层的看,就像剥玉米.
Shell脚本
循环  1)当形循环
      2)条件循环
   while  判断;  do 
          循环体
   done
例如:
     #!/bin/sh
       i = 0
while  [ $i –lt $n] ; do
      j=0
      while [ $j –lt $ (($i+1))] ;  do
        echo “\*”
          j=$(($j+1))
        done
       echo
      i=$(($i+1))
    done
定时循环  00:00:00: 1970-01-01 utc   称之为unix元年
       data +%s 是取从unix元年至少过了多少秒
       date +%H:%M:%S    显示时分秒格式
例如:
            #!/bin/sh
       intime = ‘date +%S’ –le $ [ (intime+5)] ; do
            echo “.”          ##echo后面加-n 输出就不回车了,横向输出
        done
   利用date命令可以方便的实现定时循环
    
shell风格的循环     for 循环       (枚举循环)
格式       for   变量名  in  值列表  ;  do 
                 循环体
            done
##值列表:核心部分,一系列由空格分开的字符串
例如:   #!/bin/sh
         for n in asd 4r3 56h er34 657 tr ger ; do 
            echo  $n
         done
要自动下载列表中的东西编shell的
    #!/bin/sh
             cd /tmp/dl
      for url in  cat /etc/urls ; do
            wget $url
          done
            >/etc/urls
补充知识:     参数传递
      命令  参数1  参数2 …………
    例如:
          #!/bin/sh 
             n=$1
              i=0
            while ($i-lt $n); do
               echo    “xxxx”
                ii= $ (($$+1))
                  done
      $0       $0就是命令本身
编后:此处讲的都是基本的shell应用,老师推荐看《bash编程》
Linux系统管理
1.        用户管理
添加账户   useradd 用户名
           passwd 用户名
groupadd   组名              usedel    -r    用户名
  /etc/group          /etc/passwd            /etc/shadow            三个重要文件
group 文件  格式:  组名:x :组ID:组成员
passwd文件 格式:  用户名:x:用户ID:组ID::用户目录:shell
 用户在passwd文件中体现的组关系称为用户组属组,而在group组中体现的是额外组。
   false:运行起来就是个恒假。正确利用false给用户,将false添加到/etc/false下用户名字后这样用户就被拒之门外。如mail用户 通过修改用户的shell来限制用户登陆提高网络安全性。
   top命令:察看机器负载情况
   which命令:查看外部命令的路径
top被弄成用户shell时切记在linux下可用,因在linux下top是安全模式的,而在其他unix中并不一定安全,通过敲击热键可能会打出一shell。
 shadow文件  shadow里面的口令是散列,散列是不可逆的
批量添加150个用户      u001—u150
#!/bin/sh
 i=1
  while [$i–le 150] ; do
                if [ $i -lt  10] ; then
                uname =u00$i
   else
                uname=u$i
     fi
             useradd $uname
      i = $(($i+1))
done
   passwd 命令规定只能在终端上手动输入,只有用stdin参数便可解决
作业: 从一表中将已知用户名导入useradd
2.网络配置
linux 下有两套网络配置,第一套为BSD方式,另一套是linux方式。linux中高级网络功能只能用linux方式。
   BSD方式:1.查看  ifconfig   网卡名     BSD中必须指定网卡名
              注释:
                   collisions 冲突             txqueuden  发送包的长度
                网卡工作模式       mii-tool   媒体无关接口
   ethtool+网卡名    查看命令更详细(需要网卡驱动支持)
   netstat –r  查看路由
查看网络连接状态
              netstat    -ant   查看TCP的所有网络连接
                         -anu   查看UDP的所有套接字
一条TCP连接会产生两个套接字,两台机器均开。
ARP  -n    -n意思是不要进行反解 不转成名字
  查看DNS  cat /etc/resolv.conf
         2.配置IP  
                ifconfig  网卡名   ip地址
配置路由   route add   -net  网络地址  netmast x.x.x.x  gw 网关
           route add   -host 网络地址  netmast x.x.x.x  dev 网卡
           route del   -net  网络地址  netmast x.x.x.x  gw 网关
           route del   -net  网络地址  netmast x.x.x.x  dev 网卡
缺省写法: route add  default gw 网关
           route add  default dev网卡
   静态ARP     arp  -s  IP地址  MAC地址
linux 方式:     
ip 命令
  
         ip addr show  查看IP地址 简写为 ip ad sh
         ip route sh    查看路由    简写为 ip ro sh
         ip neigh sh    查看静态ARP  简写为 ip ne  sh
ipv6中取消了ARP  改用ICMP
具体配置:
         ip  ad add dev ip地址/掩码长度
         ip route add ip地址/掩码长度  dev 网卡
      ip route  add ip地址/掩码长度   via  网关地址
激活/禁止某网卡
        ifconfig  dev   down/up
   linux下的:
         ip link  set up dev eth0
         ip link  set down dev eth0
此设置都是临时的,固化网络配置,在linux下 主机名/缺省网关: 修改路径
/etc/sysconfig/network
        如果修改主机名顺便把hosts文件也得改    /etc/hosts否则有时服务会启动时挂起死等~~~~~~~~~~~~~~~~
   固化IP 地址   /etc/sysconfig/network-scripts下的ifcfg-网卡名
例如: /etc/sysconfig/network-scripts/ifcfg-eth0
         bootprotocol= static  ##如果用动态IP则改成DHCP
         ONBOOT=yes           ##启动时激活,设置思想:作为外网网卡应该为NO,因防火墙启动之前将网卡先期启动会有被攻击的危险
         
静态ARP固化  
         /etc/ethers
        写法:    mac  ip   例如 : 01:02:03:04:05:06  10.0.0.2
  (小知识点:
万用脚本:/etc/rc.local 不管什么命令只要加在此,下次开机后便会自动运行,相当于autoexec.bat。在用户登陆之前便已经运行,注:在此文件中加命令时不可阻塞,如果命令执行时间过长则加“$”将其弄到后台执行。
3.计划任务  在linux和unix下是cron服务来实现的,每隔一分钟检查一次任务列表。
  
/etc/crontab
crontab 命令  -l (list)
-e (edit)
写时间格式:时分日月周  命令  
例如:
      05 5 * * 1,3,5 ##每周一三五运行
技巧:计划任务可用”,”“_””/”给分开
如果计划任务不执行此时主要原因是路径不对,看crontab便可知,PATH写的便是,第二原因是终端:不能读标准输入和写标准输出,但可用重定向往文件中写可以,不能使用终端如果要修改crontab文件则需要先停止cron服务。
       /etc/rc.d/init.d/crond stop
      修改~~~~~~~~~~~~~~~~~
      /etc/rc.d/init.d/crond  start
linux配置:4.top 命令详解&进程管理
         
top 命令查看系统的资源状况
   load average  表示在过去的一段时间内有多少个进程企图独占CPU 
   zombie  进程 :不是异常情况。一个进程从创建到结束在最后那一段时间遍是僵尸。留在内存中等待父进程取的东西便是僵尸。任何程序都有僵尸状态,它占用一点内存资源,仅仅是表象而已不必害怕。如果程序有问题有机会遇见,解决大批量僵尸简单有效的办法是重起。kill是无任何效果的
   stop模式:与sleep进程应区别,sleep会主动放弃cpu,而stop是被动放弃cpu ,例单步跟踪,stop(暂停)的进程是无法自己回到运行状态的。
   cpu states : 
nice: 让出百分比           irq :中断处理占用
idle:空间占用百分比        iowait:输入输出等待(如果它很大说明外存有瓶颈,需要升级硬盘(SCSI))
   Mem: 内存情况  
          设计思想:把资源省下来不用便是浪费,如添加内存后free值会不变,buff值会增大。    判断物理内存够不够,看交换分区的使用状态。
ps命令  列进程。列出所有进程 
ps ax     :tty值为“?”是守护进程,叫deamon 无终端,大多系统服务是此进程,内核态进程是看不到的,例木马
看进程树,以树形方式现实进程列表敲  ps  axf    
         init是1号进程,系统所有进程都是它派生的,杀不掉
  ps axm   :会把线程列出来
  在linux下进程和线程是统一的,是轻量级进程的两种方式。
  ps axu  :显示进程的详细状态。
         vsz:说此进程一共占用了多大物理内存。
         rss:请求常驻内存多少
终止进程:   kill  pid       本质是协商退出!(并不是强制退出)
              全:     kill  -信号    pid 
kill –KILL  pid    是强制退出。
例如编写一kill杀不掉的程序
#!/bin/sh
     while true j do 
           echo –n “.”
           sleep 1
   done
#!/bin/sh
    trap “”15    ##捕获15号进程,kill就是15号进程
   while true j do 
    echo  -n “.”
    sleep 1
    done
修改进程优先级:
    nice 命令  每个进程都有优先权,权值越小优先级越高。
    nice –调整值  命令               ##范围“-20~19”
linux图形界面的优先级并不是最高的,它仅是一进程
  nice命令在root下可随意调整,在普通用户状态下只能调低不能提高,不过还是可以恢复回去的。
  局限性:必须敲命令之前敲nice ,它无法更改已经运行的程序的优先级。
如果要更改已经运行的用     renice   调整值   pid  
   即在线调整。
killall 命令:  杀死一系列进程,即杀死一系列由一个相同命令产生的进程例如killall   fam
killall是根据命令名来杀的,kill以pid 来区别。
    在top 里面可以直接杀死进程,按“K“输入PID可杀
     按“R“可调整优先级
  
     BSDunix 定义了32个信号         linux定义了64个信号。
5. 启动管理       
        启动顺序:  BIOS -> MBR -> 启动扇区
MBR : 扫描分区表看哪个是可启动分区,再将那个扇区放入内存。
GRUB有两种装法: 1. MBR 2.启动扇区
GRUB有两个基本技巧:
        (1). 单用户启动模式:  见到GRUB启动菜单时按“e“选”“kernel“打头的那一行,再按“e”,然后在/  rhg后面加空格+“1” 再按“b”便以单用户模式启动了,输入init 3便进入正常启动模式。
在单用户模式下可以更改root口令,有很大危险。
防护方法: 给grub加口令
      vi   /etc/grub.conf     ##在timeout后添加一行
         password=1234567     ##密码
使生效:敲grub回车   等待一会  再敲quit
(2).        GRUB—> linux内核 -> init进程 ->
                                                                  1.进程指令运行级
                                            2./etc/rc.local
                                                                  3.虚拟终端
         init配置文件     /etc/inittab
里面有一说明  0 –halt
1-        single
3-        full mutiluser
5-        X11
        id:5:initdefault     ##缺省进入5   X11模式
        si::sysinit:/etc/rc.d/rc.sysinit               ##系统启动以后调用的第一个脚本,即init进程所调用的
         trap           ctrl – alt –delete
ca:ctrlaltdel:/bin/    
在文字界面下敲init –q 来使配置 立即生效
注:屏蔽三键热启动是非常重要的
虚拟终端的添加/减少也在此修改(数量修改)
如果想把linux弄成指纹识别的替换掉getty和bgin即可。
6.文件包管理
    
文件包有    RPM包    源码包    二进制包
rpm包格式:  软件名-版本.平台.rpm
在http://rpmfind.net几乎可以搜索到所有的rpm包
rpm包的安装:   rpm  - i  软件名.rpm   
rpm  -i –nodeps  软件名.rpm  ##不考虑依赖关系的安装
检查某个rpm包是否安装用此命令: rpm –qa | grep 包名
删除已安装rpm   rpm  -e 
强制删除:       rpm –e –nodeps  软件名
源码包:
格式:  软件名-版本.tar.gz/软件名-版本.tar.bz2
在进行源码处理的时候都要将源码拷在此处:/usr/load/src
解包:
       tar –zxf  名称    ##gz解压
       tar –jxf  名称    ##bz2的解压
运用:
进源码包 à第一步      ./configure    ##配置
            第二步      make           ##编译
            第三步      makeinstall    ##安装
大多书软件都安装到了/usr/local下
二进制包:
大多数都给制成一可执行文件,直接运行即可,而大多数都要求在X11下安装
例:java虚拟机的安装     (不是开放源码的包)
7.GUI
linux下的图形界面和windows图形界面的区别有哪些
linux X是一协议,规定了unix下图形终端,至今为X11R6  用XFree86软件包来实现的,分为图形终端和图形主机,图形终端为X服务器
大写X回车便启动一个图形终端,监听6000端口
X协议是可以基于TCP工作的,也可不基于TCP工作
XFree86提供了一个完整的服务器和几个常用的基本程序
主机配置à在系统设置->登陆屏幕->把XDMCP启用,注销一次
主机   netstat –anu  查看177/udp
终端上敲: X –query 10.0.0.1回车
如广播域中有好几台X主机则用X –broadcast 
在文字界面想进如图形界面敲 init5
快捷键 
       ctrl + alt + “ +”
                 “-”可动态调整分辨率
    ctrl + alt + “←”可强制退出图形界面,在linux下X也仅仅是一个进程。
    ctrl + alt + “F1~~~F6”回到文字界面
8硬件管理
  查看CPU类型:   /proc/cpuinfo
  查看pci设备:   lspci  表中能看到但linux不一定能驱动
  查看usb设备:   lsusb   -v  显示详细列表,甚至电压都有
  设备驱动情况: dmesg
在proc目录下有很多常用命令,在此还有以进程号为名的目录,可在目录中查看进程路径,在纯unix中仅有以进程名的子目录,在linux中多些系统配置
9.磁盘配额
基本要点:1.针对某个分区(ext2、ext3、reiser、…fat不支持)2.对于块的使用/文件个数限额
步骤:1.不考虑限额情况下把分区挂好
      2.进入挂接点 做 : 目的: 对u1限10M  1000个文件。
对两个文件    touch  aquota.user    aquota.group  加个“a”即高级
将两个文件属性改成600    chmod 600 aquota.user aquota.group
     3.修改etc下的fstab   vi /etc/fstab
    在hda5这一行的defaults后面加一逗号写上usrquota,grpquota ##基于用户和组的限额。
     4.重新挂接该点  mount  -  o remount /home ##不关机的前提下重新挂接一次
     5.启用限额    quotacheck –u –g /home  ##意思是启用之前检查此点的使用情况(经验:做限额要拿新分区来做)
                    quotaon   -u –g /home(前五步是一次性的做完即好)
     6.设置限额     edquota –u u1  回车后出现一表
         解释表:
                block – 以块为单位,已用了多少         
soft/hard   软/硬限额
inodes    文件实体
修改后存盘退出即可。
edquota命令还有一种非交互性的
        edquota –p 原型用户  -u 用户名  ##即将原型拥护的限额复制给新用户。
10.日志管理
1./var/bg/messages  此为主日志文件。注:出现服务器异常时要去看日志文件,调试服务器失败第一反应应去查看日志,而不是重装系统
2.syslog服务   命令:  logger   例如:logger hello 便向日志文件添加一行“hello”
日志配置文件:/etc/syslog.conf
   格式:   消息分类     消息去向
来源.级别    /var/log/
常用技巧:就地打印日志  将日志写到/dev/lp0    行式打印机打印出去
  *远程日志:       syslog服务器
配置syslog服务器
例如:  10.0.0.1为syslog服务器        10.0.0.111 为客户机
步骤: 1.服务端配置
vi /etc/sysconfig/syslog        
          sysLOGD_OPTIONS = “-r –m 0”   ## -r 意思是接受远程的日志
        重起/etc/rc.d/init.d/syslog    restart
       2.客户端配置
          vi /etc/syslog.conf
          在消息去向处添加  @10.0.0.1  
          存盘退出重起服务
          /etc/rc.d/init.d/syslog  restart
       (知识点:直接查看日志尾部:    tail   /var/log/messages)
日志服务使用的端口是:514/udp
syslog日志服务器端不能根据源地址过滤,为了防止外网向日志服务器写垃圾信息要在网络拓扑中解决,网关上做限制外网访问514端口。
摘自:chinaunix.net