经过了两周的学习,对Linux有了更深的认识,学习到了很多的新知识,在此进行总结。
一、Linux上的文件管理类命令都有哪些,其常用的使用方法及相关示例演示。
答:Linux常用的文件管理类命令主要有以下几个:
cp,mv,rm,mkdir,rmdir,install,touch;
cp命令:
作用是拷贝文件或文件夹,其用法为:
cp [OPTION]… [-T] SOURCE DEST
单源复制,将文件复制到目标路径。
cp [OPTION]… SOURCE… DIRECTORY
多源复制,将多个目标复制到指定的文件夹。
cp [OPTION]… -t DIRECTORY SOURCE…
多源复制的另一种写法,与上一种写法效果一致。
注意:如果目标为文件夹的,该文件夹必须事先就存在。
主要选项有:
-i:交互式操作,在目标文件存在时,提示用户确认是否覆盖;
注意:管理员用户默认情况下,cp命令实际上是一个别名,对应的是cp -i,所以如果用管理员用户想要不提示覆盖,需要在cp命令之前加\以使用实际的cp命令而不是别名,mv,rm命令也是如此。
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
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@localhost ~]#
[root@localhost ~]# cp /etc/issue /tmp/
cp: overwrite ‘/tmp/issue’? y
[root@localhost ~]# \cp /etc/issue /tmp/
[root@localhost ~]#
可以看到,root用户的别名中包括cp所以直接执行cp命令会提示确认,而加了\就相当于直接执行了cp命令,所以不需要交互。
-v:执行过程可视化,即无论命令执行结果为何,均反馈在命令行中;
[root@localhost ~]# \cp -v /etc/issue /tmp/
‘/etc/issue’ -> ‘/tmp/issue’
[root@localhost ~]#
-r:递归复制文件夹,cp命令默认是不复制文件夹的,如需要复制文件夹,可以使用这个参数,会根据文件夹的树状结构递归将所有文件夹内的文件或目录复制;
[root@localhost ~]# \cp /var/log /tmp/
cp: omitting directory ‘/var/log’
[root@localhost ~]# \cp -rv /var/log /tmp/
‘/var/log/tallylog’ -> ‘/tmp/log/tallylog’
‘/var/log/lastlog’ -> ‘/tmp/log/lastlog’
‘/var/log/btmp’ -> ‘/tmp/log/btmp’
...
可以看到,当没有加-r命令的时候,提示略过了文件夹 /var/log,而使用-r参数后,复制成功。
-f:当目标文件存在且无法打开时,移除该文件再执行复制,这个命令主要是针对无法打开目标文件的情况下使用,比如对文件夹有写权限但是对文件夹内部的文件没有权限;
mv命令:
作用是移动文件或文件夹,其用法为:
mv [OPTION]… [-T] SOURCE DEST
单源移动,将文件移动到目标路径。
mv [OPTION]… SOURCE… DIRECTORY
多源移动,将多个目标移动到指定的文件夹。
mv [OPTION]… -t DIRECTORY SOURCE…
多源移动的另一种写法,与上一种写法效果一致。
主要选项有:
实际上mv命令与cp非常相似,作用不同自然不说了,命令的选项上有两个区别,一个是mv命令没有递归选项,默认支持递归操作,另一个是mv命令对目标文件存在时的三种选项,默认生效的为最后一个,也就是说,即使使用别名,运行的实际上是mv -i的命令,在选项中如果加上-f的话,覆盖文件不提示用户确认的效果也会起作用。
-i:交互式操作,在目标文件存在时,提示用户确认是否覆盖;
[root@localhost ~]# mv /tmp/issue /tmp/mytest/
mv: overwrite ‘/tmp/mytest/issue’? y
[root@localhost ~]#
-f:覆盖文件且不提示用户确认;
[root@localhost ~]# mv -fv /tmp/issue /tmp/mytest/
‘/tmp/issue’ -> ‘/tmp/mytest/issue’
[root@localhost ~]#
-n:如果目标文件存在,放弃移动;
[root@localhost ~]# mv -nv /tmp/issue /tmp/mytest/
[root@localhost ~]#
可以看到,由于目标文件存在,所以加了-n之后该命令没有产生任何结果。
-v:执行过程可视化,即无论命令执行结果为何,均反馈在命令行中;
rm命令:
作用是移除文件或文件夹,其用法为:
rm [OPTION]… FILE…
这个命令要慎用,使用前要再三确认,最好是创建一个文件夹作为“回收站”,将用不到的文件mv到该文件夹,不然一不小心使用了“rm -rf /*这样的命令就可以准备离职了…”
主要选项有:
-i:交互式操作,在移除时提示用户确认;
[root@localhost ~]# rm /tmp/issue
rm: remove regular file ‘/tmp/issue’? y
[root@localhost ~]#
-f:移除文件时不需用户确认(该命令比较危险,慎用);
[root@localhost ~]# rm -fv /tmp/issue
removed ‘/tmp/issue’
[root@localhost ~]#
-r:递归移除,用于移除文件夹(该命令非常危险,慎用,与-f一起使用时可能产生毁灭性的结果…);
[root@localhost ~]# rm -rfv /tmp/mytest/log
removed ‘/tmp/mytest/log/tallylog’
removed ‘/tmp/mytest/log/lastlog’
removed ‘/tmp/mytest/log/btmp’
...
-v:执行过程可视化,即无论命令执行结果为何,均反馈在命令行中;
mkdir命令:
作用是创建文件夹,其用法为:
mkdir [OPTION]… DIRECTORY…
这个命令可以搭配Linux的命令行展开特性,一次创建出一个复杂的目录树。
主要选项有:
-p:当创建的文件夹的父目录不存在时,自动创建;
-v:执行过程可视化,即无论命令执行结果为何,均反馈在命令行中;
[root@localhost ~]# ll /tmp/mytest/
total 4
-rw-r--r-- 1 root root 23 Dec 11 22:02 issue
[root@localhost ~]# mkdir -pv /tmp/mytest/dir/test/{1,2}
mkdir: created directory ‘/tmp/mytest/dir’
mkdir: created directory ‘/tmp/mytest/dir/test’
mkdir: created directory ‘/tmp/mytest/dir/test/1’
mkdir: created directory ‘/tmp/mytest/dir/test/2’
[root@localhost ~]#
可以看到,mkdir命令根据需要,创建了父目录。
rmdir命令:
作用是删除空文件夹,这个命令一般是在使用mkdir错误创建了错误的文件夹时使用,因为它只能删除空文件夹,所以作用不大。其用法为:
rmdir [OPTION]… DIRECTORY…
主要选项有:
-p:当删除目录后,父目录为空时,将父目录一并删除;
-v:执行过程可视化,即无论命令执行结果为何,均反馈在命令行中;
[root@localhost ~]# rmdir -pv /tmp/mytest/dir/test/{1,2}
rmdir: removing directory, ‘/tmp/mytest/dir/test/1’
rmdir: removing directory, ‘/tmp/mytest/dir/test’
rmdir: failed to remove directory ‘/tmp/mytest/dir/test’: Directory not empty
rmdir: removing directory, ‘/tmp/mytest/dir/test/2’
rmdir: removing directory, ‘/tmp/mytest/dir/test’
rmdir: removing directory, ‘/tmp/mytest/dir’
rmdir: removing directory, ‘/tmp/mytest’
rmdir: failed to remove directory ‘/tmp/mytest’: Directory not empty
[root@localhost ~]#
可以看到,rmdir命令相应的删除了空目录/tmp/mytest和/tmp/mytest/dir。
install命令:
复制文件并调整其属性,其用法为:
install [OPTION]… [-T] SOURCE DEST
单源复制,将文件复制到目标路径。
install [OPTION]… SOURCE… DIRECTORY
多源复制,将多个目标复制到指定的文件夹。
install [OPTION]… -t DIRECTORY SOURCE…
多源复制的另一种写法,与上一种写法效果一致。
install [OPTION]… -d DIRECTORY…
创建目录,默认效果与mkdir -p 效果相同,不同的是可以在选项中控制创建出的目录的属性。
主要选项有:
-o, –owner=OWNER:调整文件的属主;
-g, –group=GROUP:调整文件的属组;
-m, –mode=MODE:调整文件的权限(默认情况下为755);
[root@localhost tmp]# ll yum.log
-rw-------. 1 root root 0 Dec 3 21:55 yum.log
[root@localhost tmp]# install -o gentoo -g netadmin -m 777 yum.log yum1.log
[root@localhost tmp]# ll yum*.log
-rwxrwxrwx 1 gentoo netadmin 0 Dec 12 00:37 yum1.log
-rw-------. 1 root root 0 Dec 3 21:55 yum.log
[root@localhost tmp]# install yum.log yum2.log
[root@localhost tmp]# ll yum*.log
-rwxrwxrwx 1 gentoo netadmin 0 Dec 12 00:37 yum1.log
-rwxr-xr-x 1 root root 0 Dec 12 00:37 yum2.log
-rw-------. 1 root root 0 Dec 3 21:55 yum.log
[root@localhost tmp]#
可以看到yum.log文件在被复制之前是600的权限,在第一次复制时,将属主更改为gentoo,属组更改为netadmin,权限更改为777,而第二次复制采用默认选项,复制出来的文件默认为755。
二、bash的工作特性之命令行执行状态返回值和命令行展开所涉及的内容及其示例演示。
答:bash在执行命令后,无论命令是否执行成功,都会有一个返回值存放于$?这个变量中,我们可以根据返回值判断命令执行的情况,比如:
[root@localhost mytest]# ll issue
-rw-r--r-- 1 root root 23 Dec 11 22:02 issue
[root@localhost mytest]# echo $?
0
[root@localhost mytest]# lls issue
-bash: lls: command not found
[root@localhost mytest]# echo $?
127
[root@localhost mytest]# ll issues
ls: cannot access issues: No such file or directory
[root@localhost mytest]# echo $?
2
[root@localhost mytest]#
当ll命令执行成功时,这次命令执行的返回值是0,所有成功执行的命令,返回值都是0,而两次失败的命令执行,一次返回的是127,一次返回的是2,这些都有对应的含义,错误命令的返回值是1-255之间的某个数字。
bash命令行展开的特性可以方便我们对多个文件进行处理,比较常见的有两种,一种为~可以将之视为用户的家目录,如直接使用~,表示当前用户的家目录,~gentoo表示gentoo用户的家目录,另一种为路径展开,如/tmp/{1,2}相当于/tmp/1 /tmp/2,这可以方便我们创建较为复杂的目录结构,比如:
[root@localhost ~]# mkdir -pv /tmp/test{bin,sbin,etc/{abc,def}}
mkdir: created directory ‘/tmp/testbin’
mkdir: created directory ‘/tmp/testsbin’
mkdir: created directory ‘/tmp/testetc’
mkdir: created directory ‘/tmp/testetc/abc’
mkdir: created directory ‘/tmp/testetc/def’
[root@localhost ~]#
利用命令行展开的方式,用较为简练的语句一次性创建了5个目录。
三、请使用命令行展开功能来完成以下练习:
(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
[root@localhost ~]# mkdir -v /tmp/{a,b}_{c,d}
mkdir: created directory ‘/tmp/a_c’
mkdir: created directory ‘/tmp/a_d’
mkdir: created directory ‘/tmp/b_c’
mkdir: created directory ‘/tmp/b_d’
[root@localhost ~]#
(2)、创建/tmp/mylinux目录下的:
/tmp/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@localhost ~]# ll /tmp/mylinux
ls: cannot access /tmp/mylinux: No such file or directory
[root@localhost ~]# mkdir -p /tmp/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@localhost ~]# tree /tmp/mylinux
/tmp/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
24 directories, 0 files
[root@localhost ~]#
这两道题目都是使用bash中命令行展开的特性来完成。
四、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
答:查看文件元数据的命令是stat,用法为:
stat [OPTION]… FILE…
[root@localhost ~]# stat inittab
File: ‘inittab’
Size: 511 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 201908860 Links: 1
Access: (0640/-rw-r-----) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-10 23:36:48.487569723 -0500
Modify: 2016-12-10 23:36:15.423567171 -0500
Change: 2016-12-10 23:36:15.423567171 -0500
Birth: -
其中,File为文件名,Size为文件大小(以字节为单位),Blocks为文件占用了多少区块,IO Block为每个区块的大小(以字节为单位),regular为文件的类型,Device是文件所在的硬件,第一个Access是文件的访问权限,Uid是文件的属主,Gid是文件的属组,第二个Access是文件最后的访问时间,Modify是文件最后修改的时间,Charge是文件的元数据最后变更的时间。
修改文件的时间戳信息可以用touch命令来实现,具体为:
touch命令:
更改文件时间戳,也可以用于创建新文件,其用法为:
touch [OPTION]… FILE…
主要选项有:
-a:只修改最后访问时间;
-d,–date=STRING:将文件的时间改为根据字符串调整后的时间,字符串为时间或日期如:“2 days ago”;
[root@localhost tmp]# stat yum.log
File: ‘yum.log’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 134 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-12 00:37:18.047239218 -0500
Modify: 2016-12-03 21:55:03.061928469 -0500
Change: 2016-12-03 21:55:03.061928469 -0500
Birth: -
[root@localhost tmp]# touch -a -d "2 days ago" yum.log
[root@localhost tmp]# stat yum.log
File: ‘yum.log’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 134 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-10 01:24:31.620514896 -0500
Modify: 2016-12-03 21:55:03.061928469 -0500
Change: 2016-12-12 01:24:31.619457936 -0500
Birth: -
[root@localhost tmp]#
可以看到,在修改之前,文件yum.log的最后访问时间是2016-12-12…,使用-a和-d选项后,最后访问时间变为2016-12-10。
-m:只修最后改修改时间;
-t STAMP:将文件的时间改为格式为:[[CC]YY]MMDDhhmm[.ss]的时间;
[root@localhost tmp]# stat yum.log
File: ‘yum.log’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 134 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-10 01:24:31.620514896 -0500
Modify: 2016-12-03 21:55:03.061928469 -0500
Change: 2016-12-12 01:24:31.619457936 -0500
Birth: -
[root@localhost tmp]# touch -m -t 201610152245.35 yum.log
[root@localhost tmp]# stat yum.log
File: ‘yum.log’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 134 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-10 01:24:31.620514896 -0500
Modify: 2016-10-15 22:45:35.000000000 -0400
Change: 2016-12-12 01:27:33.667471988 -0500
Birth: -
[root@localhost tmp]#
可以看到,在修改之前,文件yum.log的最后修改时间是2016-12-03…,使用-m和-t选项后,最后修改时间变为我们输入的具体时间,2016-10-15 22:45:35。
-c,–no-create:如果文件不存在,不创建文件;
[root@localhost mytest]# ll
total 4
-rw-r--r-- 1 root root 23 Dec 11 22:02 issue
[root@localhost mytest]# touch -c test
[root@localhost mytest]# ll
total 4
-rw-r--r-- 1 root root 23 Dec 11 22:02 issue
[root@localhost mytest]# touch test
[root@localhost mytest]# ll
total 4
-rw-r--r-- 1 root root 23 Dec 11 22:02 issue
-rw-r--r-- 1 root root 0 Dec 12 01:38 test
[root@localhost mytest]#
可以看到,在使用touch命令之前,文件夹中并没有test文件,在使用-c选项的时候,touch命令并没有创建新的文件,而再次运行命令时,不加-c选项的时候,就创建了一个名为test的文件。
-r,–reference=FILE:将文件的时间修改为某个文件的时间;
[root@localhost mytest]# ll
total 4
-rw-r--r-- 1 root root 23 Dec 11 22:02 issue
-rw-r--r-- 1 root root 0 Dec 12 01:42 test
[root@localhost mytest]# touch -r issue test
[root@localhost mytest]# ll
total 4
-rw-r--r-- 1 root root 23 Dec 11 22:02 issue
-rw-r--r-- 1 root root 0 Dec 11 22:02 test
[root@localhost mytest]#
可以看到,使用-r选项时,test文件的时间戳依照issue文件做了修改。
以上的参数可以混合使用,无论以哪种方式修改时间(-r,-t,-d),都可以单独修改最后访问时间或最后修改时间(-a,-m)。
五、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
答:别名是用一个自定的简单的字符串来代表某一个较复杂的字符串,以提高输入命令的效率或减少一些犯错的机会,定义别名的命令为alias,取消别名的命令式unalias:
alias [-p] [name[=value] …]
-p:该参数与直接使用alias命令不加选项及参数的效果一致,是显示所有已经设定的别名;
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
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@localhost ~]# alias hell="rm -rf"
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias hell='rm -rf'
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@localhost ~]#
直接使用alias显示的结果以及添加了一个命令叫做“hell”,实际的效果是rm -rf:D
unalias [-a] [name …]
-a:该参数是取消所有已经设定的别名;
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias hell='rm -rf'
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@localhost ~]# unalias hell
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
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@localhost ~]#
使用unalias命令取消了hell这个刚刚设定的别名。
bash中,命令的引用是是用$(COMMAND)这样的格式来实现的,具体来说,假如我们要创建一个文件,而这个文件,我们希望它以被创建的时间为文件名,具体格式为YY-MM-DD-hh-hh-ss,这个时候我们如果靠人工的使用date命令再根据显示的时间touch文件,一个是很麻烦,第二是不能准确的将文件名定为被创建的那一瞬间,那么最好的解决方法就是使用命令的引用,具体如下:
[root@localhost ~]# date +%Y-%m-%d-%H-%M-%S
2016-12-12-03-04-10
[root@localhost ~]# touch /tmp/$(date +%Y-%m-%d-%H-%M-%S)
[root@localhost ~]# ll /tmp/2016*
-rw-r--r-- 1 root root 0 Dec 12 03:04 /tmp/2016-12-12-03-04-13
可以看到/tmp文件夹下,生成了一个新的文件,是以生成的时间作为文件名,这就是命令引用的一个简单的运用。
六、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其他字符)的文件或目录。
[root@localhost tmp]# ll /var/*[0-9]*[[:lower:]]
ls: cannot access /var/*[0-9]*[[:lower:]]: No such file or directory
[root@localhost tmp]# ll /var
total 8
drwxr-xr-x. 2 root root 6 Aug 12 2015 adm
drwxr-xr-x. 5 root root 41 Dec 3 21:56 cache
drwxr-xr-x. 2 root root 6 Nov 20 2015 crash
drwxr-xr-x. 3 root root 32 Dec 3 21:57 db
drwxr-xr-x. 3 root root 17 Dec 3 21:57 empty
drwxr-xr-x. 2 root root 6 Aug 12 2015 games
drwxr-xr-x. 2 root root 6 Aug 12 2015 gopher
drwxr-xr-x. 3 root root 17 Dec 3 21:55 kerberos
drwxr-xr-x. 23 root root 4096 Dec 11 20:09 lib
drwxr-xr-x. 2 root root 6 Aug 12 2015 local
lrwxrwxrwx. 1 root root 11 Dec 3 21:55 lock -> ../run/lock
drwxr-xr-x. 6 root root 4096 Dec 11 20:10 log
lrwxrwxrwx. 1 root root 10 Dec 3 21:55 mail -> spool/mail
drwxr-xr-x. 2 root root 6 Aug 12 2015 nis
drwxr-xr-x. 2 root root 6 Aug 12 2015 opt
drwxr-xr-x. 2 root root 6 Aug 12 2015 preserve
lrwxrwxrwx. 1 root root 6 Dec 3 21:55 run -> ../run
drwxr-xr-x. 8 root root 81 Dec 3 21:57 spool
drwxrwxrwt. 2 root root 6 Dec 10 22:08 tmp
drwxr-xr-x. 2 root root 6 Aug 12 2015 yp
[root@localhost tmp]# ll /tmp/*[0-9]*[[:lower:]]
-rwxrwxrwx 1 gentoo netadmin 0 Dec 12 00:37 /tmp/yum1.log
-rwxr-xr-x 1 root root 0 Dec 12 00:37 /tmp/yum2.log
[root@localhost tmp]#
由于/var目录下没有能够满足搜索条件的文件,所以将搜索的目录改为了/tmp,可以看到有两个文件符合我们的需求。
七、显示/etc目录下以任意一个数字开头,且以非数字结尾的文件或目录。
[root@localhost tmp]# touch /tmp/{1,2,3,45}abcd{e,f,g}
[root@localhost tmp]#
[root@localhost tmp]# ll /tmp/[0-9]*[^0-9]
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/1abcde
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/1abcdf
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/1abcdg
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/2abcde
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/2abcdf
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/2abcdg
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/3abcde
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/3abcdf
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/3abcdg
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/45abcde
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/45abcdf
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/45abcdg
[root@localhost tmp]#
由于/etc目录下没有满足搜索条件的文件,在/tmp文件夹创建了一些文件用来模拟查询。
八、显示/etc目录下以非字母开头,后面跟了一个字母以及其他任意长度任意字符的文件或目录。
[root@localhost tmp]# ll /tmp/[^a-z][a-z]*
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/1abcde
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/1abcdf
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/1abcdg
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/2abcde
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/2abcdf
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/2abcdg
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/3abcde
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/3abcdf
-rw-r--r-- 1 root root 0 Dec 12 03:15 /tmp/3abcdg
[root@localhost tmp]#
九、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost tmp]# touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
[root@localhost tmp]# ll /tmp/tfile-*
-rw-r--r-- 1 root root 0 Dec 12 03:48 /tmp/tfile-2016-12-12-03-48-09
[root@localhost tmp]#
十、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[root@localhost tmp]# mkdir /tmp/mytest1
[root@localhost tmp]# cp -r /etc/p*[^0-9] /tmp/mytest1/
[root@localhost tmp]# ll /tmp/mytest1/
total 36
drwxr-xr-x 2 root root 4096 Dec 12 04:00 pam.d
-rw-r--r-- 1 root root 1268 Dec 12 04:00 passwd
-rw-r--r-- 1 root root 1306 Dec 12 04:00 passwd-
drwxr-xr-x 9 root root 91 Dec 12 04:00 pki
drwxr-xr-x 2 root root 27 Dec 12 04:00 plymouth
drwxr-xr-x 5 root root 49 Dec 12 04:00 pm
drwxr-xr-x 2 root root 6 Dec 12 04:00 popt.d
drwxr-xr-x 2 root root 145 Dec 12 04:00 postfix
drwxr-xr-x 3 root root 4096 Dec 12 04:00 ppp
drwxr-xr-x 2 root root 75 Dec 12 04:00 prelink.conf.d
-rw-r--r-- 1 root root 233 Dec 12 04:00 printcap
-rw-r--r-- 1 root root 1750 Dec 12 04:00 profile
drwxr-xr-x 2 root root 4096 Dec 12 04:00 profile.d
-rw-r--r-- 1 root root 6545 Dec 12 04:00 protocols
drwxr-xr-x 2 root root 34 Dec 12 04:00 python
[root@localhost tmp]#
十一、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
[root@localhost tmp]# mkdir /tmp/mytest2
[root@localhost tmp]# cp -r /etc/*.d /tmp/mytest2
[root@localhost tmp]# ll /tmp/mytest2
total 16
drwxr-xr-x 2 root root 48 Dec 12 04:01 bash_completion.d
drwxr-xr-x 2 root root 6 Dec 12 04:01 binfmt.d
drwxr-xr-x 2 root root 6 Dec 12 04:01 chkconfig.d
drwxr-xr-x 2 root root 20 Dec 12 04:01 cron.d
drwxr-xr-x 2 root root 22 Dec 12 04:01 depmod.d
drwxr-xr-x 2 root root 6 Dec 12 04:01 dnsmasq.d
drwxr-xr-x 2 root root 6 Dec 12 04:01 dracut.conf.d
drwx------ 2 root root 4096 Dec 12 04:01 grub.d
lrwxrwxrwx 1 root root 11 Dec 12 04:01 init.d -> rc.d/init.d
drwxr-xr-x 2 root root 72 Dec 12 04:01 ld.so.conf.d
drwxr-xr-x 2 root root 60 Dec 12 04:01 logrotate.d
drwxr-xr-x 2 root root 22 Dec 12 04:01 modprobe.d
drwxr-xr-x 2 root root 6 Dec 12 04:01 modules-load.d
drwxr-xr-x 2 root root 30 Dec 12 04:01 my.cnf.d
drwxr-xr-x 2 root root 4096 Dec 12 04:01 pam.d
drwxr-xr-x 2 root root 6 Dec 12 04:01 popt.d
drwxr-xr-x 2 root root 75 Dec 12 04:01 prelink.conf.d
drwxr-xr-x 2 root root 4096 Dec 12 04:01 profile.d
lrwxrwxrwx 1 root root 10 Dec 12 04:01 rc0.d -> rc.d/rc0.d
lrwxrwxrwx 1 root root 10 Dec 12 04:01 rc1.d -> rc.d/rc1.d
lrwxrwxrwx 1 root root 10 Dec 12 04:01 rc2.d -> rc.d/rc2.d
lrwxrwxrwx 1 root root 10 Dec 12 04:01 rc3.d -> rc.d/rc3.d
lrwxrwxrwx 1 root root 10 Dec 12 04:01 rc4.d -> rc.d/rc4.d
lrwxrwxrwx 1 root root 10 Dec 12 04:01 rc5.d -> rc.d/rc5.d
lrwxrwxrwx 1 root root 10 Dec 12 04:01 rc6.d -> rc.d/rc6.d
drwxr-xr-x 10 root root 118 Dec 12 04:01 rc.d
drwxr-xr-x 2 root root 24 Dec 12 04:01 rsyslog.d
drwxr-xr-x 2 root root 6 Dec 12 04:01 rwtab.d
drwxr-xr-x 2 root root 6 Dec 12 04:01 statetab.d
drwxr-x--- 2 root root 6 Dec 12 04:01 sudoers.d
drwxr-xr-x 2 root root 27 Dec 12 04:01 sysctl.d
drwxr-xr-x 2 root root 24 Dec 12 04:01 tmpfiles.d
drwxr-xr-x 2 root root 6 Dec 12 04:01 xinetd.d
drwxr-xr-x 2 root root 4096 Dec 12 04:01 yum.repos.d
[root@localhost tmp]#