Linux文件与目录管理技术

GO

0. 几个基本概念

- 绝对路径和相对路径

  • 绝对路径:由根目录写起的路径。如:/usr/local/mysql。
  • 相对路径:不是由根目录。写起的路径。如:../ 表示上一层路径,./ 表示本层路径。

1. 文件管理命令

- ls

ls (list)用于查看某个目录下有何文件。

常用选项 选项说明
无参数 列出目录下的文件和目录,不包含隐藏文件
-a 列出所有文件,包括隐藏文件,./ 和 ../
-l 列出详细信息(文件类型+文件所有者权限+属组权限+其它权限+inode数量+属主+属组+文件大小+mtime+文件名)
-d 针对目录的,只列出目录本身;如果不加-d,那么会列出目录下面的文件来
-h 自动以合适的方式显示文件的大小
-t 按时间的顺序排列文件(新的在上面)
-i 可查看文件的inode
-F 在文件末尾显示文件类型

- tree

  • tree 目录名:查看目录的树形显示
  • -C选项 :用来以不通颜色区别文件类型
  • -L 数字选项 :用来定义显示几级

- pwd

pwd (print working directory)用于查看当前所在路径。

常用选项 选项说明
-L(不加也可) 显示逻辑上的路径(默认)
-P 在查看链接文件时显示真正的路径,即不是链接文件的地址

- cd

cd (change directory,是shell的内置命令)用于更改文件路径。

常用参数 参数说明
无参数 直接到当前用户的家目录下
~username 进入username用户的家目录下
- 切换到上一次所在的目录
绝对或相对路径 到指定的目录下
  • 注意:cd 后面只能跟目录,如何跟文件会报错。

- mkdir

mkdir (make directory)用于创建目录。

格式为 mkdir [-mp] [目录名称]

常用选项 选项说明
-m 指定要创建目录的权限(不常用)
-p 可一次性创建多层的空的目录,否则一次只能创建一层目录。后面跟一个已存在的目录名时,它不会做任何事情,只是不报错而已
-v 可视化创建过程

说明:

  1. 若是所创建的目录和已存在的文件名字一样的话,会创建失败
  2. 可同时创建多个目录,只需在后面用空格隔开目录名即可

- rmdir

rmdir (remove directory)用于删除空的目录,后面可以是一个目录,也可以是多个目录(用空格隔开)。

常用选项 选项说明
-p 连续删除一连串空的目录
-v 可视化删除过程

注意:只能用来删除空的目录,否则会报错,即不能用来删除非空目录和删除文件。

- rm

rm (remove)用于删除文件或目录。

常用选项 选项说明
-r 删除目录时要加的选项
-i 交互式的进行删除工作,即问你是不是确定要删除(默认带着呢)
-f 强制安静删除,不用输入y或n来确认,且不再屏幕上显示任何信息,不论什么情况(比如目标文件不存在)

在写脚本时,我们会用绝对路径的形式/bin/rm,这是个危险的命令,需要谨慎操作!

- cp

cp (copy)用于复制文件或目录。

格式为 cp [选项] [来源文件] [目的文件]

常用选项 选项说明
-r 复制目录时要加的选项
-i 安全选项,交互式进行工作,若是遇到一个已存在的文件,会询问是否覆盖(默认带着呢)
-p 可把文件的权限页复制过去

- mv

mv (move)用于移动或重命名文件或目录。

格式为 mv [选项] [源文件或目录] [目标文件或目录]

情况 结果
目标文件是目录,但该目录不存在 重命名该目录
目标文件是目录,且该目录存在 移动该目录
目标文件是文件,但该文件不存在 重命名该文件
目标文件是文件,且该文件存在 会询问是否覆盖
常用选项 选项说明
-i 交互式的进行工作,即问你是不是确定要删除(默认带着呢)
-v 可视化过程

- touch

格式 touch filename

  1. 若文件存在,更改文件的三个time属性
  2. 若文件不存在,则会新建这个文件

- file

格式 file filename

用来查看文件的类型。


2. 文件内容查看命令

- cat

cat 用于查看一个文件的内容并将其显示在屏幕上。

常用选项 选项说明
-n 显示出行号
-A 显示所有的内容,包含特殊字符

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# cat test.txt
11111111111
22222222222
33333333333
55555555555
# cat -n test.txt
1 11111111111
2 22222222222
3 33333333333
4
5 55555555555
# cat -A test.txt
11111111111$
22222222222$
33333333333$
$
55555555555$

- tac

tac 是 cat 倒着写的,因此功能是把文件内容倒叙的方式显示在屏幕上。选项与cat相同。

- more

more 用于查看一个文件的内容。当文件内容太多而一屏不能全部显示时,会分页显示,由按键操作:

按键 说明
空格 向下一页(看完所有内容后会退出)
Ctrl+F 同空格
Ctrl+D 向上翻页
q 提前退出阅读

- less

less 作用与more相同,只是功能要多一些,是增强版的more。

按键 说明
空格 一屏一屏向下翻页
j 向下移动一行
k 向上移动一行
g 到第一行行首去
G 到最后一行行首去
Ctrl+B 向上翻
Ctrl+F 向下翻
PGUP 向上翻页
PGDN 向下翻页
q 退出

less和more都支持用 / (向下查找)或 ? (向上查找)来进行字符串的查找,并且按 n 查找下一个,按 N 反向查找下一个。

head 用于显示文件的前几行。(默认不加选项,会显示最先十行)

常用选项 选项说明
-n 数字 显示指定的前几行
-n数字 同上
-数字 同上

- tail

tail 和head类似,用于显示文件的最后几行内容。(默认不加选项,会显示最后十行)

常用选项 选项说明
-n 数字 显示指定的最后几行
-n数字 同上
-数字 同上
-f 如果文件内容不断地在增加,那么加上该选项就可以动态、实时地查看文件的内容。例如用的最多的:查看日志tail -f /var/log/messages

3. Linux文件属性

- 文件属性的意义

用命令 ls -l 查看当前目录下的文件时,共显示了9列内容(用空格分列),它们都代表着什么意思呢?如下表所示:

1
2
# ls -l test.txt
-rw-r--r-- 1 root root 49 8月 27 17:45 test.txt

列数 意义
1 包含该文件的类型、所有者所属组以及其他用户对该文件的权限
2 表示该文件所占用的节点(inode),如果是目录,则该数值与该目录下的子目录数量有关
3 该文件的所有者
4 该文件的所属主
5 该文件的大小
678 表示该文件最后一次被修改的时间(mtime),一次为月份、日期、时间
9 文件名

- Linux下文件的类型

在文件属性的第一列的第一个字符上我们可以看出该文件属于什么类型,主要有以下几种

字符 所代表的文件类型
- 普通文件
d 目录文件
l 链接文件
b 块设备文件,比如/dev/sda就是这样的文件
c 串行端口设备文件(又称字符设备文件),比如键盘、鼠标、打印机、tty终端等都是这样的文件
s 套接字文件(socket),用于进程间的通信
p 管道文件(与管道命令相关)

- Linux文件的权限

文件类型后面的9位为权限,每三个为一组,分别是文件的所有者(user)、所属组(group)和其他人(others)对该文件的权限。r 为可读权限,w 为可写权限,x 为可执行权限,- 为没有权限。另外,有的文件在最后还会有一个符号,一个点”.”或者是一个加号”+”。在CentOS 5的老版本中是没有这个的,这是因为新版本中的ls添加了SELinux或者ACL属性。如果文件或目录使用了SELinux context属性,这里会是一个点”.”;如果设置了ACL属性,这里会是一个加号”+”。(这个概念先了解即可)

- 文件的三种权限对文件的作用

对于文件来说,它的意义如下:

权限 意义
r Read 可读取此文件的实际内容,如读取文本文件的文字内容等
w Write 可以编辑、新增或者是修改该文件的内容(但不含删除该文件)
x eXecute 该文件具有可以被系统执行的权限

- 文件的三种权限对目录的作用

对于目录来说,它的意义如下:

权限 意义
r read contents in directory 具有读取目录结构列表的权限
w modify contents of directory 具有更改目录结构列表的权限,如新建文件与目录,删除已存在的文件或目录(不论它们是什么权限),将已存在的文件或目录重命名,转移该目录内的文件和目录
x access directory 决定用户能否进入该目录成为工作目录

- 文件的三种时间属性

时间属性 意义
atime access time 是在读取文件或执行文件时更改的
mtime modified time 是在写入文件时随文件内容的更改而更改的
ctime change time 是在写入文件、更改所有者、权限或链接设置时随inode内容的更改而更改的

- stat

stat 用于查看文件的三个时间属性。

格式 stat filename

- touch

格式 touch 已存在的文件名 用于更改文件的三个时间属性为当前时间

- inode中包含的元信息

具体说来有一下内容:

  1. 文件的字节数
  2. 文件拥有者的User ID
  3. 文件的Group ID
  4. 文件的读、写、执行权限
  5. 文件的时间戳,共有三个:
    • ctime
    • mtime
    • atime
  6. 链接数:即有多少文件名指向这个inode
  7. 文件数据block的位置

4. 更改文件的权限

- chgrp

chgrp 用于更改文件的所属组。(chown可以代替它)

格式为 chgrp [组名] [文件名]

常用选项 选项说明
-R 作用于目录,连同目录下的所有文件和子目录全部都更改

- chown

chown 用于更改文件的所有者,也可以更改所属组。

格式为 chown [-R] 账户名 文件名chown [-R] 账户名:组名 文件名

常用选项 选项说明
-R 作用于目录,递归(继承)更改,即连同目录下的所有文件和子目录全部都更改

- chmod

chmod 用于更改文件的权限。

格式为 chmod [-R] xyz 文件名 (其中xyz代表的数字)

Linux中也可用数字代表rwx的权限,具体规则为:r为4,w为2,x为1,-为0。u为所有者,g为所属组,o为其他人,a为全部人。+为增加权限,-为去除权限,=为设置权限。权限的设置就是上面各个符号的组合。

常用选项 选项说明
-R 作用于目录,递归更改权限,即连同目录下的所有文件和子目录全部都更改
-v 可视化工作过程

几个例子如下:

1
2
3
4
5
6
7
chmod u=rwx,go=rw test.txt
chmod ugo=rw test.txt
chmod a=rw test.txt
chmod a+x test.txt
chmod a-x test.txt
chmod 700 test.txt
chmod 655 test.txt

- umask

默认情况下,新建一个目录的权限值为755,新建一个普通文件的权限值为644,那么这个值是由谁来控制的呢?那就是 umask 了。

umask 用于改变文件的默认权限

格式为 umask xxxxxx在这里代表权限的三个数字)

几个例子如下:

1
2
umask # 查看umask的预设值
umask 0022 # 设置umask的值

- umask的作用原理

先了解以下两条规则:

  1. 若用户建立普通文件,则预设没有可执行权限,只有r、w两个权限,最大值为666(-rw-rw-rw-)
  2. 若用户建立目录,则预设所有权限均开放,即777(drwxrwxrwx)

umask值的作用原理便是在这两条规则上,设置上需要减去的规则数字。

需要注意的是,root的umask值通常为022,而一般用户通常为002。umask的值可以在/etc/bashrc里面更改。

- chattr

chattr 用于修改文件的特殊权限

格式为 chattr [+-=] [Asaci] [文件或者目录名](其中+、-、=分别表示增加、减少和设定)。各个选项的意义如下:

常用选项 选项说明
A 文件或目录的atime将不可修改
s 会将数据同步写入磁盘中
a 只能追加不能删除,非root用户不能设定该属性
c 自动压缩该文件,读取时自动解压
i 锁定文件,不能删除、重命名、设定链接文件、写入以及新增数据

上表中最最常用的两个选项就是 a 和 i。

- lsattr

lsattr 用于读取文件或目录的特殊权限

格式为 lsattr [-adR] 文件或目录名

常用选项 选项说明
-a 类似于ls的-a选项,即连同隐藏文件一同列出
-d 查看目录本身的特殊权限,而不是目录下文件的特殊权限
-R 连同子目录的数据一同列出

- Set UID、Set GID和Sticky Bit

前面介绍权限的时候其实一共是4位,我们一直都是用3位数,其实最前面还有一位,那就是代表SUID、SGID和SBIT这三个属性的。它们的意义如下:

  1. SUID:该权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限。比如,passwd这个命令就具有该权限。当普通用户执行passwd命令时,可以临时获得root权限,从而可以更改密码。
  2. SGID:该权限可以作用在文件上(二进制可执行文件),也可以作用在目录上。当作用在文件上时,其功能和 Set UID 类似,它会使文件在执行阶段具有文件所属组的权限。目录被设置这个权限后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
  3. SBIT:该权限只能作用于目录上。可以理解为防删除位。文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限。如果没有写权限,则这个目录下的所有问价都不能删除,同时也不能添加新的文件。如果希望用户能够添加文件但不能删除该目录下其他用户的文件,则可以对父目录增加该权限。设置该权限后,就算用户对该目录具有写权限,也不能删除其他用户的文件。例如,/tmp 目录就是设置了这个权限。

设置方法如下:

  1. SUID : chmod u[+-]s filenamechmod [40]*** filename
  2. SGID : chmod g[+-]s filenamechmod [20]*** filename
  3. SBIT : chmod o[+-]t filenamechmod [10]*** filename

说明:

  • 设置了以上的各个权限后,文件的相应权限位上的情况分别是:
    • SUID:所有者的可执行权限x变为了s;
    • SGID:所属组的可执行权限x变为了s;
    • SBIT:其他人的可执行权限变为了t。
  • 有时候可能会发现某个文件的相关属性位上的字母为S(大写)和T(大写),这是因为文件本身就不具备该身份的可执行权限,所以即使设置了这三个属性中的其中一种,也不会生效。

5. 文件搜索命令

- which

which 只能用来查找PATH环境变量中出现的路径下可执行文件。

格式:which command

说明:

  1. 在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。也就是说,使用which命令就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令
  2. cd用which是查不到的,因为cd 是bash的内置命令

- whereis

whereis 命令通过欲生成的一个文件列表库查找与给出的文件名相关的文件。类似于模糊查找,只要文件名中包含给定的字符串,就会列出来。这个命令很少用到

格式 whereis [-bms] [关键字]

常用选项 选项说明
-b 只查找二进制文件
-m 只查找帮助文件(在man目录下的文件)
-s 只查找源代码文件
-u 没有说明文档的文件

说明:

  1. 也是局限在某些目录下,只在以下几个目录中搜索:/bin 、/sbin、/sur/bin 、/usr/sbin、/usr/share/man/man1/ 等等。
  2. 只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s),如果省略参数,则返回所有信息。

- locate

locate 命令类似于whereis,也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里,后面直接跟文件名。

  • 如果Linux中没有这个命令,请安装mlocate软件包。yum install -y mlocate
  • 安装好mlocate后,要更新相关的库:updatedb (注意:这个操作会占用大量的服务器资源)
  • 可以在文件 /etc/updated.conf 中配置这个数据库额生成(或更新)规则。
  • locate 所搜索到的文件列表,不管是目录名还是文件名,只要包含该关键字,都会列出来,所以它不适合精确搜索,因此并不会被常用。

- find

find 用于精确查找某些符合给定条件的文件,功能非常强大。

格式 find 指定目录 指定条件 指定动作

  1. 指定目录:所要搜索的目录及其所有子目录。默认为当前目录。
  2. 指定条件:所有搜索的文件的特征。
  3. 指定动作:对搜索结果进行特定的处理。
常用参数 参数说明
-atime +n/-n 表示访问或执行时间大于或小于n天的文件
-ctime +n/-n 表示写入、更改inode属性(如更改所有者、权限或者链接)的时间大于或小于n天的文件
-mtime +n/-n/n 表示更改内容的时间大于、小于或等于n天的文件(该参数用的最多)
-mmin -n 表示在十分之之内更改内容的文件
-name filename 表示直接查找该文件名的文件(常用)
-type 类型符 表示通过文件类型查找文件。filestype包含了f、b、c、d、l、s等类型
在条件前加! 表示对条件进行取反
条件1 -o 条件2 在两个条件之间,-o表示或者,不加任何东西就是并且

注意:find命令可结合管道命令和通配符来配合使用

    • |xargs 命令
  1. -exec 命令 {} \; 不交互直接进行处理
  2. -ok 命令 {} \; 交互式地进行处理

6. 链接文件

- 硬链接

硬链接是再建立一个inode链接到文件放置的区块域,即进行硬链接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。

硬链接有两个限制:

  1. 不能跨文件系统,因为不同的文件系统有不同的inode table
  2. 不能链接目录

- 软链接

软链接相当于快捷方式。它与硬链接不同的是,软链接是建立一个独立的文件,当读取到这个链接文件时,它会把读取的行为转发到文件所链接的文件上。

- ln

ln 用于创建链接文件,即硬链接和软链接

格式 ln [-s] [来源文件] [目的文件]

说明:

  • ln的常用选项就是-s
  • 加上-s就是创建软链接
  • 不加-s就是创建硬链接

示例:

1
2
ln test test-hard //创建test的硬链接文件test-hard
ln -s test test-soft //创建test的软链接文件test-soft

OK

0%