首页 > 代码库 > 学习linux-基础六(常用命令:cp,mv,rm)

学习linux-基础六(常用命令:cp,mv,rm)

一、cp用于文件拷贝,分为单源文复制和多源复制

单源复制语法:cp [options]…[-t] source dest 。

注意事项:
1如果dest不存在,则事先创建此文件,并复制源文件的数据流至dest中。

2如果dest是非目录文件,则会覆盖目标文件。

3如果dest是目录文件,则先在dest目录下创建一个与源文件同名的文件并将源文件数据流复制过来。

cp /tmp/ou/111.txt文件到/etc/hh目录下

[root@zcl testdir]# mkdir /tmp/ou
[root@zcl testdir]# cd /tmp/ou
[root@zcl ou]# ls
[root@zcl ou]# touch xixi hehe haha 111.txt
[root@zcl ou]# ls
111.txt  haha  hehe  xixi
[root@zcl ou]# mkdir /etc/hh
[root@zcl ou]# cp /tmp/ou/111.txt /etc/hh/
[root@zcl ou]# ls /etc/hh/
111.txt

  

例子2:如果dest是非目录文件,则会覆盖目标文件。

[root@zcl ou]# cat /tmp/ou/111.txt 
hello world!!!!!
I am study computer
[root@zcl ou]# cat /etc/hh/222.txt 
ni hao ma zcg
my love girl

[root@zcl ou]# cp -i /tmp/ou/111.txt /etc/h
hal/         hosts        hp/          
hh/          hosts.allow  htdig/       
host.conf    hosts.deny   httpd/       
[root@zcl ou]# cp -i /tmp/ou/111.txt /etc/hh/222.txt 
cp: overwrite `/etc/hh/222.txt‘? y
[root@zcl ou]# cat /etc/hh/222.txt 
hello world!!!!!
I am study computer
[root@zcl ou]# 

例子3:如果dest不存在,则事先创建此文件,并复制源文件的数据流至dest中。

[root@zcl ou]# ls /etc/hh/
111.txt  222.txt
[root@zcl ou]# cp /tmp/ou/111.txt /etc/hh/300
[root@zcl ou]# ls /etc/hh/
111.txt  222.txt  300

  

多源复制语法:
cp [OPTION]… SOURCE… DIRECTORY

cp [OPTION]… -t DIRECTORY SOURCE…

注意事项:
1如果DIRECTORY是常规文件则显示错误。

2如果DIRECTORY是目录文件则分别复制每个文件至目标目录中,并保持原名。

cp 123,123.txt到/etc/aa/bbb.txt文件下,则显示错误。

 

[root@zcl ou]# cat /etc/aaa/bbb.txt 
catcatcat
!!!!!!!!!!!!!
!!!!!!!!!1
!!!!!!!2
!!!!!3
[root@zcl ou]# ls /tmp/ou/
111.txt  123  123.txt  haha  hehe  xixi
[root@zcl ou]# cp -r /tmp/ou/{123,123.txt} /etc/aaa/bbb.txt 
cp: target `/etc/aaa/bbb.txt‘ is not a directory

  

cp 123,123.txt到/etc/hh目录下,则复制文件到目录并保持原名。

[root@zcl ou]# cp -r /tmp/ou/{123,123.txt} /etc/hh
[root@zcl ou]# ls /etc/hh
111.txt  123  123.txt  222.txt  300

  

cp命令常用命令选项:

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

-f:强制覆盖目标文件。

-r:递归复制目录中的内容和目录。

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

-a:用于实现归档。

 

二、mv用于移动源文件到目标文件或目录。

语法:

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

mv /tmp/ou/111.txt到/etc/hh下。

[root@zcl hh]# ls /etc/hh
123  123.txt  222.txt  300
[root@zcl hh]# ls /tmp/ou
111.txt  123  123.txt  haha  hehe  xixi
[root@zcl hh]# mv /tmp/ou/1
111.txt  123/     123.txt/ 
[root@zcl hh]# mv /tmp/ou/111.txt /etc/hh
[root@zcl hh]# ls /etc/hh/
111.txt  123  123.txt  222.txt  300

  

mv命令常用选项:

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

-f:强制覆盖目标文件。

 


三、rm命令用于删除文件或目录

语法:rm [OPTION]...FILE...


rm -rf(递归目录加强制删除) /tmp/ou/123

 

[root@zcl hh]# ls /tmp/ou
123  123.txt  haha  hehe  xixi
[root@zcl hh]# rm -rf /tmp/ou/123
[root@zcl hh]# ls /tmp/ou
123.txt  haha  hehe  xixi

  

常用选项:

-i:交互式删除,即删除之前提醒用户确认。

-f:强制删除目标文件。

-r:递归删除目录中的内容和目录。

 

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

命令执行状态和返回值:bash通过状态返回值来输出此结果,0为成功,1-255为失败。命令执行完成之后,其状态返回值保存于bash的特殊变量$?中。

ls命令后用echo $? 查看结果返回值为0代表命令执行成功。

 

[root@zcl ~]# ls /tmp/ou
123.txt  haha  hehe  xixi
[root@zcl ~]# echo $?
0

ls命令后用echo $?查看结果返回值为2代表命令执行失败。

 

[root@zcl ~]# ls /tmp/xxx
ls: cannot access /tmp/xxx: No such file or directory
[root@zcl ~]# echo $?
2

  

命令行展开:~:展开为用户的家目录,{}:可承载一个以逗号分隔的列表,并将其展开为多个路径


切换至家目录,~。

[root@zcl ~]# cd /tmp/ou
[root@zcl ou]# cd ~
[root@zcl ~]# pwd
/root

  

tmp目录下同时创建a,b,c,3个文件。

[root@zcl ~]# cd /tmp/
[root@zcl tmp]# touch {a,b,c}
[root@zcl tmp]# ls
a          ou                  VMwareDnD
b          pulse-lc4gAdMk6CAz  vmware-root
c          pulse-on2an8eSj49w  vmware-root-1848984901
etc        pulse-rpt7fgHJNObK
orbit-gdm  ssh-JNwnUn2843

  

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

 (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d

 

[root@zcl tmp]# mkdir {a,b}_{c,d}
[root@zcl tmp]# ls
a    bc   etc                 ssh-JNwnUn2843
ac   b_c  orbit-gdm           VMwareDnD
a_c  bd   ou                  vmware-root
ad   b_d  pulse-lc4gAdMk6CAz  vmware-root-1848984901
a_d  c    pulse-on2an8eSj49w
b    d    pulse-rpt7fgHJNObK

  

(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

[root@zcl ~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.dsysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}

  

[root@zcl ~]# tree /tmp/mylinux/
/tmp/mylinux/
└── {bin,boot
    └── grub,dev,etc
        └── {rc.d
            └── init.dsysconfig
                └── network-scripts},lib
                    └── modules,lib64,proc,sbin,sys,tmp,usr
                        └── local
                            ├── bin,var
                            │   ├── lock
                            │   ├── log
                            │   └── run
                            └── sbin,var
                                ├── lock
                                ├── log
                                └── run

15 directories, 0 files

  

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

stat命令

stat – display file or file system status
显示文件或文件系统的状态

stat FILE…

文件:两类数据
元数据:metadata:access(最后访问),modify(最后修改),change(最后改变)
数据: data

时间戳:
access time:2015-12-10 16:12:22.776423693 +0800
modify time:2015-12-10 16:12:22.776423693 +0800
change time:2015-12-10 16:12:22.776423693 +0800

 

[root@zcl ~]# echo 123 >> /tmp/functions
[root@zcl ~]# stat /tmp/functions 
  File: `/tmp/functions‘
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 917667      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-09 16:35:10.187014284 +0800     #最近访问
Modify: 2016-12-09 16:35:10.187014284 +0800      #最近更改:数据修改
Change: 2016-12-09 16:35:10.187014284 +0800     #最近改动:元数据修改、数据修改

  

改变时间戳的命令:touch

touch – change file timestamps
修改文件时间戳

touch [OPTION]… FILE…
-c: 指定的文件路径不存在时不予创建;
-a: 仅修改access time;
-m:仅修改modify time;
-t STAMP
[[CC]YY]MMDDhhmm[.ss]

 

[root@zcl ~]# touch -m -t 1212020900.00 /tmp/functions   #修改时间为2012年12月2日09:00
[root@zcl ~]# stat /tmp/functions                      
  File: `/tmp/functions‘
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 917667      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-09 16:35:10.187014284 +0800
Modify: 2012-12-02 09:00:00.000000000 +0800
Change: 2016-12-09 16:41:46.359015406 +0800

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

定义命令别名使用alias命令

alias命令

别名

获取所有可用的别名定义

~]# alias

别名

~]# alias NAME=‘COMMAND‘

仅对当前shell进程有效
撤销别名:

~]# unalias NAME

  

[root@zcl ~]# alias
alias cp=‘cp -i‘
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@zcl ~]# type alias
alias is a shell builtin
[root@zcl ~]# alias cls=clear
[root@zcl ~]# cls          #此时cls拥有了clear的功能
[root@zcl ~]# unalias cls     #取消了clear功能
[root@zcl ~]# cls 
-bash: cls: command not found

在命令中引用另一个命令的执行结果,使用管道 |

管道

连接程序,实现将前一个命令的输出直接定向给后一个程序当作输入数据流
COMMAND1 | COMMAND2 | COMMAND3 | …

globbing:文件名通配

(整体文件名匹配,而非部分)

匹配模式:元字符
*:匹配任意长度的任意字符
pa*, *pa*, *pa, *p*a*
pa, paa, passwd

?:匹配任意单个字符
pa?, ??pa, p?a, p?a?
pa, paa, passwd

[]:匹配指定范围内的任意单个字符
有几种特殊格式:
[a-z], [A-Z], [0-9], [a-z0-9]
[[:upper:]]:所有大写字母
[[:lower:]]:所有小写字母
[[:alpha:]]:所有字母
[[:digit:]]:所有数字
[[:alnum:]]:所有的字母和数字
[[:space:]]:所有空白字符
[[:punct:]]:所有标点符号

pa[0-9][0-9], 2[0-9][0-9]
[^]:匹配指定范围外的任意单个字符

[^[:upper:]] 所有非大写字母
[^0-9] 所有非数字
[^[:alnum:]] 所有非字母和数字

 

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

[root@zcl var]# ls -d /var/1*[0-9]*[[:lower:]]
/var/123abc

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

[root@zcl etc]# lls -d /etc/[0-9]*[^0-9]
-bash: lls: command not found

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

[root@zcl etc]# ls -d [^a-z][a-z]*
ls: cannot access [^a-z][a-z]*: No such file or directory

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

[root@zcl etc]# mkdir /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
[root@zcl etc]# cd /tmp/
[root@zcl tmp]# ls
a    b_d                 pulse-on2an8eSj49w
ac   c                   pulse-rpt7fgHJNObK
a_c  d                   ssh-WfBsGL2767
ad   etc                 tfile-2016-12-09-17-02-19
a_d  functions           virtual-zcl1840.QM3SYS
b    mylinux             VMwareDnD
bc   orbit-gdm           vmware-root
b_c  ou                  vmware-root-1848984901
bd   pulse-lc4gAdMk6CAz  vmware-zcl1840

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

[root@zcl tmp]# mkdir mytest1
[root@zcl tmp]# cp -r /etc/p*[^0-9] /tmp/mytest1

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

[root@zcl tmp]# cp -r /etc/*.d /tmp/mytest2

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

[root@zcl tmp]# cp -r /etc/[1mn]*.conf /tmp/mytest3

  

  

  

  

 

 

  

  

 

学习linux-基础六(常用命令:cp,mv,rm)