wk_02 作业

Linux 文件管理命令

cp命令

功能

Linux 系统中cp命令是用来复制目录/文件的。

概要

单源复制

cp [OPTION]... [-T] SOURCE DEST
  • DEST不存在
    则事先创建此文件,并复制源文件的数据流至DEST中;

  • DEST存在

    • DEST是非目录文件:则覆盖目标文件;

    • DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;

多源复制

cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
  • DEST不存在
    错误

  • DEST存在

    • DEST是非目录文件:错误;

    • DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;

选项

  • -a,–archive 保留链接和文件属性,递归拷贝目录,相当于下面的d、p、r三个选项组合。

  • -d 拷贝时保留链接。

  • -f,–force 如果目标文件无法打开则将其移除并重试(当 -n 选项 存在时则不需再选此项)。

  • -i,–interactive 覆盖目标文件前将给出确认提示,属交互式拷贝。

  • -p,–preserve 复制源文件内容后,还将把其修改时间和访问权限也复制到新文件中。

  • -P,–no-dereference 不跟随源文件中的符号链接

  • -r 若源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。当然,目标文件必须为一个目录名。

  • -l,–link 不作拷贝,只是链接文件。

  • -s 只创建符号链接而不复制文件。

  • -u 只在源文件文件比目标文件新,或目标文件不存在时才进行复制 。

举例

  • 单源复制

# cp /etc/fstab abc
# cp /etc/fstab .
# ll
总用量 8
-rw-r--r-- 1 root root 465 12月 11 16:27 abc
-rw-r--r-- 1 root root 465 12月 11 16:27 fstab
  • 多源复制

# cp /etc/fstab /etc/init.d/functions dasheng/
# ll dasheng/
总用量 20
-rw-r--r-- 1 root root   465 12月 11 16:29 fstab
-rw-r--r-- 1 root root 13948 12月 11 16:29 functions

mv 命令

功能

移动目录/文件和更改目录/文件名。

概要

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

选项

  • -f, –force 覆盖前不询问

  • -i, –interactive 覆盖前询问

举例

# mv abc dasheng/
# mv fstab dasheng/fstab.dasheng
# ll dasheng/
总用量 28
-rw-r--r-- 1 root root   465 12月 11 16:27 abc
-rw-r--r-- 1 root root   465 12月 11 16:29 fstab
-rw-r--r-- 1 root root   465 12月 11 16:27 fstab.dasheng
-rw-r--r-- 1 root root 13948 12月 11 16:29 functions

rm 命令

功能

删除目录或者文件。

概要

rm [OPTION]... FILE...

选项

  • -f, –force 忽略不存在的文件,从不给出提示。

  • -i, –interactive 进行交互式删除

  • -r, -R, –recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。

举例

# rm  dasheng/abc 
rm:是否删除普通文件 "dasheng/abc"?y
# rm -r dasheng/
rm:是否进入目录"dasheng/"? y
rm:是否删除普通文件 "dasheng/fstab"?y
rm:是否删除普通文件 "dasheng/functions"?y
rm:是否删除普通文件 "dasheng/fstab.dasheng"?y
rm:是否删除目录 "dasheng/"?y

在上面的使用中如果选项不带-f 则需要我们输入y来确认是否删除文件。出现这种情况是由于安装系统后CentOS 会自动将root用户的alias 添加alias mv='mv -i'alias rm='rm -i'这两个。而普通用户并不会定于这两个alias,所以我们在日常使用中如果使用了删除的命令一定要慎重,在Linux中是没有回收站这个东西的,如果误删除重要数据请立即停止该系统的数据写入操作,找相关的人员进行恢复。在日常维护中我们可以把rm 命令改成mv 命令来自定义文件的回收站。

自定义回收站

# tail -2 ~/.bashrc 
myrm(){ D=/tmp/$(date +%Y%m%d); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
alias rm='myrm'
# ls
fstab  grub2.cfg
# rm -f ./*
moved to /tmp/20161211 ok
# ll /tmp/20161211/
总用量 12
-rw-r--r--. 1 root root  465 5月   1 2016 fstab
-rw-r--r--  1 root root 4265 12月 11 17:24 grub2.cfg

将配置写入到本地用户的.bashrc中,然后重新进入shell 进行删除操作就可以实现自定义回收站的操作了。如果不想使用此功能则在删除时候使用/bin/rm 进行删除。

命令的执行状态结果

在shell中 执行命令的状态返回结果分为成功和失败,根据执行的成功与否从而使返回的状态码分为下面两类:

  • 成功:0

  • 失败:1-255

在命令执行完成之后,其状态返回值保存于bash的特殊变量$?中;我们可以在命令执行完成以后立即使用echo $?来查看上条命令执行的成功与否。

# date
2016年 12月 11日 星期日 18:05:46 CST
# echo $?
# cat /etc/abcde
cat: /etc/abcde: 没有那个文件或目录
# echo $?
1

命令行展开

特性

  • ~:自动展开为用户的家目录,或指定的用户的家目录;

  • {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;

举例

# cp /etc/init.d/functions{,.bak}
# ll /etc/init.d/functions*
-rw-r--r--. 1 root root 13948 9月  16 2015 /etc/init.d/functions
-rw-r--r--  1 root root 13948 12月 11 18:10 /etc/init.d/functions.bak

练习

  • 创建/tmp/test/目录下的:a_c, a_d, b_c, b_d

# mkdir /tmp/test/{a,b}_{c,d}
# ls /tmp/test/
a_c  a_d  b_c  b_d
  • 创建/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

使用tree 命令之前请yum 安装tree 命令。

# mkdir -pv /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}}
# tree /tmp/mylinux/
/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

24 directories, 0 files

Linux 文件的元数据

任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等。

通过ls 命令查文件的元数据

# ll abc 
-rw-r--r-- 1 root root 14 12月  7 23:07 abc

上面通过ls 命令显示的元数据可以分为:文件的使用权限、属主、属组、文件大小、时间戳、文件名。如果想详细的查看文件的元数据可以使用stat命令。

# stat abc
  文件:"abc"
  大小:14         块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:34907362    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2016-12-07 23:07:19.996507082 +0800
最近更改:2016-12-07 23:07:17.934411393 +0800
最近改动:2016-12-07 23:07:17.936411487 +0800
创建时间:-

修改文件时间戳touch

选项

  • -a 只更改访问时间

  • -c, –no-create 不创建任何文件

  • -d, –date=字符串 使用指定字符串表示时间而非当前时间

  • -m 只更改修改时间

  • -r, –reference=文件 使用指定文件的时间属性而非当前时间

  • -t STAMP 使用[[CC]YY]MMDDhhmm[.ss] 格式的时间而非当前时间

举例

# stat abc 
  File: ‘abc’
  Size: 14          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34907362    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-11 18:53:13.591961660 +0800
Modify: 2016-12-11 18:53:57.793059882 +0800
Change: 2016-12-11 18:53:57.793059882 +0800
 Birth: -
 # touch -a abc
# stat abc
  File: ‘abc’
  Size: 14          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34907362    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-11 18:59:58.232381499 +0800
Modify: 2016-12-11 18:53:57.793059882 +0800
Change: 2016-12-11 18:59:58.232381499 +0800
 Birth: -
 # touch -m abc
# stat abc
  File: ‘abc’
  Size: 14          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34907362    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-11 18:59:58.232381499 +0800
Modify: 2016-12-11 19:00:41.378414225 +0800
Change: 2016-12-11 19:00:41.378414225 +0800
 Birth: -

通过上面的例子我们可以通过 -a来修改Access time或者-m修改Modify time,其文件的Change time都会改变。

命令别名和执行结果

命令别名

  • 获取所有可用别名的定义:# alias

  • 定义别名:alias NAME='COMMAND'

  • 撤销别名:unalias NAME

上面的别名只是在当前shell有效,如果想全局有效,请把别名写在/etc/bashrc中,如果只想让当前用户有效则写在~/.bashrc 文件中。

举例

# alias cdnet='cd /etc/sysconfig/network-scripts/'
# alias 
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@hpf-centos7 ~]# cdnet
[root@hpf-centos7 network-scripts]#

命令引用

在shell中使用命令的执行结果可以使用下面的方法:

  • $(COMMAND)

  • `COMMAND`

举例

# rpm -qf `which tree`
tree-1.6.0-10.el7.x86_64

练习题

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

# ls -d /var/l*[[:lower:]]

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

# ls -d /etc/[[:digit:]][^[:digit:]]

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

# ls -d /etc/[^[:alpha:]][[:alpha:]]*

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

# touch /tmp/tfile-$(date "+%F-%H-%M-%S")
# touch /tmp/tfile-$(date "+%Y-%m-%d-%H-%M-%S" )

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

# mkdir /tmp/mytest1
# cp -r /etc/p[^[:digit:]] /tmp/mytest1/

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

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

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

# mkdir /tmp/mytest3
# cp  /etc/[lmn]*.conf /tmp/mytest3/

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

(0)
profibusprofibus
上一篇 2016-12-11
下一篇 2016-12-11

相关推荐

  • Hadoop hdfs 分布式文件系统

    Hadoop简介:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件…

    Linux干货 2017-04-19
  • 什么叫Linux

    什么叫linux:     Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。 谁编写的linux: Linux的出现,最早…

    Linux干货 2017-03-27
  • 配置使用基于mysql存储rsyslog日志信息

    配置使用基于mysql存储rsyslog日志信息   日志对于我们来说,肯定不会陌生。每个系统应用,只要有人访问,每时每刻都会产生大量的日志,用来记录服务器应用的运行信息。以便于我们在服务有异常时进行查看,或是从日志记录中提取出应用系统的运行信息。某些电商Web网站甚至会利用日志记录去对用户的购买行为作分析,以便更好的服务于客户。 &nb…

    Linux干货 2016-09-05
  • MySQL备份与恢复

    备份与恢复 数据备份就是将数据以某种方式加以保留,以便在系统需要时重新恢复和利用。其作用主要体现在如下两个二方面: 在数据遭到意外事件破坏时,通过数据恢复还原数据 数据备份是历史数据保存归档的最佳方式 数据恢复就是把遭到破坏、删除和修改的数据还原为可使用的数据的过程 为什么要备份数据? 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分…

    Linux干货 2016-11-25
  • 对修改提示符引起的一些问题的理解

    有一个练习:提示符修改过后永久保存,每次打开一个新的shell,提示符都为已设定好的格式,不会因为打开新的shell而不同。 在做这个练习的时候遇到了不少问题,通过不断bing,将起初很陌生的问题一点点的解决,得到了一些理解,因此将理解写下来。 提示符与变量PS1有关,PS1的值可以被修改或重新赋予。PS1的值变,则提示符也会变。通过搜索得到只要在/etc/…

    Linux干货 2017-07-15
  • N28-第二周博客作业

    常用通配符
    *:表示任意长度的任意字符;

    ?:表示任意的单个字符;

    []:表示在指定范围内的单个字符:[a-z];

    [^]:脱字符,是取反的意思,即在指定范围以外的任意字符,如 [^0-9]表示除数字以外的一切字符。

    [:digit:] 表示所有的数字,相当于0-9

    [:lower:] 表示所有的小写字母

    [:upper:] 表示所有的大写字母

    [:alpha:] 表示所有的字母,

    [:alnum:] 相当于[0-9a-z]

    [:space:] 相当于空白字符

    [:punct:] 表示所有的标点符号

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。

    3、请使用命令行展开功能来完成以下练习:

    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_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

    4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?

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

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

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

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

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

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

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

    Linux干货 2017-12-11

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-16 15:45

    赞,自定义回收站的功能不错~~继续加油~