2、文件管理
linux目录结构
Windows:以多根的方式 C:\ D:\ E:\等等
linux:以单根的方式组织文件 / 。也就是所有的文件都放在根目录下
Linux目录视图
/ 被称为根目录,下面的bin、boot、dev等等为一级目录,只有管理员可以访问
一级目录简介
目录 | 说明 |
---|---|
bin | 存放二进制可执行文件(ls,cat,mkdir等)常用命令一般都在这 |
boot | 存放用于系统引导时使用的各种文件,也就是启动文件 |
dev | 用于存放设备文件 |
etc | 存放系统管理和配置文件 |
home | 存放所有普通用户文件,也是普通用户的根目录 |
root | 管理员的主目录 |
run | 运行目录,用的很少 |
sbin | 与bin相似,存放管理员相关的命令 |
tmp | 用于存放各种临时文件,是公用的临时文件存储点 |
usr | 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录 |
var | 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。 |
文件类型
使用ls -l
命令可以查看文件的详细信息
-
开头:普通文件。如:文本文件、二进制文件、图片等等(白色)- d 开头:目录文件(蓝色)
- b 开头:设备文件,块设备。如:存储设备硬盘、u盘/dev/sda、/dev/sda1(黄色)
- c 开头:设备文件,字符设备。如:打印机、终端/dev/ttr1
- l 开头:连接文件(淡蓝色)
- s 开头:套接字文件
- p 开头:管道文件
-
开头:压缩文件(红色)。注意:和普通文件是一样的字符,只是颜色不同
通配符
-
*
:匹配任意数的字符 -
?:匹配单个字符
-
[] :匹配数组中的任意字符
- [abc]:匹配a、b、c中任意字符
- [a-z] :表示匹配范围为a到z
- [!abc]:表示不匹配括号中的任何字符
-
{} :
-
匹配大括号中的任意字符串
-
用于一次创建多个文件或目录
创建两个同级别的目录:dir2、dir1,注意逗号之间一定不能有空格
[root@lyy my_dir]# mkdir {dir2,dir3}
创建两个同级别的文件同理
[root@lyy my_dir]# touch dir1/{file1,file2}
-
文件管理常用命令
ls:显示目录中文件
list的缩写
语法:ls 参数 文件名
常用参数
参数 | 描述 |
---|---|
-a | 显示所有文件及目录 |
-A | 不显示当前目录和父目录 |
-d | 显示目录自身的属性信息 |
-i | 显示文件的inode属性信息 |
-l | 显示文件的详细属性信息 |
-m | 以逗号为间隔符,水平显示文件信息 |
-r | 依据首字母将文件以相反次序显示 |
-R | 递归显示所有子文件 |
-S | 依据内容大小将文件排序显示 |
-t | 依据最后修改时间将文件排序显示 |
-X | 依据扩展名将文件排序显示 |
-h | 显示文件的大小 |
-color | 以彩色显示信息 |
使用示例
-
显示文件袋详细属性信息
[root@localhost ~]# ls -l 总用量 8 -rw-------. 1 root root 1516 4月 17 03:46 anaconda-ks.cfg -rw-r--r--. 1 root root 1564 4月 17 03:49 initial-setup-ks.cfg drwxr-xr-x. 2 root root 6 4月 17 05:14 公共 drwxr-xr-x. 2 root root 6 4月 17 05:14 模板 drwxr-xr-x. 2 root root 6 4月 17 05:14 视频 drwxr-xr-x. 2 root root 6 4月 17 05:14 图片 drwxr-xr-x. 2 root root 6 4月 17 05:14 文档 drwxr-xr-x. 2 root root 6 4月 17 05:14 下载 drwxr-xr-x. 2 root root 6 4月 17 05:14 音乐 drwxr-xr-x. 2 root root 30 4月 18 05:05 桌面
-
显示指定路径:/root/桌面 下的文件
[root@localhost ~]# ls /root/桌面 file.txt
-
显示当前目录下以fi开头的文件
[root@localhost 桌面]# ls fi* file.txt
-
显示目录/etc 下的文件详细信息并显示文件的大小
[root@localhost rootdir]# ls -lh /etc 总用量 1.4M drwxr-xr-x. 3 root root 101 4月 17 03:42 abrt -rw-r--r--. 1 root root 16 4月 17 03:45 adjtime -rw-r--r--. 1 root root 1.5K 4月 1 2020 aliases -rw-r--r--. 1 root root 12K 4月 17 03:46 aliases.db drwxr-xr-x. 3 root root 65 4月 17 03:43 alsa drwxr-xr-x. 2 root root 4.0K 4月 17 03:44 alternatives .............省略其他内容
cd:切换目录
change directory的缩写
其功能是更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转至当前使用者的家目录。
语法:cd 参数 目录名
常用参数
参数 | 描述 |
---|---|
-L | 切换至符号链接所在的目录 |
-P | 切换至符号链接对应的实际目录 |
-- | 切换至上次所在目录 |
~ | 切换至用户家目录 |
.. | 切换至当前位置的上一级目录 |
使用示例:
-
去根目录
[root@localhost ~]# cd / [root@localhost /]#
-
去指定路径:/root/桌面
[root@localhost /]# cd /root/桌面 [root@localhost 桌面]#
-
切换至当前位置的上一级目录
[root@localhost 桌面]# cd .. [root@localhost ~]#
pwd:显示当前目录路径
print working directory的缩写
显示当前工作目录的路径,即显示所在位置的绝对路径。
使用示例
[root@localhost ~]# pwd -L
/root
touch:创建文件
如果文件不存在,则会创建一个空内容的文本文件;如果文件已经存在,则会对文件的Atime(访问时间)和Ctime(修改时间)进行修改操作,管理员可以完成此项工作,而普通用户只能管理主机的文件
语法:touch 参数 文件名
常用参数
参数 | 描述 |
---|---|
-a | 设置文件的读取时间记录 |
-c | 不创建新文件 |
-d | 设置时间与日期 |
-m | 设置文件的修改时间记录 |
-t | 设置文件的时间记录 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
使用示例
-
在当前目录下创建文件:file.txt
[root@localhost ~]# touch file.txt
-
结合通配符创建多个文件
[root@localhost ~]# touch file{1..3}.txt
-
在指定路径:/root/桌面 下创建文件:file.txt
[root@localhost ~]# touch /root/桌面/file.txt
-
创建两个同级别的文件:file1和file2,注意文件名之间一定不能有空格,只用逗号隔开
[root@lyy my_dir]# touch dir1/{file1,file2}
-
创建隐藏文件,以 . 开头的文件都是隐藏文件
[root@lyy my_dir]# touch dir1/.file // 创建隐藏文件 [root@lyy my_dir]# ls dir1 // ls只能查看未隐藏的文件 aaa bbb [root@lyy my_dir]# ls -a dir1 // ls -a 可以查看隐藏文件 . .. aaa bbb .file
mkdir:创建目录
make directories的缩写
其功能是创建目录文件。若要创建的目标目录已经存在,则会提示已存在而不继续创建,不覆盖已有文件。若目录不存在,但具有嵌套的依赖关系时,例如/Dir1/Dir2/Dir3/Dir4/Dir5,要想一次性创建则需要加入-p参数,进行递归操作
语法 : mkdir 参数 目录名
常用参数
参数 | 描述 |
---|---|
-m | 创建目录的同时设置权限 |
-v | 显示执行过程详细信息 |
-p | 递归创建多级目录 |
-z | 设置目录安全上下文 |
使用示例
-
创建一个文件夹:dir1
[root@localhost 桌面]# mkdir dir1
-
一次性创建多个文件夹:dir2、dir3、dir4
[root@localhost 桌面]# mkdir dir2 dir3 dir4
-
创建多级递归文件夹:aaa/bbb/ccc
[root@localhost 桌面]# mkdir -p aaa/bbb/ccc
-
创建两个同级别的目录:dir2、dir1,注意目录名之间一定不能有空格,只用逗号隔开
[root@lyy my_dir]# mkdir {dir2,dir3}
-
同时创建同级目录和递归目录
[root@lyy my_dir]# mkdir -pv {dir1/{aaa,bbb},dir2/{aaa,bbb},dir{3,4,5}} mkdir: 已创建目录 "dir1" mkdir: 已创建目录 "dir1/aaa" mkdir: 已创建目录 "dir1/bbb" mkdir: 已创建目录 "dir2" mkdir: 已创建目录 "dir2/aaa" mkdir: 已创建目录 "dir2/bbb" mkdir: 已创建目录 "dir3" mkdir: 已创建目录 "dir4" mkdir: 已创建目录 "dir5"
cp:复制文件或目录
copy的缩写
cp命令能够将一个或多个文件或目录复制到指定位置,亦常用于文件的备份工作。-r参数用于递归操作,复制目录时若忘记添加则会直接报错;-f参数则用于当目标文件已存在时会直接覆盖而不再询问。这两个参数尤为常用。
语法: cp 参数 源文件名 目标文件名
常用参数
参数 | 描述 |
---|---|
-a | 功能等价于pdr参数组合 |
-b | 覆盖目标文件前先进行备份 |
-d | 复制链接文件时,将目标文件也建立为链接文件 |
-f | 若目标文件已存在,则会直接覆盖 |
-i | 若目标文件已存在,则会询问是否覆盖 |
-l | 对源文件建立硬链接,而非复制文件 |
-p | 保留源文件或目录的所有属性信息 |
-r | 递归复制所有子文件 |
-s | 对源文件建立软链接,而非复制文件 |
-v | 显示执行过程详细信息 |
使用示例
-
复制路径:dir1/a.txt 的文件到:dir2文件夹中
[root@localhost 桌面]# cp dir1/a.txt dir2
-
复制路径:dir1/a.txt 的文件到:dir2文件夹中,并定义新的名称:b.txt
[root@localhost 桌面]# cp dir1/a.txt dir2/b.txt
-
复制文件夹:aaa 到桌面,并定义新的名称:aaa_1
[root@localhost 桌面]# cp -r aaa aaa_1
mv:移动或改名文件
move的缩写
能够对文件进行剪切和重命名操作
语法: mv 参数 源文件名 目标文件名
常用参数
参数 | 描述 |
---|---|
-b | 覆盖前为目标文件创建备份 |
-f | 强制覆盖目标文件而不询问 |
-i | 覆盖目标文件前询问用户是否确认 |
-n | 不要覆盖已有文件 |
-u | 当源文件比目标文件更新时,才执行覆盖操作 |
-v | 显示执行过程详细信息 |
-Z | 设置文件安全上下文 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
使用示例
-
将路径:aaa/a.txt 文件移动到桌面,并不改变文件名
[root@localhost 桌面]# mv aaa/a.txt .
-
重命名操作,将a.txt改名为b.txt。实际操作就是 剪切后粘贴
[root@localhost 桌面]# mv a.txt b.txt
-
将文件夹aaa移到bbb文件夹中
[root@localhost 桌面]# mv aaa bbb
-
将ccc文件夹中的所有文件都移动到文件夹bbb中,如果遇到已存在的文件直接覆盖
[root@localhost 桌面]# mv -f ccc/* bbb
rm:删除文件或目录
remove的缩写
删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。
语法:rm 参数 文件名
常用参数
参数 | 描述 |
---|---|
-d | 仅删除无子文件的空目录 |
-f | 强制删除文件而不询问 |
-i | 删除文件前询问用户是否确认 |
-r | 递归删除目录及其内全部子文件 |
-v | 显示执行过程详细信息 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
使用示例
-
删除文件时会默认进行二次确认
[root@localhost 桌面]# rm a.txt rm:是否删除普通空文件 "a.txt"?y
-
强制删除文件无须二次确认
[root@localhost 桌面]# rm -f b.txt
-
删除指定目录及其内部的子文件,且无须确认
[root@localhost 桌面]# rm -f b.txt
-
强制删除aaa文件夹下,以.txt为后缀的文件
[root@localhost 桌面]# rm -rf aaa/*.txt
-
强制删除以b开头的文件
[root@localhost 桌面]# rm -rf aaa/b*
显示文件内容
cat:在终端显示文件内容
concatenate files and print的缩写
其功能是在终端设备上显示文件内容。适合查看内容较少的纯文本文件。 对于内容较多的文件,使用cat命令查看后会在屏幕上快速滚屏
语法: cat 参数 文件名
常用参数
参数 | 描述 |
---|---|
-A | 等价于-vET参数组合 |
-b | 显示行数(空行不编号) |
-e | 等价于-vE参数组合 |
-E | 每行结束处显示$符号 |
-n | 显示行数(空行也编号) |
-s | 显示行数(多个空行算一个编号) |
-t | 等价于-vT参数组合 |
-T | 将TAB字符显示为^I符号 |
-v | 使用^和M-引用,LFD和TAB除外 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
使用示例
-
查看当前目录下的a.txt文件
[root@localhost 桌面]# cat a.txt
-
查看当前目录下的a.txt文件,并显示行号
[root@localhost 桌面]# cat -n a.txt
tail:显示文件尾部内容
默认会在终端界面上显示指定文件的末尾10行,如果指定了多个文件,则会在显示的每个文件内容前面加上文件名来加以区分
语法: tail 参数 文件名
常用参数
参数 | 描述 |
---|---|
-c | 设置显示文件尾部的字符数 |
-f | 持续显示文件尾部最新内容 |
-n | 设置显示文件尾部的行数 |
--help | 显示帮助信息 |
--pid | 当指定PID进程结束时,自动退出命令 |
--retry | 当文件无权限访问时,依然尝试打开 |
--version | 显示版本信息 |
使用示例
-
默认显示文件后十行内容
[root@localhost 桌面]# tail a.txt
-
指定显示文件后五行的内容
[root@localhost 桌面]# tail -n 5 a.txt
-
显示文件后8个字节
[root@localhost 桌面]# tail -c 8 a.txt
-
持续刷新文件后5行的内容
[root@localhost 桌面]# tail -fn 5 a.txt
head:显示文件开头的内容
显示文件开头的内容,不使用参数时默认显示前十行
语法:head 参数 文件名
常用参数
参数 | 描述 |
---|---|
-c | 设置显示头部内容的字符数 |
-n | 设置显示行数 |
-q | 不显示文件名的头信息 |
-v | 显示文件名的头信息 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
使用:与tail基本一致
more:分页显示文件内容
如果文本文件中的内容较多较长,使用cat命令读取后则很难看清,这时使用more命令进行分页查看就比较合适了,该命令可以把文本内容一页一页地显示在终端界面上,用户每按一次Enter键即向下一行,每按一次空格键即向下一页,直至看完为止。
语法: more 参数 文件名
常用参数
参数 | 描述 |
---|---|
-c | 不滚屏,先显示内容再清除旧内容 |
-d | 显示提醒信息,关闭响铃功能 |
-f | 统计实际的行数,而非自动换行的行数 |
-l | 将“^L”当作普通字符处理,而不暂停输出信息 |
-p | 先清除屏幕再显示文本文件的剩余内容 |
-s | 将多个空行压缩成一行显示 |
-u | 禁止下划线 |
-数字 | 设置每屏显示的最大行数 |
+数字 | 设置从指定的行开始显示内容 |
+/关键词 | 从指定关键词开始显示文件内容 |
使用示例
-
使用分页显示文件内容
[root@localhost 桌面]# more a.txt
-
每一页显示10行
[root@localhost 桌面]# more -10 a.txt
-
不滚屏,每显示新的一页前先清一次屏,并且每一页显示10行
[root@localhost 桌面]# more -10 a.txt
-
从第5行开始分压显示文件内容
[root@localhost 桌面]# more +5 a.txt
grep:文本搜索工具
global search regular expression and print out the line的缩写
用于全面搜索的正则表达式,并将结果输出。人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选
语法:grep 参数 文件名
常用参数
参数 | 描述 |
---|---|
-b | 显示匹配行距文件头部的偏移量 |
-c | 只显示匹配的行数 |
-E | 支持扩展正则表达式 |
-F | 匹配固定字符串的内容 |
-h | 搜索多文件时不显示文件名 |
-i | 忽略关键词大小写 |
-l | 只显示符合匹配条件的文件名 |
-n | 显示所有匹配行及其行号 |
-o | 显示匹配词距文件头部的偏移量 |
-q | 静默执行模式 |
-r | 递归搜索模式 |
-s | 不显示没有匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 精准匹配整词 |
-x | 精准匹配整行 |
vim编辑器:操作文件
vim介绍
vim是vi的高级版本,由vim-enhanced软件包提供
操作键盘次数少,不依赖鼠标,可适用于多unix系统
gvim:vim的图形化版本,在vim-x11包里
vim和vi的区别:
vim比vi多了色彩提示,有基本的命令提示,支持的字符集和命令比vi多
vim命令的常用参数
参数 | 描述 |
---|---|
-b | 使用二进制模式 |
-c | 加载文件后执行指定命令 |
-e | 使用ex底层编辑模式 |
-m | 不允许修改内容 |
-n | 不使用交换分区,强制使用内存 |
-N | 使用非兼容模式 |
-o | 打开指定数量的窗口 |
-p | 打开指定数量的标签页 |
-r | 显示交换文件 |
-R | 使用只读模式 |
-s | 静默执行模式 |
-T | 设置使用指定终端 |
-u | 强制使用vimrc |
-v | 使用vi编辑模式 |
-w | 写入脚本输出文件 |
-x | 对文件进行加密 |
-y | 使用简易模式 |
-Z | 使用受限模式 |
+数字 | 从指定行开始 |
--help | 显示帮助信息 |
--noplugin | 不加载插件脚本 |
--version | 显示版本信息 |
使用示例
-
创建文件a.txt,并进行编写操作,如果已创建则打开
[root@lyy my_files]# vim a.txt
-
打开a.txt文件,并将光标移到第六行
[root@lyy my_files]# vim +7 a.txt
-
以自读的模式进入a.txt
[root@lyy my_files]# vim -R a.txt
vim的四种模式
分别是:
- 命令模式
- 插入模式
- 末尾模式
- 可视模式
使用vim命令操作文件时,最开始的模式就是命令模式
在命令模式下按 i 可以进入插入模式,按esc键从插入模式退出到命令模式;
在命令模式下按 : 可进入末行模式,按enter键从末行模式退出到命令模式
在命令模式下按 v 可以进入可视模式,再按v从可视模式退出到命令模式。
命令模式
移动光标
- 光标方向移动:小键盘旁边的四个箭头按键,分别进行上下左右操作
- 翻页:
- 向下翻页:
Ctrl+F
或Page Down
- 向上翻页:
Ctrl+B
或Page Up
- 向下翻页:
- 单行内跳转:
- 跳到行首:
^
、数字0
、Home
键 - 跳到行尾:
$
、End
键
- 跳到行首:
- 文件内多行跳转:
- 跳转到文件的首行:
gg
- 跳转到文件的尾行:
G
- 跳转到指定行:
dG
(d是一个整数,表示要跳转的行数)
- 跳转到文件的首行:
复制粘贴
-
删除:
- 删除光标处的单个字符:
x
或Delete
- 删除光标所处行,并进入插入模式:
cc
- 删除从光标之前到行首的所有字符:
d^
- 删除从光标开始到行尾的所有字符:
d$
- 删除从光标开始到词尾(单词)的所有字符:
dw
- 删除光标处的单个字符:
-
剪切:
- 剪切当前光标所在行:
dd
- 从当前光标开始,向下剪切指定的行数:
Ndd
(N是一个整数,表示要剪切的行数)
- 剪切当前光标所在行:
-
复制:
- 复制当前行:
yy
- 从当前行开始,向下复制N行:
Nyy
(N是一个大于等于3的整数,表示要复制的行数,包括当前行) - 将start行到end行的内容复制到dest行以下:
:start, end copy dest
(start、end、dest都表示一个整数,表示行号)
- 复制当前行:
-
移动:
- 将start行到end行的内容移动到dest行以下:
:start, end m dest
(start、end、dest都表示一个整数,表示行号)
- 将start行到end行的内容移动到dest行以下:
-
粘贴:
- 粘贴到光标位置之后:
p
(小写p) - 粘贴到光标位置之前:
P
(大写P)
- 粘贴到光标位置之后:
查找文件中的字符
命令 | 描述 |
---|---|
/word | 从上至下在文件中查找字符串“word” |
?word | 从下至上在文件中查找字符串“word” |
n | 定位下一个被查找的字符串 |
N | 定位上一个被查找的字符串 |
可以使用:nohlsearch
命令取消高亮
撤销
命令 | 描述 |
---|---|
u | 按一次撤销一次最近的操作 |
U | 撤销光标所在行的更改 |
Ctrl+r | 取消最后一次的撤销操作 |
. | 重复操作 |
插入模式
在命令模式下按以下键进入插入模式
命令 | 描述 |
---|---|
i | 光标左边插入文本 |
a | 光标右边插入文本 |
o | 光标所在行的下一行插入新行 |
I | 在行首插入文本 |
A | 在行尾添加文本 |
O | 光标所在行的上一行插入新行 |
末行模式
保存和退出
-
保存文件
- 保存当前文件:
:w
- 另存为其他文件:
:w /root/my_dir/aaa.txt
(/root/my_dir为路径,aaa.txt为另存为的文件名)(如果该文件已存在,则在w后面加上:!,强制执行) - 把m到n行的内容另存到指定文件中:
:m,nw /root/my_dir/b.txt
(m和n为整数,表示行号。/root/my_dir为路径。b.txt为另存为的文件名)(如果该文件已存在,则在w后面加上:!,强制执行)
- 保存当前文件:
-
退出vim
- 没有修改文件内容时退出:
:q
(如果修改过文件内容这无法使用该命令退出) - 强制退出:
:q!
(即使修改文件了也可以退出,但是不会保存修改的内容) - 保存并退出:
:wq
- 强制保存并退出:
wq!
- 没有修改文件内容时退出:
查找和替换
命令 | 描述 |
---|---|
😒 /old/new | 将当前行中查找到的第一个"old"字符串替换为"new" |
😒 /old/new/g | 将当前行中查到的所有"old"字符串替换为"new" |
:m,n s/old/new/g | 将行号:[m,n] 范围内所有的字符串"old"替换为"new" |
:% s/old/new/gi | 将整个文件范围内的"old"字符串替换为“new” |
😒 /old/new/c | 在替换命令末尾加上c命令,会在替换前提示用户进行确认 |
显示行号
- 显示行号:
:set nu
- 取消显示行号:
:set nonu
显示控制字符
- 显示控制字符:
:set list
- 取消显示控制字符:
:set nolist
取消文件中的高亮
:nohlsearch
可视模式
用来模拟鼠标选中指定区域的功能,与下面windows中用鼠标选中是一样的
命令 | 描述 |
---|---|
v(小写) | 可视(选中想要的区域) |
V(大写) | 行可视(只允许选中整行) |
Ctrl+v | 块可视(可以选中中间的区域) |
使用:可以对选中的区域进行复制、删除、剪切等等操作
可视:按v(小写)进入
下面白色部分就是被选中的部分,与windows中用鼠标选中一模一样
使用上下箭头选中行,左右箭头选择当前行的列数
行可视:按V(大写)进入
与上面相比,这里有一定的限制,就是选中的时候只能选中一整行的
也就是只有上下箭头有用,左右箭头没用
块可视:Ctrl+v进入
可以选中一块区域,使用上下左右键控制行和列
vim:交换文件
本地文件系统都是有锁的,不能多次同时打开同一个文件
在使用vim打开一个文件后,系统会创建一个副本,例如打开a.txt文件,那么则会在文件所在的路径创建 .a.txt.swp 的副本文件,也叫交换文件
当我们正常使用:wq退出vim时,系统会用副本替换原来的文件
但是如果没有正常退出文件,例如突然断电、断网以及用户的不合法行为,交换文件和原文件共存时,再用vim打开文件就会如下错误:
直接按D删除交换文件,或者按R恢复
交换文件属于隐藏文件,需要使用:ls -a
命令才能查看