美文网首页LinuxShell
linux3-shell指令

linux3-shell指令

作者: lvvl | 来源:发表于2016-05-02 16:51 被阅读149次

    一、指令(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<stdio.h>
                    int main(){
                        printf("hello111");
                        return 0;
                    }
                    > esc -> :wq -> gcc -o hello Hello.cpp -> ./hello -> 输出“hello111” //-o 后面跟着可执行文件的别名

    相关文章

      网友评论

        本文标题:linux3-shell指令

        本文链接:https://www.haomeiwen.com/subject/ayslrttx.html