且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

文件管理基础知识及命令详解

更新时间:2021-12-23 01:51:08

一、文件系统概述

    1.文件和目录被组织成一个单根倒置树结构;

    2.文件系统从根目录下开始,用“/”表示;

    3.名称是大小写敏感;

    4.以.开头的文件为隐藏文件;

    5.路径分隔的/;

    6.文件有两位数据:

        6.1:元数据(文件名、大小属性等):metadata;

             数据:data;   

二、文件名命名规则

    1.包括路径在内文件名称最长4095个字节,用/分隔的路径不能超过255个字节;

    2.文件名除了/以外的任意字符,但不建议使用特殊字符,有些字符需要引号来引用它们;

    3.标准Linux文件系统(如ext4),文件名称大小写敏感。例如:MAIL,Mail,mail,mAil;

三、文件系统结构   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 1./boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放与此目录;
    2./bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序(核心的二进制程序);
    3./sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序;
    4./lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules);
    5./lib64:专用于x86_64系统上的辅助共享库文件存放位置;
    6./etc/:配置文件目录;
    7./home/USERNAME:普通用户家目录;
    8./root:管理员的家目录;
    9./media:便捷式移动设备挂载点;
    10./mnt:临时文件系统挂载点;
    11./dev:设备文件及特殊文件存储位置;
            b:block device,随机访问;
            c:character device,线性访问;
    12./opt:第三方应用程序的安装位置;
    13./srv:系统上运行的服务用到的数据;
    14./tmp:临时文件存储位置;
    15./usr:Unix操作系统软件资源存放位置;
            bin:保证系统拥有完整功能而提供的应用程序;
            sbin:
            lib:32位使用;
            lib64:只存在64位系统
            include:C程序的头文件
            share:结构化独立的数据,例如doc,man等;
            local:第三方应用程序的安装位置;
                bin,sbin,lib,lib64,etc,share
    16./var:经常发生变化的文件的存放位置
            cache:应用程序缓存数据目录;
            lib:应用程序状态信息数据;
            local:专用于为/usr/local下的应用程序存储可变数据;
            lock:锁文件;
            log:日志目录及文件;
            opt:专用于为/opt下的应用程序存储可变数据;
            run:运行中的进程相关的数据,通常用于存储进程的pid文件;
            spool:应用程序的数据池;
            tmp:保存系统两次重启之间产生的临时数据;
    17./proc:用于输出内核与进程信息相关的虚拟文件系统;
    18./sys:用于输出当前系统上硬件设备相关信息虚拟文件系统;
    19./selinux:Linux相关的安全策略等信息的存储位置;

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

    1.二进制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin;

    2.库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64;

    3.配置文件:/etc,/etc/DIRECTORY,/usr/local/etc;

    4.帮助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc;

五、Linux下文件类型 

1
2
3
4
5
6
7
  1.-(f):普通文件;
    2.d:目录文件;
    3.b:块设备;
    4.c:字符设备
    5.l:符号链接文件;
    6.p:管道文件
    7:s:套接字文件,socket

六、pwd命令

    pwd:显示当前工作目录

        -P:显示出真实的路径,而非使用链接的路径;

七、绝对路径和相对路径

    绝对路径:

        1.以/开始;

        2.完整的文件位置路径;

        3.可用于任何想指定一个文件名的时候;

    相对路径:

        1.不以/开始;

        2.指定相对与当前工作目录或某目录的位置;

        3.可以作为一个简短的形式指定一个文件名;

八、cd命令

    cd:改变工作目录

        1.cd ..:切换至父目录;

        2.cd或cd ~:切换当前用户的主目录;

        3.cd ~USERNAME:切换到指定用户的家目录;

        4.cd -:在上一个目录和当前目录之间来回切换;

九、ls命令

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

    语法:ls [OPTIONS] [FILE_OR_DIREVTORY]

    OPTIONS:

        -a:- -all列出所有文件,包括隐藏文件;

        -l:- -long长格式显示文件信息,(文件的原数据信息);

            显示结果如下:

                drwxr-xr-x. 2 root root 25 Jul 24 02:43 /testdir/

            其中:

                最左侧第一位表示文件类型,前面有讲过,d表示目录;后面的9位分别表示:

                1.访问权限,perm;

                2.数字2:表示文件被硬链接的次数;

                3.左root:文件的所有者,owner;

                4.右root:文件的所属组,group;

                5.25:文件的大小

                6.Jul 24 02:43:文件最近一次被修改的时间

                7./testdir/:目录名

        -R:目录递归通过(连同子目录的内容一起列出来,子目录下文件一起列出来);

        -d:仅列出目录本身(与-l选项合用);

        -1(数字):目录或文件分行显示;

        -S:按从大到小排序(文件容量大小排序);

        -u:配合-t选项,显示并按atime从新到旧排序;

        -U:不排序,按目录存放顺序显示;

        -h:将文件容量以人类较易读的方式(GB,KB)列出来;

        -r:将排序结果反向输出;

        -i:列出inode号;

十、stat命令

    OPTIONS:

        -f:显示文件系统状态而非文件状态;

        -t:以简洁的方式输出信息;

    三个时间戳:

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

        modify time:修改时间,mtime,改变文件内容(数据),ls -l显示的就是mtime时间;

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

    注:atime发生改变的情况:

            1.文件atime已经是一天前的了;

            2.文件的atime要比mtime要早,两者必须满足,atime才会发生改变;

     规律:

       1.ctime改变,mtime不变,atime不变;

       2.mtime改变,ctime改变,atime不变;

       3.atime改变,ctime不变,mtime不变;

十一、文件通配符(man 7 glob)

    1.*:匹配0个或多个字符;

    2.?:匹配任何单个字符;

    3.[0-9]:匹配任意单个数字

    4.[a-z]:匹配任意单个字母(不区分大小写)

    5.[A-Z]:匹配任意单个字符    

    6.[wzc]:匹配列表中的任何一个字符;

    7.[^wzc]:匹配列表中的所有字符以外的字符;   

  字符集表示方法:

    [:digit:]:任意数字,相当0-9;

    [:lower:]:任意小写字母;

    [:upper:]:任意大写字母;

    [:alpha:]:任意大小写字母(不区分大小写);

    [:alnum:]:任意数字和字母;

    [:blank:]:水平空白字符;

    [:space:]:水平或垂直空白字符;

    [:punct:]:标点符号;

    [:print:]:可打印字符;

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

    [:graph:]:图形字符;

    [:xdigit:]:十六进制字符;

十二、touch命令

    touch:创建空文件和刷新时间

    语法:touch [OPTION]...FILE...

    OPTION:

        -a:仅改变atime;

        -m:仅改变mtime;

        -t:[[CC]yy]MMDDhhmm[.ss],修改制定时间戳为某时间;

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

十三、cp命令 

1
2
3
4
5
6
7
  cp:复制文件和目录
    语法:
        cp [OPTION]...[-T] SOURCE DEST;;
        cp [OPTION]...SOURCE...DIRECTORY;
        cp [OPTION]...-t DIRECTORY SOURCE...
    简要讲:    
        cp SRC...DEST

    1.如果SRC是文件:

    (1)如果目标不存在:新建DEST,并将SRC中的内容填充至DEST中;            

1
2
3
4
5
6
7
eg:
                [root@centos7 ~]# ls /testdir/
                [root@centos7 ~]# cp /etc/issue /testdir/aaa
                [root@centos7 ~]# ll !*
                ll /etc/issue /testdir/aaa
                -rw-r--r--. 1 root root 50 Jul 14 18:17 /etc/issue
                -rw-r--r--. 1 root root 50 Jul 26 10:33 /testdir/aaa

    (2)如果目标存在:

            2.1.如果DEST是文件:将SRC中的内容覆盖至DEST中;(可以使用-i选项来提醒用户是否覆盖)               

1
2
3
 eg:                  
                    [root@centos7 ~]# cp /etc/issue /testdir/aaa                                   
                    cp: overwrite ‘/testdir/aaa’? y

            2.2.如果DEST是目录:在DEST下新建与源文件同名的文件,并将SRC中的内容填充至新文件中;              

1
2
3
4
5
6
7
8
9
  eg:
                    [root@centos7 ~]# cp /etc/fstab /testdir/
                    [root@centos7 ~]# ll !*
                    ll /etc/fstab /testdir/
                    -rw-r--r--. 1 root root 595 Jul 11 19:59 /etc/fstab
                    /testdir/:
                    total 8
                    -rw-r--r--. 1 root root  50 Jul 26 10:39 aaa
                    -rw-r--r--. 1 root root 595 Jul 26 11:01 fstab

    (3)如果SRC是多个文件:

            3.1.如果DEST不存在:报错;               

1
2
3
4
5
eg:                    
                    [root@centos7 ~]# ls /testdir/
                    aaa  fstab   
                    [root@centos7 ~]# cp /etc/issue /etc/hostname /testdir/xxx
                    cp: target ‘/testdir/xxx’ is not a directory

            3.2.如果DEST存在并且是文件:报错;             

1
2
3
4
5
   eg:                    
                    [root@centos7 ~]# ls /testdir/
                    aaa  fstab
                    [root@centos7 ~]# cp /etc/issue /etc/hostname /testdir/fstab 
                    cp: target ‘/testdir/fstab’ is not a directory

            3.3.如果DEST存在并且是目录:在DEST下新建与原文件同名的文件,并将原文件内容复制进新文件中;              

1
2
3
4
5
6
7
8
9
10
  eg:              
                [root@centos7 ~]# ls -d /testdir/
                /testdir/
                [root@centos7 ~]# cp /etc/issue /etc/hostname /testdir/
                [root@centos7 ~]# ls -l /testdir/
                total 16
                -rw-r--r--. 1 root root  50 Jul 26 10:39 aaa
                -rw-r--r--. 1 root root 595 Jul 26 11:01 fstab
                -rw-r--r--. 1 root root  22 Jul 26 11:16 hostname
                -rw-r--r--. 1 root root  50 Jul 26 11:16 issue

    2.如果SRC是目录:则必须使用-r选项   

    (1)如果DEST不存在,则先创建DEST目录,并将SRC中的所有内容复制到DEST目录中          

1
2
3
4
5
  eg:                
                [root@centos7 ~]# cp -r /etc/sysconfig/ /testdir/xxx
                [root@centos7 ~]# ls -ld /etc/sysconfig/ /testdir/xxx
                drwxr-xr-x. 6 root root 4096 Jul 26 09:05 /etc/sysconfig/
                drwxr-xr-x. 6 root root 4096 Jul 26 11:30 /testdir/xxx

(2)如果DEST存在,则其必须是目录,否则报错;先在DEST目录下创建与SRC同名的目录,并将SRC中的所有内容复制到DEST中;        

1
2
3
4
5
   eg:                
                [root@centos7 ~]# cp -r /etc/sysconfig/ /testdir/xxx                       
                [root@centos7 ~]# ls -ld /etc/sysconfig/ /testdir/xxx/sysconfig/
                drwxr-xr-x. 6 root root 4096 Jul 26 09:05 /etc/sysconfig/
                drwxr-xr-x. 6 root root 4096 Jul 26 11:34 /testdir/xxx/sysconfig/

       图片总结:

                文件管理基础知识及命令详解

    OPTION:

        -i:交互式;

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

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

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

        - -preserv=[ATTR_LIST]

               mode:权限;

               ownership:属主属组;

               timestamp:

               links:

               xattr:

               context:

               all

        -p:保持原有文件的属性信息;等同于- -preserv=mode,ownership,timestamp;

        -v:显示过程;

        -f:强制覆盖;

1
2
3
4
5
6
7
8
9
10
11
12
13
 eg: (-a选项例子,相当于保留文件原有属性)       
        [root@centos7 ~]# ls /testdir/
        aaa  fstab  hostname  issue  xxx
        [root@centos7 ~]# cp /etc/fstab /testdir/f1
        [root@centos7 ~]# ll !*
        ll /etc/fstab /testdir/f1
        -rw-r--r--. 1 root root 595 Jul 11 19:59 /etc/fstab
        -rw-r--r--. 1 root root 595 Jul 26 11:42 /testdir/f1
        [root@centos7 ~]# cp -a /etc/fstab /testdir/f11
        [root@centos7 ~]# ll !*
        ll -a /etc/fstab /testdir/f11
        -rw-r--r--. 1 root root 595 Jul 11 19:59 /etc/fstab
        -rw-r--r--. 1 root root 595 Jul 11 19:59 /testdir/f11
1
2
3
4
5
6
7
8
9
10
    eg:(-d选项例子)        
        [root@centos7 ~]# cp -d /etc/redhat-release /testdir/www
        [root@centos7 ~]# ll !*
        ll -d /etc/redhat-release /testdir/www
        lrwxrwxrwx. 1 root root 14 Jul 11 20:00 /etc/redhat-release -> centos-release
        lrwxrwxrwx. 1 root root 14 Jul 26 11:58 /testdir/www -> centos-release
        [root@centos7 ~]# touch /testdir/centos-release         
        [root@centos7 ~]# ll -d /etc/redhat-release /testdir/www
        lrwxrwxrwx. 1 root root 14 Jul 11 20:00 /etc/redhat-release -> centos-release
        lrwxrwxrwx. 1 root root 14 Jul 26 11:58 /testdir/www -> centos-release

十四、alias命令

    1.显示当前shell进程所有可用的命令别名:#alias

    2.定义别名NAME,其相当执行命令VALUE:#alias NAME='VALUE'

    3.在命令行定义的别名,仅对当前shell进程有效;

    4.要想永久有效,要定义在配置文件中:

        仅对当前用户有效:~/.bashrc;

        对所有用户有效:/etc/bashrc;

    5.编辑配置文件给出的新配置不会立即生效;

    6.bash进程重新读取配置文件:

        source /path/to/config_file

        或者./path/to/config_file

   7. 撤销别名:unalias name

   8.如果别名同原命令相同,如果要使用原命令,可以使用以下3种方法:

       8.1.“\COMMAND”;

       8.2.'COMMAND';

       8.3./PATH/COMMAND 外部命令,例如:lis,/bin/ls;

十五、mv命令

    mv:移动和重命名文件

    语法:

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

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

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

    OPTION:

        -i:交互式;

        -f:强制

十六、rm命令

    rm:删除

    语法:rm [OPTION]...FILE...

    OPTION:

        -i:交互式;

        -f:强制删除;

        -r:递归;

十七、tree命令

    tree:显示目录树

    OPTION:

        -d:只显示目录;

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

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

十八、mkdir命令

    mkdir:创建目录        

    语法:mkdir [OPTION]...DIRECTORY...

    OPTION:

        -p:表示存在时不返回报错,不存在时,自动创建所需的各目录;

        -v:显示其过程详细信息;

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

十九、rmdir命令

    rmdir:删除空目录

    语法:rmdir [OPTION]...DIRECTORY..

    OPTION:

        -p:递归删除父空目录;

        -v:显示执行过程;


二十、索引节点

    inode叫做索引节点号,这是Linux文件系统管理文件的方式。在建立文件系统时,会建立一个索引节点表,里面包含一定数量的索引节点。每当建立一个文件时,就会为他分配一个索引节点号,相当于文件的地址。

    1.inode表中包含文件系统所有文件列表;

    2.inode包含文件的元数据信息:

        文件类型,选项,UID,GID;

        链接数(指向这个文件名路径名称个数);

        该文件的大小和不同的时间戳;

        指向磁盘上文件的数据块指针;

        有关文件的其他数据;

    总之,除了文件名之外的所有文件信息,都存在inode中;

二十一、硬链接和软链接

  硬链接

   1. 硬链接是通过索引节点进行的链接。在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的源文件,则硬链接文件仍然存在,而且保存了原有的内容,这样可以起到防止因为误操作而错误删除文件的作用。由于硬链接是有着相同inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。

   2.创建硬链接时链接数会递增;  

   3.删除文件名时,就会使得inode节点中的链接数减1,。当链接数为0时,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域;

   4.链接数=文件名字的数量      

    语法:

       ln filename [link name]

           eg1:(创建f11硬链接,当给原文件f1增加文件内容时,硬链接f11也会相应增加)

                [root@centos7 ~] # ln f1 dir./f11

                [root@centos7 ~] # ls -l f1 dir./f11

                -row-r--r--. 2 root root 0 Jul26 09:09 dir/f11

                -rw-r--r--. 2 root 0 Jul 2609:09 f1

                [root@centos7 ~]# echo xxx>>f1

                [root@centos7 ~]# ls -l  f1 dir/f11

                -rw-r--r--. 2 root root 4 Jul26 09:12 dir/f11

                -rw-r--r--. 2 root root 4 Jul26 09:12 f1


            eg2:(硬链接不能跨分区)

                [root@centos7 ~]# ln f1/testdir/f11

                ln: failed to create hard link‘/testdir/f11’ => ‘f1’: Invalid cross-device link


           eg3:(不能对目录链接)               

                [root@centos7 ~]# pwd

                /root

                [root@centos7 ~]# ls

                anaconda-ks.cfg  Documents initial-setup-ks.cfg  Public

                Desktop          Downloads  Music                 Templates

                dir              f1         Pictures              Videos

                [root@centos7 ~]# ln dir/ dir1

                ln: ‘dir/’: hard link notallowed for directory


  软链接(符号链接)

       1. 软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建。 

       2. 软链接主要应用于以下两个方面:一是方便管理,例如可以把一个复杂路径下的文件链接到一个简单路径下方便用户访问;另一方面就是解决文件系统磁盘空间不足的情况。例如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中,这样就可以很好的解决空间不足问题。删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。

       3.链接数不会增加;

       4.软连接文件大小看文件路径字符数,例如,f2,文件大小为2;

    语法:

       ln -s filename [linkname]

           eg1:(链接数不会增加)

                [root@centos7 ~]# ln -s f2f2link                

                [root@centos7 ~]# ls -l f2f2link

                -rw-r--r--. 1 root root 0 Jul26 09:23 f2

                lrwxrwxrwx. 1 root root 2 Jul26 09:24 f2link -> f2


           eg2: (软链接能跨分区)              

                [root@centos7 ~]# ln -s/root/initial-setup-ks.cfg /testdir/aaa

                [root@centos7 testdir]# ll/testdir/aaa

                lrwxrwxrwx. 1 root root 26 Jul26 09:29 /testdir/aaa -> /root/initial-setup-ks.cfg


           eg3:(能对目录链接)               

                [root@centos7 ~]# pwd

                /root

                [root@centos7 ~]# ls

                anaconda-ks.cfg  Documents f2                    Music     Templates

                Downloads  f2link                Pictures  Videos

                dir              f1         initial-setup-ks.cfg  Public

                [root@centos7 ~]# ln -s dir/dir1

                [root@centos7 ~]# ls -l dir1

                lrwxrwxrwx. 1 root root 4 Jul26 09:33 dir1 -> dir/


           eg4:               

                [root@centos7 ~]# ln -s../root/f1 /testdir/f11

                [root@centos7 ~]# ls -l/testdir/f11

                lrwxrwxrwx. 1 root root 10 Jul26 09:36 /testdir/f11 -> ../root/f1

       注:ln -s+原始文件的绝对路径或相对路径(是相对于软链接的文件路径)+软链接文件


           eg5:(链接文件不写路径就是相对于当前所在目录的路径)               

                [root@centos7 testdir]# pwd

                /testdir

                [root@centos7 testdir]# ln -s/etc/issue is

                [root@centos7 testdir]# ls -l is/etc/issue

                -rw-r--r--. 1 root root 50 Jul14 18:17 /etc/issue

                lrwxrwxrwx. 1 root root 10 Jul26 09:44 is -> /etc/issue


    硬链接和软链接区别:

        1. 硬链接是在目录文件创建了node节点指针,文件的元数据和文件数据本身没有变化,删除文件需要把文件的所有硬链接都删除,文件才算删除

        2. 软链接本身是一个类似文本文件,自身存放指向文件的目录信息,所指向的文件一旦移除,软链接将失效。

        3.硬链接不能跨分区或设备;不能对目录链接;

        4.软链接可以跨分区,能对目录链接;

二十二、hexdump命令

    hexdump:一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。

    语法:hexdump [OPTION] file [...]

     OPTION:        

        -n:length 只格式化输入文件的前length个字节。

        -C:输出规范的十六进制和ASCII码。

        -b:单字节八进制显示。

        -c:单字节字符显示。

        -d:双字节十进制显示。

        -o:双字节八进制显示。

        -x:双字节十六进制显示。

        -s:从偏移量开始输出。

        -e:指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:'a/b"format1" "format2"'。

二十三、生成随机数

    echo $[$RANDOM%80]:%的意思表示取模,在0-80之间随机生成任意数字;

二十四、Windows记事本格式转换成Linux的方法

    dos2unix filename(例如,f1.txt),dos2unix工具系统默认没安装,安装后即可使用;

 

二十五、cp和inode

     在cp的命令:

       1.分配一个空闲的inode号,在inode表中生成新条目;

        2.在目录中创建一个目录项,将名称与inode编号关联;

        3.拷贝数据生成新的文件;

         

二十六、rm和inode

    在rm的命令:

        1.链接数递减,当链接数为0时,从而释放的inode号可以被重用;

        2.把数据块放在文件里表中;

        3.删除目录项;

        4.数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖;

二十七、mv和inode   

    如果mv命令的目标和源在相同的文件系统,作为mv 命令:

        1.用新的文件名创建对应新的目录项

        2.删除旧目录条目对应的旧的文件名 

        3.不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

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

二十八、file命令

    file:查看文件类型

    语法:file[OPTION] <filename>...

    OPTION:      

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

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

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

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

        -i输出mime类型的字符串;

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

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

        --help显示命令在线帮助;

     

         




      本文转自wzcLINUXER 51CTO博客,原文链接:http://blog.51cto.com/yacheng0316/1951087,如需转载请自行联系原作者