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 (不支持跨区创建)

  • 相关阅读:
    httpcontext in asp.net unit test
    initialize or clean up your unittest within .net unit test
    Load a script file in sencha, supports both asynchronous and synchronous approaches
    classes system in sencha touch
    ASP.NET MVC got 405 error on HTTP DELETE request
    how to run demo city bars using sencha architect
    sencha touch mvc
    sencha touch json store
    sencha touch jsonp
    51Nod 1344:走格子(贪心)
  • 原文地址:https://www.cnblogs.com/llliuhuiii/p/12594116.html
Copyright © 2011-2022 走看看