zoukankan      html  css  js  c++  java
  • 随堂练习 Linux 文件管理

    目录结构

    名称  作用

    /boot  系统启动引导文件存放目录。内核文件(vmlinuxz)以及引导加载器(BootLoader)都存放在此目录下。

    /bin  存放所有用户使用的基本命令,该目录不能独立分区,OS 在启动时会使用到该目录下的文件。

    /sbin  存放管理类的基本命令,该目录不能独立分区,OS 在启动时会使用到该目录下的文件。

    /lib  存放系统启动时程序依赖的基本共享库文件 以及内核模块文件(/lib/modules);还有一个目录叫/lib64 ,他是专用于x86_64 系统上的辅助共享库文件存放位置。

    /etc  配置文件目录。

    /home  普通用户的家目录。

    /root  管理员用户的家目录。

    /media  便携式移动设备挂载点。

    /mnt  临时文件系统挂载点。

    /dev  设备文件及特殊文件存储位置。

    /opt  第三方引用程序的安装位置。

    /srv  系统上运行的服务用到的数据。

    /tmp  临时文件存储位置。

    /usr   universal  shared,  read-only  data

        bin:保证系统拥有完整功能而提供的应用程序

        sbin

        lib:32位使用

        lib64:只存在64位系统

        include:c 程序的头文件

        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  相关的安全策略等信息的存储位置

    应用程序的组成部分

    二进制程序:/bin/sbin/usr/bin/usr/sbin/usr/local/bin   /usr/local/sbin

    库文件:/lib/lib64/usr/lib/usr/lib64/usr/local/lib/usr/local/lib64

    配置文件:/etc/etc/DIRECTORY/usr/local/etc

    帮助文件:/usr/share/man/usr/share/doc/usr/local/share/man/usr/local/share/doc

    文件路径和相关命令

    范例:

    cd   切换到目标目录名

    使用相对路径时,有两个符号有特殊含义:“.” 和 “..”

    :表示当前所在目录

    ..  :表示当前目录的上一级目录,即父目录

    范例:

    当前目录切换至父目录

    [root@localhost etc]# pwd
    /etc
    [root@localhost etc]# cd ./../
    [root@localhost /]# pwd
    /

    另外使用cd 命令切换时,可以使用 “-” 表示切换至当前目录之前所在的目录,所以使用 “-” 可以切换回去,原因是因为每次切换目录前,会先将当前目录的路径存放在变量 OLDPWD 中。

    用 “~” 表示用户的家目录,~USERNAME 表示指定用户的家目录

    范例:

    [root@localhost ~]# pwd
    /root
    [root@localhost ~]# cd /etc

    1)切换至自己的家目录
    [root@localhost etc]# cd ~
    [root@localhost ~]# pwd
    /root

    2)回到切换前所在目录

    [root@localhost ~]# cd -
    /etc

    各种文件类型

    -  普通文件

    d  目录文件

    b  块设备block

    c  字符设备character

    l  符号链接文件link

    p  管道文件pipe

    s  套接字文件socket

    1)普通文件     - 表示普通文件

    范例

    [root@localhost etc]# ls -l /etc/issue
    -rw-r--r--. 1 root root 23 Nov 23 2018 /etc/issue

    2)目录文件  d 表示目录文件

    [root@localhost etc]# ls -l

    drwxr-xr-x. 5 root root 231 Jun 29 17:10 vmware-tools
    drwxr-xr-x. 2 root root 33 Jun 29 17:10 wpa_supplicant
    drwxr-xr-x. 5 root root 57 Jun 29 17:09 X11
    drwxr-xr-x. 4 root root 38 Jun 29 17:09 xdg
    drwxr-xr-x. 2 root root 6 Apr 11 2018 xinetd.d
    drwxr-xr-x. 6 root root 100 Jun 29 17:10 yum

    3)链接文件   l 表示链接文件

    [root@localhost etc]# ls -l

    lrwxrwxrwx.  1 root root     14 Jun 29 17:09 system-release -> centos-release

    4)管道文件   p 表示管道文件

    管道文件有以下局限性

      1)自己写的数据不能自己读

      2)数据一旦被读后,便不在管道中存在,不可反复读取

      3)管道采用半双工通信方式,即同一时间数据只能在一个方向上流动

    由于管道文件是半双工模式,即同一时间只能一个方向传输数据,而后面介绍的套接字文件支持双全工,所以目前使用不多

    常见通信方式有三种:单工,半双工,全双工

    单工:即只能向一个方向传输信息,如传统的收音机

    半双工:可以双向传输信息,但不能同时进行传输,只能轮流进行,如:对讲机

    全双工:可以同时双向传输信息,如:手机

    5)字符设备文件   表示字符设备文件

    范例:

    [root@localhost etc]# ls -l /dev/null /dev/zero /dev/tty*
    crw-rw-rw- 1 root root 1, 3 Jun 29 17:33 /dev/null
    crw-rw-rw- 1 root tty 5, 0 Jun 29 17:33 /dev/tty
    crw--w---- 1 root tty 4, 0 Jun 29 17:33 /dev/tty0
    crw--w---- 1 root tty 4, 1 Jun 29 17:33 /dev/tty1
    crw--w---- 1 root tty 4, 10 Jun 29 17:33 /dev/tty10
    crw--w---- 1 root tty 4, 11 Jun 29 17:33 /dev/tty11
    crw--w---- 1 root tty 4, 12 Jun 29 17:33 /dev/tty12
    crw--w---- 1 root tty 4, 13 Jun 29 17:33 /dev/tty13
    crw--w---- 1 root tty 4, 14 Jun 29 17:33 /dev/tty14

    6)块设备文件  b 表示块设备文件

    范例:

    [root@localhost etc]# ls -l /dev/sd*
    brw-rw---- 1 root disk 8, 0 Jun 29 17:33 /dev/sda
    brw-rw---- 1 root disk 8, 1 Jun 29 17:33 /dev/sda1
    brw-rw---- 1 root disk 8, 2 Jun 29 17:33 /dev/sda2
    brw-rw---- 1 root disk 8, 3 Jun 29 17:33 /dev/sda3
    brw-rw---- 1 root disk 8, 4 Jun 29 17:33 /dev/sda4
    brw-rw---- 1 root disk 8, 5 Jun 29 17:33 /dev/sda5

    7)套接字文件   表示套接字文件

    范例:

    [root@localhost etc]# ls -l

    树状查看目录 tree

    选项:

    -a  显示所有文件和目录

    -A  使用ASNI绘图字符显示树状图而非以ASCII字符组合

    -C  在文件和目录清单加上色彩,便于区分各种类型

    -d  显示目录名称而非内容

    -D  列出文件或目录的更改时间

    -f  在每个文件或目录之前,显示完整的相对路径名称

    -F  在执行文件,目录,Socket,符号链接,管道名称,各自加上“*”,“/”,“=”,“@”,“|” 号

    -g  列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码

    -i  不以阶梯状列出文件或目录名称

    -I pattern i 的大写字母选项表示不显示符合pattern 的文件或目录名称

    -l(小写的 L )如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录

    -n  不在文件和目录清单上加色彩

    -N  直接列出文件和目录名称,包括控制符

    -p  列出权限标示

    -P pattern   只显示符合 pattern 的文件或目录名称

    -q  用“?” 号取代控制字符,列出文件和目录名称

    -s  列出文件或目录大小

    -t  用文件和目录的更改时间排序

    -u  列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码

    -x  将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

    范例:

    1)查看指定目录树的层级

    [root@localhost etc]# tree -L 1 /
    /
    ├── bin -> usr/bin
    ├── boot
    ├── data
    ├── dev
    ├── etc
    ├── home
    ├── lib -> usr/lib
    ├── lib64 -> usr/lib64
    ├── media
    ├── mnt

    2)查看 / 目录下最大层级至二级目录的文件列表

    [root@localhost etc]# tree -L 2 /
    /
    ├── bin -> usr/bin
    ├── boot
    │   ├── config-3.10.0-957.el7.x86_64
    │   ├── efi
    │   ├── grub
    │   ├── grub2
    │   ├── initramfs-0-rescue-d62b0ba7dcfc4b848244858d3f00df91.img
    │   ├── initramfs-3.10.0-957.el7.x86_64.img
    │   ├── symvers-3.10.0-957.el7.x86_64.gz
    │   ├── System.map-3.10.0-957.el7.x86_64
    │   ├── vmlinuz-0-rescue-d62b0ba7dcfc4b848244858d3f00df91
    │   └── vmlinuz-3.10.0-957.el7.x86_64
    ├── data
    ├── dev
    │   ├── agpgart
    │   ├── autofs
    │   ├── block

    3)查看指定目录树中的子目录,不包含文件

    [root@localhost etc]# tree -L 1 -d /etc
    /etc
    ├── alternatives
    ├── audisp
    ├── audit
    ├── bash_completion.d
    ├── binfmt.d
    ├── chkconfig.d
    ├── cron.d

    4)查看指定目录树中的子目录,不包含文件

    [root@localhost etc]# tree -f -p -L 2 /etc/
    /etc
    ├── [-rw-r--r--] /etc/adjtime
    ├── [-rw-r--r--] /etc/aliases
    ├── [-rw-r--r--] /etc/aliases.db
    ├── [drwxr-xr-x] /etc/alternatives
    │   ├── [lrwxrwxrwx] /etc/alternatives/ld -> /usr/bin/ld.bfd
    │   ├── [lrwxrwxrwx] /etc/alternatives/libnssckbi.so.x86_64 -> /usr/lib64/pkcs11/p11-kit-trust.so
    │   ├── [lrwxrwxrwx] /etc/alternatives/mta -> /usr/sbin/sendmail.postfix
    │   ├── [lrwxrwxrwx] /etc/alternatives/mta-aliasesman -> /usr/share/man/man5/aliases.postfi

    创建目录

    mkdir 命令格式

    mkdir  [-pv] [-m mode] directory ...

    选项  说明

    -m    指定创建文件的模式(权限),其作用类似 chmod 命令

    -p    递归创建目录,默认创建目录所在父目录必须存在,如果父目录不存在,也希望自动创建父目录,可以使用此选项

    -v    创建目录时会给出详细说明,并在创建目录时列出他们

    范例:

    1)创建目录

    [root@localhost etc]# mkdir /data/mysql

    2)创建目录及父目录

    [root@localhost etc]# mkdir /data/dir1/dir2 -p

    删除目录

    语法格式:

    rmdir [OPTION] ... DIRECTORY

    选项      说明

    -p,--parents  删除目录及其空父目录,比如: rmdir -p a/b/c  和 rmdir a/b/c a/b a 功能是相同的

    -v,--verbose  输出每个目录的处理信息

    查看文件列表

    ls 语法格式

    ls [OPTION]... [FILE]...

    选项    说明

    -A    显示除隐藏文件 “.” 和 “..” 以外的所有文件列表

    -a    显示包括以 “.” 开始的所有文件,默认 “.” 开始的文件为隐藏文件会列出

    -b    将文件中的不可输出的字符以反斜线 “ ” 加字符编码的方式输出

    -C    多列显示输出结果,这是默认选项

    -c    与“-lt” 选项连用时,按照文件状态时间排序输出目录内容,根据文件的索引节点中的ctime 字段排序,与 “-l” 选项连用时,则排序的一句是文件的状态改变时间

    --color[=WHEN]  使用不同的颜色高亮显示不同类型的

    -d    仅显示目录名,而不显示目录下的内容列表,显示符号链接文件本身,而不显示其所指向的目录列表

    -F    在每个输出项后追加文件的类型标识符,具体含义:“*” 表示具有可执行权限的普通文件,“/” 表示目录,“@” 表示符号链接,“|” 表示命令管道FIFO, “=” 表示sockets 套接字。当文件为普通文件时,不输出任何标识符。

    --full-time  列出完整的日期与时间

    -i    显示文件索引节点号。一个索引节点代表一个文件

    -l    以长格式显示目录下的内容列表,输出的信息从左到右依次包括文件名,文件类型,权限模式,硬连接数,所有者,组,文件大小和文件最后修改时间等

    -I    与“-C” 选项功能相反,所有输出信息用单列格式输出,本输出为多列

    -m    用 “.” 号区隔每个文件和目录的名称

    -n    以用户识别码和群组识别码替代其名称

    -R    递归处理,将指定目录下的所有文件及子目录一并处理

    -r    以文件名反序排列并输出目录内容列表

    -s    显示文件和目录的大小,以区块为单位

    -t    用文件和目录的更改时间排序

    文件的时间属性

    atime: access time   记录最后一次的访问时间

    mtime:modify time  记录最后一次文件数据部分的修改时间

    ctime:change time  记录最后一次文件元数据的修改时间

    查看文件属性信息

    stat 格式:

    stat [文件或目录]

    file 命令语法

    file [OPTION...] [FILE...]

    选项    说明

    -b    列出辨识结果时,不显示文件名称

    -c    详细显示指令执行过程,便于排错或分析程序执行的情形

    -f FILE  指定名称文件,其内容有一个或多个文件名称时,依序辨识这些文件类型

    -L    直接显示符号连接所指向的文件的类别

    -i    输出文件对应的MIME的类型

    -v    显示版本信息

    -z    尝试去解读压缩文件的内容

    创建文件

    touch 语法格式

    touch [OPTION]...FILE...

    选项          说明

    -a          表示只更改访问时间atime

    -c,--no-create    不新建任何文件

    -m          只更改mtime 时间

    -r, --reference=FILE  把指定文件时间设成和参考文件日期时间相同,而非当前时间

    -t  STAMP      使用指定的时间,格式为:[[CC]YY]MMDDhhmm[.ss]

    --time=WORD    指定特定的时间,WORD为access 或atime ,相当于-a 选项,WORD为 modify 或 mtime ,相当于 -m 选项

    --help        在线帮助

    --version      显示版本信息  

    复制文件

    格式:cp [OPTION]... [-T] SOURCE DEST

    选项         说明

    -a,--archive    此参数的效果和同时指定 “-dpR” 参数相同

    -b          覆盖已存在的目标文件前先对之做备份

    -f,--force      如果目标文件不能打开,先删除后在打开

    -i,--interactive     覆盖文件之前先询问用户

    -l,--link        对源文件建立硬链接,而非复制文件

    -p,--preserve    保留原文件或目录的属性,包括所有者,所属组,权限与时间

    -P,--no-dereference    复制软链接本身,而非复制软链接指向的源文件

    -R,-r,--recursive  递归处理,将指定目录下的文件与子目录一并处理

    -s,--symbolic-link  对源文件建立符号链接,而非复制文件

    -u,--update      只会在源文件的修改时间(Modification Time)较目的文件更新时,或名称相对应的目的文件并不存在,才复制文件

    -v,--verbose    显示执行过程

    -x,--noe-file-system  复制的文件或目录存放的文件系统,必须与cp 指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件

    --help        显示在线帮助

    --version      显示版本

    -S,--suffix=SUFFIX    指定备份文件的后缀,默认为 “~”

    --backup[=CONTROL]  指定已存在目标文件的备份文件名的命名方式

    源文件                               

    一个文件   

    目标文件不存在:会先创建DEST文件,再将SRC文件中的内容复制到DEST中   

    目标文件存在且为文件:将SRC中的内容覆盖至DEST中,目标文件中的原始数据将会丢失,建议复制使用 -i 选项

    目标存在且为目录:在该目录下创建于原文件同名的文件,并将SRC 文件中的内容复制到DEST中

    源文件

    多个文件

    目标文件不存在:提示错误

    目标文件存在且为文件:提示错误

    目标存在且为目录:在该目录下分别创建与源文件同名的文件,并将SRC 文件中的内容依依复制到对应的DEST中

    源文件

    目录文件

    目标文件不存在:创建指定DEST 同名目录,复制SRC 目录中有文件至DEST下

    目标存在且为文件:提示错误

    目标存在且为目录:在DEST 下创建与原目录同名的目录,并将SRC 中的内容复制到新目录中

    移动及重命名文件

    mv 格式:

    mv [OPTION]...[-T] SOURCE DEST

    mv [OPTION]...SOURCE... DIRECTORY

    mv [OPTION]... -t  DIRECTORY  SOURCE...

    选项                说明

    -b                  当文件存在时,覆盖前,为其创建一个备份

    -r                   直接覆盖不再提示

    -i                 交互式操作,覆盖前先行提示用户是否覆盖

    -u                  当源文件比目标文件新或者目标文件不存在时才执行

    --strip-trailing-slashes        删除源文件中的斜杠 “/”

    -S,--suffix=SUFFIX          为备份文件指定后缀,而不使用默认的后缀

    -t,--tatget-directory=DIRECTORY  指定源文件要移动到目标目录

    删除文件

    rm [OPTION]...FILE...

    选项          说明

    -f          强制删除文件,即在删除文件时不提示确认,并自动忽略不存在的文件

    -i          在删除每个文件之前请求确认

    -d:         删除空目录文件,非空目录不能删除

    -r,-R,--recursive   递归删除

    -v,--verbose      显示详细过程

    --no-preserve-root    删除“/” 时使用,此选项在CentOS5版本前默认值

    --preserve-root    对“/” 不进行递归删除,此选项在CentOS6版本后为默认值

    --help        显示帮助

    --version       显示版本

    硬链接与软链接

    选项            说明

    -b           覆盖以前先备份

    -d,-F,--directory    允许超级用户制作目录的硬链接,因系统限制可能出错

    -f,--force        强制执行

    -i,--interactive    交互模式,文件存在则提示用户是否覆盖

    -n,--no-dereferenc  吧符号链接视为一般目录

    -s, --symbolic    软链接(符号链接)

    -v,--verbose      显示详细的处理过程

    -S,--suffix=SUFFIX  指定备份的文件后缀

    --help        显示帮助信息

    --version        显示版本信息

    两者链接的区别:

    1)本质

    硬链接:本质是同一个文件起了多个名字

    软链接:本质不是同一个文件

    2)跨设备

    硬链接:不支持

    软链接:支持

    3)iNode

    硬链接:相同

    软链接:不同

    4)链接数

    硬链接:创建新的硬链接,链接数会增加;删除硬链接,链接数会减少

    软链接:创建或删除,链接数不会变化

    5)文件夹

    硬链接:不支持

    软链接:支持

    6)相对路径

    硬链接:原始文件相对路径是相当于当前工作目录

    软链接:原始文件的相对路径是相对于链接文件的相对路径

    7)删除源文件

    硬链接:只是链接数减一,但链接文件的访问不受影响

    软链接:链接文件将无法访问

    8)文件类型

    硬链接:和源文件相同

    软链接:链接文件和源文件无关

  • 相关阅读:
    Mysql: 一个死锁场景的解决
    Mysql: 创建新的账号
    安全评测:BashDoor
    BeanFactory和FactoryBean的区别:
    linux 下将war解压到当前目录
    学习BoolanC++笔记_01(C++面向对象高级编程(上)第一周)
    学习BoolanC++笔记_00(预备)
    Linux (Centos) 上安装Nexus OSS 3 并搭建docker私有仓库
    linux(Centos7)搭建rpm仓库
    树莓派4b安装 manjaro linux
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/13215074.html
Copyright © 2011-2022 走看看