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
下一篇 2016-12-11

相关推荐

  • linux进程及作业管理

    linux进程及作业管理 cpu指令权限等级: 特权级也叫hierarchical protection domains, 有的也叫用户态. 是一种用来保护数据和阻止恶意行为的机制. 电脑操作系统提供不同权限访问级别的资源. 特权级分为四级, 特权级0,1,2,3. 在windows中只使用特权级0和特权级3, 特权最高的是特权级0, 可以直接操作硬件, 如…

    Linux干货 2016-09-19
  • 计算机的组成及其功能

    计算机系统由硬件系统和软件系统两大部分组成。冯诺依曼奠定了现代计算机的基本结构。 冯诺依曼体系的计算机,必须具有如下功能: #1 把需要的程序和数据送至计算机中; #2 具有长期记忆程序、数据、中间结果及最终运算结果的能力; #3 能够完成各种算术运算、逻辑运算和数据传送等数据加工处理的能力; #4 能够根据需要控制程序走向,并能根据指令控制机器的各部件协调…

    Linux干货 2016-08-15
  • iptables 初识

    iptables 包过滤性防火墙     iptables是位于用户空间,是防火墙管理配置规则的工具。     iptables的作用:用来添加,删除,管理netfilter规则。     Netfilter是位于内核中真正的防火墙,由5个钩子组成,…

    Linux干货 2016-06-01
  • 搭建LAMP+NFS(附加mysql共享NFS目录练习总结)

    练习一 环境布局: 主机6 route A (10.1.32.14)作为DNS服务器 主机centos 7 class (10.1.32.3)作为Apache,PHP(模块方式)服务器1(有discuz程序) 主机centos 7 server (10.1.32.13)作为Apache,php(模块方式)服务器2(无discuz) 主机centos 6 cl…

    系统运维 2016-10-25
  • 模块式LAMP和fpm式LAMP实现wordpress

           Linux+Apache+Mysql/MariaDB+Perl/PHP/Python这一组合常用来搭建动态网站或者服务器的开源软件,随着开源潮流的蓬勃发展,开源的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件平台在软件方面的投资成本较低,,LAMP平台已经成为最强…

    Linux干货 2016-04-22
  • N22-第六周作业

    请详细总结vim编辑器的使用并完成以下练习题 单词间跳转 w:下一个单词的词首 e:当前或后一个单词的词尾 b:当前或前一个单词的词首 行首行尾跳转: ^:跳转至行首的第一个非空白字符 0:跳转至行首 $: 跳转至行尾 句间跳转: ) ( 段落跳转: } { 字符编辑 x:删除光标所在处的字符 #x:删除光标所在处起始的#个字符 xp:交换光标所在处的字符与…

    Linux干货 2016-09-26

评论列表(1条)

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

    赞,总结的不错~加油~