马哥教育网络班22期-第2周博客作业1

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

1.1 cp命令

   cp – copy files and directories

   复制文件或目录

【SYNOPSIS】

   单源复制: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是目录文件:分别复制每个文件至目标目录中,并保持原名;

【OPTIONS】

   -i:交互式复制,即覆盖之前提醒用户确认;

   -f:强制覆盖目标文件,而不提示;

   -r:-R:递归复制目录;

   -d:复制符号链接文件本身,而非其指向的源文件;

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

   -P:源文件或者文件的路径保留;

   -b:或–backup,删除、覆盖目标文件之前先备份,备份的文件会在字尾加上一个备份字符串;

   -s:不进行复制成,而是建立符号链接;

   -S <备份字尾字符串>:或用–suffix=<备份字尾字符串>,用“-b”参数备份目标文件后,备份文件的字尾会加上一个备份字符串。默认的备份字符串是符号“~”,可通过“S”来改变它。

   -u:只有在源文件的改变时间比目标文件更新的时候,或是名称相互对应的目标文件不存在时,才复制文件

   -l:对源文件建立硬链接,而非复制; 

   -v:执行时显示详细过程;

   -a:-dR –preserve=all,archive,用于实现归档,保留链接和文件属性,递归拷贝目录,相当于下面的d、        –preserv=

           mode:权限

           ownership:属主属组

           timestamps:时间戳

           contest:安全标签

           xattr:扩展属性

           links:符号链接

           all:上述所有属性

【EXAMPLES】

实例1:直接执行cp命令,不带任何参数

[root@zck ~]# cd /test/
[root@zck test]# ll /var/log/wtmp 
-rw-rw-r--. 1 root utmp 67200 Aug 15 18:35 /var/log/wtmp
[root@zck test]# cp /var/log/wtmp .    #"."表示复制到当前目录
[root@zck test]# ll
total 68
-rw-r--r--. 1 root root 67200 Aug 15 22:26 wtmp
#查看标注,在不加任何选项的情况下,文件的某些属性/权限会改变;连文件建立的时间也不一样。

实例2:执行cp -a连源文件属性全部复制。

[root@zck test]# ll /var/log/wtmp 
-rw-rw-r--. 1 root utmp 68736 Aug 16 08:57 /var/log/wtmp
[root@zck test]# cp -a /var/log/wtmp wtmp_2
[root@zck test]# ll
total 68
-rw-rw-r--. 1 root utmp 68736 Aug 16 08:57 wtmp_2
#查看标注,复制过来的属性与源文件一模一样。

实例3:使用交互式复制将wtmp复制成wtmp2

[root@zck test]# ll
total 68
-rw-rw-r--. 1 root utmp 68736 Aug 16 08:57 wtmp_2
[root@zck test]# cp -i /var/log/wtmp wtmp_2 
cp: overwrite ‘wtmp_2’? y   #提示是否覆盖‘wtmp_2’
[root@zck test]# ll
total 68
-rw-rw-r--. 1 root utmp 68736 Aug 16 18:37 wtmp_2

实例4:使用强制复制将wtmp复制成wtmp2

[root@zck test]# cp -f /var/log/wtmp wtmp_2 
cp: overwrite ‘wtmp_2’? y  #使用强制复制,仍会提示用户确认,是由于cp命令默认带-i参数。
[root@zck test]# ll
total 68
-rw-rw-r--. 1 root utmp 68736 Aug 16 18:48 wtmp_2
[root@zck test]# alias
alias cls='clear'alias cp='cp -i'
#cp命令默认设置了命令别名带-i参数。

实例5:单源复制,将目录/tmp/man/复制成dir1,目录之间的复制将因目标目录的存在与否而有所差异;

[root@zck test]# cp -R /tmp/man/ dir1
[root@zck test]# ll
total 4
drwxr-xr-x. 11 root root 4096 Aug 16 19:28 dir1
[root@zck test]# ll dir1/
total 360
drwxr-xr-x. 2 root root  53248 Aug 16 19:28 man1
drwxr-xr-x. 2 root root  12288 Aug 16 19:28 man2
drwxr-xr-x. 2 root root 110592 Aug 16 19:28 man3
drwxr-xr-x. 2 root root   4096 Aug 16 19:28 man4
drwxr-xr-x. 2 root root  16384 Aug 16 19:28 man5
drwxr-xr-x. 2 root root     23 Aug 16 19:28 man6
drwxr-xr-x. 2 root root   8192 Aug 16 19:28 man7
drwxr-xr-x. 2 root root  32768 Aug 16 19:28 man8
drwxr-xr-x. 2 root root      6 Aug 16 19:28 man9
#由于dir1目录不存在,所以会建立dir1这个目录,并把/tmp/man/目录下的文件与子目录都复制到dir1中。
[root@zck test]# cp -R /tmp/man/ dir1
[root@zck test]# ll dir1
total 364drwxr-xr-x. 11 root root   4096 Aug 16 20:08 man
drwxr-xr-x.  2 root root  53248 Aug 16 19:28 man1
drwxr-xr-x.  2 root root  12288 Aug 16 19:28 man2
drwxr-xr-x.  2 root root 110592 Aug 16 19:28 man3
drwxr-xr-x.  2 root root   4096 Aug 16 19:28 man4
drwxr-xr-x.  2 root root  16384 Aug 16 19:28 man5
drwxr-xr-x.  2 root root     23 Aug 16 19:28 man6
drwxr-xr-x.  2 root root   8192 Aug 16 19:28 man7
drwxr-xr-x.  2 root root  32768 Aug 16 19:28 man8
drwxr-xr-x.  2 root root      6 Aug 16 19:28 man9
#由于dir1已经存在,则是把整个/tmp/man/目录,即man目录本身及目录下的所有文件与子目录都复制到dir1中,即dir1/man中。

实例6:多源复制,将file1、file2、file3、dir1复制到dir3目录下

[root@zck test]# cp -r file1 file2 file3 dir1 dir3
cp: target ‘dir3’ is not a directory   #由于目标目录dir3不存在,所以会报错
[root@zck test]# mkdir dir3    #创建dir3目录
[root@zck test]# cp -r file1 file2 file3 dir1 dir3
[root@zck test]# ll dir3
total 364
drwxr-xr-x. 12 root root   4096 Aug 16 20:27 dir1
-rw-r--r--.  1 root root      0 Aug 16 20:27 file1
-rw-r--r--.  1 root root      0 Aug 16 20:27 file2
-rw-r--r--.  1 root root      0 Aug 16 20:27 file3
#由于目标目录dir3已经存在分别将file1 file2 file3 dir1复制到目标目录中,并保持原名。

实例7:只有源文件的改变时间较新时,才复制文件

[root@zck test]# ll
total 2
-rw-r--r--.  1 root root    0 Aug 16 20:26 file1
-rw-r--r--.  1 root root    0 Aug 16 20:25 file2
[root@zck test]# cp -u -v file1 file2  
cp: overwrite ‘file2’? y    #由于file1的改变时间比file2文件的改变时间较新才会执行复制。
‘file1’ -> ‘file2’   #-v,显示执行详细过程。
[root@zck test]# ll
total 2
-rw-r--r--.  1 root root    0 Aug 16 20:26 file1
-rw-r--r--.  1 root root    0 Aug 16 21:06 file2
[root@zck test]# cp -u -v file1 file2
#由于file1的改变时间比file2文件的改变时间旧,拟不会执行复制。
总结:cp命令的-u参数,是在目标文件与来源文件有差异时,才会复制,否则不会复制,所以,比较常用于备份工作当中。

实例8:-b参数,file2是已经存在的文件,将file1复制成file2时,则是生成一个备份文件;

[root@zck test]# cp -b file1 file2
cp: overwrite ‘file2’? y
[root@zck test]# ll
total 3
-rw-r--r--.  1 root root    0 Aug 16 20:26 file1
-rw-r--r--.  1 root root    0 Aug 16 21:43 file2
-rw-r--r--.  1 root root    0 Aug 16 21:06 file2~
[root@zck test]# cp -b -S _backup file1 file2   #-S,指定备份字尾字符串
cp: overwrite ‘file2’? y
[root@zck test]# ll
total 4
-rw-r--r--.  1 root root    0 Aug 16 20:26 file1
-rw-r--r--.  1 root root    0 Aug 16 21:44 file2
-rw-r--r--.  1 root root    0 Aug 16 21:06 file2~
-rw-r--r--.  1 root root    0 Aug 16 21:43 file2_backup

实例9:复制文件时,建立源文件的硬链接或软件链接,分别用-l、-s参数;

[root@zck test]# cp -l file1 file2   #建立源文件硬链接,而非复制
[root@zck test]# ll
total 8
-rw-r--r--. 2 root root 6 Aug 16 21:49 file1
-rw-r--r--. 2 root root 6 Aug 16 21:49 file2
-rw-r--r--. 1 root root 0 Aug 16 20:25 file3
[root@zck test]# cat file2
file1
[root@zck test]# cp -s file1 file4  #建立源文件软链接,而非复制
[root@zck test]# ll
total 8
-rw-r--r--. 2 root root 6 Aug 16 21:49 file1
-rw-r--r--. 2 root root 6 Aug 16 21:49 file2
-rw-r--r--. 1 root root 0 Aug 16 20:25 file3
lrwxrwxrwx. 1 root root 5 Aug 16 22:05 file4 -> file1
[root@zck test]# echo "file2" >> file2
[root@zck test]# cat file1
file1
file2
[root@zck test]# echo "file4" >> file4
[root@zck test]# cat file1
file1
file2
file4

实例10:执行cp -d,复制一个链接文件

[root@zck log_link]# echo "link" >log_link
[root@zck log_link]# cat log_link 
link
[root@zck log_link]# ll
total 4
-rw-r--r--. 1 root root 5 Aug 16 22:22 log_link
[root@zck log_link]# cp -s log_link log_slink
[root@zck log_link]# ll
total 4
-rw-r--r--. 1 root root 5 Aug 16 22:22 log_link
lrwxrwxrwx. 1 root root 8 Aug 16 22:22 log_slink -> log_link
[root@zck log_link]# cp log_slink log_slink1
[root@zck log_link]# cp -d log_slink log_slink2
[root@zck log_link]# ll
total 8
-rw-r--r--. 1 root root 5 Aug 16 22:22 log_link
lrwxrwxrwx. 1 root root 8 Aug 16 22:22 log_slink -> log_link
-rw-r--r--. 1 root root 5 Aug 16 22:23 log_slink1    #与源文件相同
lrwxrwxrwx. 1 root root 8 Aug 16 22:23 log_slink2 -> log_link    #是链接文件
总结:如果cp命令不加上任何参数,cp复制的是源文件,而非链接文件的属性。若要复制链接文件的属性,就得使用-d的参数。

1.3 rm 命令

    rm – remove files or directories

    删除文件或目录

【SYNOPSIS】

    rm [OPTION]… FILE…

【OPTIONS】

    -d:直接把要删除的目录的硬链接数删成0,并移除该目录;        

    -i:交互式删除,删除已有文件或目录之前先询问用户;        

    -f:–force(强制),强制删除文件或目录;        

    -r、-R:递归处理,将指定目录下的所有文件和子目录一并删除;        

    -v:显示命令的执行过程;

【EXAMPLES】

实例1:执行rm命令,不带任何参数

[root@zck test]# tree
.
├── dir1
├── dir2
├── dir3
├── file1.txt
├── file2.txt
└── file3.txt
3 directories, 3 files
[root@zck test]# rm file1.txt
rm: remove regular empty file ‘file1.txt’? y   #询问是否删除,不想删除输入“n”
[root@zck test]# ll file1
ls: cannot access file1: No such file or directory  #找不到此文件,已经删除
#linux默认设置了别名rm -i参数,所以执行rm,会默认询问是否删除

[root@zck test]# alias | grep rm
alias rm='rm -i'

实例2:执行rm命令,带-f参数

[root@zck test]# rm -f file2.txt
[root@zck test]# ll file2.txt
ls: cannot access file2.txt: No such file or directory

实例3:执行rm命令,带-i参数

[root@zck test]# rm -i *.txt
rm: remove regular empty file ‘file3.txt’? y
[root@zck test]# ll
total 0
#删除所有.txt的文件,删除前逐一询问是否删除。

实例 4:执行 rm 命令,带-r 参数,将test1子目录及子目录中所有档案删除。

[root@zck test]# mkdir -vp /tmp/test/{test1,test2,test3,test4/txt}
mkdir: created directory ‘/tmp/test/test1’
mkdir: created directory ‘/tmp/test/test2’
mkdir: created directory ‘/tmp/test/test3’
mkdir: created directory ‘/tmp/test/test4’
mkdir: created directory ‘/tmp/test/test4/txt’
[root@zck test]# ll
total 0
drwxr-xr-x. 2 root root  6 Aug 17 18:34 test1
drwxr-xr-x. 2 root root  6 Aug 17 18:34 test2
drwxr-xr-x. 2 root root  6 Aug 17 18:34 test3
drwxr-xr-x. 3 root root 16 Aug 17 18:34 test4
[root@zck test]# rm -r test1
rm: remove directory ‘test1’? y
[root@zck test]# ll
total 0
drwxr-xr-x. 2 root root  6 Aug 17 18:34 test2
drwxr-xr-x. 2 root root  6 Aug 17 18:34 test3
drwxr-xr-x. 3 root root 16 Aug 17 18:34 test4
[root@zck test]# rm -rf test2
[root@zck test]# ll
total 0
drwxr-xr-x. 2 root root  6 Aug 17 18:34 test3
drwxr-xr-x. 3 root root 16 Aug 17 18:34 test4

实例 6:自定义回收站功能

  下面的操作过程模拟了回收站的效果,即删除文件的时候只是把文件放到一个临时目录中,这样在需要的时候还可以恢复过来。

命令:

myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
[root@zck test]# myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
[root@zck test]# alias rm='myrm'
[root@zck test]# touch 1.log 2.log 3.log
[root@zck test]# ll
total 0
-rw-r--r--. 1 root root  0 Aug 17 18:40 1.log
-rw-r--r--. 1 root root  0 Aug 17 18:40 2.log
-rw-r--r--. 1 root root  0 Aug 17 18:40 3.log
drwxr-xr-x. 2 root root  6 Aug 17 18:34 test3
drwxr-xr-x. 3 root root 16 Aug 17 18:34 test4
[root@zck test]# rm [123].log
moved to /tmp/20160817184051 ok
[root@zck test]# ll
total 0
drwxr-xr-x. 2 root root  6 Aug 17 18:34 test3
drwxr-xr-x. 3 root root 16 Aug 17 18:34 test4
[root@zck test]# ls /tmp/20160817184051/
1.log  2.log  3.log

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

(0)
上一篇 2016-08-22 09:29
下一篇 2016-08-22 09:29

相关推荐

  • 【N25第五周作业】find命令以及相关练习

    find: 实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找; 工作特性: 查找速度略慢; 精确查找; 实时查找; 用法: find [OPTIONS]  [查找起始路径]  [查找条件]  [处理动作] 查找起始路径:指定具体搜索目标起始路径;默认为当前目录; 查找条件:…

    Linux干货 2016-12-27
  • SELinux介绍

    SELinux介绍 SELinux: Secure Enhanced Linux, 是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Corporation)开发的 Linux的一个强制访问控制的安全模块。 2000年以GNU GPL发布, Linux内核2.6版本后集成在内核中D…

    Linux干货 2016-10-08
  • Linux平台的4个最佳开源代码编辑器

    原文出处: Abhishek   译文出处:Linux中国 su-kaiyao   正在寻找Linux平台最棒的代码编辑器?如果你询问那些很早就玩Linux的人,他们会回答是Vi, Vim, Emacs, Nano等。但是,我今天不讨论那些。我将谈论一些新时代尖端、漂亮、时髦而且十分强大, 功能丰富…

    Linux干货 2015-03-02
  • FHS-文件系统层级结构标准

    文件系统层级结构标准(FHS:Filesystem Hierarchy Standard) 文件系统层次结构标准(英语:Filesystem Hierarchy Standard,FHS)定义了Linux操作系统中的主要目录及目录内容。当前的版本是2.3,在2004年1月29日公布。多数Linux发行版遵从FHS标准并且声明其自身政策以维护FHS的要求。然而…

    Linux干货 2016-10-16
  • dd工具

    dd     dd命令:convert and copy a file     用法:        ddif=/PATH/FROM/SRC of=/PATH/TO/DEST       &…

    Linux干货 2016-09-02
  • 位置变量;if;for循环

    向脚本传递参数就是用位置参数变量实现 传递给命令的参数称为位置参数  ls  /etc/var Myscript.sh  argu1 argu2 ….${10}  ${11}…   引用方式 :$1就是引用整个脚本位置参数的第一个,第一个会自动保存在$1中  &nb…

    Linux干货 2016-08-15

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-14 08:03

    对于有错误提示的都写出了原因,很不错,继续保持。