马哥教育网络班20期+第二周课程练习

linux 中一切皆文件,我们所做的一切都是和文件打交道。

 

文件分为两部分:元数据和数据

 

        元数据: 即真实数据的属性。可用 stat  命令查看 

           

                 stat   [option]…   FILE…

             

                  [root@black ~]# stat /etc/passwd
                  File: ‘/etc/passwd’
                  Size: 2302       Blocks: 8          IO Block: 4096   regular file
                  Device: 803h/2051d Inode: 10244448    Links: 1
                  Access: (0644/-rw-r–r–)  Uid: (    0/    root)   Gid: (    0/    root)
                  Context: system_u:object_r:passwd_file_t:s0
                  Access: 2016-06-18 19:52:01.243237019 -0400
                  Modify: 2016-04-23 09:47:20.643714195 -0400
                  Change: 2016-04-23 09:47:20.650714195 -0400
                   Birth: –

            以上信息包括了文件大小,所占的块数 ,所占块大小, 文件类型, 权限, 所属属主,属组,context值

            文件访问时间,文件内容修改时间,文件改变的时间。

 

            其中access,modify, change 为文件的时间戳,可以用touch 命令来修改

 

             touch  -a  FILE     只是修改文件的atime

             touch  -m  FILE     只是修改文件的mtime

 

            注: 当atime或mtime 其中之一任意改变,ctime都会改变。             

 

 

touch 命令同时还可以创建文件

 

            用法:touch  FILE  

 

            如果名字后面想跟上创建文件时的时间,可以引用date命令来实现。

 

            e.g.    在/tmp目录下创建已tfile开头,后面接当前日期的文件,格式如tfile-2015-5-27-09-22-33

                

touch  tfile-$(date +%F-%H-%M-%S)

        

 

            当我们每次需要创建该类型的文件时,都得输入这么长的命令,为了方便,我们可以把上面那条命令定义一个别名,以后可以直接输入别名就可以达到该效果。

  

                定义命令别名 tfile

                当前shell生效 :

alias tfile=‘touch tfile-$(date +%F-%H-%M-%S)’

                如果对所有用户生效,可以编辑/etc/bashrc  ,在最后一行加上如上命令。

 

 

当我们管理文件时,首先要知道自己所处的位置,然后开始工作

 

pwd  : 显示当前的在哪个目录下,默认登录进系统,都处于登录用户的家目录下。

mkdir: 创建目录,目录也是文件。

                用法 mkdir [option]…   FILE

rmdir:   只能删除空目录。一般删除目录和文件用rm命令。

 

           例子:

                1. 创建/tmp目录下的:a_c, a_d, b_c, b_d

                

                     解:

touch  /tmp/{a,b}_{c,d}

 

                2.  创建/tmp/mylinux目录下的各级目录:

                        

                        mylinux/

                            ├── bin

                            ├── boot

                            │          └── grub

                            ├── dev

                            ├── etc

                            │         ├── rc.d

                            │         │         └── init.d

                            │         └── sysconfig

                            │                      └── network-scripts

                            ├── lib

                            │         └── modules

                            ├── lib64

                            ├── proc

                            ├── sbin

                            ├── sys

                            ├── tmp

                            ├── usr

                            │         └── local

                            │                     ├── bin

                            │                     └── sbin

                            └── var

                                        ├── lock

                                        ├── log

                                        └── run

 

 

                        解: 

mkdir -p  /tmp/mylinux/{bin,boot/grub/,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}

 

 

当我们执行完命令后,我们可以查看命令执行状态返回值来查看命令是否成功。

 

echo $?

 

当值是0时,表示命令执行成功,

当值是1-255时,表示命令执行失败。

 

通配符与正则表达式

 

当我们需要查看目录中某些特定需求的文件时,此时就需要通过glob(通配符)或者正则表达式的帮助来完成。

我们可以通过几个列子来总结下。

 

 例子:

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

 

        解:

ls -R /var | grep "^1.*[0-9].*[a-z]$"

        

 

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

 

        解:

ls -R /etc  | grep "^[[:digit:]].*[^[:digit:]]$"

 

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

 

        解:

ls -R /etc/ | grep "^[^[:alpha:]][[:alpha:]].*" | grep -v "^\ /.*"

 

 

一般来说,如果是在一个目录下面查找特定需求的文件,只要用到通配符就好,但是上面题目中所要求要查找出所有的文件和目录,这里只能是用到正则表达式了,也许是有别的方法,以后再研究,这里总结下通配符和正则表达式。

 

        通配符:即shell中为了实现文件名的匹配,查找类似的文件,即打牌中的赖子。

 

                *   : 匹配任意长度的任意字符。

                ?   : 匹配任意一个字符。

                []    : 匹配指定范围的一个字符。

                [^]   : 匹配范围外的字符。

 

            专用的字符合集:

                [:alnum:] : 数字或字母

                [:alpha:]  : 字母

                [:digit:]    :  数字

                [:lower:]   : 小写字母

                [:graph:]   : 除了空格和控制字符外的所有字符

                [:punct:]    : 标点符号

                [:upper:]   :  大写字母

        

 

        正则表达式主要是对文本的匹配,像上面的几道题都是先显示出来目录下的所有文件,相当于把结果放到了一个文本中,再通过正则表达式来匹配结果。

 

                字符匹配:表示任意单个字符  ;  []   [^]   字符合集与通配符一样。

                次数匹配:

                                      *   匹配前面的字符任意次数   .*  表示任意长度的任意字符

                                      \?  匹配前面字符0次或1次

                                      \+  匹配前面字符至少1次

                                      \{m\}   匹配前面字符m次

                                      \{m,n\} 匹配前面字符至少m次,至多n次。

 

                位置匹配:

                                    ^  :表示以什么开头

                                    $ : 表示以什么结尾
                                   \<   :匹配单词词首                         

                                    \> : 匹配单词词尾。

 

文件的复制移动删除

 

cp  复制文件和文件夹

 

语法 : cp  [option]…    SOURCE       DEST    (复制单个源到目标)

                cp  [option]…     SOURCE    DEST    (复制多个源到目标)

 

注: …  表示可以存在多个

 

            例子:

 

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

                  

                解:此时就需要通过通配符来完成该操作了。

mkdir /tmp/mytest{1,2,3}
cp  -r  /etc/p*[^[:digit:]]   /tmp/mytest1

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

                

                解:

cp -r  /etc/*.d    /tmp/mytest2

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

             

                 解: 

cp  -r   /etc/[l,m,n]*.conf    /tmp/mytest3

 

    cp的常用选项

            -r   ,-R: 递归复制,复制目录下所有目录和文件

            -i            :  交互式

            -a           : 归档,保留元数据属性,相当于-dR -preserv=all

 

            -d            : 不复制真实的文件,还是保持该文件为链接文件

            -L            : 复制文件真实内容,文件不存为链接文件

            -p            :  保留 属主,属组,时间戳

 

mv    移动文件夹(用于改文件名)

 

语法 : mv  [option]…    SOURCE       DEST    (移动单个源到目标)

               mv  [option]…     SOURCE    DEST    (移动多个源到目标)

 

 

rm      删除文件或文件夹

 

语法: rm   [option]…    FILE

 

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

(0)
CacheCache
上一篇 2016-06-23
下一篇 2016-06-23

相关推荐

  • Linux系统修复

    在boot里面我们可以根据自己的需求去设置一些启动选项,我们今天来了解一下Linux启动流程,以及boot下的选项。       加载BIOS的硬件信息,获取第一个启动设备。 读取第一个启动设备MBR的引导加载程序(grub)的启动信息 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备。 核型执行init程序…

    Linux干货 2016-09-13
  • lamp部署及编译安装

    lamp 资源类型: 静态资源:原始形式与响应给客户端的结果一致; 动态资源:原始形式通常为程序文件(为某种编程语言开发),需要运行后将生成的结果展示给客户端;如果请求的资源不存在那么结果就会重定向至指定的文件中 客户端技术:javascript 服务端技术:php, jsp, … CGI:Common Gateway Interfa…

    Linux干货 2016-10-19
  • Linux基础知识之history命令详解

     该博文以CentOS6.8_x86_64系统为基础,Xshell 5远程连接CentOS系统,以root身份登录系统。 为什么要学习history命令?     history命令是Linux的一个内嵌的shell命令,history命令的使用有时会大大缩短我们输入命令的时间,达到节省命令快捷操作的要求。学…

    Linux干货 2016-07-27
  • 第二周作业

    第二周博客作业 1. Linux上常用的文件管理命令及使用 (1) CP命令:复制文件或文件夹语法格式        cp [OPTION]… [-T] SOURCE DEST     …

    Linux干货 2016-12-16
  • 马哥教育网络班19期第七周课程练习

    第七周作业 1.创建一个10G分区,并格式化为ext4文件系统:   (1)要求甘block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl;   (2)挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@nginx ~]# fdisk /dev/sdd D…

    Linux干货 2016-06-23
  • 01day-计算机与操作系统基础

    第1章 计算机基础 1.1 什么是计算机 计算机是个笼统的概念,泛指一切计算功能的机器。这样扯的话,以前的算盘也是计算机了。我们现在的计算机应该称作电子计算机,我天朝人民称为电脑。听说谷歌在研究量子计算机,完全不懂是什么玩意。 一不小心在百度百科看到还有光子计算机,生物计算机,吓我一跳,赶紧复制链接过来,自己慢慢看《百度百科—-计算机》 &nbs…

    Linux干货 2016-06-29

评论列表(1条)

  • 马哥教育
    马哥教育 2016-06-23 14:03

    写的很棒,但是是不是没写完啊?在多关注一些排版方面的技巧