Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78949
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 434
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-23 09:31
个人简介

天行健,君子以自强不息;地势坤,君子以厚德载物

文章分类
文章存档

2018年(11)

2017年(30)

我的朋友

分类: LINUX

2017-09-09 11:05:31

linux目录如下:
/boot,/etc,/usr,/var,/dev,/lib,/tmp,/bin,/sbin,
/proc,/sys,/mnt,/media,/home,/root,/misc,/opt,/srv
/etc、/bin、/sbin、/lib:系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上
/usr/bin(sbin、lib):操作系统核心功能,可以单独分区
/usr/local/bin(sbin、lib、etc、man):第三方软件安装位置

软件包管理器的核心功能:
1、制作软件包;
2、安装、卸载、升级、查询、校验;
Redhat、SUSE:RPM
Debian:dpt

yum命令:
    rpm:
        数据库:/var/lib/rpm
    rpmbuild:
安装、查询、卸载、升级、校验、数据库的重建、验证数据包等工作;
rpm包种类:
    二进制格式
        rpm包作者下载源程序,编译配置完成后,制作成rpm包
        
    源码格式
    
rpm命名:
    包:组成部分
        主包:
            bind-9.7.1-1.e15.i586.rpm
        子包:
            bind-libs-9.7.1-1.e15.i586.rpm
            bind-utils-9.7.1-1.e15.i586.rpm
        包名格式:
            包名-版本号-发行号.发行平台.后缀名
            name-version-release.arch.rpm
            包名-版本号.次版本号.源程序制作者发行号-rpm包制作者发行号.发行平台.后缀名
            bind-maior.minor.release-release.arch.rpm
        主版本号:重大改进
        次版本号:某个子功能发生重大变化
        发型号:修正了部分bug,调整了一点功能
        
rpm功能:
    1、安装:
        rpm -i /PATH/TO/PACKAGE_FILE
            -h:以#显示进度,每个#表示2%;
            -v:显示详细过程;
            -vv:显示更详细过程
        rpm -ivh /PATH/TO/PACKAGE_FILE
            --nodeps:忽略依赖关系;
            --replacepkgs:重新安装,替换原有安装;
            --force:强行安装,可以实现重装或降级
            --test:测试rpm包无法安装的原因
    2、查询:
        rpm -q PACKAGE_NAME:查询指定的包是否已安装
        rpm -qa:查询已安装的所有包
        rpm -qi PACKAGE_NAME:查询指定包的说明信息;
        rpm -ql PACKAGE_NAME:查询指定包安装后生成的文件列表;
        rpm -qc PACKAGE_NAME:查询指定包安装的配置文件;
        rpm -qd PACKAGE_NAME:查询指定包安装的帮助文件;
        rpm -q --scripts PACKAGE_NAME:查询指定包中包含的脚本
        rpm -qf /path/to/somefile:查询指定的文件是由哪个rpm包安装生成;
        如果某rpm包尚未安装,我们需要查询其说明信息、安装以后会生成的文件:
            rpm -qpi /PATH/TO/PACKAGE_FILE
            rpm -qpl /PATH/TO/PACKAGE_FILE
    3、升级
        rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,则安装;
        rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,则退出;
            --oldpackage:版本降级
    4、卸载
        rpm -e PACKAGE_NAME
            --nodeps:忽略依赖关系;
    5、校验
        rpm -V PACKAGE_NAME
    6、重建数据库
        #ls /var/lib/rpm
        
        rpm --rebuilddb:重建数据库,一定会重新建立;
        rpm    --initdb:初始化数据库,没有才建立,有就不用建立;
            
    7、检验来源合法性,及软件完整性;
        #ls /etc/pki/rpm-gpg/
            PPM-GPG-KEY-redhat-release
        
        rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release:导入密钥文件
        
        rpm -K /PATH/TO/PACKAGE_NAME
            dsa、gpg:验证来源合法性,也即验证签名;可以使用--nosignature,忽略此项验证;
            sha1、md5:验证软件包完整性;可以使用--nodigest,忽略此项验证;

yum命令:
    C/S架构:
        Client,Server
    yum repository(仓库)
        文件服务
            ftp
            web
            file(本地文件)
    RedHat
        DVD
            rpm包
            元数据文件
                createrpo:用于生成元数据文件
HTML:HyperText Mark Language(超文本标记语言)
XML:eXtended Mark Language(扩展标记语言),用于不同系统或主机之间传输数据的
    手段,目前常用工具有XML,JSON,通称半结构化的数据
yum仓库中的元数据文件:
    primary.xml.gz:1、当前仓库所有RPM包的列表;2、各包的依赖关系;3、每个RPM安装生成的文件列表;
    filelists.xml.gz:1、当前仓库中所有RPM包的所有文件列表;
    other.xml.gz:1、额外信息,RPM包的修改日志;
    repomd.xml:1、包含了primary.xml.gz、filelists.xml.gz及other.xml.gz三个文件的时间戳和校验和;
    comps*.xml:RPM包的分组信息(必须安装的、建议安装的、可选安装的信息);
如何为yum定义repo文件:
    [Repo_ID]
    name=Description
    baseurl="仓库路径"
        仓库路径方式:
            ftp://
            http://
            file:///
    enabled={1|0}:是否启用该repo文件,1表示启用;0表示禁用;
    gpgcheck={1|0};是否使用gpg机制验证软件包来源的合法性及完整性;1表示启用;0表示禁用;
    gpgkey=file:///"具体存放路径":指定gpg文件的具体存放路径;使用gpgcheck验证需具备gpgkey指令
    例:[root@www yum.repos.d]# cat rhel-debuginfo.repo
        [rhel-debuginfo]
        name=Red Hat Enterprise Linux $releasever - $basearch - Debug
        baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/$releasever/en/os/$basearch/Debuginfo/
        enabled=0
        gpgcheck=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

 yum [options] [command] [package ...]
    list:列表,列出当前yum仓库中所有RPM包,支持glob
        all:显示所有
        available:可用的,仓库中有但尚未安装的
        installed:已经安装的
        updates:可用的升级
            例:[root@www yum.repos.d]# yum list zsh*
                Available Packages
                zsh.i386                                   4.2.6-6.el5                               Base
                zsh-html.i386                              4.2.6-6.el5                               Base
    clean [ packages | headers | metadata | dbcache | all ]:清理缓存
        
    repolist:显示repo列表及其简要信息;
        all:显示所有
        enabled:默认使用
        disabled:禁用
    install:安装
        yum install PACKAGE_NAME
    -y:自动回答为yes
    --nogpgcheck:忽略检查RPM包
    update:升级
    update_to:升级为指定版本
    remove|erase:卸载
    info:显示RPM包信息
    provides|whatprovides:查看指定文件或特性是由哪个包安装生成的
    groupinfo:显示RPM包组信息
    grouplist:显示RPM包组列表
        例:[root@www yum.repos.d]# yum grouplist
            Loaded plugins: katello, product-id, security, subscription-manager
            Updating certificate-based repositories.
            Unable to read consumer identity
            Setting up Group Process
            Installed Groups:
                GNOME 桌面环境
                MySQL 数据库
            Available Groups:
                DNS 名称服务器
                FTP 服务器
    groupinstall:安装RPM包组
    groupremove:移除RPM包组
    groupupdate:升级RPM包组
    例:[root@www ~]# cd /etc/yum.repos.d
        [root@www yum.repos.d]# vim server.repo
            [Base]
            name=RHEL5 Server
            baseurl=file:///media/cdrom/Server
            enabled=1
            gpgcheck=0

            [VT]
            name=RHEL5 VT
            baseurl=file:///media/cdrom/VT
            enabled=1
            gpgcheck=0
        [root@www yum.repos.d]# yum repolist
            repo id                                repo name                                   status
            Base                                   RHEL5 Server                                2,472
            VT                                     RHEL5 VT                                       39
        [root@www yum.repos.d]# yum list | less
        [root@www yum.repos.d]# yum clean    
                
如何创建yum仓库:
    createrpo
    例:[root@www ~]# yum install createrepo
        [root@www ~]# mkdir -pv /yum/VT
        [root@www ~]# cp /media/cdrom/VT/*.rpm /yum/VT
        [root@www ~]# cd /yum/VT
        [root@www ~]# cd /etc/yum.repos.d
        [root@www ~]# vim server.repo
            [Base]
            name=RHEL5 Server
            baseurl=file:///media/cdrom/Server
            enabled=1
            gpgcheck=0

            [VT]
            name=RHEL5 VT
            baseurl=file:///yum/VT
            enabled=1
            gpgcheck=0
        [root@www yum.repos.d]# createrepo /yum/VT #创建repodata#
        [root@www yum.repos.d]# yum clean all
        [root@www yum.repos.d]# yum repolist
        [root@www yum.repos.d]# cd /media/cdrom/VT/repodata
        [root@www yum.repos.d]# cp comps-rhel5-vt.xml /root
        [root@www yum.repos.d]# cd
        [root@www ~]# createrepo -g /root/comps-rhel5-vt.xml /yum/VT
定制RPM包:手动编译安装
    编译环境,开发环境
    开发库,开发工具
    
    make:项目管理工具
        makefile:定义了make(gcc,g++)按何种次序去编译这些源程序文件中的源程序
        automake,-->makefile.in-->makefile
        autoconf,-->configure
        make install
        
    编译安装的三步骤:
        前提:准备开发环境(编译环境),在redhat5中(版本不同会有所差别),
        即安装“Development Tools”和“Development Libraries”
        
        #tar   #解压缩文件包#
        #cd    #进入要安装文件的目录下#
        #./configure #执行“./configure”脚本#
            --help
            --prefix=/path/to/somewhere #软件安装位置#
            --conf-path=/PATH/TO/CONFFILE_PATH  #配置安装路径#
            功能:1、让用户选定编译特性;2、检查编译环境;
        #make
        #make install
        
        例:利用tengine-1.4.2源码包,安装Nginx.
            [root@www ~]# tar xf tengine-1.4.2 #解压缩归档#
            [root@www ~]# cd tengine-1.4.2/
            [root@www tengine-1.4.2]# ls
            AUTHORS.te  CHANGES.cn  conf       docs     Makefile  README           tests
            auto        CHANGES.ru  configure  html     man       README.markdown  THANKS.te
            CHANGES     CHANGES.te  contrib    LICENSE  objs      src
            [root@www tengine-1.4.2]# ./configure --help | less #查看./configure 选项#
            [root@www tengine-1.4.2]# yum install pcre-devel #安装PCRE包,因HTTP重写模块依赖于PCRE库#
            [root@www tengine-1.4.2]# ./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine.conf #执行configure脚本#
            [root@www tengine-1.4.2]# make   #编译#
            [root@www tengine-1.4.2]# make install #安装#
            [root@www ~]#/usr/local/tengine/sbin/nginx #在绝对路径下手动启动nginx功能#
            或者“通过修改环境变量实现相对路径启动nginx功能”
            [root@www ~]# cd /usr/local/tengine/sbin
            [root@www sbin]# nginx
            [root@www sbin]# pwd   #nginx 二进制文件路径#
            /usr/local/tengine/sbin
            [root@www sbin]# vim /etc/profile  #在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC语句之前,加入PATH=$PATH:/usr/local/tengine/sbin语句#
            ....           
            PATH=$PATH:/usr/local/tengine/sbin
            export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
            ....
            [root@www sbin]# source /etc/profile #系统重读/etc/profile脚本,系统重启后,使修改后的脚本永久生效#
            [root@www ~]# echo $PATH
            /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/tengine/sbin:/root/bin:/users/usr/local/bin
            [root@www ~]# nginx
            
            检测是否成功,可以在浏览器中输入本机IP地址,
            
            注意事项:1、修改PATH环境变量,以能够识别此程序的二进制文件路径;
                          (1)修改/etc/profile文件
                          (2)在/etc/profile.d/目录建立一个以.sh为名称后缀的文件,在里面定义export PATH=$PATH:/path/to/somewhere
                      2、默认情况下,系统搜索库文件的路径/lib,/usr/lib; 如果系统通过其他路径搜寻库文件,要增添额外搜寻路径:
                         在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中;
                         执行"ldconfig -v“命令,重新搜寻库文件并显示详细过程;
                      3、头文件:输出给系统
                         默认:/usr/include
                         增添头文件搜寻路径,使用链接进行:
                          如: ln -s /usr/local/tengine/include/*  /usr/include/  或
                               ln -s /usr/local/tengine/include   /usr/include/tengine
                      4、man文件路径:安装在--prefix指定的目录下的man目录下,默认在/usr/share/man
                          若man不在默认路径下,查看man方式:
                          (1) man -M /PATH/TO/MAN_DIR COMMAND
                          (2) 在/etc/man.config中添加一条MANPATH
                          
                        例:利用httpd-2.2.16.tar.gz源码包,安装http:
                        [root@www ~]# tar xf httpd-2.2.16
                        [root@www ~]# cd httpd-2.2.16
                        [root@www httpd-2.2.16]# ./configure --help | less  #查看http源码包安装选项#
                        [root@www httpd-2.2.16]# rpm -q httpd  #确保没有使用RPM安装http#
                        [root@www httpd-2.2.16]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd
                        [root@www httpd-2.2.16]# make
                        [root@www httpd-2.2.16]# make install
                        [root@www apache]# vim /etc/profile.d/httpd.sh  #修改PATH环境变量,以能够识别此程序的二进制文件路径#
                        export PATH=$PATH:/usr/local/apache/bin  #二进制文件路径#
                        [root@www apache]# ldconfig -v #搜寻并显示系统已有的库文件#
                        [root@www apache]# vim /etc/ld.so.conf.d/httpd.conf #添加httpd.conf 库文件#
                        /usr/local/apache/lib  #库文件路径#
                        [root@www lib]# ln -sv /usr/local/apache/include /usr/include/httpd  #添加头文件搜寻路径#
                        [root@www lib]# vim /etc/man.config  #在/etc/man.config中添加一条MANPATH#
                        MANPATH /usr/local/apache/man #apache man文件路径#
                        [root@www lib]# netstat -tnlp #查看已有的80端口运行状态#
                        [root@www lib]# kill 861  #结束已有的80端口,进程号为861#
                        [root@www lib]# apachectl start #开启htttpd#
                        [root@www lib]# netstat -tnlp #查看httpd 80端口是否开启#
                        检测是否成功,可以在浏览器中输入本机IP地址
                        [root@www ~]# vim /usr/local/apache/htdocs/index.html #修改http 页面显示内容#
                        

I am an Xman!

  #将http 页面显示内容修改为I am an Xman!#
    netstat命令:
        -r:显示路由表
        -n:以数字方式显示        
        -t:显示建立的tcp连接
        -u:显示udp连接
        -l:显示监听状态连接
        -p:显示监听指定的套接字的进程的进程号与进程名
        例:[root@www ~]# netstat -tulnp

while循环:
    写一个脚本,完成以下功能:
    说明:此脚本能于同一个repo文件中创建多个yum源的指向:
    1、接受一个文件名作为参数,此文件存放至/etc/yum.repos.d目录中,且文件名以.repo为后缀;要求,此文件
       不能事先存在,否则,报错;
    2、在脚本中,提醒用户输入repo id;如果为quit,则退出脚本;否则,继续完成下面的步骤;
    3、repo name以及baseurl的路径,而后以repo文件的格式将其保存至指定的文件中;
    4、enabled默认为1,而gpgcheck默认设定为0;
    5、此脚本会循环执行多次,除非用户为repo id指定为quit;
    
    [root@www ~]# vim mkrepo.sh
    #!/bin/bash
    #
    REPOFILE=/etc/yum.repos.d/$1

    if [ -e $REPOFILE ]; then
        echo "$1 exists"
        exit 3
    fi

    read -p "Repository ID: " REPOID
    until [ $REPOID == 'quit' ]; do
        echo "[$REPOID]" >> $REPOFILE
        read -p "Repository name: " REPONAME
        echo "name=$REPONAME" >> $REPOFILE
        read -p "Repository Baseurl: " REPOURL
        echo "baseurl=$REPOURL" >> $REPOFILE
        echo -e 'enabled=1\ngpgcheck=0' >> $REPOFILE
        read -p "Repository ID: " REPOID
    done
    echo "hello,world."
    
    [root@www ~]# chmod +x mkrepo.sh
    [root@www ~]# ./mkrepo.sh hello.repo
    Repository ID: hello
    Repository name: hello
    Baseurl: file:///dev/media/cdrom
    Repository ID: quit
    hello,world.
    [root@www ~]# cd /etc/yum.repos.d
    [root@www yum.repos.d]# ls
    hello.repo  redhat.repo  rhel-debuginfo.repo  server.repo

while ,until,for 循环体:
break:提前退出循环
    例:写一个脚本:从1到1000中一次累加至大于5000结束脚本;
    [root@www ~]# vim sum.sh
    #!/bin/bash
    #
    declare -i SUM=0

    for I in {1..1000}; do
        let SUM+=$I
        if [ $SUM -gt 5000 ]; then
            break
        fi
    done
    echo $I
    echo $SUM
    
    [root@www ~]# chmod +x sum.sh
    [root@www ~]# ./sum.sh
    100
    5050
    
continue:提前结束本轮循环,而进入下一轮循环;

while 循环特殊用法一:
    while : ; do
     .....
    done

利用死循环查找文件路径是否存在:
[root@www ~]# vim showfile.sh
#!/bin/bash
#
while : ; do
    read -p "File path: " FILEPATH
    [ $FILEPATH == 'quit' ] && break
    if [ -e $FILEPATH ]; then
       echo "$FILEPATH exists."
    else
       echo "No $FILEPATH."
    fi
done

echo "Quit."

while 循环特殊用法二:
    while read LINE; do
    .....
    done < /PATH/TO/SOMEFILE
    
例1:判定/etc/passwd目录下哪个用户默认shell是/bin/bash,如果是,则显示该用户名,否则不显示;
[root@www ~]# vim showuser.sh
#!/bin/bash
#
FILE=/etc/passwd

while read LINE; do
   [ `echo $LINE | awk -F : '{print $7}'` == '/bin/bash' ] && echo $LINE | awk -F : '{print $1}'
done < $FILE


例2:判定/etc/passwd目录下哪个用户默认shell是/bin/bash,如果是,则显示前6位该用户名,否则不显示;
#!/bin/bash
#
FILE=/etc/passwd
let I=0

while read LINE; do
   [ `echo $LINE | awk -F : '{print $7}'` == '/bin/bash' ] && echo $LINE | awk -F : '{print $1}' && let I++
   [ $I -eq 6 ] && break
done < $FILE

例3:判定/etc/passwd目录下哪个用户默认shell是/bin/bash,如果是,则显示UID大于505的前6个用户的用户名,否则不显示;
[root@www ~]# vim showuser.sh
#!/bin/bash
#
FILE=/etc/passwd
let I=0

while read LINE; do
   [ `echo $LINE | awk -F : '{print $3}'` -le 505 ] && continue
   [ `echo $LINE | awk -F : '{print $7}'` == '/bin/bash' ] && echo $LINE | awk -F : '{print $1}' && let I++
   [ $I -eq 6 ] && break
done < $FILE

写一个脚本:
1、判断一个指定的bash脚本是否有语法错误;如果有错误,则提醒用户键入Q或q无视错误并退出,其他任何键可以通过vim打开这个指定的脚本;
2、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容,否则,正常关闭退出;
[root@www ~]# vim syntax.sh
#!/bin/bash
#
until bash -n $1 &> /dev/null; do
      read -p "Syntax error,[Qq] to quit, others for editing: " CHOICE
      case $CHOICE in
      q|Q)
          echo "Something wrong,quiting."
          exit 5
          ;;
      *)
          vim + $1
          ;;
      esac
done

[root@www ~]# chmod +x syntax.sh
[root@www ~]# vim worng.sh
#!/bin/bash
#

for [ $I=0]; do
  echo "smoething"
done

[root@www ~]# ./syntax.sh worng.sh

阅读(1112) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~