文件管理
一、Linux下的文件系统
1.1 Windows和Linux组织文件区别
操作系统 | 方式 |
---|
Windows: | 以多根的方式组织文件 C:\ D:\ E:\ | Linux: | 以单根的方式组织文件 / |
1.2 Linux下目录介绍
目录 | 用处 |
---|
/bin-> /usr/bin | 普通用户命令目录,如/bin/ls ,RHEL7淘汰 | /sbin -> /usr/sbin | 管理员命令目录,只有超级管理员可以执行 ,如/sbin/service ,RHEL7淘汰 | /dev | 设备文件,如/dev/sda , /dev/sr0 光驱设备, /dev/null 。 注意,该目录下的文件没有办法直接使用,必须先挂载 | /root | root用户的家目录,超级管理员登录后会自动切换到该目录 | /home | 普通用户家目录,用户登录后会自动切换到该目录 | /proc | 虚拟的文件系统,反应出来的是内核,进程信息或实时状态 | /sys | 虚拟的文件系统,类同proc,主要保存于内存相关的信息 | /usr | 系统文件目录,相当于C:\Windows
/usr/local 软件安装的目录,相当于C:\Program Files
/usr/bin 普通用户使用的应用程序
/usr/sbin 管理员使用的应用程序
/usr/lib 库文件Glibc
/usr/lib64 库文件Glibc | /boot | 存放系统启动相关的文件,例如kernel,grub(引导转载程序) | /etc | 各个软件的配置文件 | /lib -> /usr/lib | 库文件Glibc ,RHEL7淘汰 | /lib64 -> /usr/lib64 | 库文件Glibc,RHEL7淘汰 | /tmp | 临时文件(所有用户都可以访问和写入,进程产生的临时文件) | /var | 存档的是一些变化文件,比如数据库,日志,邮件,网站文件… | /media | 挂载目录,早期Linux挂载目录,用于挂载光盘以及软盘媒体设备 | /mnt | 挂载目录,手工挂载设备的挂载点,用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 | /opt | 第三方软件目录,这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中,但也有人习惯把软件放到 /usr/local/ 目录中。 | /run | 正在运行的软件的程序目录 |
1.3 Linux下重要的配置/设备文件(面试重点)
/etc/rc.local :保存的是?户?定义开机引导启动的程序;/etc/resolv.conf :域名解析,是DNS客户机的配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序/etc/hostname :存放主机名/etc/hosts :本地域名解析文件/etc/motd :开机自动打印文本内容/etc/os-release :查看本机的版本信息/proc/cpuinfo :处理器相关信息/proc/meminfo :内存相关信息/var/log/message :包括整体系统信息,其中也包含系统启动期间的日志/dev/tty :终端文件/dev/null :黑洞文件/etc/profile :此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d 目录的配置文件中收集shell的设置;/etc/bashrc :为每一个运行bash shell 的用户执行此文件,当bash shell 被打开时,该文件被读取~/.bash_profile :每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,它设置一些环境变量,执行用户的.bashrc 文件;~/.bashrc :该文件包含用于你的bash shell 的bash 信息,当登录时以及每次打开新的shell 时,该文件被读取;~/.bash_logout :当每次退出系统(退出bash shell )时,执行该文件;
1.4 Linux下文件命名规则
- 理论上除了字符
/ 之外,所有的字符都可以使用,但是,在目录名或文件名中,不建议使用特殊字符 - linux严格区分大小写
- 如果必须对文件名进行分割,建议使用
_ - 目录名或文件名的长度不能超过 255 个字符
- 在Linux系统中,文件扩展名的用途为了使运维人员更好的区分不同的文件类型(后缀名本身不影响文件类型)
- 文件名称一定要见名知意
1.5 文件定位路径
二、文件的属性
2.1 文件类型
2.1.1 文件类型查看(file/ll)
- Linux下的文件类型并不由后缀名决定,后缀名仅仅是便于运维人员区别
- 查看文件类型方式一:
file 文件或目录名
[root@server1 ~]
/dev/sda: block special
[root@server1 ~]
/dev/tty1: character special
root@server1 ~]
/etc/hosts: ASCII text
[root@server1 ~]
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, stripped
[root@server1 ~]
dbt3_s1.sql: ASCII text, with very long lines
[root@server1 ~]
dbt3_s1.tar.gz: gzip compressed data, from Unix, last modified: Sat Aug 1 10:52:27 2015
[root@server1 ~]
/: directory
- 查看文件类型方式二:
ls -l 文件或目录名 看第一个字符
2.1.2 文件类型对应字母说明
文件类型对应字符 | 解释 |
---|
- | 普通文件(文本文档,二进制文件,压缩文件,电影,图片。。。) | d (dictory) | 目录文件(蓝色) | b (block) | 块设备文件(块设备)存储设备硬盘,U盘。例如:/dev/sda ,/dev/sda1 | c (char) | 字符设备文件(字符设备)打印机,终端。例如/dev/tty1 ,/dev/zero | s (socket) | 套接字文件 | p (pipe) | 管道文件 | l (link) | 链接文件(淡蓝色) |
2.2 文件时间
2.2.1 Linux下文件的三种时间
简名 | 全名 | 中文名 | 含义 |
---|
atime | access time | 访问时间 | 文件中的数据最后被访问的时间 | mtime | modify time | 修改时间 | 文件内容被修改的最后时间 | ctime | change time | 变化时间 | 文件的元数据发生变化。比如权限,所有者等 |
ll [--full-time#详细时间] 命令默认显示的是修改时间mtime
2.2.2 如何查看(stat 文件名)
- 时间戳:1970年1月1日0点0分0秒到现在的秒数
[root@server1 ~]
File: ‘anaconda-ks.cfg’
Size: 1246 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33574978 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-05-15 14:41:19.900999772 +0800
Modify: 2022-05-15 14:41:19.900999772 +0800
Change: 2022-05-15 14:41:19.900999772 +0800
Birth: -
文件:‘anaconda-ks.cfg’
大小:1246 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:33574978 硬链接:1
权限:(0600/-rw-------) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2022-05-15 14:41:19.900999772 +0800 atime查看内容
最近更改:2022-05-15 14:41:19.900999772 +0800 mtime修改内容
最近改动:2022-05-15 14:41:19.900999772 +0800 ctime文件属性,比如权限
创建时间:-
2.2.3 如何修改三种时间
2.3 文件inode与链接数
2.3.1 inode介绍(等到磁盘管理章节还会细讲)
- 格式化一块硬盘后会分文三个部分:
- 超级块(superblock):会存放文件系统
filesystem 的整体信息,包括inode/block 的总量、使用量、剩余量, 以及文件系统的格式与相关信息等 - 索引节点(inode):
- 记录文件的属性,如文件的权限,大小,修改时间,所有者等等。
- 一个文件占用一个inode,同时记录此文件的数据所在的block 号码。
- 默认一个inode表格128字节,一个block记录消耗4B,记录满了后会新建inode用于扩展。
- 数据块(block):真正用于存放数据的地方
- 如果我要查看file1文件内容,系统并不是按照文件名去查找,而是根据inode去查找。
- 具体流程:打开file1–>查看inode–>找到inode对应的数据块–>读取
2.3.2 查看inode号
[root@server1 tmp]
总用量 0
16784325 -rw-r--r-- 1 root root 0 8月 21 12:11 file1
[root@server1 tmp]
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 225K 399 225K 1% /dev
tmpfs 228K 1 228K 1% /dev/shm
tmpfs 228K 743 227K 1% /run
tmpfs 228K 16 228K 1% /sys/fs/cgroup
/dev/mapper/centos-root 8.5M 39K 8.5M 1% /
/dev/sda1 512K 334 512K 1% /boot
tmpfs 228K 1 228K 1% /run/user/0
2.3.3 硬链接
[root@server1 tmp]
[root@server1 tmp]
总用量 0
16784325 -rw-r--r-- 2 root root 0 8月 21 12:11 file1
16784325 -rw-r--r-- 2 root root 0 8月 21 12:11 h_file1
2.3.4 软链接
[root@server1 tmp]
[root@server1 tmp]
[root@server1 tmp]
16784325 -rw-r--r-- 1 root root 0 8月 21 12:11 file1
17184545 lrwxrwxrwx 1 root root 5 8月 21 12:16 sl_file1 -> file1
[root@server1 tmp]
[root@server1 tmp]
file1
2.4 文件大小
- 即文件所占磁盘的空间大小
- 查看方式一:通过
ll [-h] 查看
2.5 文件权限(参看下一章用户与权限管理部分)
三、文件的增删改查
3.1 创建相关
3.1.1mkdir命令
[root@server1 ~]
mkdir: 无法创建目录"/usr/local/nginx/conf": 没有那个文件或目录
[root@server1 ~]
3.1.2 touch命令
- 语法:
touch [选项] 文件名1 文件名2 … 文件名n - 功能:新建一个不存在的文件或更改文档或目录的日期时间
- 常用选项:
参数 | 说明 |
---|
-a 或
–time=atime 或
–time=access 或
–time=use | 只更改存取时间。没有指定时间字符串默认为当前时间。atime和ctime改变 | -m 或
–time=mtime
–time=modify | 只更改变动时间。没有指定时间字符串默认为当前时间 。mtime和ctime改变 | -d | 使用指定的日期时间,而非现在的时间,默认创建文件就是当前时间。atime和mtime改变 | -f | 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题 | -c 或–no-create | 不建立任何文档 | -r | 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同 | -t | 使用 [[CC]YY]MMDDhhmm[.ss] 世纪年月日分时秒方式的时间戳来指定创建文件的时间 也可以改变已存在文件的时间(atime和mtime改变) |
[root@server1 test]
[root@server1 test]
File: ‘file1’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 34146683 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-02-02 11:11:11.000000000 +0800
Modify: 2022-02-02 11:11:11.000000000 +0800
Change: 2022-05-15 18:26:37.783999995 +0800
Birth: -
[root@server1 test]
total 0
-rw-r--r-- 1 root root 0 Feb 2 11:11 file1
[root@server1 test]
[root@server1 test]
File: ‘file1’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 34146683 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-05-15 18:28:03.068999985 +0800
Modify: 2022-02-02 11:11:11.000000000 +0800
Change: 2022-05-15 18:28:03.068999985 +0800
Birth: -
[root@server1 test]
[root@server1 test]
File: ‘file1’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 34146683 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-05-15 18:28:03.068999985 +0800
Modify: 2022-05-15 18:29:14.646999976 +0800
Change: 2022-05-15 18:29:14.646999976 +0800
Birth: -
[root@server1 test]
[root@server1 test]
File: ‘file1’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 34146683 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-11-11 11:11:11.000000000 +0800
Modify: 2022-11-11 11:11:11.000000000 +0800
Change: 2022-05-15 18:30:04.822999970 +0800
Birth: -
3.2 删除相关
3.2.1 rmdir命令
- 语法:
rmdir [-p] dirName - 功能:删除空目录,非空则必须先清空
- rmdir是一个与mkdir相对应的命令。 mkdir是建立目录,而rmdir是删除目录。参数同mkdir
- 示例
3.2.2rm命令
选项说明:
-r :针对文件夹,代表递归删除,先把目录下的所有文件删除,然后在删除文件夹
-f :强制删除,不提示
* :表示所有通配符的一种
3.3 移动相关
3.3.1 cp命令
- 语法:
cp [选项] 源文件或目录 目标文件或目录 - 功能:复制文件或目录
- 说明:cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
- 常用选项:
参数 | 说明 |
---|
-f 或 --force | 强行复制文件或目录, 不论目的文件或目录是否已经存在 | -i 或 --interactive | 覆盖文件之前先询问用户 | -r | 递归处理,将指定目录下的文件与子目录一并处理 若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理 | -R 或 --recursive | 递归处理,将指定目录下的文件及子目录一并处理 | -v | 显示操作过程 |
3.3.2 mv命令
- 语法:
mv file1 file2 - 功能:用于移动文件或改名
- 示例
3.4 查看文件内容相关
3.4.1 cat命令
- 语法:
cat [选项] filename - 功能:正序输出文件的内容
- 示例
选项说明:
-n:显示行号
3.4.2 tac命令
- 语法:
tac filename - 功能:倒序输出文件的内容
- 示例:
3.4.3 head命令
- 语法:
head [选项] filename - 功能:查看一个文件的前n 行,默认显示前10 行
- 示例:
3.4.4 tail命令
- 语法:
tail [选项] filename - 功能:查看一个文件的后n 行,默认显示后10 行
- 示例:
3.4.5 more命令
- 语法:
more [选项] filename - 功能:分屏显示文件内容
- 注意:more打开文件时会把文件的全部内容加载到内存中,如果文件较大,可能会出现卡顿情况,不推荐使用
- 示例:
交互操作 | 作用 |
---|
Enter 回车 | 向下移动一行 | d | 向下移动半页 | space 空格 | 向下移动一页 | b | 向上移动一页,后期引入功能,早期more只能前进不能后退 | q | 退出 |
3.4.6 less命令
- 语法:
less [选项] filename - 功能:分屏显示文件内容
- 注意:less加载文件,是一点一点的进行加载的。相较more,读取大文件时,效率比较高。且more阅读完后,会将阅读内容显示在终端,而less不会,相对安全一些(推荐)
- 示例
选项说明:
-N:显示行号
交互操作 | 作用 |
---|
Enter 回车 | 向下移动一行 | d | 向下移动半页 | space 空格 | 向下移动一页 | b | 向上移动一页 | 上下方向键 | 向上与向下移动,less命令特有功能键 | / 字符串 | 搜索 | q | 退出 |
3.5 查看目录结构
3.5.1 tree命令
- 语法:
tree dirname - 功能:将目录及其之下的文件/目录以树状形式展示
- 示例
[root@server1 ~]
[root@server1 ~]
/tmp
├── mysql.sock
└── mysql.sock.lock
[root@server1 ~]
.
├── anaconda-ks.cfg
├── dbt3_s1.sql
├── dbt3_s1.tar.gz
└── hard_link
四、文件的压缩与解压
4.1 tar命令
4.1.1 打包
选项说明:
-c :打包
-f :filename,打包后的文件名
-v :显示打包的进度
-t :查看打包的文件内容
4.1.2 压缩
选项说明:
cf :对文件或文件夹进行打包
-v :显示压缩进度
-z :使用gzip压缩工具把打包后的文件压缩为.gz
-j :使用bzip2压缩工具把打包后的文件压缩为.bz2
-J :使用xz压缩工具把打包后的文件压缩为.xz
压缩速度:gzip > bzip2 > xz
压缩率:gzip < bzip2 < xz
4.1.3 解压
选项说明:
xf :对文件或文件夹进行解包
其他同压缩
4.2 zip&unzip
4.2.1 zip压缩
选项说明:
-r :递归压缩,主要针对的是文件夹
zip格式在Windows和Linux中可以通用
4.2.2 unzip解压缩
五、文件的查找
5.1 which
- 语法:
which filename - 功能:在环境变量
$PATH 设置的目录里查找符合条件的文件 - 示例
[root@server1 ~]
/usr/sbin/poweroff
[root@server1 ~]
alias ls='ls --color=auto'
/usr/bin/ls
5.2 locate
- 语法:
locate filename - 功能:locate 要搜索的文件或目录名,非实时的从数据库里快速搜索文件或目录
- 示例
[root@server1 ~]
[root@server1 ~]
[root@server1 ~]
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
[root@server1 ~]
...
- 默认情况下,locate数据库会忽略某些文件夹,可以在配置文件中修改
[root@server1 ~]
PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fuse.glusterfs ceph fuse.ceph"
PRUNENAMES = ".git .hg .svn"
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph"
5.3 find
5.3.1 find查找文件
- 语法:
find dirname [选项] filename [选项] [处理动作] - 功能:查找指定目录下的文件
- 选项说明:
参数 | 说明 |
---|
-name | 指定文件名,支持*通配符 | -type | f代表普通文件、d代表文件夹 | -mtime | 指定修改时间,默认单位为天 | -size | 指定文件大小,常用单位k,M,G | -iname | 按照名字,忽略大小写 | -user | 按照所有者 | -group | 按照所属组 | -perm | 按照文件权限 | -a | 多个条件and并列 | -o | 多个条件or并列 | -not | 条件取反 |
5.3.2 找到后的处理动作
-print
-ls
-delete
-fls /path/to/somefile
-ok COMMAND {}\
-exec COMMAND {} \
{}
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;另 一种方式可规避此问题 find | xargs COMMAND
|