• Linux 学习笔记03丨Linux文件系统、文件基本属性、目录处理及文件查看


    Chapter 2. 文件系统

    2.1 Linux 系统目录结构

    命令窗口下输入命令: $ ls /,能够看到根目录下的全部目录及文件

    树状目录结构为:

    最顶级的目录:

    • / :根目录

    / 是根目录,~ 是家目录。Linux 的目录结构为树状结构,源头即是 /,其他目录可通过挂载将它们添加到树中,解除挂载可以移除它们。而每个用户都有其家目录。比如说root用户的家目录是/root,普通用户a的家目录是/home/a

    系统启动必须:

    • /boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。

    • /etc:存放所有的系统需要的配置文件子目录列表,更改目录下的文件可能会导致系统不能启动。

    • /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

    • /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

    指令集合:

    • /bin:存放着最常用的程序和指令

    • /sbin:只有系统管理员能使用的程序和指令。

    外部文件管理:

    • /dev :Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。

    • /media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。

    • /mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

    临时文件:

    • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

    • /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。

    • /tmp:这个目录是用来存放一些临时文件的。

    账户:

    • /root:系统管理员的用户主目录。

    • /home:用户的主目录,以用户的账号命名的。

    • /usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

    • /usr/bin:系统用户使用的应用程序与指令。

    • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。

    • /usr/src:内核源代码默认的放置目录。

    运行过程中要用:

    • /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。

    • /proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。

    扩展用的:

    • /opt:默认是空的,我们安装额外软件可以放在这个里面。
    • /srv:存放服务启动后需要提取的数据(不用服务器就是空)
    • /boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。
    • /etc:存放所有的系统需要的配置文件子目录列表,更改目录下的文件可能会导致系统不能启动。
    • /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
    • /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

    2.2 文件与目录管理

    特殊目录:

    • .:代表当前的目录,也可使用./表示。
    • ..:代表上一层目录,也可使用../表示。

    两种路径:

    • 绝对路径:由根目录/写起。eg: /usr/share/doc
    • 相对路径:不是由/写起。

    2.2.1 处理目录的常用命令

    • ls (list files,列出目录或文件名)

      参数:

      • -a:列出全部文件(包括开头为.的隐藏文件)
      • -l:长数据(包含文件属性、权限等)详细地列出文件
    • cd(change directory,切换目录)

    • mkdir(make directory,创建一个新的目录)

      参数:

      • -m:配置文件的权限
      • -p:直接将所需要的目录递归地进行创建
      #在家目录中创建myfile
      $ mkdir myfile
      #注意,不能直接 $ mkdir yourfile/here/cur 这样多层创建(会报错!),必须使用-p参数
      $ mkdir -p yourfile/here/cur
      #使用绝对路径进入here文件夹
      $ cd ~/yourfile/here
      #返回上一级目录
      $ cd ..
      #使用相对路径进入cur文件夹
      $ cd ./here/cur
      
    • pwd(print work directory,显示当前所在的绝对目录路径)

      参数:

      • -P:注意,是大写!显示出正确的完整路径,而非使用连结(link)路径

      一般情况下,搭配 -P 选项使用

    • cp(copy file,复制文件或目录)

      语法为:

      $ cp 参数 源文档 目标文档
      

      选项及参数

      • -i:若目标文档已经存在,在覆盖时会先询问是否覆盖
      • -p:(备份常用)连同文件的属性一同复制过去,而非使用默认属性
      • -r:(常用于目录的复制)递归持续复制
      • -s:(捷径文件)复制成为符号连结当(Symbolic link)
      • -u:若目标文档已存在,且源文档较新,才会升级(update)
      $ cp -ir ~/yourfile /tmp/newfile
      
    • rm(remove,移除文件)

      默认情况下,只能删除文件。

      有选项及参数:

      • -r:递归删除,用于目录的删除(较危险)
    • mv(move file,移动文件与目录,或修改名称

      cp指令大致相同的用法。

    关于 Linux 链接

    在Linux的文件系统中,保存在磁盘分区中的文件不论是什么类型均会给它分配一个变化,称之为索引节点号(Inode Index)

    • 硬链接(Hard Link)

      允许一个文件拥有多个有效路径名,即对应该目录的索引节点有一个以上的链接。只删除一个链接并不会影响索引节点本身和其他的连接。此时,文件真正删除的条件是与之相关的所有硬链接文件均被删除。

    • 软链接(Symbolic Link)也称 符号连接

      软链接文件类似于 Windows 的快捷方式。在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。假定A 是 B 的软链接,A 和 B 之间是“主从”关系,若B被删除则A仍存在(因为A和B是不同的文件),但指向的是一个无效的链接。

    $ touch test    #创建一个测试文件
    $ ln test f1    #创建test的一个硬链接文件f1
    $ ln -s test f2 #创建test的一个符号链接文件f2
    $ ls -li # -i 参数显示文件的inode节点信息
    

    2.2.2 文件查看命令

    • cat(由第一行开始显示文件内容)

      选项与参数:

      • -b:列出行号(空白行不标行号)
      • -v:列出一些看不出的特殊字符

      cat >> 文件名:以系统默认的文件属性作为新文件的属性,并接受键盘输入作为文件的内容。输入结束时按Ctrl+d退出并保存文件。

    • tac(从最后一行开始显示文件内容,与cat命令相反)

    • less(一页一页地翻动查看)

      可输入的命令:

      • bankspace:向下翻动一页
      • /子串:向下搜寻"子串"
      • ?子串:向上搜寻“子串”
      • n:重复前一个搜寻
      • q:离开less这个程序
    • head(取出文件前面几行)

      语法为:

      $ head [-n number] 文件名
      #-n 后面接的是数字,代表显示几行
      

      tail(取出文件后面几行),与上同理

    • wc(word count,计算字数)

      语法为:

      $ wc [-clw][--help][--version][文件名1 文件名2 ...]
      

      参数有:

      • -c:显示字符数
      • -w:显示字数
      • -l:显示行数
      • --help:在线帮助
      • --version:显示版本信息
      $ wc testfile testfile_1 testfile_2  #统计三个文件的信息  
      3 92 598 testfile                    #第一个文件行数为3、单词数92、字节数598  
      9 18 78 testfile_1                   #第二个文件的行数为9、单词数18、字节数78  
      3 6 32 testfile_2                    #第三个文件的行数为3、单词数6、字节数32  
      15 116 708 总用量                    #三个文件总共的行数为15、单词数116、字节数708 
      

    2.2.3 查找

    • grep:(Global Regular Expression Print)能够使用正则表达式搜索文本,并把匹配的行打印出来。(从文件内容中查找)

      格式:

      $ grep [options] [pattern] 
      

      常用参数(options):

      • -c:只输出匹配行的计数
      • -d :当指定要查找的是目录而非文件时,必须使用该项参数。
      • -l:不区分大小写(只只适用于单字符)
      • -r:此参数效果与指定 -d recurse 参数相同
      • -n:显示匹配行及行号
      • -v:显示不包含匹配文本的所有行

      正则表达式主要参数(pattern):

      • :忽略正则表达式中特殊字符的原有含义
      • ^:从匹配正则表达式的开始行
      • $:到匹配正则表达式的行结束
      • []:单个字符,eg: [A]即需要符合A的要求
      • *:有字符,长度可以为0
      $ grep file new*
      #显示 所有 以new前缀 的文件名中包含"file"字符串的行
      Oh!!!you find the "file" successfully! #显示结果
      $ grep -r update /etc/acpi
      #递归地查找目录/etc/acpi及其子目录(如果存在)下所有 文件 中包含字符串"update"的文件,并打印出该字符串所在行的内容
      
    • find:在指定目录下查找(查找对应的文件)

      $ find path -option [ -print ] [ -exec -ok command] {} ;
      

      常用选项有:

      • -name:按照文件名去查找文件
      • -perm:按照文件权限查找文件
      • -user:按照文件属主查找文件
      • -mtime -n +n:按照文件的更改时间来查找文件,-n 表示文件更改时间距现在(n)天以内,+n 表示文件更改时间距现在(n)天以前。
      • -type:查找某一种类型的文件,如(b——块设备文件;d——目录;l——符号链接文件;f——普通文件)

      命令参数有:

      • path:查找的目录路径,.表示当前目录、/表示系统根目录
      • -print:将匹配的文件输出到标准输出
      • -exec:对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } ;,注意{ }和;之间的空格。
      • -ok:和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

      查找的文件有可能权限不够,需要用管理员权限查找。

      $ find 233.cpp
      #在当前工作目录中查找名称为tets.cpp的所有文件,显示结果为:233.cpp
      
      $ find / -type d -name test
      #在/目录下查找名称为test的所有目录
      
      $ find /home -name 666
      #在/home目录下查找名称为666的所有文件
      
      $ find /home -iname test
      #在/home目录下查找名称为test的所有文件(忽略大小写!)
      
      
      $ find / -name *233*.txt
      #模糊查找!
      
      $ find / -size +500M -print0|xargs -0 du -m|sort -nr
      #找出500M以上的文件,print0和xargs -0配合使用,用来解决文件名中有空格或特殊字符问题。du -m是查看这些文件的大小,并以m为单位显示。最后sort -nr是按照数字反向排序(大的文件在前),常用于“服务器磁盘满,需找到大文件并删除”的场景
      
      $ find / -type f ! -perm 777
      #查找没有777权限的文件
      

      更多的应用场景可以查看这篇文章

    2.2.4 文件基本属性

    Linux 系统对不同用户访问同一文件(包括目录文件)的权限做不同规定。

    使用 llls -l 命令可以显示一个文件的属性以及文件所属的用户和组,如:

    每个文件的属性由左边第一部分的10个字符来确定:

    从左至右用 0 - 9 这些数字来表示,第 0 位确定文件类型,第 1-3、4-6、7-9 位分别确定属主(该文件的所有者)、属组(所有者的同组用户)、其他用户 拥有该文件的权限。

    • 第一个字符代表这个文件是目录、文件或链接文件等等:

      • d :**目录 **
      • -文件
      • l :链接文档(link file)
      • b :装置文件里面的可供储存的接口设备(可随机存取装置)
      • c :装置文件里面的串行端口设备(如键盘、鼠标)
    • 接下来是以三个为一组,且均为 rwx 的三个参数的组合,其中,r 代表可读、w代表可写、x代表可执行。若没有权限,就出现减号 -

    更改文件属性的指令:

    1. chgrp:更改文件属组。

      $ chgrp [-R] 属组名 文件名
      

      参数 -R ,递归更改文件属组(即该目录下的所有文件的属组都会更改)

    2. chown:更改文件属主,也可以同时更改文件属组。

      $ chown [-R] 属主名 文件名
      $ chown [-R] 属主名:属主名 文件名
      
      $ chown Ben install.log
      #将install.log的拥有者改为bin这个账号
      $ chown Mygroup install.log
      #将install.log的属组改为Mygroup
      $ chown root:root install.log
      #将install.log的拥有者与群组改为root
      
    3. chmod:更改文件9个属性

      该指令有两种方式修改属性,一种是通过权限分数进行累加(类似二进制),另一种是通过符号类型改变文件权限,接下来就演示该方法。

      使用 ugo 来表示三种身份的权限,此外a可代表全部身份。然后使用下表的方式来进行修改:

      $ chmod u+wrx,g=wx,o-r mynewfile 
      #注意,','号间不能加空格!!
      $ chmod g=rx,u=wrx,o=r mynewfile
      
  • 相关阅读:
    Uploadify & jQuery.imgAreaSelect 插件实现图片上传裁剪
    Web 开发者不可不知的15条编码原则
    ASP.net 判断上传文件类型的三种方法
    《JavaScript 实战》:实现图片幻滑动展示效果
    如何构建一个很棒网站页脚(Website Footer)
    机器为什么可以学习(1)---测试和训练过程
    机器什么时候可以学习(4) --- 学习的可能性(feasibility of learning)
    算法学习--二分查找的学习
    逻辑回归-监督学习
    线性回归—监督学习
  • 原文地址:https://www.cnblogs.com/J-StrawHat/p/14039053.html
Copyright © 2020-2023  润新知