Linux文件

别说谁变了你拦得住时间么 提交于 2020-03-27 23:43:02
一、文件系统
    管理文件系统
        文件系统日志方法:
            数据模式  索引节点和文件都会被写入日志;丢失数据风险低,但性能差
            有序模式  只有索引节点数据会被写入日志,但只有数据成功写入后才删除;在性能和安全性之间取得了良好的折中
            回写模式  只有索引节点数据会被写入日志,但不控制文件数据何时写入;丢失数据风险高,但仍比不用日志好
    操作文件系统
        fdisk 创建分区——sudo fdisk /dev/sdb
            fdisk 命令:
            a  设置活动分区标志
            b  编辑BSD Unix系统用的磁盘标签
            c  设置DOS兼容标志
            d  删除分区
            l  显示可用的分区类型
            m  显示命令选项
            n  添加一个新分区
            o  创建DOS分区表
            p  显示当前分区表
            q  退出,不保存更改
            s  为Sun Unix系统创建一个新磁盘标签
            t  修改分区的系统ID
            u  改变使用的存储单位
            v  验证分区表
            w  将分区表写入磁盘
            x  高级功能
        创建文件系统——sudo mkfs.ext4 /dev/sdb
            创建文件系统的命令行程序:
           工 具           用 途
            mkefs       创建一个ext文件系统
            mke2fs      创建一个ext2文件系统
            mkfs.ext3   创建一个ext3文件系统
            mkfs.ext4   创建一个ext4文件系统
            mkreiserfs  创建一个ReiserFS文件系统
            jfs_mkfs    创建一个JFS文件系统
            mkfs.xfs        创建一个XFS文件系统
            mkfs.zfs        创建一个ZFS文件系统
            mkfs.btrfs    创建一个Btrfs文件系统
        type mkfs.ext4    -- type命令判断工具是否可用
        新文件系统挂载(重启linux文件系统不会自动挂载,除非创建在/etc/fstab)
            ——sudo mkdir /mnt/my_partition  -- 创建挂载点
            ——sudo mount -t ext4 /dev/sdb /mnt/my_partition        -- 挂载
        文件系统的检查与修复
            fsck
            fsck 的命令行选项:
            -a  如果检测到错误,自动修复文件系统
            -A  检查/etc/fstab文件中列出的所有文件系统
            -C  给支持进度条功能的文件系统显示一个进度条(只有ext2和ext3)
            -N  不进行检查,只显示哪些检查会执行
            -r  出现错误时提示
            -R  使用 -A 选项时跳过根文件系统
            -s  检查多个文件系统时,依次进行检查
            -t  指定要检查的文件系统类型
            -T  启动时不显示头部信息
            -V  在检查时产生详细输出
            -y  检测到错误时自动修复文件系统
    逻辑卷管理(未文件系统创建逻辑存储设备)
        逻辑卷管理布局:卷组、逻辑卷、物理卷(linux将每一个逻辑卷视为一个物理分区)
        LVM 允许你在Linux上用简单的命令行命令管理一个完整的逻辑卷管理环境
            功能三:快照(备份逻辑卷文件);条带化(跨多个物理硬盘创建逻辑卷);镜像(实时更新的逻辑卷的完整副本)
        使用LVM
            ①定义物理卷:
                通过t命名改变分区类型:t——8e——w(8e代表LVM,w保存)
                sudo pvcreate /dev/sdb1  -- 标记为LVM分区
                sudo pvdisplay /dev/sdb1 -- 查看创建进度( VG Name 内容为空,因为物理卷还不属于某个卷组)
            ②创建卷组
                sudo vgcreate Vol1 /dev/sdb1  -- 创建卷组Voll
                sudo vgdisplay Vol1                        -- 查看创建卷组细节
            ③创建逻辑卷
                lvcreate 的选项:
                -c  --chunksize     指定快照逻辑卷的单位大小
                -C  --contiguous    设置或重置连续分配策略
                -i  --stripes       指定条带数
                -I  --stripesize    指定每个条带的大小
                -l  --extents           指定分配给新逻辑卷的逻辑区段数,或者要用的逻辑区段的百分比
                -L  --size                   指定分配给新逻辑卷的硬盘大小
                    --minor               指定设备的次设备号
                -m  --mirrors           创建逻辑卷镜像
                -M  --persistent       让次设备号一直有效
                -n  --name                   指定新逻辑卷的名称
                -p  --permission       为逻辑卷设置读/写权限
                -r  --readahead       设置预读扇区数
                -R  --regionsize       指定将镜像分成多大的区
                -s  snapshot               创建快照逻辑卷
                -Z  --zero                   将新逻辑卷的前1 KB数据设置为零
              sudo lvcreate -l 100%FREE -n lvtest Vol1  -- 为逻辑卷命名lvtest(指定卷组Voll)
              sudo lvdisplay Vol1        -- 查看逻辑卷创建细节  
            ④创建文件系统
                sudo mkfs.ext4 /dev/Vol1/lvtest
                sudo mount /dev/Vol1/lvtest /mnt/my_partition -- 挂载
            ⑤修改LVM
                Linux LVM命令:
                vgchange  激活和禁用卷组
                vgremove  删除卷组
                vgextend  将物理卷加到卷组中
                vgreduce  从卷组中删除物理卷
                lvextend  增加逻辑卷的大小
                lvreduce  减小逻辑卷的大小

二、文件
    清空当前界面(clear)
    查看历史命令(history)
    列出文件和目录(ls):
    ls  -- 按列字母排序列出
    ls -a   -- 列出包括文件前代·的隐藏文件*(!隐藏文件的查看方式:cat .bash_history )
    ls -F     -- 区别文件和目录列出,文件后加正斜线区分/,文件后加*表示有执行权限的文件
    ls -F -R  -- 递归文件。直到所有目录或子目录下的文件。
    ls -l   -- 长列表显示文件详细信息:文件属性(类型和权限)、数量(!对于目录文件(-2)才是实际子目录的个数)、属主、属组、字节大小(byte)、上次更改时间、文件名。(!可以仅查看某个目录:ls -ld New_Dir 文件:ls -l new_file.sh)
               支持通配符使用?*(?号代表一个字符,*号代表0个或多个字符)
               支持正则表达式:
                   ls -l my_scr[ai]pt  a 或 i
                   ls -l f[a-i]ll      a 到 i
                   ls -l f[!a]ll                排除 a
    扩展:!列出当前环境所有包括隐藏文件:ls -al
          !列出当前环境所有包括隐藏文件 并区别目录:ls -F -al
          !列出当前环境所有包括隐藏文件 区别目录 并递归:ls -FR -al

    切换目录(cd):
    HFS标准(文件系统层次结构标准):http://www.pathname.com/fhs
    Linux目录名称
        /  虚拟目录的根目录。通常不会在这里存储文件
        /bin  二进制目录,存放许多用户级的GNU工具
        /boot  启动目录,存放启动文件
        /dev  设备目录,Linux在这里创建设备节点
        /etc  系统配置文件目录
        /home  主目录,Linux在这里创建用户目录
        /lib  库目录,存放系统和应用程序的库文件
        /media  媒体目录,可移动媒体设备的常用挂载点
        /mnt  挂载目录,另一个可移动媒体设备的常用挂载点
        /opt  可选目录,常用于存放第三方软件包和数据文件
        /proc  进程目录,存放现有硬件及当前进程的相关信息
        /root  root用户的主目录
        /sbin  系统二进制目录,存放许多GNU管理员级工具
        /run  运行目录,存放系统运作时的运行时数据
        /srv  服务目录,存放本地服务的相关文件
        /sys  系统目录,存放系统硬件信息的相关文件
        /tmp  临时目录,可以在该目录中创建和删除临时工作文件
        /usr  用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里
        /var  可变目录,用以存放经常变化的文件,比如日志文件
    cd /bin       -- 进入bin目录(!绝对路径:目录或文件前加(/))
    cd bin     -- 进入当前目录下一个目录bin(!相对路径)
    cd ../bin  -- 进入bin的父目录(!扩展:cd ../../bin )
    cd                -- 返回当前用户起始目录(!查看当前目录位置:pwd )

    处理目录(可以使用tree工具检查目录)
        创建:
            mkdir New_Dir        -- 创建新目录
            mkdir -p New_Dir/Sub_Dir/Under_Dir        -- 创建层级目录
        删除:
            rmdir New_Dir        -- 删除空目录
            rm -ri New_Dir    -- 每一级提示删除:目录文件都删除掉
            rm -rf New_Dir    -- 递归删除(!强制删除:不提示,目录和文件一起删除)
        更改:
            mv Old_Dir New_Dir  -- 修改目录名(!New_Dir若存在,则会将Old_Dir移动到New_Dir下 )

    处理文件
        创建:
            touch New_Dir/my_file        -- 创建空文件,当文件存在更改修改时间
        删除:
            rm -i file        -- 删除文件(会有提示)
            rm -f file    -- 强制删除文件(不会有提示,慎用)
        更改:
            mv old_file new_Scripts        -- 移动或重命文件(!如果 new_Scripts 文件存在将被覆盖,如果 new_Scripts 是文件夹,old_file将被移动到文件夹 new_Scripts 下 )
            touch -a old_file        -- 更改访问时间(!默认显示更改时间,查看文件内容的时间不会显示。查看访问时间:ls -l --time=atime new_file)
        复制(cp):
            cp old_file new_file  -- 复制old_file,命名为new_file
            cp -i old_file Old_Dir/    -- 将old_file文件复制到Old_Dir下。如果Old_Dir有old_file文件,会提示是否覆盖
            cp -R Scripts/ Mod_Scripts/        -- 递归复制文件夹中所有内容到Mod_Scripts/ (扩展!备份script结尾的文件:cp *script Mod_Scripts/ )    
        链接(ln):
            创建软链接
                ln -s data_file sl_data_file        -- 符号链接sl_data_file(注意不要软链接上创建软连接,容易断裂和混乱)
            创建硬链接
                ln data_file sl_data_file                -- 硬链接(其实是同一个文件属性更改,如重命名,inode编码并没有改变。!查看文件的唯一inode编码:ls -i *data_file(扩展:ls -li *data_file 长列表显示))
        查看文件(file、cat、more):
            一、file tmp  -- 查看文件类型:确定该文本文件的 字符编码、文件类型    
            二、cat(查看所有内容。所有展示一旦运行不能停止,不适合大型文件查看)
                cat old_file
                cat -n old_file    -- 给查看文件加上行号
                cat -b old_file  -- 给有文本的加上行号
                cat -T old_file  -- T 参数会用 ^I 字符组合去替换文中的所有制表符
            三、more(分页工具:会在显示每页数据之后停下来,q键退出)
            四、less(more的升级版,部分中文会转数字不好用)
            五、查看文件首尾数据
                head old_file        -- 默认查看前面10行数据
                head -5 old_file  -- 限制查看前五行数据
                fail old_file  -- 默认查看倒数10行数据 
                fail -n 2 old_file  -- 限制查看倒数2行数据
        编辑:
            流编辑器:sed、gwak
            交互式编辑器:vim

    排序(sort):
    sort 命令参数:
        -b  --ignore-leading-blanks         排序时忽略起始的空白
        -C  --check=quiet                 不排序,如果数据无序也不要报告
        -c  --check                       不排序,但检查输入数据是不是已排序;未排序的话,报告
        -d  --dictionary-order            仅考虑空白和字母,不考虑特殊字符
        -f  --ignore-case                 默认情况下,会将大写字母排在前面;这个参数会忽略大小写
        -g  --general-number-sort         按通用数值来排序(跟 -n 不同,把值当浮点数来排序,支持科学计数法表示的值)
        -i  --ignore-nonprinting          在排序时忽略不可打印字符
        -k  --key=POS1[,POS2]             排序从POS1位置开始;如果指定了POS2的话,到POS2位置结束
        -M  --month-sort                  用三字符月份名按月份排序
        -m  --merge                       将两个已排序数据文件合并
        -n  --numeric-sort                按字符串数值来排序(并不转换为浮点数)
        -o  --output=file                 将排序结果写出到指定的文件中
        -R  --random-sort                 按随机生成的散列表的键值排序
            --random-source=FILE          指定 -R 参数用到的随机字节的源文件
        -r  --reverse                     反序排序(升序变成降序)
        -S  --buffer-size=SIZE            指定使用的内存大小
        -s  --stable                      禁用最后重排序比较
        -T  --temporary-directory=DIR     指定一个位置来存储临时工作文件
        -t  --field-separator=SEP         指定一个用来区分键位置的字符
        -u  --unique                      和 -c 参数一起使用时,检查严格排序;不和 -c 参数一起用时,仅输出第一例相似的两行
        -z  --zero-terminated             用NULL字符作为行尾,而不是用换行符
    sort file  -- 按字符排序
    sort -n file -- 按数值排序(!默认升序。降序排列:sort -nr file ) 
    sort -t ':' -k 3 -n /etc/passwd    -- -t 以分隔符:分隔,-k 3代表行第三列该列排序 

    查找文本特定信息(grep):
    grep three file     -- 搜索文件中的three的文本.如:grep ly_sw_cs /etc/passwd 查看ly_sw_cs用户是否可以使用系统
    grep -v t file   -- 输出不匹配t的行
    grep -n t file        -- 如果要显示匹配模式的行所在的行号,可加 -n 参数
    grep -c t file   -- 如果只要知道有多少行含有匹配的模式,可用 -c 参数  
    grep -e t -e f -e ,file         -- 输出了含有字符 t 或字符 f 或',' 的所有行  
    grep [tf] file   -- 正则表达式,t或f或',',同-e

    压缩文件(gzip,tar)
    gzip file        -- 压缩文件file,支持通配符gzip file* (原文件转化为压缩文件 file.gz )
    tar 命令的功能(归档):
        -A  --concatenate        将一个已有tar归档文件追加到另一个已有tar归档文件
        -c  --create             创建一个新的tar归档文件
        -d  --diff               检查归档文件和文件系统的不同之处
            --delete             从已有tar归档文件中删除
        -r  --append             追加文件到已有tar归档文件末尾
        -t  --list               列出已有tar归档文件的内容
        -u  --update             将比tar归档文件中已有的同名文件新的文件追加到该tar归档文件中
        -x  --extract            从已有tar归档文件中提取文件
        -C dir                   切换到指定目录
        -f file                  输出结果到文件或设备 file
        -j                       将输出重定向给 bzip2 命令来压缩内容
        -p                       保留所有文件权限
        -v                       在处理文件时显示文件
        -z                       将输出重定向给 gzip 命令来压缩内容   
    tar -cvf test.tar test/ test2/   -- 创建了名为test.tar的归档文件,含有test和test2目录内容 (打包)
    tar -tf test.tar                 -- 列出tar文件test.tar的内容(但并不提取文件) 
    tar -xvf test.tar                -- 从tar文件test.tar中提取内容(解包)
    以.tgz结尾的gzip文件是压缩过的tar文件可用命令 tar -zxvf filename.tgz 来解压
    
三、文本编辑工具
    linux编辑器分类:
        ?  vim编辑器
        ?  nano编辑器
        ?  emacs编辑器
        ?  KWrite编辑器
        ?  Kate编辑器
        ?  GNOME编辑器
    linux的交互式编辑器选择一种就可以了
    交互式编辑器vim:
        检查vim软件包
            which vim -- /usr/bin/vim
            readlink -f /usr/bin/vi -- 找出链接文件的最后一环/usr/bin/vim.tiny
        vim基础
            vim编辑器有三种操作模式(ESC到一般模式与其他模式切换):
                一般模式
                插入模式(i a A o R 进入)    
                命令行模式(/ :进入)
            vim中有用来移动光标的命令(处理放向键失灵的特殊情况):
                h :左移一个字符。
                j :下移一行。
                k :上移一行。
                l :右移一个字符。
            vim提供了一些能够提高移动速度的命令:
                PageDown(或Ctrl+F):下翻一屏。
                PageUp(或Ctrl+B):上翻一屏。
                G :移到缓冲区的最后一行。
                gg :移到缓冲区的第一行。
                num G :移动到缓冲区中的第num行。        
            vim命名行(普通模式下键入:):
                q! :取消所有对缓冲区数据的修改并退出
                wq :将缓冲区数据保存到文件中并退出
            复制和黏贴:普通模式下,通过寄存器使用p命名实现
                剪切黏贴:x/dw/dd/d$;p
                复制黏贴:yw/y$;p(yw表示复制一个单词,y$表示复制到行尾)
            查找和替换
                查找的3种情况,下斜线+单词查找,要继续查找同一个单词,按下斜线键,然后按回车键:(在一般模式中直接使用 /+字符串 查找)
                    如果要查找的文本出现在光标当前位置之后,则光标会跳到该文本出现的第一个位置。
                    如果要查找的文本出现在光标当前位置之前,则光标会绕过文件末尾,出现在该文本所在的第一个位置(并用一条消息指明)。
                    输出一条错误消息,说明在文件中没有找到要查找的文本。
                替换
                    :s/old/new/ :替换当前行的第一个old
                    :s/old/new/g :一行命令替换所有 old 。
                    :n,ms/old/new/g :替换行号 n 和 m 之间所有 old 。
                    :%s/old/new/g :替换整个文件中的所有 old 。
                    :%s/old/new/gc :替换整个文件中的所有 old ,但在每次出现时提示。
            vim常用命令解释:
                x  删除当前光标所在位置的字符
                dd  删除当前光标所在行
                dw  删除当前光标所在位置的单词
                d$  删除当前光标所在位置至行尾的内容
                J  删除当前光标所在行行尾的换行符(拼接行)        
                u  撤销前一编辑命令
                i  在当前光标前插入数据
                a  在当前光标后追加数据
                A  在当前光标所在行行尾追加数据
                o  在当前光标所在行上添加一行
                r  用char替换当前光标所在位置的单个字符
                R  用text覆盖当前光标所在位置的数据,直到按下ESC键

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!