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

描述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之文件编辑管理)