1 Linux文件
1.1 概述
Linux系统是一种典型的多用户系统,不同用户有不同的权限。
为保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
1.2 文件命令
1.2.1 创建空文件
touch 文件名
1.2.2 文本编辑器
vi命令,vi是一个功能强大的全屏幕文本编辑工具,一直以来都作为类UNIX操作系统的默认文档编辑器,vim是vi文本编辑器的增强版本,在vi编辑器的基础上扩展了很多实用的功能。
1. vi编辑器的工作模式
在vi/vim编辑界面中可以使用三种不同的工作模式,即命令模式、输入模式和末行模式,在不同的模式中能够对文件进行的操作也不相同
命令模式:使用vi/vim 编辑文件时,默认处于命令模式。此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,字符串查找,还可以对文件内容进行复制、粘贴、删除等操作
输入模式:在输入模式下,该模式中主要的操作就是录入文件内容,可以对文本文件正文进行修改或添加新的内容,类似于在 Windows 系统的文档中输入内容。
使 vi/vim 进入输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等指令
处于输入模式时,vi编辑器的最后一行会出现”—INSERT--”的状态提示信息。当编辑文件完成后按 Esc 键即可返回命令模式
末行模式:末行模式用于对文件中的指定内容执行保存文件、退出编辑器,以及对文件内容进行查找、替换等操作。
切换到末行模式的方法是在命令模式状态下按“:”键,此时vi窗口的左下方出现一个“:”符号。
2. 命令模式中的基本操作
1) 模式切换
- a:在当前光标位置之后插入内容
A:在光标所在行的末尾(行尾)插入内容
i:在当前光标位置之前插入内容
l:在光标所在行的行首开始插入
o:在光标所在行的后面插入一个新行
O:在光标所在行的前面插入一个新行
2) 行内快速跳转
按“home”键或“^”键,数字0键将光标快速跳转到本行的行首
按”End”键或”$”键将光标快速跳转到本行的行尾
3) 行间快速跳转
使用按键命令1G或者gg可跳转到文件内容的首行
使用按键命令G可跳转到文件的最后一行
使用按键命令#G可跳转到文件中的第#行(“#”号用具体数字代替)
在末行模式中输入 “:set nu”命令即可显示行号,”:set nonu”取消行号
4)复制、粘贴和删除
①删除操作
按x键或Delete键删除光标处的单个字符
按键命令“dd“删除光标当前所在的行,使用#dd的形式还可以删除从光标处开始的#行内容,#用数字来代替
按键命令d^删除当前光标之前到行首的所有字符
按键命令d$删除当前光标处到行尾的所有字符
②复制和粘贴操作
按键命令yy复制当前行整行的完整内容,使用#yy的形式还可以复制光标处开始的#行内容(#行用数字代替)
按p键将缓冲区中的内容粘贴到光标位置处之后,按P键则会粘贴到光标位置处之前
5) 查找文件内容、撤销编辑
在命令模式下按/键后可以输入指定的字符串,从当前光标处开始向后进行查找(按?键向前查找),完成查找后按n、N键在不同的查找结果中进行选择
按键u、U对操作撤销,u键用于取消最近一次的操作,可以多次重复按u键恢复已进行的多步操作,U键命令用于取消对当前行所做的所有编辑
在命令模式下,保存退出vi编辑器时,使用按键命令ZZ
6) 末行模式的基本操作
在命令模式中按”:”键可以切换到末行模式,vi编辑器的最后一行中将显示“:”提示符,用户可以在该提示符后输入特定的末行命令,完成如保存文件、退出编辑器、打开新文件、读取其他文件内容及字符串替换等丰富的功能操作。
①保存文件及退出vi编辑器
对文件内容进行修改并确认后,可以执行“:w”进行保存,但不退出vi编辑器。
:w
另存为其它文件,需要指定新的文件名,必要时还可以指定文件路径。把当前编辑的文件另存到/root目录下,文件名为newfile
:w /root/newfile
未修改退出,若文件内容已经修改却没有保存,则q命令将无法成功退出。这时候需要使用q!命令强行不保存退出
保存并退出
:wq或 :x!
②打开新文件或读入其他文件内容
打开新的文件进行编辑。在当前vi编辑器中,执行“:e 新的文件”形式的末行命令可以编辑(edit)新文件。
在当前文件中读入其他文件内容,执行 “:r 其他文件“形式的末行命令可以读入(read)其他文件中的内容,并将其复制到当前光标所在的位置。
③替换文件内容
在vi编辑器的末行模式中,能够将文件中特定的字符串替换成新的内容,当需要大批量修改同一内容时,使用替换功能将大大提高编辑效率。使用替换功能时的末行命令格式如下:
:[替换范围] sub/旧的内容/新的内容[/g]
注:在上述替换格式中,主要关键字为sub,也可以简写为s,替换范围是可选部分,默认时只对当前行的内容进行替换,一般可以表示为以下两种形式。
% 在整个文件内容中进行查找并替换
n,m在指定行数范围内的文件内容中进行查找并替换
替换格式中末尾的“/g”部分也是可选项内容,表示对替换范围内每一行的所有匹配内容都进行替换,省略“/g”时将只替换每行中的第一个匹配内容。
命令 | 功能 |
:s /old/new | 将当前行中查找到的第一个字符“old” 串替换为“new” |
:s /old/new/g | 将当前行中查找到的所有字符串“old” 替换为“new” |
:n,m s/old/new/g | 在行号“n,m”范围内替换所有的字符串“old”为“new” |
:% s/old/new/g | 在整个文件范围内替换所有的字符串“old”为“new” |
:s /old/new/c | 在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认 |
1.2.3 查看文件内容
1) cat命令,显示文件的内容
cat 文件名
# -n:文件中每一行都会显示行号。
cat -n 文件名
2) more和less命令,分页查看文件内容
使用“more”命令查看超过一屏的文件内容时,将进行分屏显示,并在下面的左下角显示当前内容在这个文件中的百分比,在阅读时可以按Enter键向下滚动查看,按Space键可以向下翻一屏,按“q”键退出并返回原来的命令环境
more 文件名
less命令使用方法与more命令基本类似,但是比more更好的是,既可以向下翻页也可以向上翻页,而“more”命令只能向下翻页,不能向上翻页
less 文件名
3) head和tail命令,查看文件开头或末尾的部分内容
head命令显示文本开头默认10行 “-n”选项指定需要显示多少行的内容
head 文件名
# -n 指定行数
tail命令默认显示文本末尾10行,此命令一般适用于查看日志文件(因为较新的日志记录总是添加到文件最后),这时候需要配合“-f”选项跟踪文件尾部内容的动态更新,便于实时监控文件内容的变化。tail -f=tailf
tail 文件名
1.2.4 统计和检索文件内容
1)wc命令,统计文件内容中的单词数量、行数等信息,使用文件名作为参数,可以同时统计多个文件。
wc 文件名
# -c:统计文件内容中的字节数
# -l:统计文件内容中的行数
# -w:统计文件内容中的单词个数(以空格或指标位作为分隔)
2)grep命令,检索、过滤文件内容
grep:目的是过滤出用户感兴趣的内容
语法:grep [选项] 模式或关键字 文件列表
grep 模式/关键字 文件名
# -i 忽略大小写
# -v 取反 过滤出不包含关键字的行
# ^ 以某关键字开头
# $ 以某关键字结尾
# ^$ 空行 显示非注释行和非空行
# -c count, 统计匹配到的行数
# -l 一般和-r联用, 只显示包含关键字的文件的名字, 而不是显示文件内容
# -r 递归检索
# -n 显示匹配行的行号
例:
1.3 文件基本属性
在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:
- chown (change owner) : 修改所属用户与组。
- chmod (change mode) : 修改用户的权限。
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组
- 当为 d 则是目录
- 当为 - 则是文件;
- 若是 l 则表示为链接文档(link file);
- 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
从左至右用 0-9 这些数字来表示。
第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;
第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所属组的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
对于 root 用户来说,一般情况下,文件的权限对其不起作用。
- chown命令,更改文件属主,属组;
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
- chmod命令,更改文件的属性
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。
先复习一下刚刚上面提到的数据:文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
- r:4
- w:2
- x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:
-rwxrwx--- 分数则是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= --- = 0+0+0 = 0
- 所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:
- chmod [-R] xyz 文件或目录
选项与参数:
- xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
- -R : 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更
举例来说,如果要将 anaconda-ks.cfg 这个文件所有的权限都设定启用,那么命令如下:
还有一个改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:
- user:用户
- group:组
- others:其他
那么我们就可以使用 u, g, o 来代表三种身份的权限。
此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:
chmod | u g o a | +(加入) -(除去) =(设定) | r w x | 文件或目录 |
如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:
而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限,则: