马哥教育网络班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)
zhuckeezhuckee
上一篇 2016-08-22 09:29
下一篇 2016-08-22 09:29

相关推荐

  • 使用yum源码编译安装程序

    需要的安装包:httpd-2.2.29.tar.bz2 1、安装develpment tools     yum groupinstall "Development Tools" 2、下载服务器中的http源安装包到本地,然后解压到指定文件夹中 lftp 10.1.0.1:/pub/Sources/…

    Linux干货 2016-08-24
  • Linux基础之RAID

    一.RAID介绍 RAID刚开始出现的时候叫做廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),但在当时磁盘并非像现在这么便宜,反而这种组合方式使得代价非常昂贵,所以后来改名为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本的思想就是组合组合多个便宜的,性能相对较低…

    Linux干货 2016-11-08
  • vim文本编辑器和sed用法汇总

    1. Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进 和增加了很多特性。 VIM是纯粹的自由软件。 2. vim的三种工作模式: (1) 编辑模式:也叫命令模式,可以执行个各种快捷键的命令 (2) 插入模式:在文本文件中可以直接输入内容。 (3) 末行模式:红帽官方叫扩展命令行模式vim内置命令行接口  注:vi…

    Linux干货 2016-08-12
  • 恐怖的C++语言

    Linus曾经(2007年9月)在新闻组gmane.comp.version-control.git里和一个微软的工程师(Dmitry Kakurin)争执过用C还是用C++,当时的那个微软的工程师主要是在做Git的Windows版,但他却发现Git的源码居然是C语言写的,而不是C++,于是他(Dmitry Kakurin)在Linux社区里发贴表示对Lin…

    Linux干货 2015-04-03
  • linux计划任务

    任务计划的分类: 一次性的任务计划:只执行一次 周期性的任务计划:每隔一定的周期去做相同的事情 设置任务计划功能的工具:at和crontab at:专门处理一次性的计划任务 crontab:根据定义的周期信息,循环做一些事情 batch:系统自行选择空闲时间去执行此处指定的任务 At命令: 查看atd状态和启动atd服务及其配置文件路径: centos6:s…

    2017-09-09
  • 计算机基础知识

    命令总结 echo :回显 echo $PATH:显示命令定义的路径变量 Init 3,5:关闭和打开图形界面 chvt切换虚拟终端(此命令只能本机切换) startx从新打开图形界面 powerr off关机 hostname 显示当前主机名 lsb_release -a显示操作系统版本 lscpu显示cpu信息 cat查看 who am显示当前用户身份 …

    Linux干货 2016-07-26

评论列表(1条)

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

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