zoukankan      html  css  js  c++  java
  • Linux系统文件管理

    文件管理
    挂载光盘 :/misc/cd
    systemctl status autofs
    如果运行:
    yum -y installs autofs
    systemctl start autofs
    systemctl enable autofs
    systemctl enable --now autofs (前两个命令同时进行)

    文件系统目录结构:
    文件系统从根目录下开始,用“/”表示
    文件或目录被组织成一个单根倒置树结构
    以.开头为隐藏文件
    路径分隔/
    文件名最长255字节
    路径在内文件名称最长4095字节
    蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 灰色-->其他文件
    每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容

    文件系统的目录功能:
    /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
    /bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
    /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
    /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
    /lib64:专用于x86_64系统上的辅助共享库文件存放位置
    /etc:配置文件目录
    /home/USERNAME:普通用户家目录
    /root:管理员的家目录
    /media:便携式移动设备挂载点
    /mnt:临时文件系统挂载点
    /dev:设备文件及特殊文件存储位置
    b: block device,随机访问
    c: character device,线性访问
    /opt:第三方应用程序的安装位置
    /srv:系统上运行的服务用到的数据
    /tmp:临时文件存储位置
    /usr: universal shared, read-only data
    bin: 保证系统拥有完整功能而提供的应用程序
    sbin:
    lib:32位使用
    lib64:只存在64位系统
    include: C程序的头文件(header files)
    share:结构化独立的数据,例如doc, man等
    local:第三方应用程序的安装位置
    bin, sbin, lib, lib64, etc, share
    /var: variable data files
    cache: 应用程序缓存数据目录
    lib: 应用程序状态信息数据
    local:专用于为/usr/local下的应用程序存储可变数据
    lock: 锁文件
    log: 日志目录及文件
    opt: 专用于为/opt下的应用程序存储可变数据
    run: 运行中的进程相关数据,通常用于存储进程pid文件
    spool: 应用程序数据池
    tmp: 保存系统两次重启之间产生的临时数据
    /proc: 用于输出内核与进程信息相关的虚拟文件系统
    /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
    /selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置

    Linux文件类型:
    ll 显示文件
    开头有: -为一般文件
    c为字符设备
    b为块设备
    d为目录
    l链接文件link
    p管道文件pipe
    s套接字文件socket
    hexdump -c 二进制工具(查看文件字节二进制)
    dd if=/dev/zero input of=f2.txt 从文件里读数据

    文件操作命令:
    pwd 查看当前路径(特殊场景下,相对于某目录的路径)
    pwd -P 显示真实路径
    环境变量:
    OLDPWD 上一次目录路径
    PWD 当前目录路径
    绝对路径和相对路径:
    绝对路径:以正斜杠/ 即根目录开始
    完整的文件的位置路径,可用于任何想指定一个文件名的时候
    相对路径:不以斜线开始
    一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置
    可以作为一个简短的形式指定一个文件名
    dirname 只取路径,不要文件名
    basename 只取文件名,不要路径

    cd 切换目录
    cd -p 切换物理路径,非软链接路径
    cd.. 切换至父目录
    cd 切换至用户主目录
    cd - 切换至上次工作目录

    ls 外部命令 列出当前目录内容或指定内容
    ls -a 查看包括隐藏文件
    ls -R 表示目录递归
    ls -l 查看文件下内容
    ls -dl 查看目录本身内容和符号链接信息
    ls -1 文件分行显示
    ls -S 按从小到大排序
    ls -t 按Mtime排序
    ls -u 配合-t使用,显示按atime从新到旧排序
    ls -U 按目录存放顺序显示
    ls -X 按文件后缀排序

    变量:
    /etc/DIR_COLORS
    @LS_COLORS 定义不同后缀文件颜色

    .当前目录
    ../上级目录 ../..上级目录的上级目录

    modify time 文件修改时间
    change time 文件的属性更改时间ll --time=ctime 文件(anaconda-ks.cfg)
    accesst time 文件内容更改时间
    stat 文件 查看文件所有时间(可查看节点编号)
    Inode 唯一编号
    chown 更改文件所有者 chown liu 文件
    magic number

    file 查看文件类型
    file -f 读取文件内容对内容批量分析
    file -b 列出文件辨识结果时,不显示文件名称
    file -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
    file -L 查看对应软链接对应文件的文件类型
    file --help 显示命令在线帮助

    ELF 二进制文件(cat 只能看文本文件)
    hexdump -C 二进制工具
    mv /bin/ls /bin/ls.txt 修改文件名称

    Linux和windows区别:
    在Linux中回车和换行用一个字节表示,windows中回车和换行分别用两个表示
    更改文本格式:
    dos2unix (window转化linux)
    unix2dos (Linux转化windows)
    sz 将文件从Linux系统传到windows系统
    lrzsz (yum -y instell lrzsz 安装之后windows文件可拖至Linux中)
    iconv -l 查看全球编码
    转换文件字符集编码:
    iconv -f gb2312 windows.txt -o windows1.txt (gb2312转换为utf8)
    iconv -f utf8 -t gb2312 windows1.txt -o windows11.txt(utf8转换为gb2312)

    文件通配符:
    可以用来匹配符合条件的多个文件,方便管理文件
    * 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
    ? 匹配任何单个字符
    ~ 当前用户家目录
    ~mage 用户mage家目录
    ~+和. 当前工作目录
    ~- 前一个工作目录
    [0-9] 匹配数字范围
    [a-z] 字母
    [A-Z] 字母
    [wang] 匹配列表中的任何的一个字符
    [^wang] 匹配列表中的所有字符以外的字符

    在Linux系统中预定义的字符类:
    [:digit:]:任意数字,相当于0-9
    [:lower:]:任意小写字母,表示 a-z
    [:upper:]: 任意大写字母,表示 A-Z
    [:alpha:]: 任意大小写字母
    [:alnum:]:任意数字或字母
    [:blank:]:水平空白字符
    [:space:]:水平或垂直空白字符
    [:punct:]:标点符号
    [:print:]:可打印字符
    [:cntrl:]:控制(非打印)字符
    [:graph:]:图形字符
    [:xdigit:]:十六进制字符
    例:
    ls file[a-c].txt 会列出a.txt ,A.txt,b.txt,B.txt,c.txt(小大小大格式排列)
    ls file[[:lower:]].txt 列出所有小写字母开头的txt
    * 表示任意字符串(匹配不了隐藏文件)
    rm -f * 删除本目录下所有文件(删不了隐藏文件)
    ls -A 显示目录下所有文件 (不包括. ..)
    ls -d.* 显示隐藏文件和目录列表
    ls -d.*/ 显示隐藏文件目录

    touch 不存在的文件 ,创建文件(通配符不识别,通配符用于搜索文件,过滤现有文件)
    存在的文件,只会刷新时间
    -a 仅改变 atime和ctime
    -m 仅改变 mtime和ctime
    -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
    -c 如果文件不存在,则不予创建

    复制文件
    cp 实现文字或目录的复制(复制内容不变,属性会变化)
    cp /etc/issue /data/issue.bak
    cp -p 保留属性复制
    cp -r,-R 递归(复制文件夹里所有文件)
    cp -a 保留所有属性(用来备份的命令)
    cp -av 显示复制过程
    cp -i 如果目标存在,覆盖前提示是否覆盖
    cp -n 不覆盖,注意两者顺序
    cp -d --no-dereference --preserv=links 不复制原文件,只复制链接名
    cp -b 目标存在,覆盖前先备份,形式为filename~,只保留最近的一个版本
    cp --backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留多
    个版本

    mv 移动和重命名文件
    同一分区移动数据,速度很快:数据位置没有变化
    不同分区移动数据,速度相对慢:数据位置发生了变化
    . 当前目录(可以直接复制.)
    ..上级目录
    -i 交互式
    -f 强制
    -b 目标存在,覆盖前先备份

    rename 批量修改文件名
    rename cof cof.bak *
    rename .bak ' ' *

    rm 删除文件 (命令危险,用mv代替rm)
    rm -i 交互式
    rm -f 强制删除
    rm -r 递归
    --no-preserve-root 删除/
    rm -rf .【^.】* 删除当前目录下的隐藏文件
    rm -rf * .[^.] * 删除当前目录下隐藏和非隐藏文件
    rm -rf /* 删除根目录
    rm -- -f 如果删除的文件“-f”带有“-”,可以用--
    shred(安全删除文件)
    -z 最后一次覆盖添加0,以隐藏覆盖操作
    -v 能够显示操作进度
    -u 覆盖后截断并删除文件
    -n # 指定覆盖文件内容的次数(默认值是3次)

    目录操作
    tree 显示目录树
    tree -d 只列文件夹,不列文件
    tree -L level: 指定显示的层级数目
    tree -P pattern: 只显示由指定wild-card pattern匹配到的路径
    显示目录结构(需要安装 dnf -y install tree)

    创建目录
    mkdir dir1 建立文件夹
    mkdir -p dir1/dir2/dir3 (上级文件夹空直接创建)
    mkdir -pv 能看到创建过程
    删除空目录
    rmdir dir1 删除文件夹(空文件夹)
    rmdir -p dir1/dir2/dir3

    文件元数据和节点表
    块文件单位:4k
    直接指针和间接指针(低于48k用直接,高于用间接)
    双重间接
    节点编号(可复用,有使用范围)
    不同分区中可以有两个不同的文件使用相同的节点编号,不能一个文件有多个节点编号。
    节点表(目录不放在节点表)
    一个文件移动到新目录,没有移动到新分区,节点编号不改变,如果跨分区,节点编号会改变。
    df -i 可查看分区允许的节点标号
    1问:提示空间no space left on device ,但df可以看到空间很多,为什么?
    答:节点编号用完了,没有空余的节点编号。
    2问:通过df -h查看到boot空间还有很多,却运行占用过大,怎么回事并如何解决?
    dd if=/dev/zero of=/boot/bigfile bs=1M count=700(创建大文件)[实验:创建一个大文件在boot下]
    boot下运行占用过大,释放运行空间:
    lsof |grep delete 查看正在运行的空间
    如果删除的文件正在运行,不会立即释放空间,释放运行文件空间即可:
    cat /dev/null > /boot/big 清除释放大文件(不删除文件,只释放内容)
    > /boot/bigfile (这个方法不是所有shell都支持)

    链接
    硬链接(hard)
    实现一个文件拥有多个文件名
    ln =link 创建硬链接文件
    ln f1.txt dir1/f1.txt
    ll -i !*(查看文件)(用户前的数字为链接数)
    只要有一个文件名文件都可以访问,删除几个少几个文件名
    注意:不可以跨分区创建硬链接,不可以用文件夹创建硬链接
    drop table message=rm -f /data/mysql/message.idb(大文件)
    ln /data/mysql/message.idb /data/backup/message.idb link

    软链接(soft)符号链接
    相当于win里的快捷方式
    ln -s f1.txt f1.txt.link
    软链接文件依赖于原始文件
    ln -s ../f1.txt dir1/f1.txt.link2
    注意:软链接支持跨分区,也支持文件夹
    相对路径:原始文件相对于软链接的相对目录
    软链接指向内容想改变的话,可以先把软链接删掉,在创建新的软链接指向新的文件内容。(例软件升级,软件回滚)
    rm -rf mysql 删除软链接,源文件存在
    rm -rf mysql/ 删除源文件
    面试:软链接和硬链接的区别:

    文件夹的链接数至少都是2个 ll -i dir1/ -a
    软链接:/dev/null /dev/null1 (不支持跨区创建)

  • 相关阅读:
    jQuery插件开发精品教程,让你的jQuery提升一个台阶
    Elasticsearch 更新和删除文档的过程
    Elasticsearch集群健康状态显示为yellow排查
    Golang官方包依赖管理工具 go mod
    Golang几种常用配置文件使用方法总结
    SQL高级功能:窗口函数
    MySQL经典50题
    MySQL 性能调优和系统资源优化解决方案
    【排序算法】堆排序的推导及实现
    增长策略:如何用AB测试进行活动评估及优化?
  • 原文地址:https://www.cnblogs.com/llliuhuiii/p/12594116.html
Copyright © 2011-2022 走看看