一.简答题
一台安装了Linux系统的计算机,其文件系统的大致结构如下图所示。其中的圆角矩形代表目录,圆形代表文件。
假设你的用户名是tom,刚刚登录到系统当中,当前工作目录是 /home/tom。马上你需要进行一系列操作,请根据具体要求,写出需要使用的命令。必要时,加以简单的解释。
每一步的操作,都是接着上一步操作进行的,请注意前导操作对于后续操作的影响。例如,如果前导操作改变了当前目录,后续操作所使用的文件路径可能就要做相应调整。
另外,除非特别指明,都假设你对所有要操作的文件或目录都拥有足够的读写权限,因此在操作过程中一般无需考虑权限问题。
文件树生成:
使用mkdir命令建立下图所示文件体系,-p(--parents)选项表示若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。/{}内的内容表示下一层目录中包含的目录文件。之后使用ls命令查看所建立的文件目录体系,-R(--recursive)选项表示递归处理,将指定目录下的所有文件及子目录一并处理。
操作步骤和效果如下:
[root@localhost home]# mkdir -p tom/{mu/{report,exp,note},sp}dav/{doc,fonts} && touch tom/mu/report/c1 tom/mu/report/c2tom/mu/note/dot tom/mu/note/dat tom/mu/note/det tom/mu/note/mark dav/doc/a1dav/fonts/b1 dav/fonts/b2 && ls -R tom dav
dav:
doc fonts
dav/doc:
a1
dav/fonts:
b1 b2
tom:
mu sp
tom/mu:
exp note report
tom/mu/exp:
tom/mu/note:
dat det dot mark
tom/mu/report:
c1 c2
tom/sp:
1. 在当前目录下创建一个子目录learn,并且在 learn目录下创建子目录math;
【解答】
使用命令mkdir -p learn/math 一步创建目录learn和它下面的目录math。选项 -p(--parents) 的作用是保证learn目录不存在时,自动创建该目录,而命令不会出错。之后使用ls命令查看所建立的文件目录体系,-R(--recursive)选项表示递归处理,将指定目录下的所有文件及子目录一并处理。
操作步骤和效果:
[root@localhost home]# mkdir -p learn/math && ls -R learn
learn:
math
learn/math:
2. 将当前目录改变到sp目录;
【解答】
使用cd命令,由于当前目录为~目录,直接使用cd tom/sp便可以将当前目录改变的sp目录。进入成功。
操作步骤和效果:
[root@localhost home]# cd tom/sp
[root@localhost sp]#
3. 把整个report目录连同其中包含所有的文件和下级子目录,一同复制到此刻的当前目录,也就是sp之内。report目录成为sp的下级目录。
【解答】
使用cp命令将文件复制到当前文件,cp命令使用规则如下:
cp [-选项][源文件或目录][目标文件或目录] [目的目录],选项-R(--recursive)表示递归处理,将指定目录下的所有文件与子目录一并处理。之后使用ls命令查看report目录文件下的内容,发现复制成功。
操作步骤和效果:
[root@localhost sp]# cp -R ../mu/report . && ls -R
.:
report
./report:
c1 c2
4. 查找/usr/share 及其子目录下的文件,将所有文件名以 ca开头的文件,复制到当前目录。(提示:用find命令)
【解答】
使用find /usr/share –name ca* –execcp –R {} . \;命令,可以查找 /usr/share 及其子目录下的文件,并将所有文件名以 ca开头的文件,复制到当前目录,*号为通配符,表示ca后面为任意内容,其中find命令的使用格式为find [路径名] [搜索选项] [动作选项]。
操作步骤和效果:
[root@localhost sp]# find /usr/share -name ca* -exec cp -R {} . \;
cp: 无法以非目录来覆盖目录“./ca”
cp: 无法以非目录来覆盖目录“./ca”
cp: 无法以非目录来覆盖目录“./ca_ES”
图1. sp文件夹下的文件
(此处很难获取高清图)
此处出现的无法以非目录来覆盖目录有疑惑。
5. 将工作目录改变到note;
【解答】
使用cd命令切换目录,当前目录所在路径为/home/tom/sp,所以使用指令cd../mu/note可以实现切换目录效果。
操作步骤和效果:
[root@localhost sp]# cd ../mu/note/
[root@localhost note]#
6. 删除所有符合d开头、t结尾、且中间包含一个字母的文件。
【解答】
使用rm指令删除文件,-f(--force)选项表示强制删除,-r(--recursive)选项表示递归处理,将指定目录下的所有文件及子目录一并处理。使用通配符[]来实现删除要求,?表示匹配任意一个字母。
操作步骤和效果:
[root@localhost note]# rm -r -f d[?]t && ls
mark
7. 在用户dav的用户主目录下,doc子目录中,有一个名为a1的文件,把a1文件附加在文件mark文件的后面,形成一个新的文件,新文件的文件名叫new;
【解答】
使用cat命令将两个文件内容连起来,然后使用>符号将连起来后的内容重定向到新的文件new中。
操作步骤和效果:
[root@localhost note]# cat mark /home/dav/doc/a1 > new && ls
mark new
8. 你希望知道在dav的fonts目录及其下级子目录中,有哪些文件包含了“Adobe Song”这样的字符串;(提示:用grep命令)
使用grep命令在/home/dav/fonts中寻找包含了“Adobe Song”这样的字符串的文件,选项-r表示进行动作。结果是,没有任何文件包含“AdobeSong”这样的字符串。
【解答】
操作步骤和效果:
[root@localhost note]# grep -r "Adobe Song" /home/dav/fonts
[root@localhost note]#
9. 显示在你的用户主目录之下,总共包含多少个子目录?(只计算本目录下的一层,不递归)
【解答】
使用ls指令列出/home目录下的文件,-1选项表示每列只显示1个文件或目录名称,使用管道机制,再使用wc指令计算字数,-l选项表示只计算列数。结果有四个子目录。
操作步骤和效果:
[root@localhost note]# ls -1 /home | wc -l
4
10. 显示在lib目录内,占用空间最多3个下级子目录是哪3个?(提示:使用du命令可以得到目录占用空间的信息)
【解答】
先试用cd指令进入/lib目录下,再用du指令显示所有文件的大小,-s选项表示仅显示总计,*为通配符,表示任意名称。使用管道机制,用sort命令将文件内容加以排序,-nr选项表示按照数值大小反向排序,接着继续使用管道机制,使用head指令显示前三个。结果是modules、kbd、security这三个目录。
操作步骤和效果:
[root@localhost note]# cd /lib && du -s * | sort -nr | head -3
44584 modules
4976 kbd
3048 security
[root@localhost lib]#
说明:此处使用Linux系统的发行版为red hat 2.16.0,默认为root用户登录。