1.Linux系统目录结构
1.1目录及功能
目录规范参考网站:http://www.pathname.com/fhs/
/bin:用户基本命令
/sbin:系统管理类命令
/lib:启动时程序依赖的基本共享库文件以及内核模块文件
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
(以上目录在centos8中变为、usr对应目录的软链接)
/usr: the second major section of the filesystem,shareable, read-only data
- bin:可执行命令的主目录
- sbin:系统管理员专用命令
- lib:32位使用
- lib64:64位系统专用
- share:应用程序资源保存位置如帮助文档、字体等
- local:第三方应用程序安装位置
/boot:系统引导文件存放目录
/etc:配置文件目录
/home:用户家目录
/root:管理员家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
/opt:第三方应用程序的安装位置
/tmp:临时文件存储位置
/var:可变数据文件目录(日志,管理数据等)
- cache: 应用程序缓存数据目录
- lib: 应用程序状态信息数据
- local:专用于为/usr/local下的应用程序存储可变数据
- lock: 锁文件
- log: 日志目录及文件
- opt: 专用于为/opt下的应用程序存储可变数据
- run: 运行中的进程相关数据,通常用于存储进程pid文件
- spool: 应用程序数据池
- tmp: 保存系统两次重启之间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置
1.2文件类型及组成
每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容
1.2.1 文件组成
-:表示普通文件
d:目录文件
b:块设备文件(以块为单位如磁盘,U盘等设备)
c:字符设备(以字符为单位,并按一定的顺序进行输入输出,如鼠标键盘等设备)
l:链接文件(可以简单理解为windows中的软链接)
p:管道文件(特殊文件类型,主要是为了实现进程间的通信,采用半双工通信)
s:套接字文件socket:(全双工通信,通常用于基于网络的数据通讯)
2.文件操作命令
2.1 pwd
pwd:查看用户当前所在目录
- -L 显示链接路径(默认)
- -P 显示真实物理路径
[root@centos8 bin]# ll /bin
lrwxrwxrwx. 1 root root 7 May 11 2019 /bin -> usr/bin
[root@centos8 bin]# pwd -L
/bin
[root@centos8 bin]# pwd -P
/usr/bin
2.2基名字和目录名
基名:basename,路径只取文件名
目录名:dirname,路径只取路径
[root@centos8 bin]# basename /etc/sysconfig/network
network
[root@centos8 bin]# dirname !*
dirname /etc/sysconfig/network
/etc/sysconfig
2.3 cd
cd: cd [-L|[-P [-e]] [-@]] [dir]
Change the shell working directory.
快捷用法
- 切换至父目录 cd ..
- 切换至当前工作目录 cd .
- 切换至上一次工作目录 cd -
注意:这里上一次工作目录是保存在OLDPWD变量当中的,所以只能切换到上一次工作目录,而无法返回再往前的目录
[root@centos8 bin]# cd /
[root@centos8 /]# echo $OLDPWD
/bin
[root@centos8 /]# cd -
/bin
2.4 ls
ls :列出当前目录内容或指定目录内容
SYNOPSIS
ls [OPTION]... [FILE]...
常用选项
- -a 列出所有文件,包括隐藏文件
- -l 显示更为详细的信息
- -R 递归展示目录
- -d 展示目录而不显示目录的内容
- -s 按照大小排序
- -t 按照mtime排序
说明:
ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS 和@LS_COLORS变量定义
ls是'ls --color=auto'别名
[root@centos8 etc]# ls -ld /etc/
drwxr-xr-x. 78 root root 8192 Dec 6 06:19 /etc/
2.5 stat
stat:显示文件或文件系统的状态
文件三个时间戳及其含义:
- atime 访问时间,如执行读取文件操作可以改变访问时间
- mtime 修改时间 ,如利用vim修改文件时时间会发生改变
- ctime 改变时间,元数据(文件属性)发生改变时
[root@centos8 ~]# stat ls
File: ls
Size: 116 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201327540 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-11-29 22:04:36.787356892 +0800
Modify: 2020-11-29 22:04:36.787356892 +0800
Change: 2020-11-29 22:04:36.787356892 +0800
Birth: -
#使用ll就能查看到文件的元数据
[root@centos8 ~]# ll
-rw-------. 1 root root 1548 Nov 21 03:24 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Dec 7 05:01 lx.txt
#权限 引用计数 所有者和所属组 大小 修改时间 文件名
2.6 file
file:判断文件类型
file [options] <filename>...
常用选项:
- -b 只显示判断的文件类型,不显示文件名
- -f 判断文件File中文件名的类型
- -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
- -L 查看对应软链接对应文件的文件类型
[root@centos8 ~]# cat lx.txt
/root/lx.txt
/root/ls
/etc/sysconfig
[root@centos8 ~]# file -f lx.txt
/root/lx.txt: ASCII text
/root/ls: ASCII text
/etc/sysconfig: directory
[root@centos8 ~]# file -L /bin/
/bin/: directory
[root@centos8 ~]# file /bin
/bin: symbolic link to usr/bin
注意:windows文件系统和linux是不同的,即使windows文本格式文件在linux系统中以16进制查看所显示内容也是有区别的,所以尽量不要在Linux系统中使用windows的文件,如要使用也最好进行文件转换
[root@centos8 data]#cat linux.txt
a
b
c
[root@centos8 data]#cat win.txt
a
b
c[root@centos8 data]#file win.txt linux.txt
win.txt: ASCII text, with CRLF line terminators
linux.txt: ASCII text
[root@centos8 data]#hexdump -C linux.txt
00000000 61 0a 62 0a 63 0a |a.b.c.|
00000006
[root@centos8 data]#hexdump -C win.txt
00000000 61 0d 0a 62 0d 0a 63 |a..b..c|
00000007
#安装转换工具
[root@centos8 data]#dnf -y install dos2unix
#将Windows的文本格式转换成的Linux文本格式
[root@centos8 data]#dos2unix win.txt
dos2unix: converting file win.txt to Unix format...
[root@centos8 data]#file win.txt
win.txt: ASCII text
#将Linux的文本格式转换成Windows的文本格式
[root@centos8 data]#unix2dos win.txt
unix2dos: converting file win.txt to DOS format...
[root@centos8 data]#file win.txt
win.txt: ASCII text, with CRLF line terminators
转换文件字符集编码
#显示支持字符集编码列表
[root@centos8 ~]#iconv -l
#windows10上文本默认的编码ANSI(GB2312)
[root@centos8 data]#file windows.txt
windows.txt: ISO-8859 text, with no line terminators
[root@centos8 data]#echo $LANG
en_US.UTF-8
#默认在linux无法正常显示文本内容
[root@centos8 data]#cat windows11.txt
▒▒▒▒▒▒[root@centos8 data]#
#将windows10上文本默认的编码ANSI(GB2312)转换成UTF-8
[root@centos8 data]#iconv -f gb2312 windows.txt -o windows1.txt
[root@centos8 data]#cat windows1.txt
123[root@centos8 data]#ll windows1.txt
-rw-r--r-- 1 root root 12 Mar 23 10:13 windows1.txt
[root@centos8 data]#file windows1.txt
windows1.txt: UTF-8 Unicode text, with no line terminators
#将UTF-8转换成windows10上文本默认的编码ANSI(GB2312)
[root@centos8 data]#iconv -f utf8 -t gb2312 windows1.txt -o windows11.txt
[root@centos8 data]#file windows11.txt
windows11.txt: ISO-8859 text, with no line terminators
示例
#将windows10上文本默认的编码ANSI(GB2312)转换成UTF-8
[15:34:50 root@centos8 ~]#iconv -f gb2312 win.txt -o win2.txt
[15:34:50 root@centos8 ~]#file linux.txt
linux.txt: ASCII text
[15:34:31 root@centos8 ~]#file windows.txt
windows.txt: ASCII text, with CRLF line terminators
#将windows的文本格式转换成Linux的文本格式
[15:35:26 root@centos8 ~]#dos2unix windows.txt
dos2unix: converting file windows.txt to Unix format...
[15:36:00 root@centos8 ~]#file windows.txt
windows.txt: ASCII text
示例
[root@centos8 ~]#cat list.txt
/etc/
/bin
/etc/issue
[root@centos8 ~]#file -f list.txt
/etc/: directory
/bin: symbolic link to usr/bin
/etc/issue: ASCII text
2.7通配符
用来匹配符合条件的文件
常见的通配符
* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
? 匹配任何单个字符
~ 当前用户家目录
~user 用户user家目录
~+和. 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 匹配小写字母范围
[A-Z] 匹配大写字母范围
[number] 匹配列表中的任何的一个字符
[^number] 匹配列表中的所有字符以外的字符
系统中预定义的字符类:man 7 glob
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z
[:upper:]: 任意大写字母,表示 A-Z
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
2.8 touch
touch:创建空文件和改变文件时间
touch [OPTION]... FILE...
选项:
- -a 仅改变 atime和ctime
- -m 仅改变 mtime和ctime
- -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
- -c 如果文件不存在,则不予创建
#touch命令最常用的用法就是用来创建空文件
[root@centos8 data]#touch `date -d "-1 day" +%F_%T`.log
[root@centos8 data]#ll
-rw-r--r-- 1 root root 0 Dec 6 22:00 2020-12-05_22:00:15.log
[root@centos8 data]#touch $(date -d "1 year" +%F_%T).log
[root@centos8 data]#ll
-rw-r--r-- 1 root root 0 Dec 6 22:00 2021-12-06_22:00:38.log
2.9 cp
cp:复制文件或目录
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
alias cp='cp -i'
常用选项
- -a 归档,相当于-dR --preserv=all,常用于备份功能
- -i 如果目标已存在,覆盖前提示是否覆盖
- -r, -R 递归复制目录及内部的所有内容
- -b 目标存在,覆盖前先备份,默认形式为 filename~ ,只保留最近的一个备份
- --backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.# ,可以保留多 个版本
- -v 显示复制过程
#复制文件
[root@centos8 /]# cp -a /root/lx.txt /data/
[root@centos8 /]# ls /data/
lx.txt
#复制目录
[root@centos8 /]# cp -r /etc/sysconfig/ /data
[root@centos8 /]# ll /data/
total 8
-rw-r--r-- 1 root root 253 Dec 6 21:55 lx.txt
drwxr-xr-x 6 root root 4096 Dec 6 22:15 sysconfig
2.10 mv
mv:对文件或目录进行移动和改名
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项
- -i 交互式
- -f 强制
- -b 目标存在,覆盖前先备份
使用rename可以完成对文件的批量改名
SYNOPSIS
rename [options] expression replacement file...
[root@centos8 data]# ls
file10.txt file2.txt file4.txt file6.txt file8.txt lx.txt
file1.txt file3.txt file5.txt file7.txt file9.txt sysconfig
[root@centos8 data]# rename '.txt' '' *.txt
[root@centos8 data]# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 lx sysconfig
[root@centos8 data]#
2.11 rm
rm:删除文件或目录
rm [OPTION]... [FILE]...
常用选项
- -i 交互式
- -f 强制删除
- -r 递归
删除特殊文件:-f
1.rm -- -foo
2.rm ./-foo
[root@centos8 data]# touch ./-f
[root@centos8 data]# ls
-f
[root@centos8 data]# rm -rf -- -f
使用shred可以对磁盘惊醒覆盖,从而彻底删除文件
2.12 目录命令
2.12.1 tree:显示目录树
常用选项
- -d: 只显示目录
- -L level:指定显示的层级数目
- -P pattern: 只显示由指定wild-card pattern匹配到的路径
2.12.2 mkdir
mkdir:创建目录
常用选项:
- -v: 显示详细信息
2.12.3 rmdir
rmdir:删除空目录,使用较少
3.EXT文件系统和链接
3.1文件系统组成
3.1.1 superblock
superblock:记录文件系统整体信息,如inode/block的总量、使用量、剩余及档案系统格式等信息
3.1.2 inode结构
inode块中保存的是文件的属性信息,包括以下内容
- inode number 节点号
- 文件类型
- 权限
- UID
- GID
- 链接数
- 文件大小和atime、ctime、mtime
- 文件内容的真正位置
- 其他文件相关数据
3.1.3 目录
目录是个特殊文件,檔案系統会分配一个 inode 与至少一个 block 给目录。其中,inode 记录目录相关权限与属性,和可分配到的block块的号码; 而 block 则是记录在这个目录下的文件名占用的inode number节点号。
cp和inode
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm和inode
- 链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
-
如果mv命令的目标和源在相同的文件系统,作为mv 命令
用新的文件名创建对应新的目录项
删除旧目录条目对应的旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据 被移动!
-
如果目标和源在一个不同的文件系统, mv相当于cp和rm
3.2硬链接
硬链接本质上就给一个文件起一个新的名称,实质是同一个文件
硬链接特性
- 创建硬链接会在对应的目录中增加额外的记录项以引用文件
- 对应于同一文件系统上一个物理文件
- 每个目录引用相同的inode号
- 创建时链接数递增
- 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文 件被删除
- 不能跨越驱动器或分区
- 不支持对目录创建硬链接
为什么不能硬链接目录
链接目录时会多出一个.,而.又会让目录产生一个新的链接,这会导致错误循环问题
ln [OPTION]... TARGET... DIRECTORY
3.3符号 symbolic (或软 soft)链接
一个符号链接指向另一个文件,就像 windows 中快捷方式,软链接文件和原文件本质上不是同一个文件
软链接特点
- 可以对目录创建软链接
- 可以跨分区的文件实现
- 软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录
- 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的 引用计数
- 一个符号链接的内容是它引用文件的名称
3.4软链接和硬链接的区别
-
本质:
硬链接:本质是同一个文件
软链接:本质不是同一个文件
-
跨区
硬链接:不支持
软链接:支持
-
inode
硬链接:相同
软链接:不同
-
链接数
硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
软链接:创建或删除,链接数不会变化
-
目录
硬链接:不支持
软链接:支持
-
相对路径
硬链接:原始文件相对路径是相对于当前工作目录
软链接:原始文件的相对路径是相对于链接文件的相对路径
-
删除源文件
硬链接:只是链接数减一,但链接文件的访问不受影响
软链接:链接文件将无法访问
-
文件类型
硬链接:和源文件相同
软链接:链接文件,和源文件无关