1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
cp即copy的简写,我们可以用它来复制一些文件即将,源文件的数据流复制到目的文件中。和下面要讲的rm,mv,一样都是一些非常基础的命令。关于这个命令,我们有个小窍门,那就是根据 ls file这个命令是否执行成功来判断file文件是否存在。
关于cp,我们有一些要点要注意:
cp SRC DEST #此时SRC只有一个,且为文件
如果DEST是文件,且存在,则将源文件的内容覆盖至DEST。如果此时为root用户,那么默认alias cp=cp -i,
所以会出现询问是否覆盖文件的提醒,而此时如果是其他用户,则默认覆盖,不会提醒,所以得谨慎使用。如果不存在,那就简单了,系统直接创建一个文件,然后
将源文件数据流覆盖至DEST中。就这么简单。
如果DEST是目录,且存在那么就在指定目录下创建与源文件同名的文件,并将数据流填充至新文件中。若目录不存在,则直接报错。
如果SRC是目录,那么DEST必须为目录,且必须必须使用 -r 选项。即递归选项,因为目录里面也会有目录,必须要使用递归选项才能正确的将SRC及其子目录复制到DEST。注意SRC目录是什么结构,那么在DEST中就是什么结构。
cp SRC… DEST #SRC有多个文件。且必须文件。
DEST必须是目录,且要存在,若不存在,则直接报错。
关于cp已经说了很多废话,但是还是要继续介绍一些关于cp短选项,希望各位客官不要厌烦。
-r: 递归,将该目录下的所有子目录一起复制,上面说过这事SRC为目录是必须使用的选项
-i: 交互式命令,也已经说过了,就是当要覆盖一个已存在文件时,出现提醒,并让你确认。
-a: 归档,相当于 -dR –preserve=all
-d: –no-deference –preserve=links
–preserve[=ATTR_LIST] 保存文件元数据属性
mode: 权限
ownership: 属主属组
timestamp: 时间戳
links; 链接
。。。
all: 所有元数据属性
-p: –preserve=mode, ownership, timestamp
-f: force 强制复制,若已存在一个同名文件,但该文件的权限不允许复制,则删除该文件,然后重新创建一个同名的文件。
cp讲的差不多了,那么就来讲讲rm吗,它是文件移动命令。它和cp很相似。以下是mv的三种形式。
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
mv也有一些有趣的短选项:
-i: 交互式: 在覆盖文件时,发出提醒,并等待用户响应。
-f: 强制性: 在覆盖前,不发出提示,直接覆盖。
下面就是rm,rm的作用是删除文件或目录。很简单,只要文件存在就可以了,介绍一些简单的选项吧。
-i: 交互式,每删除一个文件都询问一次,并等待回答。
-f: 强制执行,即不询问就执行
-r: 递归删除,即删除文件,目录即目录中所有的内容。
2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
关于命令行展开的用法,主要是以下三点:
1. ~: 展开为当前用户家目录;
2, ~USERNAME:展开为指定用户的家目录;
3, /tmp/a/{x,y}: 展开为/tmp/a/x 和/tmp/a/y
[root@promote ~]# cd ~ [root@promote ~]# cd ~test [root@promote test]# mkdir -pv /tmp/a/{x,y} mkdir: created directory ‘/tmp/a’ mkdir: created directory ‘/tmp/a/x’ mkdir: created directory ‘/tmp/a/y’
命令执行状态返回值只有两种情况:
成功:0
失败: 1-255
$? 为上一条命令的执行状态返回值,我们要与执行返回值相区分。
[root@promote test]# mkdir -pv /tmp/b mkdir: created directory ‘/tmp/b’ [root@promote test]# echo $? 0 [root@promote test]# mkdir -v /tmp/b mkdir: cannot create directory ‘/tmp/b’: File exists [root@promote test]# echo $? 1
3、请使用命令行展开功能来完成以下练习:
(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
touch /tmp/{a,b}_{c,d}
(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
mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts}, lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,bin},var/{lock,log,run}}
4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
文件的元数据信息有:属主,属组,时间戳
ls -l
可查看文件的元数据信息
属主指创建该文件时的用户
属组至创建该文件的用户组
时间戳分为三种,即访问时间,修改时间,改变时间。
访问时间 : access time (atime)
是指最后一次访问文件的时间,修改时间: modify time(mtime). 是指最后一次修改文件内 容的时间,改变时间: change
time(ctime)是指最后一次修改文件属性的时间。我们要重点注意一点,那就是只要访问时间或修改时间改变了,改变时间也一定改变。
我们可以用stat目录来查看时间戳,这个命令本意是查看的是文件的属性,而时间戳就是文件的属性。关于它我们还有另一个很神奇的命令,那就是touch,它可以用来改变文件的时间戳,将其变为当前时间。
touch -a FILENAME
touch -m FILENAME
当然我们也可以使用-t选项指定时间。注意-t选项一定要与时间相连。
[root@ ~] # touch -a -t 201606130101.01 /tmp/fstab
[root@ ~]# stat /tmp/fstab
File: `/tmp/fstab'
Size: 595 Blocks: 8 IO Block: 4096 regular file
Device: ca01h/51713d Inode: 396687 Links: 1
Access: (0600/-rw——-) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-06-13 01:01:01.000000000 +0800
Modify: 2016-06-13 01:01:01.000000000 +0800
Change: 2016-06-30 10:23:01.113221976 +0800
再强调一点,只要atime或mtime 改变了,则ctime必改变。因为时间戳也是文件的属性。
神奇的地方来了,虽然touch是用来改变时间戳的,但它却可以用来创建文件。好玩吧! touch FILENAME
如果不想创建文件,加个-c选项就可以了。
5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
定义别名:
alias cd="cd /root"
引用另一个变量:
[root@promote ~]# echo `date` > time.out [root@promote ~]# cat time.out Thu Jul 7 00:32:54 CST 2016
6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
ls /var/l*[[:digit:]]*[[:lower:]]
7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
ls /etc/[[:digit:]]*[^[:digit:]]
8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
ls /etc/[^[:alpha:]][[:alpha:]]*
9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@promote tmp]# touch tfile-`date +%F-%H-%M-%S` [root@promote tmp]# ls tfile* tfile-2016-07-07 tfile-2016-07-07-10-58-08
10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[root@promote tmp]# \cp -r /etc/p*[^[:digit:]] ./mytest1/
11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
[root@promote tmp]# \cp -r /etc/*.d ./mytest2/ [root@promote tmp]# ls ./mytest2/ auto.master.d dracut.conf.d logrotate.d profile.d rc.d sysctl.d bash_completion.d exports.d modprobe.d rc0.d request-key.d tmpfiles.d binfmt.d gdbinit.d modules-load.d rc1.d rsyslog.d usb_modeswitch.d cgconfig.d grub.d my.cnf.d rc2.d rwtab.d xinetd.d chkconfig.d init.d oddjobd.conf.d rc3.d sane.d yum.repos.d cron.d ipsec.d pam.d rc4.d setuptool.d depmod.d ld.so.conf.d popt.d rc5.d statetab.d dnsmasq.d libibverbs.d prelink.conf.d rc6.d sudoers.d
12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中
[root@promote tmp]# \cp -r /[lmn]* ./mytest3/ [root@promote tmp]# ls ./mytest3/ lib lib64 media mnt
原创文章,作者:21期-扬州-蓝,如若转载,请注明出处:http://www.178linux.com/21926
评论列表(1条)
写的很好,排版也很棒,加油