Linux运维学习历程-第五天-Linux文件系统与管理
本章内容
文件系统
文件和目录被组织成一个单根倒置树结构从根目录下开始,用“/” 表示根文件系统(rootfs) :root filesystem,用路径分隔的 /;遵循FHS: (Filesystem Hierarchy Standard)
文件系统分层结构:LSB Linux Standard Base
文件系统结构
/boot :引导文件存放目录,内核文件(vmlinuz) 、引导加载器(bootloader, grub) 都存放于此目录
/bin :供所有用户使用的基本命令;不能关联至独立分区,OS 启动即会用到的程序
/sbin :管理类的基本命令;不能关联至独立分区,OS 启动即会用到的程序
/lib :启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64 :专用于x86_64 系统上的辅助共享库文件存放位置
/etc :配置文件目录
/home/ USERNAME :普通用户家目录
/root :管理员的家目录
/media :便携式移动设备挂载点
/mnt :临时文件系统挂载点
/dev :设备文件及特殊文件存储位置
b: block device ,随机访问, 有缓存、物理
c: character device ,线性访问,无缓存、逻辑
/opt :第三方应用程序的安装位置
/srv :系统上运行的服务用到的数据
/tmp:临时文件存储位置
空设备:/dev/null
/usr: universal shared, read-only data
bin: 保证系统拥有完整功能而提供的应用程序
sbin:
lib :32 位使用
lib64 :只存在64 位系统
include: C 程序的头文件(header files)
share :结构化独立的数据,例如doc, man等 等
local :第三方应用程序的安装位置
bin, sbin, lib, lib64, etc, share
/var: variable data files
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local :专用于为/usr/local 下的应用程序存储可变数据;
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt 下的应用程序存储可变数据;
run: 运行中的进程相关数据;通常用于存储进程pid 文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys :用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux ,selinux 相关的安全策略等信息的存储位置
/misc centos6中存在 可用/misc/cd挂载光驱
/net 涉及到网络服务
RHEL7 目录变化
/bin 和 和 /usr/bin
/sbin 和 和 /usr/sbin
/lib 和/usr/lib
/lib64 和 和 /usr/lib64
文件有两类数据:
元数据:metadata 包括大小、时间、所属主、组、权限等
数据:data 文件的内容
文件名规则
除了斜杠和NUL, 所有字符都有效. 但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们。
包括路径在内文件名称最长4095 个字节,用/ 分隔的路径不能超过255 个字节。
标准Linux 文件系统(如ext4 ),文件名称大小写敏感。例如:MAIL, Mail, mail, mAiL,但是linxu在FAT文件系统下大小写不敏感,例如挂载的U盘(FAT文件系统)所以说linux大小写敏感是基于文件系统的
Linux 下的文件类型
以文件权限开头区分
– :普通文件 灰色 文本、二进制文件等
可执行文件 绿色 .ELF等
压缩文件 红色 .tar等
d: 目录文件 深蓝色
b: 块设备 随机访问 亮黄色 有缓存 物理设备
c: 字符设备 顺序访问 亮黄色 无缓存 逻辑设备
l: 符号链接文件 浅蓝色
p: 管道文件pipe 黄色
s: 套接字文件socket 粉色 用于进程间通讯
Linux 上的应用程序的组成部分
二进制程序:/bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin, /usr/local/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64,/usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
帮助文件:/usr/share/man, /usr/share/doc,/usr/local/share/man, /usr/local/share/doc
显示当前工作目录
每个shell 和系统进程都有一个当前的工作目录CWD:current work directory
显示当前shell CWD 的绝对路径
#pwd: printing working directory
绝对和相对路径名
绝对路径:以正斜杠开始,完整的文件的位置路径,可用于任何想指定一个文件名的时候
相对路径:不以斜线,开始指定相对当前的工作目录位置,可以作为一个简短的形式指定一个文件名
更改目录
cd:改变当前shell工作目录
cd [-L|[-P [-e]]] [dir]
-p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。 – 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
为绝对或相对路径:
cd /home/joshua/work
cd project/docs
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd – 返回进入此目录之前所在的目录;
cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. 返回上两级目录;
cd !$ 把上个命令的参数作为cd参数使用。
相关的环境变量:
PWD :保存了当前目录路径;
OLDPWD :上一次所在目录路径;
列出目录内容
列出当前目录的内容或指定目录
用法:
ls [options] [files_or_dirs]
Example:
ls -a 包含隐藏文件
ls -l 显示额外的信息
ls -R 目录递归通过
ls -ld 目录和符号链接信息
ls -1 文件分行显示
ls –S 按从大到小排序
ls –u 配合-t 选项,显示并按atime 从新到旧排序
ls –U 不排序按目录存放顺序显示
glob文件通配符
* 匹配零个或多个字符
? 匹配任何单个字符
~ 当前用户家目录
~username 用户家目录
~+ 当前工作目录
~- 前一个工作目录
[0-9] 匹配一个数字范围
[1-3] 1到3 [^1a3]或非1或非a或非3
[a-z] 大写和小写字母
[A-Z] 大写字母
[wxc] 匹配列表中的任何的一个字符[^wxc] 匹配列表中的所有字符以外的字符
预定义的字符类:#man 7 glob
[:digit:] :任意数字,相当于0-9
[:lower:] :任意小写字母
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:] :任意数字 或 字母
[:blank:] :水平空白字符
[:space:] :水平或垂直空白字符
[:punct:]: : 标点符号
[:print:] :可打印字符
[:cntrl:] :控制(非打印)字符
[:graph:] :图形字符
[:xdigit:]:十六进制字符
查看文件状态
stat
文件:metadata, data
三个时间戳:
access time:访问时间,atime,读取文件内容 因为relattime的原因:atime>一天或atime<mtime时更新
modify time: 修改时间, mtime,改变文件内容(数据)
change time: 改变时间, ctime,元数据发生改变
touch 命令:创建空文件和刷新时间
touch [OPTION]… FILE…
-a: 变 仅改变 atime
-m: 变 仅改变 mtime
-t :STAMP:[[CC]YY]MMDDhhmm[.ss]
-c: 如果文件不存在,则不予创建
复制文件和目录cp
cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
cp SRC DEST
SRC 是文件:
如果目标不存在:新建DEST ,并将SRC 中内容填充至DEST中 实质是:复制并改名
如果目标存在:
如果DEST 是文件:将SRC 中的内容覆盖至DEST中;基于安全,建议为cp 命令使用-i 选项
如果DEST 是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
cp SRC… DEST
SRC… :多个文件
DEST 必须存在,且为目录,其它情形均会出错;
cp SRC DEST
SRC是目录:此时使用选项:-r
如果DEST 不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;
如果DEST存在:
如果DEST是文件:报错
如果DEST目录:在DEST下新建与原目录同名的目录,并将SRC中内容复制至新目录中
如果DEST目录下的内容和复制目录内的相同,则会连同复制目录本身也复制过来作为DEST目录的子目录,如果再次复制则会产生覆盖此子目录的操作
-a, –archive 等于-dR –preserve=all
–backup[=CONTROL 为每个已存在的目标文件创建备份
-b 类似–backup 但不接受参数
–copy-contents 在递归处理是复制特殊文件内容
-d 等于–no-dereference –preserve=links
-f, –force 如果目标文件无法打开则将其移除并重试(当 -n 选项
存在时则不需再选此项)
-i, –interactive 覆盖前询问(使前面的 -n 选项失效)
-H 跟随源文件中的命令行符号链接
-l, –link 链接文件而不复制
-L, –dereference 总是跟随符号链接
-n, –no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P, –no-dereference 不跟随源文件中的符号链接
-p 等于–preserve=模式,所有权,时间戳
–preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr 等
-c same as –preserve=context
–sno-preserve=属性列表 不保留指定的文件属性
–parents 复制前在目标目录创建来源文件路径中的所有目录
-R, -r, –recursive 递归复制目录及其子目录内的所有内容
–reflink[=WHEN] 控制克隆/CoW 副本。请查看下面的内如。
–remove-destination 尝试打开目标文件前先删除已存在的目的地
文件 (相对于 –force 选项)
–sparse=WHEN 控制创建稀疏文件的方式
–strip-trailing-slashes 删除参数中所有源文件/目录末端的斜杠
-s, –symbolic-link 只创建符号链接而不复制文件
-S, –suffix=后缀 自行指定备份文件的后缀
-t, –target-directory=目录 将所有参数指定的源文件/目录复制至目标目录
-T, –no-target-directory 将目标目录视作普通文件
命令别名
显示当前shell 进程所有可用的命令别名
#alias
定义别名NAME ,其相当于执行命令VALUE; ;
#alias NAME='VALUE'
在命令行中定义的别名,仅对当前shell 进程有效
如果想永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效;
bash 进程重新读取配置文件:
source /path/to/config_file
. /path/to/config_file
撤消别名:unalias
unalias [-a] name [name …]
如果别名同原命令同名,如果要执行原命令,可使用
“\COMMAND”
’COMMAND’
/PATH/COMMAND 绝对路径
mv:移动(重命名)文件
source表示源文件或目录,target表示目标文件或目录。
mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。
源文件被移至目标文件有两种不同的结果:
1、如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
2、如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。
3、如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。 注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
长选项必须使用的参数对于短选项时也是必需使用的。
–backup[=CONTROL] 为每个已存在的目标文件创建备份
-b 类似–backup 但不接受参数
-f, –force 覆盖前不询问
-i, –interactive 覆盖前询问
-n, –no-clobber 不覆盖已存在文件,如果您指定了-i、-f、-n 中的多个,仅最后一个生效。
–strip-trailing-slashes 去掉每个源文件参数尾部的斜线
-S, –suffix=SUFFIX 替换常用的备份文件后缀
-t, –target-directory=DIRECTORY 将所有参数指定的源文件或目录
移动至 指定目录
-T, –no-target-directory 将目标文件视作普通文件处理
-u, –update 只在源文件文件比目标文件新,或目标文件
不存在时才进行移动
-v, –verbose 详细显示进行的步骤
备份文件的后缀为"~",除非以–suffix选项或是SIMPLE_BACKUP_SUFFIX环境变量指定。版本控制的方式可通过–backup选项或VERSION_CONTROL 环境变量来选择。以下是可用的变量值:
none, off 不进行备份(即使使用了–backup 选项)
numbered, t 备份文件加上数字进行排序
existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never 永远使用普通方式备份
rm:删除文件或目录
rm [OPTION]… FILE…
-f, –force 强制删除。忽略不存在的文件,不提示确认
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录
-i 在删除前需要确认
-I 在删除超过三个文件或者递归删除前要求确认。此选项比-i 提
示内容更少,但同样可以阻止大多数错误发生
–interactive[=WHEN] 根据指定的WHEN 进行确认提示:never,once (-I),
或者always (-i)。如果此参数不加WHEN 则总是提示
–one-file-system 递归删除一个层级时,跳过所有不符合命令行参
数的文件系统上的文件
–no-preserve-roo 不特殊对待"/"
–preserve-root 不允许删除"/"(默认)
-r, -R, –recursive 递归删除目录及其内容
-v, –verbose 详细显示进行的步骤
注意:
默认时,rm 不会删除目录。使用–recursive(-r 或-R)选项可删除每个给定的目录,以及其下所有的内容。
要删除第一个字符为"-"的文件 (例如"-foo"),请使用以下方法之一:
rm — -foo
rm ./-foo
请注意,如果使用rm 来删除文件,通常仍可以将该文件恢复原状。如果想保证该文件的内容无法还原,请考虑使用shred。
对于链接文件,只是删除整个链接文件,而原有文件保持不变。
注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以在删除文件之前,最好再看一下文件的内容,确定是否真要删除。
rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
目录操作
tree默认系统中没有安装,需要手动安装
tree 显示目录树
-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-L 层级显示
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用"?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
mkdir 创建目录
长选项必须使用的参数对于短选项时也是必需使用的。
-m, –mode=模式 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask
-p, –parents 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
-v, –verbose 每次创建新目录都显示信息
-Z, –context=CTX 将每个创建的目录的SELinux 安全环境设置为CTX
–version 显示版本信息并退出
注意:该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
rmdir 删除空目录
rmdir [OPTION]… DIRECTORY…
-p或–parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
–ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息;
-v或-verboes:显示命令的详细执行过程;
–version:显示命令的版本信息。
在Nautilus 中移动和复制
拖曳及放下
拖动:移动在同一文件系统,在不同的文件系统复制
拖动+ Ctrl键 键 :始终复制
拖动+ Alt键 键 :询问是否复制,移动或创建符号链接(别名)
上下文菜单
右键单击要重命名,剪切,复制或粘贴
索引节点
inode (index node )表中包含文件系统所有文件列表
一个节点(索引节点)是在一个表项,包含有关文件的信息
( 元数据 ),包括:
文件类型,权限,UID ,GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
同一分区下inode编号唯一,不同分区可以一样,每个分区都有各自的分区表inode table
元数据:存放在 inode table
数据内容:存放在 数据block
指针占据4个字节空间
直接指针:12个 直接能找到低于12*4k数据
间接指针:指向一指针数据块
一般inode表会占用文件系统磁盘空间的1%,一个目录文件的内容就是一个该目录项的列表
目录
文件引用一个是 inode号
人是通过文件名来引用一个文件
一个目录是目录下的文件名和文件inode号之间的映射
cp 和inode
在 在 CP的 的 命令:
分配一个空闲的inode 号,在inode 表中生成新条目在目录中创建一个目录项,将名称与inode 编号关联,拷贝数据生成新的文件
rm和inode
rm命令:
链接数递减,从而释放的inode 号可以被重用,把数据块放在空闲列表中,删除目录项,数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。
mv 和inode
如果mv 命令的目标和源在相同的文件系统,作为mv
命令用新的文件名创建对应新的目录项
删除旧目录条目对应的旧的文件名
不影响inode 表(除时间戳)或磁盘上的数据位置:没有数据被移动!
如果目标和源在一个不同的文件系统, mv 相当于cp 和rm
硬链接(一个文件多个名字)
创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增
注意:
硬连接不能跨分区;不能对目录操作
centos6中 inode=2的都是分区的根
inode=1的都是虚拟目录
centos7中 inode=128都是分区的根
删除文件时:
rm 命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区
语法 :
ln filename [linkname ]
符号(或软)链接
一个符号链接指向另一个文件
ls – l的 的 显示链接的名称和引用的文件
一个符号链接的内容是它引用文件的名称
可以对目录进行
可以跨分区
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode 的引用计数;
语法:
ln -s filename [linkname]
原始文件路径 软链接
软链接文件:
路径
原始文件相对路径:相当于软链接文件路径,而不是相对于当前工作目录
确定文件内容
文件可以包含多种类型的数据
检查文文件类型,然后确定适当的开放命令或应用程序使用
file [options] <filename>…
Option:
-b 列出文件辨识结果时,不显示文件名称。
-c 详细显示指令执行过程,便于排错或分析程序执行形
-f 列出文件中文件名的文件类型
-F 使用指定分隔符号替换输出文件名后默认的”:” 分隔符
-i 输出mime类型的字符串
-L 查看对应软链接对应文件的文件类型
-z 尝试去解读压缩文件的内容
–help显示命令在线帮助
原创文章,作者:NameLess,如若转载,请注明出处:http://www.178linux.com/28139
评论列表(1条)
对命令的总结很好,如果能有一些小示例就更好了