61阅读

linux下cp命令的用法-Linux下Find命令的使用

发布时间:2017-09-03 所属栏目:linux常用命令

一 : Linux下Find命令的使用


find是linux中查找的命令,其工作效率确实不能说是很高,但是需要经常使用,所以要掌握find的用法。find [directory] 寻找条件操作还有种表述方式:find PATH OPTION [-exec COMMAND { } ;##如果想得到的输出结果是绝对目录,那么查找的directory也要写绝对路径,如果写相对路径,输出的也是相对路径该命令中的寻找条件可以是一个用逻辑运算符 not、and、or 组成的复合条件。逻辑运算符 and、or、not 的含义为:
(1) and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找条件才算满足。例如:find –name ’tmp’ –xtype c -user ’inin’该命令寻找三个给定条件都满足的所有文件(2) or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足。例如:find –name ’tmp’ –o –name ’mina*’该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。(3) not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。例如:find ! –name ’tmp’该命令查询文件名不是’tmp’的所有文件。需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“”来去除括号的意义。例:find (–name ’tmp’ –xtype c -user ’inin’ )
下面我说一下find命令的option在option中,具体有参数:-name ’字串’查找文件名匹配所给字串的所有文件,字串内可用通配符 *、?、[ ]。-lname ’字串’查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符 *、?、[ ]。-gid n 查找属于ID号为 n 的用户组的所有文件。-uid n 查找属于ID号为 n 的用户的所有文件。-group ’字串’查找属于用户组名为所给字串的所有的文件。-user ’字串’查找属于用户名为所给字串的所有的文件。-empty 查找大小为 0的目录或文件。-path ’字串’查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。-perm 权限查找具有指定权限的文件和目录,权限的表示可以如711,644。-size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为 b,代表512字节的块。-type x 查找类型为 x 的文件,x 为下列字符之一:-maxdepyh n 只查找制定目录下的符合匹配的文件或目录b 块设备文件c 字符设备文件d 目录文件p 命名管道(FIFO)f 普通文件l 符号链接文件(symboliclinks)s socket文件-xtype x 与 -type 基本相同,但只查找符号链接文件。以时间为条件查找-amin n 查找n分钟以前被访问过的所有文件。-atime n 查找n天以前被访问过的所有文件。-cmin n 查找n分钟以前文件状态被修改过的所有文件。-ctime n 查找n天以前文件状态被修改过的所有文件。-mmin n 查找n分钟以前文件内容被修改过的所有文件。-mtime n 查找n天以前文件内容被修改过的所有文件。-print:将搜索结果输出到标准输出。例子:在root以及子目录查找不包括目录/root/bin的,greek用户的,文件类型为普通文件的,3天之前的名为test-find.c的文件,并将结构输出,find命令如下:find / -name "test-find.c" -typef -mtime +3 -user greek -prune /root/bin -print当然在这其中,-print是一个默认选项,我们不必刻意去配置它。我们再看一下exec选项:-exec:对搜索的结构指令指定的shell命令。注意格式要正确:"-exec命令 {} ;"在}和之间一定要有空格才行;{}表示命令的参数即为所找到的文件;命令的末尾必须以“ ;”结束。例子:对上述例子搜索出来的文件进行删除操作,命令如下:find / -name "test-find.c" -typef -mtime +3 -user greek -prune /root/bin -exec rm {} ;find命令指令实例:find . - name ‘main*’ - exec more {} ;% 查找当前目录中所有以main开头的文件,并显示这些文件的内容。find . (- name a.out - o - name‘*.o’)> - atime +7 - exec rm {} ;% 删除当前目录下所有一周之内没有被访问过的a.out或*.o文件。% 命令中的“.”表示当前目录,此时find 将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。% “(”和“)”表示括号(),其中的“”称为转义符。之所以这样写是由于对Shell 而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。% “-name a.out”是指要查找名为a.out的文件;% “-name ‘*.o’”是指要查找所有名字以 .o 结尾的文件。这两个 -name 之间的 -o 表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件。find命令在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前(条件 -atime +7),若是,则对该文件执行命令rm(-exec rm {} ;)。其中 {} 代表当前查到的符合条件的文件名,;则是语法所要求的。上述命令中第一行的最后一个 是续行符。当命令太长而在一行写不下时,可输入一个 ,之后系统将显示一个 >,指示用户继续输入命令。以上就是今天我学习find命令的全部内容,如果有不足的地方还请大家指出。

二 : 每天一个linux命令(8):cp 命令

cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。[www.61k.com]一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。 

1.命令格式:

用法:

  cp [选项]... [-T] 源 目的

      或:cp [选项]... 源... 目录

     或:cp [选项]... -t 目录 源...

2.命令功能:

将源文件复制至目标文件,或将多个源文件复制至目标目录。

3.命令参数:

-a, --archive    等于-dR --preserve=all

    --backup[=CONTROL    为每个已存在的目标文件创建备份

-b                类似--backup 但不接受参数

   --copy-contents        在递归处理是复制特殊文件内容

-d                等于--no-dereference --preserve=links

-f, --force        如果目标文件无法打开则将其移除并重试(当 -n 选项

                    存在时则不需再选此项)

-i, --interactive        覆盖前询问(使前面的 -n 选项失效)

-H                跟随源文件中的命令行符号链接

-l, --link            链接文件而不复制

-L, --dereference   总是跟随符号链接

-n, --no-clobber   不要覆盖已存在的文件(使前面的 -i 选项失效)

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

-p                等于--preserve=模式,所有权,时间戳

    --preserve[=属性列表   保持指定的属性(默认:模式,所有权,时间戳),如果

               可能保持附加属性:环境、链接、xattr 等

-R, -r, --recursive  复制目录及目录内的所有项目

4.命令实例:

实例一:复制单个文件到目标目录,文件在目标文件中不存在

命令:

cp log.log test5

输出:

[root@localhost test]# cp log.log test5

[root@localhost test]# ll

-rw-r--r-- 1 root root    0 10-28 14:48 log.log

drwxr-xr-x 6 root root 4096 10-27 01:58 scf

drwxrwxrwx 2 root root 4096 10-28 14:47 test3

drwxr-xr-x 2 root root 4096 10-28 14:53 test5

[root@localhost test]# cd test5

[root@localhost test5]# ll

-rw-r--r-- 1 root root 0 10-28 14:46 log5-1.log

-rw-r--r-- 1 root root 0 10-28 14:46 log5-2.log

-rw-r--r-- 1 root root 0 10-28 14:46 log5-3.log

-rw-r--r-- 1 root root 0 10-28 14:53 log.log

说明:

在没有带-a参数时,两个文件的时间是不一样的。在带了-a参数时,两个文件的时间是一致的。  

实例二:目标文件存在时,会询问是否覆盖

命令:

cp log.log test5

输出:

[root@localhost test]# cp log.log test5

cp:是否覆盖“test5/log.log”? n

[root@localhost test]# cp -a log.log test5

cp:是否覆盖“test5/log.log”? y

[root@localhost test]# cd test5/

[root@localhost test5]# ll

-rw-r--r-- 1 root root 0 10-28 14:46 log5-1.log

-rw-r--r-- 1 root root 0 10-28 14:46 log5-2.log

-rw-r--r-- 1 root root 0 10-28 14:46 log5-3.log

-rw-r--r-- 1 root root 0 10-28 14:48 log.log

说明:

目标文件存在时,会询问是否覆盖。这是因为cp是cp -i的别名。目标文件存在时,即使加了-f标志,也还会询问是否覆盖。

实例三:复制整个目录

命令:

输出:

目标目录存在时:

[root@localhost test]# cp -a test3 test5 

[root@localhost test]# ll

-rw-r--r-- 1 root root    0 10-28 14:48 log.log

三 : linux cp 命令

CP常用指令:

语法: cp [选项] src file or dir obj file or dir

说明:该命令把指定的源文档复制到目标文档或把多个源文档复制到目标目录中。

各参数说明:

- a 该选项通常在拷贝目录时使用。他保留链接、文档属性,并递归地拷贝目录,其作用等于dpR选项的组合。

- d 拷贝时保留链接。

- f 删除已存在的同名目标文档而不提示。

- i 和f选项相反,在覆盖目标文档之前将给出提示需要用户确认。回答y时目标文档将被覆盖,是交互式拷贝。

- p 此时cp除复制源文档的内容外,还将把其修改时间和访问权限也复制到新文档中。

- r 若给出的源文档是一目录文档,此时cp将递归复制该目录下任何的子目录和文档。此时目标文档必须为一个目录名。

- l 不作拷贝,只是链接文档。

1)$ cp file1 file2

把file1的内容拷贝到file2,同时file1还依然存在,就是用file1的内容覆盖file2的内容;如果想避免覆盖这样的问题发生,可以像mv命令中那样使用-i和-b命令,若需要拷贝文件的所有属性,则使用-a:

$ cp -bi file1 file2

$ cp -a file1 file2

2)$cp tempdir1/* tempdir2

把tempdir1下面的文件全部cp到tempdir2目录下;

3)$ cp -r tempdir1 tempdir2(拷贝目录)

使用参数-r,可以将tempdir1以及其子文件拷贝到tempdir2中去;

4)$cp -r tempdir1 .

拷贝tempdir1及其中的内容,到当前目录下。在当前目录下的文件名为tempdir1;

四 : Linux cp -a用法

Linuxcp -a用法

对于cp -a最主要的用法是在保留原文件属性的前提下复制文件。

其实还有个很好的用法,如下:

大家知道linux下复制目录可以通过,cp -r dirname destdir

但是这样复制的目录属性会发生变化,想要使得复制之后

的目录和原目录完全一样,可以使用cp -a dirname destdir

扩展:linux下cp命令的用法 / linux中cp的用法 / linux cp用法

五 : linux cp命令参数及用法详解---linux 复制文件命令cp

转载自:

 

cp(复制档案或目录)
[root@linux ~]#cp[-adfilprsu] 来源档(source) 目的檔(destination)
[root@linux ~]#cp[options] source1 source2 source3 …. directory
参数:
-a :相当于 -pdr 的意思;
-d :若来源文件为连结文件的属性(linkfile),则复制连结文件属性而非档案本身;
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-p :连同档案的属性一起复制过去,而非使用预设属性;
-r :递归持续复制,用于目录的复制行为;
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination !
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!

范例:
范例一:将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc
[root@linux ~]#cd/tmp
[root@linux tmp]# cp ~/.bashrc bashrc
[root@linux tmp]# cp -i ~/.bashrc bashrc
cp: overwrite`basrhc’? n
# 重复作两次动作,由于 /tmp 底下已经存在 bashrc 了,加上 -i 参数,
# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 呢!
# 但是,反过来说,如果不想要询问时,则加上 -f 这个参数来强制直接覆盖!

范例二:将 /var/log/wtmp 复制到 /tmp 底下
[root@linux tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的 . 不要忘
[root@linux tmp]#ls-l /var/log/wtmp wtmp
-rw-rw-r– 1 root utmp 71808 Jul 18 12:46 /var/log/wtmp
-rw-r–r– 1 root root 71808 Jul 18 21:58 wtmp
# 注意到了吗?!在不加任何参数的情况下,档案的所属者会改变,连权限也跟着改变了~
# 这是个很重要的特性!要注意喔!还有,连档案建立的时间也不一样了!
# 如果您想要将档案的所有特性都一起复制过来,可以加上 -a 喔!
[root@linux tmp]# cp -a /var/log/wtmp wtmp_2
[root@linux tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r– 1 root utmp 71808 Jul 18 12:46 /var/log/wtmp
-rw-rw-r– 1 root utmp 71808 Jul 18 12:46 wtmp_2
# 瞭了吧!整个资料特性完全一模一样ㄟ!真是不赖~这就是 -a 的特性!

范例三:复制 /etc/ 这个目录下的所有内容到 /tmp 底下
[root@linux tmp]# cp /etc/ /tmp
cp: omitting directory `/etc’ <== 如果是目录,不能直接复制,要加上 -r 的参数
[root@linux tmp]# cp -r /etc/ /tmp
# 还是要再次的强调喔! -r 是可以复制目录,但是,档案与目录的权限会被改变~
# 所以,也可以利用 cp -a /etc /tmp 来下达指令喔!

范例四:将范例一复制的 bashrc 建立一个连结档 (symbolic link)
[root@linux tmp]# ls -l bashrc
-rw-r–r– 1 root root 395 Jul 18 22:08 bashrc
[root@linux tmp]# cp -s bashrc bashrc_slink
[root@linux tmp]# cp -l bashrc bashrc_hlink
[root@linux tmp]# ls -l bashrc*
-rw-r–r– 2 root root 395 Jul 18 22:08 bashrc
-rw-r–r– 2 root root 395 Jul 18 22:08 bashrc_hlink
lrwxrwxrwx 1 root root 6 Jul 18 22:31 bashrc_slink -> bashrc
# 那个 bashrc_slink 是由 -s 的参数造成的,建立的是一个『快捷方式』,
# 所以您会看到在档案的最右边,会显示这个档案是『连结』到哪里去的!
# 至于那个 bashrc_hlink 有趣了!建立了这个档案之后, bashrc 与 bashrc_hlink
# 所有的参数都一样,只是,第二栏的 link 数改变成为 2 了~而不是原本的 1 喔!
# 这两种连结的方式的异同,我们会在下一章里面进行介绍的!

范例五:若 ~/.bashrc 比 /tmp/bashrc 新才复制过来
[root@linux tmp]# cp -u ~/.bashrc /tmp/bashrc
# 这个 -u 的特性,是在目标档案与来源档案有差异时,才会复制的。[www.61k.com)
# 所以,比较常被用于『备份』的工作当中喔! ^_^

范例六:将范例四造成的 bashrc_slink 复制成为 bashrc_slink_2
[root@linux tmp]# cp bashrc_slink bashrc_slink_2
[root@linux tmp]# ls -l bashrc_slink*
lrwxrwxrwx 1 root root 6 Jul 18 22:31 bashrc_slink -> bashrc
-rw-r–r– 1 root root 395 Jul 18 22:48 bashrc_slink_2
# 这个例子也是很有趣喔!原本复制的是连结档,但是却将连结档的实际档案复制过来了
# 也就是说,如果没有加上任何参数时,复制的是源文件,而非连结文件的属性!
# 若要复制连结文件的属性,就得要使用 -d 或者 -a 的参数了!

范例七:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下
[root@linux tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以将多个数据一次复制到同一个目录去!
这个 cp 的功能很多,而由于我们常常在进行一些数据的复制,所以也会常常用到这个指令的。 一般来说,我们如果去复制别人的数据 (当然,该档案您必须要有 read 的权限才行啊! ^_^) 时, 总是希望复制到的数据最后是我们自己的,所以,在预设的条件中, cp 的来源档与目的档的权限是不同的,目的档的拥有者通常会是指令操作者本身。举例来说, 上面的范例二中,由于我是 root 的身份,因此复制过来的档案拥有者与群组就改变成为 root 所有了! 这样说,可以明白吗?! ^_^

由于具有这个特性,因此,当我们在进行备份的时候,某些需要特别注意的特殊权限档案, 例如密码文件 (/etc/shadow) 以及一些设定档,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制档案权限的参数才行!另外,如果您想要复制档案给其它的使用者,也必须要注意到档案的权限(包含读、写、执行以及档案拥有者等等),否则,其它人还是无法针对您给予的档案进行修订的动作喔!注意注意!

至于上面的范例当中,第四个范例是最有趣的,使用 -l 及 -s 都会建立所谓的连结档 (link file),但是这两种连结档确有不一样的展现情况。这是怎么一回事啊? 那个 -l 就是所谓的 hard link ,至于 -s 则是 symbolic link ,鸟哥这里先不介绍, 因为这个涉及 i-node 的相关知识,我们还没有介绍到,下一章再来讨论这个 link 的问题喔! 总之,由于 cp 有种种的档案属性与权限的特性,所以,在复制时,您必须要清楚的了解到:
? 是否需要完整的保留来源档案的信息?
? 来源档案是否为连结档 (symbolic link file)?
? 来源档是否为特殊的档案,例如 FIFO, socket 等?
? 来源文件是否为目录?

需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。

    本文标题:linux下cp命令的用法-Linux下Find命令的使用
    本文地址: http://www.61k.com/1092165.html

    61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1