元数据、修改时间戳、文件名通配、定义命令的别名、I/O重定向及管道

 

文件的元数据

文件的数据分为两类:一类为元数据,既属性数据;一种就是数据本身:
  数据是指普通文件中的实际数据
  元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等

那么如何查看文件的详细信息?

stat命令:

功能说明:
    显示inode内容
命令用法:
    stat  [文件或目录]
演示示例:

显示/etc目录下fstab文件的相信信息: 
[root@localhost ~]# stat /etc/fstab 
  File: "/etc/fstab"
  Size: 860           Blocks: 8          IO Block: 4096   普通文件
Device: fd00h/64768d    Inode: 1048583     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-11-02 22:16:28.604999999 +0800
Modify: 2016-11-02 22:04:35.291999640 +0800
Change: 2016-11-02 22:13:17.833999187 +0800

各参数的含义:
File:文件的路径
Size: 文件大小
Blocks: 这个文件使用的块的总数
IO Block:这个文件的IO块大小
普通文件:表示文件的类型
Device:十六进制设备号,设备数量的小数
Inode:Inode号是一个独特的号码,操作系统用inode号码来识别不同的文件
Links:到文件的链接数
Access(0644/-rw-r--r--):文件的权限
Uid:文件所有者的UID和用户名
Gid:文件所有者的GID和组名
access time:表示我们最后一次访问(仅仅是访问,没有改动)文件的时间
modify time:表示我们最后一次修改文件的时间
change time:表示我们最后一次对文件属性改变的时间,包括权限,大小,属性等等
补充:

Linux系统上的文件类型:

 例如:
    [root@localhost ~]# ls -l /etc/fstab 
    -rw-r--r--. 1 root root 860 11月  2 22:04 /etc/fstab

    “-rw-r--r--”最前面的 “ - ”即表示文件的类型 
        -:常规文件;即f;
        d:directroy,目录文件;
        b:block device,快设备文件,支持以“block”为单位进行随机访问;
        c:character device,字符设备文件,支持以“character”为单位进行线性访问;
            major number:主设备号,用于标识设备类型,进而确定要加载的驱动程序
            minor unmber:次设备号,用于标识同一类型中的不同设备
                8位二进制:0-255
        l:symbolic link,符号链接文件;
        p:pipe,命名管道;
        s:socket,套接字文件;

如何修改文件的时间戳信息?

  上面使用stat命令查看文件的详细信息时显示了三个关于文件的时间信息, 那么如何修改这三个时间信息呢?

touch命令:

功能说明:
    修改文件的时间戳,或者新建一个不存在的文件。
命令用法:
    touch [options]… FILE…
常用选项:
    -c:指定文件路径不存在时不予创建
    -a:仅修改 access time
    -m:仅修改 modify time
    -t STAMP  :使用指定的日期时间
           [[cc]YY]MMDDhhmm[.ss] 即[年]月日小时分钟[秒]
演示示例:

1、在/tmp/a_c目录下创建文件test1
    [root@localhost ~]# cd /tmp/a_c
    [root@localhost a_c]# touch test1
    [root@localhost a_c]# ll
    总用量 0
    -rw-r--r--. 1 root root 0 11月  4 01:42 test1

2、修改文件test1文件的access time
    首先用stat命令查看到test1的access time时间为2016-11-04 01:46:24
    使用touch命令修改:
    [root@localhost a_c]# touch -a -t  11040201 test1
    再次stat:时间已经改为
    Access: 2016-11-04 02:01:00.000000000 +0800

定义命令的别名

命令别名:将一个命令用其他名字来代替
获取所有可用别名的定义:
     ~]# alias
定义别名:
     ~]# alias NAME='COMMAND'
         注:仅对当前shell进程有效
撤销别名:
     ~]# unalias NAME

glob实现文件名通配

所谓通配是指:显示以指定条件的文件
匹配模式:元字符

     *:匹配任意长度的任意字符  
     ?:匹配任意单个字符  
     []:匹配指定范围内的任意单个字符  
     字符集的表示方法:  
                        [[:upper:]]:表示所有大写字母
                        [[:lower:]]:表示所有小写字
                        [[:alpha:]]:表示所有字母
                        [[:digit:]]:表示所有数字
                        [[:alnum:]]:表示所有的字母和数字
                        [[:space:]]:表示所有空白字符
                        [[:punct:]]: 表示标点符号
        [^]:匹配指定范围外的任意单个字符,与[]相反,即取反

I/O重定向和管道

输出重定向:

            COMMAND > NEW_POS , COMMAND >> NEW_POS

            输出重定向:>
                特性:覆盖输出,目标文件汇总的原有内容会被清除
            输出重定向:>>
                特性:追加输出,新内容会追加至目标文件尾部

            # set -c
                禁止覆盖输出重定向至已存在的文件
                此时可使用强制覆盖输出:>
            # set +c
                关闭上述特性
            错误输出流重定向:2>,2>>

输入重定向:

tr命令:
            tr [OPTION]... SET1 [SET2]
                        把输入的数据当中的字符。凡是在SET1定义范围内出现的,通通转换为SET2出现的字符
            用法1:
                tr SET1 SET2 < /path/to/somefile
            用法2:
                tr -d SET1 < /path/to/somefile

            Here Doucment:<<
                cat << EOF    
                cat > /path/to/somefile <<EOF

管道:链接程序,实现将前一个命令的输出直接定向后一个程序当做输入数据流
      COMMAND1 | COMMAND2 | COMMAND3 | …      

        

 

练习:

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

            [root@localhost ~]# ls -d /var/1?[[:lower:]]

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

            [root@localhost ~]# ls  /etc/[0-9]*[^0-9]

3、显示 /etc 目录下,以非字母开头,

            [root@localhost ~]# ls /etc/[^a-z][a-z]*

4、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

            [root@localhost ~]# touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)

5、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

            [root@localhost ~]# cp -r /etc/p*[^0-9] /tmp/mytest1

6、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。

            [root@localhost ~]# cp -r /etc/*.d /etc/mytest2

7、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

            [root@localhost ~]# cp -r /etc/[lmn]*.conf /etc/mytest3

 

原创文章,作者:641348038@qq.com,如若转载,请注明出处:http://www.178linux.com/57460

(0)
641348038@qq.com641348038@qq.com
上一篇 2016-11-06 19:26
下一篇 2016-11-06 20:01

相关推荐

  • bash特性、bash编程

    bash基础特性: 命令行展开:~,{} 命令别名:alias,unalias 命令历史:history 命令和路径补全:$PATH glob通配符:*,?,[],[^], 快捷键:Ctrl+{a,e,l,c,u,k} 命令hash:   bash通配符及特殊符号: 通配符: ?:任意一个字符; *:匹配任意个任意字符; []:匹配括号内的任意一个…

    Linux干货 2018-03-21
  • Linux下的进程调度与作业管理

    Linux下的进程调度与作业管理 一、概述 1.1 进程的相关概念: 通过前面的几个章节,我们几乎已经学习了很多的linux的基础,这个章节我们讲一下linux下的进程管理,就像windows 下的进程一样,我们知道windows 下有一个任务管理器,专门用来管理进程,我们首先看一下windows 的任务管理器: 从这2个图我们可以看出,windows 下的…

    Linux干货 2016-10-17
  • Linux程序包管理(二)YUM使用

    YUM Linux程序包管理(二) 说完了程序包管理以及rpm的相关使用,接下来说说rpm的前端管理工具 YUM YUM是什么? &emsp;&emsp;&emsp;前面提到,yum是rpm程序包管理器的前端管理工具,那么yum到底是什么?又能做什么呢? YUM:yellow dog,Yellowdog Update Mod…

    Linux干货 2016-06-01
  • Shell脚本编程 流程控制—循环

    循环:重复执行所指定的代码片段,直到循环条件不满足,则退出循环 一、for循环     语法格式:     for 变量名 in 列表     do         循环体     done &nbs…

    Linux干货 2016-08-24
  • 马哥教育网络19期+第十一周课程练习

    1、详细描述一次加密通讯的过程,结合图示最佳。 SSL协议基础:     SSL协议位于TCP/IP协议与各种应用层协议之间,本身又分为两层:     (1)、SSL记录协议:建立在可靠传输层协议(TCP)之上,为上层协议提供数据封装、压缩、加密等基本功能。  &nbs…

    Linux干货 2016-08-15
  • LVM 2 介绍以及怎么使用?

    一、 LVM是什么? LVM利用Linux内核的device-mapper来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间, without getting caught up …

    Linux干货 2017-01-06

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-10 20:24

    总结的不错~赞~继续加油~