第三周作业(linux文件与目录管理)
目录管理类命令:cd;pwd;mkdir,rmdir,ls,tree
cd:切换目录
用法:cd [绝对路径或相对路径]
cd ~user:切换到user这个用户的主文件夹,即/home/user
cd /var/spool/mail 切换到/var/spool/mail下 ; cd ../mqueue 由/var/spool/mail切换到/var/spool/mqueue下
相关的环境变量:PWD:当前工作目录;OLDPWD:上一次的工作目录
演示:切换到/var/spool/mail目录下
~]#cd /var/spool/mail
pwd:显示目前所在的目录
用法:pwd [-p]
-p:显示出当前的路径,而不是使用链接路径
演示:~]#pwd
/tmp
mkdir:新建新目录
用法:mkdir [-pvm MODE] 目录名称
-p:递归创建所需的目录,当所创建的目录存在时,不返回错误,不存在时,递归创建
-v:显示创建过程的详细信息
-m MODE:创建目录时直接指定权限
演示:新建权限为rwx--x--x的目录test1
~]mkdir -m 711 test1
命令行展开:
{}可以承载一个以逗号分隔的列表,并将其展开为多个路径。
例如:创建/tmp/a1,/tmp/a2,/tmp/a1/a,/tmp/a1/b
~]#mkdir -pv /tmp/{a1/{a,b},a2}
在/tmp目录下创建x_y,x_z,q_y,q_z目录
~]#mkdir -pv /tmp/{x,q}_{y,z}
在tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22
~]#mkdir /tmp/tfile-$(date +%H-%M-%S)
rmdir:删除目录
注:mkdir只能删除空目录
用法:rmdir [options]...目录名称
-v:显示过程
-p:连同上层空目录一起删除
演示:删除刚才创建的/tmp/a1/b目录
~]#rmdir -pv /tmp/a1/b
ls:列出指定路径下的文件列表
用法:ls [OPTION]...[FILE]...
-a:--all显示所有文件,包括隐藏文件
-A:--almost-all:显示所有文件,但不显示 . 和 ..
-l:long长格式显示文件信息
-h:对文件大小进行换算
-i:列出inode号码
演示:以长格式显示/etc目录下所有文件
~]#ls -al /etc/
tree:目录结构查看
文件内容查看命令:cat、tac、more、less、head、tail
cat:显示文件内容
用法:cat [OPTION]...[FILE]...
-n:对显示的行进行编号
演示:~]#cat -n /etc/passwd
tac:从最后一行开始显示,即反向显示
演示: ~]#tac /etc/passwd
more:一页一页的显示文件内容
演示:~]#more /etc/passwd
注:Space:代表下翻一页;Enter:代表向下滚动一行;/STRING :代表在显示的内容当中,向下查询“STRING”这个关键字; :f 代表立即显示出文件名以及目前显示的行数;q:离开
less:一页一页翻动,但支持向回翻动操作
演示:less /etc/passwd
注:Space 下翻一页 【Pageup】上翻一页
tail:查看文件的后几行,head为查看文件的前几行,具体用法与tail相同
用法:tail [OPTION]...[FILE]...
-n#:指定获取后#行,也可以使用 - #
-c# :指定获取后#字节内容
-f:动态显示文件新内容
演示:~]#tail -5 /etc/passwd
例:查看/etc/passwd文件的第2到4行文件内容
~]# head -n 4 /etc/passwd | tail - 2
stat:查看文件状态命令
状态信息有三个时间戳:
access time:访问时间,atime,即通过cat,more等命令读取其内容的时间
modify time:修改时间,mtime,即改变文件内容时间
change time:改变时间,ctime,即元数据发生改变的时间
可以通过touch来修改时间戳
touch:修改文件时间或创建新文件
文件管理命令:cp、mv、rm
cp:复制命令
用法:cp [OPTION]...SRC...DEST
1. 如果SRC是文件
(1)如果目标不存在:新建DEST,并将SRC中的内容填充至DEST中
演示:~]# cp /etc/passwd /tmp/passwd
(2)如果目标存在
如果DEST是文件,则会将SRC中的内容覆盖至DEST中;(可以使用 -i 来提示用户是否覆盖)
如果DEST是目录,则在DEST下新建与源文件同名的文件,并将SRC中的内容填充至新文件当中
演示:
DEST是目录 DEST是文件
~]#cp /etc/passwd /tmp ~]# touch a.text
~]# cp /etc/passwd a.text
2 如果SRC是目录:则必须使用 -r 选项
(1)如果DEST存在,则其必须为目录,否则报错,现在DEST目录下创建于SRC同名的目录,并将SRC中的所有内容复制到DEST中
演示:
~]#cp -r /var/spool/ /tmp
(2)如果DEST不存在,则先创建DEST目录,并将SRC中的所有内容复制到DEST目录中
演示: ~]#cp -r /var/spool /abc
常用选项: -i:交互式
-r:递归复制目录及内部所有内容
-a:归档,即保持源文件的所有属性
-v:显示过程
-f:强制覆盖
-p:保持源文件的所有属性
-d:表示不跟踪符号链接所指向的原文件,即复制符号链接本身,而非其指向的源文件
演示:~]#cp -a /var/log/wtmp wtmp_2
~]#ls -l /var/log/wtmp wtmp_2
mv:移动命令,还可以用来更改文件名
用法:mv [OPTION]...SRC...DEST
-f:强制覆盖
-i:交互式
-u:若目标文件存在,且SRC比较新,则才会更显DEST
演示:更改文件名
~]# mv wtmp_2 wtmp_1
rm:移除文件或目录
用法:rm [OPTION] 文件或目录
-f:强制删除,不会出现警告信息
-r:递归删除
-i:交互式
演示:~]#rm -rf /tmp/a1/b
glob实现文件名通配
文件名通配:是指以指定格式显示文件名,常用的通配符有 * ? []
(1) * 表示任意长度的任意字符
(2) ? 表示任意单个字符
(3) [] 表示指定范围内的任意单个字符
[a-z] :表示任意单个字母,不区分大小写
[0-9] :表示任意单个数字
[a-z0-9] :表示任意单个数字或字母
(4) [^]匹配指定范围外的任意单个字符
与[]相反,即取反
(5)字符集的表示方法
[:space:] 表示所有的空白字符
[:alnum:]表示所有的字母或数字
[:alpha:]表示所有的字母,不区分大小写
[:dight:]表示所有的数字
[:lower:]表示所有的小写字母
[:upper:]表示所有的大写字母
[:punct:]表示所有的标点符号
作业:复制/etc目录下所有以p开头,以非数字结尾的的文件或目录到/tmp/mytest1目录中
cp -a /etc/p*[^0-9] /tmp/mytest1
文本处理工具:wc、cut、sort、uniq
wc:字符统计命令
用法:wc [OPTION]... [FILE]
-l :lines统计行数
-w:words统计单词个数
-c:character统计字符个数
cut命令:文本内容切割
cut命令就是把文件中的内容按照某种分隔符进行切割,然后取出指定字段
注:原内容或原文件不会受到影响
用法: cut [OPTION]...[FILE]...
-d:指明分割符
-f fields:指明需要取出的字段
#:第#个字段
#,#,#:离散的字段 如1,2,3,
#-#:连续的字段,如1-9
混合使用:1-3,5,10-44
sort命令:排序,将原文件内容取出后排序
用法: sort [OPTION]...[FILE]...
-f:忽略字符大小写
-r:逆序
-t delimiter:指明分隔符
-n:以数值大小进行排序
-u:uniq排序后去重
-k #:以指定字段为标准进行排序
演示:sort -t: -k3 /etc/passwd | cut -d: -f3
uniq命令:移除或报告重复的行
用法:uniq [OPTION]... [INPUT[OUTPUT]]
-c:显示每行重复的次数
-d:仅显示重复的行
-u:仅显示不重复的行
注:连续且完全相同为重复
练习:取出/etc/passwd 文件中的第6行到第十行,并将这些信息按照第3个字段的数值大小进行排序,最后仅显示各自的第一个字段(以:为分隔符)
cut -d:-f6-10 /etc/passwd | sort -t: -k3 -n
文件的元数据信息(inode),inode记录的文件数据至少包括以下部分:
文件的所有者和组
文件的大小
时间戳
查看时间戳(atime、ctime、mtime)
查看访问时间命令: ls -l --time=atime FILE
查看状态时间命令:ls -l --time=ctime FILE
默认情况下,ls -l命令显示的文件的mtime
修改文件的时间戳:touch [-acmdt] FILE
演示:touch -d “2 days ago” bashrc