Linux基础教程(三)文件

文件权限概念

把用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。

使用 ls 查看一个文件时,会显示一个文件的信息,例如 `drwxr-xr-x. 3 root root 17 May 6 00:14 .config`,对这个信息的解释如下:

– drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段。
– 3:链接数;
– root:文件拥有者;
– root:所属群组;
– 17:文件大小;
– May 6 00:14:文件最后被修改的时间;
– .config:文件名。

常见的文件类型及其含义有:

– d:目录;
– -:文件;
– l:链接文件;

9 位的文件权限字段中,每 3 个为一组,共 3 组,每一组分别代表对文件拥有者、所属群组以及其它人的文件权限。一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行。

文件属性以及权限的修改

1. 修改文件所属群组

# chgrp [-R] groupname dirname/filename
-R:递归修改

2. 修改文件拥有者

不仅可以修改文件拥有者,也可以修改文件所属群组。

# chown [-R] 用户名:群组名 dirname/filename

3. 修改权限

可以将一组权限用数字来表示,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的权值为 4、2、1,即每个权限对应的数字权值为 r : 4、w : 2、x : 1。

# chmod [-R] xyz dirname/filename

范例:将 .bashrc 文件的权限修改为 -rwxr-xr–。

# chmod 754 .bashrc

也可以使用符号来设定权限。

# chmod [ugoa]  [+-=] [rwx] dirname/filename
- u:拥有者
- g:所属群组
- o:其他人
- a:所有人
- +:添加权限
- -:移除权限
- =:设定权限

范例:为 .bashrc 文件的所有用户添加写权限。

# chmod a+w .bashrc

目录的权限

文件名不是存储在一个文件的内容中,而是存储在一个文件所在的目录中。因此,拥有文件的 w 权限并不能对文件名进行修改。

目录存储文件列表,一个目录的权限也就是对其文件列表的权限。因此,目录的 r 权限表示可以读取文件列表;w 权限表示可以修改文件列表,具体来说,就是添加删除文件,对文件名进行修改;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。

文件默认权限

– 文件默认权限:文件默认没有可执行权限,因此为 666,也就是 -rw-rw-rw- 。
– 目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为 777 ,也就是 drwxrwxrwx。

可以通过 umask 设置或者查看文件的默认权限,通常以掩码的形式来表示,例如 002 表示其它用户的权限去除了一个 2 的权限,也就是写权限,因此建立新文件时默认的权限为 -rw-rw-r– 。

目录配置

为了使不同 Linux 发行版本的目录结构保持一致性,Filesystem Hierarchy Standard (FHS) 规定了 Linux 的目录结构。最基础的三个目录如下:

– / (root, 根目录)
– /usr (unix software resource):所有系统默认软件都会安装到这个目录;
– /var (variable):存放系统或程序运行过程中的数据文件。

文件时间

1. modification time (mtime):文件的内容更新就会更新;
2. status time (ctime):文件的状态(权限、属性)更新就会更新;
3. access time (atime):读取文件时就会更新。

文件与目录的基本操作

1. ls

列出文件或者目录的信息,目录的信息就是其中包含的文件。

# ls [-aAdfFhilnrRSt] file|dir
-a :列出全部的文件
-d :仅列出目录本身
-l :以长数据串行列出,包含文件的属性与权限等等数据

2. cp

复制操作。

如果源文件有两个以上,则目的文件一定要是目录才行。

cp [-adfilprsu] source destination
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明
-d :若来源文件为链接文件,则复制链接文件属性而非文件本身
-i :若目标文件已经存在时,在覆盖前会先询问
-p :连同文件的属性一起复制过去
-r :递归持续复制
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了

3. rm

移除操作。

# rm [-fir] 文件或目录
-r :递归删除

4. mv

移动操作。

# mv [-fiu] source destination
# mv [options] source1 source2 source3 .... directory
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖

获取文件内容

1. cat

取得文件内容。

# cat [-AbEnTv] filename
-n :打印出行号,连同空白行也会有行号,-b 不会

2. tac

是 cat 的反向操作,从最后一行开始打印。

3. more

可以一页一页查看文件内容,和文本编辑器类似。

4. less

和 more 类似。

5. head

可以取得文件前几行。

# head [-n number] filename
-n :后面接数字,代表显示几行的意思

6. tail

是 head 的反向操作,只是取得是后几行。

7. od

可以以字符或者十六进制的形式显示二进制文件。

8. touch

修改文件时间或者建立新文件。

# touch [-acdmt] filename
-a : 更新 atime
-c : 更新 ctime,若该文件不存在则不建立新文件
-m : 更新 mtime
-d : 后面可以接更新日期而不使用当前日期,也可以使用 --date="日期或时间"
-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]

指令与文件搜索

1. which

指令搜索。

# which [-a] command
-a :将所有指令列出,而不是只列第一个

2. whereis

whereis 搜索文件的速度比较快,因为它只搜索几个特定的目录。

# whereis [-bmsu] dirname/filename

3. locate

locate 可以用关键字或者正则表达式进行搜索。

locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。

# locate [-ir] keyword
-r:接正则表达式

4. find

find 可以使用文件的属性和权限进行搜索。

# find [basedir] [option]
example: find . -name "shadow*"

(一)与时间有关的选项

-mtime  n :列出在 n 天前的那一天修改过内容的文件
-mtime +n :列出在 n 天之前 (不含 n 天本身) 修改过内容的文件
-mtime -n :列出在 n 天之内 (含 n 天本身) 修改过内容的文件
-newer file : 列出比 file 更新的文件

+4、4 和 -4 的指示的时间范围如下:

(二)与文件拥有者和所属群组有关的选项

-uid n
-gid n
-user name
-group name
-nouser :搜索拥有者不存在 /etc/passwd 的文件
-nogroup:搜索所属群组不存在于 /etc/group 的文件

(三)与文件权限和名称有关的选项

-name filename
-size [+-]SIZE:搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有:c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k
-type TYPE
-perm mode  :搜索权限等于 mode 的文件
-perm -mode :搜索权限包含 mode 的文件
-perm /mode :搜索权限包含任一 mode 的文件
本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » Linux基础教程(三)文件

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多