Linux基础二


1. 文件命名规则

  • 长度不能超过255个字符;
  • 不能使用/当文件名;
  • 严格区分大小写

2. Linux常用命令(续)

//文本查找 grep egrep fgrep
    grep        //根据模式搜索文本,并将符合模式的文本行显示出来。 \
                //使用基本正则表达式定义的模式来过滤文本的命令。
        Pattern(模式)     //文本字符和正则表达式的元字符组合而成的匹配条件
        -i          //忽略大小写
        --color     //匹配到的内容高亮显示
        -v          //显示没有被模式匹配到的行
        -o          //只显示被模式匹配到的字符串
        -E          //使用扩展正则表达式。grep -E相当于使用egrep
        -q          //静默模式,不输出任何信息
        -A 1        //被模式匹配到的内容以及其后面一行的内容都显示出来,\
                    //如果把1改成2就表示被模式匹配到的内容以及其后面2行的内容均显示出来
        -B 1        //被模式匹配到的内容以及其前面一行的内容都显示出来, \
                    //如果把1改成2就表示被模式匹配到的内容以及其前面2行的内容均显示出来
        -C 1        //被模式匹配到的内容以及其前后的行各显示1行,如果把1改成2 \
                    //就表示被模式匹配到的内容以及其前后的行各显示2行。
        
    fgrep       //不支持正则表达式,执行速度快


//文件查找
    在文件系统上查找符合条件的文件
    locate
        //语法:
            locate KEYWORD
        //非实时,模糊匹配,查找是根据全系统文件数据库进行的,查找的速度快
        //依赖于事先构建的索引。索引的构建是在系统较为空闲时自动进行(周期性任务)
        updatedb        //手动生成文件数据库
        //索引构建过程需要遍历整个根文件系统,极消耗资源
        
    find        //实时查找,精确性强,遍历指定目录中所有文件完成查找, \
                //查找速度慢,支持众多查找标准。
        //语法:find [OPTION...] 查找路径 查找标准 查找到以后的处理动作
        查找路径        //默认为当前目录
        查找标准        //默认为指定路径下的所有文件
            -name 'filename'    //对文件名作精确匹配.支持glob通配符机制
            -iname 'filename'   //文件名匹配时不区分大小写
            -regex pattern      //基于正则表达式进行文件名匹配.以pattern \
                                //匹配整个文件路径字符串,而不仅仅是文件名称
            -user username          //根本属主来查找
            -group groupname        //根据属组来查找
            -uid        //根据UID进行查找,当用户被删除以后文件的属主会变为此用户的UID
            -gid        //根据GID进行查找,当用户被删除以后文件的属组会变为此用户的GID
            -nouser     //查找没有属主的文件.用户被删除的情况下产生的文件,只有uid没有属主
            -nogroup    //查找没有属组的文件.组被删除的情况下产生的文件,只有gid没有属组
            -type       //根据文件类型来查找(f,d,c,b,l,p,s)
            -size       //根据文件大小进行查找。如1k、1M,+10k、+10M,-1k、-1M, \
                        //+表示大于,-表示小于
                [+|-]
                #K、#M、#G
                #Unit表示(从#-1到#之间的范围大小)
                -#Unit表示(从0到#-1的范围大小)
                +#Unit表示(大于#的所有)
            -mtime      //修改时间
            -ctime      //改变时间
            -atime      //访问时间
                +5      //5天前
                -5      //5天以内
            -mmin       //多少分钟修改过
            -cmin       //多少分钟改变过
            -amin       //多少分钟访问过
                +5      //5分钟前
                -5      //5分钟以内
            -perm mode      //根据权限精确查找
            -perm -mode     //文件权限能完全包含此mode时才符合条件
            -perm /mode     //9位权限中有任何一位权限匹配都视为符合查找条件
        
        //组合条件:
            -a
            -o
            -not
            !
            例:
                !A -a !B = !(A -o B)
                !A -o !B = !(A -a B)
                    
        //处理动作:默认为显示到屏幕上
            -print      //显示
            -ls         //类似ls -l的形式显示每一个文件的详细信息
            -delete     //删除查找到的文件
            -fls /path/to/somefile      //查找到的所有文件的长格式信息保存至指定文件中
            -ok COMMAND {} \;   //对查找到的每个文件执行COMMAND,每次操作都需要用户确认
            -exec COMMAND {} \; //对查找到的每个文件执行COMMAND,操作不需要确认
            
            //注意:find传递查找到的文件至后面指定的命令时,查找到所有 \
            //符合条件的文件一次性传递给后面的命令,而有些命令不能接受过多参数, \
            //此时命令执行可能会失败。而xargs可规避此问题。
            xargs   //通过管道将查找到的内容给xargs处理,xargs后面直接跟命令即可

3. 文件层级系统

FHS     //文件层级系统
/       //可以单独分区,LVM分区
/boot       //系统启动相关的文件,如内核(vmlinuz)、initrd(initramfs),\
            //以及grub(bootloader)。建议单独分区,基本分区
/dev        //设备文件。不能单独分区
    设备文件    //关联至一个设备驱动程序,进而能够与之对应硬件设备进行通信
        块设备     //随机访问,数据块(比如硬盘)
        字符设备    //也叫线性设备,线性访问,按字符为单位(比如鼠标、显示器)
        设备号     //主设备号(major)和次设备号(minor)
            主设备号标识设备类型
            次设备号标识同一类型下的不同设备
    设备文件只有元数据,没有数据
/etc        //配置文件
/home       //普通用户的家目录,每一个用户的家目录通常默认为/home/USERNAME。 \
            //建议单独分区
/root       //管理员的家目录。不该单独分区
/lib        //库文件
    静态库     //.a
    动态库     //.dll,.so(shared object)
    /lib/modules    //内核模块文件
/media      //挂载点目录,通常用来挂载移动设备
/mnt        //挂载点目录,通常用来挂载额外的临时文件系统,比如另一块硬盘
/opt        //可选目录,早期通常用来安装第三方程序
/proc       //伪文件系统,内核映射文件(伪文件系统实际上里面是没有任何内容的, \
            //开机之后才映射上去的)。不能单独分区
/sys        //伪文件系统,跟硬件设备相关的属性映射文件(伪文件系统实际上里面是没有 \
            //任何内容的,开机之后才映射上去的)。不能单独分区
/tmp        //临时文件,/var/tmp
/var        //可变化的文件,比如log、cache。存放日志信息、pid文件、lock文件,\
            //建议单独分区
/bin        //可执行文件,用户命令
/sbin       //管理命令
/usr        //shared,read-only,全局共享只读文件。提供操作系统核心功能,可以单独分区
    /usr/bin
    /usr/sbin
    /usr/lib
/usr/local      //第三方软件安装路径
    /usr/local/bin
    /usr/local/sbin
    /usr/local/lib
    /usr/local/etc
    /usr/local/man

/etc,/bin,/sbin,/lib内是系统启动就需要用到的程序,这些目录不能挂载额外的分区,\
必须在根文件系统的分区上

/usr/bin,/usr/sbin,/usr/lib提供操作系统核心功能,/usr可以单独分区

/usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc, \
/usr/local/man等等在/usr/local目录下的内容都是第三方软件,建议单独分区

4. 重定向与管道

//系统设定:
    默认输入设备      //标准输入,STDIN,0  (键盘)
    默认输出设备      //标准输出,STDOUT,1 (显示器)
    标准错误输出      //STDERR,2 (显示器)
    
//I/O重定向:
    >:覆盖输出
    >>:追加输出

2>      //重定向错误输出
2>>     //追加重定向错误输出
&>      //覆盖重定向标准输出或错误输出至同一个文件
&>>     //追加重定向标准输出或错误输出至同一个文件
<       //输入重定向
<<      //Here Document


管道      //前一个命令的输出,作为后一个命令的输入。最后一个命令会在当前shell进程 \
        //的子shell进程中执行
命令1 | 命令2 | 命令3 | ...

tee     //从标准输入读取数据,输出一份到屏幕上,一份保存到文件

[root@localhost ~]# echo "hello world" | tee /tmp/hello.out
hello world
[root@localhost ~]# cat /tmp/hello.out
hello world

5. bash字符串处理

//bash特性之截取变量的字符串
    FILE=/usr/local/src
    echo ${FILE#*/}    结果为    usr/local/src
    echo ${FILE##*/}    结果为    src
    echo ${FILE%/*}    结果为    /usr/local
    
//字符串切片
    ${var:offset:number}
    
//取字符串的最右侧几个字符(自右向左取)
    ${var: -lengh}
    //注意:冒号后必须有一空白字符
    
//查找替换
    ${var/pattern/substi}       //查找var所表示的字符串中,第一次被pattern所匹配到字符串,以substi替换之
    ${var//pattern/substi}      //查找var所表示的字符串中,所有能被pattern所匹配到字符串,以substi替换之
    ${var/#pattern/substi}      //查找var所表示的字符串中,行首被pattern所匹配到字符串,以substi替换之
    ${var/%pattern/substi}      //查找var所表示的字符串中,行尾被pattern所匹配到字符串,以substi替换之
    
//查找并删除
    ${var/pattern}      //查找var所表示的字符串中,第一次被pattern所匹配到字符串,删除之
    ${var//pattern}     //查找var所表示的字符串中,所有被pattern所匹配到字符串,删除之
    ${var/#pattern}     //查找var所表示的字符串中,行首被pattern所匹配到字符串,删除之
    ${var/%pattern}     //查找var所表示的字符串中,行尾被pattern所匹配到字符串,删除之
    
//字符大小写转换
    ${var^^}        //所有小写转换成大写
    ${var,,}        //所有大写转换成小写
        //注意:这里使用的是两个逗号“,,”