走进Linux_Linux文件与目录管理大全解

引:在使用Linux的过程中,最多的命令莫过于在操作文件与目录,所以通过本文,能让你大概率熟悉所有关于文件与目录的命令与知识,但是参数方面就需要自己去查询了。

目录与路径

绝对路径和相对路径

  1. 绝对路径:路径的写法一定由根目录/写起
  2. 相对路径:路径的写法是相对于当前工作目录写的。

目录的相关操作

  1. 特殊目录列表

    • . :当前目录
    • .. :上层目录
    • - :前一个工作目录
    • ~ :登陆用户的主文件夹
    • ~account :这个用户的主文件夹 (account是个账号名称)
  2. 常见目录处理的命令

    • cd:切换目录
    • pwd:显示当前目录
    • mkdir:新建一个新的目录
    • rmdir:删除一个空的目录,删除非空目录需要使用rm -r
    • 好习惯:经常利用Tab键快速完整地输入目录或命令
  3. 环境变量PATH

    当我们执行命令:ls -al的时候,系统会按照PATH设置的路径,去这些路径中寻找ls这个文件,并执行。如果PATH路径中有多个ls文件,那么先找到的那个ls文件被执行。

    1
    2
    3
    4
    // 查看PATH
    echo $PATH
    // 在PATH中添加路径/demo
    PATH="$PATH":/demo

    对于PATH我们有几点需要清楚:

    • 不同身份用户默认的PATH不同,默认能够随意执行的命令也不同,差异较大的地方在于/sbin和/usr/sbin。
    • PATH是可以修改的,所以一般用户还是可以通过修改PATH来执行某些位于/sbin或/usr/sbin下的命令来查询。
    • 使用绝对路径或相对路径直接指定某个命令的文件名来执行。
    • 命令应该要放在正确的目录下,执行才会比较方便。
    • 本目录(.)最好不要放到PATH当中,因为本目录会变化。

文件和目录管理

在文件与目录的管理上,不外乎“显示属性”、“复制”、“删除文件”、“移动目录或文件”等。下面这这种管理动作的具体指令:

  1. 显示属性

    ls

  2. 复制

    cp

  3. 删除

    rm

  4. 移动(重命名)

    mv

这些指令的具体参数,希望大家能够通过man info去熟悉。

我们可以通过下面的命令去取得路径的文件名与目录名称:

1
2
3
4
// 取得文件名称
basename /etc/sysconfig/network
// 取得文件目录
dirname /etc/sysconfig/network

文件内容查阅

主要有下面一些命令:

命令 作用
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出tac是cat的到写形式
nl 显示的时候,顺便输出符号
more 一页一页显示文件内容
less 与more类似,但是比more更好的是,它可以往前翻页
head 只看头几行
tail 只看尾几行
od 以二进制的方式读取文件内容

文件与目录的默认权限和隐藏权限

除了基本的rwx权限之外,Linux的ext2/ext3文件系统下,我们还可以设置系统隐藏属性,它可以用chattr来设置,用lsattr来查看。最重要的属性就是可以设置文件/目录为不可修改,这可以让文件所有者都不能进行修改,这对于安全性方面是非常重要的。

文件的默认权限:umask

umask指定了目前用户在新建文件或目录时候的权限默认值。

指定了以下面的方式来指定:

1
2
3
4
5
6
7
[root@VM_0_9_centos ~]# umask
0022 // 与一般权限有关的是后面是三个数字(表示不拥有该数值的权限,此例就表示group不拥有w,others不拥有w)
[root@VM_0_9_centos ~]# umask -S
u=rwx,g=rx,o=rx

// 设置默认权限
umask 002

在默认权限的属性上,目录与文件是不一样的,x权限对于目录是非常重要的,但是一般文件的创建则不应该拥有执行权限。所以默认情况下:

  • 若用户创建“文件”则默认没有可执行权限,默认权限为666,即-rw-rw-rw-
  • 若用户创建“目录”则默认拥有可执行权限,默认权限为777,即drwxrwxrwx

文件隐藏属性chattr,lsattr

  1. chattr 设置文件的隐藏属性

    注意参数a(文件只能增加数据,不能删除也不能修改数据)和i(不能 删除,修改)

  2. lsattr 显示文件隐藏属性

文件的特殊权限SUID,SGID,SBIT

  1. SUID(u+s,如x为空,则出现大S),限制与功能如下:
    • SUID权限仅对二进制程序有效
    • 执行者对于该程序需要x的可执行权限
    • 本权限仅在执行该程序的过程中有效
    • 执行者将具有该程序所有者的权限
  2. SGID(g+s,如x为空,则出现大S),对于文件功能与SUID类似,但是对于目录有如下功能:
    • 用户若对于此目录具有r与x的权限时,该用户能够进入此目录
    • 用户在此目录下得有效用户组将变成该目录的用户组
    • 若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同
  3. SBIT(o+t,如x为空,则出现大T),目前只针对目录有效,它的作用如下:
    • 当用户对于此目录具有w,x权限,即具有写入的权限时,当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件。

查看文件类型:file

如果想知道某个文件的基本数据,就可以使用file这个命令查看。

文件与命令的查询

脚本文件名的查询

如果你想知道类似ls这种命令的脚本放在哪里,就通过which或type来找寻。

which命令是根据PATH这个环境变量所规范的路径去查询“执行文件”的文件名。

文件名的查找

通常find不很常用,因为速度慢,通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来查找,因为whereis与loacate是利用数据库来查询数据的,而find是直接查找硬盘的。

  1. whereis:寻找特定文件
  2. locate:根据文件的部分名称查找,由于是查询数据库的,而数据库是当晚更新,所以你新建文件是查找不到的,可以利用updatedb手动更新,但是较慢。
  3. find:参数很多,自己用的时候需要使用man page自行了解。

文件与文件系统的压缩与打包

常见的压缩命令

不同的压缩打包技术,对应着不同的解压缩拆包技术,所以在Linux中用后缀名来分辨压缩打包技术,如下表:

后缀 压缩打包技术
*.Z compress程序压缩
*.gz gzip程序压缩
*.bz2 bzip2程序压缩
*.tar tar程序打包,未压缩
*.tar.gz tar程序打包,gzip程序压缩
*.tar.bz2 tar程序打包,bzip2程序压缩

由于compress已经不再流行,所有我们主要讲解gzip和gzip2:

  1. gzip,zcat(用来替代compress)

    目前gzip可以解开compress、zip与gzip等软件压缩的文件。可以看一下下面的案例:

    1
    2
    3
    4
    5
    6
    // 1. 压缩文件
    gzip -v 文件名 // 参数v显示压缩比
    // 2. 查看压缩文件内容
    zcat 压缩文件
    // 3. 解压缩
    gzip -d 压缩文件名 // 参数d表示解压缩
  2. bzip2,bzcat(用来替代gzip)

    使用方法与gzip基本相同,不再赘述。

打包命令

在压缩文件夹之前需要打包,然后我们就需要用到大名鼎鼎的tar,下面通过命令来具体介绍他的使用:

1
2
3
4
5
6
// 1. 压缩,参数的含义自己去用man page查看
tar -jcv -f filename.tar.bz2 // 要被压缩的文件或目录名称,tar并不会主动产生创建的文件名
// 2. 查询
tar -jtv -f filename.tar.bz2
// 3. 解压缩
tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录(如:/tmp)

对于只是打包没有压缩的文件叫做tarfile

对于打包了并且压缩的文件叫做tarball

完整备份工具

  1. dump 备份
  2. restore 恢复

参考

  1. 《鸟哥的Linux私房菜》