文件管理
1 文件的类型
2 系统目录
3 路径的概念
3.1 路径
我们使用计算机的时候,需要知道文件放在那里,而表示文件位置的方式就叫做路径。
3.2 绝对路径
在Linux中,绝对路径是从“/”开始的,比如:/usr/bin。如果一个路径是从“/”开始的,那么就是一个绝对路径。
3.3 相对路径
相对路径是针对当前路径为参照物的,和绝对路径不同。其中“./”表示当前路径,“..”表示上一级目录。
4 文件的增删改查
4.1 新建
4.1.1 新建文件
4.1.1.1 touch命令
作用:
快速新建一个文本文件
常用选项:
无
参数:
文件名字
示例:
1. 新建一个文本文件a.txt,touch a.txt
2. 批量新增文本文件,touch b.txt c.txt d.txt
4.1.1.2 vi/vim命令
作用:
vi和vim基本一致,vim是vi的升级版,最主要区别是vim有语法提示。
常用选项:
无
参数:
文件名称
说明:
vi/vim是一款编辑器,按字母“i”进入输入模式,按“Esc”+“:”+“wq”保存退出。这里我们对vim只做一个简单的介绍,下面一节将做详细的讲解。
示例:
1. 新建一个文件,vim e.txt
按“i”进入编辑模式
按“Rsc”+“:”+“wq”保存退出
查看一下
4.1.2 新建目录
4.1.2.1 mkdir命令
作用:
新建目录,支持单个和批量新建
常用选项:
-p 递归创建目录
参数:
目录名称
示例:
1. 新建目录a,mkdir a
2. 递归新建目录,mkdir -p b/c/d
4.1.3 复制
4.1.3.1 cp命令
作用:
复制文件、文件夹内容
常用选项:
-r 复制文件夹内容时递归复制
格式:
cp 源文件 目标文件
cp -r 源文件夹 目标文件夹
示例:
1. 复制文件a.txt并命名为d.txt,cp a.txt d.txt
2. 复制/etc文件夹以及里面的内容到/tmp目录下,cp –r /etc /tmp
4.2 修改
4.2.1 修改文件内容
修改文件也是使用vi/vim文本编辑器,操作方式和使用vi/vim新建文件类似,这里不再赘述。
4.2.2 修改文件名
4.2.2.1 mv命令
作用:
修改文件、目录的名称
常用选项:
无
格式:
mv 原文件名 新文件名
示例:
1. 修改文件a.txt的文件名为aa.txt,mv a.txt aa.txt
2. 修改目录a的文件名为aa,mv a aa
4.3 查看
4.3.1 查看文件列表
4.3.1.1 ls命令
参考上一节课《3.小试牛刀:Linux的几款基础命令》
4.3.2 查看文件内容
4.3.2.1 cat命令
作用:
查看文件内容,cat显示全部的文件内容,适合查看小文件。
常用选项:
-n 对输出的行进行编号
-b 对非空的输出行进行编号
-s 不输出多行的空格
参数:
文件名
说明:
cat命令除了可以查看文件内容外,还可以搭配重定向输出来合并文件。
示例:
1. 查看文件a.txt的内容,cat a.txt
2. 合并文件a.txt和b.txt的内容到文件c.txt,cat a.txt b.txt > c.txt
4.3.2.2 more命令
作用:
分页方式查看文件内容,这是和cat命令最大的区别。
常用选项:
无
格式:
more 文件名
说明:
进入查看模式后,回车是翻一行,空格键是翻一页,q键退出查看模式。需要注意的是,more命令只能向前翻页/行,不能后退。
实例:
1. 查看/etc/passwd文件,more /etc/passwd
4.3.2.3 less命令
作用:
less的功能和more一致,不过less可以向后翻页/行
常用选项:
无
格式:
less 文件名
说明:
less的翻页键更加灵活,向上翻页(PageUp),向下翻页(PageDown、、空格键),向上翻行(↑),向下翻行(↓、回车键),向左翻一列(←),向右翻一列(→)。
实例:
1. 使用less命令查看/etc/passwd文件,less /etc/passwd
4.3.2.4 head命令
作用:
用于显示文件内容的头部几行。默认显示前10行内容。
常用选项:
-n 显示前几行
格式:
head -n 文件名
示例:
1. 显示/etc/passwd前5行内容,head -5 /etc/passwd
2. 显示/etc/passwd前10行内容,head /etc/passwd
4.3.2.5 tail命令
作用:
和head命令相反,显示文件内容尾部几行。默认情况下,显示尾部10行内容。
常用选项:
-n 显示尾部几行
-f 动态追加
格式:
tail -n 文件名
示例:
1. 显示/etc/passwd尾部5行内容,tail -5 /etc/updatedb.conf
2. 显示/etc/profile尾部10行内容,tail -5 /etc/profile
4.4 删除
4.4.1 rm命令
作用:
删除文件、目录
常用选项:
-r 删除目录时,递归删除
-f 强制删除,不提示确认信息
格式:
rm -f 文件名
说明:
rm –rf 使用时一定要谨慎,删除之前一定要先查看目录里面的具体内容,确认准确后执行删除操作。
示例:
1. 删除a.txt文件(有提示),rm a.txt
2. 删除b.txt文件(无提示),rm -f b.txt
3. 删除/tmp下的目录etc,rm –rf etc
5 文本编辑器vi/vim
因为vi和vim类似,vim是vi的升级版,我们这里以vim作为主要讲解对象。
5.1 vim的三个模式
5.2 vim命令
作用:
vim是一款强大的文本编辑器。
常用选项:
命令模式
基础操作:
i 当前字符之前插入 (光标前)
I 行首插入 (行首)
a 当前字符之后插入 (光标后)
A 行尾插入(行尾)
o 下一行插入 (另起一行)
O 上一行插入(上一行插入)
x 向后删除一个字符
X 向前删除一个字符
u 撤销一步 每按一次就撤销一次
r 替换
w/e 或者(Ctrl + 左右方向键)左右方向键要快
gg 快速定位到文件首行
G 快速定位到文件尾行
数字 + gg 快读定位到某行
/ + 参数 查找匹配给定参数的字符串,按n查找下一个,按N查找上一个行操作:
输入home键或^(Shift + 6)将光标移动到行首
输入end键或$(Shift + 4)将光标移动到行尾
dd 删除一行
数字 + dd 删除多行
d + G 删除光标后面所有内容
yy 复制一行
数字 + yy 复制多行
p 将复制行粘贴到光标处
d + home 或^(Shift + 6) 删除到行首
d + end或$(Shift + 4) 删除到行尾列模式操作:
在命令模式下,按Ctrl + v进入列操作,可以批量操作。
流程如下:- Ctrl + v进入列操作
- 按下大写I(插入)、d(删除)、r(替换)
- 输入需要插入、删除或替换的内容
- 按Esc结束
命令行模式
输入“:”,进入命令行模式基础操作:
w 保存
q 没有修改内容,退出
q! 不管修改内容没有,强制退出
wq 保存退出
wq! 强制保存退出(一般用在没有修改权限的文件中)
x 保存退出(等于wq)
x! 强制保存退出(等于wq!)特殊操作:
set nu 显示行号
set nonu 取消行号
noh 取消高亮显示
数字 定位到某行
!命令 在vim命令行模式执行其他命令(一般用在不想退出vim编辑器,而直接查看其他命令的执行结果)
r 文件名 读取另外一个文件内容,并追加到光标处文本替换:
s 分隔符 旧内容 分隔符 新内容(分隔符可以自定义,一般使用“/”)
% s 分隔符 旧内容 分隔符 新内容(“%”扫描所有内容,不加“%”只扫描当前行)
n1,n2 s 分隔符 旧内容 分隔符 新内容 分隔符 g(“n1,n2”扫描n1到n2行;“g”匹配所有的,不加“g”是匹配第一次出现的)
举例:
:s/o/a 当前行的o替换成a
:%,s/o/a 文档中第一次出现的o换成a
:%,s/o/a/g 文档中所有的o换成a
:1,3s/o/a 文档1-3行中第一次出现的o换成a
:1,3s/o/a/g 文档1-3行中的o换成a
示例:
在文件中查找字符产root
输入/root
回车
按n查找下一个(注意绿色区域)
按N查找上一个(注意绿色区域)
利用列模式批量加注释
vim mima打开文件
Ctrl + v进入列编辑模式,“可视 块”字样出现,表示已进入列模式
使用方向键选中要添加注释的位置
按下大写I,进入编辑模式,并输入“#”
按Esc后,刚才选中的区域已批量加上“#”
利用列模式批量删除行
进入列模式后,并选中要删除的字符
按d删除所选字符
按D删除所选区域整行
利用列模式批量替换
进入列模式后,并选中要替换的字符
按r,并输入“a”,会发现所有选择的字符都替换成了“a”
文档中所有的“root”替换成“raat”
输入:%,s/root/raat/g
回车,并回答“yes”,继续回车
5.3 vim多开
格式:
-o 上下分屏多开
-O 左右分屏多开
说明:
Ctrl + w + w,切换文件屏幕
示例:
1. 上下分屏多开,vim –o /etc/passwd /etc/ /etc/profile
5.4 diff命令
作用:
对比两个文本文件,并显示差异。
常用选项:
无
格式:
diff 文件A 文件B
示例:
1. 比较file1和file2文件
尖角符号“<”指向左边,意思是右边的文件比左边的文件少尖角符号旁边的字符;尖角符号“>”指向右边,意思是左边的文件比右边的文件少尖角符号旁边的字符。
还有另外一种判定方法,看一下上图的“3c3”、“6d5”、“18a17”字样,
“3c3”:
c表示行号能对应上,但是对应的内容不一样,上例中file1第3行是“daemon:x:2:2:daemon:/sbin:/sbin/nologin”,而file2的第3是“xxxxxxxxxxxxxxxxxx”。
“6d5”:
d表示左边的文件比右边的文件多,上例中file1文件第6行是“sync:x:5:0:sync:/sbin:/bin/sync”,而对应右边的file2文件是第5行,也就是少一行。
“18a17”:
a表示右边的文件比左边的文件多,上例中表示file2第17行是内容“unbound:x:996:993:Unbound DNS resolver:/etc/unbound:/sbin/nologin”,而对应左边的文件没有这一行,对应左边的行号是18
5.5 vimdiff
作用:
作用和diff类似,功能更强大,界面更友好。
常用选项:
无
格式:
vimdiff file1 file2
说明:
vimdiff的更多介绍,请参考网友的博客:http://blog.csdn.net/wind19/article/details/5768972
示例:
1. 比较file1和file2文件的差异
5.6 iconv命令
作用:
文件编码的转换,一般用在文本文件的编码和系统编码不一致的情况。
常用选项:
-f, –from-code=名称 原始文本编码
-t, –to-code=名称 输出编码
-l, –list 列举所有已知的字符集
-o, –output=FILE 输出文件
参数:
文件名
示例:
1. 转换c.txt的文件编码,iconv –f gb2312 –t utf-8 -o /tmp/newc.txt
6 文件查找和过滤
6.1 grep命令
作用:
在文档中搜索指定的字符串所在行,并列出来。
常用选项:
-v 反选,显示没有匹配到的部分
-I 忽略大小写
^# 以#开头的字符串
#$ 以#结尾的字符串
^$ 空行
-n 打印结果时,加上行号
[a..z] 包含a到z
{a,b} 包含a、b
示例:
1. 找出/etc/passwd文件中包含“root”的所有行,grep “root” /etc/passwd
2. 上例取反,grep -v “root” /etc/passwd
3. 和其他命令搭配使用,cat /etc/passwd | grep “root”
6.2 find命令
作用:
在目录结构中搜索文件,并执行指定的操作。
常用选项:
-name 按照文件名查找文件。 “名称”
-perm 按照文件权限来查找文件。666 777 等
-prune 使用这一选项可以使find命令不在当前指定的目录中查找(排除) 如果同时使用-depth选 项,那么-prune将被find命令忽略
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
-user 按照文件属主来查找文件
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
-group 按照文件所属的组来查找文件
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
-mtime -n +n 按照文件的更改时间来查找文件,
- n 表示文件更改时间距现在n天以内
+ n 表示文件更改时间距现在n天以前
-type 查找某一类型的文件
b - 块设备文件
d - 目录
c - 字符设备文件
p - 管道文件
l- 符号链接文件
f - 普通文件
-size n [c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-exec 对匹配的文件执行该参数所给出的其他linux命令, 相应命令的形式为:命令 {} \;,注意{ }和\;之间的空格,{}代表查到的内容,\;是固定的结束符号。
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
参数:
pathname find命令所查找的目录路径。例如用 . 表示当前目录,用 / 表示系统根目录。
-print find命令将匹配的文件输出到标准输出。
示例:
name选项,name选项可以单独使用,也可以和其他选项混用
- 查找/tmp目录下所有的.txt文件,find /tmp -name “.txt”
- 查找/tmp目录下所有的.txt文件,find /tmp -name “.txt”
perm选项,按照文件的权限来查找文件
- 查找当前目录权限为755的文件
- 查找当前目录权限为755的文件
prune选项,用来指出需要忽略的目录,如果-depth和-prune同时使用,-prune会被忽略。必须使用 -o -print 参数,才能看到效果
- 查看apps目录里面的内容,但是排除apps里面的bin目录,find ./apps -path “./apps/bin” -prune -o -print
- 测试-depth和-prune一起使用的情况
有个警告,表示-depth会覆盖-prune的效果。
- 查看apps目录里面的内容,但是排除apps里面的bin目录,find ./apps -path “./apps/bin” -prune -o -print
user选项和nouser,通过文件的所属用户搜索,nouser是user的取反。
- 在当前目录查找属于用户tss的文件,find ./ -user tss
- 在当前目录查找属于用户tss的文件,find ./ -user tss
exec选项,使用exec我们可以把查找到的结果做进一步处理,比如查看文件的属性、删除等操作。
语法结构:
- 查找当前目录的.txt文件,并查看这些文件的属性,find ./ -name “.txt” -exec ls -al {} \;
- 查找当前目录的*.txt文件,并把它们拷贝到/opt下面,
find ./ -name “*.txt” -exec cp -r {} /opt \;
- 查找当前目录的.txt文件,并查看这些文件的属性,find ./ -name “.txt” -exec ls -al {} \;
mtime/atime/ctime选项,按照更改时间来查找文件,可以使用mtime,atime或ctime选项。
mtime:文件最后一次修改的时间
atime:最后一次访问时间
ctime:文件的最后一次变化时间,也就是修改时间- 查找当前目录下5天内修改过的文件,find ./ -mtime -5
- 查找当前目录下5天之前修改过的文件,find ./ -mtime +5
- 查找当前目录下5天内修改过的文件,find ./ -mtime -5
type选项,根据文件的类型来查找文件
可选参数:
b 块设备文件
d 目录
c 字符设备文件
p 管道文件
l 符号链接文件
f 普通文件
! 取反- 在/etc目录下查找目录,find /etc -type d | head -5
- 在/etc目录下查找目录,find /etc -type d | head -5
size选项,按照文件大小来查找文件
文件大小单元:
b 块(512字节)
c 字节
w 字(2字节)
k 千字节
M 兆字节
G 吉字节
比较符使用:
-a and 并且
-o or 或者
+ 超过
- 低于
- 在/etc目录下查找大于1M的文件,find /etc -size +1M
- 在/etc目录下查找大于1000b的文件,find /etc -size +1000b
- 在/etc目录下查找大于1M的文件,find /etc -size +1M