当前位置: 首页 > news >正文

二、Linux入门之文件管理及相关命令

文件系统结构说明:   

        Linux最重要的哲学思想是一切皆文件,Linux将一切资源都归结为文件,那么了也必然将一切资源都纳到一个完整的目录树的文件结构中,文件和目录被组织成一个单根倒置树结构,如下:

 

        Linux的目录结构有一定的规范,特定的目录存放特定的文件,此规范由文件系统层次结构标准(Filesystem Hierarchy Standard)实现,文件系统标准旨在供Linux分发开发人员、程序包开发人员、系统实现都使用,主要是用于参考,面不是如何管理Linux文件系统或目录,或目录层次结构的强制标准。标准文件档参考FHS (Filesystem Hierarchy Standard): http://www.pathname.com/fhs/

        文件系统分层结构:LSB Linux Standard Base

        文件一般有两类数据:元数据(metadata)、数据(data)

        Linux文件结构系统从根目录下开始,用“/” 表示,根文件系统(rootfs)root filesystem。使用/作为路径分隔符,根目录中第一层子目录有:

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

        在CentOS中目录有些变化,如:

                /bin 和 /usr/bin

                /sbin 和 /usr/sbin

                /lib 和/usr/lib

                /lib64 和 /usr/lib64

绝对和相对路径

绝对路径:从根目录即以正斜杠开始,完整的文件的位置路径,可用于任何想指定一个文件名的时候

相对路径名,不是从根目录开始,指定相对于当前工作目录或某目录的位置,可以作为一个简短的形式指定一个文件名

基名(整个路径中的文件名):basename

目录名:dirname

Linux上的应用程序的组成部分

二进制程序:/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

文件名规则

文件名称区分大小写

以点“.”开头的文件为隐藏文件

文件名最长255个字节

包括路径在内文件名称最长4095个字节

蓝色-->目录、绿色-->可执行文件、红色-->压缩文件 浅蓝色-->链接文件、灰色-->其他文件

除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们

标准Linux文件系统(如ext4),文件名称大小写敏感

例如:MAIL, Mail, mail, mAiL

文件类型

文件各类很多,可以通过“ls -l”查看文件属性,在属性的第一个字符表示文件类型

常见文件类型有:

- 普通文件,一般有纯文本文件、二进制可执行文件、数据格式文件

d 目录文件,即一般的文件夹

b 块设备,就是一些发块为单位访问数据,提供阳春面访问的接口设备,如磁盘、U盘等。

c 字符设备,字符设备文件通常是一些串行接口设备在用户空间的体现,字符设备是按字符为单位且按一定顺序进行输入输出,如键盘、鼠标、终端等

l 符号链接文件,又称为软链接,类似windows系统中的快捷方式

p 管道文件pipe,管道文件是一种特殊的文件类型,其本质是一个伪文件(实为内核缓冲区,主要目的是为了实现进程间通讯(InterProcess Communication,IPC)的问题;遵循先进先出原则,所以又叫FIFO(first in first out)文件.

s 套接字文件socket,被称为数据接口文件,这种类型文件通常被用在基于网络的数据通讯使用。

文件索引节点

磁盘中文件一般有两类数据:元数据(metadata)、数据(data);系统通过文件索引节点编号即inode号找到文件元数据,再能过元数据中的数据块指针找到文件数据。

inode(index node)表中包含文件系统所有文件列表,一个节点 (索引节点)是在一个表项,包含有关文件的信息( 元数据 ),包括:文件类型,权限,UID,GID、链接数(指向这个文件名路径名称个数)、该文件的大小和不同的时间戳、指向磁盘上文件的数据块指针、有关文件的其他数据,使用stat命令查看文件元数据信息,如下

图中,size为文件大小,inode为索引节点,Linds链接数据,第四行Access开关的行有文件类型及权限属性、用户ID、用户组ID、Access为文件访问时间,Modify创建时间,change更新时间;可以通过touch命令修改文件的时间属性

file查看文件类型

文件可以包含多种类型的数据,检查文件的类型,然后确定适当的打开命令或应用程序使用

file [options] <filename>...

常用选项:

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

-f filelist 列出文件filelist中文件名的文件类型

-F 使用指定分隔符号替换输出文件名后默认的”:” 分隔符

-L 查看对应软链接对应文件的文件类型

--help 显示命令在线帮助

stat查看文件状态

文件:metadata, data

三个时间戳:

access time 访问时间,atime,读取文件内容

modify time 修改时间, mtime,改变文件内容(数据)

change time 改变时间, ctime,元数据发生改变

文件通配符

* 匹配零个或多个字符                                             ? 匹配任何单个字符

~ 当前用户家目录                                                    ~mage 用户mage家目录

~+ 当前工作目录                                                     ~- 前一个工作目录

[0-9] 匹配数字范围                                                  [a-z]:字母

[A-Z]:字母                                                             [wang] 匹配列表中的任何的一个字符

[^wang] 匹配列表中的所有字符以外的字符

预定义的字符类:man 7 glob

[:digit:]:任意数字,相当于0-9                            [:lower:]:任意小写字母

[:upper:]: 任意大写字母                                       [:alpha:]: 任意大小写字母

[:alnum:]:任意数字或字母                                 [:blank:]:水平空白字符

[:space:]:水平或垂直空白字符                          [:punct:]:标点符号

[:print:]:可打印字符                                           [:cntrl:]:控制(非打印)字符

[:graph:]:图形字符                                             [:xdigit:]:十六进制字符

文件管理相关命令

显示当前工作目录

每个shell和系统进程都有一个当前的工作目录

CWD:current work directory

显示当前shell CWD的绝对路径

pwd: printing working directory

-P 显示真实物理路径

-L 显示链接路径(默认)

tree显示目录树

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

-d: 只显示目录

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

-L level:指定显示的层级数目

-P pattern: 只显示由指定pattern匹配到的路径

-p:列出文件的属性

mkdir创建目录

-p: 存在于不报错,且可自动创建所需的各目录

-v: 显示详细信息

-m MODE: 创建目录时直接指定权限

rmdir删除空目录

-p: 递归删除父空目录

-v: 显示详细信息

rm -r 递归删除目录树

cd更改当前目录

使用绝对或相对路径:

     cd /home/wang/

     cd home/wang

切换至父目录: cd ..

切换至当前用户主目录: cd

切换至以前的工作目录: cd –

选项:-P

相关的环境变量:

     PWD:当前目录路径

     OLDPWD:上一次目录路径

ls列出目录内容

列出当前目录的内容或指定目录

用法:ls [options] [files_or_dirs]

选项示例

     ls -a 包含隐藏文件                                                     ls -l 显示额外的信息

     ls -R 目录递归                                                            ls -ld 目录和符号链接信息

     ls -1 文件分行显示                                                      ls –S 按从大到小排序

     ls –t 按mtime排序                                                       ls –u 配合-t选项,显示并按atime从新到旧排序

     ls –U 按目录存放顺序显示                                          ls –X 按文件后缀排序

touch创建空文件和刷新时间

文件不存在则创建一个新的空文件,如果文件存在则更新文件的时间属性

格式:touch [OPTION]... FILE...

     -a 仅改变 atime和ctime

     -m 仅改变 mtime和ctime

     -t [[CC]YY]MMDDhhmm[.ss],指定atime和mtime的时间戳

     -c 如果文件不存在,则不予创建

cp复制文件和目录

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

cp [OPTION]... SOURCE... DIRECTORY

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

cp SRC... DEST

     SRC... 可以是一个或多个文件或目录,

     SRC为文件:如果目标不存在,新建DEST,并将SRC中内容填充至DEST中,如果目标存在,将SRC中的内容覆盖至DEST中,基于安全,建议添加-i选项,避免误操作覆盖掉原有文件;

     SRC是目录:此时最好添加-r选项,可以递归复制目录内的文件及目录,如果DEST不存在,则创建指定DEST同名目录,复制SRC目录中所有文件至DEST下;如果DEST存在且为文件,会报错;如果DEST存在且为目录,则在DEST下新建与原目录同名的目录,并将SRC中内容复制至新目录中

     DEST 必须存在,且为目录,其它情形均会出错,在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中

cp常用选项

     -i:覆盖前提示

     -n:不覆盖,注意两者顺序

     -r, -R:递归复制目录及内部的所有内容

     -a:归档,相当于-dR --preserv=all

     -d:--no-dereference --preserv=links 不复制原文件,只复制链接名

     --preserv[=ATTR_LIST]

          mode: 权限

          ownership: 属主属组

          timestamp:

          links

          xattr

          context

          al

     -p 等同--preserv=mode,ownership,timestamp

     -v –verbose

     -f –force

     -u --update 只复制源比目标更新文件或目标不存在的文件

     -b 目标存在,覆盖前先备份,形式为 filename~

     --backup=numbered 目标存在,覆盖前先备份加数字后缀

cp与inode:执行cp时会分配一个空闲的inode号,在inode表中生成新条目,在目录中创建一个目录项,将名称与inode编号关联,拷贝数据生成新的文件

mv移动和重命名文件

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

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

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

常用选项:

     -i 交互式

     -f 强制

     -b 目标存在,覆盖前先备份

示例:

     移动文件:mv /etc/fstab /data/

     重命名文件:mv /etc/fstab /etc/abc.test

     移动并重命名:mv /etc/fstab /data/mount.info

mv和inode:

     如果mv命令的目标和源在相同的文件系统,作为mv 命令,用新的文件名创建对应新的目录项,删除旧目录条目对应的旧的文件名,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

     如果目标和源在一个不同的文件系统, mv相当于cp和rm

rm删除

rm [OPTION]... FILE...

常用选项:

     -i 交互式,默认选项

     -f 强制删除

     -r 递归

     --no-preserve-root 删除/

示例:

     强制删除:rm -rf /*

rm与inode执行rm命令,文件链接数递减,从而释放的inode号可以被重用,把数据块放在空闲列表中,删除目录项,数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

ln创建链接文件

ln [option] … [-T] TARGEG LINK_NAME

ln [option]… TARGET

ln [option]… TARGET… DIRECTORY

ln [option]… -t DIRECTORY TARGET…

TARGET表示需要创建链接文件的目标文件,LINK_NAME表示生成的链接文件

常用选项:

       -b:覆盖前先备份

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

       -f,--force:强制执行

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

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

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

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

       --help:显示帮助信息

       --version:显示版本信息

硬链接与软链接

硬链接:其本质就是对同一个文件起多个文件名,所有指向同一文件的硬链接与源文件使用同一个Inode号,但每创建一个硬链接会使用文件的链接数据加1;在删除文件时,无论是删除文件最初的文件名或某个硬链接,则链接数据减1,文件数据不一定会被删除,只有当文件链接数据为0时,文件才会被删除;硬链接不能跨越驱动器或分区,

     创建硬链接:ln filename [linkname ]

          flename 为硬链接名,linkname为源文件

     硬链接特性:

          1、文件有想再的inode号及数据块

          2、只能对已存在的文件进行创建

          3、不能跨分区创建硬链接

          4、对目录进行创建,只可对文件创建

          5、删除一个硬链接文件并不影响其他有相同Inode号的文件

     示例:ln pass.link /etc/passwd

符号(或软)链接

       若文件用户数据块中存放的内容是另一个文件的路径名的指向,那么这个文件应该就是软链接文件;软链接就是一个普通的文件,拥有自己的inode号及用户数据块。类似于windows系统中的快捷方式。

     创建硬链接:ln -s filename ​​ [linkname]

          flename 为源文件,linkname为链接文件名

     软链接特性:

           1、链接文件有自己的文件属性及权限等

           2、可对不存在的文件或目录创建软链接

           3、软链接可跨分区

           4、软链接可以对文件或目录创建

           5、创建软链接时,原文件链接计数不会增加       

           6、删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关的软链接将无法访问,被称为死链                          接,如果文件被重新创建,则链接又会恢复访问,但访问的是新创建的文件

下面是一些小练习:

1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录

答:ls /etc/l*[[:digit:]]*[[:lower:]]

2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录

答:ls /etc/[[:digit:]]*[^[:digit:]]

3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录

答:ls /etc/[^[:alpha:]][[:alpha:]]*

4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录

答:ls /etc/rc[0-6]*

5、显示/etc目录下,所有以.d结尾的文件或目录

答:ls /etc/*.d

6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录

答:ls /etc/[mnrp]*.conf

7、只显示/root下的隐藏文件和目录            

答:ls -d /root/.*

8、只显示/etc下的非隐藏目录

       答:ls -d /etc/*/

9、每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见

答:cp -rf /etc/ /data/backup`date "+%F"`

10、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限

       答:cp -arf /root/ /data/rootdir/

11如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a,/testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b

       答:mkdir -p /testdir/dir1/{x,y}/{a,b}

12、如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a,/testdir/dir2/x/b

       答:mkdir -p /testdir/dir2/{x/{a,b},y}

13、如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

       答:mkdir -p /testdir/dir{3,4,5/dir{6,7}}

 

相关文章:

  • 3、Linux命令小例:用户权限管理、ls、cp、tr
  • 三、Linux入门之标准I/O重定向、管道、用户管理
  • 三、Linux入门之文件权限
  • 二、Linux入门之VIM编辑器
  • 四、Linux入门之文件查看命令
  • 4、Linux入门之文本处理小练习
  • 五、Linux入门之文件查找与打包解压缩
  • Linux入门之文本处理三剑客grep、sed、akw
  • 5、Linux入门之小练习
  • Linux入门之正则表达式
  • 七、Linux入门之软件包管理
  • 七、Linux入门之磁盘存储和文件系统
  • 7、Linux入门之小练习
  • 十、Linux入门之Shell进阶
  • tekla钢结构算量_【BIM应用案例】钢结构第一楼:天津117大厦!
  • Bootstrap JS插件Alert源码分析
  • CentOS7简单部署NFS
  • Git初体验
  • JavaScript设计模式之工厂模式
  • JS专题之继承
  • Spring-boot 启动时碰到的错误
  • vue脚手架vue-cli
  • win10下安装mysql5.7
  • 从重复到重用
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 关于 Cirru Editor 存储格式
  • 近期前端发展计划
  • 新书推荐|Windows黑客编程技术详解
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • ​ubuntu下安装kvm虚拟机
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #《AI中文版》V3 第 1 章 概述
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $refs 、$nextTic、动态组件、name的使用
  • (0)Nginx 功能特性
  • (C语言)二分查找 超详细
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)fock函数详解
  • .Net MVC + EF搭建学生管理系统
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net 垃圾回收机制原理(二)
  • .net 微服务 服务保护 自动重试 Polly
  • .net访问oracle数据库性能问题
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [.net] 如何在mail的加入正文显示图片
  • [20160902]rm -rf的惨案.txt
  • [Android Studio 权威教程]断点调试和高级调试
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Angular] 笔记 21:@ViewChild