Linux基础一


1. Linux基本原则

  • 由目的单一的小程序组成,组合小程序完成复杂任务;
  • 一切皆文件;
  • 配置文件保存为纯文本格式。

2. bash特性

2.1 shell

shell(外壳),广义的shell可以理解为是用户的工作环境,在windows看来桌面就是一个shell,在linux看来终端就是shell

常见的shell有两种,一种是图形界面,即GUI,一种是命令行终端,即CLI。

常用的GUI:Graphic User Interface

  • Windows
  • X-Window
    • Gnome
    • KDE
    • Xface

常用的CLI:Command Line Interface

  • bash
  • sh
  • csh
  • zsh
  • ksh
  • tcsh

2.2 bash特性

bash支持以下特性:

  • 支持命令历史、命令补全
  • 支持管道、重定向
  • 支持命令别名
  • 支持命令行编辑
  • 支持命令行展开
  • 支持文件名通配
  • 支持变量
  • 支持编程

2.2.1 bash支持的引号

``      //反引号,键盘左上角Esc下面的键,用于命令替换
""      //双引号,弱引用,可以实现变量替换
''      //单引号,强引用,不完成变量替换

2.2.2 bash常用操作

//光标跳转
    Ctrl+a      //跳到命令行首
    Ctrl+e      //跳到命令行尾
    Ctrl+u      //删除光标至命令行首的内容
    Ctrl+k      //删除光标至命令行尾的内容
    Ctrl+<--    //光标定位到离自己最近的一个单词前面
    Ctrl+l      //清屏
    
//命令历史
    history     //查看命令历史
        -c              //清空命令历史
        -d OFFSET [n]   //删除指定位置的命令历史
        -w              //保存命令历史至历史文件~/.bash_history中
        
    //命令历史的使用技巧
        !n          //执行命令历史中的第n条命令
        !-n         //执行命令历史中倒数第n条命令
        !!          //执行上一条命令
        !string     //执行命令历史中最近一个以指定字符串开头的命令
        !$          //引用前一个命令的最后一个参数
        esc,.       //按下esc松开后按.,引用前一个命令的最后一个参数
            
//命令补全    
    搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件, \
    如果多于一个,两次tab,可以给出列表,否则将直接补全

//路径补全    
    搜索我们给出的起始路径下的每个文件名,并试图补全

//命令别名:    
    alias CMDALIAS='COMMAND [options] [arguments]'
    
    在shell中定义的别名仅在当前shell生命周期中有效,别名的有效范围为当前的shell进程。
    
//命令替换(把命令中某个子命令替换为其执行结果的过程)
    $(COMMAND)      //推荐方式
    或
    `COMMAND`
    
//命令行展开
    ~       //展开为用户的家目录
    ~USERNAME   //展开为指定用户的家目录
    {}      //可承载一个以逗号分隔的列表,并将其展开为多个路径
        /tmp/{a,b}  = /tmp/a, /tmp/b
        /tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi
    
//文件名通配 globbing
    *       //匹配任意长度的任意字符
    ?       //匹配任意单个字符
    []      //匹配指定范围内的任意单个字符
        [abc],[a-m],[0-9]
        [[:space:]]    //表示空白字符
        [[:punct:]]    //表示标点符号
        [[:lower:]]    //表示小写字母
        [[:upper:]]    //表示大写字母
        [[:alpha:]]    //表示大小写字母
        [[:digit:]]    //表示数字
        [[:alnum:]]    //表示数字和大小写字母
        
    使用man 7 glob命令可以获得以上字符集合的帮助信息!!!
    
    [^]     //匹配指定范围之外的任意单个字符

//环境变量
    PATH        //命令搜索路径
    HISTSIZE    //命令历史缓冲区大小
    SHELL       //当前shell
//bash内置变量
    RANDOM      //保存着0-32768之间的随机数

3. 命令

3.1 命令格式

命令  [选项]    [参数]

选项:(可以有0个或多个)
    短选项:-
        多个选项可以组合: -a -b = -ab
    长选项:--
        长选项通常不能组合
        
参数:命令的作用对象(可以有0个或多个)

3.2 命令类型

Linux命令分为两种类型:

  • 内部命令(shell内置)
  • 外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件
type    //显示指定命令属于哪种类型

3.3 基础命令

//目录管理
    ls      //列出目录内容
        -l      //长格式
            文件类型
                -   //普通文件(f)
                d   //目录文件
                b   //块设备文件(block)
                c   //字符设备文件(character)
                l   //符号链接文件(symbolic link file)
                p   //命令管道(pipe)
                s   //套接字文件(socket)
            文件权限        //9位,每3位一组,每一组:rwx(读,写,执行)
            文件硬链接的次数
            文件的属主(owner)
            文件的属组(group)
            文件大小(size),单位是字节
            时间戳(timestamp),最近一次被修改的时间
                访问      //access
                修改      //modify,文件内容发生改变
                改变      //change,metadata(元数据)
         -h     //做单位转换
         -a     //显示以.开头的隐藏文件
            .       //表示当前目录
            ..      //表示父目录
         -d     //显示目录自身属性
         -i     //显示文件的inode(index node)
         -r     //逆序显示
         -R     //递归(recursive)显示
    cd      //改变当前工作目录
    pwd     //打印当前工作目录路径
    mkdir   //创建目录
        -p      //创建目录时若父目录不存在则自动创建
        -v      //显示目录创建过程
    rmdir   //删除目录,只能删除空目录
    tree    //查看目录树
        
                    
//文件管理
    touch   //无中生有、万象更新
    stat    //显示文件或文件系统的状态
    rm      //删除文件,删除命令默认会提示是否需要删除, \
            //如果要使用命令本身可以在命令前加一个\,如\rm,这样删除就不会有提示了
        -r      //递归删除,删除目录时必须使用此选项
        -f      //强制删除,不询问
    cp      //复制文件,一个文件到一个文件,多个文件到一个目录
        -a      //归档复制,常用于备份
        -r      //递归拷贝,拷贝目录时必须使用此选项
        -p      //拷贝时保留原权限
    mv      //移动文件
    install     //复制文件并且设置属性
        -m MODE
        -o OWNER
        -g GROUP

//压缩、解压缩命令
    //压缩格式
        gz,bz2,xz,zip,Z
            
    gzip        //压缩后的文件以.gz结尾
        gzip /path/to/somefile    //压缩完成后会删除原文件
        -d      //解压缩,解压完成后会删除原文件
        -c      //将结果输出至标准输出
        -#      //#用1-9代替,指定压缩比,默认为6
    gunzip      //解压
        gunzip /path/to/some_compress_file.gz    //解压完成后会删除原文件        
    zcat /path/to/somefile.gz       //不解压的情况下查看文本文件的内容
    
    bzip2       //压缩后的文件以.bz2结尾
        //bzip2是一款比gzip有着更大压缩比的压缩工具,使用格式近似
        bzip2 /path/to/somefile    //压缩完成后会删除原文件
        -d      //解压缩,解压完成后会删除原文件
        -#      //#用1-9代替,指定压缩比,默认为6
        -k      //keep,压缩时保留原文件
    bunzip2     //解压
        bunzip2 /path/to/some_compress_file.bz2    //解压完成后会删除原文件
    bzcat /path/to/somefile.bz2     //不解压的情况下查看文本文件的内容
    
    xz          //压缩后的文件以.xz结尾
        //比bzip2有着更大压缩比的压缩工具,使用格式近似
        xz /path/to/somefile    //压缩完成后会删除原文件
        -d      //解压缩,解压完成后会删除原文件
        -#      //#用1-9代替,指定压缩比,默认为6
        -k      //keep,压缩时保留原文件
    unxz        //解压
        unxz /path/to/some_compress_file.xz    //解压完成后会删除原文件
    xzcat /path/to/somefile.xz      //不解压的情况下查看文本文件的内容
    
    zip     //既归档又压缩的工具。zip可以压缩目录,\
            //gz、bz2、xz都只能压缩文件,zip压缩后不会删除原文件
        zip filename.zip file1 file2 ...
        zip filename.zip DIR/*
    unzip
        unzip filename.zip
        
    archive     //归档,归档本身并不意味着压缩
    tar     //归档工具,只归档不压缩
        -c      //创建归档文件
        -f file.tar     //操作的归档文件
        -x      //还原归档
        -v      //显示归档过程
        -p      //归档时保留权限信息。只有管理员才有权限用此选项
        -C      //将展开的归档文件保存至指定目录下
        --delete    //从归档文件中删除文件
        --xattrs    //在归档时保留文件的扩展属性信息
        -tf /path/to/file.tar       //不展开归档,直接查看归档了哪些文件
        -zcf    //归档并调用gzip压缩
        -zxf    //调用gzip解压缩并展开归档

        -jcf    //归档并调用bzip2压缩
        -jxf    //调用bzip2解压缩并展开归档

        -Jcf    //归档并调用xz压缩
        -Jxf    //调用xz解压缩并展开归档
    
//查看文本
    cat     //拼接文件内容并输出至标准输出(屏幕)
        -n      //显示行号
        //使用cat查看文件内容时会将文件的所有内容加载至内存, \
        //所以应避免使用cat打开巨大文件
    more    //全屏查看文本文件内容,只能从前往后,不能从后往前。\
            //文件内容显示完后自动退出
    less    //全屏查看文本文件内容,可从前往后亦可从后往前。推荐使用
    head    //从头部开始打印文件内容,默认打印10行
        -n      //指定要打印的行数,可以是-n 15也可以是-15
    tail    //查看文本文件尾部内容
        -n      //指定要打印的行数,可以是-n 15也可以是-15
    
//文本处理
    cut     //截取文本内容
        -d      //指定字段分隔符,默认是空格
        -f      //指定要显示的字段
            -f 1,3    显示1和3
            -f 1-3    显示1到3
    sed     //基于行的过滤和转换文本的流编辑器
    awk     //基于列的文本报告工具
    
//文本排序
    sort    //默认升序排序,不是按数值大小排序的
        -n      //根据数值大小进行排序
        -r      //逆序排序
        -t      //字段分隔符
        -k      //以哪个字段为关键字进行排序
        -u      //去重,排序后相同的行只显示一次
        -f      //排序时忽略字符大小写
        
    uniq    //报告重复的行(连续且完全相同方为重复)
        -c      //显示文件中行重复的次数
        -d      //只显示重复的行
        -u      //只显示未重复的行
        
//文本统计
    wc(word count)
        -c      //显示字节数
        -l      //显示行数
        -w      //显示单词数
        
//大小统计
    du      //查看文件或目录占用的磁盘空间大小
        -h      //以人类友好的方式显示大小
        -s      //显示总的占用空间大小
    df      //报告文件系统磁盘空间使用情况
        -h      //以人类友好的方式显示大小
        -i      //显示inode信息
        
//主机名管理
    hostname        //查看或临时修改主机名,重开终端有效,重启失效
    hostnamectl     //查看或永久修改主机名,重开终端生效,重启依然有效
    
//其它
    time        //显示命令的执行时间,例如time ls /etc
    clear       //清屏
    whoami      //显示当前登录用户
    w           //显示当前在线用户并显示其在运行的命令
    who         //查看当前在线用户
    
    which       //显示指定命令的绝对路径
    date        //显示或设置日期与时间
        //不带参数的date用于显示当前系统日期与时间
        -s      //以字符串方式设置时间
        //格式化输出时间:+
            %Y      //年
            %m      //月
            %d      //日
            %H      //时
            %M      //分
            %S      //秒
                        
    ldd     //查看指定程序有哪些依赖库文件
        程序组成?
            二进制程序
            库文件
            配置文件
            帮助文件

3.4 如何获取命令帮助

//内部命令
    help COMMAND
//外部命令
    COMMAND --help
//在线文档
    info COMMAND    
//命令手册  manual
    man COMMAND
//文档
    /usr/share/doc 
    
whatis COMMAND      //用于查看COMMAND出现在man的哪一章节中。

//man是分章节的,以下是每一章节的内容介绍:
    1   用户命令(/bin,/usr/bin,/usr/local/bin);
    2   系统调用;
    3   库调用;
    4   特殊文件(设备文件);
    5   文件格式(配置文件 的语法);
    6   游戏;
    7   杂项(Miscellaneous);
    8   管理命令(/sbin,/usr/sbin,/usr/local/sbin)
    
//man手册注意事项:
    []              //可选
    <>              //必选
    ...             //可以出现多次
    |               //多选一
    {}              //分组
    NAME            //命令名称及功能简要说明
    SYNOPSIS        //用法说明,包括可用的选项
    DESCRIPTION     //命令功能的详尽说明,可能包括每一个选项的意义
    OPTIONS         //说明每一个选项的意义
    FILES           //此命令相关的配置文件
    BUGS            //报告bug
    EXAMPLES        //使用示例
    SEE ALSO        //另外参照
    
//man翻屏
    向后翻一屏       //SPACE
    向前翻一屏       //b
    向后翻一行       //enter
    向前翻一行       //k
    
//查找
    /KEYWORD    //向后
    ?KEYWORD    //向前
    n           //下一个
    N           //前一个
    q           //退出