Linux目录概览以及简单文本处理的命令

  • Linux的目录结构
    • rootfs:对于Linux而言每一个文件系统都必须是根文件系统的某一个路径,也就是说必须通过根文件系统来进行访问,对于里面目录的命名采用的是FHS(文件系统层级标准);
    • /boot:表示和启动相关的文件;
      • vmlinux:表示的含义是linux内核文件,一般编译Linux内核就会生成这个文件;
      • initrd/initramfs:表示的是一个小型的linux系统;
      • grub(bootloader):系统的启动相关的文件—>系统启动以后详细解释;
    • /dev:表示设备文件,device,常见的设备类型包括以下:
      • 块设备:可以实现随机访问的设备,磁盘,按照数据块进行访问,应用程序可以随机访问里面的据;
      • 字符设备:可以实现线性访问,顺序读取,显示器,鼠标都是字符设备,字符设备按照线性访问模型进行访问,并且提供连续的数据流,应用程序只能够顺序进行读取,对于特殊的文件是直接存储元数据的,这些文件是没有数据的,通常是作为设备的访问入口存在的,对于硬盘来说,硬盘是典型的块设备,应用程序可以随机访问块设备的数据,并且寻址磁盘上的任何位置,此外数据的读取通常是以(512B)的倍数进行的,块设备并不支持基于字符设备的寻址方式;对于设备文件的属性:使用两个逗号隔开的数字表示的主设备号和次设备号;
    • /etc:大多数程序或者应用的配置文件的主要目录;
    • /home:表示用户的家目录,通常命名是/home/USERNAME,root用户的家目录就是/;
    • /lib:用于存放库文件;
      • 库文件通常分为两种,静态库(*.a),动态库(shared object),表示共享对象,库文件只能够被调用,不能够独立的执行;
      • /lib/modules:用于存放内核模块文件;
    • /lost+found:是为了放置某些没有属主,属组的文件或者在丢电后,没有被及时保存的文件;
    • /media:表示的是挂载点目录,通常用于挂载移动设备,将设备和当前根文件系统关联的过程;
    • /mnt:表示的的是挂载点目录,用于挂载临时文件系统,硬盘设备;
    • /misc:表示的是杂项文件;
    • /opt:表示可选的目录,用于第三方软件程序;
    • /proc:表示的是伪文件系统,显示的是内核映射文件,内核工作的统计文件,内核调优参数;这个目录在系统开机之前是不存在的;
    • /sys/:表示的也是伪文件系统,系统启动之后才存在,和硬件设备的相关属性的映射文件,用于实现硬盘设备管理;
    • /tmp:表示临时文件系统,会自动删除不用的文件,任何人都可以创建文件,但是只能够删除自己的文件;
    • /var:可变化的文件目录,进行运行时,需要存储额进程号码就在/var/run里面;
    • /bin:binary表示可执行文件,所有的用户命令;
    • /sbin:存放的是所有的管理命令;
    • /usr用户类命令
      • /usr/bin,/usr/sbin,/usr/lib
      • /usr/local:这个用于表示第三方软件的安装目录;
  • 关于文件命名的规则:
    • 1.文件名不能够超过255个字符;
    • 2.不能使用/作为文件名,/表示根以及路径的分隔符;
    • 3.并且严格的区分大小写;
  • 文件或者目录管理类命令
    • mkdir:用于创建目录,这里子目录和父目录是可以重名的,目录和文件在一个目录里面是不能够重名的;
      • -p:可以用于在父目录不存在的情况下创建目录;
      • -v:可以用于显示创建目录的详细过程;
    • tree:用于显示目录以及文件的组织结构;
    • rmdir:remove empty directory
      • 主要适用于删除空目录的;
      • -p:选项也是支持的,但是前提是最后一个命令删除之后,父目录为空,就可以删除;
    • 文件的创建:
      • touch:change file timestamps
        • 通常用于创建文件以及修改文件的时间戳;
        • -c:do not create any files;
        • -a:change only the access time;
        • -m:change only the modification time;
        • -t:use [[CC]YY]MMDDhhmm[.ss] instead of current time;
    • 简单的说明一下上面三种时间的区别:
      • atime:表示access time,也就是访问这个文件的时间,比如more less cat等查看文件内容的命令;
      • mtime:表示modifity time,表示的是文件的修改时间,这个修改表示的含义是文件内容的修改时间;
      • ctime:表示change time,是在写入文件、更改所有者、权限或链接设置时随inode节点的内容更改而更改的,是该文件的inode节点最后一次被修改的时间;
      • 查看具体的time可以使用命令stat来进行查看
  • 接下来说明一些操作对于上述时间的影响
    这里写图片描述
  • 尝试使用more或者less查看文件,来查看那些时间会发生改变
    这里写图片描述
  • 通过cat命令来查看,发现仍然只有atime发生改变
    这里写图片描述
  • 所以说明一下查看文件内容类的命令只会导致文件的atime发生改变
  • 特别的尝试一下,使用vim打开文件,但是使用q退出,查看那些时间属性会发生改变
    这里写图片描述
  • 接下来尝试改变文件的属主和属组
    这里写图片描述
  • 接下来修改文件的内容,查看那些时间属性会发生改变,这里使用vim,里面添加了文件的内容
    这里写图片描述
  • 三个时间属性都发生了改变,文件内容的修改导致了inode信息发生改变;
  • 按照上面的来总结:
    • 查看类的命令导致atime发生改变;
    • 修改文件属性(不包含文件内容)的改变,导致atime mtime发生改变;
    • 修改文件的内容,导致atime mtime ctime发生改变;
  • 上面使用了多次的文件内容查看命令,发现如果第一次使用文件查看类命令,那么atime发生改变,如果在下一次使用文件查看类命令中,文件的时间属性没有发生改变,那么再次使用文件查看类型命令,atime的时间属性是不会发生改变的;
  • rm:
    • rm -f FILENAME:文件的删除
      • -i:表示交互式删除,rm命令是rm -i命令的别名,如果不需要执行别名,使用\rm就可以执行原来的命令;
        这里写图片描述
      • -f:表示删除;
      • -r:表示递归删除目录以及目录里面的所有文件;
  • cp:
    • cpopy:文件不能够多个文件复制为一个文件,也不能够把一个文件复制为多个文件,更不能够多个文件复制为多个文件,对于copy来说,只有最后一个文件是目标,其余的都是源文件,也就是说当源有多个文件时,目标必须是一个目录;
    • -R -r:copy directories recursively 默认情况下是不会复制目录的;
    • -p:对于文件的复制操作是谁复制的,那么这个文件的属主和属组就是谁的,
      • same as --preserve=mode,ownership,timestamps:保留文件的上述属性;
    • -a:--archive,
      • 保留文件的所有属性;
    • -d:same as --no-dereference --preserve=links,
      • 保持连接属性,不复制连接指向的文件;
    • -L: --dereference always follow symbolic links in SOURCE
      • 总是追随符号连接,如果使用cp命令copy一个连接文件,得到的是一个普通文件,复制的是连接执行的文件;
    • -P:--no-dereference never follow symbolic links in SOURCE
    • 选项进行复制就会保留连接文件,并且复制称为一个链接文件;
    • -a: 选项通常用于实现备份机制
  • 移动文件的命令:
    • move:同样的用最后一个参数表示目标(文件以及目录);
      • 1.move SRC SRC SRC DEST;
      • 2.DEST不存在,就会移动并且重命名;
      • 3.DEST存在就会重命名,如果DEST是文件,就会出错;
      • 4.DESTSRC在同一个目录里面时,就会发生重命名;
      • 5.move -t DEST SRC...SRC 使用-t指定目标;
    • install:copy files and set attributes
      • -d:可以用于创建空目录;
      • -m:对于复制的文件是可以指定权限的默认是rwxr-xr-x,同样可以使用-t执行目标;
  • 查看文本文件的内容:
    • cat(tac):连接并且显示,显示的文本内容是全部的,可以使用Shift+PageUp来翻页查看,
      • -n:用于指定显示行号,行号不是文件内容,只是显示的内容;
      • -e:显示每一行的行结束符号,对于Linux来说每一行的行结束符号是$符号,Windows 的行结束符号是$回车符号;
      • -T:用于显示指标符号;
      • -V:用于显示不可打印字符;
    • tac:用于反向显示文本信息,最后一行是第一行
    • more:用于手动翻页显示文件内容,Space向前翻屏,b可以向前翻屏;
    • less:man文档是使用less打开并且支持查看的,less支持满文档里面支持的所有操作,并且不会退出;
    • head:用于查看文件的前n行,并且默认是10行;
    • tail:用于查看文件的后n行,默认也是10行;
      • -n:支持指定显示的行数;
      • -f:显示文件并且不立即退出,可以显示文件尾部更新内容;可以用于监控日志文件的生成;
  • 文本处理类命令
    • cut:用于切割文件内容
      • -d:用于指定字段分隔符号;
      • -f:用于指定要显示的字段,例如:-f1表示显示第一个字段;
        • -f1,3:表示显示第一个,第三个字段;
        • -f1-3:表示显示第一个到第三个字段的内容;
    • sedawk后面会专门说明;
    • sort:对于文本内容或者显示的内容进行排序,默认是按照ASCII字符升序进行的;
      • -n:表示按照数值的大小进行排序;
      • -r:表示反向进行排序;
      • -t:用于指定字段分隔符号;
      • -k:表示按照某个字段为基准进行排序,如果不进行字段的指定那么就会按照从左向右依次进行比较然后进行排序;
      • -u:排序后,表示相同的只显示一次;
      • -f:表示排序是忽略字符大小写;
  • uniq:report or omit repeated lines,对于相邻并且完全重复的行,就会进行略掉
    • -d:表示只用于显示重复的行,只显示一次;
    • -D:表示显示重复的行,并且都进行显示;
    • -c:显示文件里面行重复的次数;
  • tr:translate or delete characters 用于实现转换或者删除字符,用于逐个字符进行比较
    • -d: 表示用于删除字符集合里面的所有字符
      这里写图片描述
  • 文本统计类命令
  • wc(Word Count):

    • -l:统计并且只显示文本的行数;
    • -w:统计并且显示文本的单词数;
    • -c:表示只显示字节数;
    • -m:表示用于统计字符数;
    • -L:表示最长的一行包含多少个字符,用于统计文本内部的字符,将空格作为字符;
      这里写图片描述
  • 补充几个额外的命令

  • ls:list directory contents,用于列出指定路径下面的所有文件,通常来说目录也是文件,文件是按照名称进行升序排序的;
    • -a:all,表示不忽略.;
    • -A:--almost-all:表示忽略.以及..,但是显示隐藏文件;
    • --author:通常使用来显示目录里面的文件的作者信息,但是使用并没有明显的不同,通常使用-l选项用来显示额外的信息;
      • -l:用于显示目录里面内容的详细属性信息;
        • 文件的类型:
          • -:表示普通文件(f),包含纯文本文件,二进制文件,以及各种类型的压缩文件,这种文件的种类是最多的,因为在Linux底下,一切皆文件;
          • d:表示的是目录文件,一般理解目录是一个容器,但是本质上仍然是一个包含inode映射节点的一个文件;
          • b:表示的是块设备文件(block),块设备一般是支持随机访问的存储的设备,通常硬盘属于块设备
          • c:表示的是字符设备文件(character),通常只支持顺序访问,也就是串行接口的中断设备,例如,键盘和鼠标;
          • l:表示的是符号连接文件(sysbolic link file)链接文件,通常包含软链接和硬链接;
          • p:表示的是管道文件(pipe);
          • s:表示的套接字文件(socket),通常在/tmp目录里面;
          • 包含以上设备类型的文件大多数在/dev目录里面;
        • 文件的模式:
          • 也就是用于表示文件的权限,一共是位,每位一组,三组分别表示的是所有者,所有者所在的组,以及其他人的权限,(rwx)分别用于表示读,写,执行,如果权限不存在就使用-来表示,rwx()可以使用数字来进行表示,分别是4,2,1; 后面的数字表示是文件被链接的次数;
    • -h: -human-readable
      • 表示按照可读的方式进行显示文件大小;
    • -d:
      • 表示用于显示当前目录本身的信息,通常需要结合ld来进行使用;
    • -i:
      • 用于显示文件的数字标识符,也就是文件的inode信息(index node);
    • -r:
      • 可以用于显示排序的信息,并且进行反向的排列;
    • -R:
      • 用于递归显示文件,也就是用于显示并且显示目录以及子目录里面的内容;
  • cd:change the working directory
    • 用于更改当前用户的工作目录;
    • cd :默认进入的是用户的家目录;
    • cd ~USERNAM:表示进入指定用户的家目录;
    • cd -:表示在当前用户的家目录和指定的目录之间进行切换;
  • type:
    • 用于显示命令所属于的类型;
    • 命令的类型:
      • 内置命令(shell内置):表示内部,内建,这些命令是shell本身提供的命令;
      • 外部命令:表示在文件系统中存在一个与名称对应的可执行文件;
  • printenv:print all or part of environment
    • 用于打印所有的环境变量,在执行某个命令的时候,会依次查找环境变量里面的路径去查招这个可执行文件,然后执行;
    • 在一个命令第一次执行的时候,需要进行环境变量的查找,但是在之后执行的过程中,会利用缓存机制,而不是每次都进行查找;
  • hashremember or report utility locations
    • 用于记录或者显示执行命令的缓存路径,并且记录命中的次数;
    • -r:选项用于清空里面的缓存信息;
      这里写图片描述
  • 命令帮助信息
  • 内部命令:
    • help COMMAND
    • COMMAND -h
  • 外部命令:
    • COMMAND --help
    • man COMMAND:对于外部命令和内部命令都可以使用man来进行查看;
  • 关于man手册
  • 一共分为八个章节,使用whatis可以用来查看命令所处于的章节;
    • 1:表示所有用户都可以使用的命令,例如:/bin,/usr/bin,/usr/local/bin;
    • 2:表示系统调用read;
    • 3:库调用,命令和库的名字相同时,需要通过具体的章节指定来查看;
    • 4: 表示特殊文件,设备文件都是特殊文件,在磁盘上面没有真正的内容,作为设备的访问入口存在的;
    • 5 :表示文件格式,配置文件的文件格式,配置语法man 5 passwd;
    • 6:表示游戏的帮助;
    • 7:表示不便于归类的杂项;
    • 8:表示管理命令,只有管理员才有权限使用的命令/sbin,/usr/sbin/,/usr/local/sbin,通常会修改硬件参数,以及硬件特性,系统级别的配置;
  • man文档对于命令的描述:
    • date:
    • NAME:表示命令的名称;
    • SYNOPSIS:表示用法说明,可用的选项
      • []:表示可以省略的参数;
      • |:表示多选择一个;
      • <>:表示必须给出的内容;
      • ...:表示可以使用多次的选项;
      • {}:表示分组;
    • DESCRIPTION:命令功能的详细说明,可能包括每一个选项的意义;
    • OPEIONS:用于说明每一个选项的意义;
    • FILES:表示次命令的配置文件;
    • BUGS:表示BUGS文件;
    • EXAMPLE:表示使用示例;
    • SEE ALSO:表示可以参照;
  • man文档的操作:
    • space: 翻屏
    • b:向前翻一屏幕;
    • ENTER:向后翻一行;
    • k:向前翻一行;
    • 搜索操作:
      • /KEYWORD:表示向后进行搜索;
      • ?KEYWORD:表示先前搜索;
      • n:表示下一个搜索关键字;
      • N:表示向前搜索的关键字;
      • q:退出;
  • 外部命令的重要命令说明都在/usr/share/doc目录里面;
  • 在线文档
    • info COMMAND