• Linux---文件目录管理


    1. Linux文件目录架构

    Linux的目录结构与win的目录有很大不同,首先,没有盘符的概念;然后Linux使用斜杠/标识目录,Linux首先建立一个根目录,然后将其他文件系统挂载到这个目录下。

    Linux系统主要目录及内容:

    目录 内容
    /bin 构建最小系统所需要的命令
    /boot 内核与启动文件
    /dev 设备文件
    /etc 系统软件的配置文件
    /home 主目录
    /lib 编译器库
    /media 可移动介质安装点
    /opt 应用安装包
    /proc 进程的映像
    /root root用户主目录
    /sbin 和系统操作有关的命令
    tmp 临时文件
    /usr 非系统的程序和命令
    /var 系统专用的数据和配置文件

    路径:

    • 相对路径:凡是以当前工作目录或者其他以非斜线字符为起始字符的所有路径都为相对路径;
    • 绝对路径:必须从根目录/开始;

    Linux文件系统中的每一个目录均包含两个特殊目录

    • . 代表当前目录
    • .. 代表父目录

    2. 建立目录 mkdir

    wangzhengchao@ubuntu:~$ ls
    Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  Videos
    wangzhengchao@ubuntu:~$ mkdir test1 test2
    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  Videos
    Documents  examples.desktop  Pictures  Templates  test2

    使用绝对路径建立目录:

    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  Videos
    Documents  examples.desktop  Pictures  Templates  test2
    wangzhengchao@ubuntu:~$ mkdir /home/wangzhengchao/test1/hello
    wangzhengchao@ubuntu:~$ ls test1/
    hello

    使用-p选项,建立一个完整的子目录结构:

    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  Videos
    Documents  examples.desktop  Pictures  Templates  test2
    wangzhengchao@ubuntu:~$ mkdir -p ~/test3/hello
    wangzhengchao@ubuntu:~$ ls test3/
    hello

    3. 建立空文件 touch

    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  test3
    Documents  examples.desktop  Pictures  Templates  test2  Videos
    wangzhengchao@ubuntu:~$ touch test4
    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  test3  Videos
    Documents  examples.desktop  Pictures  Templates  test2  test4

    touch还可以更新一个文件到建立日期和时间:

    wangzhengchao@ubuntu:~/test2$ ls -l
    总用量 0
    -rw-rw-r-- 1 wangzhengchao wangzhengchao 0 11月  4 20:16 hello
    wangzhengchao@ubuntu:~/test2$ touch hello
    wangzhengchao@ubuntu:~/test2$ ls -l
    总用量 0
    -rw-rw-r-- 1 wangzhengchao wangzhengchao 0 11月  4 20:18 hello

    4. 移动和重命名 mv

    移动文件:

    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  test3  Videos
    Documents  examples.desktop  Pictures  Templates  test2  test4
    wangzhengchao@ubuntu:~$ mv test4 test1/hello/
    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  test3
    Documents  examples.desktop  Pictures  Templates  test2  Videos
    wangzhengchao@ubuntu:~$ ls test1/hello/
    test4

    移动目录:

    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  test3
    Documents  examples.desktop  Pictures  Templates  test2  Videos
    wangzhengchao@ubuntu:~$ mv test3/ test1/
    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  Videos
    Documents  examples.desktop  Pictures  Templates  test2
    wangzhengchao@ubuntu:~$ ls test1
    hello  test3

    如果直接使用mv指令移动文件,且目标目录有同名文件,则会直接替换,不提示任何信息,为此,我们可以使用-i 或者-b 选项, -i会提示是否覆盖;-b会把首先在目标目录到同名文件后加一个~,避免覆盖。

    重命名;

    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  Videos
    Documents  examples.desktop  Pictures  Templates  test2
    wangzhengchao@ubuntu:~$ mv test2 test3
    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         Music     Public     test1  Videos
    Documents  examples.desktop  Pictures  Templates  test3

    5. 复制文件和目录 cp

    cp用法基本与mv一致,但对于自动跳过目录到情况,可以使用-r选项将子目录连同其中到文件一起复制到另一个目录下。

    6. 删除目录与文件 rmdir / rm

    删除目录之前,一定要检查该目录是不是空目录,rmdir只能删除空目录。rm用于删除文件,使用带有-r选项到rm指令,可以递归的删除目录下到所有文件和子目录,如下:

    wangzhengchao@ubuntu:~$ ls
    Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  test1  Videos
    wangzhengchao@ubuntu:~$ ls test1
    hello  test3
    wangzhengchao@ubuntu:~$ rm -r test1/
    wangzhengchao@ubuntu:~$ ls
    Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  Videos

    使用rm指令时,一定要谨慎,最好使用带有-i选项的rm

    7. 查看文件和目录的属性

    Linux为3种人准备了权限:文件所有者(属主),文件属组用户(属组),其他人。注意:其他人不包含root用户!

    用户对文件和目录享有三种权限:

    r 可以打开并查看内容
    w 拥有对文件到修改权限
    x 执行 是否可执行,对目录和文件意义不同

    对于目录而言,执行权限实际控制了用户是否可以进入该目录,读权限负责确定是否可以列出该目录到内容,写权限控制着可否在目录中创建,删除和重命名文件

    文件权限与二进制,八进制的对应关系:

    rwx
    八进制 二进制 权限
    0 000 ---
    1 001 --x
    2 010 -w-
    3 011 -wx
    7 100 r--
    5 101 r-x
    6 110 rw-
    7 111 rwx

    Linux中的7种文件类型:

    文件类型 符号
    普通文件 -
    目录文件 d
    字符设备文件 c
    块设备文件 b
    本地域套接口 s
    有名管道 p
    符号连接 l

    ------------------------------------------------------------------------------------------------------------------------------------

    虚线之间内容于21:09:05 2018-11-8 补充

    目录文件:

    • 是一种特殊文件,存储的内容不是普通意义上的数据,而是一系列文件名及其信息节点号(ls -i filename 可以查看文件信息节点号);
    • 目录文件与普通文件并无实质性差别,但是目录文件是由Linux系统直接管理的,用户只能查询,并不能直接修改目录文件,目录文件始终是由操作系统负责维护的。

    链接文件:

    • 链接文件把多个文件名指向同一个文件,更新一个文件即可反映到其他文件;
    • 除了目录之外,非链接文件的链接计数只能是1;
    • 如果文件的信息节点相同,其引用的就是同一个信息节点;
    • 硬链接的唯一局限是链接的两个文件必须位于同一个物理文件系统;
    • 符号链接文件可以使用户跨越不同的物理文件系统建立链接文件,符号链接文件拥有自己的数据,具有文件名和信息节点;

    管道文件:

    • 管道包括普通管道和管道文件
    • 普通管道是一种进程之间的通信机制,数据按照FIFO的方式处理;
    • 管道文件是一种特殊文件,管道文件拥有文件名和信息节点,但是不含有任何数据,管道文件一边缓存数据,一边供进程读取数据;

    ------------------------------------------------------------------------------------------------------------------------------------

    以下代码查看文件login的属性:

    1 wangzhengchao@ubuntu:~$ ls -l /bin/login
    2 -rwxr-xr-x 1 root root 48128 5月  17  2017 /bin/login

    第二行代码的第一个-代表login文件是一个普通文件(参见linux中到文件类型),紧接着的9位(rwxr-xr-x)代表权限码。对9位权限码可以拆解为如下3组(每3位一组)权限位: rwx(属主) r-x(属组)  r-x(其他)。即,对于属主拥有读写和执行权限,对于属组拥有读和执行权限(因为-代表没有对应的权限),对于其他人拥有读和执行权限。该9位权限码还可以用3位八进制数755表示(参见文件权限与二进制,八进制的对应关系)。

    8. 修改文件所有权 chown

     chown基本语法: chown [OPTION]... [OWNER] [:[GROUP]] FILE... 

    • 上述指令将文件FILE的属主更改为OWNER,将属组更改为 GROUP
    • 如果只修改属主,可以忽略group
    • 如果只修改属组,可以忽略owner
    wangzhengchao@ubuntu:~$ ls -l hello
    -rw-rw-r-- 1 wangzhengchao wangzhengchao 0 11月  4 21:20 hello
    wangzhengchao@ubuntu:~$ sudo chown king hello
    wangzhengchao@ubuntu:~$ ls -l hello
    -rw-rw-r-- 1 king wangzhengchao 0 11月  4 21:20 hello

    chown还提供了-R选项,用于更改一个目录及其下所有文件的所有权限:

    wangzhengchao@ubuntu:~$ ls -l test
    总用量 0
    -rw-rw-r-- 1 wangzhengchao wangzhengchao 0 11月  4 23:10 helloWorld
    wangzhengchao@ubuntu:~$ sudo chown -R king test/
    wangzhengchao@ubuntu:~$ ls -l test
    总用量 0
    -rw-rw-r-- 1 king wangzhengchao 0 11月  4 23:10 helloWorld
    wangzhengchao@ubuntu:~$ ls -l

    9. 修改文件权限 chmod

    首先明确:只有文件的属主和root用户才能修改文件的权限

     chmod用于改变文件的权限,使用 用户组+/-权限 的表达方式增加/删除相应的权限。其中:

    • 用户组:属主(u), 属组(g), 其他人(o),  所有人(a)
    • 权限:读(r), 写(w), 执行(x)

     chmod u+x hello 表示文件hello对属主增加了执行属性;

     chmod u-x hello 表示文件hello对属主删除了执行属性;

    还可以使用 用户组=权限 或者 用户组1 = 用户组2 的方式修改权限:

     chmod u=rw hello 表示文件hello对属主设置读写权限

     chmod o=u hello 表示将其他人权限设置为和属主权限一样

    根据上述文件权限与二进制,八进制的对应关系表(参见第7部分),我们还可以直接使用3位八进制数修改文件权限:

    wangzhengchao@ubuntu:~$ ls -l hello
    -------rwx 1 wangzhengchao wangzhengchao 114 11月  5 09:05 hello
    wangzhengchao@ubuntu:~$ chmod 664 hello
    wangzhengchao@ubuntu:~$ ls -l hello
    -rw-rw-r-- 1 wangzhengchao wangzhengchao 114 11月  5 09:05 hello

    文件hellio原来的权限为 ------rwx,现在需要修改为 rw-rw-r-- 根据八进制对应表可以得到3位八进制权限数为664 , 因此可以使用 chmod 664 hello 修改权限。

    10. 输出重定向

    当我们执行 date指令时,系统默认将内容打印到屏幕上,使用输出重定向可以置顶输出的位置,例如可以制定输出到文件里面。

    wangzhengchao@ubuntu:~$ date
    2018年 11月 05日 星期一 09:50:38 CST
    wangzhengchao@ubuntu:~$ date > date_out
    wangzhengchao@ubuntu:~$ cat date_out
    2018年 11月 05日 星期一 09:50:53 CST

    如果输出文件不存在,系统会自动创建;若文件存在,则原内容会被删除,写入新内容;为避免删除原内容,可以使用 >> 重定向

    11. 管道 |

    管道通过|,将一条命令的输出连接到一条命令的输入:

    wangzhengchao@ubuntu:~$ ls
    Desktop    Downloads         hello  Pictures  Templates  Videos
    Documents  examples.desktop  Music  Public    test       无标题文档
    wangzhengchao@ubuntu:~$ ls | grep s
    Desktop
    Documents
    Downloads
    examples.desktop
    Music
    Pictures
    Templates
    test
    Videos

    上述代码执行查找包含字符s的文件名

  • 相关阅读:
    Oracle 字符集的查看和修改
    Hibernate查询方法与缓存的关系
    Oracle Sql语句整理
    Android动画效果
    Acrobat9键盘快捷键
    Head区的设置
    JAR,WAR,EAR区别
    ASCII码表完整版
    HTML的meta标签详解
    .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/9905978.html
Copyright © 2020-2023  润新知