第二周、文件管理命令及数据储存原理

Linux文件系统命名规则

文件名最长255字节
文件名+路径最长4095字节
除了斜杠和NUL,所有字符都可用
标准Linux文件系统(如ext4、xfs),文件名称大小写敏感

系统目录用途

 /boot   启动文件、内核
 /etc    配置文件
 /dev    硬件设备
             b:块设备,以块为单位(每块大小为4K),随机访问
             c:字符设备,以字符为单位,线性访问
 /bin    二进制文件(管理员使用)
 /sbin   二进制文件(普通用户使用)
 /tmp    临时文件
 /usr    二层根
 /var    日志
 /proc   内存数据,运行中的进程信息,大小为0
 /sys    内存数据,映射硬件信息,大小为0
 /lib    库
 /root   root家目录
 /mnt    临时挂载点

开机状态下刷新新加载硬件设备及定义别名

[root@localhost ~]#echo '- - -'> /sys/class/scsi_host/host0/scan ;echo '- - -'> /sys/class/scsi_host/host2/scan 
[root@localhost ~]#alias scandisk="echo '- - -'> /sys/class/scsi_host/host0/scan ;echo '- - -'> /sys/class/scsi_host/host2/scan"
[root@localhost ~]#scandisk 
[root@localhost ~]#lsblk 

数据表示方式及inode

数据在设备储存有两种格式:元数据(matedata)和数据(data)
每个文件都有唯一的索引节点,索引节点以inode table的形式储存有关文件的信息(元数据),包括(如下图所示):
   1、owner  所有者
   2、time   时间戳
   3、size   大小
   4、mode   权限
   5、指针

在这里插入图片描述

目录表示方式

目录数据存储该目录下文件的名称及inode,读取文件时通过文件查找索引号,再根据索引号找到该文件的inode,根据指针查看数据

在这里插入图片描述

一般inode占用分区的1%
rm删除文件实际是删除掉改文件的inode,并将该目录下的文件名称及节点号删掉,data实际没有删除

查看元数据相关信息

[root@localhost ~]#ll -i
#索引节点 文件类型 链接数 所有者权限 所有组权限 其他组权限 所有者 所有组 大小 数据修改时间(mtime) 文件名
201326658 -rw-------. 1 root root 2027 Apr  8 20:27 anaconda-ks.cfg
201326669 -rw-r--r--. 1 root root 2056 Apr  8 20:39 initial-setup-ks.cfg
文件类型
-    普通文件            d    目录                 b    块设备          p   管道
l    链接文件            c    字符设备              s    套接字

文件权限(特殊权限后面详细介绍)

r(4)    读权限              w(2)    写权限              x(1)    执行权限  

修改文件时间戳

stat 查看文件详细信息
access time:访问时间                     atime  读取文件内容
modify time:数据修改时间                  mtime  修改数据
change time: 修改权限改变时间              ctime  修改元数据
[root@localhost ~]#stat anaconda-ks.cfg 
  File: ‘anaconda-ks.cfg’
  Size: 2027      	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 201326658   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-04-08 20:34:49.762014449 +0800
Modify: 2020-04-08 20:27:47.930676747 +0800
Change: 2020-04-08 20:27:47.930676747 +0800
 Birth: -

创建已存在文件修改时间戳
touch创建文件已存在时会修改所有时间,不改变内容
>会修改ctime atime,覆盖内容
>> 不会修改时间,不修改内容
[root@localhost /data]#stat abc 
Access: 2020-04-22 21:06:31.417406073 +0800
Modify: 2020-04-22 21:06:31.417406073 +0800
Change: 2020-04-22 21:06:31.417406073 +0800
[root@localhost /data]#touch abc
[root@localhost /data]#stat abc 
Access: 2020-04-22 21:07:05.399403660 +0800
Modify: 2020-04-22 21:07:05.399403660 +0800
Change: 2020-04-22 21:07:05.399403660 +0800
[root@localhost /data]#>> abc
[root@localhost /data]#stat abc
Access: 2020-04-22 21:07:05.399403660 +0800
Modify: 2020-04-22 21:07:05.399403660 +0800
Change: 2020-04-22 21:07:05.399403660 +0800
[root@localhost /data]#> abc
[root@localhost /data]#stat abc
Access: 2020-04-22 21:07:05.399403660 +0800
Modify: 2020-04-22 21:08:20.667398316 +0800
Change: 2020-04-22 21:08:20.667398316 +0800
[root@localhost /data]#

修改数据改变时间戳
修改用户改变mtime
修改数据改变ctime
读取数据修改atime
[root@localhost /data]#stat abc    #查看时间
Access: 2020-04-22 21:07:05.399403660 +0800
Modify: 2020-04-22 21:08:20.667398316 +0800
Change: 2020-04-22 21:08:20.667398316 +0800
[root@localhost /data]#cat abc    #读取内容
[root@localhost /data]#stat abc
Access: 2020-04-22 21:17:33.841359038 +0800    #atime改变
Modify: 2020-04-22 21:08:20.667398316 +0800
Change: 2020-04-22 21:08:20.667398316 +0800
[root@localhost /data]#echo abc >> abc         #追加内容(改变数据)
[root@localhost /data]#stat abc
Access: 2020-04-22 21:17:33.841359038 +0800  
Modify: 2020-04-22 21:18:15.819356057 +0800   #mtime改变
Change: 2020-04-22 21:18:15.819356057 +0800   #ctime改变
[root@localhost /data]#chown wang abc         #改变用户(改变元数据)
[root@localhost /data]#stat abc
Access: 2020-04-22 21:17:33.841359038 +0800
Modify: 2020-04-22 21:18:15.819356057 +0800
Change: 2020-04-22 21:18:37.584354512 +0800     #ctime改变

mtime改变ctime会改变,atime读取时间超过一天会修改(平凡读取修改时间会增加系统负担)

软硬链接区别

软链接 硬链接
本质 不同文件 同一文件不同名称
命令 ln -s ln
跨分区 支持 不支持
目录 支持 不支持
链接数 不变 增加
inode 不一样 与源文件一样
相互关系 依赖 平等
相对路径 相对于链接文件 相对于当前目录
文件类型 l 与源文件一致
[root@localhost /data]#ll     #查看链接数
total 4
drwxr-xr-x. 4 root root   57 Apr 12 04:40 backup
-rw-r--r--. 1 root root 2618 Apr 12 02:57 reset.sh
drwxr-xr-x. 2 root root   59 Apr 12 05:02 shtest
[root@localhost /data]#ln backup backup.link   #目录硬链接创建报错
ln: ‘backup’: hard link not allowed for directory
[root@localhost /data]#ln reset.sh reset.sh.link    #创建硬链接
[root@localhost /data]#ll
total 8
drwxr-xr-x. 4 root root   57 Apr 12 04:40 backup
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh     #链接数增加
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh.link
drwxr-xr-x. 2 root root   59 Apr 12 05:02 shtest
[root@localhost /data]#ln -s backup backup.link    #创建目录软链接
[root@localhost /data]#ll
total 8
drwxr-xr-x. 4 root root   57 Apr 12 04:40 backup       #链接数不变,文件类型为d
lrwxrwxrwx  1 root root    6 Apr 22 21:11 backup.link -> backup    #文件类型为l
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh.link
drwxr-xr-x. 2 root root   59 Apr 12 05:02 shtest
[root@localhost /data]#ln -s ../data/backup /backup.link    #相对于链接文件的相对路径
[root@localhost /data]#cd /
[root@localhost /]#ll backup.link/
total 0
drwxr-xr-x. 2 root root  6 Apr 12 04:37 etc2020-04-12
drwxr-xr-x. 3 root root 17 Apr 12 04:40 etc2020-04-12-04:40:20
[root@localhost /]#ll backup.link
lrwxrwxrwx 1 root root 14 Apr 22 21:13 backup.link -> ../data/backup
[root@localhost /]#rm -rf /data/backup     #删除文件
#删除文件后软链接报错,依赖关系

在这里插入图片描述
#创建新文件,软链接不再报错,软链接只识别名称,不识别内容

在这里插入图片描述

#删除目录软链接时,不要带/,否则删除的是目录里面的内容,软链接本身没有删除

文件管理类命令

pwd
显示当前工作目录的绝对路径
[root@localhost /]#ll backup.link
lrwxrwxrwx 1 root root 14 Apr 22 21:13 backup.link -> ../data/backup
[root@localhost /backup.link]#pwd    #显示链接路径(默认去掉-L)
/backup.link
[root@localhost /backup.link]#pwd -P   #显示真实路径
/data/backup
basename
选取文件名
[root@localhost /backup.link]#basename /etc/sysconfig/network-scripts/ifcfg-ens33
ifcfg-ens33
dirname
选取文件目录
[root@localhost /backup.link]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33
/etc/sysconfig/network-scripts
#当文件时变量是常用
cd
改变当前工作目录
cd -   回到前一工作目录
cd ~  回到家目录(cd)
cd ..  切换到父目录
[root@localhost /backup.link]#cd
[root@localhost ~]#cd -
/backup.link
[root@localhost /backup.link]#cd ~
[root@localhost ~]#cd -
/backup.link
[root@localhost /backup.link]#cd ..
[root@localhost /]#
ls
列出当前目录的内容或指定目录
ls -l    显示额外信息ll
ls -a    显示隐藏文件
ls -d    显示目录
ls -i    显示节点ll -i
[root@localhost /data]#ll 
total 8
drwxr-xr-x  2 root root   16 Apr 22 21:44 backup
lrwxrwxrwx  1 root root    6 Apr 22 21:11 backup.link -> backup
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh.link
drwxr-xr-x. 2 root root   59 Apr 12 05:02 shtest
[root@localhost /data]#ll -d
drwxr-xr-x. 4 root root 90 Apr 22 21:21 .
[root@localhost /data]#ll -i
total 8
70 drwxr-xr-x  2 root root   16 Apr 22 21:44 backup
68 lrwxrwxrwx  1 root root    6 Apr 22 21:11 backup.link -> backup
69 -rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh
69 -rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh.link
67 drwxr-xr-x. 2 root root   59 Apr 12 05:02 shtest
[root@localhost /data]#ll -a
total 12
drwxr-xr-x.  4 root root   90 Apr 22 21:21 .
dr-xr-xr-x. 20 root root 4096 Apr 22 21:13 ..
drwxr-xr-x   2 root root   16 Apr 22 21:44 backup
lrwxrwxrwx   1 root root    6 Apr 22 21:11 backup.link -> backup
-rw-r--r--.  2 root root 2618 Apr 12 02:57 reset.sh
-rw-r--r--.  2 root root 2618 Apr 12 02:57 reset.sh.link
drwxr-xr-x.  2 root root   59 Apr 12 05:02 shtest
touch
创建新文件
stat
显示文件的所有信息
cp
复制文件
目标不存在 目标存在是目录 目标存在是文件
一个文件 创建一个一样的新文件 目录中创建新文件,若已有则覆盖 覆盖
多个文件 报错 目录下创建新文件 报错
目录 创建目录 改目录下创建新目录 报错
cp -av   备份文件显示过程
cp -avb 目标存在,覆盖前先备份,形式为file~
[root@localhost /data]#cp -av /etc /data
[root@localhost /data]#ls
backup  backup.link  etc  reset.sh  reset.sh.link  shtest
[root@localhost /data]#ls shtest/
backup.sh  disk.sh  reset.sh  systeminfo.sh
[root@localhost /data]#cp -avb reset.sh shtest/
cp: overwrite ‘shtest/reset.sh’? y
‘reset.sh’ -> ‘shtest/reset.sh’ (backup: ‘shtest/reset.sh~’)
[root@localhost /data]#ls shtest/
backup.sh  disk.sh  reset.sh  reset.sh~  systeminfo.sh
mv
移动文件及重命名(文件存在)
-b  目标存在先备份
[root@localhost /data]#ls
backup  backup.link  etc  reset.sh  reset.sh.link  shtest
[root@localhost /data]#mv reset.sh.link reset.sh.l  #重命名
[root@localhost /data]#ls
backup  backup.link  etc  reset.sh  reset.sh.l  shtest
rename
批量改名
rm
rm -rf  删除文件或目录
#Linux系统运行中的文件也可删除,此命令慎用,可用mv代替移除到特定文件夹,之后再删
#rm -rf /*      rm -rf /data /*   删库跑路
tree
显示目录树
-d  显示目录
-L  显示层级
mkdir
创建目录
-pv  创建多层目录,显示过程
rmdir
删除空目录

通配符

用于文件名,注意与正则表达式区分
符号 涵义
* 零个或多个字符
? 一个字符
~ 当前用户家目录
[0-9] 匹配数字
[a-z] aAbB…z字母(不包括Z)
[A-Z] AbB…Z字母(不包括a)
[wang] 列表中的任何一个字符
[^wang] 列表中所有字符意外的字符
[:digit:] 数字
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 大小写字母
[:alnum:] 大小写字母+数字
[:space:] 水平或垂直空白字符

vim使用

搜索替换
复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
vim支持一般正则表达式
[root@localhost /data]#cp /etc/profile .
[root@localhost /data]#cat profile 
# /etc/profile
pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
[root@localhost /data]#vim profile   #扩展命令下输入
:%s#^[[:space:]]\+\(.*\)$#\1#
[root@localhost /data]#cat profile 
# /etc/profile
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
设置tab缩进为4个字符
在/etc/vimrc中设置set tabstop=4 

猜你喜欢

转载自blog.csdn.net/wauzy/article/details/105686464