Linux笔记(基于CentOS)

Unix发展史:
    1969年,美国贝尔实验室的肯 汤普森在DEC PDP-7机器上开发出了UNIX系统,并和丹尼斯里奇开发完成B语言
    1971年,肯 汤普森的同时丹尼斯里奇除了UNIX正式版;1973年,完成C语言的开发并将Unix系统第三版用C语言重写,这为提高UNIX系统的可移植性打下基础


    常见的UNIX主要发型版本
        AIX         IBM      
        HP-UX       HP
        Solaris     Sun
        Linux、BSD  Red Hat


Linux发展史:
    1991年,芬兰大学生李纳斯和后来陆续加入的众多爱好者共同开发完成


    Linux主要发行版本:redhat centOS SUSE...
                        ubuntu
    Linux特点:
        开源、免费、安全、稳定
    缺点:
        易用性差、厂商支持性差
开源软件:
    php、http、python....
    特点:
        绝大多数开源软件免费
        可以获得软件源代码
        可以自由传播、改良甚至销售
Linux应用领域:
    基于Linux的网站服务器
    处理电影娱乐业
    嵌入式应用


/-----------------Linux安装(基于虚拟机)--------------------------/




虚拟机:
    VMware是一个虚拟PC的软件,可以在现有的操作系统上虚拟出一个新的硬件环境,相当于模拟出一台新的PC,以此来实现在一台机器上真正同时运行两个独立的操作系统
    VMware特点:
        不需要分区或重新开机就能在同一台Pc上使用多种操作系统
        本机系统可以与虚拟机系统网络通信
        可以设定并随时修改虚拟机操作系统的硬件环境


Linux安装事要:
    1.磁盘分区:
        磁盘分区是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分。
    2.分区类型:
        主分区:最多只能有4个
        扩展分区:
            最多只能有1个
            主分区加扩展分区最多有4个
            不能写入数据,只能包含逻辑分区
        逻辑分区:分区数超过3个后,自动出现在扩展分区里的描述分区。
    3.格式化(写入文件系统):
        windows:fat16(单文件容量最大2G)    fat32(单文件最大4G)     ntfs(单文件最大8G)
        Linux:  ext2    ext3    ext4
        //越新的文件系统,支持硬盘分区大小更大,单文件更大,读写速度更快,,数据更安全
    4. 硬件设备文件名
        硬件                 设备文件名
        IDE硬盘                 /dev/hd[a-d]
        SCSI/SATA/USB硬盘       /dev/sd[a-d]
        //    /dev/hda1 hd:IDE硬盘 sd:SCSI,SATA硬盘 a:第一块硬盘    1:第一个分区
        //    /dev/sdv5 第三块scsi硬盘的第一个逻辑分区
    5.挂载(给每个分区分配挂载点)
        windows中: 盘符
                    C:\
                    D:\
                    E:\
        Linux中:
            硬盘文件名---------指定挂载目录(盘符)
            /dev/sda1           /boot
        必须分区:
            /           ---根分区                                   
            swap分区    ---交换分区,内存2倍,不超过2GB
        推荐分区:
            /boot       --启动分区,200MB(相当于windows的隐藏分区)
    6.密码原则
        复杂性
            八位字符以上,大小写字母、数字、符号
            不能是英文单词
            不能和用户相关的内容
        易记忆性
        时效性


        栗子:
            Flzx_3QC    (飞流直下三千尺)
            !see(5tl)!sayshit(man)
    7.安装日志:
        /root/install.log   :存储了安装在系统中的软件包以及其版本信息
        /root/install.log.syslog:存储了安装过程中留下的事件记录
        /root/anaconda-ks.cfg:以Kickstart配置文件的格式记录安装过程中设置的选项信息
    8. 安装完成准备
        关闭防火墙
            使用Setup工具关闭
        关闭SELinux 曾强安全组件
            临时:setenforce 0
            永久:vim /etc/selinux/config   disabled    重启生效
        启动网卡
            vim  /etc/sysconfig/network-scipts/ifcfg-eth0
                修改ONBOOT="yes"
            重启网络服务
                service network restart


/---------------------Linux常用命令-----------------------------------/


Linux文件命名规则
    1.除了/之外,所有的字符都合法,但有些字符最好不用,如空格符、制表符、退格符和字符@#$%()-等
    2.避免使用 . 作为普通文件名第一个字符;
    3.大小写铭感(包括文件命名,命令,命令选项,用户名等)


Linux命令的格式
    命令    [选项]  [参数]
    栗子:    ls  -la /etc


    命令名称:ls
    命令英文愿意:list
    命令所在路径:/bin/ls
    执行全新啊:所有用户
    功能描述:   显示目录文件
    语法:ls [-ald] [文件或目录]
            -a  显示所有文件,包括隐藏文件
            -l  详细信息显示(长格式显示)
            -d  查看目录属性
    文件颜色
        1、默认色代表普通文件
        2、绿色代表可执行文件。
        3、红色代表tar压缩包文件
        4、蓝色代表目录文件
        5、洋红色代表图像文件
        6、青色代表连接文件
        7、黄色代表设备文件
        8、背景红色代表损坏的连接文件
        
        更多的文件颜色规则详见:/etc/DIR_COLOR 
    
    常见文件类型:
        -   普通文件
        l   连接文件
        d   目录文件


Linux命令提示符:
    [root@localhost src]#  
        [当前登录用户@主机名    当前所在目录]
            #   超级用户
            $   普通用户
        当前所在目录:  
            ~               用户家目录
            /root           管理员
            /home/用户名    普通用户
    (Linux系统严格区分大小写,包括命令和文件名)
Linux常见目录
        /       根目录
        /bin    命令保存目录(普通用户就可以读取的命令)
        /boot   启动目录,启动相关文件
        /dev    设备文件保存目录
        /etc    配置文件保存目录
        /home   普通用户的家目录
        /lib    系统库保存目录
        /mnt    挂载目录
        /root   超级用户的家目录
        /tmp    临时目录(重启后可清空)
        /sbin   命令保存目录(超级用户才能使用的目录)
        /proc   记录服务器内存及cpu情况的动态文件系统
        /sys    同上
        /usr    系统软件资源目录
            /usr/bin/       系统命令(普通用户)
            /usr/sbin/      系统命令(超级用户)
            /usr/local/     常用安装软件目录
        /var    系统相关文档内容
            /var/log/           系统日志位置
            /var/spool/mail/    系统默认邮箱位置
            /var/lib/mysql/     默认安装的myslq库文件目录




/--------------------Linux命令-----------------------------------/
一:目录操作命令
    1.cd    切换所在目录
        命令名称:cd
        命令英文愿意:change directory
        命令所在路径:shell内置命令
        执行权限:所有用户


        相对路径:参照当前所在目录,进行查找。一定要先确定当前所在目录。
            cd ../usr/local/src
        绝对路径:从根目录开始指定,逐级递归查找。在任何目录下,都能进入指定位置。
            cd /usr/local/src
        
        cd ~    进入当前用户的家目录
        cd      进入当前用户的家目录
        cd -    进入上次目录
        cd ..   进入上一级目录
        cd .    进入当前目录


    2.pwd显示当前所在目录
        命令名称:pwd
        命令英文原意:print working directory
        命令所在路径:/bin/pwd
        执行权限:所有用户


    3.mkdir文件出命令
        命令名称:mkdir
        命令英文愿意:make directories
        命令所在路径:/bin/mkdir
        执行权限:所有用户
        语法:mkdir -p[目录名]
        功能描述:创建新目录
                    -p递归创建
        栗子: mkdir newdir
            mkdir -p /11/22/33/44   (递归在根目录下创建11...)
    4、rm删除
        命令名称:rm
        命令英文原意:remove
        命令所在路径:/bin/rm
        执行权限:所有用户
            -rf 文件名
            -r  删除目录
            -f  强制删除
    5.cat   文件名  
        查看文件内容、从头到尾
        命令名称:cat
        命令所在路径:/bin/cat
        执行权限:所有用户


        -n  列出行号


    6.more  文件名 分屏显示文件内容
        命令所在路径:/bin/more
        执行权限:所有用户


        【空格向下翻页 B 向上翻页   Q退出】


    7.head  文件名  
        显示文件头
        命令所在路径:/usr/bin/head
        执行权限:所有用户


        head -n 行数 文件名 (指定显示文件头几行)
        head -n 20  文件名


        tail -n 行数    文件名  指定显示文件尾行


    8.连接文件
        ln
        命令名称:ln
        命令英文原意:link
        命令所在路径:/bin/ln


        ln  -s 源文件  目标文件     //软连接,相当于windows中的快捷方式
        ln     源文件  目标文件     //硬连接,拷贝加同步更新
                                    //不能给目录,不能跨分区
             文件名都必须写绝对路径,否则软连接移动后失效


文件和目录都能操作的命令:
    1.cp-复制
        命令名称:cp
        命令英文原意:copy
        命令所在路径:/bin/cp
        执行权限:所有用户


    cp  源文件  目标位置
        -r  复制目录
        -p  连带文件属性复制
        -d  若源文件是连接文件,则复制连接属性
        -a  相当于-pdr(all)


        cp aa /tmp/     原名复制
        cp aa /tmp/bb   改名复制


    2.剪切或改名
        命令名称:mv
        命令英文原意:move
        命令所在路径:/bin/mv
        执行权限:所有用户


        mv  源文件  目标位置
        栗子:
            mv  /root/aa /tmp/
            mv aa bb    (更改文件名字)
    3.修改权限
        - rwx rwx rwx
         文件类型、文档所有者权限、文档所在群组权限、其他访问者权限


         文档类型:
            -   普通文件
            d   目录文件
            l   连接文件
        文档权限代表
            r   读      4(十进制表示)100
            w   写      2(十进制表示)010
            x   执行    1(十进制表示)001
        chmod
        命令名称:chmod
        命令英文原意:change the permissions mode of a file
        命令所在路径:/bin/chmod
        执行权限:所有用户


        逻辑描述方法:
            属主权限:  u
            属组权限:  g
            其他人权限:o
        chmod u+x aa    //aa文件的属主加上执行权限
        数字描述法:
            chmod 777 aa
                // -rwxrwxrwx   aa
文件与目录权限区别:
    文件:
        'r' cat more head tail    查看文件内容
        'w' echo vi               修改文件内容
        'x' sh(execute)           执行
    目录
        'r' ls find tree          列入文件
        'w' touch mkdir rm        创建删除文件
        'x' cd                    进入目录


!!!!!!!!!!!!!!赋予权限要合理!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    对目录w权限,就意味着需要有rwx权限
    对脚本执行,需要rx并对该目录有rx权限




修改属主和属组:
    chown
        命令名称:chown
        命令英文原意:change file ownership
        命令所在路径:/bin/chown
        执行权限:所有用户


        chown 用户名 文件名  改变文件属主


        chown user1   aa     user1(必须存在)
        chown user1:user1  aa   改变属主同时改变属组
        chgrp  组名 文件名     改变文件属组


新建文件权限为644,新建目录权限为755
    umask  显示0022
    创建文件的默认权限掩码值
    第一位特殊权限位
    其他为三类用户的权限掩码值,用最大权限777减去
        777
       -022
    ----------
        755
    就是创建文件的默认权限


帮助命令:
    1、man命令  (查看命令的帮助-只用于有文件实体的命令)
        命令名称:man
        命令英文原意:manual
        命令所在路径:/usr/bin/man
        执行权限:所有用户


    2、help命令     (查看shell内核命令)
            用法:[命令] --help


查找命令:
    1、whereis 命令名       (查找命令的命令,同时看到帮助文档的位置)
        命令名称:whereis
        命令所在路径:/usr/bin/whereis
        执行权限:所有用户
        which   相同,可以看到命令的别名
    2、find 搜索文件命令
        通配符---常用于文件查找
          *         任意字符任意多个
          ?         任意字符一个
          []        指定范围值
          ^         反响匹配
          正则表达式---常用于内容查找
          .         除换行外任意字符
          *         任意个
          ?         0或1个
          ^         开头


          find命令
          命令名称:find
          命令所在路径:/usr/bin/find
          执行权限:所有用户


        1、按照文件名查找
            find    查找位置    -name   文件名
            find    /           -name   aabbcc      //精确超找文件aabbcc
            find    /etc        -name   init*       //超找在/etc下以initiative开头的文件
        2、按照用户


            -user   用户名  按照属主用户名查找文件
            -group  组名    按照属组组名查找文件
        3、按文件大小
            -size   +10k(大于10k),-10k(小于50k)
            find / =size +10k      查找/下大于10k的文件
            (默认单位512Byte)


        4、按照类型
            -type 类型  按照文件类型查找
                f:普通
                d:目录
                l:链接
        5、按照权限
            find /root -perm    644 (按照权限查找)
        6、按照文件名(不区分大小写)
            -iname      按照文件名查找,不区分大小写
        7、按照i节点
            -inum       按照i节点查找(文件ID号)
    逻辑连接符  -a(and) -o(or)
        多条件查找,条件之间可加逻辑连接符
            find /etc -size -10M -a -size +1M   
                (查找小于10M并大于1M的文件)
对查找到的文件进一步处理
        
    find ... -exec 命令 {} \;
        {}表示find查询的结果集
        \是转义符  表示一个命令或符号使用其本身的意义,不使用别名
        ; 分号是表示语句的结束(固定格式,只能这样写,中间有空格)


    转义符的作用是什么?
        在linux中有一个别名机制,如rm删除文件,执行的确实rm -i  (用which rm 可以查看命令别名),使用rm删除文件前会提示,就是因为rm -i 这个参数。如果想使用命令原意,可以在加\转义
        栗子:\rm test.txt  则不会提示,直接删除


    3、grep     “字符串”文件名
        (查找符合条件的字串行)
        命令名称:grep
        命令所在路径:/bin/grep
        执行权限:所有用户


        grep -i "root" /etc/passwd
            -v  反向选择
            -i  忽略大小写
        find:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配。通配符是完全匹配
        gerp:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式匹配,正则表达式是否包含匹配


压缩和解压缩
    格式:
        .gz .bz2        linux可以识别的常见压缩格式
        .tar.gz .tar.bz2    常见的压缩和打包命令


        压缩同时打包
            tar -zcvf   压缩文件名  源文件
            tar -zcvf   aa.tar.gz aa
                -z  压缩.gz格式
                -j  压缩.bz2格式


                -c  打包
                -v  显示压缩过程
                -f  指定压缩包名
            (注意:选项f必须在最后,否则报错)
            tar -zxvf   压缩文件名  解压缩同时解打包
                -x  解压缩
            查看未解压缩的包内容
                tar -ztvf aa.tar.gz (查看不解包)
                tar -jtvf aa.tar.bz2
                    -t  只查看,不解压
                tar -jxvf root.tar.bz2 -C /tmp/(指定解压缩位置)


网络命令
    1、ping 测试网络连通性
        ping -c 次数 ip 探测网络通畅
    2、ifconfig 查询本机网络信息
        可临时修改网卡ip
            ifconfig eth0 192.168.1.1 mask 255.255.255.9
    3、netstat  查看网络状态的命令
        -t  查看tcp端口
        -u  查看udp端口
        -l  监听
        -n  以ip和端口号显示,不用域名和服务器名显示
        -a  查询所有连接
        -p  查看进程名


        通常用 netstat -ptlun
    4、write 和 wall(=write all)  广播命令
        write   user 回车
            》发送内容
            》Ctrl+D 保存发送
        wall 回车
            》发送内容
            》Ctrl+D保存发送
            所有用户都能收到信息
关闭和重启命令
    1、shutdown -h now  没有特殊情况,使用次命令
            -h  关机
            -r  重启
        shutdown -r now 等同于 reboot


挂载命令
    linux所有存储设备使用前必须要挂载,包括硬盘(硬盘开机自动挂载)U盘等需要手动挂载


    mount挂载
        命令名称:mount
        命令所在路径:/bin/mount
        执行权限:所有用户


        光盘挂载
            /dev/sdal   第一个scsi硬盘的第一分区
            /dev/cdrom  光盘设配软连接
            /dev/hdc    光盘设配名  centos5.5
            /dev/sr0    光盘设备名  centos6.x
            (以上三个文件都是一回事,版本不同而已)
            
            mount -t 文件系统 设备描述文件 挂在点(已经存在空目录)


            栗子:mount -t iso9660 /dev/cdrom /mnt/cdrom


            光盘卸载:
                umount   /dev/cdrom
                umount   /mnt/cdrom     强调:退出挂载目录,才能卸载


            U盘挂载
                fdisk   -l  查看设备识别情况,u盘插入后会识别为sdb
                mount -t vfat /dev/sdb1 /mnt/usb    
                CentOS6.x系列挂载时不需要指定-t类型也能自动识别挂载成功!!


/========================Vim操作========================================================/           


1、常用模式操作命令
    1、插入
        i   在光标所在字符后插入
        I   在光标所在行尾插入
        a   在光标所在字符前插入
        A   在光标所在行首插入
        o   在光标下插入新行
        O   在光标上插入新行
    2、定位
        小范围移动 h j k l  对应方向:← ↓ ↑ →
        :set nu     设置行号
        :set nonu   取消行号


        gg          到文章第一行
        G           到文章最后一行
        nG          到第N行
        :n          到第N行
    3、替换和撤销
        
        r           取代光标所在字符
        R           开启替换模式一直替换知道esc结束


        u           撤销
        Ctrl+r      反撤销
    4、搜索和替换
        "/string"         查找指定字符串
                        :set ic 忽略大小写
            n 从结果中查找下一个
            N 从结果中查找上一个
        :$s/old/new/g   全文替换指定字符串
        :$s/old/new/c   全文替换指定字符串,每次替换询问


        :n1,m2s/old/new/g   在指定范围替换指定字符串


    小技巧:
        :1,5s/^#/g       注释1到5行
        :1,5s/^#//g      取消注释
        :1,5s/^/\/\//g   文件头加入//


        显示颜色高亮
            :synatax on  开启高亮
            :synatax off 关闭高亮
    Vim配置文件
        自定义配置
            ~/.vimrc文件,没有手动创建


************************软件包管理********************************************************


    一、软件包分类
        1、二进制包(rpm)  
            特点:安装速度快    简易
            缺点:自定义性差    依赖性
                a-->b-->c           树形依赖
                a-->b-->c-->a       环形依赖(这玩意要怎么安装!)


        2、源码包
            由软件开发源码组成,安装时需要编译工具如gcc、gcc-c++等
            
            优点:特点、开源、定制
            缺点:安装时间长,一旦报错,不易解决


        3、脚本安装包
            shell脚本编写的安装包 实际内容依然是两种安装的方式,安装过程可以交互


二、二进制安装包的管理(rpm)
        
        1.rpm管理工具
            1、软件包命名
                
                包名-版本号-发布次数-适合linux系统-硬件平台.rpm


                操作没有安装过的软件包,软件包使用包全名
                否则直接使用包名
        2.安装与升级卸载等
            rpm -ivh    包全名(绝对路径,一般在光盘的软件包目录中[Packages])


                -i  安装
                -v  显示详细信息
                -h  显示进度
                -U  升级
                -e  卸载
                    --nodeps不检查依赖性,强卸载!
            查询
                -q      查询包是否安装
                -qa |  grep httpd   显示所有安装包
                -qi     查询包的信息
                -p      查询未安装包的信息
                -qip    查询没有安装包的信息
                -i      information
                -ql     查询包中文件的安装位置
                -qlp    查询没有安装的包,打算安装位置
                -l      list
                -qf     查询系统文件输入哪个包


            开启/关闭 服务
                service httpd restart|start|stop|status
    yum在线管理工具(相当于windows下360软件管家)
        
            1、安装
                yum -y install  包名
                    -y  自动回答yes
            2、卸载
                yum -y remove   包名
            3、升级(有网络)
                yum -y update   包名
            4、查看
                yum list        查看所有可以安装的包


        【如果没有网络,yum管理工具可以将多媒体软件库作为yum源(池),继续完成软件管理】


        yum默认将/etc/yum.repo.d/CentOS-base.repo文件作为第一yum原配置文件,此文件描述了网络站点的下载地址,
        如果此文件存在,则继续上网安装,断网时会安装失败。需要将yum源切换为光盘的多媒体文件中去


        将光盘作为yum源
            1、将yum第一源文移走或改名
                mv /etc/yum.repo.d/CentOS-base.repo /root/
            2、挂载光盘
                mount /dev/cdrom    /mnt/cdrom
            3、修改media配置文件,指定yum源为挂载点
                vim /etc/yum.repos/d/CentOS-Media.repo
                #修改开始#
                    baseurl=file:///mnt/cdrom/  指定yum源位置
                    enabled=1                   yum源文件生效
                    gpgcheck=1                  rpm验证不生效
                测试安装
                    yum -y install gcc      (gcc是c语言编译器,不装gcc,源码包不能安装)


三、源码包安装
    
    1、上传软件包
        使用winscp等工具远程连接linux,上传所需安装包
        
    2、安装(重点)
        1、解压
            tar -xf 包文件
        2、cd解压目录
            进入解压文件目录
        3、查看安装文档
            README  INSTALL
        4、检测
            ./config --prefix=/usr/local/apache2


            功能:
                1、检测系统环境,生成Mackfile
                2、定义软件选项
                    --prefix指定软件安装目录
        5、编译
            make
            【若编译失败使用make clean清楚编译文件】
        6、安装
            make install
        【报错判断:
            第一:安装过程是否停止
            第二:停止处是否出现error wraning no 等错误报警】
        7、启动
            /usr/local/apache2/bin/apachect1 start
            【与yum安装方式区别开】


    [源码包的启动脚本大多存在与安装目录中]


        8、卸载
            直接删除安装目录
                rm -rf /usr/local/apache2/
                
/=================About shell================================================================/
什么是shell
    命令解析器,帮助人际交互的翻译官
    windows的桌面也是shell的一种!
linux的shell有
    /etc/shells     记录该Linux安装了那些shell
        B类         sh  bash
        C类         tcsh
        shell不同,命令提示符不同
        几乎所有Linux缺省都是bash(Bourne-again Shell),非常适合于一些管理操作
        一些比较老的unix,缺省都是sh


重点来了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    bash提供常用功能如下:
        一、命令补全
            使用tab建
            如果不是唯一,按两下全部列出
        二、快捷操作
            Ctrl+C      终止命令
            Ctrl+A      光标到行首
            Ctrl+E      光标到行尾
            Ctrl+U      剪切光标前内容
            Ctrl+K      剪切光标后内容
            Ctrl+Y      粘帖剪切的内容
            Ctrl+L      清理屏幕
            Ctrl+D      注销登录 相当于exit和logout 或者保存
            Ctrl+Z      将进程在后台挂起
            Ctrl+Q      可以接触Ctrl+S的文件保存锁定
    命令历史
        history     列出所有的命令(默认最多保存条数1000)
        !序号       执行历史中第几条命令
        !命令       执行最近的这条命令
        按向上(或向下)箭头,翻出历史记录
    命令别名
        别名:类似快捷键
        命令:alias


        添加一个别名(临时)
            alias copy=cp   就可以用copy来复制文件了


        如果有参数:
            alias drm="rm -rf"
        删除别名:  
            unalias copy
       
       别名永久修改
        在用户宿主目录:~/.bashrc文件中添加别名信息如:alias vi=vim
        重启生效 或者 source ~/.bashrc及时生效


        拓展:
            source命令
            作用:在当前bash环境下读取并执行Filename中的命令
                    该命令可用"."来代替【一般情况下】
输入输出重定向
    shell对于每个进程预先定义了3个文件描述字
        0 标准输入  STDIN   键盘
        1 标准输出  STDOUT  显示器
        2 标准错误输出  STDERR
        重定向:就是改变这个标准设备,不用键盘输入,不用显示器输出


    1、输出重定向
        >或>>


        栗子:
            echo hell   直接输出的到显示器上
            echo hell >test.txt 将输出定向到test.txt中


            追加写入用>>


    2、输入重定向
        栗子:wall

    3、错误输出重定向
            2>或2>> #描述字和符号之间不许有空格
        栗子:
            ls /aaaaaa 2>ls.err
管道连接符
    将一个命令的输出传送给另一个命令,作为另一个命令的输入


        用法:
            命令1|命令2|命令3
    栗子:
        ls -l/etc | more


    一个新的命令:wc -l统计文件有多少行
命令连接符
    ";"
        不管执行是否成功,多个命令依次执行
    栗子:pwd;ls;date
    "&&"
        前面执行成功,才执行后面的命令,如果前面的命令错误,后面终止执行


    "||"
        前面执行失败,才执行后面的命令


/**********************用户管理***************************************************/
用户及用户组配置文件
    用户信息文件:/etc/passwd(重要)
    用户密码文件:/etc/shadow
    用户组信息文件:/etc/group


/etc/passwd 文件中格式
    用户名:用户名,字段和字母组成
    密码:标识,代表密码位,并不存放真实密码
    UID:用户ID
    GID:初始组ID
    描述:描述用户的信息
    宿主目录:用户登录时的缺省目录
    命令解析器:使用哪种shell,默认为bash
    
    栗子:
        1 root:x:0:0:root:/root:/bin/bash
            第一部分:用户名
            第二部分:密码位
            第三部分:用户id=uid
            第四部分:组id=groupid
            第五部分:描述给管理员
            第六部分:宿主目录=家目录
            第七部分:该用户命令解析器


用户类型:
    Linux用户分为3种
        超级用户:root UID=0
        普通用户:UID=[500-60000]
        伪用户:UID=[1-499]
        (伪用户因系统应用和程序服务而存在,如bin、shutdown、reboot)
            伪用户通常不需要或无法登录  nologin
            大多数没有宿主目录,个别存在


/etc/shadow
        栗子:
            1 root:$6$MhdbjN/aFqpcLIzd$uXWtWWklREIuwDmDjcjFxL8Csyrdu7ZFM15CuCAbCsbpCP4Cu4N    Nz3gaDvlVqncGZLDGK.1771fthk3Lsjwz6.:16684:0:99999:7:::
        第一部分:用户名
        第二部分:用$分成三部分
                    1、加密类型 6 SHA-512 5 sha-256  1 md5
                    2、盐值(salt)   增加密码复杂度
                    3、加密密文
        第三部分:单位天
                    最后一次密码修改时间 相对UNIX时间元年 19700101
        第四部分:单位天
                    密码最小修改时间间隔
        第五部分:单位天
                    密码有效时间    99999
        第七部分:单位天
                    密码失效补救时间
        第八部分:单位天
                    密码失效时间    相对于UNIX时间元年 197000101
        第九部分:缺省  未来使用


/etc/group
        栗子:
              1 root:x:0:
              第一部分:组名
              第二部分:组密码
              第三部分:组ID=GID
              第四部分:组内用户列表
                            (将改组当做附属组的用户,用逗号分割)


如何手动添加一个用户
    1、建立所需组群
    2、将/etc/group和/etc/gshadow同步化
    3、建立帐号属性
    4、将/etc/passwd和/etc/shadow同步化
    5、建立帐号密码
    6、建立家目录
    7、修改家目录权限


创建用户:
        用户及用户组管理命令
            添加    useradd     groupadd
            修改    usermod     groupmod
            删除    userdel     groupdel
            密码    passwd      gpasswd
            查看用户信息    id
            切换用户        su


        命令格式:useradd   选项    用户名
                -g  缺省组(默认为用户名组)
                -G  所属组(添加多个用户组,用','隔开)
                -c  描述信息
                -d  指定家目录
密码及删除
        passwd 用户名
        -l 锁定
        -u 解锁
        (只有root有权限)


        userdel -r 用户名
            -r:删除用户相关文件,建议使用
修改用户信息
    usermod
        -g  修改缺省组
        -G  修改所属组
        -l  改名
        -c  改备注
        -e  过期时间
        -L  锁定用户
        -U  解锁
        -aG 追加所属组


添加用户组
    groupadd    组名
    修改:groupmod  选项 组名
            -n: 修改组名
        groupmod -n newname oldname
    删除组:grpupdel 
    组密码:gpasswd -a 用户名 组名
    -a添加用户到组
    -d删除用户从组






特殊权限:
    SetUID
        ls -l /usr/bin/passwd
        chmod 4755 filename
        chmod u+s filename
    SetGid chmod 2755 file
    SetBIT  chomod 1777 dirname
        ls -ld /tmp


特殊权限位的理解
    危险的实验:
        将vi命令赋予setUID


        修改passwd文件和shadow文件
    特殊权限的作用
        当你在普通用户执行vi时,这一刻root附体
        setGID效果同setUID,想用root组权限
        粘着位的作用:创造一块各玩各的空间
        
ACL权限
    ACl,一个文件/目录访问控制列表,可针对指定的用户/组分配RWX权限
watch 
    设置权限:
        setfacl -m
        setfacl -m u:用户名:权限 文件名
        setfacl -m g:组名:权限 文件名
        栗子: setfacl -m u:jack:rx /backup
    设置ACL命令的参数


    -m:设定权限
    -x:移除指定权限
        setfacl -x u:jack   /backup
    -b:移除所有权限
    -R:递归设置(对于目录)
    继承设置:setfacl -m d:u:jack:rwx -R /test
        对于新创建的文件和目录也生效
    查看ACL权限:getfacl文件(唱歌时后面多个+)




Linux忘记密码怎么办:
    在启动界面按任意键进入GRUB目录


    把Kernel行文件打开 在最后加个"1" 回车保存后按B进入单用户模式进行改密码




/******************Linux进程管理***********************************************/


进程和程序的区别
    一动一静,对应关系-多对多


父进程与子进程
    老子管儿子,僵尸和孤儿
前台进程和后台进程


前台进程
    ping 127.0.0.01>>ping.result
    创建一个子进程,运行命令,shell等待他
    结束,才能返回给用户提示符。
    这条命令在前台运行,用户在它完成之前不能执行另一个命令


后台进程
    ping 127.0.0.1>>ping.result&
    若后随一个&,shell创建子进程运行此命令
    但不等待命令退出,而是直接返回到对用户给出提示。
    [后台进程必须是非交互式的]


    插入一命令:
        watch
            检测一个命令的运行结果。
            可以拿他来检测你想要的一切命令的结果变化,比如tail一个log问及那
            ls检测某个文件的大小变化
        watch [参数][命令]
            -n  watch缺省每2秒运行一个程序,可以用-n来指定间隔的时间
            -d  会高亮显示变化的区域
            -t  会关闭watch命令在顶部的时间间隔
        watch -n 1 ls -l


进程常用命令
    1、w   显示目前登入系统的用户信息
        -f  开启或关闭显示用户从何登入系统
        -l  使用详细格式列表


    2、who
        简单查看登录者的信息
    3、ps查看进程信息(process status)
        -a  显示终端下的进程(当前用户进程)
        -u  显示用户和启动时间
        -x  表示没有控制终端的进程
        -e  显示所有进程
        -l  长格式显示
        -uU用户名   查看系统中指定用户执行的进程
        ps  -le 或aux   查看所有用户执行的进程详细信息


        常见选项的含义
            PID     进程号  1为init系统第一个进程
            PPID    父进程的进程号
            TTY     启动的终端  tty1-7本地  1-6字符 7图形 pts/n远程
            STAT    进程当前状态:s休眠 D不可中断的休眠 R运行 Z僵死 T停止
            NI      进程优先级
            TIME    进程自启动依赖站CPU的总时间
            COM     进程的命令名
            USER    用户名 
            %CPU    占CPU时间和总时间的百分比
            %MEM    占用内存与系统内存的百分比
            start   进程触发的时间
            tim     占CPU的时间
            command 进程本身
    kill    杀死一个进程
        kill    进程号(PID)
    kill的信号  kill-l可以列出很多
        常用:kill -9 进程号(强行关闭)
              kill -1 进程号(重启进程)
        关闭图像程序    xkill 鼠标按哪,关闭那
        结束所有同名进程 killall -9 进程名称 


    5、以p开头的命令
        pgrep httpd 查看 httpd进程的所有pid
        重启apache进程:kill -1 'pgergp httpd'


        pkill httpd 直接关闭httpd进程,不用pid了


    6、优先级命令
        nice    
            指定程序进行的优先级
            格式:nice a myprogram
            列:nice --5 /etc/rc.d/init.d/httpd start(默认是0,指定为-5)


            ps -le | grep httpd
        renice
            改变一个正在进行的进程的ø优先级
            栗子: renice n pid
            优先级取值范围(-20,19)默认值为0 值越小,权越大
            ps -le 中,NI就是优先级
    7、前后台进程操作
        一个符号:
            把进程放到后台运行 在后面加&
                ping 127.0.0.1>>/test/ping.result&
                另一个终端去查看
                tail -f/test/ping.result
        两个操作:
            进程的挂起和终止
                挂起 Ctrl+z 暂停
                终止 Ctrl+c
        三个命令:
            查看被挂起或在后台执行的过程
                jobs
            进程的恢复
                fg[序号]    恢复到前台继续运行
                bg[序号]    恢复到后台继续运行
                若不加序号,则默认将命令作用与+修饰的进程
    8、top命令
        显示,管理执行中的程序
        语法:
            top [bciqsS][d<间隔秒数>][n<执行次数>]


            执行top指令可显示目前正在系统中执行的程序,并通过它所提供的互动界面,用热键加以管理
            上面的信息,类似与w显示的信息
            下面类似与ps -le信息
            内置命令:
                d   间隔描述
                c   显示整个命令行,而不仅仅显示命令名 command
                u   用户名 只显示某用户的信息,管理员可以看某用户在干嘛
                k   提示输入pid关闭进程
                r   调整优先级
                M   内存排序
                p   CPU排序
                q   退出
    9、free-m   查看内存状态
    
    10、查看proc文件下信息
        ls/proc
        该目录存放的是进程信息,数字以pid为目录名,信息存放在目录中
        cat /proc/cpuinfo   查看cpu信息
        cat /proc/menminfo  内存信息
        cat /proc/partitions    分区信息


/**********************进程分类****************************************************/
1、分类
    standalone      独立运行
    xinetd          进程托管
    atd、crond      计划任务


    standalone      独立运行
        如apache、mysql的服务,启动后,进程会一直在系统中
        占用cpu的 内存资源,等待或处理客户端的请求
        占用系统资源多,但响应速度快
    xinetd     进程托管(需要独立安装yum -y install xinetd)
        有些服务,用的很少,没必要独立运行 列入telnet
        ls /etc/xinetd.d查看这个目录有很多脚本
        服务不启动,由xinetd监听这个端口,有客户端访问,则启动进程,等服务完成后,结束进程
        响应速度慢一点,但减少了系统资源占用
    atd、crond计划任务
        每隔一分钟,从休眠中醒来一次,所以,计划任务不能精确到秒


2、管理
        #chkconfig --list


        运行级别:0-6
            0 关机
            1 单用户模式
            2 不完全多用户
            3 完全多用户
            4 未分配
            5 图形界面
            6 重启
        
        init 0 关机
        init 6 重启


    runlevel    查询系统当前运行级别
        vi  /etc/inittab
        id:3:initdefault:   定义系统默认运行级别


    列出在每一种运行级别下服务是启动还是关闭
        chkconfig --list|grep atd(查看计划任务服务)


    3 、启动服务
        rpm 包安装的服务
            service 服务名 start|stop|restart|status
            
            设置开机自启动
                vi /etc/rc.local        ===>/etc/rc.d/rc.local
            ntsysv  
                所有系统默认安装服务都可以使用ntsysv命令进行自启动管理


        源码包安装的服务
            绝对路径启动
                /usr/local/apache2/bin/apache2 start
            开机自启动
                vim /etc/rc.local
                写入启动命令
                /usr/local/apache2/bin/apache1 start




***************************计划任务********************************************


主要分为两种计划任务:
    一次性计划任务
    周期性计划任务
    
一次性计划任务:    
    1、指定时间的方式
        绝对计时方法
            midnight 午夜
            noon    中午
            teatime 下午茶(16:00)
            hh:mm[todayo]
            hh:mm tomorrow
            hh:mm MM/DD/YY
        相对计时方法
            now+n minutes
            now+n hours
            now+n days
        具体看帮助 man at
    2、如何设定系统时间
        系统时钟:date
        设置日期:date -s '1995-11-25 11:00'


        硬件时钟
            clock--systohc  将系统时间存回硬件时钟内
            clock--hctosys  系统时间设成和硬件时钟一致
    3、任务设定
        指定在今天下午17:30执行某命令,假设当前时间是2013年1-15


        at 17:30
        at now+3 hours回车进入编辑命令
        栗子
            at now + 1 minutes回车
            /usr/bin/wall "Hello World!"
    4、查看任务
        查看队列中的任务
            at-l 或 atq


        存放在这里
            ls/var/spool/at/的一个可执行文件,任务执行后文件消失
    5、删除任务
        删除一次性计划任务
        ad -d 序号
    7、低负载计划任务batch(拓展)
        batch用法与at一样
            无需指定时间,安排在系统负载较轻是运行一次
            一般负载低指0.8(w或top命令能看到)
周期性计划任务
    1、crontab命令  
        周期性计划任务
            三个常用选项:
                -l 列出当前crontab
                -r 删除当前的crontab
                -e 编辑当前的crontab文件


        crontab -e
            内容格式:分  时  日  月  周 命令/脚本


            栗子:
                每天04:00
                    0 4 * * *   /usr/local/apache2/bin/apachel start
                周二和周五18:00
                    0 18 * * 2,5
                1月到3月,周二和周五18:00
                    0 18 * 1-3 2,5


                !写命令时,最好写上出错信息!
                /bin/cp -r/etc/backup/etc.bak 2>>error.err


            3、特殊匹配符号
                多个值用    ","
                连续的值    "-"
                任务匹配    "*"
                步长        "/n"
            4、执行命令 
                命令给出绝对路径
                用户必须具有运行的权限
                
                保存在/var/spool/cron


                检查crond进程是否开启
                ps -le|gerp crond
                /etc/rc.d/init.d/crond start
            5、权限设置
                限制那些用户可以使用crontab
                    /etc/cron.allow
                    /etc/con.deny




***************************VSFTP*********************************************


Ftp遵循网络层ftp协议,三次握手建立连接后开始交互


默认两个端口
    20          数据传输
    21          命令传输
(防火墙PortBB会拦截文件传输)


安装vsftpd服务
    yum -y install vsftpd
    启动 service vsftpd start


    默认启动后,即支持普通用户宿主目录访问及匿名访问


匿名访问
    用户名:ftp 或 anonymous
    密码为空
    
    window下ftp常用命令
        连接:ftp 192.168.10.123
        ls  查看所在目录文件信息
        cd 切换ftp上的目录
        get 下载单个文件
        put 上传
        bin 切换到使用二进制传输方式
        ascii   借还到文本传输方式
        lcd     指定下载到本机的哪个目录
        prompt  关闭交互模式
        mput    上传多个(先关闭交互模式,多个文件之间用空格分割)
        mget    下载多个
        bye     退出


    配置文件
        vim /etc/vsftpd/vsftpd.conf


        匿名用户:
            anonymous_enable=YES    是否允许匿名用户访问 关闭:改为NO
            anon_upload_enable=YES 匿名用户允许上床,默认注释了
            anon_mkdir_write_enable=YES 匿名用户允许创建目录,默认是注释了
            anon_max_rate=100000追加    匿名用户最大传输速率为100kb/s
        (记得修改目录LInux文件系统权限!!!)
    日志
        xferlog_enable=YES是否使用日志
            (精良要生成日志)
        xferlog_std_format=YES  日志使用标准的格式
        xferlog_file=/var/log/xferlog   日志文件存放的位置, 需要开启
    用户访问
        默认普通用户,直接可以登录访问宿主目录
            默认可以上传下载


        local_enable=YES
        write_enable=YES
        loacl_umask=022 #创建的目录权限为755
        local_max_rate=20000    追加用户最大传输速率为 200kb/s


        (只要系统中的普通用户,默认都能登录ftp,这样有安全隐患)
    访问列表
        限制指定用户不能访问,而其他用户可以访问
            userlist_enable=YES
            userlist_deny=YES
            userlist_file=/etc/vsftpd/user_list
        栗子:
            限制指定用户能访问,其他用户不能访问
            userlist_enable=YES
            userlist_deny=NO
            userlist_file=/etc/vsftpd/user_list
            vi /etc/vsftpd/user_list #一个用户一行
    限定用户
        chroot 让ftp用户把宿主目录当作根目录,这样不能切换其他目录了
            chroot_local_user=YES
        控制那些用户不受此限制
          chroot_list_enable=YES       白名单  NO  黑名单
       chroot_list_file=/etc/vsftpd/chroot_list    #一个用户一行,列表中的用户,不受chroot限制


其他
    ftp_banner=Welcome to blah FTP service  
    欢迎信息,防止透露出ftp的软件版本好


    idle_session_timeout=600    空闲10分钟后被挂断
    max_clients=50              服务器总并发连接数
    max_per_ip=3                每个客户机最大连接数
    list_port=10011             指定一个非标准端口  默认连接为21 传输20
            
扩展:
    nmap端口扫描工具
        
        用法:
        nmap {IP}
        nmap    默认只扫描知名端口
        nmap -pl-65535 192.168.10.10    扫描全部端口(1到65535)
        


************************Samba服务器**************************************************


samba服务器在unix系统中实现了smb/cifs协议
通过Samba服务可以实现UNIX/Linux主机与windows主机之间的资源互访


特点:
    必须是系统用户,但使用独立密码
    默认安装samba并添加用户(smbpasswd -a 用户名),即可访问自己的宿主目录(可读写)
查看是否安装了samba
    rpm -q samba
安装
    yum -y install samba
启动
    service smb start
两个进程:
    smbd ==>tcp 139 用户验证和文件共享
    nmbd ==>udp 137 138 浏览共享和计算机名解析


用户管理
    1、首先必须是系统用户,添加Linux系统用户
设置samba的密码(samba自带的用户管理工具)
    smbpasswd -a 用户名     #加用户
    smbpasswd 用户名        该密码
roo用户可以使用管理命令
    pdbedit -a username:新建samba账户
    pdbedit -x username:删除samba账户
    pdbedit -L:列出samba用户列表:读取/etc/samba/passdb.tdb数据库文件
    pdbedit -Lv:列出samba用户列表的详细信息


建立samba连接
    
    windows中连接samba
    可以映射网络驱动器
    net use
    net use * /de/y
    net use \\192.168.10.123 "password" /user:your_user


    防火墙:
        iptables -L查看
        iptables -F 清空防火墙规则,拆除防火墙
    及时生效,重启后复原
        service iptables stop
    永久生效,重启后不会复原
    SElinxu
        允许访问
            setsebool -P samba_enable_home_dirs on
        或完全禁用
            vi /etc/selinux/config  改为SELINUX=disabled


Samba配置文件
    vim /etc/samba/smb.conf
    
    [global]全局环境选项:
        workgroup   工作组或域
        server string   描述信息
        security    安全模式,有如下选项
            share   不验证权限,直接共享
            user    缺省,推荐有linux samba服务器做验证
            server  第三方主机验证
            domain  第三方主机验证(必须是windows 域控制器)
        hosts allow 那些主机可以访问(缺省所有主机都可以)
                哪些主机不允许访问,hosts deny 一般不和hosts allow同时使用
        log file 日志文件(最好开)


    [homes] 只要有这个配置段,用户默认就可以通过自己的用户名,访问自己的宿主目录
        comment 描述
        browseable=no   无权限访问的目录,不显示出来
  


/*******************Apache配置*************************************/


1、www: worl wide web 万维网
    http协议    超文本传输协议
    html语言:  超文本标识语言
2、URL统一资源定位符    协议+域名:
    
3、apache配置文件
        默认网页保存位置:
            源码包:/usr/local/apache2/htdocs/
            rpm包安装:/var/www/html/
        日志保存位置:
            源码包:/usr/local/apache2/logs/
            rpm包:/var/log/httpd/
        配置文件位置:
            /usr/local/apache2/etc/httpd.conf




日志轮替
    日志需要轮替:
        1、切割(年月日)
        2、轮替 route 30
    Logrotate:
        vi /etc/logrotate.conf
            /usr/local/apache2/logs/access_log{
                daily
                create
                dateext
                rotate 30
            }
        [root@localhost~]#logrotate -f /etc/logrotate.conf强制刷新截取日志
            Error_log也要进行轮替
配置文件
    针对主机环境的基本配置
        ServerRoot          apache主目录
        Listen              监听端口
        LoadModule          加载的相关模块
        User.Group          用户和组
                            将htdocs目录用户组和用户改为daemon,之后可以。
        ServerAdmin         管理员邮箱
        ServerName          服务器名(没有域名解析时,使用临时解析。不开启)
        ErrorLog"logs/error_log  错误日志
        CustomLog"logs/access_log common        正确访问日志
        DirectoryIndex index.html   index.php   默认网页文件名,优先级顺序
        Include /etc/extra/httpd-vhosts.conf    子配置文件中内容也会加载生效


    主页目录及权限
        DocumentRoot    "/usr/local/apache2/htdocs"
        主页目录
       
            #Directory关键字定义目录权限
            Options Index FollowSymLinks
                #options
                    None:没有任何额外权限
                    All:所有权限
                    Indexes:    浏览权限(当此目录下米有默认网页问件事,显示目录)
                    FollowSymLinks:准许软件连接到其他目录
            AllowOverride None
                #定义是否允许目录下.htaccess文件中的权限生效
                    None:.htaccess中权限不生效
                    All:文件中所有权限都生效
                    AuthConfig:文件中,只有我那工业认证的权限生效。
            Require all granted 访问控制列表
        定义此目录的允许访问权限:
            
            栗子:
                仅仅允许ip为192.168.1.1的主机访问
               
                    require all granted
                    Require ip 192.168.1.1
               



目录别名:
    子配置文件名:
        etc/extra/httpd-autoindex.conf
    开启配置文件
        Alias /icons/ "/usr/local/apache2//icons/"
            apache以为在这里        实际目录位置


        定义别名    /icons/---- 
                    http://192.168.1.253/icons/
       
            Options Indexes MultiViews
            AllowOverride None
            Require all granted
       



        4、用户认证
                限制特定目录,只有指定用户可以访问
                1、建立需要保护的目录
                    使用别名,在系统位置建立目录,然后保护
                        mkdir -p /share/soft
                2、修改配置文件,允许权限文件生效

你可能感兴趣的:(Linux,linux,centos)