描述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、描述文件的元数据信息有哪些?分别表示什么含义,如何查看?如何修改文件的时间戳信息
文件系统中的文件数据分为两类
-
数据(data)
数据就是文件中的数据,这没什么好解释的,重点在下面
元数据(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