一、cp用于文件拷贝,分为单源文复制和多源复制
单源复制语法:cp [options]…[-t] source dest 。
注意事项:
1如果dest不存在,则事先创建此文件,并复制源文件的数据流至dest中。
2如果dest是非目录文件,则会覆盖目标文件。
3如果dest是目录文件,则先在dest目录下创建一个与源文件同名的文件并将源文件数据流复制过来。
cp /tmp/ou/111.txt文件到/etc/hh目录下
[[email protected] testdir]# mkdir /tmp/ou [[email protected] testdir]# cd /tmp/ou [[email protected] ou]# ls [[email protected] ou]# touch xixi hehe haha 111.txt [[email protected] ou]# ls 111.txt haha hehe xixi [[email protected] ou]# mkdir /etc/hh [[email protected] ou]# cp /tmp/ou/111.txt /etc/hh/ [[email protected] ou]# ls /etc/hh/ 111.txt
例子2:如果dest是非目录文件,则会覆盖目标文件。
[[email protected] ou]# cat /tmp/ou/111.txt hello world!!!!! I am study computer [[email protected] ou]# cat /etc/hh/222.txt ni hao ma zcg my love girl [[email protected] ou]# cp -i /tmp/ou/111.txt /etc/h hal/ hosts hp/ hh/ hosts.allow htdig/ host.conf hosts.deny httpd/ [[email protected] ou]# cp -i /tmp/ou/111.txt /etc/hh/222.txt cp: overwrite `/etc/hh/222.txt‘? y [[email protected] ou]# cat /etc/hh/222.txt hello world!!!!! I am study computer [[email protected] ou]#
例子3:如果dest不存在,则事先创建此文件,并复制源文件的数据流至dest中。
[[email protected] ou]# ls /etc/hh/ 111.txt 222.txt [[email protected] ou]# cp /tmp/ou/111.txt /etc/hh/300 [[email protected] 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文件下,则显示错误。
[[email protected] ou]# cat /etc/aaa/bbb.txt catcatcat !!!!!!!!!!!!! !!!!!!!!!1 !!!!!!!2 !!!!!3 [[email protected] ou]# ls /tmp/ou/ 111.txt 123 123.txt haha hehe xixi [[email protected] 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目录下,则复制文件到目录并保持原名。
[[email protected] ou]# cp -r /tmp/ou/{123,123.txt} /etc/hh [[email protected] 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下。
[[email protected] hh]# ls /etc/hh 123 123.txt 222.txt 300 [[email protected] hh]# ls /tmp/ou 111.txt 123 123.txt haha hehe xixi [[email protected] hh]# mv /tmp/ou/1 111.txt 123/ 123.txt/ [[email protected] hh]# mv /tmp/ou/111.txt /etc/hh [[email protected] hh]# ls /etc/hh/ 111.txt 123 123.txt 222.txt 300
mv命令常用选项:
-i:交互式复制,即覆盖之前提醒用户确认。
-f:强制覆盖目标文件。
三、rm命令用于删除文件或目录
语法:rm [OPTION]...FILE...
rm -rf(递归目录加强制删除) /tmp/ou/123
[[email protected] hh]# ls /tmp/ou 123 123.txt haha hehe xixi [[email protected] hh]# rm -rf /tmp/ou/123 [[email protected] hh]# ls /tmp/ou 123.txt haha hehe xixi
常用选项:
-i:交互式删除,即删除之前提醒用户确认。
-f:强制删除目标文件。
-r:递归删除目录中的内容和目录。
四、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示
命令执行状态和返回值:bash通过状态返回值来输出此结果,0为成功,1-255为失败。命令执行完成之后,其状态返回值保存于bash的特殊变量$?中。
ls命令后用echo $? 查看结果返回值为0代表命令执行成功。
[[email protected] ~]# ls /tmp/ou 123.txt haha hehe xixi [[email protected] ~]# echo $? 0
ls命令后用echo $?查看结果返回值为2代表命令执行失败。
[[email protected] ~]# ls /tmp/xxx ls: cannot access /tmp/xxx: No such file or directory [[email protected] ~]# echo $? 2
命令行展开:~:展开为用户的家目录,{}:可承载一个以逗号分隔的列表,并将其展开为多个路径
切换至家目录,~。
[[email protected] ~]# cd /tmp/ou [[email protected] ou]# cd ~ [[email protected] ~]# pwd /root
tmp目录下同时创建a,b,c,3个文件。
[[email protected] ~]# cd /tmp/ [[email protected] tmp]# touch {a,b,c} [[email protected] 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
[[email protected] tmp]# mkdir {a,b}_{c,d} [[email protected] 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
[[email protected] ~]# 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}
[[email protected] ~]# 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
[[email protected] ~]# echo 123 >> /tmp/functions [[email protected] ~]# 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]
[[email protected] ~]# touch -m -t 1212020900.00 /tmp/functions #修改时间为2012年12月2日09:00 [[email protected] ~]# 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
[[email protected] ~]# 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‘ [[email protected] ~]# type alias alias is a shell builtin [[email protected] ~]# alias cls=clear [[email protected] ~]# cls #此时cls拥有了clear的功能
[[email protected] ~]# unalias cls #取消了clear功能 [[email protected] ~]# 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开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录
[[email protected] var]# ls -d /var/1*[0-9]*[[:lower:]] /var/123abc
显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录
[[email protected] etc]# lls -d /etc/[0-9]*[^0-9] -bash: lls: command not found
显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录
[[email protected] 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
[[email protected] etc]# mkdir /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S) [[email protected] etc]# cd /tmp/ [[email protected] 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目录中
[[email protected] tmp]# mkdir mytest1 [[email protected] tmp]# cp -r /etc/p*[^0-9] /tmp/mytest1
复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中
[[email protected] tmp]# cp -r /etc/*.d /tmp/mytest2
复制/etc目录下所有以l或m或n开头,以.conf结尾的交件至/tmp/mytest3目录中
[[email protected] tmp]# cp -r /etc/[1mn]*.conf /tmp/mytest3