N25-第二周总结

linux bassic The second week of blogging

一、linux中的文件,及文件操作管理命令

1. 文件概念

存储空间存储的一段流式数据,对数据可以做到按名存取。

  • linux中的文件具有的特点是:可通过操作系统或者程序对外提供信息,也能对内输入信息,可以被创建,删除。linux中,文件有特别重要的意义,他们为操作系统和设备提供了一个简单而统一的接口。在linux中,几乎一切都可以看做是文件 。这就意味着,普通程序完全可以像使用文件(普通定义)那样使用磁盘文件、串行口、打印机和其他设备。

    例如:可以把cdrom驱动器挂载为一个文件

     ~]# mount /dev/cdrom  /media/cdrom/   挂载光盘文件
    ~]# cd /media/cdrom/
    [root@localhost cdrom]# ls
    CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6
    EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6
    EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6
    GPL              repodata                  TRANS.TBL
    images           RPM-GPG-KEY-CentOS-6

    注:上面这个例子证明硬件设备在linux中也被表示为文件

2、对文件的操作

  • 操作一般意义上的文件一样,linux中对文件的操作只需要五个基本的函数:open(), read(), write(), close(), delete(), create();通过调用这几个函数就能对linux中的文件进行读、写等操作。不过,这种操作又分为系统调用和库函数调用。简单的说,系统调用是最直接的方式,库函数调用最终也是通过系统调用实现的。可认为库函数调用是对系统调出于效率考虑而做出的优化;我们用很少的函数就可以对文件和设备进行访问和控制。这些函数就是所谓的系统调用,由操作系统直接提供,他们是通向操作系统本身的接口。

    操作系统的核心部分,既内核,其实就是一组设备驱动程序。这是一些对硬件进行控制的接口。

3、文件操作相关命令

  • cat命令      文件文本查看工具;

    cat:concatenate files and print on the standard output   连接文件并在标准输出上打印     
    ~]# cat /etc/fstab 
    .....
    cat [OPTION]... [FILE]...
    	-n:给显示的文本行编号;
    	-E: 显示行结束符$;
    
    ~]# cat -n /etc/passwd
         1	root:x:0:0:root:/root:/bin/bash
         2	bin:x:1:1:bin:/bin:/sbin/nologin
         3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
         4	adm:x:3:4:adm:/var/adm:/sbin/nologin
         5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    ~]# cat -E /etc/issue
    CentOS release 6.6 (Final)$
    Kernel \r on an \m$
    $	
  • tac命令 文件文本查看工具;逆序显示

    tac [OPTION]... [FILE]...
      	-n:给显示的文本行编号;
      	-E: 显示行结束符$;
  • head命令 查看文件的前n行;默认10行

    head  [options]  FILE 
      	 -n #     可以-3,也可 -n 3 默认不加选项 显示10行
      	 -#
      ~]# head -n 3 /etc/fstab 
    
      #
      # /etc/fstab
  • tail命令 查看文件的后n行;默认10行

     tail [options] FILE
      	-n #
      	-#
      	-f:查看文件尾部内容结束后不退出,跟随显示新增的行;
      ~]# tail -1 /etc/fstab 
      proc                    /proc                   proc    defaults        0 0
    
      ~]# echo "second line" >> /tmp/functions 
      ~]# tail  -f /tmp/functions 
      		fi
      	    fi
      	fi
          done < /etc/crypttab
          return $ret
      }
    
      # A sed expression to filter out the files that is_ignored_file recognizes
      __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
      new line
      second line   
      注意:-f 选项 后期监控日志增长的时候非常有用;

4.文件管理类命令

  • cp命令

    源文件;目标文件;
    	单源复制:cp [OPTION]... [-T] SOURCE DEST
    	多源复制:cp [OPTION]... SOURCE... DIRECTORY
    	       	 cp [OPTION]... -t DIRECTORY SOURCE...
    单源复制:cp [OPTION]... [-T] SOURCE DEST
    	    如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中;
    	    如果DEST存在:
    	    如果DEST是非目录文件:则覆盖目标文件;
    	    如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;
    
    多源复制:cp [OPTION]... SOURCE... DIRECTORY
    	     cp [OPTION]... -t DIRECTORY SOURCE...
        如果DEST不存在:错误;目标必须是目录;
    	    如果DEST存在:
    	    如果DEST是非目录文件:错误;
    	    如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;
    	    
    -i:交互式复制,即覆盖之前提醒用户确认;
    -f:强制覆盖目标文件;如果目标文件不能被打开,则移除并覆盖之
    -r, -R:递归复制目录;递归复制目录及目录中的内容;
    -d:复制符号链接文件本身,而非其指向的源文件;
    -a:-dR --preserve=all, archive,用于实现归档;理解为做备份
    --preserv=
    	mode:权限
    	ownership:属主和属组
    	timestamps: 时间戳
    	context:安全标签
    	xattr:扩展属性
    	links:符号链接
        all:上述所有属性
    -i 选项:
    ~]# alias
    alias cp='cp -i'  管理员root系统自动给定义了别名,而普通用户没有;
    
    ~]# cp /etc/fstab /tmp/
    cp: overwrite `/tmp/fstab'?  交互式确认
    -r,-R选项:
    ~]# cp -r /var/log /tmp/    目标目录存在会在其下创建一个与原目录同名的目录到该目录下且该目录内容全部复制过去;
    ~]# ls /tmp/
    fstab  functions  hello  log  moosefs  mytest  passwd.out  skel
    -d选项:
    ~]# cp /etc/system-release /tmp/     把这个符号链接指向的源文件真实数据给复制了
    ~]# ls /tmp/
    fstab  functions  hello    skel  system-release
    ~]# cat /tmp/system-release 
    CentOS release 6.6 (Final)
    不想让他把数据给复制过去,就使用-d选项;
    ~]# cp -d /etc/system-release /tmp/system.rel
    ~]# ls -l /tmp/
    lrwxrwxrwx 1 root    root       14 Dec  8 00:53 system.rel -> centos-release
    -rw-r--r-- 1 root    root       27 Dec  8 00:49 system-release
  • mv命令 move

     move (rename) files 移动或者重命名  源有多个,目标只能为目录
      mv [OPTION]... [-T] SOURCE DEST
      mv [OPTION]... SOURCE... DIRECTORY
      mv [OPTION]... -t DIRECTORY SOURCE..	 
      -i :交互式覆盖
      -f : 强制覆盖
      tmp]# mv hello hello.txt 源文件与目标文件在同一个目录下,就改名
      tmp]# ls
      fstab      hello.txt  moosefs  passwd.out  system.rel
      functions  log        mytest   skel        system-release
       tmp]# mv x tom 无需选项
       tmp]# ll
      drwxr-xr-x 2 root    root     4096 Dec  8 01:02 tom
  • rm命令remove

     rm [OPTION]... FILE...
      常用选项:
      	-i:interactive 交互式
      	-f:force 强制
      	-r: recursive 递归
       删除目录:rm -rf /PATH/TO/DIR
       危险操作:rm -rf /*
       红帽系统是ext系列的文件系统,反删除能力非常薄弱;
      注意:所有不用的文件建议不要直接删除,而是移动至某个专用目录;(模拟回收站)
      对于管理员来说,定义了别名,而普通用户没有;
      tmp]# rm hello.txt 
      rm: remove regular empty file `hello.txt'? 
       y,删除,n,或者不跟任何字符都不删除;
      tmp]# rm -r /tmp/log/
      rm: descend into directory `/tmp/log'? y
      rm: remove regular file `/tmp/log/dmesg.old'? y
      rm: descend into directory `/tmp/log/sa'
      当然使用# rm -fr /tmp/log

二、bash的工作特性之命令执行状态返回值和命令行展开

  • 命令执行状态返回值

    bash中一条命令的执行,会产生两种返回结果:命令结果及命令执行状态结果。一条命令成功执行,其执行状态返回值为0。如果未能成功执行,其返回值为1-255。
    ~]# ls
    anaconda-ks.cfg  A-Z    install.log         tee   test.txt  tree
    a-z              fstab  install.log.syslog  test  tr
    [root@localhost ~]# echo $?
    0
    ~]# llls
    -bash: llls: command not found
    [root@localhost ~]# echo $?
    127
  • 命令行展开

    ~:自动展开为用户的家目录,或指定的用户的家目录;
    	~]# cd ~ 进入当前登录账号的家目录, 默认 "cd" 命令就可以实现
    	~]# cd ~loginname 进入指定用于的家目录
    {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;
    	例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b
    问题1:如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?
    	~]# mkdir -pv /tmp/x/{y1/{a,b},y2}
    问题2:如何创建a_c, a_d, b_c, b_d;
    	~]# mkdir -v {a,b}_{c,d}
    问题3:创建如下目录结构:
    /tmp/mysysroot/
    	|-- bin
    	|-- etc
    	|   `-- sysconfig
    	|       `-- network-scripts
    	|-- sbin
    	|-- usr
    	|   |-- bin
    	|   |-- lib
    	|   |-- lib64
    	|   |-- local
    	|   |   |-- bin
    	|   |   |-- etc
    	|   |   |-- lib
    	|   |   `-- sbin
    	|   `-- sbin
    	`-- var
    	 	|-- cache
    	 	|-- log
    		`-- run
    ~]# mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}

三、文件的元数据状态查看,修改时间戳等操作

  • 文件:每一个文件都有两类数据

    元数据:metadata 快速检索内容的目录。理解为描述数据的属性
           包括:大小,块数,类型,设备号;inode 号(索引节点号), 链接次数,硬链接;创建时间
    数据: data 正文部分
    数据一改变,元数据就会立即更新他的时间戳,意味着改动时间也立即跟新	
  • stat命令 显示文件的状态

    stat - display file or file system status  显示文件的状态    
      stat FILE...
      ~]# stat /tmp/functions 
        File: '/tmp/functions'
        Size: 13966     	Blocks: 32         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 201326722   Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Context: unconfined_u:object_r:user_tmp_t:s0
      时间戳:
      最近访问:Access: 2016-11-14 14:19:50.622408377 +0800   读取文件内容;数据流
      最近更改:Modify: 2016-11-14 14:18:14.173408906 +0800   新增一行,数据改变
      最近改动:Change: 2016-11-14 14:18:14.173408906 +0800   元数据改变
  • touch命令:修改文件时间戳

    change file timestamps   更改文件時間戳
      -c:指定的文件路径不存在时后,不予创建;
      -a: 仅修改access time; 直接修改当下命令执行时的时间;
      -m:仅修改modify time;
      注意:change time 不能手动指定更改
      -t STAMP (指定要改为哪一刻时间)
      	[[CC]YY]MMDDhhmm[.ss] 年月日 小时 分钟 秒
      ~]# touch /tmp/functions      如果不跟指定时间,该文件立即跟新为当下系统时间,命令执行的时间
      ~]# stat /tmp/functions 
        File: `/tmp/functions'
        Size: 19316     	Blocks: 40         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 272424      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-12-07 23:57:47.679988222 +0800
      Modify: 2016-12-07 23:42:06.003985658 +0800
      Change: 2016-12-07 23:57:47.679988222 +0800
      ~]# touch /tmp/hello 摸一个不存在的文件,就会创建一个文件 
       ~]# ls /tmp/
      functions  hello
      ~]# file /tmp/hello  看到这个是个空文件
      /tmp/hello: empty
      ~]# touch  -c /tmp/lessssss   不存在该路径不予创建
       ~]# ls /tmp
      functions  moosefs 
    
      ~]# touch -m -t 0212010303.03 /tmp/functions 
       ~]# stat /tmp/functions 
        File: `/tmp/functions'
        Size: 19316     	Blocks: 40         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 272424      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-12-07 23:57:47.679988222 +0800
      Modify: 2002-12-01 03:03:03.000000000 +0800
      Change: 2016-12-08 00:13:13.438986294 +0800
      数据一改变,元数据就会立即更新他的时间戳,意味着改动时间也立即跟新	

四、别名的作用,以及如何在命令中引用其它命令的执行结果

  • alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号''将原来的命令引起来,防止特殊字符导致错误。

  • alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件/etc/bashrc或者/home/.bashrc(/root/.bashrc)中。

    change file timestamps   更改文件時間戳
      -c:指定的文件路径不存在时后,不予创建;
      -a: 仅修改access time; 直接修改当下命令执行时的时间;
      -m:仅修改modify time;
      注意:change time 不能手动指定更改
      -t STAMP (指定要改为哪一刻时间)
      	[[CC]YY]MMDDhhmm[.ss] 年月日 小时 分钟 秒
      ~]# touch /tmp/functions      如果不跟指定时间,该文件立即跟新为当下系统时间,命令执行的时间
      ~]# stat /tmp/functions 
        File: `/tmp/functions'
        Size: 19316     	Blocks: 40         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 272424      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-12-07 23:57:47.679988222 +0800
      Modify: 2016-12-07 23:42:06.003985658 +0800
      Change: 2016-12-07 23:57:47.679988222 +0800
      ~]# touch /tmp/hello 摸一个不存在的文件,就会创建一个文件 
       ~]# ls /tmp/
      functions  hello
      ~]# file /tmp/hello  看到这个是个空文件
      /tmp/hello: empty
      ~]# touch  -c /tmp/lessssss   不存在该路径不予创建
       ~]# ls /tmp
      functions  moosefs 
    
      ~]# touch -m -t 0212010303.03 /tmp/functions 
       ~]# stat /tmp/functions 
        File: `/tmp/functions'
        Size: 19316     	Blocks: 40         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 272424      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-12-07 23:57:47.679988222 +0800
      Modify: 2002-12-01 03:03:03.000000000 +0800
      Change: 2016-12-08 00:13:13.438986294 +0800
      数据一改变,元数据就会立即更新他的时间戳,意味着改动时间也立即跟新	
  • 引用命令的执行结果:命令引用是引用命令的执行结果,状态结果靠$?

    $(COMMAND)
    或`COMMAND`
    ~]# date +%H-%M-%S
    09-18-13
    ~]# mkdir $(date +%H-%M-%S) 把$后的内容当做参数来引用;
     ~]# ls
    09-19-39         a-z  fstab 
    
    bash的基于特性:引用
    	强引用:'' 内部任何字串直接显示,不做替换
    	弱引用:"" 会替换,变量中所存储的值;
    	~]# A=1
     ~]# echo $A
    1
     ~]# echo '$A'
    $A
    ~]# echo "$A"
    1
    	命令引用:``

五、其它练习题目

 1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录;
  ~]# ls -d /var/l?[[:lower:]]
  /var/lib  /var/log

2、显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;
 ~]# ls -d /etc/[0-9]*[^0-9]

3、显示/etc目录下,以非字母开头,后面跟一个字母及其它任意长度任意字符的文件或目录;
 ~]# ls -d /etc/[^a-z][a-z]*

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

 ~]# touch /tmp/tfile-$(date +%F-%H-%M-%S)
 ~]# ls /tmp/
 fstab      hello.txt  moosefs  passwd.out  system.rel      tfile-2016-12-08-10-24-52
 
5、复制/etc目录下所有已p开头,以非数字结尾的文件或目录至/tmp/mytest1目录;

 ~]cp -r /etc/p*[^0-9] /tmp/mytest1/
 ~]# cp -r /etc/p*[^0-9] /tmp/mytest1
 cp: overwrite `/tmp/mytest1/passwd'? y
 cp: overwrite `/tmp/mytest1/passwd-'? y
 ~]# ls /tmp/mytest1
 pam.d    pinforc
 
6、复制/etc/目录下所有以.d结尾的文件或目录至/tmp/mytest2中。

 ~]# cp -r /etc/*.d /tmp/mytest2
 ~]# ls /tmp/mytest2
 bash_completion.d  init.d        modprobe.d      rc1.d  rc.d         xinetd.d
 chkconfig.d        latrace.d     pam.d           rc2.d  rsyslog.d    yum.repos.d
 cron.d             ld.so.conf.d  popt.d          rc3.d  rwtab.d
 
7、复制/etc目录下所有已l或m或n开头,已.cont结尾的文件至/tmp/mytest3目录中。

 ~]# cp  -r /etc/[lmn]*.conf /tmp/mytest3
 ~]# ls /tmp/mytest3
 latrace.conf  libaudit.conf  logrotate.conf  mke2fs.conf  nsswitch.conf
 ld.so.conf    libuser.conf   ltrace.conf     mtools.conf  ntp.conf

原创文章,作者:让优秀称为一种习惯,如若转载,请注明出处:http://www.178linux.com/63257

(0)
上一篇 2016-12-11 19:10
下一篇 2016-12-11 22:17

相关推荐

  • 马哥教育网络班21期-第四周课程练习

    第四周作业 1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -a /etc/skel /home/tuse1   [root@localhost …

    Linux干货 2016-07-17
  • Linux–各种常用表达式整理收集

    文字颜色设置IP地址获取随机口令查找替代等

    Linux干货 2017-12-10
  • N25-第二周作业

    第二周作业 1.Linux上的文件管理命令都有哪些,其常用的使用方法及相关示例演示。 Linux上的文件管理命令有:cp , mv , rm 等命令 cp是复制命令: 命令使用格式是: cp [OPTION]… SOURCE… DEST 例:root@vps ~]# cp /etc/passwd /tmp 复制…

    Linux干货 2016-12-14
  • SElinux

    SElinux:Secure Enhanced Linux   SElinux工作与linux内核中他所实现的功能叫做强制访问控制机制。DAC:是linux的自主访问控制。MAC:是SElinux引入的访问法则,叫作强制访问控制。   SElinux有两种工作级别:     strick:严格级别,每个进程都收到SEl…

    Linux干货 2016-09-23
  • shell位置变量解析

    什么是位置变量 在脚本代码中调用通过命令行传递给脚本的参数。 有哪些位置变量 $1,$2,…: 对应第1、第2等参数,shift [n]换位置 $0:命令本身 $*:传递给脚本的所有参数,全部参数合为一个字符串 $@:传递给脚本的所有参数,每个参数为独立字符串$#:传递给脚本的参数的个数    &nbsp…

    Linux干货 2016-08-15
  • nfs服务部署wordpress

    NFS服务简介 NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。 NFS 的基本原则是“容许不同…

    2017-04-28

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-16 17:07

    赞,总结的不错~加油~