Linux 文件系统简介
在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。
在 Linux 系统中有一个重要的概念:一切都是文件。其实这是 Unix 哲学的一个体现,而 Linux 是重写 UNIX 而来,所以这个概念也就传承了下来。在 UNIX 系统中,把一切资源都看作是文件,包括硬件设备。UNIX 系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。
Linux 目录结构
目录结构:
Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录
目录说明:
- /root: 超级用户(系统管理员)的主目录;
- /bin: 存放二进制可执行文件(ls、cat、mkdir等),常用命令一般都在这里;
- /etc: 存放系统管理和配置文件;
- /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;
- /usr : 用于存放系统应用程序;
- /opt: 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里;
- /proc: 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
- /root: 超级用户(系统管理员)的主目录;
- /sbin: 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
- /dev: 用于存放设备文件;
- /mnt: 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
- /boot: 存放用于系统引导时使用的各种文件;
- /lib : 存放着和系统运行相关的库文件 ;
- /tmp: 用于存放各种临时文件,是公用的临时文件存储点;
- /var: 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
- /lost+found: 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。
Linux 文件类型
常见的文件类型及其含义有:
- d:目录
- -:普通文件
- l:链接文件
- c:字符设备文件
- b:块设备文件
Linux 文件权限
用户分为三种:
- 文件拥有者(ower)
- 群组(group)
- 其它人(other)
对不同的用户有不同的文件权限。
文件权限字段一共有 9 位。每 3 个为一组,共 3 组,每一组分别代表对文件拥有者、所属群组以及其它人的文件权限。一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行。
文件权限字段的八进制模式
权限 | 二进制值 | 八进制值 |
---|---|---|
—- | 000 | 0 |
—x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r— | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
修改权限
使用八进制模式修改权限命令:
chmod [-R] xyz dirname/filename
示例:将 .bashrc 文件的权限修改为 -rwxr-xr—。
chmod 754 .bashrc
也可以使用符号来设定权限。
# chmod [ugoa] [+-=] [rwx] dirname/filename
- u:拥有者
- g:所属群组
- o:其他人
- a:所有人
- +:添加权限
- -:移除权限
- =:设定权限Copy to clipboardErrorCopied
示例:为 .bashrc 文件的所有用户添加写权限。
chmod a+w .bashrc
Linux 文件属性
使用 ls 查看一个文件时,会显示一个文件的信息,例如
drwxr-xr-x 3 root root 17 May 6 00:14 .config
对这个信息的解释如下:
- drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段(这里是 d),后 9 位为文件权限字段(rwxr-xr-x)
- 3:链接数
- root:文件拥有者
- root:所属群组
- 17:文件大小
- May 6 00:14:文件最后被修改的时间
- .config:文件名
目录的基本操作
1. ls
列出文件或者目录的信息,目录的信息就是其中包含的文件。
# ls [-aAdfFhilnrRSt] file|dir
-a :列出全部的文件
-d :仅列出目录本身
-l :以长数据串行列出,包含文件的属性与权限等等数据
2. cd
更换当前目录。
cd [相对路径或绝对路径]
3. mkdir
创建目录。
# mkdir [-mp] 目录名称
-m :配置目录权限
-p :递归创建目录
4. rmdir
删除目录,目录必须为空。
rmdir [-p] 目录名称
-p :递归删除目录
5. pwd
显示当前所在位置。
文件的基本操作
1. touch
更新文件时间或者建立新文件。
# touch [-acdmt] filename
-a : 更新 atime
-c : 更新 ctime,若该文件不存在则不建立新文件
-m : 更新 mtime
-d : 后面可以接更新日期而不使用当前日期,也可以使用 --date="日期或时间"
-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]
2. cp
复制文件。如果源文件有两个以上,则目的文件一定要是目录才行。
cp [-adfilprsu] source destination
-a :相当于 -dr --preserve=all
-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 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
5. vim
文本编辑器。
- 按下 “i” 等按键之后进入,可以对文本进行编辑;
- 按下 “:” 按键之后进入,用于保存退出等操作。
以下命令用于离开或者保存文件:| 命令 | 作用 | | :—-: | :—-: | | :w | 写入磁盘 | | :w! | 当文件为只读时,强制写入磁盘。到底能不能写入,与用户对该文件的权限有关 | | :q | 离开 | | :q! | 强制离开不保存 | | :wq | 写入磁盘后离开 | | :wq! | 强制写入磁盘后离开 |
获取文件内容
1. cat
取得文件内容。
# cat [-AbEnTv] filename
-n :打印出行号,连同空白行也会有行号,-b 不会
2. tac
是 cat 的反向操作,从最后一行开始打印。
3. more
和 cat 不同的是它可以一页一页查看文件内容,比较适合大文件的查看。
4. less
和 more 类似,但是多了一个向前翻页的功能。
5. head
取得文件前几行。
# head [-n number] filename
-n :后面接数字,代表显示几行的意思
6. tail
是 head 的反向操作,只是取得是后几行。
文件搜索
1. whereis
文件搜索。速度比较快,因为它只搜索几个特定的目录。
# whereis [-bmsu] dirname/filename
2. locate
文件搜索。可以用关键字或者正则表达式进行搜索。
locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。
# locate [-ir] keyword
-r:正则表达式
3. find
文件搜索。可以使用文件的属性和权限进行搜索。
# find [basedir] [option]
# examples:
find -name "target.java" # 当面目录下查找文件
find / -name "target.java" # 根目录下查找文件
find ~ -name "target.java" # /home 目录下查找文件
find ~ -name "target.*" # /home 目录下查找文件(模糊查询)
find ~ -iname "target.java" # /home 目录下查找文件(忽略大小写)