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
评论列表(1条)
对于有错误提示的都写出了原因,很不错,继续保持。