美文网首页
第二周:Linux之文件编辑管理

第二周:Linux之文件编辑管理

作者: 还没帮马里奥再闯一关 | 来源:发表于2020-12-21 00:26 被阅读0次

    描述linux发行版的系统目录名称命名规则以及用途

    ⏱ 19:32:27-root:~# tree -d -L 1 /   #使用tree命令只显示/下的目录且只显示第1层级
    /
    ├── _2020-12-06_14-30-09
    ├── backup                          
    ├── bin -> usr/bin                  
    ├── boot                            
    ├── date
    ├── dev
    ├── etc
    ├── home
    ├── lib -> usr/lib
    ├── lib64 -> usr/lib64
    ├── media
    ├── misc
    ├── mnt
    ├── net
    ├── opt
    ├── proc
    ├── root
    ├── run
    ├── sbin -> usr/sbin
    ├── srv
    ├── sys
    ├── tmp
    ├── usr
    └── var
    
    24 directories
    
    

    由上面tree命令为我们提供的根目录结构来看,文件系统在Linux下看起来就想树一样,所有的文件都以/为起始,我们称/根为Linux的root,也就是Linux操作系统的文件系统,Linux的文件系统入口就时/,所有的文件、设备都在/之下

    FHS(Filesystem Hierarchy Standard )

    一个由Linux爱好者发起的团队,该团队制定了FHS标准,该标准定义了每个特定目录下应该要存放什么样的数据,这样Linux就可以在不改变目录架构的前提下,自由的发展出开发者想要的Linux风格,这样不至于使用者更换了一台主机就变成了Linux”文盲“

    FHS将目录定义成四种交互作用的形态,如下

    可分享的(shareable) 不可分享的(unshareable)
    不变的(static) /usr (软件存放处) /etc(配置文件)
    /opt (第三方软件) /boot(开机与核心文档)
    可变动的 /var/mail(使用者邮件信箱) /var/run(程序相关)
    /var/spool/news(新闻组) /var/lock(程序相关)

    四种类型

    可分享的

    • 可以分享给其它系统挂载使用的目录,包括执行文件与用户的邮件数据,是能够分享给网络上其它主机挂载使用的目录

    不可分享的

    • 自己主机上面的装置文件或者时与程序相关的socket文件等,由于仅与自身主机相关,所以不能分享给其它主机使用了

    不变的

    • 有些数据时不会经常变动的,例如库文件、文件说明文件、系统管理员所管理的主机服务配置文件等

    可变动的

    • 例如登录文件,日志文件等

    Linux系统目录结构分解

    • /bin

    /bin 系统有很多放置可执行程序的目录,但/bin比较特殊,因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。

    • /boot

    /boot 主要放置开机会使用到的文件,包括Linux核心文件以及开机选单与开机所需设定文件等等。Linux kernel常用的文件名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。

    • /dev

    /dev 在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。 只要通过存取这个目录下的某个档案,就等于存取某个装置。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp, / dev/hd, /dev/sd*等等

    • /etc

    /etc 目录存放着各种系统配置文件,其中包括了用户信息文件 ****/etc/passwd**** ,系统初始化文件 ****/etc/rc**** 等。linux 正是靠这些文件才得以正常地运行。

    • /home

    /home 这是系统预设的使用者家目录(home directory)。 在你新增一个一般使用者帐号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号:

    ~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。

    • /lib

    /lib 目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间。

    • /media

    /media 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘

    • /mnt

    /mnt 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区

    • /misc

    /misc 系统建议用来挂载 NFS 服务的共享目录。

    • /opt

    /opt 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件

    • /root

    /root root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下

    • /sbin

    /sbin 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看

    • /srv

    /src 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据

    • /tmp

    /tmp 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空

    • /proc

    /proc 虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表的,/proc/net 是保存网络协议信息的......

    • /sys

    /sys 虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息

    • /usr

    /usr 系统默认的软件都存储在 /usr 目录下,/usr 目录类似 Windows 系统中 C:\Windows\ + C:\Program files\ 两个目录的综合体。

    /usr子目录及其功能

    子目录 功能(作用)
    /usr/bin/ 存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行
    /usr/sbin/ 存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。
    /usr/lib/ 应用程序调用的函数库保存位置
    /usr/XllR6/ 图形界面系统保存位置
    /usr/local/ 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置
    /usr/share/ 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
    /usr/src/ 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过笔者更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中,把内核源码保存到 /usr/src/linux/ 目录中
    /usr/include C/C++ 等编程语言头文件的放置目录
    • /var 目录

    /var 目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。通常,此目录下建议包含如表 4 所示的这些子目录。

    /var子目录 功能(作用)
    /var/lib/ 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中
    /var/log/ 登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。
    /var/run/ 一些服务和程序运行后,它们的 PID(进程 ID)保存位置
    /var/spool/ 里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。
    /var/www/ RPM 包安装的 Apache 的网页主目录
    /var/nis和/var/yp NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录
    /var/tmp 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除

    2、描述文件的元数据信息有哪些?分别表示什么含义,如何查看?如何修改文件的时间戳信息

    文件系统中的文件数据分为两类

    1. 数据(data)

      数据就是文件中的数据,这没什么好解释的,重点在下面

    2. 元数据(metadata)

    元数据描述了一个文件的特性的系统数据,元数据中包含了文件访问权限/所有者/文件数据块的分布信息等。

    如何查看元数据 stat [OPTION]... FILE...

    ⏱ 21:31:47-root:~# stat /bin
      File: /bin -> usr/bin
      Size: 7               Blocks: 0          IO Block: 4096   symbolic link
    Device: fd00h/64768d    Inode: 72657       Links: 1
    Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2020-12-19 23:01:01.909879280 +0800
    Modify: 2020-11-03 23:22:25.000000000 +0800
    Change: 2020-12-11 00:30:55.210735888 +0800
     Birth: -
    

    修改文件的元数据信息 touch

    创建文件和修改文件或者目录的时间戳
    它有两个功能:
    一、用于把已存在文件的时间标签更新为系统当前的时间(默认方式),他们的数据将原封不动地保留下来;
    二、用来创建新的空文件。
    
    2、命令语法:
    touch 【选项】 【文件名或者目录名】
    3、命令参数:
    -a 只修改文件的access(访问)时间.
    -c 或--no-create  不创建不存在的文件。
    -d 使用指定的日期时间,而非现在的时间
    -m 指修改Modify(修改)时间,而不修改access(访问)时间
    -r file 使用指定file文件的时间戳(access,modify)更新文件的时间戳(access,modify)
    -t 将时间修改为参数指定的日期,如:11042227代表11月4号22点27分
    

    3、总结软连接和硬连接的区别,并用实例操作说明

    硬链接ln Filename [Linkname]

    • 硬链接只是给文件起了一个新的名字,增加了一个新的入口,但本质上是一个文件,可以对比inode号可知

    • 对应于同一个文件系统上的同一个物理文件

    • 每个目录引用相同的inode号

    • 创建时链接数递增

    • 删除文件时,必须将所有的硬链接都删除,该文件才会真正被删除

    • 不能跨分区和驱动器

    • 不支持对目录创建硬链接

    软连接 ln -s Filename [Linkname]

    • 软链接类似windows中的快捷方式,软链接文件和源文件本质上不是同一个文件,可以对比inode号可知

    • 软链接文件的内容其实是该软链接引用的源文件名称

    • 可对目录创建软链接

    • 可实现跨分区创建软链接

    • 指向的是另外一个文件的路径,软链接文件的大小取决与指向路径的字符串的长度,不增加inode号的引用计数

    • 软连接如果使用相对路径,是相对于源文件的路径,而非相对于当前目录

    范例

    ⏱ 22:12:47-root:/date/link#echo 123 > 1.txt     #创建1个文件
    ⏱ 22:12:47-root:/date/link#ln 1.txt hard        #创建硬链接文件hard
    ⏱ 22:12:47-root:/date/link#ln -s 1.txt soft     #创建软链接文件soft
    ⏱ 22:12:47-root:/date/link#ls -li               
    total 8
    160 -rw-r--r-- 2 root root 4 Dec 20 22:11 1.txt             #硬链接和源文件类型一致,软链接文件类型为链接文件
    160 -rw-r--r-- 2 root root 4 Dec 20 22:11 hard              #硬链接和源文件inode保持一致,创建硬链接增加inode引用计数
    161 lrwxrwxrwx 1 root root 5 Dec 20 22:12 soft -> 1.txt     #软连接和源文件inode号不一致,创建软链接不增加inode引用计数
    
    ⏱ 22:19:02-root:/date/link# ls -li      
    total 8
    160 -rw-r--r-- 2 root root 4 Dec 20 22:11 1.txt
    160 -rw-r--r-- 2 root root 4 Dec 20 22:11 hard
    161 lrwxrwxrwx 1 root root 5 Dec 20 22:12 soft -> 1.txt
    ⏱ 22:19:07-root:/date/link# rm -rf 1.txt        #删除源文件1.txt
    ⏱ 22:19:21-root:/date/link# cat hard            #查看硬链接文件并不受影响
    123
    ⏱ 22:19:27-root:/date/link# cat soft            #查看软链接文件提示没有这样的文件和目录
    cat: soft: No such file or directory
    

    综上可以说明软链接和硬链接在原理上还是有区别的

    4、linux上的文件管理类命令有哪些,其常用的使用方法及其相关示例演示

    cd

    cd命令用来切换工作目录至dirname。其中dirName表示法可为绝对路径或相对路径。
    命令格式:cd [目录名]
    命令选项:
    -p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
    -L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
    - 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
    常用格式:
    cd 进入用户主目录;
    cd ~ 进入用户主目录;
    cd - 返回进入此目录之前所在的目录;
    cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
    cd ../.. 返回上两级目录; cd !$ 把上个命令的参数作为cd参数使用
    

    ls(list)

    功能说明:列出目录内容。
    
    语  法:ls [-1aAbBcCdDfFgGhHiklLmnNopqQrRsStuUvxX][-I <范本样式>][-T <跳格字数>][-w <每列字符数>][--block-size=<区块大小>][--color=<使用时机>][--format=<列表格式>][--full-time][--help][--indicator-style=<标注样式>][--quoting-style=<引号样式>][--show-control-chars][--sort=<排序方式>][--time=<时间戳记>][--version][文件或目录...]
    
    补充说明:执行ls指令可列出目录的内容,包括文件和子目录的名称。
    
    参  数:
      -1   每列仅显示一个文件或目录名称。
      -a或--all   下所有文件和目录。
      -A或--almost-all   显示所有文件和目录,但不显示现行目录和上层目录。
      -b或--escape   显示脱离字符。
      -B或--ignore-backups   忽略备份文件和目录。
      -c   以更改时间排序,显示文件和目录。
      -C   以又上至下,从左到右的直行方式显示文件和目录名称。
      -d或--directory   显示目录名称而非其内容。
      -D或--dired   用Emacs的模式产生文件和目录列表。
      -f   此参数的效果和同时指定"aU"参数相同,并关闭"lst"参数的效果。
      -F或--classify   在执行文件,目录,Socket,符号连接,管道名称后面,各自加上"*","/","=","@","|"号。
      -g   次参数将忽略不予处理。
      -G或--no-group   不显示群组名称。
      -h或--human-readable   用"K","M","G"来显示文件和目录的大小。
      -H或--si   此参数的效果和指定"-h"参数类似,但计算单位是1000Bytes而非1024Bytes。
      -i或--inode   显示文件和目录的inode编号。
      -I<范本样式>或--ignore=<范本样式>   不显示符合范本样式的文件或目录名称。
      -k或--kilobytes   此参数的效果和指定"block-size=1024"参数相同。
      -l   使用详细格式列表。
      -L或--dereference   如遇到性质为符号连接的文件或目录,直接列出该连接所指向的原始文件或目录。
      -m   用","号区隔每个文件和目录的名称。
      -n或--numeric-uid-gid   以用户识别码和群组识别码替代其名称。
      -N或--literal   直接列出文件和目录名称,包括控制字符。
      -o   此参数的效果和指定"-l" 参数类似,但不列出群组名称或识别码。
      -p或--file-type   此参数的效果和指定"-F"参数类似,但不会在执行文件名称后面加上"*"号。
      -q或--hide-control-chars   用"?"号取代控制字符,列出文件和目录名称。
      -Q或--quote-name   把文件和目录名称以""号标示起来。
      -r或--reverse   反向排序。
      -R或--recursive   递归处理,将指定目录下的所有文件及子目录一并处理。
      -s或--size   显示文件和目录的大小,以区块为单位。
      -S   用文件和目录的大小排序。
      -t   用文件和目录的更改时间排序。
      -T<跳格字符>或--tabsize=<跳格字数>   设置跳格字符所对应的空白字符数。
      -u   以最后存取时间排序,显示文件和目录。
      -U   列出文件和目录名称时不予排序。
      -v   文件和目录的名称列表以版本进行排序。
      -w<每列字符数>或--width=<每列字符数>   设置每列的最大字符数。
      -x   以从左到右,由上至下的横列方式显示文件和目录名称。
      -X   以文件和目录的最后一个扩展名排序。
      --block-size=<区块大小>   指定存放文件的区块大小。
      --color=<列表格式>   培植文件和目录的列表格式。
      --full-time   列出完整的日期与时间。
      --help   在线帮助。
      --indicator-style=<标注样式>   在文件和目录等名称后面加上标注,易于辨识该名称所属的类型。
      --quoting-syte=<引号样式>   把文件和目录名称以指定的引号样式标示起来。
      --show-control-chars   在文件和目录列表时,使用控制字符。
      --sort=<排序方式>   配置文件和目录列表的排序方式。
      --time=<时间戳记>   用指定的时间戳记取代更改时间。
      --version   显示版本信息。
    

    rm

    rm(remove)
    功能说明:删除文件或目录。
    语  法:rm [-dfirv][--help][--version][文件或目录...]
    补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数"-r",否则预设仅会删除文件。 
    参  数:
     -d或--directory  直接把欲删除的目录的硬连接数据删成0,删除该目录。 
     -f或--force  强制删除文件或目录。 
     -i或--interactive  删除既有文件或目录之前先询问用户。 
     -r或-R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。 
     -v或--verbose  显示指令执行过程。 
     --help  在线帮助。 
    

    cp

    cp(copy)
    功能说明:复制文件或目录。 
    语  法:cp [-abdfilpPrRsuvx][-S <备份字尾字符串>][-V <备份方式>][--help][--spares=<使用时机>][--version][源文件或目录][目标文件或目录] [目的目录] 
    补充说明:cp指令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。
    参  数:
     -a或--archive  此参数的效果和同时指定"-dpR"参数相同。 
     -b或--backup  删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串。 
     -d或--no-dereference  当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。 
     -f或--force  强行复制文件或目录,不论目标文件或目录是否已存在。 
     -i或--interactive  覆盖既有文件之前先询问用户。 
     -l或--link  对源文件建立硬连接,而非复制文件。 
     -p或--preserve  保留源文件或目录的属性。 
     -P或--parents  保留源文件或目录的路径。 
     -r  递归处理,将指定目录下的文件与子目录一并处理。 
     -R或--recursive  递归处理,将指定目录下的所有文件与子目录一并处理。 
     -s或--symbolic-link  对源文件建立符号连接,而非复制文件。 
     -S<备份字尾字符串>或--suffix=<备份字尾字符串>  用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字尾字符串是符号"~"。 
     -u或--update  使用这项参数后只会在源文件的更改时间较目标文件更新时或是 名称相互对应的目标文件并不存在,才复制文件。 
     -v或--verbose  显示指令执行过程。 
    

    mv

    mv
    功能说明:移动或更名现有的文件或目录。
    语  法:mv [-bfiuv][--help][--version][-S <附加字尾>][-V <方法>][源文件或目录][目标文件或目录]
    补充说明:mv可移动文件或目录,或是更改文件或目录的名称。
    参  数:
     -b或--backup  若需覆盖文件,则覆盖前先行备份。 
     -f或--force  若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录。 
     -i或--interactive  覆盖前先行询问用户。 
     -S<附加字尾>或
     --suffix=<附加字尾>  与-b参数一并使用,可指定备份文件的所要附加的字尾。 
     -u或--update  在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。 
     -v或--verbose  执行时显示详细的信息。 
     -V=<方法>或
     --version-control=<方法>  与-b参数一并使用,可指定备份的方法。 
     --help  显示帮助。 
     --version  显示版本信息。 
    

    mkdir

    mkdir(make directories)
    功能说明:建立目录
    语  法:mkdir [-p][--help][--version][-m <目录属性>][目录名称]
    补充说明:mkdir可建立目录并同时设置目录的权限。
    参  数:
      -m<目录属性>或--mode<目录属性>   建立目录时同时设置目录的权限。
      -p或--parents   若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。
      --help   显示帮助。
      --verbose   执行时显示详细的信息。
      --version   显示版本信息。 
    

    rmdir

    rmdir(remove directory)
    功能说明:删除目录。
    语  法:rmdir [-p][--help][--ignore-fail-on-non-empty][--verbose][--version][目录...]
    补充说明:当有空目录要删除时,可使用rmdir指令。
    参  数:
      -p或--parents   删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除。
      --help   在线帮助。
      --ignore-fail-on-non-empty   忽略非空目录的错误信息。
      --verbose   显示指令执行过程。
      --version   显示版本信息。 
    

    文本内容查看命令

    cat:正向查看文本内容
     格式:cat [OPTION]... [FILE]...   
         -n:给显示的文本行编号   
         -E:显示行结束符号$
         示例:cat -n /etc/fstab --查看/etc/fatab内容并显示行号
        
    tac:倒叙查看文本内容
     格式:tac [OPTION]... [FILE]...
     示例:tac /etc/passwd --倒叙查看文本内容
     
    head:显示文本内容,默认显示头10行
     格式:head [OPTION]... [FILE]...   
        -n #:显示文本头#行内容
        示例:head -5 /etc/passwd --显示/etc/passwd文件头5行内容
        
    tail:显示文本内容,默认显示后10行
     格式:tail [OPTION]... [FILE]...   
        -n #:显示文本后#行内容   
        -f:查看文件尾部内容结束后不退出,跟随显示新增的行
        示例:tail -8 /etc/passwd --显示/etc/passwd文件后8行内容
    

    5、复制etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

    cp /etc/profile /tmp/profile
    cat /tmp/profile |egrep '^[[:space:]]+.*'|tr -d ' '
    

    6、在vim中设置tab缩进为4个字符

    set tabstop=4
    

    相关文章

      网友评论

          本文标题:第二周:Linux之文件编辑管理

          本文链接:https://www.haomeiwen.com/subject/sdvlnktx.html