文件操作
1. 操作目录
mkdir
:创建空白的目录,mkdir <选项> 目录
# -p: 同时创建多个目录和子目录 $ mkdir -p New_Dir/Sub_Dir/Under_Dir
rmdir
:删除空目录,rmdir 目录
若要删除非空目录,使用
rm -r dir
。pwd
:输出当前工作目录,pwd <选项>
cd
:切换工作路径,cd <目录名称>
参数 作用 cd
切换到当前用户家目录 cd ~
切换到当前用户家目录 cd ~username
切换到其他用户的家目录 cd -
返回到上一次所处的目录 cd ..
进入上级目录 ls
:显示目录中的文件信息(按字母排序且按列排序而不是排行),ls <选项> <文件名>
参数 作用 -F
区分文件和目录:目录后加了斜杠 /
,可执行文件后加了星号*
-a
显示全部文件(含隐藏文件) -i
显示 inode 编号(内核分配给文件系统中每一个对象的标识数字) -R
递归选项 -l
长格式输出,可显示属性、大小等详细信息 -d
查看目录属性信息 ls -l
的长输出中每一行都包含了关于文件的下述信息:- 文件类型,如目录 d、文件-、字符型文件 c、块设备 b
- 文件的权限
- 文件的硬链接总数
- 文件属主的用户名
- 文件属组的组名
- 文件的大小(以字节为单位)
- 文件的上次修改时间
- 文件名或目录名
制表键自动补全允许在输入文件名或目录名时按一下 Tab 键,让 shell 帮忙将内容补充完整。
2. 文件属性信息
file
:查看文件的类型,file 文件名
stat
:查看文件的具体存储、时间等信息,stat <文件>
wc
:统计指定文本的行数、字数、字节数,wc <选项> 文本
选项 作用 -l
只显示行数 -w
只显示单词数 -c
只显示字节数
3. 读取文件
3.1 读文件
cat
:查看纯文本文件(内容较少的),cat <选项> <文件>
参数 作用 -n
显示行号 -b
只给有本文的行加上行号 -T
禁止制表符出现 more
:查看纯文本文件(内容较多的),more <选项> 文件
。more
命令只支持文本文件中的基本移动,若要更多高级功能,尝试less
命令less
:less is more,实则是more
的加强版head
:查看纯文本文件的前 num 行,head <选项> <num> <文件>
参数 作用 num
num 为显示的行数,默认为 10 -n
显示行号 tail
:查看纯文本文件的后 num 行或持续刷新内容,tail <选项> <num> <文件>
参数 作用 num
num 为显示的行数,默认为 10 -n
显示行号 -f
持续刷新一个文件的内容
3.2 搜索
grep
:在文本中执行关键词搜索,输出包含了匹配模式的行,grep <option> pattern file
option | 作用 |
---|---|
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有“关键词”的行 |
grep
命令是用途最广泛的文本搜索匹配工具。其实最常用的参数只有两个,-n
和-v
。
默认情况下,grep命令用基本的Unix风格正则表达式来匹配模式。
4. 编辑文件
4.1 编辑器
Linux 中常用的编辑器有:
- vim
- nano
- emacs
- KDE series
- GNOME:GNOME 项目为程序员提供了一个简单的文本编辑器 gedit,Unity 桌面环境都带有 gedit,它是一个基本的文本编辑器,同时提供了一些高级功能,如代码高亮和行编号,开发人员还开发了更多高级插件,如一个拼写检查器、一个终端仿真器、一个文件浏览器。
4.2 vim 文本编辑器
概述
vi编辑器是Unix系统最初的编辑器,它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。在GNU项目将vi编辑器移植到开源世界时,他们决定对其作一些改进。由于它不再是以前Unix中的那个原始的vi编辑器了,开发人员也就将它重命名为vi improved,或vim。
每次运行 vim 编辑器时默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作,而每次编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。在 vim 中,无法直接从输入模式切换到末行模式。vim 的三种模式如下:
- 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作
- 输入模式:正常的文本录入
- 末行模式:保存或退出文档,以及设置编辑环境,还可以让用户执行外部的 LINUX 命令或跳转到所编写文档的特定行数
从命令模式切换到输入模式的a\i\o键
不完全相同:
- i 键是在光标当前位置切换到输入模式;
- a 键是在光标后面一位切换到输入模式;
- o 键是在光标的下面创建一个新的空行来切换到输入模式。
命令模式
命令模式中最常用的一些命令。
编辑类命令:
命令 | 作用 |
---|---|
x | 删除当前光标所在位置的字符 |
dw | 删除当前光标所在位置的单词 |
d$ | 删除当前光标所在位置至行尾的内容 |
dd | 删除(剪切)光标所在整行 |
5dd | 删除(剪切)从光标处开始的 5 行 |
u | 撤销前一编辑命令 |
yy | 复制光标所在整行 |
5yy | 复制从光标处开始的 5 行 |
u | 撤销上一步的操作 |
p | 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
查找/替换类命令(替换类命令实际上属于末行模式的命令):
命令 | 作用 |
---|---|
/xxx | 从当前光标所在位置开始,由上至下查找某个文本xxx |
?xxx | 从当前光标所在位置开始,由下至上查找某个文本xxx |
n | 显示搜索命令定位到的下一个字符串(也可再次按下斜杠后按回车键) |
N | 显示搜索命令定位到的上一个字符串 |
:s/old/new | 将当前光标所在行的第一个 old 替换成 new (替换命令的基本模式) |
:s/old/new/g | 替换当前行所有 old |
:n,ms/old/new/g | 替换行号n和m之间所有old |
:%s/old/new/g | 替换整个文件中的所有 old |
:%s/old/new/gc | 替换整个文件中的所有old,但在每次出现时提示 |
末行模式
末行模式中可用的命令:
命令 | 作用 |
---|---|
:w | 保存 |
:q | 退出 |
:q! | 强制退出(放弃对文档的修改内容) |
:wq! | 强制保存退出 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:命令 | 执行该命令 |
:整数 | 跳转到该行 |
5. 操作文件
touch
:创建空白文件或设置文件的时间,touch <选项> <文件>
选项 作用 -a
仅修改“读取时间”(atime) -m
仅修改“修改时间”(mtime) -d
同时修改 atime 和 mtime cp
:复制文件或目录,cp <选项> 源文件 目标文件
参数 作用 -p
保留原始文件的属性 -d
若对象为“链接文件”,则保留该链接文件的属性 -R
递归持续复制(用于目录) -i
若目标文件存在则询问是否覆盖,最好每次都带上这个选项 -a
相当于 -pdr
在 LINUX 中,复制操作具体分为 3 种情况:
- 如果目标文件是目录,则会把源文件复制到该目录中;
- 如果目标文件也是普通文件,则会询问是否要覆盖它;
- 如果目标文件不存在,则执行正常的复制操作。
mv
:move, 移动(剪切)文件或将文件重命名,mv <选项> 源文件 <目标路径|目标文件名>
。mv
命令不会影响 inode 编号和时间戳。参数 作用 -i
试图覆盖时进行提示 如果在同一个目录中对一个文件
mv
操作意味着重命名:命令 作用 mv fall fzll
重命名 mv fzll Pictures/
移动 mv /home/christine/Pictures/fzll /home/christine/fall
移动并重命名 rm
:remove, 删除文件或目录,rm <选项> 文件
参数 作用 -i
删除确认提示 -f
取消确认删除提醒,强制删除 -r
或-R
删除整个目录及其内文件 - bash shell 中没有回收站,文件一旦删除就无法再找回。因此,应养成总是加入
-i
的好习惯。 rm -i f?ll
删除匹配f?ll
的文件
- bash shell 中没有回收站,文件一旦删除就无法再找回。因此,应养成总是加入
tr
:替换文本文件中的字符,tr <原始字符> <目标字符>
参数 作用 cat <文件名> | tr [a z] [A Z]
把整个文本替换为大写 diff
:比较多个文本文件的差异,diff <参数> 文件
参数 作用 --brief
确认两个文件是否不同 -c
详细比较出多个文件的差异之处 cut
:按列提取文本字符,cut <参数> 文本
mktemp
:Linux系统有特殊的目录,专供临时文件使用。Linux使用/tmp
目录来存放不需要永久保留的文件,大多数Linux发行版配置了系统在启动时自动删除/tmp
目录的所有文件,系统上的任何用户账户都有权限在读写/tmp
目录中的文件。这个特性为你提供了一种创建临时文件的简单方法,而且还不用操心清理工作。- 这里相关的是
mktemp
命令 - 使用
mktemp
命令创建文件时,需要指定的是文件模板的名字,而不是文件的名字。所谓模板,只要在任意文本的文件名末尾加上6个X就行了。
命令 作用 mktemp testing.XXXXXX
在当前路径下创建一个临时文件 mktemp -t test.XXXXXX
-t
选项会强制mktemp
命令来在系统的临时目录来创建该文件mktemp -d dirTest.XXXXXX
-d
选项告诉mktemp
命令来创建一个临时目录而不是临时文件- 这里相关的是
6. 查找文件
find
:按照指定条件查找文件,find <查找路径> 寻找条件 操作
参数 作用 -name
匹配名称 -perm
匹配权限(mode 为完全匹配,-mode 为包含即可) -user
匹配所有者 -group
匹配所有组 -mtime -n +n
匹配修改内容的时间(-n 指 n 天以内,+n 指 n 天以前) -atime -n +n
匹配访问文件的时间 -ctime -n +n
匹配修改文件权限的时间 -nouser
匹配无所有者的文件 -nogroup
匹配无所有组的文件 -newer f1 !f2
匹配比文件 f1 新但比 f2 旧的文件 --type b/d/c/p/l/f
匹配文件类型(b/d/c/p/l/f 依次表示块设备、目录、字符设备、管道、链接文件、文本文件) -size
匹配文件的大小(+50KB 为查找超过 50KB 的文件,-50KB 为查找小于 50KB 的文件) -prune
忽略某个目录
7. 打包压缩
7.1 tar
目前,Linux 上最广泛使用的归档工具是tar
命令。
在 LINUX 系统中常见的压缩类型比较多,其中主要使用 .tar 或 .tar.gz 或 .tar.bz2 格式,这些格式大部分都是由 tar
命令来生成的。
下载了开源软件之后,你经常看到文件名以 .tgz 结尾,这些是 gzip 压缩过的 tar 文件,可以用 tar -zxvf filename.tgz
来解压。
对文件进行打包压缩或解压:tar <option> <file>
非常推荐使用
-v
参数向用户不断显示压缩或解压的过程。
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-f | 目标文件名 |
-C | 指定解压到的目录 |
-P | 使用绝对路径来压缩 |
-p | 保留原始的权限与属性 |
-v | 显示压缩或解压的过程 |
-z | 用 Gzip 压缩或解压 |
-j | 用 bzip2 压缩或解压 |
命令示例 | 说明 |
---|---|
tar -cvf test.tar test/ test2/ | 创建名为 test.tar 的归档文件,含有 test 和 test2 目录的内容 |
tar -tf test.tar | 查看 test.tar 的内容 |
tar -xvf test.tar | 提取 test.tar 的内容 |
7.2 zip
安装 zip/unzip 命令:
yum install -y zip unzip
- 压缩:
zip -r html.zip /home/html
- 解压:
unzip html.zip
由于 windows 目录字符集是默认的中文字符集,解压后会有乱码,故而需要加参数:unzip -O CP936 html.zip
。
8. 创建链接
在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index) 。
在 Linux 中有两种类型的链接:符号链接(symbolic link) 与 硬链接(hard link) 。
8.1 符号链接
符号链接/软链接——符号链接文件类似于 Windows 的快捷方式。
符号链接就是一个实实在在的文件,只不过它存储的内容是另一个文件的位置信息。
比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
显示在长列表中符号文件名后的
->
符号表明该文件是一个符号链接。因此能链接目录文件,也可以跨越文件系统进行链接,同 Windows 系统中的快捷方式。
千万别创建软链接文件的软链接,这会形成混乱的链接链,不仅容易断裂,还会造成各种麻烦。
8.2 硬链接
硬链接——硬连接指通过索引节点来进行连接。
在 Linux 中,允许多个文件名指向同一索引节点。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的“平等”关系,删除其中任何一个都不会影响另外一个的访问。
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。
其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
由于技术的局限性,我们不能跨分区对目录文件进行链接。
只能对处于同一存储媒体的文件创建硬链接,不同存储媒体的文件之间只能使用符号链接。
8.3 shell 命令
如果使用 cm
命令复制一个文件,而该文件已经被链接到了另一个源文件上,那么你得到的其实是源文件的一个副本。
创建链接文件的 shell 命令:ln <option> source_file created_file
option | function |
---|---|
-s | 创建“符号链接”(若不带 -s 参数,则默认创建硬链接) |
-f | 强制创建文件或目录的链接 |
-i | 覆盖前先询问 |
-v | 显示创建链接的过程 |