linux3-shell指令

一、指令(sehll)

    0、linux下的Shell
        推荐看《linux命令、编辑器和shell编程》
        类似于win下的bat批处理文件

        1、shell的分类
            shell名称 开发者         命令名称
            Bourne      S.R Bourne      /bin/sh
            C           Bill Joy        /bin/csh
            Kom         David           /bin/ksh

            ls /bin/*sh -l      查看系统上有哪些shell
            chsh -s /bin/csh  将目前使用的shell切换到csh
        2、
            shell的命令补全功能
                直接输入mk----再按2下tab键-----出现以mk开头的命令
                cap p----再按2下tab键-----出现以p开关的目录/文件
            
            history     查阅历史记录命令
                history 5   显示最近使用的5个命令
                !5          执行历史编号为5的命令
                !ls         执行最后一次认”ls“开头的命令
        3、shell的使用
            3.1)用户登录后自动执行的shell脚本文件:
                .bashrc 位于主目录下(可以指定某些程序在用户登录的时候就自动启动)
                    它之前先执行系统的脚本/etc/bashrc,主要是基本配置数据
                .bash_profile 位于主目录下
                    它之前执行系统的脚本/etc/profile,主要是配置环境变量

                /etc/profile 系统环境变量
                /home/xxx/.bash_profile  用户环境变量
                /root/.bash_profile   root用户环境变量

                /etc/.bashrc        最后添加 /home/tomcat/bin/startup.sh start  任何用户登录后,自动启动tomcat
                /home/xxx/.bashrc  最后添加 /home/tomcat/bin/startup.sh start  任何root用户登录后,自动启动tomcat
                /root/.bashrc     最后添加 /home/tomcat/bin/startup.sh start  任何xxx用户登录后,自动启动tomcat
            3.2)export 临时有效
                export PATH=$PATH:$HOME/bin:/root/test/t1
                        输出环境变量PATH引用原来的值$PATH $HOME表示工作主目录  
                : 是路径分隔符
                已定义好的环境变量:
                    SHELL:默认shell
                    PATH:路径
                    USER:当前登录用户的用户名
            3.3)echo 显示变量内容
                    echo $PATH
                    echo $USER
                    echo $SHELL
            3.4) 
                通配符:
                    * 多个字母或数字[0个或0个以上]
                    ? 1个字母或数字[1个或1个以上]
                        ls a*   
                        ls a?
                        ls ?at?
                转义字符: \
                    ls /mnt/win1/My\ Documents
                引号 :
                    export NAME=Michael
                    echo Welcome $NAME,the date is date       会处理变量$NAME,
                        Welcome ,the date is date
                    echo 'Welcome $NAME,the date is date'     单引号,shell不处理任何变量和命令
                        Welcome $NAME,the date is date
                    echo "Welcome $NAME,the date is date"   双引号,shell处理变量,不处理命令
                        Welcome ,the date is date
                    echo "Welcome $NAME,the date is `date`"  
                        反引号(``)将引号中的每个单词作为1个命令处理,如果是变量则先求值,然后作为1个命令处理
                        Welcome $NAME,the date is xxxx具体系统时间

                    单引号(''):纯字符串,什么都不处理
                    双引号(""):处理变量
                    反引号(``):``内部都会作为命令执行,
                                如果是变量的话,先处理变量,在将变量的值,当作命令执行
                别名: alias
                    alias  显示系统当前定义的所有alias(别名)
                        alias cp='cp -i'
                        alias ll='ls -l --color=tty'
    1、一些常用Linux命令:
        0)login   登入
           logout  登出
        1)配置IP地址:  netconfig
        2)重启网络服务:service network restart
        3)查看网络是否连通:ping  id地址
        4)停止当前进程组合键:ctrl + c  (Windows中也支持)
                前提:在控制台中使用
                原理:在控制台中执行ping命令,会启动一个进程,占据当前终端,通       过ctrl+c 即可结束当前进程,恢复终端。

        5)挂起当前进程的组合键:ctrl + z  也能交出终端
        6)关闭防火墙命令:iptables -F
                重新启动Linux,还需要关闭   
        7)我是谁? 查看当前登录用户信息: who am i
              (Linux/Unix是基于用户权限保证环境的安全,认清身份)
        8)查看当前已登录的所有用户:who (Linux/Unix多用户系统)
        9)我在哪儿?查看当前工作目录 pwd
        10)查看目录下的资源(文件和目录):ls  -l (linux简写 ll)
        11)改变工作目录:cd
              cd ..   退回上一次目录
              cd 目录名  进入下一层目录
              cd 决定路径  直接进入某个目录
        12)查看当前版本:uname -r        2.4.20-8
            内核版本的组成:主版本号.次版本号.修订次数
                   次版本号为奇数,版本相对不稳定   2.5.10
                   次版本号为偶数,版本相对稳定     2.6.10
        13)centos7启动界面
            /etc/inittab
        14)清屏
            ctrl+l  清屏 

    2、命令格式
        命令的基本格式:命令   选项   参数
        command     命令、选项、参数之间至少留一个空格
                  参数是操作的对象,选项是增加的功能
                  命令是主要功能,选项和参数 可能不止一个

                 命令     选项     参数
        比如:    javac    -d        Hello.java
                 iptables  -F
                 ls         -l
                 ls         -al

    3、指令集(shell)
        1)、基本指令
            1.1 who am i (显示当前用户登录信息)
                root     pts/0        Sep 23 16:07 (192.168.111.1)
                用户名  伪终端号      登录时间      从这个IP远程登录

                root     pts/1        Sep 23 16:55 (192.168.111.1)
                        区分不同的终端        
                伪终端号:目的,便于Linux区分不同的登录用户
                   pts/0 窗口  ls
                   pts/1 窗口  cal  Linux分别将结果发给不同的用户

                Linux/Unix特点:典型的多用户系统 
                    # id   用户id信息
                    # who am i
                    # who   查看当前有哪些在线用户
                    root     tty1         Sep 23 14:35         
                    root     pts/0        Sep 23 16:07 (192.168.111.1)
                    root     pts/1        Sep 23 16:55 (192.168.111.1)
            1.2 pwd(我在哪)
                pwd 显示当前的工作目录(Print Working Directory)
                # pwd         /root      /目录 (根目录)下的root目录

                目前/root是root用户的主目录(Home Directory)
                默认就是登录后所在的目录,具备较多的权限。
            1.3
                who         查看当前有哪些在线用户
                who am i        我是谁(显示当前用户登录信息)
                id          我是谁(用户id信息)
                pwd         我在哪(Print Working Directory 显示当前的工作目录)
            1.4
                开关机
                shutdown -h now     立刻进行关机
                halt            关机,must be superuser.
            
                shutdown -r now     现在重新启动计算机
                reboot          现在重新启动计算机
            1.5 用户切换
                su          登录后用来切换系统管理员身份
                su -        登录后用来切换系统管理员身份
            1.6 字符界面/图形界面切换
                startx      进入图形界面(字符界面中执行的指令)
                logout      用户注销(xwindow下,点击logout按钮)
            1.7 网络设置     
                Unix: ifconfig -a           a表示all 所有的
                Windows: ipconfig           查看ip地址
                Linux/Unix: ifconfig        查看ip地址
                    centos7:ip addr
                netconfig   设置ip地址

                 Linux/Unix 区分大小写  -F   -f
                            Windows中命令 不区分大小写

                # service network restart       重启网络服务
                #  ping 192.168.111.1       ping192.168.111.1的计算机
                    在控制台中执行ping命令,会启动一个进程,占据当前终端
                
                ctrl + c                 结束当前进程,交回终端(可用在ping完后,结束ping)
                ctrl + z                挂起当前进程,也能交出终端
                
                # iptables  -F          关闭防火墙
                    centos7:systemctl stop firewalld     关闭防火墙
                            systemctl disable firewalld 开机禁用防火墙
                
                clear                   清屏
                     Windows: cls     
                    Sqlplus: clear screen
                    linux:ctr+L
                            clear
            1.8 
                shell分为以下,可互相切换,exit返回上一层    
                sh
                
                csh             (偏向于C语言语法)
                bash            (默认是bash,平时常用)
            
                    shell层层创建(原理:创建子进程,exit可返回上一层)
                    登录系统后,有默认shell: 登录shell (login shell) 目前bash
                    此时exit,则推出登录

                uname -r    查看当前内核版本号   
                               2        .4    .20-8
                    内核版本的组成:主版本号.次版本号.修订次数
                                         次版本号为奇数,版本相对不稳定   2.5.10
                                       次版本号为偶数,版本相对稳定     2.6.10
                sleep  5   启动sleep进程,睡觉5秒   单位:秒
                
                man     (相当于帮助文档 手册)
                    man  ls 查阅ls命令的功能
                         控制方式: 空格 --- 翻页
                                        回车 --- 跳行
                                       q    --- 退出 quit
        2)、运行指令级别
            init [0123456]
                0:关机
                    1:单用户
                    2:多用户状态,没有网络服务
                    3:多用户状态,有网络服务
                    4:系统未使用保留给用户
                    5:图形界面
                    6:系统重启

                注意:
                    1、要修改默认的运行级别可进/etc/inittab中
                        修改的id:5:initdefault:这一行中的数字
                    2、在 CentOS 7 當中,雖然你依舊可以使用『 init 0 』來關機,
                        但是那已經跟所謂的『執行等級』無關了
                        
                        TARGET.target:可以为multi-user.target或graphical.target
                        systemctl get-default TARGET.target 查看当前默认的运行方式
                        systemctl set-default TARGET.target 设置当前默认的运行方式
        2.x)、查看系统环境

            uname -a          可以查看内核版本,及用户名等信息
            uname -r                可以查看内核版本
            uname -m                可以查看硬件版本,是32位还是64位的硬件
            cat /etc/redhat-release  可以查看分发版本

            ls /bin/*sh -l      查看系统上有哪些shell
            env         可以显示当前系统的环境变量,查看目前使用的是哪种shell       
            chsh -s /bin/csh  将目前使用的shell切换到csh
            
            设置环境变量:
                方法1.设置永久PATH环境变量。全部用户
                    #打开文件
                    vi /etc/profile
                    # 在末端添加,退出
                    export PATH=$PATH:/usr/local/go/bin
                    #立即生效
                    source /etc/profile
                方法2:在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】
                    用VIM在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。具体操作和方法1一样,这里就不在列举代码了。
                方法3:直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
                    在shell的命令行下直接使用[export变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
        3)、进程管理:
            ps
                ps      查看当前部分进程
                ps  -ef 查看当前所有进程

                a、在linux中,每个执行的程序都称为1个进程,每1个进程都分配1个ID号
                b、每1个进程,都会对应1个父进程,而这个父进程可以复制多个子进程,例如www服务器
                c、每个进程都可能以2种方式存在的,前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的,
                    后台进程则是实际在操作,但由于屏幕上无法看到的进程,常使用后台方式执行
                    
                    命令 结尾加上 &表示以后台方式启动该进程

                d、一般系统的服务都是以后台进程的方式存在而且都会常驻在系统中,直到关机才结束
                
                进程:
                    正在执行的程序
                线程
                    1)轻量级的进程
                    2)进程有独立的地址空间
                    3)线程不能独立存在,它是由进程创建(fork)Thread
                    4)相对讲,纯种耗费的cpu,和内在小于进程

                1、查看当前所有进程
                     ps  -aux 信息全面(相比-ef,以PID排序)
                          -a  显示当前终端的所有进程信息
                          -u  以用户的格式显示进程信息
                          -x  显示后台进程运行参数

                        -ef  以全格式显示当前系统所有的进程
                          -e  所有进程
                          -f  全格式


                    UID    PID  PPID  C STIME TTY          TIME         CMD
                    root     1     0     0 09:05    ?                 00:00:03      init

                    Uid      用户id
                    Pid      进程id
                    PPid     父进程id
                    C        cpu占有率
                    Stime   开始时间
                    TTY     开始此进程的终端号
                    Time    此进程运行的总时间
                    CMD    该进程对应的命令名

                    启动sleep进程:sleep 1000

                2、kill命令:根据进程id杀死进程
                     kill 进程号
                     
                    某些情况下,kill会出现信号丢失:
                     kill -9  进程号   强制杀死进程(绝杀)

                     killall PID  可以将PID对应的子进程也杀掉
                3、pkill命令:根据进程命令名杀死进程
                     pkill sleep

            top:动态监控进程
                top和ps都可以显示正在执行的进程,
                top和ps的最大区别,top可以在执行一段时间可以更新正在运行的进程
                1、监视特定用户
                    top:输入此命令,按回车,查看执行的进程
                    u:然后输入“u"回车,再输入用户名,即可
                2、终止指定的进程
                    top:输入此命令,按回车,查看执行的进程
                    k:然后输入“k"回车,再输入要结束的进程ID
                3、指定系统状态更新的时间
                    top -d 10:系统更新进程的时间为10秒

                    top - 16:54:03 up  8:31,  2 users,  load average: 0.00, 0.01, 0.05
                    Tasks: 130 total,   1 running, 129 sleeping,   0 stopped,   0 zombie
                    %Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
                    KiB Mem :  1016736 total,   525600 free,   142944 used,   348192 buff/cache
                    KiB Swap:  1048572 total,  1048572 free,        0 used.   700832 avail Mem 

                      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                      
                     9737 root      20   0       0      0      0 S   0.3  0.0   0:00.19 [kworker/1:3]                                
                        1 root      20   0   41556   4004   2384 S   0.0  0.4   0:03.41 /usr/lib/systemd/systemd --switched-root --s+
                        2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 [kthreadd]                                   
                        3 root      20   0       0      0      0 S   0.0  0.0   0:00.04 [ksoftirqd/0]                                
                        6 root      20   0       0      0      0 S   0.0  0.0   0:00.04 [kworker/u4:0]                               
                         
                    [16:54:03 up]           当前系统时间
                    [8:31]              系统启动了多久
                    [2 users]               用户数(当前登入系统的用户总数)
                    [load average:]     当前系统的负载情况
                        0.00, 0.01, 0.05   3者加起来除以3,0.02,2%,
                    [Tasks:]         任务,进程情况
                        130 total,   1 running, 129 sleeping,   0 stopped,   0 zombie
                        进程总数    正在运行数   休眠数     停止数     僵尸进程数
                    [Cpu(s):]        cpu占用状态
                        0.0 us,     0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
                        0.0%的user  system   nice     idle      
                    [KiB Mem :]       内在情况
                        1016736 total,   525600 free,   142944 used,   348192 buff/cache
                    [KiB Swap:]       转换分区情况
                        1048572 total,  1048572 free,        0 used.   700832 avail Mem 
                4、常见进程端口号:
                    :22     secure  shell
                    :8080   tomcat
                    :3306   mysql
            netstat:监控网络状态信息
                netstat -anp|more   
        
        4)、任务调度命令crontab
            监控网络状态信息
            Mysql在linux下的使用
            ssh(secure shell)的使用
            ftp的安装与配置

            任务调度命令crontab
                任务调度:系统在某个时间执行的特定的命令或程序
                任务调度的分类:
                    1、系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
                    2、个别用户工作:个别用户可能希望执行某些程序
                调度文件的规则
                    字段名称        说明                      范围
                    分钟          每小时中的第几分钟执行         0-59
                    小时          每日中的第几小时执行          0-23
                    日期          每月中的第几天执行           1-31
                    月历          每年中的第几月执行           1-12
                    星期          每周的第几天执行            0-6
                    
                    注意每个字段间一字要空格,否则保存不了,*表示忽略,如果全是*,表示每分钟执行 后面的任务
                    

                设置任务调度文件: /etc/crontab
                    设置个人任务调度。执行crontab -e,接着输入任务到调度文件
                        如:5 * * * * ls -l /etc/ > /tmp/to.txt    每小时的第5分钟执行ls -l /etc/ > /tmp/to.txt命令
                步骤:
                    1、设置任务
                        crontab -e
                    2、每隔第一定时间去执行 date > /home/mydate1(不推荐)
                            希望每天凌晨2:00自动去执行date >> /home/mydate2
                            02 * * * date >> /home/mydate2
                    3、怎样去调度多个任务
                        1)直接在crontab -e中直接接着写
                        2)可以把所有的任务,写入到1个可执行文件(shell编程,推荐)
                    4、终止任务调度
                        crontab -r  终止任务调度
                        crontab -l  列出当前有哪些调度的任务


        5)、设置系统日期时间
            date           查看日期、时间
                date MMDDHHMMCCYY.SS  月月日日时时分分年年年年.秒秒
            cal           查看本月日历(calenda)
            cal  1989         年历(1989)
            cal  10 1989      月历(1989-10)
            cal  6 4 1989     日历(1989-6-4)
        6)、监控网络状态信息
            netstat -anp                额外显示进程PID和进程名
                netstat -anps|more      额外显示进程PID和进程名

            netstat -an
                netstat -an|more  信息太多,可加more方便查看   
            netstat
                显示整个系统目前的网络情况,如目前的连接、数据包传递数据、路由表内容
            
            
            ping  ip/域名  检测主机连接是否正常

            taceroute:显示数据包经过历程,可追踪路由
                    用来检测数据包在网络上传输的过程,从本机到远程的主机完整路径,帮助管理员解决问题
                [root@study lvvl]# traceroute www.qq.com
                traceroute to www.qq.com (59.37.96.63), 30 hops max, 60 byte packets
                 1  10.0.2.1 (10.0.2.1)  0.188 ms  0.126 ms  0.258 ms
                 2  * * *
                 3  * * *
                 4  * * *
                 5  * * *
                 6  * * *
                 7  * * *
            route:
                所谓路由(可以理解成网关)是指:将数据由来源网络送往目的网络的操作,在大型网络中,路由是非常复杂的,因为数据包在抵达目的地时,可能经过的节点有很多,
                路由表是:存储在路由器或其它一些链接设置上的窗体,其中记录了到达指定目的地的网络路径,以及这些路径的相关数值



                [root@study lvvl]# route
                Kernel IP routing table
                Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
                default         10.0.2.1        0.0.0.0         UG    100    0        0 enp0s3
                10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
                192.168.56.0    0.0.0.0         255.255.255.0   U     100    0        0 enp0s8
                192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
        

        7)、mount 挂载 显示有效磁盘分区的挂载情况
            mount [-参数] [设备名称] [挂载点]
                [设备名称] 可以是一个分区,一个usb设备,光驱,软盘,网络共享等。centos7中是sr[0-7]
                [挂载点]              
                  必须是一个已经存在的目录,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用,umount以后会恢复正常。

            在虚拟机里面,CentOS7.0挂载ISO镜像,
                图形界面会自动挂载到/run/media/root/下
                    点虚拟机---可移动设备---DVD---连接,然后在CentOS7.0的桌面上就有了,桌面是自动挂载。
                字符界面要手动挂载到指定目录    
                    #mount   /dev/sr0   /mnt/cdrom        
                    然后再df -hT一下,就能看到了。里面只读,想操作,在cp拷贝到其它目录/文件下
        8)、用户、组、目录、文件相关操作
            用户和组的管理:
                Linux/Unix是多用户系统
                    (root是超级用户、管理员,拥有最高权限。
                        其它用户及权限由root来管理)
                比较Windows系统:
                     控制面板 -> 管理工具 -> 计算机管理 -> 本地用户和组
                        右击某用户 -> 属性 -> 隶属于(属于哪个组)

                用户管理:
                    1、增
                        useradd 用户名 添加用户
                        passwd 用户名   修改用户密码 

                        添加用户:useradd  用户名    (只能由root操作)
                        # useradd xiaohong 
                                (不写组,会自动形成一个组,组名就是用户名)
                        # passwd  xiaohong
                                创建密码:passwd 用户名

                            useradd --help
                            用法:useradd [选项] 用户名
                                  useradd -D
                                  useradd -D [选项]
                                    
                        
                    2、删
                        userdel 用户名 删除用户  [要在root下才能,而且被删除的用户要退出登入]
                        userdel -r 用户名 删除用户及用户主目录

                        删除密码
                        passwd -d  用户名    由root来清口令
                    3、改
                        切换用户(改变身份): su  用户名
                        # su xiaohong
                        注意:从root切换到普通用户不需要密码,但从普通用户切    换到root或其他用户,需要密码。

                        练习:从root切换到xiaohong,从xiaohong切换到root

                        who am i  : 查看最初登录身份
                        whoami : 查看当前的身份
                        id:     查看当前的详细身份(用户id 用户名 组id  组名)
                        su  直接变为root(#代表root身份  )

                        passwd -d 用户名   清除指定用户的密码
                        passwd          设置当前用户密码pa

                    4、查
                            cat /etc/passwd
                            vi /etc/passwd
                    
                        查看用户账户基本信息: /etc/passwd
                            # cat /etc/passwd

                            用户名 :口令占位符(密码)   :uid  :gid :描述信息   :用户主目录   :登录shell(直到翻译)
                            root   :x                   :0    :0    :root        :/root        :/bin/bash
                            ...
                            xiaohong:x:500:500::/home/xiaohong:/bin/bash
                            tom:x:501:501::/home/tom:/bin/bash
                            alice:x:502:502::/home/alice:/bin/bash
                            rose:x:503:502::/home/rose:/bin/bash

                            uid: 用户id
                            gid: 组id

                            补充:/etc/shadow    用户口令(密码)文件
                                root有查看权限,小红等权限不够  cat /etc/shadow
                                    但是:密码经过加密 MD5算法(用x表示)
                组管理:
                    a.组的分类
                        私用组:只能包含一个用户(由创建用户的自动创建)
                        标准组:可以包含多个用户
                    b.组的信息
                        组名:组的标识符号
                        GID:组的唯一标识符口令组的成员
                    c.组的管理
                        文件/etc/group功能:
                        存放系统组信息内容: g1: x : 500 :u1,u2,u3
                    d、管理用户组(group)的工具或命令;
                        groupadd  注:添加用户组;
                        gpasswd   注:设置组密码;新建组后一般要调用这个设置组密码
                        groupdel  注:删除用户组; 
                        groupmod  注:修改用户组信息
                        groups    注:显示用户所属的用户组
                        grpck
                        grpconv   注:通过/etc/group和/etc/gshadow 的文件内容来同步或创建/etc/gshadow ,如果/etc/gshadow 不存在则创建;
                        grpunconv 注:通过/etc/group 和/etc/gshadow 文件内容来同步或创建/etc/group ,然后删除gshadow文件;

                    1、增
                        groupadd [参数] 组名
                            参数:
                                -g GID :指定GID的值
                                -r :建立系统用户组组

                        useradd  -g 组名 用户名

                        添加boys组: groupadd  boys
                        添加girls组: groupadd  girls

                        添加用户tom到boys组:useradd  -g boys  tom
                            # cd  回到主目录
                            # useradd -g  boys  tom
                            # passwd  tom       密码: 123


                        同理,添加用户alice和rose到girls组:
                            # useradd -g girls  alice
                            # passwd alice    密码: 123
                            # useradd -g girls  rose
                            # passwd rose    密码: 123
                    2、删
                        guoupdel 组名
                    3、改
                        groupmod [参数] 组名
                            参数:
                                -n 新组名:修改组的GID 
                             -g GID:修改组的GID
                                -A username 添加用户到组
                                -R username 删除用户从组
                            实例:
                                1)# groudmod -n group g1
                                2)# groupmod -g 860 u1,u2

                        修改密码
                            格式:gpasswd [参数] 组名
                            参数:
                                -a 用户名 : 向指定组添加用户
                                -d 用户名 : 从指定组中删除用户实例:
                            1)#gpasswd -a u1 root
                            2)#gpasswd -d u1 root    在u1组中删除root用户

                        更新用户的组
                            usermod -g 组名 用户名               更改用户所在的组[root才行]
                            usermod -aG 补充的新组名 用户名      将用户添加到新组中,同时也保留在原有组中
                                        -a      append添加
                                        -G   补充组
                            usermod -d 目录名 用户名      更改用户登入时的初始目录
                        chgrp 组名 文件名    修改文件所在的组
                            chgrp -R root ./abc              
                                        改变abc这个目录下及其下面所有的子文件或子目录的组,改为root组
                                      -R   递归到子目录/子文件   

                    4、查
                        显示用户所属组
                            格式:groups [用户名]
                            实例:
                                1)#groups (显示当前用户所属组)
                                2)#groups root (显示root用户的所属组)
                        cat /etc/group
                        vi /etc/group
                
                        # groupadd boys
                        # groupadd girls
                        # cat /etc/group

                        组名  口令占位符  组id(gid)     本组中的其它用户有哪些( 和组名同名的用户默认不显示)
                        root    :x          :0          :root
                        ... 
                        xiaohong:x:500:
                        boys:x:501:
                        girls:x:502:

                        ls -ahl             查看文件的所有组

                    5、用alice用户身份,在其主目录下创建1.txt文件
                        # who am i   是root
                        # su alice    不用密码
                        # cd          到alice主目录  /home/alice
                        # touch 1.txt  创建空文件
                        # ls -l
                    6、使用vi编辑器,编辑1.txt   (vi初步使用)
                        1)vi  1.txt     处于命令模式
                        2)敲 i 键,切换到输入模式   (左下角显示 插入  INSERT)
                        3)输入 I am alice!
                        4)敲Esc键,由输入模式 -> 命令模式
                        6)在冒号后输入: wq 回车,表示保存并退出 (write 和 quit)
                        7)注意:如果保存文件出现问题,可以强制不保存退出
                               冒号模式: q!

                        9、尝试让tom去查看并修改1.txt文件?
                            # su tom   密码 123
                            # ls -l    权限不够
                            # cd ..  
                            # ls -l

                如:
                    //创建操作系统用户
                        # useraddalice
                        # useraddjack
                        # useradd tom
                        # useradd RD
                      
                    //修改用户的组
                        # usermod -a-G RD alice
                        # usermod -a-G RD jack
                        # usermod -a-G RD tom


            目录和文件:
                Linux/Unix文件、目录的命名规则
                    1)区分大小写
                    2)除了/以外的的字符,还有*(一般做为通配符)
                    3)包含空格,需要\ 转义 或 双引号 " "
                    4)以.开头的名称,具备隐藏属性  (隐藏文件、目录)
                    5)Windows用后缀来区分不同的文件类型 *.txt  *.exe  *.doc
                         Linux/Unix则不需要,后缀只属于文件名的一部分,主要用于提示文件类型(见名知意)
                         比如:文本文件 file1   file1.txt   file1.abc
                                f1.sh  (shell脚本文件 可执行)
            目录:
                目录常见概念:
                    1)绝对路径:表示从/开始到具体的目录或文件的路径
                         /etc/passwd
                    2)当前路径:表示当前所在的目录的路径   pwd查看
                         /etc
                    3)相对路径:相对于当前路径下的简短路径
                         passwd
                         ../root/1.txt  (..回到 /下   root进入其中,找到1.txt)

                        比如目前在/root下  (当前路径)
                        需要表示/etc/passwd ?
                          1)绝对路径: /etc/passwd     (特点:/ 开头)
                          2)相对路径: ../etc/passwd

                    4)主目录:用户登录到Linux/Unix系统后,默认所在的目录
                           Home Directory (家目录)
                        root:x:0:0:root:/root:/bin/bash
                        root用户         主目录  登录shell
                Linux系统的目录结构  (FHS标准)
                    / 根目录 (必须存在)
                      /bin     大量可执行文件 (命令  ls  pwd  cd ...)
                                    普通用户的可执行命令,系统的任何用户都可以执行该目录的命令
                      /sbin    系统管理员命令
                                    普通用户不能执行
                      /boot    启动目录
                                    存放linux启动时所需使用的文件
                      /root    root用户 主目录 (特殊:root用户才具备操作权限)
                                   root的家(皇帝的家)
                                   超级用户root的宿主目录
                      /home   普通用户的主目录  (寻常百姓家)
                                普通用户 的宿主目录,每个用户在该目录下都有1个与用户名同名的目录
                      /usr     用户应用程序的安装目录
                      /etc     存放配置文件
                                  比如/etc/passwd  用户账户信息
                                  /etc/shadow  保存账户密码 (加密MD5)
                      /dev     设备文件
                                    系统中所有的设备文件
                      /tmp     临时文件 (程序员使用较多)
                      /lib       库文件   library
                      /var      数据、日志、临时文件
                                    系统中经常变化的文件和日志文件,用户邮件
                      /mnt     挂接其它文件系统   mount
                                /mnt中的子目录用于系统中可移动设备的挂载点


                    pwd [显示当前目录]
                        .    当前目录
                        ..  上一级目录
                        ./a  下一级目录中的a目录
                    cd [改变当前目录]
                        cd  空   回到当前用户的 主目录
                    ls [列出当前文件和目录]
                        ls -a  显示隐藏文件,显示所有文件
                                隐藏文件:以.开头
                        ls -l 长列表
                    mkdir [创建目录]
                    rmdir [删除空目录]
                        rm -r 目录  删除目录下所有,常用


                    cd  去哪儿(Change Directory改变目录)[改变目录]
                            特殊的目录名:
                                  .  表示当前目录
                           ..  表示上一层目录
                        比如:目前在/root目录下
                        想到/ 目录下:
                            # cd ..     相对路径,相对于当前/root的上一层
                                或者:
                            # cd /      绝对路径,直接定位到/下  (从/开始)
                            # cd .   还是在当前目录
                    
                        想到/home下
                            # cd /
                            # cd home    相对路径
                                或者
                            # cd /home   绝对路径 (特点:一定从/开始)

                        cd 回车       快速回到主目录
                        cd ~        快速回到主目录

                        .       当前所在目录
                        ..      上一级目录
                        ~       代替主目录

                        echo  ~      echo是回声的意思(查看系统变量的值)
                            echo abc > 1.txt    将abc写入到当前目录下的1.txt文件中

            目录/文件的操作                
                 增:
                    mkdir 目录名   [创建目录]
                        # mkdir  -p  dir1/dir2    一气呵成(创建层级关系的目录)
                        # ls -R  查看目录层次

                            回到test下
                            # cd ~/test
                        # mkdir dir3 dir4 dir5  依次创建三个并列的目录,空格分隔
                            在主目录下新建一个game目录
                        # mkdir  ~/game 


                    touch 文件名       [创建文件] 
                        说明: 如果文件名不存在,创建一个新的、空的文件
                            如果文件名存在,只会修改文件的最后一次修改时间,  里面的内容不会变

                        # cd
                        # cd test
                        # date > 1.txt    通过重定向生成一个1.txt文件
                        # ls -l  1.txt
                        # touch 2.txt      创建一个空文件
                        # ls -l  2.txt
                        # touch 1.txt
                        # ls -l 1.txt       1.txt最后一次修改时间 更新了
                        # cat 1.txt         文件内容不变 
                    新建文件 my file
                        在~/test目录下
                        # touch my file    会依次创建两个空文件
                        # touch my" "file  创建带有空格的文件
                        # touch my\ file1  使用转义符
                    创建隐藏文件,文件名:  .news
                        # touch  .news
                        # ls -l
                        # ls -a
                        # ls -la
                 删:
                    删除目录
                        rmdir 目录名   [删除空目录]
                            rmdir  只能 删除空目录
                    删除目录/文件
                        rm 文件名     删除文件

                        rm -d 目录  删除空目录
                        rm -df 目录  删除空目录。强制删除,无提示

                        rm -r 目录名       [删除一个目录,从最外层删除,如果有子目录,会提示]    
                        rm -rf 目录名    [删除一个目录,强制删除,有子目录不会提示是否删除,]

                        rm -rf *    [删除所有内容(包括目录和文件),r递归,f强制]
                        rm -f  关闭交互 
                        rm *.txt     * 通配符,匹配所有字符
                                  删除以.txt为结尾所有文件
                        
                        请注意,如果使用rm 来删除文件,通常仍可以将该文件恢复原状。如果想保证
                            该文件的内容无法还原,请考虑使用shred。
                    

                 改:
                    >   覆盖写 
                        输出重定向,新的会覆盖旧的(将输出的结果重新导向到文件中,而不是终端)
                            # date > 1.txt
                             将date的结果写入1.txt文件中
                            # ls -l
                            # cat 1.txt
                            # cal > 1.txt
                            # cat 1.txt

                            ls -l > a.txt
                            a.txt < ls -l

                    >>  追加写 
                        输出追加重定向,向原有文件追加内容
                        # date >> 1.txt
                        # cal 10 2014  >> 1.txt
                        # cat 1.txt

                        ls -al >> aa.txt
                        aa.txt << ls -al

                    cp   拷贝文件或目录  (copy)
                        cp 源文件/目录   目标文件/目标目录

                        文件的拷贝:
                            cp a.txt /home/lvvl/     [将a.txt拷贝到/home/lvvl/目录下]
                            cp a.txt b.txt   [将a.txt拷贝到当前目前,名字b.txt]
                            cp a.txt b.txt /home/lvvl/   [同时将a.txt和b.txt拷贝到/home/lvvl/目录下]
                        目录的拷贝:
                            cp -r dir 1 dir2    [将dir1目录拷贝到dir2下,r是递归]
                            cp -rf dir 1 dir2   [将dir1目录拷贝到dir2下,r是递归,不要询问]

                    mv  移动文件或目录  (move,重命名)
                        mv 11.txt  22.txt     重命名
                            本质:改变文件的绝对路径名
                                  源文件名:/root/test/d1/11.txt 
                                  改后:     /root/test/d1/22.txt
                        mv 11.txt  /home  移动到/home下

                    ln      [建立符号连接,相当于个替身,是目标指向源,删除目标,源还在,只是删除了替身]
                        ln -s 源 目标
                            ln -s /etc/inittab inittab      [inittab指向实际文件/etc/inittab]

                 查:
                    查看系统版本
                        uname -r    查看linux内核版本
                        cat /etc/hedhat-release     查看linux分发版本,如centos7.2.1511

                    ls  [列出当前文件和目录] 
                        文件类型:
                                -       普通文件
                                绿色:     可执行文件
                                l       链接文件 如rview -> vi
                                .xxx    隐藏文件

                                d       表示目录(蓝色)

                        ls -l       我有什么(以长格式显示文件(use a long listing format))
                            
                                linux下简写    ll
        
                            文件类型 权限     属主   属组   文件大小  最后一次修改时间
                            -rw-r-xr--    1 root   root    16012    9月 23 22:28     abc.txt
                                前10个字符:确定不同用户能对文件干什么
                                 第1个字符:
                                            - 文件
                                            l 链接
                                            d 目录
                                  后9个字符:权限
                                        rw-: 文件拥有者对该文件的权限是          读、写、执行
                                        r-x: 文件所在组的所有用户对该文件的权限是     读、、执行
                                        r--: 其它组的所有用户对该文件的权限是       读、、
                                        r4 w2 x1-----所以rwx=4+2+1=7

                                 1          表示连接的文件数
                                 root       文件的所有者的 用户名
                                 root       文件所在组   组名
                                 16012      文件大小(字节)
                                 9月 23    时间
                                 abc.txt    文件名


                            除了文件名之外的所有信息:文件的属性
                                属主:由哪个用户user创建的文件   owner 拥有者
                                属组:属于哪个用户组  group
                            文件大小:单位 字节Byte
                        ls -a  [显示隐藏文件和目录]a就是all的意思
                                显示目录下所有内容,包括隐藏文件和目录。
                                     
                        ls -al  [显示隐藏文件,以长列表方式显示]   选项可以组合搭配使用 (功能叠加)
                                  bin目录     常用的系统命令  比如ls  pwd ...
                                  etc目录     常用的配置文件
                                  home目录   用户主目录所在目录(每个用户对应一个子目录)
                                  root目录    管理员用户主目录
                                  boot目录    启动文件目录
                        ls -ahl     查看文件的所有组
                        
                        ls -R  文件全部展开 (当前目录及子目录的资源分布)
                        
                        ls -t   按照实际先后(文件/目录的最后一次修改时间)

                        ls -tl   结合长列表方式、按照时间排序
                        ls -dl  查看当前目录的属性,无需回上一层再  ls -l
                        ls -F   可以查看文件类型
                                  普通文件      无后缀显示   
                                  目录           /结尾(一般是蓝色)
                                  可执行文件    *结尾(一般是绿色)
                        
                        ls -Fa     可以查看文件类型(全部文件,包括隐藏文件和目录)
                        
                    查看:
                        find    [查找]
                            find dir1 -name aaa.java    [在dir1目录下 按name 查找 aaa.java这个文件] 
                                find / -name man        从根目录开始 搜索 名称叫man的目录或文件
                                
                                find / -amin -10    十分钟内 存取的文件或目录
                                find / -atmin -10   十小时内 存取的文件或目录

                                find / -cmin -10    十分钟内 更改的文件或目录
                                find / -ctmin +10   十小时前 更改的文件或目录
                                        -:内
                                        +:前

                                find / -size +10k   查找/目录下大于10k的文件

                                find / -name *.html | grep bookmark   
                                        #在find的结果中查找字符串”bookmark“,显示包含这个字符串的文件
                        grep
                                grep "12" /root/abc3.java                   
                                        在/root/abc3.java 中查找有没有12
                                grep -n "12" /root/abc3.java                
                                        在/root/abc3.java 中查找有没有12,并显示在第几行
                                grep -n "12" /root/abc3.java /home
                                        在/root/abc3.java和/home  中查找有没有12,并显示在第几行
                                grep -n "12" /root/abc3.java /home/*
                                        在/root/abc3.java和/home下所有  中查找有没有12,并显示在第几行

                        查看磁盘使用情况
                            df [-参数]
                                df -hT (相比-h,更详细,多Type列,会显示硬盘分区中文件系统类型,类似于win中的文件系统,像NTFS,FAT32等等)
                                df -h   (和-l比起,更加易读,显示M或者G,而不是字节)

                                df -l
                                df -k   (同-l一样,不常用)
                            查看某个目录是在哪个分区
                                df -h [目录全路径]   (加上-h显示更友好,不加只会显示字节数据)
                            查看linux分区具体情况,查看当前磁盘空间/磁盘分区
                                fdisk -l
                                

                            应用场合:当系统突然变慢或性能不佳,可以查看Linux服务器的磁盘空间,
                                 确定是否磁盘瓶颈(空间不足)。

                            练习:查看磁盘空间是否占满
                                Disk /dev/sda: 8589 MB, 8589934592 bytes
                                255 heads, 63 sectors/track, 1044 cylinders
                                Units = cylinders of 16065 * 512 = 8225280 bytes

                                   Device Boot    Start       End    Blocks   Id  System
                                /dev/sda1   *         1        13    104391   83  Linux
                                /dev/sda2            14       268   2048287+  82  Linux swap
                                /dev/sda3           269      1044   6233220   83  Linux

                                Blocks: Data Block 数据块
                                Id: idle 表示空闲的磁盘  83%的空间可用
                        
                        cat 查看文件的内容:(适合查看小文件)
                            # cd /root
                            # ls
                            # cat install.log
                        
                        Tab键    自动补全功能
                            # cat  1       Tab 会补充完整的文件名
                            # cat  1.txt

                        cat 文件名
                        查看包含空格的文件名  " "  \
                        # echo abc > my" "file
                        # cat my" "file
                        # cat my\ file1
                        # cat my  file      依次显示my 和 file文件的内容

                        1、使用一个命令,将三个小文件合并成一个大文件
                            # cd
                            # cd test

                            # echo hello > f1
                            # date > f2
                            # cal > f3
                            # cat f1 f2 f3 > f5
            

            文件/目录的权限:
                文件类型  权限                 文件夹下的子文件数   属主     属组                       目录名/文件名
                d        rwx---r--       2              alice    girls        4096  9月 25 11:33 alice

                -rwx------ 2 rose     girls        4096  9月 25 10:47 rose
                lrwx------ 2 tom      boys         4096  9月 25 10:43 tom

            
                文件类型          文件/目录权限
                -  文件         ---    ---    ---
                l  类似于快捷方式,链接文件
                    ln -s 源 目标
                        ln -s /etc/inittab inittab      [inittab指向实际文件/etc/inittab]
                        inittab文件前面就是l开头

                d  目录        所有者 所在组  其他
                            所有者:文件的所有者对该文件的权限   
                            所在组:文件的所在组对该文件的权限   
                            其它: 其它组的用户对该文件的权限   

                1、user   所有者(属主 owner  文件的创建人 u)
                2、group  所有者所在的组  g
                    比如:useradd -g girls  alice        alice属于girls组
                           useradd  xiaohong       默认xiaohong组名就是xiaohong 
                           alice和rose同在girls组中
                3、other  其他  o   既不是user,也不在同一组中
                       

                4、三种访问权限:可读r、可写w、可执行x
                     rwx --- ---   出现的位置固定 rwx 缺失使用-代替
                     r 可读     r--    100   4
                     w 可写    -w-    010   2
                     x 可执行  --x    001   1

                     - rw- r-- r--   普通文件: 权限 644  权限的数字表达法 简洁
                     自己:可读、可写  同组:只读   其他:只读

                     d rwx r-x r-x   目录: 权限 755
                     自己:可读、可写、可执行  
                       同组:可读、可执行  其他:可读、可执行
             
                     - rwx rwx rwx   可执行文件  777
                      对所有用户:可读、可写、可执行

                    权      权限的数字表达法
                    421
                    000  0     ---
                    001  1     --x
                    010  2     -w-
                    011  3     -wx
                    100  4     r--
                    101  5     r-x
                    110  6     rw-
                    111  7     rwx

                5、归纳文件和目录的各种权限规律:
                    1)文件的权限:
                        r 可读    可以使用vi、cat查看文件内容
                                    w 可写    可以修改后保存
                                    x 可执行  可以直接运行  命令就是可执行文件

                    2)目录的权限:
                        r 可读     ls 目录,能查看到内容
                                    w 可写    可以修改目录内容,如新建、删除目录
                                    x 可执行  可以cd进去

                6、修改文件/目录相关操作
                    角色:u 拥有者   user
                           g 同组     group 
                           o 其他     other
                           a 所有的  all
                    用法:
                        1)
                            chgrp 组名 文件名        修改文件的所在组
                            chgrp -R 组名 文件名     修改文件的所在组(递归,子目录/子菜单都应用)
                            
                            ls -l                       也可以查看文件的所在组
                        2)
                            chown 用户名 文件名       修改文件的所有者
                                chown -R root ./abc              
                                        改变abc这个目录下及其下面所有的子文件或子目录的所有者,改为root用户
                                      -R   递归到子目录/子文件   
                                chown -R root:mysql ./abc       同时也可以设置属主和属组
                                         
                            ls -l                       查看文件的所有者

                        3)
                            chmod [ugoa][+-][rwx] 文件名       修改文件权限
                            chmod 777 文件名                       修改文件权限

                            # chmod u+x  1.txt  针对拥有者添加可执行权限
                            # chmod u-x  1.txt  针对拥有者去除可执行权限
                            # chmod g+w  1.txt  针对同组增加可写权限
                            # chmod a+r,g+w  1.txt   对于1.txt文件 所有用户都添加可读,同组添加可写的权限
                            # chmod a-r,g-w  1.txt   对于1.txt文件 所有用户都移除可读,同组移除可写的权限
                            # chmod 777 1.txt   数字表达法
                                 rwx  rwx  rwx
                            # chmod 644 1.txt

                            前提:只有文件的拥有者 或者  root用户可以改权限
                        如:
                            //修改目录权限
                            # chgrp RD /smb/tech
                            # chgrp RD /smb/docs
                            # chown RD /smb/tech
                            # chown RD /smb/docs
                            # chmod 770 /smb/tech
                            # chmod 770 /smb/docs

                    案例:由root或alice修改alice主目录权限:
                         针对o + rx,其他用户xiaohong可以进入alice主目录,
                        并可以使用ls -l查看目前下的内容.
                         由root或alice针对1.txt文件修改权限,o+w xiaohong即可修改文件。 
                            644  ->     646
                              rw- r-- r--     rw- r-- rw-
                             chmod  646 1.txt


                        如果多条语句写一行,分号隔开: date; sleep 10; cal
    4、常用技巧
        1、过滤:grep  过滤出n行
        2、统计:wc    统计:行、单词、字符  的字数
        3、管道:|    (piping)
            管道符用于连接两个命令:前一个命令的输出,作为后一个命令的输入。
            比如:将/etc/passwd的头10行,写入文件f6
            # head -10 /etc/passwd > f6

            将/etc/passwd的头10行排序后,写入文件f8   sort命令
            # head -10 /etc/passwd | sort > f8

            常见用法:
            1)管道more:  分屏显示   ls -l  /etc
                 ls -l /etc | more

            2)管道grep: 过滤    ls -l  /etc
                 ls -l /etc | grep ssh
                 cat /etc/passwd | grep james

                james:x:507:504::/home/james:/bin/bash
            3)   管道wc: 统计
                cat f6 | wc
        4、查看文件的4种方法:    cat more    vi  head    tail
            1)、cat  适合看小文件,不可翻页,不可编辑
                    可以将多个小文件合并成一个大文件:
                cat  f1  f2  f3 > newfile

            2)、more 适合看大文件,可以翻页,不可编辑。[显示文件内容,带分页],
                        会显示第1条记录,在屏幕最上方
                   空格   翻屏(向下)
                   回车   滚动行(向下) 

                   b或者ctrl-B      向后一屏,中间后跳过1屏,向上   back
                   f      向前一屏,中间后跳过1屏,向下   forward
                   s      向前一屏,中间后跳过1行,向下   forward

                   h      求助        help
                   q      退出        quit
                   /      查找文本
                   n      继续查找

                将/etc/passwd文件拷贝到andi的主目录下:
                    cp /etc/passwd  ~

                    cat passwd
                    more passwd
            3)、less     [显示文件内容,带分页]
            4)、grep     [在文本中查询内容]
                grep -n "关键字" 文件    [在文件中 查询所有与 关键字 相关的信息,]
                    -n 显示所在行数
            5)、|        [管道命令]
                在linux和unix中,|就是管道命令,把上一个命令的结果交给|后面的命令处理
    5、压缩与解压缩:
        zip和unzip处理 (.zip文件)
            1、zip file.zip *   压缩           
                    zip后接压缩后的文件名,然后接着输入要压缩的文件即可

                -m
                    zip -m file.zip to.txt   
                        将to.txt压缩成file.zip文件,to.txt会自动删除
                -r
                    zip -r file.zip * 
                        将当前目录下的子目录一直压缩
                -j
                    zip -j file.zip *
                        忽略子目录的内容(只压第一层目录)
                -n
                    zip -n .mpg: .jpg:.gif  
                        将已压缩的或没有必要压缩的文件去掉,每一种文件中间要用“;”隔开
                -t 
                    zip -t 102002 file.zip
                        压缩某一日之后的文件
                        将当前目录下 在2002年10月之后的文件压缩
                -y
                    zip -y file.zip *
                        不压缩链接文件的原文件
                -1---9
                    zip -9 file.zip *
                        压缩率问题,-1----9;-9的压缩率最高
                -x
                    zip file.zip * -x file2.txt
                        将不要压缩的文件排除在外
                        在压缩时,将当前目录内的file2.txt文件排除在外
            2、unzip file.zip    解压缩
                -x  
                    unzip file.zip -x file2
                        排除不需要解压缩的文件
                        除了file2文件外,其它文件都解压缩
                -Z 
                    unzip -Z file.zip
                        查看压缩包内容
                        查看file.zip压缩包的内容,也可以使用-l、-v
        gzip和gunzip处理   (.gz文件)
            同上,前面加了个g,处理的是.gz文件

        tar (.tar文件)
            tar备份,压缩与解压缩,Linux命令,也是一个工具
                -z            : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压
                -x            : 从 tar 包中把文件提取出来
                -v            : 显示详细信息
                -f xxx.tar.gz : 指定被处理的文件是 xxx.tar.gz

                tar.gz的用tar -zxvf解压,
                    tar -zxvf mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz
                tar.bz2的用tar -jxvf解压

            Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩了,

            tar命令的基本用法:
                tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面 来举例说明一下: 
                tar -cf all.tar *.jpg 
                这条命令是将所有.jpg的文件打成一个名为all.tar的包。
                    -c是表示产生新的包 
                    -f指定包的文件名。 
              tar -rf all.tar *.gif 
                    这条命令是将所有.gif的文件增加到all.tar的包里面去。
                    r--是表示增加文件的意思。 
               tar -uf all.tar logo.gif 
                   这条命令是更新原来tar包all.tar中logo.gif文件,
                     -u是表示更新文件的意思。 
              tar -tf all.tar 
                  这条命令是列出all.tar包中所有文件,
                   -t是列出文件的意思 
              tar -xf all.tar 
                这条命令是解出all.tar包中所有文件,
                    -x是解开的意思 
    
            以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压 
            文件,tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压 
            缩程序,比如调用gzip、bzip2等。 
              1) tar调用gzip (.tar.gz)
                gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。
                  tar -zcf all.tar.gz *.jpg 
                        这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,
                        包名为all.tar.gz 
                  tar -zxf all.tar.gz 
                    这条命令是将上面产生的包解开。 
              2) tar调用bzip2 (.tar.bz2)
                  bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。 
                    与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。

                  tar -jcf all.tar.bz2 *.jpg 
                    这条命令是将所有.jpg的文件打成一个tar包,并且将其用bzip2压缩,
                        生成一个bzip2压缩过的包,包名为all.tar.bz2 
                  tar -jxf all.tar.bz2 
                      这条命令是将上面产生的包解开。 
                3)tar调用compress (.tar.Z)
                  compress也是一个压缩程序,但是好象使用compress的人不如gzip和bzip2的人 
                多。.Z结尾的文件就是bzip2压缩的结果。与 compress相对的解压程序是uncompress 
                。tar中使用-Z这个参数来调用compress。
                  tar -Zcf all.tar.Z *.jpg 
                       这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,
                        生成一个uncompress压缩过的包,包名为all.tar.Z 
                  tar -Zxf all.tar.Z 
                      这条命令是将上面产生的包解开 

            tar系列的压缩文件作一个小结: 
                tar对于 解压缩常用-xf
                  1)对于.tar结尾的文件 
                    tar -xf all.tar 
                  2)对于.gz结尾的文件 
                      gzip -d all.gz 
                      gunzip all.gz 
                  3)对于.tgz或.tar.gz结尾的文件 
                      tar -zxf all.tar.gz 
                      tar -zxf all.tgz 
                  4)对于.bz2结尾的文件 
                      bzip2 -d all.bz2 
                      bunzip2 all.bz2 
                  5)对于tar.bz2结尾的文件 
                    tar -jxf all.tar.bz2 
                  6)对于.Z结尾的文件 
                      uncompress all.Z 
                  7)对于.tar.Z结尾的文件 
                      tar -Zxf all.tar.z 
            另外对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们
                1)对于.zip 
                  linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序
                
                  zip all.zip *.jpg 
                    这条命令是将所有.jpg的文件压缩成一个zip包 
                    unzip all.zip 
                    这条命令是将all.zip中的所有文件解压出来 
              2)对于.rar 
                  要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但要记住,RAR for Linux 不是免费的;可从http://www.rarsoft.com/download.htm下载RARfor Linux 3.2.0,然后安装: 
                  
                    tar -zxvpf rarlinux-3.2.0.tar.gz 
                  cd rar 
                  make 
                  这样就安装好了,安装后就有了rar和unrar这两个程序,
                  rar是压缩程序,unrar是解压程序。

                  rar a all *.jpg 
                    这条命令是将所有.jpg的文件压缩成一个rar包,名为all.rar,该程序会将.rar扩展名将自动附加到包名后。 
                  unrar e all.rar 
                    这条命令是将all.rar中的所有文件解压出来 

              到此为至,已经介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress 、 uncompress、 zip、unzip、rar、unrar等程式,你应该已经能够使用它们对.tar 、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、. Z、.tar.Z、.zip、.rar这10种压缩文件进行解压了,以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。 
              本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress 、uncompress、 zip、 unzip、rar、unrar等程式,以及如何使用它们对.tar、.gz 、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、. tar.Z、.zip、.rar这10种压缩文件进行操作。 

        以下补充 
        tar 
            -c: 建立压缩档案 
            -x:解压 
            -t:查看内容 
            -r:向压缩归档文件末尾追加文件 
            -u:更新原压缩包中的文件 

          这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。
          下面的参数是根据需要在压缩或解压档案时可选的。 

            -z:有gzip属性的 
            -j:有bz2属性的 
            -Z:有compress属性的 
            -v:显示所有过程 
            -O:将文件解开到标准输出 

        下面的参数-f是必须的 
          -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。 

            tar -cf all.tar *.jpg
                将所有.jpg的文件打成一个名为all.tar的包。
                -c是表示产生新的包,
                -f指定包的文件名。 
            tar -rf all.tar *.gif 
                    将所有.gif的文件增加到all.tar的包里面去。
                    -r是表示增加文件的意思。 
            tar -uf all.tar logo.gif 
                 更新原来tar包all.tar中logo.gif文件,
                 -u是表示更新文件的意思。 
            tar -tf all.tar 
                 列出all.tar包中所有文件,
                 -t是列出文件的意思 
            tar -xf all.tar 
                 解出all.tar包中所有文件,
                 -x是解开的意思 
            压缩 
                tar –cvf jpg.tar *.jpg 
                   //将目录里所有jpg文件打包成tar.jpg 
                tar –zcf jpg.tar.gz *.jpg 
                   //将目录里所有jpg文件打包成jpg.
                     tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz 
                tar –jcf jpg.tar.bz2 *.jpg 
                     //将目录里所有jpg文件打包成jpg.tar后,
                     并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2 
                tar –Zcf jpg.tar.Z *.jpg 
                     //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,
                      生成一个umcompress压缩过的包,命名为jpg.tar.Z 
                rar a jpg.rar *.jpg
                     //rar格式的压缩,需要先下载rar for linux 
                zip jpg.zip *.jpg 
                     //zip格式的压缩,需要先下载zip for linux 

            解压 
                tar –xvf file.tar 
                    //解压 tar包 
                tar -xzvf file.tar.gz 
                    //解压tar.gz 
                tar -xjvf file.tar.bz2 
                    //解压 tar.bz2 
                tar –xZvf file.tar.Z 
                    //解压tar.Z 
                unrar e file.rar
                    //解压rar 
                unzip file.zip 
                   //解压zip 

                总结 
                    1、*.tar                 用 tar –xvf 解压 
                    2、*.gz                  用 gzip -d或者gunzip 解压 
                    3、*.tar.gz和*.tgz        用 tar –xzvf 解压 
                    4、*.bz2                 用 bzip2 -d或者用bunzip2 解压 
                    5、*.tar.bz2             用tar –xjf 解压 
                    6、*.Z                   用 uncompress 解压 
                    7、*.tar.Z               用tar –xZf 解压 
                    8、*.rar                 用 unrar e解压 
                    9、*.zip                 用 unzip 解压              

    6、安装包管理
        rpm 与 yum
        
        1、1种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中,
            它生成具有.RPM扩展名的文件. RPM(RedHat Package Manager)(RedHat软件包管理工具)的缩写。
        2、包名的格式
            apache-1.3.23-11.i386.rpm
                apache:软件名称
                1.2.23-11:软件的版本号,主版本和次版本
                i386:软件所运行的硬件平台,
                        i386----32位
                        x86_64--64位
                rpm:文件扩展名。代表RPM包
        3、常用命令
            rpm
                 -ivh 安装
                 -Uvh 升级
                 -e 卸载
                 -e --nodeps强卸
                 -q 查询
                 -V 验证

                查询
                    rpm -q 软件名称(不包括.rpm)        查询指定名称的软件包是否安装
                    rpm -qa                         查询linux系统中的所有软件包

                    rpm -ql 软件名称        (已经安装过的软件包)查询指定名称软件包中所包括的文件列表
                    rpm -qlp 软件名称       (没安装过的软件包)查询指定名称软件包中所包括的文件列表

                    rpm -qf 文件全路径名称     查询指定文件所属的软件包

                    某个程序是哪个软件包安装的,或者哪个软件包包含这个程序(适合可执行的程序和普通的任何文件)
                        1)先
                            whereis 文件名
                            或者which 文件名
                            以上2种方法会返回 文件全路径名称

                        2)然后
                                rpm -qf 文件全路径名称     

                    某个程序是哪个软件包安装的,或者哪个软件包包含这个程序(只适合可执行的程序)
                        rpm -qf `which 程序名'     返回软件包的命名
                        rpm -qfi `which 程序名'        返回软件包的有关信息
                        rpm -qfl `which 程序名'        返回软件包的文件列表
                        注意,这里不是引号,而是`,就是键盘左上角的那个键。
                        rpm -qilf 目录/文件,同时输出软件包信息和文件列表。

                    rpm -qi 包名      (已经安装过的软件包)查询指定名称软件包的详细信息
                    rpm -qip 包名 (没安装过的软件包)查询指定RPM包文件的详细信息
                    

                    rpm -qa     查询安装的所有rpm软件包
                        rpm -qa|more
                        rpm -qa|grep X
                    rpm -q 软件名称   查询软件名称对应的包 是否安装(有安装,返回软件rpm包名,除去.rpm)
                        rpm -q xinted   
                        rpm -q foo  
                        rpm -q xinted file bash
                    rpm -qi 软件名称        查询软件包信息
                        rpm -qi file    
                    rpm -ql 软件名称        查询软件包中的文件
                        rpm -ql file    
                        rpm -ql jdk
                    rpm -qf 文件全路径名  查询文件所属的软件包
                        rpm -qf /etc/passwd
                        rpm -qf /root/install.log
                    rpm -qp 包名      查询包的信息,对这个软件包的介绍
                        rpm -qp jdk-1_5_0-linux-i586.rpm
                        rpm -qpi jdk-1_5_0-linux-i586.rpm
                        rpm -qpl jdk-1_5_0-linux-i586.rpm
                安装
                    rpm -i RPM包全路径名称        安装包到当前系统
                            i=install 安装
                        rpm -ivh RPM包全路径名称      安装包到当前系统,有提示信息
                            i=insatll 安装        
                            v=verbose  提示
                            h=hash    进度条   
                删除
                    rpm -e RPM包的名称
                        rpm -e jdk
                        注意:如果其它软件包依赖于您要卸载的软件包,卸载时会产生错误信息,
                                rpm -e foo
                                removing thes packages would break dependencies:foo is needed by bar-1.0-1
                            若让RPM忽略这个错误继续卸载,不太好,因为依赖于该软件包的程序可能无法运行,
                                请使用--nodeps命令选项(会删除所有依赖的软件,一般不要选,比较危险,)
                升级
                    rpm -U RPM包全路径名称
                        rpm -U cvs-1.11.2-10.i386.rpm

            yum
                1 安装
                    yum install 全部安装
                    yum install package1 安装指定的安装包package1
                    yum groupinsall group1 安装程序组group1

                    yum install yum-fastestmirror   自动搜索最快镜像插件:     
                    yum install yumex               安装yum图形窗口插件:     
                    yum grouplist                   查看可能批量安装的列表:  

                2 更新和升级
                    yum update 全部更新
                    yum update package1 更新指定程序包package1
                    yum check-update 检查可更新的程序
                    yum upgrade package1 升级指定程序包package1
                    yum groupupdate group1 升级程序组group1

                3 查找和显示
                    yum info package1 显示安装包信息package1
                    yum list 显示所有已经安装和可以安装的程序包
                    yum list package1 显示指定程序包安装情况package1
                    yum groupinfo group1 显示程序组group1信息yum search string 根据关键字string查找安装包

                4 删除程序
                    yum remove | erase package1     删除程序包package1
                    yum groupremove group1              删除程序组group1
                    yum deplist package1                查看程序package1依赖情况

                5 清除缓存
                    yum clean packages 清除缓存目录下的软件包
                    yum clean headers 清除缓存目录下的 headers
                    yum clean oldheaders 清除缓存目录下旧的 headers
                    yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers                 
    7、
            运行java程序
                vi Hello.java -> 
                编写代码
                public class Hello{
                    public static void main(){
                        print("hello000");
                    }
                }
                > esc -> :wq -> javac Hello.java -> java Hello -> 输出“hello000” 

          运行c++程序
                vi Hello.cpp -> 
                编写代码
                #includ
                int main(){
                    printf("hello111");
                    return 0;
                }
                > esc -> :wq -> gcc -o hello Hello.cpp -> ./hello -> 输出“hello111” //-o 后面跟着可执行文件的别名

你可能感兴趣的:(linux3-shell指令)